Reakcja NPC 2307 2

O temacie

Autor WayneBlack

Zaczęty 22.09.2016 roku

Wyświetleń 2307

Odpowiedzi 2

WayneBlack

WayneBlack

Użytkownicy
posty30
Propsy6
ProfesjaSkrypter
  • Użytkownicy
Dobry. Dostałem niedawno w łapki z powrotem swoje skrypty i zacząłem się nimi znowu bawić. Hue hue...

Tak czy siak, zaczynam omawianie problemu: jak pewnie wiecie (albo i nie, bo niektórzy bywają mało inteligentni), jak zaatakujecie NPC, to on w jakiś sposób wam odda. Albo zawoła kolegów, by mu pomogli. W danej frakcji NPC reagują też na zabójstwo - jak zabijecie NPC w mieście na oczach innych, to zaraz zaczyna się zabawa w uciekanie, albo walkę itd. No dobra, to normalne... ale ciekawi mnie, jak można zrobić, by NPC nie reagował na walkę/zabójstwo, jeśli NIE WIDZI agresora?
Zdarzyło mi się to wiele razy, że jak zestrzeliłem NPC z bardzo dużej odległości jakimś czarem, to reszta nie reagowała na to, że ten umarł. Natomiast, jak próbuję to zrobić łukiem/kuszą to właściwie natychmiast jest reakcja - niezależnie od dystansu i pozycji.
Więc... tak, chciałbym się dowiedzieć, czy jest opcja zabawy w cichego snajpera, który może z dystansu kogoś zabić, a ludki wokół niego nie zauważą, kto to zrobił?

Pomijam, że szukałem w necie o reakcjach NPC, ale gówno można znaleźć. Na forum chyba nikt czegoś takiego nie poruszył... a jest późno i mam gorączkę i nie umiem się nawet zastanowić, gdzie miałbym tego szukać w samych skryptach.
 

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Można to łatwo zrobić AIV-arami ale wtedy żaden NPC któremu byś go przypisał nie reagowałby na zabójstwo a chyba nie do końca o to ci chodzi.
 

WayneBlack

WayneBlack

Użytkownicy
posty30
Propsy6
ProfesjaSkrypter
  • Użytkownicy

WayneBlack

Reakcja NPC
#2 2016-09-23, 10:42(Ostatnia zmiana: 2016-09-23, 11:29)
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!
 


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