NPC po rozmowie nie prowadzi mnie do wyznaczonego waypointu. 15064 51

O temacie

Autor Ayman

Zaczęty 11.06.2014 roku

Wyświetleń 15064

Odpowiedzi 51

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Cześć, tak jak w temacie, mój NPC nie chce się ruszyć z miejsca, chociaż nie wychodzą żadne błędy w skrypcie przy reparsowaniu. Po drugiej rozmowie z NPC powinien ruszyc i zaprowadzić mnie do miejsca przeznaczenia. niestety nie rusza się, nie jest już w startowej rutynie, bo widać, że stoi sztywno jak Bezio. NPC powinien mnie zaprowadzić w miejsce (rutyna GUIDE) oraz zostać niedaleko tam (czyli rutyna OBOZ). Przeanalizowałem kod parenaście razy no i nie widze błędu (oczywiscie on gdzieś tam jest).

Oto kod :
//*********************************************************************
// Info EXIT
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_EXIT   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 999;
condition   = DIA_SLD_888_Kris_EXIT_Condition;
information = DIA_SLD_888_Kris_EXIT_Info;
permanent   = TRUE;
description = DIALOG_ENDE;
};

FUNC INT DIA_SLD_888_Kris_EXIT_Condition()
{
return TRUE;
};

FUNC VOID DIA_SLD_888_Kris_EXIT_Info()
{
AI_StopProcessInfos (self);
};

//*********************************************************************
// Info Hello
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_Hello   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 1;
condition   = DIA_SLD_888_Kris_Hello_Condition;
information = DIA_SLD_888_Kris_Hello_Info;
permanent   = FALSE;
description = "Siema, kim jesteś?";
};

FUNC INT DIA_SLD_888_Kris_Hello_Condition()
{
return TRUE;
};

FUNC VOID DIA_SLD_888_Kris_Hello_Info()
{
AI_Output (other, self, "DIA_SLD_888_Kris_Hello_15_00"); //Siema, kim jesteś?
AI_Output (self, other, "DIA_SLD_888_Kris_Hello_01_01"); //Jestem Kris i czekam tu na Ciebie.
  AI_Output (other, self, "DIA_SLD_888_Kris_Hello_15_02"); //Na mnie ?
  AI_Output (self, other, "DIA_SLD_888_Kris_Hello_01_03"); //Tak, niejaki Mirek cię szuka. Jest niedaleko stąd w obozie.
  AI_Output (other, self, "DIA_SLD_888_Kris_Hello_15_04"); //Ok, to mnie zaprowadź.


 
};

//*********************************************************************
// Zadanie 1
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_zadanie1   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 1;
condition   = DIA_SLD_888_Kris_zadanie1_Condition;
information = DIA_SLD_888_Kris_zadanie1_Info;
permanent   = FALSE;
description = "No to co idziemy?";
};

FUNC INT DIA_SLD_888_Kris_zadanie1_Condition()
{
if (npc_knowsinfo (other, DIA_SLD_888_Kris_Hello))
{
return TRUE;
};
};

FUNC VOID DIA_SLD_888_Kris_zadanie1_Info()
{
AI_Output (other, self, "DIA_SLD_888_Kris_zadanie1_15_00"); //No to co idziemy?
AI_Output (self, other, "DIA_SLD_888_Kris_zadanie1_01_01"); //Tak, chodź za mną.
       

        Log_CreateTopic (TOPIC_Oboz, LOG_MISSION);
        Log_SetTopicStatus (TOPIC_Oboz, LOG_RUNNING);
        B_LogEntry (TOPIC_Oboz, "Kris zaprowadzi mnie do obozu.");

        self.aivar[AIV_PARTYMEMBER] = TRUE;
        self.npctype = NPCTYPE_FRIEND;
        Npc_ExchangeRoutine (self,"GUIDE");

        AI_StopProcessInfos (self);

 
};

//*********************************************************************
// Koniec Zadanie 1
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_oboz   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 1;
condition   = DIA_SLD_888_Kris_oboz_Condition;
information = DIA_SLD_888_Kris_oboz_Info;
permanent   = FALSE;
  important   = TRUE;
description = "Jesteśmy na miejscu.";
};

FUNC INT DIA_SLD_888_Kris_oboz_Condition()
{
if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (npc_knowsinfo (other, DIA_SLD_888_Kris_zadanie1))
&& (Npc_GetDistToWP (self,"NW_XARDAS_TOWER_PATCH_01_B") <= 10)
{
return TRUE;

};
};

FUNC VOID DIA_SLD_888_Kris_oboz_Info()
{
AI_Output (self, other, "DIA_SLD_888_Kris_oboz_01_00"); //Jesteśmy na miejscu.
AI_Output (other, self, "DIA_SLD_888_Kris_oboz_15_01"); //Dzieki Kris. Nara
       
   
        B_LogEntry (TOPIC_Oboz, "Kris zaprowadził mnie do zajebistego obozu.");
        Log_SetTopicStatus (TOPIC_Oboz, LOG_SUCCESS);
       
        self.aivar[AIV_PARTYMEMBER] = FALSE;
        Npc_ExchangeRoutine (self,"OBOZ");

        AI_StopProcessInfos (self);

 
};


                                                                               
 
"Lók, jestem tfojim ojcem!"

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Waypoint połączony z waynetem?
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Caesum

Caesum

Użytkownicy
posty1729
Propsy2216
NagrodyV
Profesjabrak
  • Użytkownicy
Te dialogi to testowe, czy naprawdę chcesz je upchnąć do moda? :F
 

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Jasne, że testowe, chociaż mod raczej śmiechowy ma być. Waypointy na 100% sa połączone (te czerwone linie między wp), gdyż wykorzystałem te które już w grze były, one są w wierzy Xardasa. Startowy jest kolo samego Xardasa, końcowy (tam gdzie ma mnie zaprowadzić) przy wejsciu do Wieży. Dziwna sprawa.
 
"Lók, jestem tfojim ojcem!"

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
To pokaż skrypt NPC, bo pewnie źle rutynę napisałeś.

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Skrypt NPC, użyłem TA_Guide_Player

instance SLD_888_Kris (Npc_Default)
{
// ------ NSC ------
name = "Kris Dżotko";
guild = GIL_BAU;
id = 888;
voice = 14;
flags       = NPC_FLAG_IMMORTAL; //NPC_FLAG_IMMORTAL oder 0
npctype = NPCTYPE_MAIN;

// ------ Attribute ------
B_SetAttributesToChapter (self, 4); //setzt Attribute und LEVEL entsprechend dem angegebenen Kapitel (1-6)

// ------ Kampf-Taktik ------
fight_tactic = FAI_HUMAN_STRONG; // MASTER / STRONG / COWARD

// ------ Inventory ------
B_CreateAmbientInv (self);

// ------ visuals ------ //Muss NACH Attributen kommen, weil in B_SetNpcVisual die Breite abh. v. STR skaliert wird
B_SetNpcVisual (self, MALE, "Hum_Head_Bald", Face_N_Scar, BodyTex_W, NO_ARMOR);
Mdl_SetModelFatness (self, 2);
Mdl_ApplyOverlayMds (self, "Humans_Arrogance.mds"); // Tired / Militia / Mage / Arrogance / Relaxed

// ------ NSC-relevante Talente vergeben ------
B_GiveNpcTalents (self);

// ------ Kampf-Talente ------ //Der enthaltene B_AddFightSkill setzt Talent-Ani abhängig von TrefferChance% - alle Kampftalente werden gleichhoch gesetzt
B_SetFightSkills (self, 70); //Grenzen für Talent-Level liegen bei 30 und 60i

// ------ TA anmelden ------
daily_routine = Rtn_Start_888;
};

FUNC VOID Rtn_Start_888 ()
{
TA_Stand_Guarding (09,00,21,00,"NW_XARDAS_TOWER_IN1_26");
         TA_Stand_Guarding                      (21,00,09,00,"NW_XARDAS_TOWER_IN1_26");
};

FUNC VOID Rtn_guide_888 ()
{
TA_Guide_Player           (09,00,21,00,"NW_XARDAS_TOWER_PATCH_01_B");
         TA_Guide_Player                      (09,00,21,00,"NW_XARDAS_TOWER_PATCH_01_B");
};

FUNC VOID Rtn_oboz_888 ()
{
TA_Stand_Guarding (09,00,21,00,"NW_XARDAS_TOWER_PATCH_01");
         TA_Stand_Guarding                      (21,00,09,00,"NW_XARDAS_TOWER_PATCH_01");
};

                                                                                                   
 
"Lók, jestem tfojim ojcem!"

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Błąd w nazwie waypointa. Trzeba też po angielsku umieć pisać. Po angielsku "droga" to "path", a nie "patch" :facepalm: Poza tym godziny się nie zgadzają w Guide, ale w tym przypadku nie ma to znaczenia.
 
Lieb Vaterland magst ruhig sein

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Tak, to była literówka. NPC ruszył, dobiega do waypointu ale nie zagaduję mnie i nie aktualizuję się dziennik jako wykonane zadanie.
 
"Lók, jestem tfojim ojcem!"

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
No bo masz ten sam błąd ("patch") w warunku dialogu.
 

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Nie, poprawiłem od razu patch na path w obu plikach. Dobiegam z NPC do wp i nie zagaduję do mnie.

//*********************************************************************
// Info EXIT
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_EXIT   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 999;
condition   = DIA_SLD_888_Kris_EXIT_Condition;
information = DIA_SLD_888_Kris_EXIT_Info;
permanent   = TRUE;
description = DIALOG_ENDE;
};

FUNC INT DIA_SLD_888_Kris_EXIT_Condition()
{
return TRUE;
};

FUNC VOID DIA_SLD_888_Kris_EXIT_Info()
{
AI_StopProcessInfos (self);
};

//*********************************************************************
// Info Hello
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_Hello   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 1;
condition   = DIA_SLD_888_Kris_Hello_Condition;
information = DIA_SLD_888_Kris_Hello_Info;
permanent   = FALSE;
description = "Siema, kim jesteś?";
};

FUNC INT DIA_SLD_888_Kris_Hello_Condition()
{
return TRUE;
};

FUNC VOID DIA_SLD_888_Kris_Hello_Info()
{
AI_Output (other, self, "DIA_SLD_888_Kris_Hello_15_00"); //Siema, kim jesteś?
AI_Output (self, other, "DIA_SLD_888_Kris_Hello_01_01"); //Jestem Kris i czekam tu na Ciebie.
  AI_Output (other, self, "DIA_SLD_888_Kris_Hello_15_02"); //Na mnie ?
  AI_Output (self, other, "DIA_SLD_888_Kris_Hello_01_03"); //Tak, niejaki Mirek cię szuka. Jest niedaleko stąd w obozie.
  AI_Output (other, self, "DIA_SLD_888_Kris_Hello_15_04"); //Ok, to mnie zaprowadź.


 
};

//*********************************************************************
// Zadanie 1
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_zadanie1   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 1;
condition   = DIA_SLD_888_Kris_zadanie1_Condition;
information = DIA_SLD_888_Kris_zadanie1_Info;
permanent   = FALSE;
description = "No to co idziemy?";
};

FUNC INT DIA_SLD_888_Kris_zadanie1_Condition()
{
if (npc_knowsinfo (other, DIA_SLD_888_Kris_Hello))
{
return TRUE;
};
};

FUNC VOID DIA_SLD_888_Kris_zadanie1_Info()
{
AI_Output (other, self, "DIA_SLD_888_Kris_zadanie1_15_00"); //No to co idziemy?
AI_Output (self, other, "DIA_SLD_888_Kris_zadanie1_01_01"); //Tak, chodź za mną.
       

        Log_CreateTopic (TOPIC_Oboz, LOG_MISSION);
        Log_SetTopicStatus (TOPIC_Oboz, LOG_RUNNING);
        B_LogEntry (TOPIC_Oboz, "Kris zaprowadzi mnie do obozu.");

        self.aivar[AIV_PARTYMEMBER] = TRUE;
        self.npctype = NPCTYPE_FRIEND;
        Npc_ExchangeRoutine (self,"GUIDE");

        AI_StopProcessInfos (self);

 
};

//*********************************************************************
// Koniec Zadanie 1
//*********************************************************************
INSTANCE DIA_SLD_888_Kris_oboz   (C_INFO)
{
npc         = SLD_888_Kris;
nr          = 1;
condition   = DIA_SLD_888_Kris_oboz_Condition;
information = DIA_SLD_888_Kris_oboz_Info;
permanent   = FALSE;
  important   = TRUE;
description = "Jesteśmy na miejscu.";
};

FUNC INT DIA_SLD_888_Kris_oboz_Condition()
{
if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (npc_knowsinfo (other, DIA_SLD_888_Kris_zadanie1))
&& (Npc_GetDistToWP (self,"NW_XARDAS_TOWER_PATH_01_B") <= 100)
{
return TRUE;

};
};

FUNC VOID DIA_SLD_888_Kris_oboz_Info()
{
AI_Output (self, other, "DIA_SLD_888_Kris_oboz_01_00"); //Jesteśmy na miejscu.
AI_Output (other, self, "DIA_SLD_888_Kris_oboz_15_01"); //Dzieki Kris. Nara
       
   
        B_LogEntry (TOPIC_Oboz, "Kris zaprowadził mnie do zajebistego obozu.");
        Log_SetTopicStatus (TOPIC_Oboz, LOG_SUCCESS);
       
        self.aivar[AIV_PARTYMEMBER] = FALSE;
        Npc_ExchangeRoutine (self,"OBOZ");

        AI_StopProcessInfos (self);

 
};


                                           

instance SLD_888_Kris (Npc_Default)
{
// ------ NSC ------
name = "Kris Dżotko";
guild = GIL_BAU;
id = 888;
voice = 14;
flags       = NPC_FLAG_IMMORTAL; //NPC_FLAG_IMMORTAL oder 0
npctype = NPCTYPE_MAIN;

// ------ Attribute ------
B_SetAttributesToChapter (self, 4); //setzt Attribute und LEVEL entsprechend dem angegebenen Kapitel (1-6)

// ------ Kampf-Taktik ------
fight_tactic = FAI_HUMAN_STRONG; // MASTER / STRONG / COWARD

// ------ Inventory ------
B_CreateAmbientInv (self);

// ------ visuals ------ //Muss NACH Attributen kommen, weil in B_SetNpcVisual die Breite abh. v. STR skaliert wird
B_SetNpcVisual (self, MALE, "Hum_Head_Bald", Face_N_Scar, BodyTex_W, NO_ARMOR);
Mdl_SetModelFatness (self, 2);
Mdl_ApplyOverlayMds (self, "Humans_Arrogance.mds"); // Tired / Militia / Mage / Arrogance / Relaxed

// ------ NSC-relevante Talente vergeben ------
B_GiveNpcTalents (self);

// ------ Kampf-Talente ------ //Der enthaltene B_AddFightSkill setzt Talent-Ani abhängig von TrefferChance% - alle Kampftalente werden gleichhoch gesetzt
B_SetFightSkills (self, 70); //Grenzen für Talent-Level liegen bei 30 und 60i

// ------ TA anmelden ------
daily_routine = Rtn_Start_888;
};

FUNC VOID Rtn_Start_888 ()
{
TA_Stand_Guarding (09,00,21,00,"NW_XARDAS_TOWER_IN1_26");
         TA_Stand_Guarding                      (21,00,09,00,"NW_XARDAS_TOWER_IN1_26");
};

FUNC VOID Rtn_guide_888 ()
{
TA_Guide_Player           (09,00,21,00,"NW_XARDAS_TOWER_PATH_01_B");
         TA_Guide_Player                      (09,00,21,00,"NW_XARDAS_TOWER_PATH_01_B");
};

FUNC VOID Rtn_oboz_888 ()
{
TA_Stand_Guarding (09,00,21,00,"NW_XARDAS_TOWER_PATH_01");
         TA_Stand_Guarding                      (21,00,09,00,"NW_XARDAS_TOWER_PATH_01");
};

                                                                     
 
"Lók, jestem tfojim ojcem!"

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Spróbuj zamienic DIA_SLD_888_Kris_zadanie1 na DIA_SLD_888_Kris_zadanie1_15_00, pamietam jakies problemy z npc_knowsinfo, niektóre z dialogów (prawie na pewno te "permanent") zawsze zwracaly false.

Ewentualnie po prostu sprawdzaj czy gracz ma przyjeta misje i czy postac znajduje sie x od waypointa. 
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Nadal nic, questa mam przyjętego. Gościu dobiega do wp i staje w nim jak wmurowany. To co ty napisałeś by zmienić  DIA_SLD_888_Kris_zadanie1 na DIA_SLD_888_Kris_zadanie1_15_00 też nie działa, to samo wychodzi. Szczerze mówiąc nie wiem o co chodzi.
 
"Lók, jestem tfojim ojcem!"

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Zwiększ odległość od WP, 1 m, to mało. Standardowo w Gothicu to chyba zawsze 5 m było (500).

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Zadziałało, ustawiłem dla pewności 1000 i git, dzięki, nie wpadł bym na to (bo skąd?) Na razie zostawmy otwarty ten temat, gdyż mam już naszykowane kilka npc, więc jakby znowu jakieś cuda się robiły,  to nie będe nowego tematu zakładał, a napisze tutaj.
 
"Lók, jestem tfojim ojcem!"

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Tak jak pisałem, nie robie nowego tematu, tutaj napisze, gdyż mam kilka pytań:

Szukam rutyny, tej co NPC zbiera ziele lub zboże np Viran ze swoimi ludźmi na bagnach w g1, zbiera bagienne ziele. Myślałem, że to TA_Stomp_Herb ale to nie to,  myślę, że to rozbijanie zielska tym tłuczkiem.

Drugie pytanie, jak zrobić by NPC któremu usunąłem w skryptach broń - ma walczyć gołymi pięściami, nie "wyczarowywał" sobie lagi ?

Oraz ostatnie, jak zrobić by dwóch NPCów o poszczególnych godzinach (czyli to ma być rutyna) szli w dane miejsce (arenka) i bili się np do nieprzytomności jednego z nich, albo przez określony czas rutyny ? Potrafię zrobić, by NPC na mnie (gracza) sie rzucił, ale zeby NPC na NPC już nie.
 
"Lók, jestem tfojim ojcem!"

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Cytuj
Szukam rutyny, tej co NPC zbiera ziele lub zboże np Viran ze swoimi ludźmi na bagnach w g1, zbiera bagienne ziele. Myślałem, że to
TA_Stomp_Herb ale to nie to,  myślę, że to rozbijanie zielska tym
tłuczkiem.
TA_PickRice
Cytuj

Drugie pytanie, jak zrobić by NPC któremu usunąłem w skryptach broń - ma walczyć gołymi pięściami, nie "wyczarowywał" sobie lagi ?
Npc_SetToFistMode(self);
Cytuj

Oraz ostatnie, jak zrobić by dwóch NPCów o poszczególnych godzinach (czyli to ma być rutyna) szli w dane miejsce (arenka) i bili się np do
nieprzytomności jednego z nich, albo przez określony czas rutyny ?
Potrafię zrobić, by NPC na mnie (gracza) sie rzucił, ale zeby NPC na NPC
 już nie.
var C_Npc npc; npc = Hlp_GetNpc(instance_Npc);
Npc_SetTarget (self,npc);
    AI_StartState (self,ZS_ATTACK,1,"");

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Dzięki, to Npc_SetToFistMode(self); wstawić do pliku NPC-a ?

Prace skryptowe o dziwo idą mi bardzo sprawnie, część rzeczy jest intuicyjna więc radze sobie w miare dobrze, lecz mam pytanie. Chcę by u NPC-1 pojawila się opcja rozmowy ale dopiero gdy wykonaliśmy zadanie NPC-2, lecz NPC-2 miał zadanie które można było zrobić na dwa różne sposoby(jedno było by powiedziec prawde drugie by skłamac) i chcę by u NPC-1 opcja rozmowy pojawiała się gdy się zadanie zrobi niezależnie od wybranego sposobu. 

Ja takie coś napisałem ale nie działa. Myślałem, że ELSE - tzn ALBO czyli rozmowa pojawi gdy zrobilo sie zadanie wersja1 ALBO zadanie wersja2.

{
if (npc_knowsinfo (other, DIA_SLD_892_Cypel_Grubas))
else if (npc_knowsinfo (other, DIA_SLD_892_Cypel_Grubas2))
{
return TRUE;
};
};
 
"Lók, jestem tfojim ojcem!"

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy
if (npc_knowsinfo (other, DIA_SLD_892_Cypel_Grubas)) || (npc_knowsinfo (other, DIA_SLD_892_Cypel_Grubas2))
{
return TRUE;
};

Ayman

Ayman

Użytkownicy
posty64
  • Użytkownicy
Dzięki wielkie, a co zrobić by NPC1 dający questa miał trzy reakcję ?

 Pierwsza reakcja - znaleziony item od razu zanoszę do NPC1  i zadanie wykonane, koniec wszelkich dialogów na ten temat.

Druga reakcja - item który miałem znaleźć i zanieść NPC1 został zabrany przez NPC 2 lecz zaraz po dialogu (negocjacjach) został oddany, wracam do NPC1, on powinien wiedzieć, że była rozmowa o tym, że item został zabrany lecz koniec końców i tak odzyskuje item - czyli ok.

Trzecia reakcja - item który miałem znaleźć i zanieść NPC1 został zabrany mi przez innego w tym przypadku NPC2 gdyż mnie namierzył jak szedłem z tym itemem i sprzedałem NPC1 że on mi kazał ten item przynieść (to już mam napisane w skrypcie - gosciu mi zabiera item), wracam do NPC1 bez tego itema i jego reakcja jest inna - w moim zamysle ma mnie zaatakowac gdyż wie iż zjebałem sprawę dając sobie zabrać item i go sprzedałem tamtemu NPC2.

To mój kod - on działa, nie ma błędów lecz zaraz po oddaniu itema (jak w pierwszej reakcji) pojawia się trzecia i to jest zle. Trochę niewyraźnie to opisałem.  Chce by NPC1 miał trzy reakcję, kompletnie osobne, jedna taka, że zanosze item (omijając NPC2 który łapie nas z itemem), druga, że NPC2 łapie nas z itemem ale po gadce go oddaje, zanosze item NPC1 i git, trzecia item mi zabrano, wracam do NPC1 i on mnie leje za to zem go sprzedal i item zabrano.

//*********************************************************************
//    AlkoWykonane
//*********************************************************************
INSTANCE DIA_SLD_891_Marian_AlkoWykonane   (C_INFO)
{
    npc         = SLD_891_Marian;
    nr          = 1;
    condition   = DIA_SLD_891_Marian_AlkoWykonane_Condition;
    information = DIA_SLD_891_Marian_AlkoWykonane_Info;
    permanent   = FALSE;
    description = "Mam alkohol.";
};

FUNC INT DIA_SLD_891_Marian_AlkoWykonane_Condition()
{
if (Npc_HasItems(other, ItFo_PiwoQuest) == 1)
{
    return TRUE;
};
};

FUNC VOID DIA_SLD_891_Marian_AlkoWykonane_Info()
{
  AI_Output (other, self, "DIA_SLD_891_Marian_AlkoWykonane_01_00"); //Mam alkohol.
  AI_Output (self, other, "DIA_SLD_891_Marian_AlkoWykonane_15_01"); //Co tam masz?
  AI_Output (other, self, "DIA_SLD_891_Marian_AlkoWykonane_01_02"); //Piwo.
  B_GiveInvItems (other, self, ItFo_PiwoQuest, 1);
  B_LogEntry (TOPIC_Alko,"Dałem Marianowi browara. Mam tylko nadzieję, że nikt się o tym procederze nie dowie.");
  Log_SetTopicStatus (TOPIC_Alko, LOG_SUCCESS);
  AI_Output (self, other, "DIA_SLD_891_Marian_AlkoWykonane_15_03"); //Ooo, zimne piwko tylko dla mnie. Możesz już iść.
  AI_Output (other, self, "DIA_SLD_891_Marian_AlkoWykonane_01_04"); //Słowo "dziękuję" by się przydało.
  AI_Output (self, other, "DIA_SLD_891_Marian_AlkoWykonane_15_05"); //No dzięki.

  if (npc_knowsinfo (other, DIA_SLD_889_Mirek_AlkoWykrycie))
  && (Npc_HasItems(other, ItFo_PiwoQuest) == 0)
  {
  AI_Output (self, other, "DIA_SLD_891_Marian_AlkoWykonanePraw_15_01"); //Ty dziadu, sprzedałeś mnie Mirkowi, zatłukę cie jak psa!
  AI_Output (other, self, "DIA_SLD_891_Marian_AlkoWykonanePraw_01_02"); //Czekaj, musiałem, bo...

  AI_StopProcessInfos    (self);
  B_Attack (self, other, AR_NONE,1);

  AI_StopProcessInfos    (self);
  };
};               


DIA_SLD_889_Mirek_AlkoWykrycie  - to właśnie od NPC2, po tej właśnie gadce z NPC2 (gdyż u niego mam dwie opcje - jedna negocjacja i wraca item, druga nieudana negcajacja item przepada) chciałbym mieć dwie inne reakcje u NPC1.


Ale popieprzyłem, może wkleje tutaj skrypt tego NPC2 i może połapiecie się o co mi chodzi z tymi trzema reakcjami (prosze nie czytać dialogów xD)

//*********************************************************************
// AlkoWykrycie
//*********************************************************************
INSTANCE DIA_SLD_889_Mirek_AlkoWykrycie     (C_INFO)
{
npc         = SLD_889_Mirek;
nr          = 1;
condition   = DIA_SLD_889_Mirek_AlkoWykrycie_Condition;
information = DIA_SLD_889_Mirek_AlkoWykrycie_Info;
permanent   = FALSE;
description = "Czekaj, co masz za plecami?";
  important   = 1;
};

FUNC INT DIA_SLD_889_Mirek_AlkoWykrycie_Condition()
{
if (npc_knowsinfo (other, DIA_SLD_891_Marian_Alko))
&& (Npc_HasItems(other, ItFo_PiwoQuest) == 1)
{
return TRUE;

};
};

FUNC VOID DIA_SLD_889_Mirek_AlkoWykrycie_Info()
{
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_01_00"); //Czekaj chłopcze, co masz za plecami?
  AI_Output (other, self, "DIA_SLD_889_Mirek_AlkoWykrycie_15_01"); //Ja? Nic proszę pana. Tak sobie rączki trzymam.
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_01_02"); //Jak to nic? Pokaż i to migiem.
  B_GiveInvItems (other,self, ItFo_PiwoQuest, 1);
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_01_03"); //CO TO MA BYĆ! ALKOHOL NA MOIM OBOZIE?!

  Info_ClearChoices (DIA_SLD_889_Mirek_AlkoWykrycie);
Info_AddChoice (DIA_SLD_889_Mirek_AlkoWykrycie, "To Marian kazał mi przynieść!", DIA_SLD_889_Mirek_AlkoWykrycie_Prawda );
  Info_AddChoice (DIA_SLD_889_Mirek_AlkoWykrycie, "Znalazłem to za szopą, chciałem wyrzucić.", DIA_SLD_889_Mirek_AlkoWykrycie_Klamstwo );
  Info_AddChoice (DIA_SLD_889_Mirek_AlkoWykrycie, "To jest mój browar i zaraz sam go wypije na pańskich oczach.", DIA_SLD_889_Mirek_AlkoWykrycie_Pazernosc );
};

FUNC VOID DIA_SLD_889_Mirek_AlkoWykrycie_Prawda()
{
  AI_Output (other, self, "DIA_SLD_889_Mirek_AlkoWykrycie_Prawda_15_00"); //To Marian kazał mi przynieść! Mówił, że jeśli nie przyniosę mu to nagada na mnie głupot.
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_Prawda_01_01"); //Taki Marianek mądry? Tak go suszy? Zaraz mu dam nauczkę!

  AI_StopProcessInfos (self);
  Log_SetTopicStatus (TOPIC_Alko, LOG_FAILED);
  B_LogEntry (TOPIC_Alko,"Mirek złapał mnie jak niosłem browara Marianowi. By się uratować sprzedałem samego Mariana. Mirek nieźle się wkurzyl na niego, będą jaja.");
};

FUNC VOID DIA_SLD_889_Mirek_AlkoWykrycie_Klamstwo()
{
  AI_Output (other, self, "DIA_SLD_889_Mirek_AlkoWykrycie_Klamstwo_15_00"); //Znalazłem to za szopą, chciałem wyrzucić by żadnego z chłopaków czasem nie podkusiło wypić. Przecież to sportowcy.
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_Klamstwo_01_01"); //Hmmm, masz rację. Trochę za bardzo się uniosłem. Myślałem, że podpijasz sobie na obozie, a to kategorycznie zabronione. Kiedyś była tu bimbrownia, pewnie jeszcze jakieś flaszki się tu walają. Dobrze, masz to i wyrzuć, najlepiej gdzieś do jeziora.
  AI_Output (other, self, "DIA_SLD_889_Mirek_AlkoWykrycie_Klamstwo_15_02"); //Dobrze proszę pana, tak uczynię.

  CreateInvItems (self, ItFo_PiwoQuest, 1);
B_GiveInvItems (self, other, ItFo_PiwoQuest, 1);

  B_LogEntry (TOPIC_Alko,"Mirek mnie namierzył jak szedłem z piwskiem dla Mariana. Na szczęście udało mi się wyłgać. Idę zanieść to przeklęte piwo.");
  AI_StopProcessInfos (self);
};

FUNC VOID DIA_SLD_889_Mirek_AlkoWykrycie_Pazernosc()
{
  AI_Output (other, self, "DIA_SLD_889_Mirek_AlkoWykrycie_Pazernosc_15_00"); //To jest mój browar i zaraz sam go wypije na pańskich oczach.
  B_GiveInvItems (other,self, ItFo_PiwoQuest, 1);
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_Pazernosc_01_01"); //Zawiodłeś mnie chłopcze. Zawiodłeś ojca. Wypad z obozu!
  AI_Output (self, other, "DIA_SLD_889_Mirek_AlkoWykrycie_Pazernosc_01_02"); //Aaa i jeszcze jedno...

  AI_StopProcessInfos (self);
  Log_SetTopicStatus (TOPIC_Alko, LOG_FAILED);
  B_LogEntry (TOPIC_Alko,"Zrobiłem jedną z najgłupszych rzeczy w moim życiu. Wypiłem przy Mirku browara którego miałem dostarczyć Marianowi. Mirek tak się wkurzył, że mi przetrzepał skórę i wyrzucił z obozu.");
  B_Attack (self, other, AR_NONE,1);

};                                             
 
"Lók, jestem tfojim ojcem!"

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Cytuj
Dzięki, to Npc_SetToFistMode(self); wstawić do pliku NPC-a ?
Możesz spróbować.

@up
Enigmatyczno - chaotycznie napisany post ^^ Spróbuj jaśniej.


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