From 92031bbd708bb5edd9d45ab7f33b0d6567dc031d Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 15 Jul 2017 23:10:25 -0400 Subject: [PATCH] Add remove aura functions --- zone/aura.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ zone/mob.h | 4 ++-- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/zone/aura.cpp b/zone/aura.cpp index 038abc35d..2b0bd9c1a 100644 --- a/zone/aura.cpp +++ b/zone/aura.cpp @@ -521,3 +521,67 @@ bool Mob::CanSpawnAura(bool trap) return true; } +void Mob::RemoveAllAuras() +{ + // this is sent on camp/zone, so it just despawns? + if (aura_mgr.count) { + for (auto &e : aura_mgr.auras) { + auto mob = entity_list.GetMob(e.spawn_id); + if (mob) + mob->Depop(); + } + } + + if (trap_mgr.count) { + for (auto &e : trap_mgr.auras) { + auto mob = entity_list.GetMob(e.spawn_id); + if (mob) + mob->Depop(); + } + } + return; +} + +void Mob::RemoveAura(int spawn_id, bool expired) +{ + for (int i = 0; i < aura_mgr.count; ++i) { + auto &aura = aura_mgr.auras[i]; + if (aura.spawn_id == spawn_id) { + auto mob = entity_list.GetMob(aura.spawn_id); + if (mob) + mob->Depop(); + if (expired && IsClient()) + CastToClient()->SendColoredText( + CC_Yellow, StringFormat("%s has expired.", aura.name)); // TODO: verify color + while (aura_mgr.count - 1 > i) { + i++; + aura.spawn_id = aura_mgr.auras[i].spawn_id; + aura.icon = aura_mgr.auras[i].icon; + strn0cpy(aura.name, aura_mgr.auras[i].name, 64); + } + aura_mgr.count--; + return; + } + } + + for (int i = 0; i < trap_mgr.count; ++i) { + auto &aura = trap_mgr.auras[i]; + auto mob = entity_list.GetMob(aura.spawn_id); + if (mob) + mob->Depop(); + if (expired && IsClient()) + CastToClient()->SendColoredText( + CC_Yellow, StringFormat("%s has expired.", aura.name)); // TODO: verify color + while (trap_mgr.count - 1 > i) { + i++; + aura.spawn_id = trap_mgr.auras[i].spawn_id; + aura.icon = trap_mgr.auras[i].icon; + strn0cpy(aura.name, trap_mgr.auras[i].name, 64); + } + trap_mgr.count--; + return; + } + + return; +} + diff --git a/zone/mob.h b/zone/mob.h index a91975d85..b6a56acdf 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -632,8 +632,8 @@ public: void AddAura(Aura *aura, AuraRecord &record); void AddTrap(Aura *aura, AuraRecord &record); bool CanSpawnAura(bool trap); - void RemoveAura(int spawn_id) {} - void RemoveAllAuras() {} + void RemoveAura(int spawn_id, bool expired = false); + void RemoveAllAuras(); //Procs void TriggerDefensiveProcs(Mob *on, uint16 hand = EQEmu::inventory::slotPrimary, bool FromSkillProc = false, int damage = 0);