Npc_ExchangeRoutine() nie działa 2975 7

O temacie

Autor MajkeI

Zaczęty 18.02.2017 roku

Wyświetleń 2975

Odpowiedzi 7

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer

MajkeI

Npc_ExchangeRoutine() nie działa
2017-02-18, 15:57(Ostatnia zmiana: 2017-02-18, 18:18)
Jak w temacie, postacie nie zmienia swojej rutyny gdy używam tej funkcji. Próbowałem też B_StartOtherRoutine() ale efekt dalej jest taki sam.

Tutaj dialog, w którym używam funkcji:
FUNC VOID DIA_PAL_9000_Albrecht_FirstEXIT()
{
AI_Output (other, self, "DIA_Pal_9000_Albrecht_FirstEXIT_15_00"); //Ruszajmy!
AI_Output (self, other, "DIA_Pal_9000_Albrecht_FirstEXIT_03_01"); //Niech Innos ma nas w swojej opiece. Naprzód!

Pal_9000_Albrecht.aivar[AIV_PARTYMEMBER] = TRUE;
Pal_9001_Eskorta.aivar[AIV_PARTYMEMBER] = TRUE;
Pal_9002_Eskorta.aivar[AIV_PARTYMEMBER] = TRUE;

AI_StopProcessInfos (self);

Npc_ExchangeRoutine (Pal_9000_Albrecht,"GO");
Npc_ExchangeRoutine (Pal_9001_Eskorta,"FOLLOW");
Npc_ExchangeRoutine (Pal_9002_Eskorta,"FOLLOW");

afterFirstTalk = TRUE;
};

Skrypt postaci:
instance Pal_9000_Albrecht (Npc_Default)
{
name = "Albrecht";
guild = GIL_PAL;
id = 202;
voice = 3;
flags       = 0;
npctype = NPCTYPE_MAIN;
B_SetAttributesToChapter (self, 5);
EquipItem (self, ItMw_1H_Pal_Sword);
B_CreateAmbientInv (self);
B_SetNpcVisual (self, MALE, "Hum_Head_Fighter", Face_P_Tough_Rodriguez, BodyTex_P, ITAR_PAL_H);
Mdl_SetModelFatness (self, 1.5);
Mdl_ApplyOverlayMds (self, "Humans_Militia.mds");
B_GiveNpcTalents (self);
B_SetFightSkills (self, 80);
fight_tactic = FAI_HUMAN_MASTER;
daily_routine = Rtn_Start_9000;
};
FUNC VOID Rtn_Start_9000 ()
{
TA_Stand_ArmsCrossed (07,00,19,00,"MOD_01");
TA_Stand_ArmsCrossed (19,00,07,00,"MOD_01");
};
FUNC VOID Rtn_GO_9000 ()
{
TA_Guide_Player (07,00,19,00,"OW_PATH_1_16");
TA_Guide_Player (19,00,07,00,"OW_PATH_1_16");
};


Dodam, że wszystkie waypointy istnieją, są połączone i ich nazwy są wszędzie zapisane z wielkich liter.
Jeśli to ma znaczenie:
  • wersja gry - Gothic II NK + 2.6fix + SystemPack 1.6
  • używam Ikrausa i LeGo
  • wszystko na pewno dobrze skompilowane i dodane do .mod
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Musisz użyć Hlp_GetNpc dla każdego npc, który ma zmienić rutynę.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Musisz użyć Hlp_GetNpc dla każdego npc, który ma zmienić rutynę.
Widziałem to już w Twoich odpowiedziach na podobne wątki - niestety nic nie daje u mnie. Ciągle ta sama rutyna.

Dla przykładu:
func void DIA_Pal_9001_Eskorta_Followme_Info ()
{
AI_Output (other, self, "DIA_Pal_9001_Eskorta_Followme_03_00"); //Za mną!
AI_Output (self, other, "DIA_Pal_9001_Eskorta_Followme_03_01"); //Ruszajmy.

AI_StopProcessInfos (self);

var C_NPC Eskorta1;
Eskorta1 = Hlp_GetNpc(Pal_9001_Eskorta);

Npc_ExchangeRoutine (Eskorta1,"FOLLOW");
self.aivar[AIV_PARTYMEMBER] = TRUE;
};
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
func void DIA_Pal_9001_Eskorta_Followme_Info ()
{
   AI_Output (other, self, "DIA_Pal_9001_Eskorta_Followme_03_00"); //Za mną!
   AI_Output (self, other, "DIA_Pal_9001_Eskorta_Followme_03_01"); //Ruszajmy.
   
   var C_NPC Eskorta1;
   Eskorta1 = Hlp_GetNpc(Pal_9001_Eskorta);
   
   Npc_ExchangeRoutine   (Eskorta1,"FOLLOW");
   self.aivar[AIV_PARTYMEMBER] = TRUE;
   AI_StopProcessInfos (self);
};

Npc_ExchangeRoutine   działa tylko w dialogu, nie poza nim.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy
Miałem kiedyś podobny problem, tyle że w G1. Niby wszystko było dobrze, a nie działało. Kombinowałem z tym długo i w końcu pomogło zmienienie kolejności wywoływania poszczególnych funkcji. Spróbuj najpierw wywołać zmiany rutyn, a dopiero po tym AI_StopProcessInfos (self);

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Miałem kiedyś podobny problem, tyle że w G1. Niby wszystko było dobrze, a nie działało. Kombinowałem z tym długo i w końcu pomogło zmienienie kolejności wywoływania poszczególnych funkcji. Spróbuj najpierw wywołać zmiany rutyn, a dopiero po tym AI_StopProcessInfos (self);
func void DIA_Pal_9001_Eskorta_Followme_Info ()
{
   AI_Output (other, self, "DIA_Pal_9001_Eskorta_Followme_03_00"); //Za mną!
   AI_Output (self, other, "DIA_Pal_9001_Eskorta_Followme_03_01"); //Ruszajmy.
   
   var C_NPC Eskorta1;
   Eskorta1 = Hlp_GetNpc(Pal_9001_Eskorta);
   
   Npc_ExchangeRoutine   (Eskorta1,"FOLLOW");
   self.aivar[AIV_PARTYMEMBER] = TRUE;
   AI_StopProcessInfos (self);
};

Npc_ExchangeRoutine   działa tylko w dialogu, nie poza nim.

Właśnie problem w tym, że umieszczam "AI_StopProcessInfos (self);" w różnych miejscach i nic.
Ale patrząc na Xardasa, to niby jest okej
FUNC VOID DIA_Xardas_FirstEXIT_Info()
{
AI_Output (other, self,"DIA_Xardas_FirstEXIT_15_00"); //Wyruszę w drogę najszybciej, jak się da!
AI_Output (self, other,"DIA_Xardas_FirstEXIT_14_01"); //Świetnie! I jeszcze coś: nie zdradź nikomu, że ze mną rozmawiałeś. A już w żadnym wypadku nie mów o tym żadnemu magowi.
AI_Output (self, other,"DIA_Xardas_FirstEXIT_14_02"); //Odkąd obrałem własną ścieżkę, Krąg Ognia ma mnie za zmarłego, i niech tak pozostanie.

AI_StopProcessInfos (self);

B_Kapitelwechsel (1, NEWWORLD_ZEN); //Joly: muß auf jeden Fall hier kommen. Allein schon wegen XP_AMBIENT!

Npc_ExchangeRoutine (self,"START");
};
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
W twoim skrypcie ID gościa to 202, a w rutynie 9000. Może to? Exchange Routine jest bardzo czułą funkcją - nie wiem dlaczego. Też miałem kiedyś z tym masę problemów. Dialogi kompilujesz Redefixem?
 

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
O matko, taka głupota i jej nie zauważyłem. Wielkie dzięki kolego :)

Post połączony: 2017-02-18, 17:54
Tak dla sprostowania tematu:

1. Jeśli zmieniamy rutynę innego NPC niż tego, z którym rozmawiamy, musimy użyć B_StartOtherRoutine();
Dowodem jest nawet komentarz PB w dialogu z Gerbrandtem:

FUNC VOID DIA_Gerbrandt_EXIT_Info()
{
if (DIEGO_COMING == TRUE)
{
DiegoNW = Hlp_GetNpc (PC_THIEF_NW);

if ( Diego_IsOnBoard == FALSE)
{
B_StartOtherRoutine (DiegoNW,"GERBRANDT");
};
//patch m.f. B_Startotherroutine raus und ersetzt durch Npc_exchange [color=red] <- ! [/color]

Npc_ExchangeRoutine  (self,"NEWLIFE");
B_StartOtherRoutine (GerbrandtsFrau,"NEWLIFE");

DIEGO_COMING = 2; //Weder TRUE noch False
};
AI_StopProcessInfos (self);
};

Wtedy musimy też użyć funkcji Hlp_GetNpc();

2. Jeśli chcemy zmienić rutynę NPC z którym rozmawiamy, wystarczy Npc_ExchangeRoutine  (self,"nazwa");
 


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