Witam. Chcę wam przedstawić jak korzystać z warunku: Npc_GetDistToWP
Jest on bardzo przydatny. Szczególnie, jeśli tworzymy questy typu: npc prowadzi nas do waypointu,
mamy zaprowadzić npc#msga do waypointu itd. Podam przykład:
if (Npc_GetDistToWP (self, WAYPOINT) <= 100)
Oznacza to, że: jeśli npc jest w odległości 100m od waypointu o nazwie WAYPOINT, to może porozmawiać na ten temat z bohaterem. Najczęściej stosuje się do tego typu dialogów IMPORTANT
czyli npc sam do nas zagaduje. Wtedy może nastąpić zmiana rutyny. np. prowadzimy npc#msga do waypointu, nagle 100m przed waypointem zagaduje do nas, że dalej poradzi sobie sam i wtedy następuje zmiana rutyny z ta_follow_player na następną. Podam teraz kilka przykładów z gry:
// ------------------------------------------------------------
// Orks!
// ------------------------------------------------------------
INSTANCE DIA_Addon_Skip_Orks (C_INFO)
{
npc = PIR_1355_Addon_Skip;
nr = 1;
condition = DIA_Addon_Skip_Orks_Condition;
information = DIA_Addon_Skip_Orks_Info;
permanent = FALSE;
important = TRUE;
};
FUNC INT DIA_Addon_Skip_Orks_Condition()
{
if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (Npc_GetDistToWP (self, ADW_CANYON_PATH_TO_LIBRARY_14) <= 2000)
{
return TRUE;
};
};
func VOID DIA_Addon_Skip_Orks_Info()
{
AI_Output (self ,other, DIA_Addon_Skip_Add_08_01); //Orkowie! Nienawidzę tych bestii!
AI_StopProcessInfos (self);
To wszystko. Dziękuję z uwagę.
ja tu widzę jeden, ale przydatne : P
Miałem jeszcze dodać ale zapomniałem, teraz dodam:
///////////////////////////////////////////////////////////////////////
// Info angekommen
///////////////////////////////////////////////////////////////////////
instance DIA_Rosi_ANGEKOMMEN (C_INFO)
{
npc = BAU_936_Rosi;
nr = 55;
condition = DIA_Rosi_ANGEKOMMEN_Condition;
information = DIA_Rosi_ANGEKOMMEN_Info;
important = TRUE;
};
func int DIA_Rosi_ANGEKOMMEN_Condition ()
{
if (Kapitel == 5)
&& (MIS_bringRosiBackToSekob != LOG_SUCCESS)
&& (Rosi_FleeFromSekob_Kap5 == TRUE)
&& (
( (Npc_GetDistToWP(self,CITY2)<6000) && (hero.guild == GIL_PAL) )
|| ( (Npc_GetDistToWP(self,NW_BIGFARM_KITCHEN_02)<6000) && (hero.guild == GIL_DJG) )
|| ( (Npc_GetDistToWP(self,KLOSTER)<6000) && (hero.guild == GIL_KDF) )
)
{
return TRUE;
};
};
func void DIA_Rosi_ANGEKOMMEN_Info ()
{
AI_Output (self, other, DIA_Rosi_ANGEKOMMEN_17_00); //Dalej już sobie poradzę.
AI_Output (self, other, DIA_Rosi_ANGEKOMMEN_17_01); //Bardzo ci dziękuję. Cóż ja bym bez ciebie zrobiła.
self.aivar[AIV_PARTYMEMBER] = FALSE;
Till.aivar[AIV_PARTYMEMBER] = FALSE;
MIS_bringRosiBackToSekob = LOG_OBSOLETE;
MIS_RosisFlucht = LOG_SUCCESS;
AI_Output (self, other, DIA_Rosi_ANGEKOMMEN_17_02); //Proszę, przyjmij w podzięce ten skromny podarek.
CreateInvItems (Rosi, ItMi_Gold, 650);
B_GiveInvItems (self, other, ItMi_Gold, 450);
if (Npc_IsDead(Till))
{
B_GivePlayerXP (XP_SavedRosi);
}
else
{
var int XPForBoth;
XPForBoth = (XP_SavedRosi + XP_Ambient);
B_GivePlayerXP (XPForBoth);
};
AI_StopProcessInfos (self);
if (Npc_GetDistToWP(self,CITY2)<8000)
{
Npc_ExchangeRoutine (self,CITY);
B_StartOtherRoutine (Till,CITY);
}
else if (Npc_GetDistToWP(self,BIGFARM)<8000)
{
Npc_ExchangeRoutine (self,BIGFARM);
B_StartOtherRoutine (Till,BIGFARM);
}
else if (Npc_GetDistToWP(self,KLOSTER)<8000)
{
Npc_ExchangeRoutine (self,KLOSTER);
B_StartOtherRoutine (Till,KLOSTER);
};
};
Npc_ExchangeRoutine (self,CITY);Tu widzicie zmianę rutyny, tak jak mówiłem. To chyba wszystko.