aboutsummaryrefslogtreecommitdiff
path: root/src/game/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r--src/game/Spell.cpp168
1 files changed, 84 insertions, 84 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 798db319dad..fc454dc03ff 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -211,11 +211,11 @@ void SpellCastTargets::Update(Unit* caster)
if(caster->GetTypeId() == TYPEID_PLAYER)
{
if(m_targetMask & TARGET_FLAG_ITEM)
- m_itemTarget = ((Player*)caster)->GetItemByGuid(m_itemTargetGUID);
+ m_itemTarget = caster->ToPlayer()->GetItemByGuid(m_itemTargetGUID);
else if(m_targetMask & TARGET_FLAG_TRADE_ITEM)
{
// here it is not guid but slot
- Player* pTrader = ((Player*)caster)->GetTrader();
+ Player* pTrader = caster->ToPlayer()->GetTrader();
if(pTrader && m_itemTargetGUID < TRADE_SLOT_COUNT)
m_itemTarget = pTrader->GetItemByGuid(m_itemTargetGUID);
}
@@ -415,7 +415,7 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi
// wand case
if((m_caster->getClassMask() & CLASSMASK_WAND_USERS) != 0 && m_caster->GetTypeId() == TYPEID_PLAYER)
{
- if(Item* pItem = ((Player*)m_caster)->GetWeaponForAttack(RANGED_ATTACK))
+ if(Item* pItem = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK))
m_spellSchoolMask = SpellSchoolMask(1 << pItem->GetProto()->Damage[0].DamageType);
}
}
@@ -493,7 +493,7 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi
Spell::~Spell()
{
if(m_caster && m_caster->GetTypeId() == TYPEID_PLAYER)
- assert(((Player*)m_caster)->m_spellModTakingSpell != this);
+ assert(m_caster->ToPlayer()->m_spellModTakingSpell != this);
delete m_spellValue;
}
@@ -605,7 +605,7 @@ void Spell::SelectSpellTargets()
{
// clear cooldown at fail
if(m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id, true);
+ m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true);
SendCastResult(SPELL_FAILED_NO_EDIBLE_CORPSES);
finish(false);
}
@@ -637,9 +637,9 @@ void Spell::SelectSpellTargets()
AddUnitTarget(m_caster, i);
break;
case SPELL_EFFECT_SUMMON_PLAYER:
- if(m_caster->GetTypeId() == TYPEID_PLAYER && ((Player*)m_caster)->GetSelection())
+ if(m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->ToPlayer()->GetSelection())
{
- Player* target = objmgr.GetPlayer(((Player*)m_caster)->GetSelection());
+ Player* target = objmgr.GetPlayer(m_caster->ToPlayer()->GetSelection());
if(target)
AddUnitTarget(target, i);
}
@@ -1251,7 +1251,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
if(unit->IsPvP())
{
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->UpdatePvP(true);
+ m_caster->ToPlayer()->UpdatePvP(true);
}
}
@@ -1268,13 +1268,13 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
if (unit->GetTypeId() == TYPEID_PLAYER)
{
- ((Player*)unit)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, m_spellInfo->Id);
- ((Player*)unit)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, m_spellInfo->Id);
+ unit->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, m_spellInfo->Id);
+ unit->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, m_spellInfo->Id);
}
if(m_caster->GetTypeId() == TYPEID_PLAYER)
{
- ((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2, m_spellInfo->Id, 0, unit);
+ m_caster->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2, m_spellInfo->Id, 0, unit);
}
if( m_caster != unit )
@@ -1320,7 +1320,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
{
m_caster->SetContestedPvP();
if(m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->UpdatePvP(true);
+ m_caster->ToPlayer()->UpdatePvP(true);
}
if( unit->isInCombat() && !(m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_NO_INITIAL_AGGRO) )
{
@@ -1576,7 +1576,7 @@ struct ChainHealingOrder : public std::binary_function<const Unit*, const Unit*,
/*if (Target == MainTarget)
return 0;
else*/ if (Target->GetTypeId() == TYPEID_PLAYER && MainTarget->GetTypeId() == TYPEID_PLAYER &&
- ((Player const*)Target)->IsInSameRaidWith((Player const*)MainTarget))
+ Target->ToPlayer()->IsInSameRaidWith(MainTarget->ToPlayer()))
{
if (Target->GetHealth() == Target->GetMaxHealth())
return 40000;
@@ -2110,7 +2110,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
break;
case TARGET_DST_HOME:
if(m_caster->GetTypeId() == TYPEID_PLAYER)
- m_targets.setDst(((Player*)m_caster)->m_homebindX,((Player*)m_caster)->m_homebindY,((Player*)m_caster)->m_homebindZ, ((Player*)m_caster)->GetOrientation(), ((Player*)m_caster)->m_homebindMapId);
+ m_targets.setDst(m_caster->ToPlayer()->m_homebindX,m_caster->ToPlayer()->m_homebindY,m_caster->ToPlayer()->m_homebindZ, m_caster->ToPlayer()->GetOrientation(), m_caster->ToPlayer()->m_homebindMapId);
break;
case TARGET_DST_NEARBY_ENTRY:
{
@@ -2324,7 +2324,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
else
{
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id,true);
+ m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id,true);
SendCastResult(SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW);
finish(false);
}
@@ -2576,7 +2576,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
if(m_caster->GetTypeId() == TYPEID_UNIT)
target = m_caster->getVictim();
else
- target = ObjectAccessor::GetUnit(*m_caster, ((Player*)m_caster)->GetSelection());
+ target = ObjectAccessor::GetUnit(*m_caster, m_caster->ToPlayer()->GetSelection());
if (target && IsValidSingleTargetSpell(target))
m_targets.setUnitTarget(target);
@@ -2654,11 +2654,11 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
}
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->SetSpellModTakingSpell(this, true);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
// Fill cost data (not use power for item casts
m_powerCost = m_CastItem ? 0 : CalculatePowerCost(m_spellInfo, m_caster, m_spellSchoolMask);
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->SetSpellModTakingSpell(this, false);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
SpellCastResult result = CheckCast(true);
if(result != SPELL_CAST_OK && !IsAutoRepeat()) //always cast autorepeat dummy for triggering
@@ -2761,7 +2761,7 @@ void Spell::cancel()
// spell is canceled-take mods and clear list
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->RemoveSpellMods(this);
+ m_caster->ToPlayer()->RemoveSpellMods(this);
m_appliedMods.clear();
} break;
@@ -2819,7 +2819,7 @@ void Spell::cast(bool skipCheck)
{
// Set spell which will drop charges for triggered cast spells
// if not successfully casted, will be remove in finish(false)
- ((Player*)m_caster)->SetSpellModTakingSpell(this, true);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
}
// triggered cast called from Spell::prepare where it was already checked
@@ -2833,10 +2833,10 @@ void Spell::cast(bool skipCheck)
//restore spell mods
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
- ((Player*)m_caster)->RestoreSpellMods(this);
+ m_caster->ToPlayer()->RestoreSpellMods(this);
// cleanup after mod system
// triggered spell pointer can be not removed in some cases
- ((Player*)m_caster)->SetSpellModTakingSpell(this, false);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
}
finish(false);
SetExecutedCurrently(false);
@@ -2853,10 +2853,10 @@ void Spell::cast(bool skipCheck)
//restore spell mods
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
- ((Player*)m_caster)->RestoreSpellMods(this);
+ m_caster->ToPlayer()->RestoreSpellMods(this);
// cleanup after mod system
// triggered spell pointer can be not removed in some cases
- ((Player*)m_caster)->SetSpellModTakingSpell(this, false);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
}
finish(false);
SetExecutedCurrently(false);
@@ -2893,9 +2893,9 @@ void Spell::cast(bool skipCheck)
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
if (!m_IsTriggeredSpell && m_CastItem)
- ((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM, m_CastItem->GetEntry());
+ m_caster->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM, m_CastItem->GetEntry());
- ((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, m_spellInfo->Id);
+ m_caster->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, m_spellInfo->Id);
}
if(!m_IsTriggeredSpell)
@@ -2978,7 +2978,7 @@ void Spell::cast(bool skipCheck)
}
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->SetSpellModTakingSpell(this, false);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
SetExecutedCurrently(false);
}
@@ -3026,7 +3026,7 @@ uint64 Spell::handle_delayed(uint64 t_offset)
UpdatePointers();
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->SetSpellModTakingSpell(this, true);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
uint64 next_time = 0;
@@ -3063,7 +3063,7 @@ uint64 Spell::handle_delayed(uint64 t_offset)
}
if (m_caster->GetTypeId() == TYPEID_PLAYER)
- ((Player*)m_caster)->SetSpellModTakingSpell(this, false);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
// All targets passed - need finish phase
if (next_time == 0)
@@ -3384,11 +3384,11 @@ void Spell::finish(bool ok)
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
if (!m_triggeredByAuraSpell)
- ((Player*)m_caster)->UpdatePotionCooldown(this);
+ m_caster->ToPlayer()->UpdatePotionCooldown(this);
// triggered spell pointer can be not set in some cases
// this is needed for proper apply of triggered spell mods
- ((Player*)m_caster)->SetSpellModTakingSpell(this, true);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
}
// call triggered spell only at successful cast (after clear combo points -> for add some if need)
@@ -3400,8 +3400,8 @@ void Spell::finish(bool ok)
// mods are taken only on succesfull cast and independantly from targets of the spell
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
- ((Player*)m_caster)->RemoveSpellMods(this);
- ((Player*)m_caster)->SetSpellModTakingSpell(this, false);
+ m_caster->ToPlayer()->RemoveSpellMods(this);
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
}
// Stop Attack for some spells
@@ -3417,7 +3417,7 @@ void Spell::SendCastResult(SpellCastResult result)
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return;
- if(((Player*)m_caster)->GetSession()->PlayerLoading()) // don't send cast results at loading time
+ if(m_caster->ToPlayer()->GetSession()->PlayerLoading()) // don't send cast results at loading time
return;
SendCastResult((Player*)m_caster,m_spellInfo,m_cast_count,result);
@@ -3598,7 +3598,7 @@ void Spell::SendSpellGo()
if ( castFlags & CAST_FLAG_RUNE_LIST ) // rune cooldowns list
{
uint8 v1 = m_runesState;
- uint8 v2 = ((Player*)m_caster)->GetRunesState();
+ uint8 v2 = m_caster->ToPlayer()->GetRunesState();
data << uint8(v1); // runes state before
data << uint8(v2); // runes state after
for (uint8 i = 0; i < MAX_RUNES; ++i)
@@ -3640,7 +3640,7 @@ void Spell::WriteAmmoToPacket( WorldPacket * data )
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
- Item *pItem = ((Player*)m_caster)->GetWeaponForAttack( RANGED_ATTACK );
+ Item *pItem = m_caster->ToPlayer()->GetWeaponForAttack( RANGED_ATTACK );
if(pItem)
{
ammoInventoryType = pItem->GetProto()->InventoryType;
@@ -3648,7 +3648,7 @@ void Spell::WriteAmmoToPacket( WorldPacket * data )
ammoDisplayID = pItem->GetProto()->DisplayInfoID;
else
{
- uint32 ammoID = ((Player*)m_caster)->GetUInt32Value(PLAYER_AMMO_ID);
+ uint32 ammoID = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID);
if(ammoID)
{
ItemPrototype const *pProto = objmgr.GetItemPrototype( ammoID );
@@ -3964,7 +3964,7 @@ void Spell::SendPlaySpellVisual(uint32 SpellID)
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 8 + 4);
data << uint64(m_caster->GetGUID());
data << uint32(SpellID); // spell visual id?
- ((Player*)m_caster)->GetSession()->SendPacket(&data);
+ m_caster->ToPlayer()->GetSession()->SendPacket(&data);
}
void Spell::TakeCastItem()
@@ -4019,7 +4019,7 @@ void Spell::TakeCastItem()
if (expendable && withoutCharges)
{
uint32 count = 1;
- ((Player*)m_caster)->DestroyItemCount(m_CastItem, count, true);
+ m_caster->ToPlayer()->DestroyItemCount(m_CastItem, count, true);
// prevent crash at access to deleted m_targets.getItemTarget
if(m_CastItem==m_targets.getItemTarget())
@@ -4047,7 +4047,7 @@ void Spell::TakePower()
if (ihit->missCondition != SPELL_MISS_NONE)
{
//lower spell cost on fail (by talent aura)
- if(Player *modOwner = ((Player*)m_caster)->GetSpellModOwner())
+ if(Player *modOwner = m_caster->ToPlayer()->GetSpellModOwner())
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_SPELL_COST_REFUND_ON_FAIL, m_powerCost);
}
break;
@@ -4092,7 +4092,7 @@ void Spell::TakeAmmo()
{
if(m_attackType == RANGED_ATTACK && m_caster->GetTypeId() == TYPEID_PLAYER)
{
- Item *pItem = ((Player*)m_caster)->GetWeaponForAttack( RANGED_ATTACK );
+ Item *pItem = m_caster->ToPlayer()->GetWeaponForAttack( RANGED_ATTACK );
// wands don't have ammo
if(!pItem || pItem->IsBroken() || pItem->GetProto()->SubClass==ITEM_SUBCLASS_WEAPON_WAND)
@@ -4103,17 +4103,17 @@ void Spell::TakeAmmo()
if(pItem->GetMaxStackCount()==1)
{
// decrease durability for non-stackable throw weapon
- ((Player*)m_caster)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_RANGED);
+ m_caster->ToPlayer()->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_RANGED);
}
else
{
// decrease items amount for stackable throw weapon
uint32 count = 1;
- ((Player*)m_caster)->DestroyItemCount( pItem, count, true);
+ m_caster->ToPlayer()->DestroyItemCount( pItem, count, true);
}
}
- else if(uint32 ammo = ((Player*)m_caster)->GetUInt32Value(PLAYER_AMMO_ID))
- ((Player*)m_caster)->DestroyItemCount(ammo, 1, true);
+ else if(uint32 ammo = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID))
+ m_caster->ToPlayer()->DestroyItemCount(ammo, 1, true);
}
}
@@ -4346,10 +4346,10 @@ SpellCastResult Spell::CheckCast(bool strict)
if(m_caster->GetTypeId() == TYPEID_PLAYER && !(m_spellInfo->Attributes & SPELL_ATTR_PASSIVE))
{
//can cast triggered (by aura only?) spells while have this flag
- if (!m_IsTriggeredSpell && ((Player*)m_caster)->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
+ if (!m_IsTriggeredSpell && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
return SPELL_FAILED_SPELL_IN_PROGRESS;
- if (((Player*)m_caster)->HasSpellCooldown(m_spellInfo->Id))
+ if (m_caster->ToPlayer()->HasSpellCooldown(m_spellInfo->Id))
{
if(m_triggeredByAuraSpell)
return SPELL_FAILED_DONT_REPORT;
@@ -4360,7 +4360,7 @@ SpellCastResult Spell::CheckCast(bool strict)
// only allow triggered spells if at an ended battleground
if( !m_IsTriggeredSpell && m_caster->GetTypeId() == TYPEID_PLAYER)
- if(BattleGround * bg = ((Player*)m_caster)->GetBattleGround())
+ if(BattleGround * bg = m_caster->ToPlayer()->GetBattleGround())
if(bg->GetStatus() == STATUS_WAIT_LEAVE)
return SPELL_FAILED_DONT_REPORT;
@@ -4425,10 +4425,10 @@ SpellCastResult Spell::CheckCast(bool strict)
// cancel autorepeat spells if cast start when moving
// (not wand currently autorepeat cast delayed to moving stop anyway in spell update code)
- if( m_caster->GetTypeId() == TYPEID_PLAYER && ((Player*)m_caster)->isMoving() )
+ if( m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->ToPlayer()->isMoving() )
{
// skip stuck spell to allow use it in falling case and apply spell limitations at movement
- if( (!((Player*)m_caster)->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING) || m_spellInfo->Effect[0] != SPELL_EFFECT_STUCK) &&
+ if( (!m_caster->ToPlayer()->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING) || m_spellInfo->Effect[0] != SPELL_EFFECT_STUCK) &&
(IsAutoRepeat() || (m_spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) != 0) )
return SPELL_FAILED_MOVING;
}
@@ -4469,7 +4469,7 @@ SpellCastResult Spell::CheckCast(bool strict)
// Not allow banish not self target
if (m_spellInfo->Mechanic == MECHANIC_BANISH)
if (target->GetTypeId() == TYPEID_UNIT &&
- !((Player*)m_caster)->isAllowedToLoot((Creature*)target))
+ !m_caster->ToPlayer()->isAllowedToLoot((Creature*)target))
return SPELL_FAILED_CANT_CAST_ON_TAPPED;
if (m_customAttr & SPELL_ATTR_CU_PICKPOCKET)
@@ -4485,7 +4485,7 @@ SpellCastResult Spell::CheckCast(bool strict)
{
if (target->GetTypeId() == TYPEID_PLAYER)
{
- if(!((Player*)target)->GetWeaponForAttack(BASE_ATTACK) || !((Player*)target)->IsUseEquipedWeapon(true))
+ if(!target->ToPlayer()->GetWeaponForAttack(BASE_ATTACK) || !target->ToPlayer()->IsUseEquipedWeapon(true))
return SPELL_FAILED_TARGET_NO_WEAPONS;
}
else if (!target->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID))
@@ -4600,7 +4600,7 @@ SpellCastResult Spell::CheckCast(bool strict)
// Spell casted only on battleground
if ((m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER)
- if(!((Player*)m_caster)->InBattleGround())
+ if(!m_caster->ToPlayer()->InBattleGround())
return SPELL_FAILED_ONLY_BATTLEGROUNDS;
// do not allow spells to be cast in arenas
@@ -4613,13 +4613,13 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_NOT_IN_ARENA;
// zone check
- if(m_caster->GetTypeId() == TYPEID_UNIT || !((Player*)m_caster)->isGameMaster())
+ if(m_caster->GetTypeId() == TYPEID_UNIT || !m_caster->ToPlayer()->isGameMaster())
{
uint32 zone, area;
m_caster->GetZoneAndAreaId(zone,area);
SpellCastResult locRes= spellmgr.GetSpellAllowedInLocationError(m_spellInfo,m_caster->GetMapId(),zone,area,
- m_caster->GetTypeId() == TYPEID_PLAYER ? ((Player*)m_caster) : NULL);
+ m_caster->GetTypeId() == TYPEID_PLAYER ? m_caster->ToPlayer() : NULL);
if(locRes != SPELL_CAST_OK)
return locRes;
}
@@ -4853,7 +4853,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if(m_spellInfo->EffectImplicitTargetA[i] != TARGET_UNIT_PET)
break;
- Pet* pet = ((Player*)m_caster)->GetPet();
+ Pet* pet = m_caster->ToPlayer()->GetPet();
if(!pet)
return SPELL_FAILED_NO_PET;
@@ -4873,7 +4873,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return SPELL_FAILED_BAD_TARGETS;
- Pet* pet = ((Player*)m_caster)->GetPet();
+ Pet* pet = m_caster->ToPlayer()->GetPet();
if(!pet)
return SPELL_FAILED_NO_PET;
@@ -4904,7 +4904,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if(!foodItem)
return SPELL_FAILED_BAD_TARGETS;
- Pet* pet = ((Player*)m_caster)->GetPet();
+ Pet* pet = m_caster->ToPlayer()->GetPet();
if(!pet)
return SPELL_FAILED_NO_PET;
@@ -4958,7 +4958,7 @@ SpellCastResult Spell::CheckCast(bool strict)
uint32 skill = creature->GetCreatureInfo()->GetRequiredLootSkill();
- int32 skillValue = ((Player*)m_caster)->GetSkillValue(skill);
+ int32 skillValue = m_caster->ToPlayer()->GetSkillValue(skill);
int32 TargetLevel = m_targets.getUnitTarget()->getLevel();
int32 ReqValue = (skillValue < 100 ? (TargetLevel-10) * 10 : TargetLevel * 5);
if (ReqValue > skillValue)
@@ -4987,8 +4987,8 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_BAD_TARGETS;
// In BattleGround players can use only flags and banners
- if( ((Player*)m_caster)->InBattleGround() &&
- !((Player*)m_caster)->CanUseBattleGroundObject() )
+ if( m_caster->ToPlayer()->InBattleGround() &&
+ !m_caster->ToPlayer()->CanUseBattleGroundObject() )
return SPELL_FAILED_TRY_AGAIN;
// get the lock entry
@@ -5059,7 +5059,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->getClass()==CLASS_WARLOCK)
{
if (strict) //starting cast, trigger pet stun (cast by pet so it doesn't attack player)
- if(Pet* pet = ((Player*)m_caster)->GetPet())
+ if(Pet* pet = m_caster->ToPlayer()->GetPet())
pet->CastSpell(pet, 32752, true, NULL, NULL, pet->GetGUID());
}
else
@@ -5075,11 +5075,11 @@ SpellCastResult Spell::CheckCast(bool strict)
{
if(m_caster->GetTypeId() != TYPEID_PLAYER)
return SPELL_FAILED_BAD_TARGETS;
- if(!((Player*)m_caster)->GetSelection())
+ if(!m_caster->ToPlayer()->GetSelection())
return SPELL_FAILED_BAD_TARGETS;
- Player* target = objmgr.GetPlayer(((Player*)m_caster)->GetSelection());
- if( !target || ((Player*)m_caster) == target || !target->IsInSameRaidWith((Player*)m_caster) )
+ Player* target = objmgr.GetPlayer(m_caster->ToPlayer()->GetSelection());
+ if( !target || m_caster->ToPlayer() == target || !target->IsInSameRaidWith(m_caster->ToPlayer()) )
return SPELL_FAILED_BAD_TARGETS;
// check if our map is dungeon
@@ -5098,7 +5098,7 @@ SpellCastResult Spell::CheckCast(bool strict)
{
//Do not allow to cast it before BG starts.
if(m_caster->GetTypeId() == TYPEID_PLAYER)
- if(BattleGround const *bg = ((Player*)m_caster)->GetBattleGround())
+ if(BattleGround const *bg = m_caster->ToPlayer()->GetBattleGround())
if(bg->GetStatus() != STATUS_IN_PROGRESS)
return SPELL_FAILED_TRY_AGAIN;
break;
@@ -5131,7 +5131,7 @@ SpellCastResult Spell::CheckCast(bool strict)
break;
}
case 61336:
- if(m_caster->GetTypeId() != TYPEID_PLAYER || !((Player*)m_caster)->IsInFeralForm())
+ if(m_caster->GetTypeId() != TYPEID_PLAYER || !m_caster->ToPlayer()->IsInFeralForm())
return SPELL_FAILED_ONLY_SHAPESHIFT;
break;
// Wild Growth
@@ -5147,7 +5147,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (!target || target->GetTypeId() != TYPEID_PLAYER)
return SPELL_FAILED_BAD_TARGETS;
- if (!((Player*)m_caster)->IsInSameRaidWith(((Player*)target)))
+ if (!m_caster->ToPlayer()->IsInSameRaidWith(target->ToPlayer()))
return SPELL_FAILED_TARGET_NOT_IN_RAID;
break;
@@ -5166,7 +5166,7 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_HIGHLEVEL;
// use SMSG_PET_TAME_FAILURE?
- if (!target->GetCreatureInfo()->isTameable (((Player*)m_caster)->CanTameExoticPets()))
+ if (!target->GetCreatureInfo()->isTameable (m_caster->ToPlayer()->CanTameExoticPets()))
return SPELL_FAILED_BAD_TARGETS;
if(m_caster->GetPetGUID())
@@ -5196,7 +5196,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if(m_caster->GetTypeId() != TYPEID_PLAYER)
return SPELL_FAILED_NO_PET;
- Pet *pet = ((Player*)m_caster)->GetPet();
+ Pet *pet = m_caster->ToPlayer()->GetPet();
if(!pet)
return SPELL_FAILED_NO_PET;
@@ -5241,7 +5241,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (m_caster->IsInWater())
return SPELL_FAILED_ONLY_ABOVEWATER;
- if (m_caster->GetTypeId() == TYPEID_PLAYER && ((Player*)m_caster)->GetTransport())
+ if (m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->ToPlayer()->GetTransport())
return SPELL_FAILED_NO_MOUNTS_ALLOWED;
// Ignore map check if spell have AreaId. AreaId already checked and this prevent special mount spells
@@ -5687,7 +5687,7 @@ SpellCastResult Spell::CheckItems()
// if not item target then required item must be equipped
else
{
- if(m_caster->GetTypeId() == TYPEID_PLAYER && !((Player*)m_caster)->HasItemFitToSpellReqirements(m_spellInfo))
+ if(m_caster->GetTypeId() == TYPEID_PLAYER && !m_caster->ToPlayer()->HasItemFitToSpellReqirements(m_spellInfo))
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
}
@@ -5955,7 +5955,7 @@ SpellCastResult Spell::CheckItems()
if(m_caster->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_TARGET_NOT_PLAYER;
if( m_attackType != RANGED_ATTACK )
break;
- Item *pItem = ((Player*)m_caster)->GetWeaponForAttack(m_attackType);
+ Item *pItem = m_caster->ToPlayer()->GetWeaponForAttack(m_attackType);
if(!pItem || pItem->IsBroken())
return SPELL_FAILED_EQUIPPED_ITEM;
@@ -5964,14 +5964,14 @@ SpellCastResult Spell::CheckItems()
case ITEM_SUBCLASS_WEAPON_THROWN:
{
uint32 ammo = pItem->GetEntry();
- if( !((Player*)m_caster)->HasItemCount( ammo, 1 ) )
+ if( !m_caster->ToPlayer()->HasItemCount( ammo, 1 ) )
return SPELL_FAILED_NO_AMMO;
}; break;
case ITEM_SUBCLASS_WEAPON_GUN:
case ITEM_SUBCLASS_WEAPON_BOW:
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
{
- uint32 ammo = ((Player*)m_caster)->GetUInt32Value(PLAYER_AMMO_ID);
+ uint32 ammo = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID);
if(!ammo)
{
// Requires No Ammo
@@ -6004,7 +6004,7 @@ SpellCastResult Spell::CheckItems()
return SPELL_FAILED_NO_AMMO;
}
- if( !((Player*)m_caster)->HasItemCount( ammo, 1 ) )
+ if( !m_caster->ToPlayer()->HasItemCount( ammo, 1 ) )
return SPELL_FAILED_NO_AMMO;
}; break;
case ITEM_SUBCLASS_WEAPON_WAND:
@@ -6041,7 +6041,7 @@ SpellCastResult Spell::CheckItems()
// main hand weapon required
if(m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_MAIN_HAND)
{
- Item* item = ((Player*)m_caster)->GetWeaponForAttack(BASE_ATTACK);
+ Item* item = m_caster->ToPlayer()->GetWeaponForAttack(BASE_ATTACK);
// skip spell if no weapon in slot or broken
if(!item || item->IsBroken() )
@@ -6055,7 +6055,7 @@ SpellCastResult Spell::CheckItems()
// offhand hand weapon required
if(m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_REQ_OFFHAND)
{
- Item* item = ((Player*)m_caster)->GetWeaponForAttack(OFF_ATTACK);
+ Item* item = m_caster->ToPlayer()->GetWeaponForAttack(OFF_ATTACK);
// skip spell if no weapon in slot or broken
if(!item || item->IsBroken() )
@@ -6088,7 +6088,7 @@ void Spell::Delayed() // only called in DealDamage()
//check pushback reduce
int32 delaytime = 500; // spellcasting delay is normally 500ms
int32 delayReduce = 100; // must be initialized to 100 for percent modifiers
- ((Player*)m_caster)->ApplySpellMod(m_spellInfo->Id, SPELLMOD_NOT_LOSE_CASTING_TIME, delayReduce, this);
+ m_caster->ToPlayer()->ApplySpellMod(m_spellInfo->Id, SPELLMOD_NOT_LOSE_CASTING_TIME, delayReduce, this);
delayReduce += m_caster->GetTotalAuraModifier(SPELL_AURA_REDUCE_PUSHBACK) - 100;
if(delayReduce >= 100)
return;
@@ -6123,7 +6123,7 @@ void Spell::DelayedChannel()
//check pushback reduce
int32 delaytime = GetSpellDuration(m_spellInfo) * 25 / 100; // channeling delay is normally 25% of its time per hit
int32 delayReduce = 100; // must be initialized to 100 for percent modifiers
- ((Player*)m_caster)->ApplySpellMod(m_spellInfo->Id, SPELLMOD_NOT_LOSE_CASTING_TIME, delayReduce, this);
+ m_caster->ToPlayer()->ApplySpellMod(m_spellInfo->Id, SPELLMOD_NOT_LOSE_CASTING_TIME, delayReduce, this);
delayReduce += m_caster->GetTotalAuraModifier(SPELL_AURA_REDUCE_PUSHBACK) - 100;
if(delayReduce >= 100)
return;
@@ -6164,7 +6164,7 @@ void Spell::UpdatePointers()
}
if (m_castItemGUID && m_caster->GetTypeId() == TYPEID_PLAYER)
- m_CastItem = ((Player*)m_caster)->GetItemByGuid(m_castItemGUID);
+ m_CastItem = m_caster->ToPlayer()->GetItemByGuid(m_castItemGUID);
m_targets.Update(m_caster);
}
@@ -6246,10 +6246,10 @@ bool Spell::CheckTarget(Unit* target, uint32 eff)
//Check player targets and remove if in GM mode or GM invisibility (for not self casting case)
if( target != m_caster && target->GetTypeId() == TYPEID_PLAYER)
{
- if(((Player*)target)->GetVisibility() == VISIBILITY_OFF)
+ if(target->ToPlayer()->GetVisibility() == VISIBILITY_OFF)
return false;
- if(((Player*)target)->isGameMaster() && !IsPositiveSpell(m_spellInfo->Id))
+ if(target->ToPlayer()->isGameMaster() && !IsPositiveSpell(m_spellInfo->Id))
return false;
}
@@ -6672,7 +6672,7 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk
// castitem check: rogue using skeleton keys. the skill values should not be added in this case.
skillValue = m_CastItem || m_caster->GetTypeId()!= TYPEID_PLAYER ?
- 0 : ((Player*)m_caster)->GetSkillValue(skillId);
+ 0 : m_caster->ToPlayer()->GetSkillValue(skillId);
skillValue += spellSkillBonus;