aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/PetHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-06-12 01:29:18 +0200
committerShauren <shauren.trinity@gmail.com>2020-06-12 01:29:18 +0200
commitc7306439e7004288fb85890d6a5f730cf1761d71 (patch)
treea1b6fd4af385923f321ff24ef4d66d09374397b9 /src/server/game/Handlers/PetHandler.cpp
parent1cdd1d0249ad49c860e117e1e39d451e1a3fbe43 (diff)
Core/Spells: Implement using different difficulty data from all spell related db2s, not just SpellEffect and SpellPower
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
-rw-r--r--src/server/game/Handlers/PetHandler.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 7428cb9994e..3d91ce9afaa 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -21,6 +21,7 @@
#include "DatabaseEnv.h"
#include "Group.h"
#include "Log.h"
+#include "Map.h"
#include "MotionMaster.h"
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
@@ -86,7 +87,7 @@ void WorldSession::HandlePetAction(WorldPackets::Pet::PetAction& packet)
if (!pet->IsAlive())
{
- SpellInfo const* spell = (flag == ACT_ENABLED || flag == ACT_PASSIVE) ? sSpellMgr->GetSpellInfo(spellid) : NULL;
+ SpellInfo const* spell = (flag == ACT_ENABLED || flag == ACT_PASSIVE) ? sSpellMgr->GetSpellInfo(spellid, pet->GetMap()->GetDifficultyID()) : NULL;
if (!spell)
return;
if (!spell->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
@@ -295,14 +296,14 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
unit_target = ObjectAccessor::GetUnit(*_player, guid2);
// do not cast unknown spells
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid, pet->GetMap()->GetDifficultyID());
if (!spellInfo)
{
TC_LOG_ERROR("spells.pet", "WORLD: unknown PET spell id %i", spellid);
return;
}
- for (SpellEffectInfo const* effect: spellInfo->GetEffectsForDifficulty(DIFFICULTY_NONE))
+ for (SpellEffectInfo const* effect: spellInfo->GetEffects())
{
if (effect && (effect->TargetA.GetTarget() == TARGET_UNIT_SRC_AREA_ENEMY || effect->TargetA.GetTarget() == TARGET_UNIT_DEST_AREA_ENEMY || effect->TargetA.GetTarget() == TARGET_DEST_DYNOBJ_ENEMY))
return;
@@ -484,7 +485,7 @@ void WorldSession::HandlePetSetAction(WorldPackets::Pet::PetSetAction& packet)
//if it's act for spell (en/disable/cast) and there is a spell given (0 = remove spell) which pet doesn't know, don't add
if (!((act_state == ACT_ENABLED || act_state == ACT_DISABLED || act_state == ACT_PASSIVE) && spell_id && !pet->HasSpell(spell_id)))
{
- if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id))
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id, pet->GetMap()->GetDifficultyID()))
{
//sign for autocast
if (act_state == ACT_ENABLED)
@@ -615,7 +616,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPackets::Pet::PetSpellAutoc
return;
}
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(packet.SpellID);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(packet.SpellID, pet->GetMap()->GetDifficultyID());
if (!spellInfo)
{
TC_LOG_ERROR("spells.pet", "WorldSession::HandlePetSpellAutocastOpcode: Unknown spell id %u used by %s.", packet.SpellID, packet.PetGUID.ToString().c_str());
@@ -643,18 +644,18 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPackets::Pet::PetSpellAutoc
void WorldSession::HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell& petCastSpell)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(petCastSpell.Cast.SpellID);
- if (!spellInfo)
+ Unit* caster = ObjectAccessor::GetUnit(*_player, petCastSpell.PetGUID);
+ if (!caster)
{
- TC_LOG_ERROR("spells.pet", "WorldSession::HandlePetCastSpellOpcode: unknown spell id %i tried to cast by %s",
- petCastSpell.Cast.SpellID, petCastSpell.PetGUID.ToString().c_str());
+ TC_LOG_ERROR("entities.pet", "WorldSession::HandlePetCastSpellOpcode: Caster %s not found.", petCastSpell.PetGUID.ToString().c_str());
return;
}
- Unit* caster = ObjectAccessor::GetUnit(*_player, petCastSpell.PetGUID);
- if (!caster)
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(petCastSpell.Cast.SpellID, caster->GetMap()->GetDifficultyID());
+ if (!spellInfo)
{
- TC_LOG_ERROR("entities.pet", "WorldSession::HandlePetCastSpellOpcode: Caster %s not found.", petCastSpell.PetGUID.ToString().c_str());
+ TC_LOG_ERROR("spells.pet", "WorldSession::HandlePetCastSpellOpcode: unknown spell id %i tried to cast by %s",
+ petCastSpell.Cast.SpellID, petCastSpell.PetGUID.ToString().c_str());
return;
}
@@ -706,7 +707,7 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell&
{
spell->SendPetCastResult(result);
- if (!caster->GetSpellHistory()->HasCooldown(spellInfo->Id))
+ if (!caster->GetSpellHistory()->HasCooldown(spellInfo))
caster->GetSpellHistory()->ResetCooldown(spellInfo->Id, true);
spell->finish(false);