Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Pokaż wątki - TNTalib

Strony: [1]
1
Cześć!
Poszukuję pliku, w którym jest dokładny obszar świata pokryty przez mapę w Gothic 1. Jakiś odpowiednik Doc_SetLevelCoords   (Document, -6900, 11800, 21600, -9400); , ale dla G1. Koniecznie potrzebuję DOKŁADNYCH koordynatów, a przeszukiwanie skryptów nic nie dało. Może nie mam czegoś wyeksportowanego, albo szukam niedokładnie  ;( Czy ktoś może poratować informacją, gdzie jest plik z tymi danymi? Przeszukiwałem forum i też nic takiego nie znalazłem. Może jest to zawarte gdzieś poza skryptami?

2
Spacer / Czy można jakoś wyeksportować waynet do pliku?
« dnia: 2021-04-14, 18:45 »
Siemka,
od jakiegoś czasu bawię się w tworzenie różnych aplikacji w oparciu o Gothica. Zabrałem się wczoraj za projekt interaktywnej mapy gry (coś na zasadzie, że pokazuje wszystkie przedmioty do podniesienia na świecie, gdzie stoi jaki NPC o konkretnej godzinie, gdzie iść żeby wykonać misję itp.). W spacerze przy użyciu macro połączyłem zeny w jeden plik i wyeksportowałem jako uncompiled ascii. Napisałem sobie programik, który wyciągnął z tego zena wszystkie położenia waypointów, przedmiotów, kowadeł, pochodni itd. Mam jednak problem z eksportem waynetu. Przykładowy kod waypointu i czegoś co prawdopodobnie może definiować waynet to: [wayr20 zCWaypoint 0 16901]
wpName=string:LOCATION_11_12_01
waterDepth=int:0
underWater=bool:0
position=vec3:-8083.31982 4737.15039 30173.6797
direction=vec3:0.139173165 0 -0.990267634
[]
[wayl21 § 0 16900]
[]
[wayr21 § 0 16890]
[]
[wayl22 § 0 16890]
[]
[wayr22 § 0 16893]
[]
[wayl23 § 0 16893]
[]
[wayr23 § 0 16895]
[]
[wayl24 § 0 16899]
[]
[wayr24 § 0 16901]
[]
[wayl25 § 0 16901]
[]
[wayr25 § 0 16893]
[]

Uznałem, że przy definiowaniu waypointu, jego id to ostatnia liczba w nawiasie kwadratowym
Cytuj
[wayr20 zCWaypoint 0 16901]
(w tym przypadku 16901), a dalej waynet definiują nawiasy kwadratowe ze znakiem paragrafu na środku. Założyłem, że będzie działało to w ten sposób, że fragmenty z paragrafami mówią z jakim waypointem łączy się waypoint o id 16901, ale jednak coś jest nie tak. O ile takie podejście  faktycznie czasem generuje poprawne połączenia to w większości są to dziwne, nieistniejące połączenia pokroju waypoint startowy-waypoint obozu bractwa w linii prostej. Występuje także wiele przerw w tak wygenerowanym waynecie, typu połowa ścieżki faktycznie jest połączona, później nie ma nic, a później są jakieś randomowe połączenia.
Czy ktoś może wie, gdzie przechowywany jest jakiś plik waynetu, albo jak taki plik wyeksportować ze spacera? Byłbym bardzo wdzięczny za odpowiedź i jakąkolwiek pomoc w tym temacie :)

3
Skrypty / [TUTORIAL] Efekt Ulu-Mulu w G2NK
« dnia: 2015-02-15, 19:52 »
Witam,
Jest to mój pierwszy tutorial, więc proszę o wyrozumiałość;) Na pewno myślał ktoś kiedyś o przeniesieniu Ulu-Mulu z pierwszego Gothica do Nocy Kruka. Broń ta powodowała, że kiedy mieliśmy ją założoną to orkowie nas nie atakowali. Właśnie to dzisiaj zrobimy.

1. Tworzymy broń.
Jak pewnie każdy się domyślił, najpierw musimy stworzyć zwykłą, podstawową broń;p Nie będę tego tłumaczył, jest wiele tutoriali jak robić broń.
 
Cytuj
INSTANCE LAGA_MOCY (C_Item)
{   
   name             =   "Laga Mocy"; 

   mainflag          =   ITEM_KAT_NF;
   flags             =   ITEM_AXE;   
   material          =   MAT_WOOD;

   value             =   1;

   damageTotal        =    1;
   damagetype          =   DAM_BLUNT;
   range             =     RANGE_BauMace;      

   cond_atr[2]         =   ATR_STRENGTH;
   cond_value[2]        =   1;
   visual             =   "ItMw_010_1h_Club_01.3DS";

   description         = name;
   TEXT[0]            = "Groźnie wyglądająca laga.";
   TEXT[1]            = "Orkowie i Wargi Ci nie podskoczą...";
   TEXT[2]            = NAME_Damage;               COUNT[2]   = damageTotal;
   TEXT[3]          = NAME_Str_needed;            COUNT[3]   = cond_value[2];
   TEXT[4]          = NAME_OneHanded;
   TEXT[5]            = NAME_Value;               COUNT[5]   = value;
};

2. Wyszukujemy potrzebne informacje.
Chcemy uzyskać efekt, że orkowie i wargi nie będą nas atakować. Szukamy w plikach gry skryptów orków i warga. Znajdują się one w pliku
Cytuj
_Work\data\Scripts\Content\Story\NPC\Monster\MST_Warg.d
oraz pliki orków znajdują się w katalogu
Cytuj
_Work\data\Scripts\Content\Story\NPC\Orc
W przypadku orków interesuje nas zablokowanie całej gildii, czyli interesuje nas informacja
Cytuj
GIL_ORC
Jednak przeglądając pliki warga zauważamy, że ma on gildię
Cytuj
GIL_WOLF
Do tej gildii należą również wilki, lodowe wilki itd., więc blokada tej gildii powodowałaby również brak ataku ze strony tamtych zwierząt. Możemy też zauważyć coś takiego:
   
Cytuj
aivar[AIV_MM_REAL_ID]         =    ID_WARG;
Ten aivar definiuje tak jakby subgildię, precyzując, czy jest to zwykły wilk, czy warg. To jest druga interesująca nas informacja.

3. Edycja pliku B_MM_AssessEnemy.d, czyli powodujemy, że orkowie nas nie atakują.
Do pliku
Cytuj
B_MM_AssessEnemy.d
który znajduje się w katalogu
Cytuj
_Work\data\Scripts\Content\AI\Monster\B_Monster
dopisujemy na samym początku pod
Cytuj
func void B_MM_AssessEnemy ()
{
ten kod:
Cytuj
      var C_Item LAGA_MOCY_eqwep;
      var C_Item LAGA_MOCY_rdwep;
      LAGA_MOCY_eqwep = Npc_GetEquippedMeleeWeapon(hero);
      LAGA_MOCY_rdwep = Npc_GetReadiedWeapon(hero);
      if (Hlp_IsItem(LAGA_MOCY_eqwep, LAGA_MOCY) == TRUE) ||
      (Hlp_IsItem(LAGA_MOCY_rdwep, LAGA_MOCY) == TRUE) &&
      (self.guild == GIL_ORC) ||
      (self.aivar[AIV_MM_REAL_ID] == ID_WARG)
      {
         return;
      };

Pierwsze dwie linijki definiują zmienne. Dwie kolejne sprawdzają, czy nasza broń jest założona lub wyciągnięta i przypisują wyniki do zmiennych. Następnie mamy warunek mówiący, że jeśli nasza broń jest założona lub wyciągnięta i nasz przeciwnik ma gildię orka lub subgildię warga to przeciwnicy nie traktują nas jako wroga.

4. Edycja pliku B_Attack.d, czyli powodujemy, że nasi przyjaciele nie atakują orków.
Kiedy byliśmy sami - było OK, ale kiedy byliśmy prowadzeni przez jakiegoś NPC to on atakował orki, które po tym jak go zabiły, atakowały nas. Chcąc tego uniknąć musimy wprowadzić podobny do wcześniejszego warunek do pliku
Cytuj
B_Attack.d
znajdującego się w katalogu
Cytuj
_Work\data\Scripts\Content\AI\Human\B_Human
Znowu na samym początku pliku pod wpisem:
Cytuj
func void B_Attack (var C_NPC slf, var C_NPC oth, var int attack_reason, var int wait)
{
musimy wpisać:
Cytuj
      var C_Item LAGA_MOCY_eqwep;
      var C_Item LAGA_MOCY_rdwep;
      LAGA_MOCY_eqwep = Npc_GetEquippedMeleeWeapon(hero);
      LAGA_MOCY_rdwep = Npc_GetReadiedWeapon(hero);
      if (Hlp_IsItem(LAGA_MOCY_eqwep, LAGA_MOCY) == TRUE) ||
      (Hlp_IsItem(LAGA_MOCY_rdwep, LAGA_MOCY) == TRUE) &&
      (oth.guild == GIL_ORC) ||
      (oth.aivar[AIV_MM_REAL_ID] == ID_WARG)
      {
         return;
      };
Jest to dokładnie to samo, tylko zamiast self napisane jest oth. Chodzi o to, że patrząc oczami Bezia, w trakcie pojedynku to Bezio byłby other, a postać - self;) Teraz wystarczy zreparsować skrypty i mamy nasze "Ulu-Mulu";)
Kolorem zielonym zaznaczono miejsca, gdzie należy wpisać INSTANCE naszej broni.

Chciałem podziękować Bogdanowi Zwei za nakierowanie mnie, które pliki powinienem edytować, żeby to zadziałało;)

Wybaczcie momentami chaotyczne tłumaczenie, kiepski ze mnie nauczyciel;p

Tutorial kopiujcie ile wejdzie, ale proszę napisać, że pochodzi on z tego forum i że ja jestem autorem;)

Pozdrawiam, TNTalib

Strony: [1]
Do góry