Jak zrobić by postaci za nami chodziły. 17286 20

O temacie

Autor Gotyk

Zaczęty 24.05.2010 roku

Wyświetleń 17286

Odpowiedzi 20

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
Ten tutek pokazuje jak zrobić by dana postać za nami podążała, i w wybranym momencie wracała na swoje miejsce.
Pokażę wam to na przykładzie mojej postaci o nazwie Lee.
No to zapinamy pasy i jedziemy^^

Zacznijmy od skryptu postaci:

Nas interesuje rutyna:
func void Rtn_Follow_2047 ()
{
TA_FollowPC (23,00,16,00,"NC_SMALL_CAVE_CENTER");
TA_FollowPC (16,00,23,00,"NC_SMALL_CAVE_CENTER");
};
Dajemy tą rutynę jako drugą

Funkcja TA_FollowPC odpowiada za to iż postać za nami podąża.

Waypoint "NC_SMALL_CAVE_CENTER" odpowiada za to gdzie dana postać będzie gdy powiemy że nie jest nam już potrzebna(bynajmniej ja tak myślę:P ).

Tyle musicie wiedzieć z skryptu postaci,a teraz skrypt dialogu:

//========================================
//-----------------> PODAZAJ
//========================================

INSTANCE DIA_Lee_PODAZAJ (C_INFO)
{
   npc = SLD_2047_Lee;
   nr = 2;
   condition = DIA_Lee_PODAZAJ_Condition;
   information = DIA_Lee_PODAZAJ_Info;
   permanent = TRUE;
   description = "Chodź ze mną!";
};

FUNC INT DIA_Lee_PODAZAJ_Condition()
{
return TRUE;
};

func VOID DIA_Lee_PODAZAJ_Info()
{
AI_Output (other, self ,"DIA_Lee_PODAZAJ_15_01"); //Chodź ze mną!
AI_Output (self, other ,"DIA_Lee_PODAZAJ_03_02"); //Ruszajmy!
self.aivar[AIV_PARTYMEMBER] = TRUE;
AI_StopProcessInfos (self);
Npc_ExchangeRoutine (self,"FOLLOW");
};

//========================================
//-----------------> WRACAJ
//========================================

INSTANCE DIA_Lee_WRACAJ (C_INFO)
{
   npc = SLD_2047_Lee;
   nr = 3;
   condition = DIA_Lee_WRACAJ_Condition;
   information = DIA_Lee_WRACAJ_Info;
   permanent = TRUE;
   description = "Nie jesteś mi już potrzebny.";
};

FUNC INT DIA_Lee_WRACAJ_Condition()
{
return TRUE;
};

func VOID DIA_Lee_WRACAJ_Info()
{
AI_Output (other, self ,"DIA_Lee_WRACAJ_15_01"); //Nie jesteś mi już potrzebny.
AI_Output (self, other ,"DIA_Lee_WRACAJ_03_02"); //A więc niech tak będzie.
self.aivar[AIV_PARTYMEMBER] = TRUE;
   AI_StopProcessInfos (self);
 Npc_ExchangeRoutine(self,"START");


};
Nas interesuje dialog DIA_Lee_PODAZAJ oraz  DIA_Lee_WRACAJ.

Zajmijmy się tym pierwszym. Jeśli chcemy żeby postać za nami podążała musimy dać opcję:

Npc_ExchangeRoutine (self,"FOLLOW");Odpowiada ona za uruchomienie rutyny postaci:
func void Rtn_Follow_2047 ()
{
TA_FollowPC (23,00,16,00,"NC_SMALL_CAVE_CENTER");
TA_FollowPC (16,00,23,00,"NC_SMALL_CAVE_CENTER");
};
Teraz ta postać będzie podążać za nami dopóki ktoś jej nie zabije, lub jej nie odeślemy. Teraz zajmijmy się pytaniem co zrobić by postać za nami już nie szła. Otóż odpowiedź leży w  tym miejscu:
func VOID DIA_Lee_WRACAJ_Info()
{
AI_Output (other, self ,"DIA_Lee_WRACAJ_15_01"); //Nie jesteś mi już potrzebny.
AI_Output (self, other ,"DIA_Lee_WRACAJ_03_02"); //A więc niech tak będzie.
self.aivar[AIV_PARTYMEMBER] = TRUE;
   AI_StopProcessInfos (self);
 Npc_ExchangeRoutine(self,"START");
};
Znowu zmieniamy rutynę postaci na zwykłą (czyli "start" tak jak jest to w tej linijce):
Npc_ExchangeRoutine(self,"START");Mam nadzieję że zrozumiałe, w razie pytań pytajcie. Jak bym nie odpowiedział to na pewno znajdzie się ktoś kto wam to wytłumaczy.

Pozwalam kopiować tego tutka, pod warunkiem iż wspomnicie że ja jestem jego autorem, chyba że ktoś znajdzie jeszcze błędy i je poprawi, wtedy tutek przechodzi na jego autorstwo.

Pozdrawiam.
 

jendrzejs

jendrzejs

Użytkownicy
posty586
Propsy31
Profesjabrak
  • Użytkownicy
Mógłbyś wpisac to w tagach przynajmniej ładniej by wyglądało.
 

michalsz

michalsz

Użytkownicy
posty132
  • Użytkownicy
To jest do dupy...
ja wole sposób z zmiennymi
Ps. to można powiedzieć mu że ma wracać nawet kiedy za nami nie idzie :D  :facepalm:  :facepalm:


Nowe emotki :D
 :lol:  :lol:  :lol:  :P  :omg:  o_o
 

Diegomir

Diegomir

Użytkownicy
Gnój
posty196
Propsy255
Profesjabrak
  • Użytkownicy
  • Gnój
Waypoint w rutynie po prostu musi być i nic nie znaczy, może być dowolny w danym świecie. Jeśli mówimy, że ktoś już nie jest potrzebny to trzeba jeszcze zmienić rutynę

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
Waypoint w rutynie po prostu musi być i nic nie znaczy, może być dowolny w danym świecie. Jeśli mówimy, że ktoś już nie jest potrzebny to trzeba jeszcze zmienić rutynę


Rutyna się zmienia na start. A z tym można dopracować przecież żeby się dialog ten nie wyświetlał jeśli nie chcemy
 wystarczy dać warunek IF(jeśli była rozmowa "chodź ze mną" To chyba proste?
 

michalsz

michalsz

Użytkownicy
posty132
  • Użytkownicy
Gotyk :P  :D  :(  :D  :facepalm:

A co ci da jeśli gadaliśmy to da się tylko raz.    

Lepszy jest warunek
IF (self.aivar[AIV_PARTYMEMBER] = TRUE)
 

Sergio

Sergio

Użytkownicy
Główny scenarzysta, skrypter i założyciel teamu
posty449
Propsy12
  • Użytkownicy
  • Główny scenarzysta, skrypter i założyciel teamu
Pomysł na zrobienie takiego tutka jest z założenia dobry, bo wielu początkujących graczy oszczędzi sobie grzebania w skryptach (co jednak niestety może wpłynąć negatywnie na ich późniejsze umiejętności).
Niestety mi tutek nie przypadł do gustu, najważniejsze momenty powinny być zaznaczone kolorem a dialogi nie mające większego znaczenia powinny być obcięte do maximum. I również polecam sposoby ze zmiennymi ponieważ mają one zastosowanie także w wielu innych skryptach.
Ten tutorial jest więc niestety nie przejrzysty i najlepiej by było aby został poprawiony tak szybko, jak to możliwe.
 



Zachęcam do oglądania mojego kanału na youtube, może nie jestem teraz jakimś mistrzem ale rozkręcam się. Hit na ten moment: http://www.youtube.com/watch?v=vzOXV0Nb658 Dla wszystkich tych którzy nie mają nic przeciw porcji śmiechu w oparciu o gothic.

Caesum

Caesum

Użytkownicy
posty1727
Propsy2215
NagrodyV
Profesjabrak
  • Użytkownicy
Cytuj
być obcięte do maximum.
Chyba chciałeś napisać "do minimum"

Ale poza tym to zgadzam się, skrypt lub tekst powinien być jakoś wyróżniony, bo obecnie gówno widać, nawet z twoimi 666 enterami.

Cytuj
Ten tutek pokazuje jak zrobić by dana postać za nami podąrzała, i w wybranym momęcie wracała na swoje miejsce.
Btw - nazwa sugeruje coś, co nie jest człowiekiem, a Lee chyba nie jest jakąś odmianą ścierwojada, prawda?
 

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
Cytat: Caesum link=topic=10181.msg99583#msg99583 date=Jun 20 2010, 11:15 AM\'
Btw - nazwa sugeruje coś, co nie jest człowiekiem, a Lee chyba nie jest jakąś odmianą ścierwojada, prawda?

Widze że lubisz się czepiać, Lee to tylko zwykły NPC z gry,  a nie ktoś szczególny kogo trzeba wyrórzniać.
A tak poza tym to nie jestem zawodowym skrypterem, i wiem że dla zielonych  stworzenie postaci podążającej za nami
to problem bo sam miałem i widziałem że inni też mieli problem dlatego  napisałem tego swojego "PIERWSZEGO" tutka żeby im pomóc, a w miare gdy to opanują to już będą sami mogli dokładniej to zrobić.
 

Caesum

Caesum

Użytkownicy
posty1727
Propsy2215
NagrodyV
Profesjabrak
  • Użytkownicy
Mimo wszystko ogólnie przyjęte jest, że postaci mają przeważnie imiona, a nie nazwy. =d A i Lee wcale takim szarym npc nie jest. Przecież przewija się przez całą serię, więc imo warto go WYRÓŻNIĆ. :lol:
 

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
Niech ci cbędzie :lol:  mam pytanie znasz się na spacerze?
 

Sergio

Sergio

Użytkownicy
Główny scenarzysta, skrypter i założyciel teamu
posty449
Propsy12
  • Użytkownicy
  • Główny scenarzysta, skrypter i założyciel teamu
Uważam że większość osób które od jakiegoś czasu modują gothica zna się na spacerze. Pytanie tylko w jakim stopniu...


Cytat: Caesum link=topic=10181.msg99583#msg99583 date=Jun 20 2010, 11:15 AM\'
Chyba chciałeś napisać "do minimum"

Masz rację chodziło mi o minimum  ;p
 



Zachęcam do oglądania mojego kanału na youtube, może nie jestem teraz jakimś mistrzem ale rozkręcam się. Hit na ten moment: http://www.youtube.com/watch?v=vzOXV0Nb658 Dla wszystkich tych którzy nie mają nic przeciw porcji śmiechu w oparciu o gothic.

Pawciow

Pawciow

Użytkownicy
posty533
Propsy70
ProfesjaTłumacz
  • Użytkownicy
ok dobry tutek, natomiast mnie ciekawi jak zrobić na zasadzie owieczki Betsy, że można npca (człowieka) zostawić w dowolnym miejscu i on będzie czekał tam, gdzie go ostatnio zostawiliśmy

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
Tego raczej nie wiem.

Mi tylko oto chodziło jak nadpisać swiat który zmieniłem w G1 bo nie widać było zmian. Ale już chyba wiem jak to ma być.

Gotyk :lol:  :D  :facepalm:  :facepalm:  :facepalm:

A co ci da jeśli gadaliśmy to da się tylko raz.    

Lepszy jest warunek
IF (self.aivar[AIV_PARTYMEMBER] = TRUE)
Wracając do tej twojej uwagi to właśnie na spokojnie przejżałem ten skrypt i posiada on IF (self.aivar[AIV_PARTYMEMBER] = TRUE) było to od początku tylko trzeba umieć czytać,a nie ludzi opieprzać i w błąd wprowadzać.

Nie pisze się po trzy posty na raz, tylko korzysta z opcji edit - zapobiega to bałaganowi na forum.
Avallach
 

michalsz

michalsz

Użytkownicy
posty132
  • Użytkownicy
czy ja jestem ślepy gdzie tu że się wyrażę
Spoiler
Kurwa
jest warunek if ?

//========================================
//-----------------> PODAZAJ
//========================================

INSTANCE DIA_Lee_PODAZAJ (C_INFO)
{
   npc = SLD_2047_Lee;
   nr = 2;
   condition = DIA_Lee_PODAZAJ_Condition;
   information = DIA_Lee_PODAZAJ_Info;
   permanent = TRUE;
   description = "Chodź ze mną!";
};

FUNC INT DIA_Lee_PODAZAJ_Condition()
{
return TRUE;
};

func VOID DIA_Lee_PODAZAJ_Info()
{
AI_Output (other, self ,"DIA_Lee_PODAZAJ_15_01"); //Chodź ze mną!
AI_Output (self, other ,"DIA_Lee_PODAZAJ_03_02"); //Ruszajmy!
self.aivar[AIV_PARTYMEMBER] = TRUE;
AI_StopProcessInfos (self);
Npc_ExchangeRoutine (self,"FOLLOW");
};

//========================================
//-----------------> WRACAJ
//========================================

INSTANCE DIA_Lee_WRACAJ (C_INFO)
{
   npc = SLD_2047_Lee;
   nr = 3;
   condition = DIA_Lee_WRACAJ_Condition;
   information = DIA_Lee_WRACAJ_Info;
   permanent = TRUE;
   description = "Nie jesteś mi już potrzebny.";
};

FUNC INT DIA_Lee_WRACAJ_Condition()
{
return TRUE;
};

func VOID DIA_Lee_WRACAJ_Info()
{
AI_Output (other, self ,"DIA_Lee_WRACAJ_15_01"); //Nie jesteś mi już potrzebny.
AI_Output (self, other ,"DIA_Lee_WRACAJ_03_02"); //A więc niech tak będzie.
self.aivar[AIV_PARTYMEMBER] = TRUE;
   AI_StopProcessInfos (self);
Npc_ExchangeRoutine(self,"START");


};
 

Seriq

Seriq

Użytkownicy
posty1
  • Użytkownicy
A ja mam pytanie jak zrobić żeby NPC chodził za nami po tym jak dostaliśmy misje od jakiegoś innego NPC ( przykład w NK w obozie piratów w misji polowanie na zębacze)
 

eto

eto

Użytkownicy
-Banany pod pokładem? -SĄĄĄĄĄĄ
posty1741
Propsy1793
ProfesjaLvl designer
  • Użytkownicy
  • -Banany pod pokładem? -SĄĄĄĄĄĄ
Warunek tylko robisz.

EDIT: to było chyba npc_knows_info czy coś takiego.
 
Niespełniony Level Designer z ambicjami, zmęczeniem i brakiem czasu...

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
czy ja jestem ślepy gdzie tu że się wyrażę
Spoiler
córka rybaka
jest warunek if ?


Ups :blink:  zwracam honor, tak wg to zapomniałem o tym temacie nawet :O
 

Caesum

Caesum

Użytkownicy
posty1727
Propsy2215
NagrodyV
Profesjabrak
  • Użytkownicy
Niech ci cbędzie :lol:  mam pytanie znasz się na spacerze?
Wprawdzie minęło trochę czasu od napisania tego posta, ale zwyczajnie nie mogę się powstrzymać przed odpowiedzią.
Nie.
 

Gotyk

Gotyk

Użytkownicy
posty101
Propsy67
  • Użytkownicy
Wprawdzie minęło trochę czasu od napisania tego posta, ale zwyczajnie nie mogę się powstrzymać przed odpowiedzią.
Nie.

:lol2:  za twój iście szybki refleks dam ci proposa XDDD  A co do spacera to spokojnie opanowałem go już w potrzebnym mi stopniu :wink:
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry