aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-05-01 22:26:53 +0200
committerShauren <shauren.trinity@gmail.com>2024-05-01 22:26:53 +0200
commita39d0db9ec64f6bf38716abaade5b7835f2db338 (patch)
tree1e18f96b3600ab02d9cb8fc6288ac0cded23b6ce /src/server/game/Entities
parentcdc6719b8368907292f090978f6bdd6b8c73834d (diff)
Core/Spells: Implemented evoker empower spell mechanic
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp1
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
5 files changed, 10 insertions, 1 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 9c39a8c7d99..dbb69e78ce6 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -542,6 +542,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
SetModRangedHaste(1.0f);
SetModHasteRegen(1.0f);
SetModTimeRate(1.0f);
+ SetSpellEmpowerStage(-1);
SetSpeedRate(MOVE_WALK, creatureInfo->speed_walk);
SetSpeedRate(MOVE_RUN, creatureInfo->speed_run);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 85f9cdaf74d..ea0adbb522d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -281,6 +281,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
m_legacyRaidDifficulty = DIFFICULTY_10_N;
m_lastPotionId = 0;
+ m_empowerMinHoldStagePercent = 1.0f;
m_auraBaseFlatMod.fill(0.0f);
m_auraBasePctMod.fill(1.0f);
@@ -2404,6 +2405,7 @@ void Player::InitStatsForLevel(bool reapplyMods)
SetModRangedHaste(1.0f);
SetModHasteRegen(1.0f);
SetModTimeRate(1.0f);
+ SetSpellEmpowerStage(-1);
// reset size before reapply auras
SetObjectScale(1.0f);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 758c3ccd28a..988b2852022 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1952,6 +1952,9 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void SetLastPotionId(uint32 item_id) { m_lastPotionId = item_id; }
void UpdatePotionCooldown(Spell* spell = nullptr);
+ float GetEmpowerMinHoldStagePercent() const { return m_empowerMinHoldStagePercent; }
+ void SetEmpowerMinHoldStagePercent(float empowerMinHoldStagePercent) { m_empowerMinHoldStagePercent = empowerMinHoldStagePercent; }
+
void SetResurrectRequestData(WorldObject const* caster, uint32 health, uint32 mana, uint32 appliedAura);
void ClearResurrectRequestData()
{
@@ -3078,6 +3081,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
std::unordered_map<uint32 /*overridenSpellId*/, std::unordered_set<uint32> /*newSpellId*/> m_overrideSpells;
uint32 m_lastPotionId; // last used health/mana potion in combat, that block next potion use
std::unordered_map<uint32, StoredAuraTeleportLocation> m_storedAuraTeleportLocations;
+ float m_empowerMinHoldStagePercent;
SpecializationInfo _specializationInfo;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index a5a0b56df0e..55a697f32db 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -3071,7 +3071,7 @@ void Unit::FinishSpell(CurrentSpellTypes spellType, SpellCastResult result /*= S
return;
if (spellType == CURRENT_CHANNELED_SPELL)
- spell->SendChannelUpdate(0);
+ spell->SendChannelUpdate(0, result);
spell->finish(result);
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 3a01deadd62..cae58533142 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1429,6 +1429,8 @@ class TC_GAME_API Unit : public WorldObject
RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects), index);
}
void ClearChannelObjects() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)); }
+ int8 GetSpellEmpowerStage() const { return m_unitData->SpellEmpowerStage; }
+ void SetSpellEmpowerStage(int8 stage) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SpellEmpowerStage), stage); }
void SetCurrentCastSpell(Spell* pSpell);
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed = true, bool withInstant = true);