Prosty quest - zlecenie zabójstwa 4410 0

O temacie

Autor Buła

Zaczęty 24.10.2008 roku

Wyświetleń 4410

Odpowiedzi 0

Buła

Buła

Użytkownicy
wyłącz komputer i wyjdź z domu
posty2408
Propsy3128
Nagrody
Profesjabrak
  • Użytkownicy
  • wyłącz komputer i wyjdź z domu

Buła

Prosty quest - zlecenie zabójstwa
2008-10-24, 19:51(Ostatnia zmiana: 2009-07-11, 11:46)

Witam.
W tym tutorialu dowiemy się jak stworzyć quest związany z zabiciem kogoś.
Podkreślam znowu, że tutorial jest przeznaczony dla osób znających podstawy pisania dialogów! Jeśli nadal ich nie znacie, na forum jest sporo poradników o tym procederze.

Przygotujmy więc dwóch NPC. Pierwszy: Magnat, drugi: Szkodnik.
Magnat zleci nam pozbycie się szkodnika. Zacznijmy więc od niego.
Mój magnat ma instancję 'EBR_100_Magnat', a szkodnik 'ORG_200_Szkodnik'.

Tworzymy dialog magnata. Mój wyglądać będzie tak:

Cytuj
///////////////////////////////////////////////////////
//////////////         robota
///////////////////////////////////////////////////////
instance Dia_Magnat_robota   (C_INFO)
{
    npc    = EBR_100_Magnat;
    nr    = 1;
    condition    =  Dia_Magnat_robota_condition;
    information    =  Dia_Magnat_robota_info;
    permanent    = FALSE;
    important    = FALSE;
    description    =  "Masz dla mnie jakąś robotę?";
};

FUNC int  Dia_Magnat_robota_condition()
{
    return TRUE;
};

FUNC VOID  DIA_Magnat_robota_info()
{
   AI_Output (other,self,"DIA_Magnat_robota_1_01"); //Masz dla mnie jakąś robotę?
   AI_Output (self, other,"DIA_Magnat_robota_1_02"); //Tak, pozbądź się tego szkodnika stojącego pod bramą.
};

Myślę że tutaj wszystko jest jasne. Teraz drugi dialog - szkodnika.

Cytuj
///////////////////////////////////////////////////////
//////////////         zabij
///////////////////////////////////////////////////////
instance Dia_Szkodnik_zabij   (C_INFO)
{
    npc    = ORG_200_Szkodnik;
    nr    = 1;
    condition    =  Dia_Szkodnik_zabij_condition;
    information    =  Dia_Szkodnik_zabij_info;
    permanent    = FALSE;
    important    = FALSE;
    description    =  "Przykro mi, ale muszę cię zabić.";
};

FUNC int  Dia_Szkodnik_zabij_condition()
{
    IF (Npc_KnowsInfo(hero, Dia_Magnat_robota))
    {
    return TRUE;
    };
};

FUNC VOID  DIA_Szkodnik_zabij_info()
{
   AI_Output (other,self,"DIA_Szkodnik_zabij_1_01"); //Przykro mi, ale muszę cię zabić.
   AI_Output (self, other,"DIA_Szkodnik_zabij_1_02"); //Ty chcesz zabić mnie? Giń, frajerze!
   
   AI_StopProcessInfos(self);
   Npc_SetTarget(self, other);
   AI_StartState(self,ZS_Attack,1,"");
};

I wyjaśnienie, po kolei.

Cytuj
IF (Npc_KnowsInfo(hero, Dia_Magnat_robota))
Tutaj raczej każdy rozumie - warunek, opcja dialogowa nie pojawi się, jeśli nie rozmawialiśmy wcześniej z magnatem.

Cytuj
AI_StopProcessInfos(self);
Npc_SetTarget(self, other);
AI_StartState(self,ZS_Attack,1,"");
Tu najciekawsze - rozpoczęcie walki.
AI_StopProcessInfos(self); - odpowiada za natychmiastowe zakończenie dialogu.
Npc_SetTarget(self, other); - namierzanie, kto kogo zaatakuje.
AI_StartState(self,ZS_Attack,1,""); - ostateczne rozpoczęcie walki.

Po takim dialogu NPC Szkodnik rzuci się na nas. Pokonujemy go i wracamy do magnata.

Kolejny dialog z magnatem, po zabiciu szkodnika:

Cytuj
///////////////////////////////////////////////////////
//////////////         zabilem
///////////////////////////////////////////////////////
instance Dia_Magnat_zabilem   (C_INFO)
{
    npc    = EBR_100_Magnat;
    nr    = 1;
    condition    =  Dia_Magnat_zabilem_condition;
    information    =  Dia_Magnat_zabilem_info;
    permanent    = FALSE;
    important    = FALSE;
    description    =  "Szkodnik nie żyje!";
};

FUNC int  Dia_Magnat_zabilem_condition()
{
    IF (Npc_IsDead(ORG_200_Szkodnik))
    {
    return TRUE;
    };
};

FUNC VOID  DIA_Magnat_zabilem_info()
{
    AI_Output (other,self,"DIA_Magnat_zabilem_1_01"); //Szkodnik nie żyje!
    AI_Output (self, other,"DIA_Magnat_zabilem_1_02"); //To nie było za trudne, ale tak czy siak pomogłeś mi. Dziękuję.
};
Wyjasnienie:

IF (Npc_IsDead(ORG_200_Szkodnik)) - znowu warunek - jeśli NPC o instancji ORG_200_Szkodnik nie żyje, to pojawi się ta opcja dialogowa.

Właściwie to tyle.
Oczywiście można jeszcze dodać wpisy w dzienniku, użyć zmiennych, a nawet zrobić żeby w queście nie zabijało się jednego szkodnika, tylko np. trzech.
Wtedy końcowe IF wyglądało by np tak:
Cytuj
IF (Npc_IsDead(ORG_200_Szkodnik)) && (Npc_IsDead(ORG_201_Szkodnik)) && (Npc_IsDead(ORG_202_Szkodnik))

&& - oznacza 'i'. Czyli: jeśli NPC ORG_200_Szkodnik nie żyje i jeśli NPC ORG_201_Szkodnik nie żyje i jeśli NPC ORG_202_Szkodnik nie żyje to pojawi się opcja dialogowa.

Mam nadzieję, że pomogłem i że wszystko jest jasne.
Dziękuję za uwagę.

Buła xD


 


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