Problem z wywoływaniem zmiennych (G2) 3129 8

O temacie

Autor Zucklov

Zaczęty 1.02.2014 roku

Wyświetleń 3129

Odpowiedzi 8

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Teraz mam taki problem. Stworzyłem parę zadań i już na samym początku pojawia się błąd, ponieważ opcja dialogowa w ogóle się nie pokazuje.
Fragment kodów:
        //dialog jest załączony do opcji Vatrasa, kiedy daje nam ornament dla Laresa
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_04"); //Przekaż mu ten ornament i każ mu go oddać. Będzie wiedział co zrobić.
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_05"); //A i jeszcze jedno...
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_06"); //Mamy dość dziwną sprawę do rozwiązania...
AI_Output (other, self, "DIA_Addon_Vatras_LaresExit_15_07"); //Zamieniam się w słuch.
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_08"); //Kwatermistrz paladynów, Martin, a jednocześnie jeden z naszych ludzi, ostatnio zauważył dziwne zachowania w porcie.
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_09"); //Nie żeby było to czymś nowym w porcie, ale przykuło jego uwagę zachowanie władz wobec tego co się tam dzieje.
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_10"); //Nie wiem dokładnie o co chodzi - najlepiej porozmawiaj z nim osobiście.
AI_Output (self, other, "DIA_Addon_Vatras_LaresExit_05_11"); //Ach, no i mówił, że to bardzo delikatna sprawa, więc ufam, że będziesz dyskretny.
MIS_HarborInvestigation = LOG_RUNNING;
Log_CreateTopic     (TOPIC_HarborInvestigation, LOG_MISSION);
Log_SetTopicStatus     (TOPIC_HarborInvestigation, LOG_RUNNING);
B_LogEntry (TOPIC_HarborInvestigation,"Vatras powiedział mi, że są pewne problemy w porcie i powinienem pójść do kwatermistrza paladynów aby się dowiedzieć więcej.");
InitializeHarborInvestigation = TRUE;
        //dalsza część skryptu

A w dialogu z Martinem dodałem następujący warunek:
func int DIA_Addon_Martin_InvestigationVatras_Condition ()
{
if (InitializeHarborInvestigation = TRUE)
{
return TRUE;
};
};

I mimo iż wszystko wydaje się poprawne, dialog się w ogóle nie pokazuje w opcjach. Zauważyłem jednak, że w KAŻDYM dialogu, w którym pojawiają się zmienne występuje problem z wywoływaniem, przykładowo:
//*********************************************************************
// Perm1
//*********************************************************************
INSTANCE DIA_Tashman_Perm1   (C_INFO)
{
npc         = MIL_70400_Tashman;
nr          = 1;
condition   = DIA_Tashman_Perm1_Condition;
information = DIA_Tashman_Perm1_Info;
permanent   = TRUE;
description = "Nie lubisz gadać, co?";
};

FUNC INT DIA_Tashman_Perm1_Condition()
{
if (Tashman_StopPerm = FALSE)
{
return TRUE;
};
};

FUNC VOID DIA_Tashman_Perm1_Info()
{
AI_Output (other, self,"DIA_Tashman_Perm1_15_00"); //Nie lubisz gadać, co?
AI_Output (self, other,"DIA_Tashman_Perm1_09_01"); //Zjeżdżaj, kmiocie!
};

Mimo że ta zmienna jest od początku na FALSE, to wystarczy aby się pojawiła, żeby dialog w ogóle się nie mógł wywołać.
Zna może ktoś przyczynę?
 
Lieb Vaterland magst ruhig sein

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Nie muszę chyba pytać czy poprawnie zainicjowałeś zmienną?
I gdzie ją dałeś? Do Story_Globals.d?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

Problem z wywoływaniem zmiennych (G2)
#2 2014-02-01, 20:55(Ostatnia zmiana: 2014-02-01, 21:04)
PLIK nie ma nic do rzeczy. Możesz ją dać byle gdzie tylko, żeby była przed zainicjonowana przed dialogiem. Już kolejna osoba przyczepiła się do plików  :lol2: :lol2: :lol2:
Wskazówka: Jeśli masz zainicjowaną zmienną np. var int InitializeHarborInvestigation; to nie musisz potem dopisywać InitializeHarborInvestigation = FALSE; , ponieważ ona od razu jest na FALSE.
Cytuj
   if (InitializeHarborInvestigation = TRUE)
   {
      return TRUE;
   };
Zapomniałeś dodać jeszcze jeden znak =
Cytuj
if ( InitializeHarborInvestigation == TRUE )
Wskazówka nr 2: Jeśli chcesz porównywać zmienne czy są "równe" to zawsze muszą być ==

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko

Zucklov
Quest Pack Team

Problem z wywoływaniem zmiennych (G2)
#3 2014-02-01, 21:36(Ostatnia zmiana: 2014-02-01, 21:54)
@2up
Gdybym nie zainicjował zmiennej, wywaliłby mi błąd przy parsowaniu.
@up
Wiem, że domyślnie jest na FALSE, ale potem, kiedy npc Tashman będzie związany z questem, chcę mu "wyłączyć" perma, dlatego jest warunek na FALSE. Można var inty dawać gdzie się chce, ale z doświadczenia wiem, że dawanie ich gdzie indziej niż do Story_Globals.d powoduje błędy przy parsowaniu, bo dialogi nie muszą koniecznie parsować się w takiej kolejności jak chcesz (jeżeli zdefiniowanych gdzie indziej zmiennych używasz też w jakimś innym pliku, jeżeli jednorazowo to jesteś bezpieczny). A co do rady to zaraz sprawdzę xD
Cholera, to moment w którym chcę się zapaść pod ziemię ze wstydu  :wstyd: Oczywiście wszystko działa gdy dałem 2 znaki równości. Temat do (chyba) zamknięcia.
 
Lieb Vaterland magst ruhig sein

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To co napisał Chicken, czyli == zamiast =, a do tego - zamiast tworzyć warunek "... == true" możesz umieszczać w warunku samą nazwę zmiennej, przykładowo:
if (InitializeHarborInvestigation)
{
      return TRUE;
};
Wtedy zawartość bloku wykona się zawsze jeśli dana wartość jest niezerowa. 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
@Avallach jak już skracać to na maxa :D

      return InitializeHarborInvestigation;
@JasiuYTPL a tam gdzie musi być false

FUNC INT DIA_Tashman_Perm1_Condition()
{
if (Tashman_StopPerm == FALSE)
{
return TRUE;
};
};

robisz

FUNC INT DIA_Tashman_Perm1_Condition()
{
return !Tashman_StopPerm;
};

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
To od razu skorzystam, bo pojawił się następny problem
Podczas rozmowy z Zurisem otrzymujemy zadanie, mające na celu zaproponowanie Kardifowi nowej oferty. Oczywiście opcja się nie wywołuje.
Skrypt:
instance DIA_Kardif_ZurisOffer        (C_INFO)
{
    npc             =     VLK_431_Kardif;
    nr              =  4;
    condition     =     DIA_Kardif_ZurisOffer_Condition;
    information     =     DIA_Kardif_ZurisOffer_Info;
    permanent    =  TRUE;
    description     =     "Przynoszę propozycję od Zurisa.";
};

func int DIA_Kardif_ZurisOffer_Condition ()
{
    if (Npc_HasItems (other, (ItWr_ZurisOffer_MIS) >= 1))
    && (Npc_KnowsInfo (other, DIA_Zuris_FirstJobInitialize))
    && (Kardif_OfferPerm == FALSE)
    {
        return TRUE;
    };
};

func void DIA_Kardif_ZurisOffer_Info ()
{
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_15_00"); //Przynoszę propozycję od Zurisa.
    if (Kardif_OfferOneTime == FALSE)
    {
        AI_Output (self, other, "DIA_Kardif_ZurisOffer_14_01"); //Jaką propozycję?
        AI_Output (other, self, "DIA_Kardif_ZurisOffer_15_02"); //Zobacz.
        B_UseFakeScroll ();
        AI_Output (self, other, "DIA_Kardif_ZurisOffer_14_03"); //Sam nie wiem...
        Kardif_OfferOneTime = TRUE;
    }
    else
    {
        AI_Output (self, other, "DIA_Kardif_ZurisOffer_14_04"); //Co znowu?
    };
    Info_ClearChoices (DIA_Kardif_ZurisOffer);
    Info_AddChoice (DIA_Kardif_ZurisOffer, "Przyjdę później...", DIA_Kardif_ZurisOffer_Back);
    Info_AddChoice (DIA_Kardif_ZurisOffer, "Pomyśl. Ten traktat jest korzystny dla obu stron.", DIA_Kardif_ZurisOffer_Selling);
    Info_AddChoice (DIA_Kardif_ZurisOffer, "Chce ci się czekać na Lariusa?", DIA_Kardif_ZurisOffer_Larius);
};

FUNC VOID DIA_Kardif_ZurisOffer_Back ()
{
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_Back_15_00"); //Przyjdę później...
    Info_ClearChoices    (DIA_Kardif_ZurisOffer);
};

FUNC VOID DIA_Kardif_ZurisOffer_Selling ()
{
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_Selling_15_00"); //Pomyśl. Ten traktat jest korzystny dla obu stron.
    AI_Output (self, other, "DIA_Kardif_ZurisOffer_Selling_14_01"); //Niby tak, ale...
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_Selling_15_02"); //Ale?
    AI_Output (self, other, "DIA_Kardif_ZurisOffer_Selling_14_03"); //A chrzanić to! Zbyt długo czekam na dostawę od Lariusa. Ten nadęty snob siedzi w swoim ratuszyku i ma w dupie mnie i moją tawernę!   
    AI_Output (self, other, "DIA_Kardif_ZurisOffer_Selling_14_04"); //Daj mi ten papier.
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_Selling_15_05"); //Proszę.
    B_GiveInvItems (other, self, ItWr_ZurisOffer_MIS, 1);
    AI_Output (self, other, "DIA_Kardif_ZurisOffer_Selling_14_06"); //Wróć do Zurisa i powiedz mu, że przyjmuję jego ofertę.   
    AI_Output (self, other, "DIA_Kardif_ZurisOffer_Selling_14_07"); //Tylko piwo ma być świeże!
    Kardif_OfferPerm = TRUE;
    Kardif_SoldOffer = TRUE;
    Info_ClearChoices    (DIA_Kardif_ZurisOffer);
};

FUNC VOID DIA_Kardif_ZurisOffer_Larius ()
{
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_Larius_15_00"); //Chce ci się czekać na Lariusa?
    AI_Output (self, other, "DIA_Kardif_ZurisOffer_Larius_14_01"); //Skąd ty do cholery wiesz o moim kontrakcie?
    AI_Output (other, self, "DIA_Kardif_ZurisOffer_Larius_14_02"); //Zjeżdżaj!
    Kardif_OfferPerm = TRUE;
    Log_SetTopicStatus  (TOPIC_MerchantsEmployee, LOG_FAILED);
    Info_ClearChoices    (DIA_Kardif_ZurisOffer);
    AI_StopProcessInfos (self);   
};

Jakby była potrzebna, to rozmowa z Zurisem:

instance DIA_Zuris_FirstJobInitialize (C_INFO)
{
npc = VLK_409_Zuris;
nr = 11;
condition = DIA_Zuris_FirstJobInitialize_Condition;
information = DIA_Zuris_FirstJobInitialize_Info;
permanent = FALSE;
description = "Kontynuuj.";
};

func int DIA_Zuris_FirstJobInitialize_Condition ()
{
if (Npc_KnowsInfo (other, DIA_Zuris_FirstJob))
{
return TRUE;
};
};
func void DIA_Zuris_FirstJobInitialize_Info ()
{
AI_Output (other, self, "DIA_Zuris_FirstJobInitialize_15_00"); //Kontynuuj.
AI_Output (self, other, "DIA_Zuris_FirstJobInitialize_14_01"); //Dobra. To nie powinno być zbyt trudne...
AI_Output (self, other, "DIA_Zuris_FirstJobInitialize_14_02"); //Kardif, właściciel karczmy w porcie narzeka, że jego szynk cienko przędzie z dostawami.
AI_Output (self, other, "DIA_Zuris_FirstJobInitialize_14_03"); //Sęk w tym, że gospodę, przynajmniej teoretycznie zaopatruje Larius, nasz główny konkurent handlowy.
AI_Output (self, other, "DIA_Zuris_FirstJobInitialize_14_04"); //Sprawa jest całkiem prosta, idź do Kardifa i przedstaw mu tę oto ofertę.
CreateInvItems (self, ItWr_ZurisOffer_MIS, 1);
B_GiveInvItems (self, other, ItWr_ZurisOffer_MIS, 1);
AI_Output (self, other, "DIA_Zuris_FirstJobInitialize_14_05"); //Jeżeli to wykonasz, to wyczuwam początek długiej i owocnej współpracy między nami.
AI_Output (self, other, "DIA_Zuris_FirstJobInitialize_14_06"); //A teraz idź. Kardif nie będzie czekał w nieskończoność!
EmployingAtMerchants = TRUE;
Log_CreateTopic     (TOPIC_MerchantsEmployee, LOG_MISSION);
Log_SetTopicStatus     (TOPIC_MerchantsEmployee, LOG_RUNNING);
B_LogEntry (TOPIC_MerchantsEmployee, "Podjąłem się pracy w Związku Kupców. Moim pierwszym zadaniem jest udanie się do Kardifa i przedstawienie mu nowej oferty handlowej między nim a Związkiem. Nie powinno być to trudne, zważywszy na fakt, iż ludzie Lariusa zwlekają z dostawą.");
B_LogEntry (TOPIC_HarborInvestigation, "Zatrudniłem się u kupców. Ale moje zadanie dopiero się zaczyna.");
ZurisOffer_Day = Wld_GetDay (); //ta funkcja tylko definiuje fakt, że Zuris jak skończymy będzie narzekał na naszą powolność
};

EDIT: Tamte dialogi, które wcześniej pokazałem działają miodnie  :D
 
Lieb Vaterland magst ruhig sein

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Cytuj
if (Npc_HasItems (other, (ItWr_ZurisOffer_MIS) >= 1))
Te nawiasy na czerwono są zbędne. Myślę że to jest ten problem.

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Oczywiście wszystko działa xD Dziwi mnie tylko, że takie bzdury powodują, że wszystko się sypie.
 
Lieb Vaterland magst ruhig sein


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