diff options
| author | Matan Shukry <matanshukry@gmail.com> | 2021-03-23 00:21:09 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-03-23 00:46:47 +0100 |
| commit | 2420f4e7a10c430ea28b2d71a17f54da0c244a54 (patch) | |
| tree | af4287c6327bed6e521cd7cdc012f9886bf0ea73 /src/server/game/Entities | |
| parent | 88f4d30445937b9de42f5cb25acad75fc89bdccb (diff) | |
Core/Scripts: Implemented new aura script hook OnEnterLeaveCombat
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 |
4 files changed, 25 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index de9e29342fc..565c03d0fac 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -28211,6 +28211,8 @@ VoidStorageItem* Player::GetVoidStorageItem(uint64 id, uint8& slot) const void Player::OnCombatExit() { + Unit::OnCombatExit(); + UpdatePotionCooldown(); m_combatExitTime = getMSTime(); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 6653bb857c6..8a29cc05a0c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2413,7 +2413,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> VoidStorageItem* GetVoidStorageItem(uint8 slot) const; VoidStorageItem* GetVoidStorageItem(uint64 id, uint8& slot) const; - void OnCombatExit(); + void OnCombatExit() override; void CreateGarrison(uint32 garrSiteId); void DeleteGarrison(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index cdec9be3caa..b81fb679c2d 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8205,6 +8205,14 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy) controlled->SetInCombatState(PvP, enemy); } + for (auto itr = m_appliedAuras.begin(); itr != m_appliedAuras.end();) + { + AuraApplication* aurApp = itr->second; + ++itr; + + aurApp->GetBase()->CallScriptEnterLeaveCombatHandlers(aurApp, true); + } + RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::EnteringCombat); ProcSkillsAndAuras(enemy, PROC_FLAG_ENTER_COMBAT, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr); } @@ -8231,8 +8239,8 @@ void Unit::ClearInCombat() else if (!IsCharmed()) return; } - else - ToPlayer()->OnCombatExit(); + + OnCombatExit(); RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::LeavingCombat); } @@ -8244,6 +8252,17 @@ void Unit::ClearInPetCombat() owner->RemoveUnitFlag(UNIT_FLAG_PET_IN_COMBAT); } +void Unit::OnCombatExit() +{ + for (auto itr = m_appliedAuras.begin(); itr != m_appliedAuras.end();) + { + AuraApplication* aurApp = itr->second; + ++itr; + + aurApp->GetBase()->CallScriptEnterLeaveCombatHandlers(aurApp, false); + } +} + bool Unit::isTargetableForAttack(bool checkFakeDeath) const { if (!IsAlive()) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 71da844b761..70111c19fef 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1293,6 +1293,7 @@ class TC_GAME_API Unit : public WorldObject void ClearInCombat(); void ClearInPetCombat(); uint32 GetCombatTimer() const { return m_CombatTimer; } + virtual void OnCombatExit(); bool HasAuraTypeWithFamilyFlags(AuraType auraType, uint32 familyName, flag128 familyFlags) const; bool virtual HasSpell(uint32 /*spellID*/) const { return false; } |
