diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ec241467f..f1620fb81 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -812,14 +812,8 @@ void Unit::DealDamageMods(Unit const* victim, uint32& damage, uint32* absorb) } } -uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, bool /*allowGM*/, Spell const* damageSpell /*= nullptr*/, bool delayed) +uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, bool /*allowGM*/, Spell const* damageSpell /*= nullptr*/) { - if (delayed && attacker && attacker->GetTypeId() == TYPEID_PLAYER && attacker->GetGUID() != victim->GetGUID()) - { - sWorld->AddDelayedDamage(attacker->GetGUID(), victim->GetGUID(), damage, cleanDamage, damagetype, damageSchoolMask, spellProto, durabilityLoss, attacker->GetMapId(), attacker->GetInstanceId()); - return 0; - } - // Xinef: initialize damage done for rage calculations // Xinef: its rare to modify damage in hooks, however training dummy's sets damage to 0 uint32 rage_damage = damage + ((cleanDamage != nullptr) ? cleanDamage->absorbed_damage : 0); @@ -1460,7 +1454,7 @@ void Unit::DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss, // Call default DealDamage CleanDamage cleanDamage(damageInfo->cleanDamage, damageInfo->absorb, BASE_ATTACK, MELEE_HIT_NORMAL); - Unit::DealDamage(this, victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss, false, spell, true); + Unit::DealDamage(this, victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss, false, spell); } // @todo for melee need create structure as in diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 430029611..87cfccca0 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -757,20 +757,6 @@ struct CleanDamage struct CalcDamageInfo; struct SpellNonMeleeDamage; -struct DelayedDamage -{ - ObjectGuid attacker; - ObjectGuid victim; - uint32 damage; - CleanDamage const* cleanDamage; - DamageEffectType damagetype; - SpellSchoolMask damageSchoolMask; - SpellInfo const* spellProto; - bool durabilityLoss; - uint32 mapId; - uint32 instanceId; -}; - class DamageInfo { private: @@ -1572,7 +1558,7 @@ public: uint16 GetMaxSkillValueForLevel(Unit const* target = nullptr) const { return (target ? getLevelForTarget(target) : GetLevel()) * 5; } static void DealDamageMods(Unit const* victim, uint32& damage, uint32* absorb); - static uint32 DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage = nullptr, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = nullptr, bool durabilityLoss = true, bool allowGM = false, Spell const* spell = nullptr, bool delayed = false); + static uint32 DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage = nullptr, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = nullptr, bool durabilityLoss = true, bool allowGM = false, Spell const* spell = nullptr); static void Kill(Unit* killer, Unit* victim, bool durabilityLoss = true, WeaponAttackType attackType = BASE_ATTACK, SpellInfo const* spellProto = nullptr, Spell const* spell = nullptr); void KillSelf(bool durabilityLoss = true, WeaponAttackType attackType = BASE_ATTACK, SpellInfo const* spellProto = nullptr, Spell const* spell = nullptr) { Kill(this, this, durabilityLoss, attackType, spellProto, spell); }; static int32 DealHeal(Unit* healer, Unit* victim, uint32 addhealth); diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index f2ef95526..a529e4e00 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -212,17 +212,6 @@ Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const guid) return GetCreature(u, guid); } -Unit* ObjectAccessor::GetUnit(Map const* map, ObjectGuid const guid) -{ - if (guid.IsPlayer()) - return GetPlayer(map, guid); - - if (guid.IsPet()) - return const_cast(map)->GetPet(guid); - - return const_cast(map)->GetCreature(guid); -} - Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const guid) { return u.GetMap()->GetCreature(guid); diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 8532dba74..7c6c003f5 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -71,7 +71,6 @@ namespace ObjectAccessor Transport* GetTransport(WorldObject const& u, ObjectGuid const guid); DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const guid); Unit* GetUnit(WorldObject const&, ObjectGuid const guid); - Unit* GetUnit(Map const* map, ObjectGuid const guid); Creature* GetCreature(WorldObject const& u, ObjectGuid const guid); Pet* GetPet(WorldObject const&, ObjectGuid const guid); Player* GetPlayer(Map const*, ObjectGuid const guid); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index b811441bf..069b75086 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -6387,7 +6387,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const SpellPeriodicAuraLogInfo pInfo(this, damage, overkill, absorb, resist, 0.0f, crit); target->SendPeriodicAuraLog(&pInfo); - Unit::DealDamage(caster, target, damage, &cleanDamage, DOT, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true, false); + Unit::DealDamage(caster, target, damage, &cleanDamage, DOT, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true); Unit::ProcDamageAndSpell(caster, target, caster ? procAttacker : 0, procVictim, procEx, damage, BASE_ATTACK, GetSpellInfo(), nullptr, GetEffIndex(), nullptr, &dmgInfo); } diff --git a/src/server/game/World/IWorld.cpp b/src/server/game/World/IWorld.cpp deleted file mode 100644 index ae421903a..000000000 --- a/src/server/game/World/IWorld.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by the - * Free Software Foundation; either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#include "IWorld.h" - -class Unit; -class IWorld; - -void IWorld::AddDelayedDamage(ObjectGuid attacker, ObjectGuid victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, uint32 mapId, uint32 instanceId) -{ - DelayedDamage delayedDamage; - delayedDamage.attacker = attacker; - delayedDamage.victim = victim; - delayedDamage.damage = damage; - delayedDamage.cleanDamage = cleanDamage; - delayedDamage.damagetype = damagetype; - delayedDamage.damageSchoolMask = damageSchoolMask; - delayedDamage.spellProto = spellProto; - delayedDamage.durabilityLoss = durabilityLoss; - delayedDamage.mapId = mapId; - delayedDamage.instanceId = instanceId; - _delayedDamages.push_back(delayedDamage); -} diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 1d4a6f0fe..c5fff797b 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -24,17 +24,15 @@ #include "ObjectGuid.h" #include "QueryResult.h" #include "SharedDefines.h" -#include "Unit.h" #include #include #include #include #include -class IWorld; -class Player; class WorldPacket; class WorldSession; +class Player; /// Storage class for commands issued for delayed execution struct AC_GAME_API CliCommandHolder @@ -518,13 +516,10 @@ enum Rates class IWorld { public: - std::list _delayedDamages; - virtual ~IWorld() = default; [[nodiscard]] virtual WorldSession* FindSession(uint32 id) const = 0; [[nodiscard]] virtual WorldSession* FindOfflineSession(uint32 id) const = 0; [[nodiscard]] virtual WorldSession* FindOfflineSessionForCharacterGUID(ObjectGuid::LowType guidLow) const = 0; - virtual void AddDelayedDamage(ObjectGuid attacker, ObjectGuid victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, uint32 mapId, uint32 instanceId); virtual void AddSession(WorldSession* s) = 0; virtual bool KickSession(uint32 id) = 0; virtual void UpdateMaxSessionCounters() = 0; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 621cfc056..b53515b1e 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2064,8 +2064,6 @@ void World::SetInitialWorldSettings() _mail_expire_check_timer = GameTime::GetGameTime() + 6h; - _timers[WUPDATE_DELAYED_DAMAGES].SetInterval(400); - ///- Initialize MapMgr LOG_INFO("server.loading", "Starting Map System"); LOG_INFO("server.loading", " "); @@ -2312,12 +2310,6 @@ void World::Update(uint32 diff) { METRIC_TIMER("world_update_time", METRIC_TAG("type", "Check quest reset times")); - if (_timers[WUPDATE_DELAYED_DAMAGES].Passed()) - { - _timers[WUPDATE_DELAYED_DAMAGES].Reset(); - ProcessDelayedDamages(); - } - /// Handle daily quests reset time if (currentGameTime > _nextDailyQuestReset) { @@ -3339,39 +3331,3 @@ CliCommandHolder::~CliCommandHolder() { free(m_command); } - -void World::AddDelayedDamage(ObjectGuid attacker, ObjectGuid victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, uint32 mapId, uint32 instanceId) -{ - DelayedDamage delayedDamage; - delayedDamage.attacker = attacker; - delayedDamage.victim = victim; - delayedDamage.damage = damage; - delayedDamage.cleanDamage = cleanDamage; - delayedDamage.damagetype = damagetype; - delayedDamage.damageSchoolMask = damageSchoolMask; - delayedDamage.spellProto = spellProto; - delayedDamage.durabilityLoss = durabilityLoss; - delayedDamage.mapId = mapId; - delayedDamage.instanceId = instanceId; - _delayedDamages.push_back(delayedDamage); -} - -void World::ProcessDelayedDamages() -{ - for (auto& damage : _delayedDamages) - { - // Get map first - Map* map = sMapMgr->FindMap(damage.mapId, damage.instanceId); - if (!map) - continue; - - // Now we get both, attacker and victim, but attacker can be null (although attacker is always a player). - Unit* attacker = ObjectAccessor::GetUnit(map, damage.attacker); - Unit* victim = ObjectAccessor::GetUnit(map, damage.victim); - if (!victim) - continue; - - Unit::DealDamage(attacker, victim, damage.damage, damage.cleanDamage, damage.damagetype, damage.damageSchoolMask, damage.spellProto, damage.durabilityLoss); - } - _delayedDamages.clear(); -} diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 590d85161..f8e0de9b8 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -28,7 +28,6 @@ #include "QueryResult.h" #include "SharedDefines.h" #include "Timer.h" -#include "Unit.h" #include #include #include @@ -71,7 +70,6 @@ enum WorldTimers WUPDATE_PINGDB, WUPDATE_5_SECS, WUPDATE_WHO_LIST, - WUPDATE_DELAYED_DAMAGES, WUPDATE_COUNT }; @@ -155,8 +153,6 @@ public: World(); ~World() override; - std::list _delayedDamages; - static World* instance(); static uint32 m_worldLoopCounter; @@ -355,10 +351,6 @@ public: void RemoveOldCorpses() override; - void AddDelayedDamage(ObjectGuid attacker, ObjectGuid victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, uint32 mapId, uint32 instanceId) override; - - void ProcessDelayedDamages(); - protected: void _UpdateGameTime(); // callback for UpdateRealmCharacters