diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-10-14 17:12:33 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-10-14 17:12:33 +0200 |
commit | 05f2f4e8f69133d542f3eadf99410deb932cd30d (patch) | |
tree | aacf68a9c942086ccca9a47cabf74d1fc91497a1 /src | |
parent | 277c063413e4ec54ba943abd87cc1d273ad035e5 (diff) |
Core/BattlePets: Move revive battle pet cooldown to spell script and add serverside spell for stable master heal cooldown
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/BattlePets/BattlePetMgr.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 44 |
5 files changed, 44 insertions, 23 deletions
diff --git a/src/server/game/BattlePets/BattlePetMgr.h b/src/server/game/BattlePets/BattlePetMgr.h index 9de32cfa8cc..781adb0788c 100644 --- a/src/server/game/BattlePets/BattlePetMgr.h +++ b/src/server/game/BattlePets/BattlePetMgr.h @@ -39,7 +39,6 @@ enum BattlePetMisc }; static constexpr uint16 MAX_BATTLE_PET_LEVEL = 25; -static constexpr Milliseconds REVIVE_BATTLE_PETS_COOLDOWN = 180s; enum class BattlePetBreedQuality : uint8 { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1e70772d262..d00152aa005 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22575,25 +22575,6 @@ void Player::UpdatePotionCooldown(Spell* spell) m_lastPotionId = 0; } -void Player::UpdateReviveBattlePetCooldown() -{ - SpellInfo const* reviveBattlePetSpellInfo = sSpellMgr->GetSpellInfo(BattlePets::SPELL_REVIVE_BATTLE_PETS, DIFFICULTY_NONE); - - if (reviveBattlePetSpellInfo && HasSpell(BattlePets::SPELL_REVIVE_BATTLE_PETS)) - { - SpellHistory::Duration remainingCooldown = GetSpellHistory()->GetRemainingCategoryCooldown(reviveBattlePetSpellInfo); - if (remainingCooldown > SpellHistory::Duration::zero()) - { - if (remainingCooldown < BattlePets::REVIVE_BATTLE_PETS_COOLDOWN) - GetSpellHistory()->ModifyCooldown(reviveBattlePetSpellInfo, BattlePets::REVIVE_BATTLE_PETS_COOLDOWN - remainingCooldown); - } - else - { - GetSpellHistory()->StartCooldown(reviveBattlePetSpellInfo, 0, nullptr, false, BattlePets::REVIVE_BATTLE_PETS_COOLDOWN); - } - } -} - void Player::SetResurrectRequestData(WorldObject const* caster, uint32 health, uint32 mana, uint32 appliedAura) { ASSERT(!IsResurrectRequested()); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index cbbacf92c49..221d9c08218 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1842,7 +1842,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint32 GetLastPotionId() const { return m_lastPotionId; } void SetLastPotionId(uint32 item_id) { m_lastPotionId = item_id; } void UpdatePotionCooldown(Spell* spell = nullptr); - void UpdateReviveBattlePetCooldown(); void SetResurrectRequestData(WorldObject const* caster, uint32 health, uint32 mana, uint32 appliedAura); void ClearResurrectRequestData() diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 993d47cabc9..d02d01f512b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1203,8 +1203,6 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) pCurrChar->SendInitialPacketsAfterAddToMap(); - pCurrChar->UpdateReviveBattlePetCooldown(); - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ONLINE); stmt->setUInt64(0, pCurrChar->GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 70b90d9c831..e2eae68c984 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -24,6 +24,7 @@ #include "ScriptMgr.h" #include "Battleground.h" +#include "BattlePetMgr.h" #include "CellImpl.h" #include "CreatureAI.h" #include "DB2Stores.h" @@ -5021,6 +5022,48 @@ class spell_summon_battle_pet : public SpellScript } }; +// 132334 - Trainer Heal Cooldown (SERVERSIDE) +class spell_gen_trainer_heal_cooldown : public AuraScript +{ + PrepareAuraScript(spell_gen_trainer_heal_cooldown); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ BattlePets::SPELL_REVIVE_BATTLE_PETS }); + } + + bool Load() override + { + return GetUnitOwner()->IsPlayer(); + } + + void UpdateReviveBattlePetCooldown(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Player* target = GetUnitOwner()->ToPlayer(); + SpellInfo const* reviveBattlePetSpellInfo = sSpellMgr->AssertSpellInfo(BattlePets::SPELL_REVIVE_BATTLE_PETS, DIFFICULTY_NONE); + + if (target->GetSession()->GetBattlePetMgr()->IsBattlePetSystemEnabled()) + { + Milliseconds expectedCooldown = Milliseconds(GetAura()->GetMaxDuration()); + SpellHistory::Duration remainingCooldown = target->GetSpellHistory()->GetRemainingCategoryCooldown(reviveBattlePetSpellInfo); + if (remainingCooldown > SpellHistory::Duration::zero()) + { + if (remainingCooldown < expectedCooldown) + target->GetSpellHistory()->ModifyCooldown(reviveBattlePetSpellInfo, expectedCooldown - remainingCooldown); + } + else + { + target->GetSpellHistory()->StartCooldown(reviveBattlePetSpellInfo, 0, nullptr, false, expectedCooldown); + } + } + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_gen_trainer_heal_cooldown::UpdateReviveBattlePetCooldown, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + // 45313 - Anchor Here class spell_gen_anchor_here : public SpellScript { @@ -5336,6 +5379,7 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_defender_of_azeroth_death_gate_selector); RegisterSpellScript(spell_defender_of_azeroth_speak_with_mograine); RegisterSpellScript(spell_summon_battle_pet); + RegisterSpellScript(spell_gen_trainer_heal_cooldown); RegisterSpellScript(spell_gen_anchor_here); RegisterSpellScript(spell_gen_mount_check_aura); RegisterSpellScript(spell_gen_ancestral_call); |