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.


Wiadomości - TNTalib

Strony: [1]
1
Dzięki, tak myślałem, że nie będzie dokładnej wartości i będzie trzeba robić przybliżone pomiary Blenderem  ;(

Poprawne koordynaty zasięgu dla pliku mapy bezpośrednio eksportowanego z plików gry to w przybliżeniu:

LEWY GÓRNY RÓG:
X: -88838 lub -94000
Y: 64729 lub 63000

PRAWY DOLNY RÓG:
X: 88071 lub 90000
Y: -66924 lub -66000

Podaję po dwie wartości - pierwsza to odczyt z Blendera, a druga to wartości, które wyszły mi po próbie synchronizacji mapy z waynetem. Może gdzieś popełniłem błąd, ale działa i może komuś się to przyda :D

2
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?

3
@Adanos dzięki, o tym nie pomyślałemXD przy łączeniu po kolei powstaje bardziej poprawny waynet, ale nadal jest mnóstwo złych połączeń. Obliczając ich długość i usuwając wszystko powyżej 9000 wychodzi coś jak oryginalny waynet, ale nie jestem pewny, czy taki zabieg nie usunął jakiegoś poprawnego połączenia. Pozostaje albo napisanie jakiegoś dziwnego algorytmu, aby to zrobił, albo szukanie innego rozwiązania. Ale w sumie nadal mnie to dziwi, że Gothic nie ma tego opisanego w dobry sposób na poziomie zena, albo skryptów.

[EDIT: Jednak po usunięciu segmentów o długości powyżej 9000 nie ma dobrych efektów, wewnątrz obozów itd. nadal jest gęsta sieć randomowych połączeń. Ośmielę się stwierdzić, że złych połączeń jest kilkukrotnie więcej niż poprawnych. Na zewnątrz w miejscach, gdzie sieć jest gęstsza wygląda to podobnie.]

@Fabio dzięki, parzyłem też coś o programie Spacer.NET, jak będę miał chwilkę to na pewno wypróbuję :) listę i położenia punktów wszystkich waypointów już mam, mam nadzieję, że ten program pozwoli na eksport połączeń między nimi

[DUŻY EDIT]
Udało się! Może komuś się ta wiedza przyda więc opiszę jak to działa. Interesują nas tylko nagłówki w nawiasie kwadratowym np.
[wayl69 zCWaypoint 0 5160]
lub
[wayr69 § 0 5157].
Jak widać dzielą się one na cztery segmenty oddzielone spacją. Segment pierwszy określa którym wierzchołkiem odcinka o danym identyfikatorze będzie określony waypoint. Drugi i trzeci segment zupełnie nas nie interesuje. Czwarty segment to ID waypointu. Tłumacząc teraz podane przykłady:
1. [wayl69 zCWaypoint 0 5160] - lewym wierzchołkiem drogi 69 jest waypoint o id 5160
2. [wayr69 § 0 5157] - prawym wierzchołkiem drogi 69 jest waypoint o id 5157

Na tej podstwie tworząc wszystkie linie powstaje nam kompletny waynet.

4
No ale skąd gra wie, które waypointy jak połączyć? Gdzieś musi to być zapisane, bo nie działa to automatycznie na zasadzie najbliższego sąsiada, ani żadnej innej zautomatyzowanej bo topologia tej sieci nie istnieje. Tak samo jak wstawimy nowy waypoint to do czasu aż go nie połączymy z waynetem to będzie on "zawieszony w próżni", więc gdzieś musi być zapisana informacja, jeżeli połączymy go z innym. Z resztą mój eksperyment łączy część waypointów poprawnie, tylko nie wiem dlaczego generuje też nieistniejące połączenia. Poza tym np. REGoth umie to jakoś odczytać, patrzyłem chwilę w kod źródłowy, jednak nie bardzo rozumiem jak to działa.

5
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 :)

6
To już pewnie też ikarusy itp. ale za pomocą overlaymds możesz zrobić ile chcesz poziomów (jeżeli poziom nauki broni jest przedstawiony jako zmienna do której jest dostęp z poziomu skryptu). po prostu napiszesz coś w stylu
if (umiejetnosc_walki >=10 && umiejetnosc_walki <=30)
     {
           funkcja overlaymds
     };
i dla takiego przedziału umiejętności będzie jakaś animacja, a takich if-ów możesz wstawiać ile chcesz

7
https://themodders.org/index.php?topic=5900.0 - drugi post od góry autorstwa Oreca mówi o AssessDamage, wystarczy zrobić coś niemal identycznego tylko zamiast efektu czaru wystarczy zostawić i zmodyfikować opcję dodatkowych obrażeń.

https://themodders.org/index.php?topic=6753.0 - tutorial o dodaniu systemu reputacji, na takiej zasadzie można zrobić punkty umiejętności. Nie pamiętam czy wartość takiej zmiennej zapisywała się domyślnie podczas save gry, więc jeżeli po wczytaniu/ponownym uruchomieniu gry wartość się wyzeruje to pytaj kogoś jak to naprawić :D

Ikarusy to już raczej wyższa szkoła jazdy, więc lepiej chyba najpierw poznać podstawowe skrypty w stopniu przynajmniej średnim niż od razu patrzeć na ikarusa, bo to może być dość masochistyczne :D

8
(...) Technicznie dalej będzie to broń 2h (...)

2h lub 1h, zależy typu w skrypcie :D Na upartego można próbować to udoskonalić dodając jakąś zmienną, która by odpowiadała za umiejętność walki taką bronią i potem w AssessDamage (jeśli się nie mylę :P) napisać jakiś modyfikator obrażeń, ale nadal bazowe obrażenia będą zależne od umiejętności walki 1h/2h. Ciekawą opcją byłoby dodanie funkcji bazowe_obrazenia + bazowe_obrazenia * procent_walki_nowa_bronia, na pierwszy rzut oka niby byłoby to marnowanie punktów umiejętności, ale później podwojone obrażenia to byłoby coś  :D

9
Nie jestem pewny i nie chcę wprowadzać w błąd, ale kiedyś chyba jak się bawiłem animacjami to w skrypcie wybranej broni dopisywałem funkcję on_equip i dawałem ApplyOverlayMDS ze zmienioną animacją walki. Minusem jest to, że musisz dla każdej broni, w której chcesz inną animację dopisać ten element podmieniający domyślne animacje. Nowego typu broni tak łatwo niestety się nie dopisze;/

10
Banda Quentina / Błędy wersji 1.4.91
« dnia: 2017-08-21, 00:36 »
Hmmm, w sumie nie sprawdzałem zapis>wczytaj (EDIT: Sprawdziłem to w Edycji Rozszerzonej i w Mrocznych Tajemnicach - nie działa w żadnym modzie). Rozmawianie nic nie pomaga, wygląda to jakby po prostu w jakimś waypoincie po walce załączała się jakby rutyna GUARD i prowadzenie nas nie działa do czasu, aż NPC znajdzie się bliżej innego waypointu. W sumie dziwne, bo psuje się też to przy postaciach z podstawowego Gothica, które prowadziły nas właśnie w podstawce (Mordrag), więc może to wina SystemPacka? (EDIT: Ogrywam właśnie Mroczne Tajemnice, tam też Mordrag się zwiesił bez powodu, więc prawdopodobnie to SystemPack...)

Przy okazji przypomniał mi się jeszcze jeden błąd:
W misji, kiedy atakowaliśmy chyba z Doylem plac wymian i szukaliśmy dokumentów, Doyle zagadał, że wraca zanim znalazłem ostatni dokument, myślałem, że to już wszystkie, poszedłem do Quentina i nie było opcji dialogowej. Okazało się, że brakowało mi jednego dokumentu (w skrzyni koło Opuszczonej Kopalni), ale opcji u Quentina dalej nie było, chociaż quest nadal był w bierzących zadaniach. Po wczytaniu zapisu przed misją i wykonaniu jej tak, że miałem wszystkie dokumenty przed zagadaniem przez Doyla wszystko było ok.

11
Banda Quentina / Błędy wersji 1.4.91
« dnia: 2017-08-19, 23:18 »
Właśnie przeszedłem modzika, bardzo przyjemny, fajnie było się poczuć znowu "nowym" w tej grze ;D

Błędy, które wyhaczyłem:
1. Błąd opisu tobołka Żelaznej Garoty (brakuje słowa kajdanki)

2. Błędna nazwa Nowicjusza - bandyty, którzy atakują nas przy Starym Obozie (duża litera na końcu)

3. O ile dobrze pamiętam to kiedy rozmawiamy z Corristo w sprawie kamienia z Opuszczonej Kopalni (nie pamiętam czy przed oddaniem kamienia, czy w dialogu, gdzie kamień oddajemy) Bezimienny wypowiada kwestię, którą powinien powiedzieć Corristo

4. Kiedy mówimy Xardasowi, że chcemy przekuć Uriziela na broń jednoręczną, pierwsza wypowiadana kwesia jest z innego dialogu (chyba "Od razu wyruszam w drogę" czy jakoś tak)

5. W czasie walki, kiedy mam wyciągniętą broń mogę się focusować na przedmioty i martwe NPC, które nawet nic przy sobie nie mają.

6. Czasem podczas, gdy NPC nas prowadzi (np. Mordrag, Torlof i chyba Quentin, gdy idziemy pomóc Draxowi zabić strażników) po stoczeniu walki z potworami NPC zawiesza się i nie prowadzi nas dalej, wtedy trzeba się w niego zamienić i odejść dość daleko, wycelować z łuku do Bezimiennego i zmienić się w nas

12
Skrypty / [TUTORIAL] Efekt Ulu-Mulu w G2NK
« dnia: 2016-03-04, 03:20 »
Jak pisałem skrypt to z tego co pamiętam sprawdzałem na kilku innych zwierzętach i one atakowały, ale to było dawno więc nie jestem pewny na 100% :D Może faktycznie cos spieprzyłem?... Sprawdzę to może dzisiaj wieczorem, albo jutro i dam znać, a jak będzie trzeba to spróbuję to naprawić. Tak czy inaczej, dzięki za info, postaram się to ogarnąć :D

[EDIT]
Sprawdziłem od razu, bo sam byłem ciekawy. Faktycznie, miałeś rację, skrypt jest zabugowany. Postaram się naprawić jak najszybciej. Debugowanie skryptu po roku - zawsze spoko :F

[EDIT2]
Naprawione, straszne głupoty zrobiłem :D Dodatkowo poprawiłem działanie, żeby broń działała tak jak Ulu-Mulu, czyli że przyjaciele atakują orki i wargi, po namyśle uważam, że tak jednak jest lepiej. Poniżej poprawiony tutorial, będzie tutaj, aż moderator (jeśli będzie taka możliwość) podmieni go z tym pierwszym.
 


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;
      LAGA_MOCY_eqwep = Npc_GetEquippedMeleeWeapon(hero);
      if (Hlp_IsItem(LAGA_MOCY_eqwep, LAGA_MOCY) == TRUE) && ((self.guild == GIL_ORC) || (self.aivar[AIV_MM_REAL_ID] == ID_WARG))
      {
            return;
      };

Pierwsza linijka definiuje zmienną. Kolejna sprawdza, czy nasza broń jest założona i przypisuje wynik do zmiennej. Następnie mamy warunek mówiący, że jeśli nasza broń jest założona i nasz przeciwnik ma gildię orka lub subgildię warga to przeciwnicy o podanych gildiach nie traktują nas jako wroga.

4. Edycja pliku ZS_MM_Attack.d, czyli powodujemy, że orkowie nie zabijają nas w przypadku zaatakowania ich przez naszego przyjaciela.
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ć warunek do pliku
Cytuj
ZS_MM_Attack.d
znajdującego się w katalogu
Cytuj
_Work\data\Scripts\Content\AI\Monster\ZS_Monster
Pod wpisem:
Cytuj
func int ZS_MM_Attack_Loop ()
{

   Npc_GetTarget (self); // other = target
musimy wpisać:
Cytuj
   var C_Item LAGA_MOCY_eqwep;
   LAGA_MOCY_eqwep = Npc_GetEquippedMeleeWeapon(hero);
   if (Hlp_GetInstanceID (other) == PC_HERO) && (Hlp_IsItem(LAGA_MOCY_eqwep, LAGA_MOCY) == TRUE) && ((self.guild == GIL_ORC) || (self.aivar[AIV_MM_REAL_ID] == ID_WARG))
   {
         Npc_ClearAIQueue(self);
         AI_StandUp      (self);
         AI_TurnToNpc   (self, hero);
         AI_PlayAni      (self, "T_WARN");
         self.aivar[AIV_PursuitEnd] = TRUE;
         return LOOP_END;
   };
Tak samo jak wcześniej, pierwsza linijka definiuje zmienną, druga sprawdza, czy mamy założoną naszą lagę i przypisuje wynik do zmiennej. Następnie mamy warunek, który mówi, że jeśli kod INSTANCE człowieka, którego chce zaatakować ork to PC_HERO (kod Bezimiennego) i mamy założoną naszą broń oraz gildia przeciwnika to ork lub warg to wtedy czyścimy kolejkę czynności, które miał zaplanowane przeciwnik, mówimy potworowi, żeby wstał, powodujemy, że przeciwnik obróci się w naszą stronę, wykona animację ostrzeżenia, mówimy mu, że pościg za nami się skończył i przeskakujemy do końca pętli. Opis tego warunku to chyba najdłuższe zdanie jakie było mi dane napisać :F 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 oraz Vamperowi za znalezienie buga :D

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

[TUTORIAL POPRAWIONY 05.03.2016]

13
Skrypty / [TUTORIAL] Efekt Ulu-Mulu w G2NK
« dnia: 2015-02-16, 21:02 »
No właśnie o to chodziło, że jeżeli ty idziesz z Ulu-Mulu to przyjaciel też nie jest bity przez orki;) To właśnie chciałem uzyskać;D

14
Skrypty / [TUTORIAL] Efekt Ulu-Mulu w G2NK
« dnia: 2015-02-16, 00:07 »
Hmm no właśnie o to chodzi;p Najpierw w B_MM_AssessEnemy.d deklaruję zwierzęciu, że człowiek nie stanowi zagrożenia, a potem w B_Attack.d, do którego jest odwołanie w ZS_Attack.d deklaruję CZŁOWIEKOWI jakim jest np. FaceHelper, żeby nie atakował zwierząt danego rodzaju. Ciężko zrobić odwołanie tak jak napisałeś najpierw z pętli ataku zwierzęcia, które odwołuje się do rozpoznania celu przez człowieka, które potem odwołuje się do tego, że człowiek widzi, że ma nie atakować;p Zrobiłem coś takiego, że FH i tak atakuje, orkowie go zabijają, a potem rzucają się na nas, ale jak w nas wycelują, to kończą pościg. To rozwiązanie jest strasznie zbugowane, bo czasem orkowie i tak nas uderzą, a zawsze dzieje się coś takiego, że jak staniesz koło FH to orkowie celują i tak w nas, jako domyślnie groźniejszego wroga i stoją(z dziwnie zapętlonymi klatkami animacji :D), a FH ich bezkarnie leje;/

[EDIT]
Nie no... Zainstalowałem czystego Gothica i działa bez zarzutu;) Może masz jakiegoś syfa w skryptach i dlatego ci nie działa? Albo to efekt wczorajszej imprezy :D :D :D

15
Skrypty / [TUTORIAL] Efekt Ulu-Mulu w G2NK
« dnia: 2015-02-15, 22:10 »
No pewnie, że testowałem i działa;) U mnie nie działało w tym pliku co mówiłeś;) Dwa dni się męczyłem w tym pliku i nic... W B_Attack.d jest dlatego, że to np. FaceHelper ma sprawdzać, czy może zaatakować i do tej funkcji jest odwołanie w ZS_Attack.d. Teraz ja jestem na imprezie, więc jak wrócę to zainstaluję świeżego Gothica i sprawdzę jeszcze raz, no ale to musi działać;p W międzyczasie proszę kogoś, żeby to jeszcze sprawdził, jeżeli może;)

[EDIT]
A przeczytałeś całe, czy tylko ten punkt, który podesłałem?;p Bo do B_MM_AssessEnemy.d też jest wpis bardzo podobny, a bez tego raczej słabo działa;p

16
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

17
Skrypty / Tworzenie NPC (Rutyna,Startup)
« dnia: 2015-02-15, 13:21 »
Miałem ten sam problem. U mnie nie wystarczyło dodać NPC w Startupie, musiałem wstawić go w Spacerze w wybranym miejscu, blisko waypointu. Tylko Spacer ma problemy z zapisem(przynajmniej w moim przypadku), więc swój edytowany świat zapisz na pulpicie(upewnij się, że będzie miał on unikalną nazwę, tak żeby nie musiało się nic podmieniać, po eksporcie świata ze spacera ręcznie możesz zmienić nazwę na jaką chcesz). Popróbuj z różnymi metodami zapisu, nie pamiętam którą ja wybrałem. Może ktoś inny ci doradzi jaką wybrać;)

Strony: [1]
Do góry