Zmiana rutyny po zakończeniu dialogu 2732 11

O temacie

Autor Ebhodini

Zaczęty 28.12.2019 roku

Wyświetleń 2732

Odpowiedzi 11

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
Chciałbym, żeby po zakończeniu danego zadania i kończącego dialogu NPC zmienił rutynę. Mam gotową nową rutynę tego NPC samo zadanie działa dobrze tylko jak wrzucę na sztywno
Cytuj
B_ExchangeRoutine ( instancjaNPC , "NOWARUTYNA");
w info dialogu to NPC zaczyna iść w nowe miejsce w trakcie rozmowy, tzn. jak w przypadku powiedzmy Miltena i listu z zewnętrznego świata. Oczywiście po dojściu na nowe miejsce dialog się kończy prawidłowo ale sama droga zajmuje dużo czasu i wyglada to bardzo słabo.
 

Cruc

Cruc

Użytkownicy
posty666
Propsy232
Profesjabrak
  • Użytkownicy
Spróbuj B_StartOtherRoutine zamiast Npc_ExchangeRoutine.
 
while (!success) try{...}

Najlepszy modder od gothic multiplayer - polecam pytać go o wszystko!

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
Składnia jest taka sama jak w B_ExchangeRoutine() ? Ponieważ przy kompilacji wywala Unknown identifier.
 

Cruc

Cruc

Użytkownicy
posty666
Propsy232
Profesjabrak
  • Użytkownicy
Tak. Pewnie modujesz w G1, zamiast w G2. Podejrzewam, że w 1 części, nie ma tej funkcji.
 
while (!success) try{...}

Najlepszy modder od gothic multiplayer - polecam pytać go o wszystko!

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
No tak na obecną chwilę bawię się w G1. Więc jakieś rady do G1, ktoś coś?
 

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
B_ExchangeRoutine ( instancjaNPC , "NOWARUTYNA"); - Tak to chyba wyglądało w G1. W G2 było Npc_ExchangeRoutine (tak jak to) i B_StartOtherRoutine (częściej używane, w komentarzach kodu z G2 można zobaczyć dlaczego).

G1 nigdy nie modowałem, więc nie wiem. Patrzyłem tylko, jak to zostało zrobione w oryginale - i tobie też radzę tak robić.

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
Tak jak pisałem. Zrobiłem i zadanie działa wszystko wykonuje się prawidłowo funkcja napisana jest poprawnie itp. Mam tylko problem z tym, że funkcja B_ExchangeRoutine() dodana jest na koniec dialogu tak aby wykonywała się w odpowiednim czasie. tylko, że wykonuje się po wszystkich kwestiach dialogowych ale w trakcie całego dialogu, tzn. gracz musi patrzeć jak NPC przemieszcza się w nowe miejsce i dopiero dialog się kończy.
 

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Tak jak pisałem. Zrobiłem i zadanie działa wszystko wykonuje się prawidłowo funkcja napisana jest poprawnie itp. Mam tylko problem z tym, że funkcja B_ExchangeRoutine() dodana jest na koniec dialogu tak aby wykonywała się w odpowiednim czasie. tylko, że wykonuje się po wszystkich kwestiach dialogowych ale w trakcie całego dialogu, tzn. gracz musi patrzeć jak NPC przemieszcza się w nowe miejsce i dopiero dialog się kończy.

Pokaż ten kod.

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
To jest całe napisane zadanie
//********************************************************
// ZADANIE
//********************************************************
INSTANCE DIA_Kyle_Zadanie (C_INFO)
{
npc = Vlk_536_Kyle;
nr = 10;
condition = DIA_Kyle_Zadanie_Condition;
information = DIA_Kyle_Zadanie_Info;
permanent = 0;
important = 0;
description = "Może będę mógł Ci pomóc.";
};
FUNC INT DIA_Kyle_Zadanie_Condition()
{
if (Npc_KnowsInfo (hero, DIA_Kyle_Problem))
{
return 1;
};
};
FUNC VOID DIA_Kyle_Zadanie_Info()
{
AI_Output (other, self,"DIA_Kyle_Zadanie_15_00"); //Słuchaj, może będę mógł Ci pomóc.
AI_Output (self, other,"DIA_Kyle_Zadanie_10_01"); //Co? Na prawdę możesz coś z tym zrobić?
AI_Output (other, self,"DIA_Kyle_Zadanie_15_03"); //Daj mi czas a na pewno coś wymyślę.
AI_Output (self, other,"DIA_Kyle_Zadanie_10_04"); //Dzięki stary! Jednak nie zrzucają do tej dziury samych samolubnych dupków.
Log_CreateTopic (CH1_Kylehelp, LOG_MISSION);
B_LogEntry (CH1_Kylehelp,"Kopacz Kyle wybudował chatę zbyt blisko rowu i teraz ma parę dodatkowych drzwi i jego dom służy za przejście. Jeśli mu pomogę będę mógł liczyć na drobny prezent. Może jakiś strażnik może mi pomóc...");
Log_SetTopicStatus (CH1_Kylehelp, LOG_RUNNING);
};
//**********************************************************
// SUKCES ZADANIA WRZÓD
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_SUKw (C_INFO)
{
npc = Vlk_536_Kyle;
nr = 4;
condition = DIA_Kyle_Zadanie_SUKw_Condition;
information = DIA_Kyle_Zadanie_SUKw_Info;
permanent = 0;
description = "Znalazłem Ci chatę.";
};
FUNC INT DIA_Kyle_Zadanie_SUKw_Condition()
{
if(Npc_KnowsInfo(hero, DIA_MUD_CHUT_SUK))
{
return 1;
};
};
FUNC VOID DIA_Kyle_Zadanie_SUKw_Info()
{
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_00"); //Znalazłem Ci chatę.
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_01"); //Jeden z kopaczy, nazywa się wrzód, zgodził się zamienić na chaty.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_02"); //Serio?! Jak go do tego przekonałeś?
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Powiedzmy, ze nasz przyjaciel panicznie boi się duchów.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_04"); //No cóż ważne, że będę miał nową chatę. To gdzie ona jest?
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Chata znajduje się na lewo od bramy do zamku. Jak zobaczysz kucharza imieniem Snaf, to znaczy, że jesteś na miejscu.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_05"); //Od razu zaczynam się pakować!
B_LogEntry (CH1_Kylehelp, "Kyle był zadowolony, że znalazłem mu nowe lokum. Może odwiedzę go za parę dni aby zobaczyć jak sobie radzi w nowym domu.");
AI_StopProcessInfos (self);
B_ExchangeRoutine (Vlk_536_Kyle, "NOWACHATAMUD");
B_ExchangeRoutine (VLK_574_Mud, "NOWACHATA");
};
//**********************************************************
// SUKCES ZADANIA DUSTY
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_SUKd (C_INFO)
{
npc = Vlk_536_Kyle;
nr = 5;
condition = DIA_Kyle_Zadanie_SUKd_Condition;
information = DIA_Kyle_Zadanie_SUKd_Info;
permanent = 0;
description = "Znalazłem Ci chatę.";
};
FUNC INT DIA_Kyle_Zadanie_SUKd_Condition()
{
if(Npc_KnowsInfo(hero, DIA_BaalTondral_DustySuccess))
{
return 1;
};
};
FUNC VOID DIA_Kyle_Zadanie_SUKd_Info()
{
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKd_15_00"); //Znalazłem Ci chatę.
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKd_15_01"); //Jeden z kopaczy, nazywa się Dusty, wyniósł się do obozu sekty i jego chata pozostaje wolna.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKd_10_02"); //No cóż ważne, że będę miał nową chatę. To gdzie ona jest?
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKd_15_03"); //Chata znajduje się nad urwiskiem na targowisku.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKd_10_04"); //Od razu zaczynam się pakować!
AI_StopProcessInfos (self);
B_LogEntry (CH1_Kylehelp, "Kyle był zadowolony, że znalazłem mu nowe lokum. Może odwiedzę go za parę dni aby zobaczyć jak sobie radzi w nowym domu.");
B_ExchangeRoutine (Vlk_536_Kyle, "NOWACHATADUSTY");
};
//**********************************************************
// ODEBRANIE NAGRODY DUSTY
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_NAd (C_INFO)
{
npc = Vlk_536_Kyle;
nr = 6;
condition = DIA_Kyle_Zadanie_NAd_Condition;
information = DIA_Kyle_Zadanie_NAd_Info;
permanent = 0;
description = "I jak Ci się tu żyje?";
};
FUNC INT DIA_Kyle_Zadanie_NAd_Condition()
{
if(Npc_KnowsInfo(hero, DIA_Kyle_Zadanie_SUKd))
{
return 1;
};
};
FUNC VOID DIA_Kyle_Zadanie_NAd_Info()
{
AI_Output (other, self,"DIA_Kyle_Zadanie_NAd_15_00"); //I jak Ci się tu żyje?
AI_Output (self, other,"DIA_Kyle_Zadanie_NAd_10_01"); //Jest świetnie! Cisza i spokój. Już nikt nie przebiega mi przez chatę i mam spokój od strażników.
AI_Output (self, other,"DIA_Kyle_Zadanie_NAd_10_03"); //Dziękuję Ci przyjacielu. Niewiem jak się odwdzięczyć weź chociaż trochę rudy.
B_GiveXP(100);
B_GiveInvItems (self, other, itminugget,100);
B_LogEntry (CH1_Kylehelp, "Kyle był zachwycony, nowa chata spisuje się świetnie! W końcu może odpocząć od niechcianych gości. ");
Log_SetTopicStatus (CH1_Kylehelp, LOG_SUCCESS);
};
//**********************************************************
// ODEBRANIE NAGRODY WRZÓD
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_NAw (C_INFO)
{
npc = Vlk_536_Kyle;
nr = 7;
condition = DIA_Kyle_Zadanie_NAw_Condition;
information = DIA_Kyle_Zadanie_NAw_Info;
permanent = 0;
description = "I jak Ci się tu żyje?";
};
FUNC INT DIA_Kyle_Zadanie_NAw_Condition()
{
if(Npc_KnowsInfo(hero, DIA_Kyle_Zadanie_SUKw))
{
return 1;
};
};
FUNC VOID DIA_Kyle_Zadanie_NAw_Info()
{
AI_Output (other, self,"DIA_Kyle_Zadanie_NAw_15_00"); //I jak Ci się tu żyje?
AI_Output (self, other,"DIA_Kyle_Zadanie_NAw_10_01"); //Rudera jakich mało, pełna szczurów i karaluchów. Ale chociaż mam tu święty spokój.
AI_Output (self, other,"DIA_Kyle_Zadanie_NAw_10_02"); //Mimo wszystko dzięki za starania.
B_GiveXP(50);
B_GiveInvItems (self, other, itminugget,50);
B_LogEntry (CH1_Kylehelp, "Kyle nie był zachwycony nowym domem. Nie mogę powiedzieć, że go nie rozumiem, sam nie chciałbym mieszkać w tej szopie. Mimo wszystko podziękował mi za pomoc.");
Log_SetTopicStatus (CH1_Kylehelp, LOG_SUCCESS);
};

A tu część, o którą mi chodzi i problem gdzie muszę czekać aż NPC przejdzie całą drogę i dopiero dialog się wyłącza.
FUNC VOID DIA_Kyle_Zadanie_SUKw_Info()
{
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_00"); //Znalazłem Ci chatę.
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_01"); //Jeden z kopaczy, nazywa się wrzód, zgodził się zamienić na chaty.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_02"); //Serio?! Jak go do tego przekonałeś?
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Powiedzmy, ze nasz przyjaciel panicznie boi się duchów.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_04"); //No cóż ważne, że będę miał nową chatę. To gdzie ona jest?
AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Chata znajduje się na lewo od bramy do zamku. Jak zobaczysz kucharza imieniem Snaf, to znaczy, że jesteś na miejscu.
AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_05"); //Od razu zaczynam się pakować!
B_LogEntry (CH1_Kylehelp, "Kyle był zadowolony, że znalazłem mu nowe lokum. Może odwiedzę go za parę dni aby zobaczyć jak sobie radzi w nowym domu.");
AI_StopProcessInfos (self);
B_ExchangeRoutine (Vlk_536_Kyle, "NOWACHATAMUD");
B_ExchangeRoutine (VLK_574_Mud, "NOWACHATA");
};

Z rutynami jest wszystko w porządku każdy NPC ma wpisane nowe z dokładnie takimi nazwami i są one prawidłowo zamieniane, tylko, że podczas dialogu a nie po jego zakończeniu.


Edit.
Zmieniłem B_ExchangeRoutine( ) na Npc_ExchangeRoutine( ) i o dziwo zadziałało. Może nie idealnie tzn. Wrzód pojawia się w chacie Kyle'a natychmiastowo w chwili rozmowy z Kylem ale z drugiej strony ten kończy rozmowę i dopiero wtedy rusza do nowej chaty.
 

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
W Gothicu 2 do zmiany rutyny innego NPC'ta niż ten, z którym rozmawiamy, używało się B_StartOtherRoutine, z kolei do tego, z którym się obecnie rozmawiało używało się Npc_ExchangeRoutine.  Spróbuj tutaj użyć B_ExchangeRoutine dla Wrzoda i Npc_ExchangeRoutine dla Kyle'a. Na pewno wrzuciłeś to w dobrym miejscu, ale jak pisałem wcześniej, nie znam się za bardzo na moddingu Gothicu 1, chociaż niewiele się różni, to jednak są takie drobnostkowe rzeczy...

outlander

outlander

Użytkownicy
posty452
Propsy224
ProfesjaReżyser
  • Użytkownicy
Jak dasz npc zamiast b to będzie działać
Nie zauważyłem edycji, sorrry
 

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
Spoko, tylko jak pisałem jest problem kosmetyczny Wrzód podczas rozmowy z Kylem pojawia się natychmiastowo w chacie a nie człapie przez SO.
 


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