10
« dnia: 2016-09-23, 10:42 »
No nie. Bardziej myślałem o tym warunku "if (Npc_CanSeeNpc(self, hero))" - czyli jeśli NPC może zobaczyć naszego bohatera (ewentualnie opcja z zaprzeczeniem, czyli: "if (!Npc_CanSeeNpc(self, hero))"). Tylko średnio wiem, gdzie to wstawić... do każdego NPC z osobna? xD
Post połączony: 2016-09-23, 11:29
Ok, zrobiłem to! Chcecie wiedzieć jak? A nie powiem...
No dobra, powiem, muszę się pochwalić. Wchodzicie do: content/AI/human/C_human i tam macie plik "C_WantToAttackMurder"... i ja to mam tam tak:
// ********************
// C_WantToAttackMurder
// ********************
func int C_WantToAttackMurder (var C_NPC slf, var C_NPC oth)
{
// ------ ausgenommeme Gilden ------
if (slf.guild == GIL_DMT)
|| (slf.guild == GIL_STRF)
|| (slf.guild == GIL_DJG)
//Addon: Banditen im Lager sollen auf Murder reagieren
|| (slf.guild == GIL_BDT)
{
return FALSE;
};
// ------ NSC ignoriert Mord ------
if (slf.aivar[AIV_IGNORE_Murder] == TRUE)
{
return FALSE;
};
// ------ Täter war Player und ich bin NPCType_Friend ------
if ( Npc_IsPlayer(oth) && (slf.npctype == NPCTYPE_FRIEND) )
{
return FALSE;
};
// ------ Mörder hat guten Grund zu töten ------
if (C_NpcHasAttackReasonToKill(oth))
{
return FALSE;
};
// ------ Torwachen bleiben stehen, memorizen aber News ------
if (C_NpcIsGateGuard(slf))
{
return FALSE;
};
if (!Npc_CanSeeNpc(self, hero))
{
return FALSE;
};
if (Npc_GetDistToNpc (self, hero) > 4000)
{
return FALSE;
};
return TRUE;
};
Nic nie zmieniałem, poza wklejeniem dwóch warunków na końcu:
if (!Npc_CanSeeNpc(self, hero))
{
return FALSE;
};
if (Npc_GetDistToNpc (self, hero) > 4000)
{
return FALSE;
};
Oznaczają one, że:
1. Jak NPC nas nie widzi (był odwrócony w inną stronę), to nie ma powodu do zabijania mordercy, nawet nie zareaguje.
2. NPC nie reaguje, jeśli postać, którą kierujemy, była na dystansie ponad 4000 jednostek od niej, a zginął ktoś obok.
ALE! Reagują strażnicy danej frakcji. Zawsze. Ich reakcja jest w innym pliku... ale myślę, że fajnie tego akurat nie zmieniać.
Wesołej zabawy w snajperów!