Warunek "if(...)"
Warunek ten jest bardzo przydatny przy tworzeniu questów i dialogów. Oznacza to:
"jeśli(jakiś warunek = x)" to zostanie odpalony odpowiedni dialog.
Np.
if (Npc_IsDead(instancja))
oznacza, że dialog zostanie odpalony gdy npc,
którego instancję wpiszemy jest martwy
Zajmijmy się miejscem warunku if w skrypcie dialogu:
////////////////////////////////////////////////////////////
////////////// hallo
///////////////////////////////////////////////////////
instance Dia_Npc_hallo (C_INFO)
{
npc = gil_300_Npc;
nr =999;
condition = Dia_Npc_hallo_condition;
information = Dia_Npc_hallo_info;
important = FALSE;
permanent = FALSE;
Description = "bla";
};
func int Dia_Npc_hallo_condition ()
{
if (Npc_IsDead(instance))
{
return TRUE;
};
};
func void Dia_Npc_hallo_info ()
{
AI_Output (other,self,"Dia_Npc_hallo_00"); //bla
AI_Output (self, other,"Dia_Npc_hallo_01"); //bla
};
Miejsce warunku jest przy
func int Dia_Npc_hallo_condition ()
Teraz zajmijmy się innymi warunkami.
IF (Npc_KnowsInfo(other,instancja dialogu))
dialog jest odpalany wtedy, jeśli rozmawiało się z npc na temat, podajemy instancję dialogu(np. Dia_imie_hej)
IF (Npc_HasItems(other,instance) >= 1 )
dialog jest odpalany wtedy, jeśli posiadamy zadeklarowaną ilość jakiegoś itemu, podajemy instancję przedmiotu
IF (Kapitel >=1)
dialog jest odpalany wtedy, jeśli rozdział jest większy/mniejszy/równy zadeklarowanemu
IF (zmienna == TRUE)
dialog jest odpalany wtedy, jeśli zmienna (zdefiniowana wcześniej w story_globals.d) ma podaną wartość. Możemy również użyć zamiast "==" np. "<=" co będzie oznaczało mniejsza lub równa, lub ">=", czyli większa lub równa
Są to podstawowe warunki, które możemy łączyć z "if". Resztę można znaleźć samemu w skryptach Gothica.
Łączenie dwóch warunków:
Warunki łączymy za pomocą "&&". Np.
IF (Npc_KnowsInfo(other,DIA_Npc_bla))
&& (Npc_HasItems(other,Itmi_gold) >= 1 )
Jeszcze przyda się "else"
"else" wykorzystujemy tak:
IF (Npc_KnowsInfo(other,instancja dialogu))
{
AI_Output (self, hero,"DIA_Npc_bla_07_00"); //Co jeżeli warunek JEST spełniony
}
else
{
AI_Output (self, hero,"DIA_Npc_bla_07_02"); //Co jeżeli warunek NIE JEST spełniony
};
--------------------------------------------------------------------------
jeśli się nie obrazicie to ja dołożę jeszcze kilka warunków:
IF (Wld_IsTime (22,00,23,59))
jeśli jest godzina między 22.00 a 23.59 (oczywiście można wstawić dowolną godzinę)
IF (C_BodystateContains(self, BS_SIT))
jeśli bodystate NPC to (siedzący), można to wykorzystać między innymi to kazania wstać NPC jeśli dajemy mu coś do picia, NPC nie wypije nic na siedząco
IF (Npc_GetDistToWP (self,"waypoint") < XYZ )
to mój ulubiony warunek, funkcja zwróci TRUE jeśli podejdziemy do waypointa na odległość XYZ (tu dowolna odległość w CM czyli 700 to 7m )
i skoro Diegomir napisał o łączeniu to ja dołożę do tego alternatywę służy do tego || np.
IF (Npc_KnowsInfo(other,DIA_Npc_bla))
|| (Npc_HasItems(other,Itmi_gold) >= 1 )
musiałem wyrzucić warunek "czy zadanie w toku" bo to co odnalazłem w jednym skrypcie odnosi się do zmiennej a nie stałej
[ tutek ściągnięty z themodders napisany przez Brata Xardasa ]
EDIT: nie pamiętam kto jednak napisał większości wiem tyle że Brat Xardasa dopisał parę warunków
jeżeli chcesz, żeby podczas dialogu npc dostawał xp to wpisujesz linijkę pod dialogiem
B_GiveXP ILOŚĆ DODANEGO XP);
po południu postaram się odpisać na 1 pytanie na razie mam zbyt mało czasu