Problem z dialogami z podopcjami 6718 7

O temacie

Autor Mika 123

Zaczęty 14.02.2023 roku

Wyświetleń 6718

Odpowiedzi 7

Mika 123

Mika 123

Użytkownicy
posty45
Propsy8
Profesjabrak
  • Użytkownicy
Witam.
Przybywam z - moim zdaniem - dziwnym problemem. Otóż, kiedy odpalam grę za pomocą GothicStarter_mod i ten sprawdza mi skrypty, wywala mnie do pulpitu z powodu dialogu z podopcjami. Nie jest to pierwszy raz, ale poprzednio po prostu zrezygnowałem z dawania wyboru. Tym razem postanowiłem zapytać tutaj, w czym jest problem? Próbowałem to rozwiązać na różne sposoby, ale za każdym razem dostaję komunikat "Wrong type". A wydaje mi się, że wszystko robię dobrze. Instancja dialogu wygląda tak, jak chyba powinna być: DIA_ImięNPC_NazwaDialoguGłównego_NazwaPodopcji. Co ciekawe z obu podopcji zSpy czepia się tej nr 2.
Z góry dziękuję za pomoc.
 

Cruc

Cruc

Użytkownicy
posty666
Propsy235
Profesjabrak
  • Użytkownicy
Najlepiej będzie jak dasz screen błędu i skrypt. Na ten moment podałeś jedynie info, że wszystko się wydaje być git, wobec czego nikt nie wywróży co może być nie tak.
 
while (!success) try{...}

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

Mika 123

Mika 123

Użytkownicy
posty45
Propsy8
Profesjabrak
  • Użytkownicy
Racja. Screen błędu:

https://imgur.com/a/Z9nGsau (kompletnie nie wiem, czemu się nie wyświetla, więc wrzucam link ;) )

A oto skrypt tego konkretnego dialogu:

//========================================
//-----------------> CWGiveOre
//========================================

INSTANCE DIA_Walter_CWGiveOre (C_INFO)
{
   npc          = Grd_237_Walter;
   nr           = 2;
   condition    = DIA_Walter_CWGiveOre_Condition;
   information  = DIA_Walter_CWGiveOre_Info;
   permanent   = FALSE;
   description   = "Mam rudę.";
};

FUNC INT DIA_Walter_CWGiveOre_Condition()
{
    if (Npc_KnowsInfo (other, DIA_Walter_CW_AboutBetrayer))
    && (Npc_HasItems (other, ItMiNugget) >=200)
    {
    return TRUE;
    };
};


FUNC VOID DIA_Walter_CWGiveOre_Info()
{
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_15_01"); //Mam rudę.
    AI_Output (self, other ,"DIA_Walter_CWGiveOre_03_02"); //Jak miło! Wiesz, warto uczcić naszą przyjemną współpracę. Przynieś jeszcze kilka butelek piwa, golniemy sobie.
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_15_03"); //Wiesz, nie jestem przekonany...
    AI_Output (self, other ,"DIA_Walter_CWGiveOre_03_04"); //Masz rację. Co to za ucztowanie bez zakąski? Zatem oprócz, powiedzmy, sześciu butelek piwa przynieś jeszcze trochę smażonego mięsa. Tuzin wystarczy.
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_15_05"); //(do siebie) To chyba jakieś żarty...

    Info_ClearChoices      (DIA_Walter_CWGiveOre);
    Info_AddChoice      (DIA_Walter_CWGiveOre, "Słuchaj no...", DIA_Walter_CWGiveOre_NO);
    Info_AddChoice      (DIA_Walter_CWGiveOre, "Ech, no dobra...", DIA_Walter_CWGiveOre_YES);
};

FUNC VOID DIA_Walter_CWGiveOre_NO()
{
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_NO_15_01"); //Słuchaj no, szukam Świstaka ze zlecenia Coppera. Naprawdę chcesz mi utrudniać?
    AI_Output (self, other ,"DIA_Walter_CWGiveOre_NO_03_02"); //A wiesz, co mi może zrobić Copper? Gówno. Więc mi tu nie fikaj.
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_NO_15_03"); //Sprawa, w którą zamieszany jest Świstak dotyczy zabójstwa Strażnika. Ciekawe co powie Thorus, kiedy dowie się, że sabotujesz moje zadanie.
    AI_Output (self, other ,"DIA_Walter_CWGiveOre_NO_03_04"); //No dobra, mały, powiem ci. Ten łysol polazł do chaty Cavalorna.
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_NO_15_05"); //Dziękuję bardzo.
    AI_Output (self, other ,"DIA_Walter_CWGiveOre_NO_03_06"); //Nie bądź taki zadowolony. Nie zapomnę ci tej bezczelności, możesz być pewien.
    B_LogEntry                     (CH1_Copper_Wood,"Prośbą i groźbą wydobyłem od Waltera, gdzie udał się Świstak. Czas odwiedzić chatę Cavalorna.");

    B_GiveXP (100);
    AI_StopProcessInfos   (self);
};

FUNC VOID DIA_Walter_CWGiveOre_YES()
{
    AI_Output (other, self ,"DIA_Walter_CWGiveOre_YES_15_01"); //Ech, no dobra...
    AI_Output (self, other ,"DIA_Walter_CWGiveOre_YES_03_02"); //Świetnie. Zatem wracaj prędko. Pamiętaj: 6 butelek piwa, 12 kawałków smażonego mięsa.
    B_LogEntry                     (CH1_Copper_Wood,"Walter życzy sobie dodatkowo sześciu piw i dwunastu smażonych mięs za powiedzenie, gdzie udał się Świstak. Ten człowiek jest niemożliwy.");
    AI_StopProcessInfos   (self);
};
 

Mika 123

Mika 123

Użytkownicy
posty45
Propsy8
Profesjabrak
  • Użytkownicy
Zapomniałem o tym wspomnieć, ale oba dialogi mają przypisane konsekwencje, tj. po dialogu DIA_Walter_CWGiveOre_YES, aktywuje się kolejny dialog z Walterem potrzebny do zadania:



INSTANCE DIA_Walter_CW_GiveFood (C_INFO)
{
   npc          = Grd_237_Walter;
   nr           = 3;
   condition    = DIA_Walter_CW_GiveFood_Condition;
   information  = DIA_Walter_CW_GiveFood_Info;
   permanent   = FALSE;
   description   = "Proszę, oto piwo i mięso.";
};

FUNC INT DIA_Walter_CW_GiveFood_Condition()
{
    if (Npc_KnowsInfo (other, DIA_Walter_CWGiveOre_YES))
    && (Npc_HasItems (other, ItFoMutton) >=12)
    && (Npc_HasItems (other, ItFoBeer) >=6)
    {
    return TRUE;
    };
};



a po DIA_Walter_CWGiveOre_NO aktywuje się dialog już bezpośrednio u Cavalorna:



INSTANCE DIA_Cavalorn_CW_AboutSwistak (C_INFO)
{
   npc          = Stt_336_Cavalorn;
   nr           = 1;
   condition    = DIA_Cavalorn_CW_AboutSwistak_Condition;
   information  = DIA_Cavalorn_CW_AboutSwistak_Info;
   permanent   = FALSE;
   description   = "Witaj, Cavalornie. Widziałeś tu Świstaka?";
};

FUNC INT DIA_Cavalorn_CW_AboutSwistak_Condition()
{
    if (Npc_KnowsInfo (other, DIA_Walter_CW_GiveFood))
    || (Npc_KnowsInfo (other, DIA_Walter_CWGiveOre_NO))
    {
    return TRUE;
    };
};



Niby to oczywiste. Ale może coś zmieni.
 

frN

frN

Użytkownicy
posty55
Propsy27
ProfesjaGracz
  • Użytkownicy
Jestem prawie pewien, że do Npc_KnowsInfo można użyc tylko instancji C_INFO, a DIA_Walter_CWGiveOre_YES nie jest instacja tego typu i przez to wywala błąd.
 

Mika 123

Mika 123

Użytkownicy
posty45
Propsy8
Profesjabrak
  • Użytkownicy
Czyli mam zamienić podopcje na dialogi główne, żeby pasowało do Npc_KnowsInfo? Czy da się przypisać im C_Info?
 

frN

frN

Użytkownicy
posty55
Propsy27
ProfesjaGracz
  • Użytkownicy
Możesz dodać zmienne, np.
var int Walter_WantsFood
var int PlayerKnowsAboutCavalornOrSomethingIDK

W DIA_Walter_CWGiveOre_YES
Walter_WantsFood = LOG_RUNNING
W DIA_Walter_CWGiveOre_NO
PlayerKnowsAboutCavalornOrSomethingIDK = true
No i oczywiście w DIA_Walter_CW_GiveFood_Condition zmienić w warunku z tego KnowsInfo na
Walter_WantsFood == LOG_RUNNING
DIA_Walter_CW_GiveFood_Info
Walter_WantsFood = LOG_SUCCESS
PlayerKnowsAboutCavalornOrSomethingIDK = true

I wtedy w dialogu u Cavalorna dajesz warunek
if (PlayerKnowsAboutCavalornOrSomethingIDK)Tak dla pewności żeby było wiadomo, że gracz wybrał jedną z dwóch opcji.


Nie zajmuję się moddingiem gothica, ale myślę, że powinno być ok.
 

Mika 123

Mika 123

Użytkownicy
posty45
Propsy8
Profesjabrak
  • Użytkownicy
Dzięki @frN. Działa jak złoto i przyda się jako szablon na przyszłość. Leci props
 


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