diff options
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index bc768ab550b..e10fa03c953 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -62,6 +62,7 @@ #include "PhasingHandler.h" #include "Player.h" #include "ReputationMgr.h" +#include "RestMgr.h" #include "SceneObject.h" #include "ScriptMgr.h" #include "SharedDefines.h" @@ -321,8 +322,8 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectNULL, //233 SPELL_EFFECT_RANDOMIZE_FOLLOWER_ABILITIES &Spell::EffectNULL, //234 SPELL_EFFECT_234 &Spell::EffectUnused, //235 SPELL_EFFECT_235 - &Spell::EffectNULL, //236 SPELL_EFFECT_GIVE_EXPERIENCE - &Spell::EffectNULL, //237 SPELL_EFFECT_GIVE_RESTED_EXPERIENCE_BONUS + &Spell::EffectGiveExperience, //236 SPELL_EFFECT_GIVE_EXPERIENCE + &Spell::EffectGiveRestedExperience, //237 SPELL_EFFECT_GIVE_RESTED_EXPERIENCE_BONUS &Spell::EffectNULL, //238 SPELL_EFFECT_INCREASE_SKILL &Spell::EffectNULL, //239 SPELL_EFFECT_END_GARRISON_BUILDING_CONSTRUCTION &Spell::EffectGiveArtifactPower, //240 SPELL_EFFECT_GIVE_ARTIFACT_POWER @@ -5342,6 +5343,32 @@ void Spell::EffectGrantBattlePetLevel() playerCaster->GetSession()->GetBattlePetMgr()->GrantBattlePetLevel(unitTarget->GetBattlePetCompanionGUID(), damage); } +void Spell::EffectGiveExperience() +{ + if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) + return; + + Player* playerTarget = Object::ToPlayer(unitTarget); + if (!playerTarget) + return; + + uint32 xp = Quest::XPValue(playerTarget, effectInfo->MiscValue, effectInfo->MiscValueB); + playerTarget->GiveXP(xp, nullptr); +} + +void Spell::EffectGiveRestedExperience() +{ + if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) + return; + + Player* playerTarget = Object::ToPlayer(unitTarget); + if (!playerTarget) + return; + + // effect value is number of resting hours + playerTarget->GetRestMgr().AddRestBonus(REST_TYPE_XP, damage * HOUR * playerTarget->GetRestMgr().CalcExtraPerSec(REST_TYPE_XP, 0.125f)); +} + void Spell::EffectHealBattlePetPct() { if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) |