Problem z warunkiem if (Npc_GetDistToWP) w Gothic 1. 3510 6

O temacie

Autor Misiak

Zaczęty 21.08.2011 roku

Wyświetleń 3510

Odpowiedzi 6

Misiak

Misiak

Użytkownicy
posty8
  • Użytkownicy
Kilka dni temu zacząłem tworzyć małego moda, by się trochę poduczyć moddingu, lecz dzisiaj trafiłem na małą zaporę i nie potrafię sobie z nią poradzić. Mianowinie stworzyłem 2 dialogi do jednego NPC. Dobra, pierwszy miał działać bez żadnego warunku, tzn. podchodzę do postaci i po prostu z nią gadam. Po owym dialogu ruszamy z NPC do jego domy i tu właśnie zaczyna się problem. Napisałem warunek, że drugi dialog ma stać się dopiero dostępny, gdy będę w pobliżu danego waypointu, czyli w tym przypadku domu NPC. Niestety dialog jest dostępny od początku gry razem z tym pierwszym. Co zrobić, by drugi dialog nie pojawiał się w spisie do czasu, aż dojdę z postacią do jego domu? Tu macie trochę kodu:

//========================================
//-----------------> siema2
//========================================

INSTANCE DIA_Lukasz_siema2 (C_INFO)
{
   npc          = VLK_1667_Lukasz;
   nr           = 2;
   condition    = DIA_Lukasz_siema2_Condition;
   information  = DIA_Lukasz_siema2_Info;
   permanent   = FALSE;
   description  = "I co teraz?";
};

FUNC INT DIA_Lukasz_siema2_Condition()
{
    return TRUE;
};


FUNC VOID DIA_Lukasz_siema2_Info()
{
    if (Npc_GetDistToWP(hero, "OCR_HUT_Z5") > 1500)
{   B_LogEntry(CH1_Droga,"Dotarliśmy do miejsca zamieszkania Lukasza. Nigdy nie myślałem, że będę współpracował ze zwykłym kopaczem. Czas pokaże, czy słusznie wybrałem pomagając mu.");
   Log_SetTopicStatus(CH1_Droga,LOG_SUCCESS);  
   
   B_GiveXP (100);
   
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_09"); //Dobra jesteśmy na miejscu. Jak ci się podoba moje mieszkanie?
    AI_Output (other, self ,"DIA_Lukasz_siema2_15_10"); //Nie wierzę, że to wszystko jest twoje. Pewnie nikt nawet nie wie, że tu śpisz.
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_11"); //Rozgryzłeś mnie, to wcale nie jest moje, ale mniejsza z tym. W końcu przyszedłeś tu w konkretnej sprawie.
    AI_Output (other, self ,"DIA_Lukasz_siema2_15_12"); //Właśnie, kto w obozie może chcieć mojej śmierci? Nikt jeszcze mnie tu nie zna.
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_13"); //Nie musi cię znać, by chcieć zabić, ale zacznijmy od samego początku. Przed powstaniem bariery zamieszkiwałem wyspę zwaną Khorinis.
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_18"); //Jest to małe miasto portowe zamieszkiwane przez wpływowych ludzi, ale też przez złoczyńców.
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_19"); //W nim właśnie spotkałem Tomasza, który teraz może chcieć cię zabić.
    AI_Output (other, self ,"DIA_Lukasz_siema2_15_20"); //Tomasz? Nie znam takiej osoby, więc dlaczego on może chcieć mnie zabić.
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_21"); //Problem tej istoty tkwi w tym, że pewnej nocy zabił swojego ojca w niekontrolowanym gniewie. Od tego czasu dzieją się z nim dziwne rzeczy.
    AI_Output (other, self ,"DIA_Lukasz_siema2_15_22"); //Dziwne rzeczy? Co masz na myśli?
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_23"); //Od tamtego dnia każde złe słowo skierowane w jego kierunku zamienia się w krwawą rzeź. Tu nie chodzi tylko o twój los, ale też całego obozu!
    AI_Output (other, self ,"DIA_Lukasz_siema2_15_24"); //Skoro sprawia tyle problemów, dlaczego po prostu strażnicy się go nie pozbędą?
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_25"); //Nie mogą. Tomasz dostał gwarancję od Gomeza, że nie może zostać zaatakowany znienacka, inaczej strażnicy muszą zabić atakującego.
    AI_Output (other, self ,"DIA_Lukasz_siema2_15_26"); //Chcesz, żebym się poświęcił?!
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_27"); //Nie, źle mnie zrozumiałeś. Tomek może zginąć tylko w honorowej walce na arenie.
    AI_Output (self, other ,"DIA_Lukasz_siema2_03_28"); //Twoje pierwsze zadanie polega na odwiedzeniu areny i pokonaniu niejakiego Huberta. Jego miecz może się nam przydać w  walce z Tomusiem.
   

    Info_ClearChoices   (DIA_Lukasz_siema2);
    Info_AddChoice      (DIA_Lukasz_siema2, "Niech się stanie, co musi. Wyruszę na arenę, by zdobyć miecz Huberta, który pomoże mi zniszczyć  prześladowcę.", DIA_Lukasz_siema2_zgoda2);
    Info_AddChoice      (DIA_Lukasz_siema2, "Sam sobie idź po ten miecz, nie jestem tu od wykonywania twoich marnych poleceń.", DIA_Lukasz_siema2_rezygnacja2); };
};

FUNC VOID DIA_Lukasz_siema2_zgoda2()
{
    AI_Output (other, self ,"DIA_Lukasz_siema2_zgoda2_15_01"); //Niech się stanie, co musi. Wyruszę na arenę, by zdobyć miecz Huberta, który pomoże mi zniszczyć  prześladowcę.  
    Log_CreateTopic(PL_Hubert,LOG_MISSION);
    Log_SetTopicStatus(PL_Hubert,LOG_RUNNING);
    B_LogEntry(PL_Hubert,"Lukasz opowiedział mi historię Tomasza. Postanowiłem mu pomóc w walce z tym obłąkańcem. Pierwszym krokiem do zwycięstwa jest zdobycie oręża od niejakiego Huberta poprzez walkę na arenie.");
    AI_Output (self, other ,"DIA_Lukasz_siema2_zgoda2_03_02"); //Dobrze, będę trzymał za ciebie kciuki. Gdy wrócisz opowiem ci coś więcej o sobie i tej całej sprawie.
   Npc_ExchangeRoutine (self, "domek");
    AI_StopProcessInfos   (self);
};

FUNC VOID DIA_Lukasz_siema2_rezygnacja2()
{
    AI_Output (other, self ,"DIA_Lukasz_siema2_rezygnacja2_15_01"); //Sam sobie idź po ten miecz, nie jestem tu od wykonywania twoich marnych poleceń.
    AI_Output (self, other ,"DIA_Lukasz_siema2_rezygnacja2_03_02"); //Zawiodłem się na tobie, ale skoro sprawy tak się mają, jestem zmuszony się ciebie pozbyć, byś nie rozprzestrzeniał tej historii.
    AI_StopProcessInfos   (self);
    Npc_SetPermAttitude (self, ATT_HOSTILE);
    Npc_SetTarget (self, other);
    AI_StartState (self, ZS_ATTACK, 1, "");
};
 

Hraoldzix

Hraoldzix

Użytkownicy
posty73
Propsy12
  • Użytkownicy
Spróbuj tak:

//========================================
 //-----------------> siema2
 //========================================

 INSTANCE DIA_Lukasz_siema2 (C_INFO)
 {
 npc = VLK_1667_Lukasz;
 nr = 2;
 condition = DIA_Lukasz_siema2_Condition;
 information = DIA_Lukasz_siema2_Info;
 permanent = FALSE;
 description = "I co teraz?";
 };

 FUNC INT DIA_Lukasz_siema2_Condition()
 {
 if (Npc_GetDistToWP(hero, "OCR_HUT_Z5") > 1500)
 {
 return TRUE;
 };
};


 FUNC VOID DIA_Lukasz_siema2_Info()
 {
 B_LogEntry(CH1_Droga,"Dotarliśmy do miejsca zamieszkania Lukasza. Nigdy nie myślałem, że będę współpracował ze zwykłym kopaczem. Czas pokaże, czy słusznie wybrałem pomagając mu.");
 Log_SetTopicStatus(CH1_Droga,LOG_SUCCESS);

 B_GiveXP (100);

 AI_Output (self, other ,"DIA_Lukasz_siema2_03_09"); //Dobra jesteśmy na miejscu. Jak ci się podoba moje mieszkanie?
 AI_Output (other, self ,"DIA_Lukasz_siema2_15_10"); //Nie wierzę, że to wszystko jest twoje. Pewnie nikt nawet nie wie, że tu śpisz.
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_11"); //Rozgryzłeś mnie, to wcale nie jest moje, ale mniejsza z tym. W końcu przyszedłeś tu w konkretnej sprawie.
 AI_Output (other, self ,"DIA_Lukasz_siema2_15_12"); //Właśnie, kto w obozie może chcieć mojej śmierci? Nikt jeszcze mnie tu nie zna.
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_13"); //Nie musi cię znać, by chcieć zabić, ale zacznijmy od samego początku. Przed powstaniem bariery zamieszkiwałem wyspę zwaną Khorinis.
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_18"); //Jest to małe miasto portowe zamieszkiwane przez wpływowych ludzi, ale też przez złoczyńców.
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_19"); //W nim właśnie spotkałem Tomasza, który teraz może chcieć cię zabić.
 AI_Output (other, self ,"DIA_Lukasz_siema2_15_20"); //Tomasz? Nie znam takiej osoby, więc dlaczego on może chcieć mnie zabić.
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_21"); //Problem tej istoty tkwi w tym, że pewnej nocy zabił swojego ojca w niekontrolowanym gniewie. Od tego czasu dzieją się z nim dziwne rzeczy.
 AI_Output (other, self ,"DIA_Lukasz_siema2_15_22"); //Dziwne rzeczy? Co masz na myśli?
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_23"); //Od tamtego dnia każde złe słowo skierowane w jego kierunku zamienia się w krwawą rzeź. Tu nie chodzi tylko o twój los, ale też całego obozu!
 AI_Output (other, self ,"DIA_Lukasz_siema2_15_24"); //Skoro sprawia tyle problemów, dlaczego po prostu strażnicy się go nie pozbędą?
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_25"); //Nie mogą. Tomasz dostał gwarancję od Gomeza, że nie może zostać zaatakowany znienacka, inaczej strażnicy muszą zabić atakującego.
 AI_Output (other, self ,"DIA_Lukasz_siema2_15_26"); //Chcesz, żebym się poświęcił?!
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_27"); //Nie, źle mnie zrozumiałeś. Tomek może zginąć tylko w honorowej walce na arenie.
 AI_Output (self, other ,"DIA_Lukasz_siema2_03_28"); //Twoje pierwsze zadanie polega na odwiedzeniu areny i pokonaniu niejakiego Huberta. Jego miecz może się nam przydać w walce z Tomusiem.


 Info_ClearChoices (DIA_Lukasz_siema2);
 Info_AddChoice (DIA_Lukasz_siema2, "Niech się stanie, co musi. Wyruszę na arenę, by zdobyć miecz Huberta, który pomoże mi zniszczyć prześladowcę.", DIA_Lukasz_siema2_zgoda2);
 Info_AddChoice (DIA_Lukasz_siema2, "Sam sobie idź po ten miecz, nie jestem tu od wykonywania twoich marnych poleceń.", DIA_Lukasz_siema2_rezygnacja2);
 };


 FUNC VOID DIA_Lukasz_siema2_zgoda2()
 {
 AI_Output (other, self ,"DIA_Lukasz_siema2_zgoda2_15_01"); //Niech się stanie, co musi. Wyruszę na arenę, by zdobyć miecz Huberta, który pomoże mi zniszczyć prześladowcę.
 Log_CreateTopic(PL_Hubert,LOG_MISSION);
 Log_SetTopicStatus(PL_Hubert,LOG_RUNNING);
 B_LogEntry(PL_Hubert,"Lukasz opowiedział mi historię Tomasza. Postanowiłem mu pomóc w walce z tym obłąkańcem. Pierwszym krokiem do zwycięstwa jest zdobycie oręża od niejakiego Huberta poprzez walkę na arenie.");
 AI_Output (self, other ,"DIA_Lukasz_siema2_zgoda2_03_02"); //Dobrze, będę trzymał za ciebie kciuki. Gdy wrócisz opowiem ci coś więcej o sobie i tej całej sprawie.
 Npc_ExchangeRoutine (self, "domek");
 AI_StopProcessInfos (self);
 };

 FUNC VOID DIA_Lukasz_siema2_rezygnacja2()
 {
 AI_Output (other, self ,"DIA_Lukasz_siema2_rezygnacja2_15_01"); //Sam sobie idź po ten miecz, nie jestem tu od wykonywania twoich marnych poleceń.
 AI_Output (self, other ,"DIA_Lukasz_siema2_rezygnacja2_03_02"); //Zawiodłem się na tobie, ale skoro sprawy tak się mają, jestem zmuszony się ciebie pozbyć, byś nie rozprzestrzeniał tej historii.
 AI_StopProcessInfos (self);
 Npc_SetPermAttitude (self, ATT_HOSTILE);
 Npc_SetTarget (self, other);
 AI_StartState (self, ZS_ATTACK, 1, "");
 };

Niewiem czy będzie działać bo nie sprawdzałem błędów.
 
Życie jest jak papier toaletowy. Długie , szare i do du**. . .



Chyba, że masz Gothica :P






http://www.bandyckahistoriateam.pun.pl/

Misiak

Misiak

Użytkownicy
posty8
  • Użytkownicy
Błędów nie było, ale efektów też żadnych. Nadal opcja "I co teraz?" pojawia się od samego początku gry.
 

Godefroy93

Godefroy93

Rzeka
posty289
Propsy196
NagrodyV
Profesjabrak
  • Rzeka
Spróbuj dodac taką linijkę && Hlp_StrCmp (Npc_GetNearestWP(self),"Nazwa_waypointu")
Dodaj to w tym miejscu

func int DIA_Lukasz_siema2_Condition ()
{

&& Hlp_StrCmp (Npc_GetNearestWP(self),"Nazwa_waypointu")
{
return TRUE;
};

Przepraszam, źle przeczytałem post:)
 
"Pierre is enjoying his new bicycle!"



Spoiler
1.Co to są ryry?

Ryrami płynie woda

2.Obrybiacie bonk?

Tak! Obrybiamy bonk.

To nie zgydne z prywem!

3.Pierre lubi swój nowy rower!

Bardzo mnie to cieszy, a co to za Pierre?

To taki chłopak z wioski.

4.Ładna kurtka!

My alpiniści nazywamy to wiatrochronem.

Niech jej Pan pod żadnym pozorem nie zdejmuje!

Allo!,allo!

Misiak

Misiak

Użytkownicy
posty8
  • Użytkownicy
No już coraz lepiej nam idzie. Po dodaniu tej linijki od użytkownika wyżej, drugi dialog nie jest dostępny od samego początku. Teraz nie jest wcale dostępny. Co można, by jeszcze dodać, żeby teraz dialog był dostępny w tym waypoincie?
 

Hraoldzix

Hraoldzix

Użytkownicy
posty73
Propsy12
  • Użytkownicy
wg mnie zamiast "&&" powinno być tam "if" i na koncu klamra i średnik chyba

func int DIA_Lukasz_siema2_Condition ()
{      
       
        if Hlp_StrCmp    (Npc_GetNearestWP(self),"Nazwa_waypointu")
        {
                return TRUE;
        };
        };
 
Życie jest jak papier toaletowy. Długie , szare i do du**. . .



Chyba, że masz Gothica :P






http://www.bandyckahistoriateam.pun.pl/

Misiak

Misiak

Użytkownicy
posty8
  • Użytkownicy
Dokładnie tak, już wszystko działa jak należy. Dodałem if zamiast && i teraz druga opcja dialogowa jest dostępna tylko w dobrym waypoincie. Dziękuję wszystkim za pomoc, a temat już można zamknąć.
 


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