aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorMatan Shukry <matanshukry@gmail.com>2021-03-23 00:21:09 +0100
committerShauren <shauren.trinity@gmail.com>2021-03-23 00:46:47 +0100
commit2420f4e7a10c430ea28b2d71a17f54da0c244a54 (patch)
treeaf4287c6327bed6e521cd7cdc012f9886bf0ea73 /src/server/game/Entities
parent88f4d30445937b9de42f5cb25acad75fc89bdccb (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.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp23
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
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; }