From d03c86efef9af8a5be893f4fd29493532e9645ab Mon Sep 17 00:00:00 2001 From: Emagi Date: Wed, 27 Nov 2024 17:17:26 -0500 Subject: [PATCH] CheckEncounterState behavior added --- source/WorldServer/Combat.cpp | 2 ++ source/WorldServer/SpellProcess.cpp | 8 ++++++-- source/WorldServer/zoneserver.cpp | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/source/WorldServer/Combat.cpp b/source/WorldServer/Combat.cpp index 774bc0b..300fc35 100644 --- a/source/WorldServer/Combat.cpp +++ b/source/WorldServer/Combat.cpp @@ -307,6 +307,7 @@ void Entity::MeleeAttack(Spawn* victim, float distance, bool primary, bool multi SetAttackDelay(primary); if(victim->IsNPC() && victim->EngagedInCombat() == false) { + CheckEncounterState((Entity*)victim); ((NPC*)victim)->AddHate(this, 50); } @@ -379,6 +380,7 @@ void Entity::RangeAttack(Spawn* victim, float distance, Item* weapon, Item* ammo } if(victim->IsNPC() && victim->EngagedInCombat() == false) { + CheckEncounterState((Entity*)victim); ((NPC*)victim)->AddHate(this, 50); } diff --git a/source/WorldServer/SpellProcess.cpp b/source/WorldServer/SpellProcess.cpp index 3f54417..2cd81ec 100644 --- a/source/WorldServer/SpellProcess.cpp +++ b/source/WorldServer/SpellProcess.cpp @@ -1757,8 +1757,12 @@ bool SpellProcess::CastProcessedSpell(LuaSpell* spell, bool passive, bool in_her continue; // TODO: Establish actual hate per spell - if (!spell->spell->GetSpellData()->friendly_spell && target->IsNPC()) - ((NPC*)target)->AddHate((Entity*)spell->caster, 50); + if (!spell->spell->GetSpellData()->friendly_spell && target->IsNPC()) { + if(spell->caster) { + spell->caster->CheckEncounterState((Entity*)target); + ((NPC*)target)->AddHate((Entity*)spell->caster, 50); + } + } if(spell->spell->GetSpellData()->success_message.length() > 0){ if(client){ diff --git a/source/WorldServer/zoneserver.cpp b/source/WorldServer/zoneserver.cpp index 2e412ff..9fd8e4d 100644 --- a/source/WorldServer/zoneserver.cpp +++ b/source/WorldServer/zoneserver.cpp @@ -941,6 +941,8 @@ bool ZoneServer::AggroVictim(NPC* npc, Spawn* victim, Client* client) if(isEntity && !npc->AttackAllowed((Entity*)victim)) return false; + victim->CheckEncounterState((Entity*)npc, true); + if (npc->HasSpawnGroup()) { vector* groupVec = npc->GetSpawnGroup(); for (int32 i = 0; i < groupVec->size(); i++) { @@ -965,8 +967,6 @@ bool ZoneServer::AggroVictim(NPC* npc, Spawn* victim, Client* client) else npc->InCombat(true); } - - victim->CheckEncounterState((Entity*)npc, true); return true; }