[G1] Monolog - brak reakcji na onStateFunc 4346 4

O temacie

Autor Mac

Zaczęty 21.07.2019 roku

Wyświetleń 4346

Odpowiedzi 4

Mac

Mac

Użytkownicy
posty19
Propsy53
Profesjabrak
  • Użytkownicy
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: https://themodders.org/index.php?topic=99.0.

Skrypt monologu:
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 ();
};

Stałe i zmienne w Story_Globals:
Spoiler
var int OLTARZORKI1;
var int OLTARZORKI2;

const int m_sleep = 1;
const int m_oltarzorki = 2;
var int monolog;

Screen moba:
Spoiler

Siedzę nad tym trochę. Mam wrażenie, że to bardzo łatwy problem, jednak nie jestem w stanie go rozwiązać.
 

outlander

outlander

Użytkownicy
posty471
Propsy237
ProfesjaReżyser
  • Użytkownicy
MOBem nie może być 3DS. Niestety musi być MDS i animacje. To nie jest takie łatwe xD Skrypt jest OK.
 

Mac

Mac

Użytkownicy
posty19
Propsy53
Profesjabrak
  • Użytkownicy
No właśnie jak to nie wypaliło, to dla sprawdzenia dałem sobie w Visual skrzynie i dalej nic. Więc stwierdziłem, że to nie tu jest błąd. Z skrzynią wyglądało tak, że podchodził Hero do skrzyni i kamera ustawiała się jak na początku animacji otwarcia skrzynki. Jednak po tym się resetowało i nic się nie działo (Chyba że skrzynia to zły mob na to xd).
 

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Cytuj
Chyba że skrzynia to zły mob na to xd
Tak. Skrzynie są w formacie MDS, które są używane w mobach należącymi do klasy oCMobLockable. oCMobInter muszą mieć format ASC.

Co też pomieszałeś. Bo obiekt interaktywny wstawiłeś jako drzwi - oCMobDoor.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Mac

Mac

Użytkownicy
posty19
Propsy53
Profesjabrak
  • Użytkownicy
Co też pomieszałeś. Bo obiekt interaktywny wstawiłeś jako drzwi - oCMobDoor.

Pod Door jest przypisane łóżko, więc na tym się wzorowałem :P . Spróbuje z klasą Inter i Visual'em .asc. Dzięki wielkie, jak wrócę z pracy to będę testować.

EDIT: Wszystko działa jak należy. Jeszcze raz dzięki. Temat do zamknięcia.
 


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