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:
///////////////////////////////////////////////////////
////////////// 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.
///////////////////////////////////////////////////////
////////////// 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.
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.
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:
///////////////////////////////////////////////////////
////////////// 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:
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