Stworzyłem monolog i chciałem, aby został on wywołany przez jednego z mobów. Jednak problem pojawił się w tym, że po wpisaniu do onStateFunc odpowiedniej funkcji nic się nie dzieje (hero wzrusza ramionami, a monolog się nie pojawia). Zastanawiam się, gdzie popełniłem błąd - czy w skrypcie czegoś nie dopisałem, czy może w Spacerze źle tworzę moba. Oczywiście do monologu spania dodałem odpowiednie warunki itp. Parsowanie przebiega bez zarzutów. Opierałem się na monologu sleepabit oraz na tym poradniku:
.
Spoiler
//****************************
// PC_OLTARZORKI
//****************************
func void PC_OltarzOrki ()
{
monolog = 0;
AI_StopProcessInfos(self); // [SK] ->muss hier stehen um das update zu gewährleisten
self.aivar[AIV_INVINCIBLE]=FALSE;
Wld_PlayEffect("FX_EarthQuake", self, self, 0, 0, 0, FALSE );
Wld_PlayEffect("spellFX_MassDeath", self, self, 0, 0, 0, FALSE );
Wld_PlayEffect("spellFX_Heal", hero, hero, 0, 0, 0, FALSE );
PrintScreen ("Rytuał oczyścił okolicę od klątwy", -1,-1,"font_old_20_white.tga",3);
if ( (OLTARZORKI1 == TRUE) && (OLTARZORKI2 == TRUE) )
{
Npc_RemoveInvItems (hero,ItMi_WodaInnosa,1);
B_GiveXP (1000);
B_LogEntry (CH5_Oczyszczenie,"Wykonałem Rytuał Oczyszczenia na obu ołtarzach. Nie wiem czy coś się zmieniło, jednak efekt był zdecydowanie odczuwalny. Wrócę do Kor-Naka i zapytam się go co dalej...");
};
};
func void OLTARZORKI_S1 ()
{
monolog = m_oltarzorki;
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
//***ALT** if (Hlp_GetInstanceID (self)== Hlp_GetInstanceID (Hero)) // MH: geändert, damit kontrollierte NSCs nicht schlafen können!
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (self);
};
};
//-------------------- BRAK -------------------------
INSTANCE PC_Koniec (c_Info)
{
npc = PC_Hero;
nr = 999;
condition = PC_Koniec_Condition;
information = PC_Koniec_Info;
important = 0;
permanent = 1;
description = DIALOG_ENDE;
};
FUNC INT PC_Koniec_Condition()
{
if (monolog == m_oltarzorki)
{
return 1;
};
};
func VOID PC_Koniec_Info()
{
monolog = 0;
AI_StopProcessInfos (self);
self.aivar[AIV_INVINCIBLE]=FALSE;
};
//---------------------- PIERWSZY OŁTARZ --------------------------------------
INSTANCE PC_Rytual1 (C_INFO)
{
npc = PC_Hero;
condition = PC_Rytual1_Condition;
information = PC_Rytual1_Info;
important = 0;
permanent = 1;
description = "Wykonaj Rytuał Oczyszczenia.";
};
FUNC INT PC_Rytual1_Condition()
{
if ( (monolog == m_oltarzorki) && (Npc_HasItems(hero,ItMi_WodaInnosa)) && (Npc_HasItems(hero,Inkantacja_Oczyszczenia)) && (Npc_GetDistToWP (hero, "ORK_OLTARZ1") < 500) && (OLTARZORKI1 == FALSE))
{
return 1;
};
};
func void PC_Rytual1_Info ()
{
OLTARZORKI1 = true;
PC_OltarzOrki ();
};
//---------------------- DRUGI OŁTARZ --------------------------------------
INSTANCE PC_Rytual2 (C_INFO)
{
npc = PC_Hero;
condition = PC_Rytual2_Condition;
information = PC_Rytual2_Info;
important = 0;
permanent = 1;
description = "Wykonaj Rytuał Oczyszczenia.";
};
FUNC INT PC_Rytual2_Condition()
{
if ( (monolog == m_oltarzorki) && (Npc_HasItems(hero,ItMi_WodaInnosa)) && (Npc_HasItems(hero,Inkantacja_Oczyszczenia)) && (Npc_GetDistToWP (hero, "ORK_OLTARZ2") < 500) && (OLTARZORKI2 == FALSE))
{
return 1;
};
};
func void PC_Rytual2_Info ()
{
OLTARZORKI2 = true;
PC_OltarzOrki ();
};
Siedzę nad tym trochę. Mam wrażenie, że to bardzo łatwy problem, jednak nie jestem w stanie go rozwiązać.