Merge pull request #10319 from joschiwald/casts
Core/Misc: replace (Player*) casts with ToPlayer()
This commit is contained in:
@@ -260,15 +260,15 @@ void PetAI::UpdateAI(uint32 diff)
|
||||
|
||||
void PetAI::UpdateAllies()
|
||||
{
|
||||
m_updateAlliesTimer = 10 * IN_MILLISECONDS; // update friendly targets every 10 seconds, lesser checks increase performance
|
||||
|
||||
Unit* owner = me->GetCharmerOrOwner();
|
||||
Group* group = NULL;
|
||||
|
||||
m_updateAlliesTimer = 10*IN_MILLISECONDS; //update friendly targets every 10 seconds, lesser checks increase performance
|
||||
|
||||
if (!owner)
|
||||
return;
|
||||
else if (owner->GetTypeId() == TYPEID_PLAYER)
|
||||
group = owner->ToPlayer()->GetGroup();
|
||||
|
||||
Group* group = NULL;
|
||||
if (Player* player = owner->ToPlayer())
|
||||
group = player->GetGroup();
|
||||
|
||||
//only pet and owner/not in group->ok
|
||||
if (m_AllySet.size() == 2 && !group)
|
||||
@@ -285,7 +285,7 @@ void PetAI::UpdateAllies()
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
Player* Target = itr->GetSource();
|
||||
if (!Target || !group->SameSubGroup((Player*)owner, Target))
|
||||
if (!Target || !group->SameSubGroup(owner->ToPlayer(), Target))
|
||||
continue;
|
||||
|
||||
if (Target->GetGUID() == owner->GetGUID())
|
||||
|
||||
@@ -98,12 +98,14 @@ void TotemAI::UpdateAI(uint32 /*diff*/)
|
||||
void TotemAI::AttackStart(Unit* /*victim*/)
|
||||
{
|
||||
// Sentry totem sends ping on attack
|
||||
if (me->GetEntry() == SENTRY_TOTEM_ENTRY && me->GetOwner()->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
WorldPacket data(MSG_MINIMAP_PING, (8+4+4));
|
||||
data << me->GetGUID();
|
||||
data << me->GetPositionX();
|
||||
data << me->GetPositionY();
|
||||
((Player*)me->GetOwner())->GetSession()->SendPacket(&data);
|
||||
}
|
||||
if (me->GetEntry() == SENTRY_TOTEM_ENTRY)
|
||||
if (Unit* owner = me->GetOwner())
|
||||
if (Player* player = owner->ToPlayer())
|
||||
{
|
||||
WorldPacket data(MSG_MINIMAP_PING, (8+4+4));
|
||||
data << me->GetGUID();
|
||||
data << me->GetPositionX();
|
||||
data << me->GetPositionY();
|
||||
player->GetSession()->SendPacket(&data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ struct npc_escortAI : public ScriptedAI
|
||||
uint64 GetEventStarterGUID() { return m_uiPlayerGUID; }
|
||||
|
||||
protected:
|
||||
Player* GetPlayerForEscort() { return (Player*)Unit::GetUnit(*me, m_uiPlayerGUID); }
|
||||
Player* GetPlayerForEscort() { return ObjectAccessor::GetPlayer(*me, m_uiPlayerGUID); }
|
||||
|
||||
private:
|
||||
bool AssistPlayerInCombat(Unit* who);
|
||||
|
||||
@@ -372,7 +372,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
||||
if (!IS_PLAYER_GUID(GetOwnerGUID()))
|
||||
return;
|
||||
|
||||
Player* owner = (Player*)GetOwner();
|
||||
Player* owner = GetOwner();
|
||||
if (!owner)
|
||||
return;
|
||||
|
||||
@@ -1142,7 +1142,7 @@ void Pet::_LoadSpellCooldowns()
|
||||
while (result->NextRow());
|
||||
|
||||
if (!m_CreatureSpellCooldowns.empty() && GetOwner())
|
||||
((Player*)GetOwner())->GetSession()->SendPacket(&data);
|
||||
GetOwner()->GetSession()->SendPacket(&data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9264,16 +9264,17 @@ Player* Unit::GetCharmerOrOwnerPlayerOrPlayerItself() const
|
||||
if (IS_PLAYER_GUID(guid))
|
||||
return ObjectAccessor::GetPlayer(*this, guid);
|
||||
|
||||
return GetTypeId() == TYPEID_PLAYER ? (Player*)this : NULL;
|
||||
return const_cast<Unit*>(this)->ToPlayer();
|
||||
}
|
||||
|
||||
Player* Unit::GetAffectingPlayer() const
|
||||
{
|
||||
if (!GetCharmerOrOwnerGUID())
|
||||
return GetTypeId() == TYPEID_PLAYER ? (Player*)this : NULL;
|
||||
return const_cast<Unit*>(this)->ToPlayer();
|
||||
|
||||
if (Unit* owner = GetCharmerOrOwner())
|
||||
return owner->GetCharmerOrOwnerPlayerOrPlayerItself();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -14386,13 +14387,14 @@ uint64 Unit::GetCharmerOrOwnerOrOwnGUID() const
|
||||
|
||||
Player* Unit::GetSpellModOwner() const
|
||||
{
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
return (Player*)this;
|
||||
if (Player* player = const_cast<Unit*>(this)->ToPlayer())
|
||||
return player;
|
||||
|
||||
if (ToCreature()->IsPet() || ToCreature()->IsTotem())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && owner->GetTypeId() == TYPEID_PLAYER)
|
||||
return (Player*)owner;
|
||||
if (Unit* owner = GetOwner())
|
||||
if (Player* player = owner->ToPlayer())
|
||||
return player;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -14904,7 +14906,7 @@ Pet* Unit::CreateTamedPetFrom(Creature* creatureTarget, uint32 spell_id)
|
||||
if (GetTypeId() != TYPEID_PLAYER)
|
||||
return NULL;
|
||||
|
||||
Pet* pet = new Pet((Player*)this, HUNTER_PET);
|
||||
Pet* pet = new Pet(ToPlayer(), HUNTER_PET);
|
||||
|
||||
if (!pet->CreateBaseAtCreature(creatureTarget))
|
||||
{
|
||||
@@ -14928,7 +14930,7 @@ Pet* Unit::CreateTamedPetFrom(uint32 creatureEntry, uint32 spell_id)
|
||||
if (!creatureInfo)
|
||||
return NULL;
|
||||
|
||||
Pet* pet = new Pet((Player*)this, HUNTER_PET);
|
||||
Pet* pet = new Pet(ToPlayer(), HUNTER_PET);
|
||||
|
||||
if (!pet->CreateBaseAtCreatureInfo(creatureInfo, this) || !InitTamedPet(pet, getLevel(), spell_id))
|
||||
{
|
||||
@@ -15404,8 +15406,8 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
|
||||
{
|
||||
if (Battleground* bg = player->GetBattleground())
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
bg->HandleKillPlayer((Player*)victim, player);
|
||||
if (Player* playerVictim = victim->ToPlayer())
|
||||
bg->HandleKillPlayer(playerVictim, player);
|
||||
else
|
||||
bg->HandleKillUnit(victim->ToCreature(), player);
|
||||
}
|
||||
@@ -16368,14 +16370,15 @@ void Unit::UpdateObjectVisibility(bool forced)
|
||||
|
||||
void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
|
||||
{
|
||||
Player* player = NULL;
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
player = (Player*)this;
|
||||
else if (Unit* charmer = GetCharmer())
|
||||
Player* player = ToPlayer();
|
||||
if (!player)
|
||||
{
|
||||
player = charmer->ToPlayer();
|
||||
if (player && player->m_mover != this)
|
||||
player = NULL;
|
||||
if (Unit* charmer = GetCharmer())
|
||||
{
|
||||
player = charmer->ToPlayer();
|
||||
if (player && player->m_mover != this)
|
||||
player = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!player)
|
||||
|
||||
@@ -106,10 +106,10 @@ void VisibleChangesNotifier::Visit(CreatureMapType &m)
|
||||
void VisibleChangesNotifier::Visit(DynamicObjectMapType &m)
|
||||
{
|
||||
for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
if (IS_PLAYER_GUID(iter->GetSource()->GetCasterGUID()))
|
||||
if (Player* caster = (Player*)iter->GetSource()->GetCaster())
|
||||
if (caster->m_seer == iter->GetSource())
|
||||
caster->UpdateVisibilityOf(&i_object);
|
||||
if (Unit* caster = iter->GetSource()->GetCaster())
|
||||
if (Player* player = caster->ToPlayer())
|
||||
if (player->m_seer == iter->GetSource())
|
||||
player->UpdateVisibilityOf(&i_object);
|
||||
}
|
||||
|
||||
inline void CreatureUnitRelocationWorker(Creature* c, Unit* u)
|
||||
@@ -299,12 +299,12 @@ void MessageDistDeliverer::Visit(DynamicObjectMapType &m)
|
||||
if (target->GetExactDist2dSq(i_source) > i_distSq)
|
||||
continue;
|
||||
|
||||
if (IS_PLAYER_GUID(target->GetCasterGUID()))
|
||||
if (Unit* caster = target->GetCaster())
|
||||
{
|
||||
// Send packet back to the caster if the caster has vision of dynamic object
|
||||
Player* caster = (Player*)target->GetCaster();
|
||||
if (caster && caster->m_seer == target)
|
||||
SendPacket(caster);
|
||||
Player* player = caster->ToPlayer();
|
||||
if (player && player->m_seer == target)
|
||||
SendPacket(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,10 +130,14 @@ namespace Trinity
|
||||
Player const* skipped_receiver;
|
||||
MessageDistDeliverer(WorldObject* src, WorldPacket* msg, float dist, bool own_team_only = false, Player const* skipped = NULL)
|
||||
: i_source(src), i_message(msg), i_phaseMask(src->GetPhaseMask()), i_distSq(dist * dist)
|
||||
, team((own_team_only && src->GetTypeId() == TYPEID_PLAYER) ? ((Player*)src)->GetTeam() : 0)
|
||||
, team(0)
|
||||
, skipped_receiver(skipped)
|
||||
{
|
||||
if (own_team_only)
|
||||
if (Player* player = src->ToPlayer())
|
||||
team = player->GetTeam();
|
||||
}
|
||||
|
||||
void Visit(PlayerMapType &m);
|
||||
void Visit(CreatureMapType &m);
|
||||
void Visit(DynamicObjectMapType &m);
|
||||
|
||||
@@ -329,19 +329,19 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint32 spellid
|
||||
if (unit_target)
|
||||
{
|
||||
pet->SetInFront(unit_target);
|
||||
if (unit_target->GetTypeId() == TYPEID_PLAYER)
|
||||
pet->SendUpdateToPlayer((Player*)unit_target);
|
||||
if (Player* player = unit_target->ToPlayer())
|
||||
pet->SendUpdateToPlayer(player);
|
||||
}
|
||||
else if (Unit* unit_target2 = spell->m_targets.GetUnitTarget())
|
||||
{
|
||||
pet->SetInFront(unit_target2);
|
||||
if (unit_target2->GetTypeId() == TYPEID_PLAYER)
|
||||
pet->SendUpdateToPlayer((Player*)unit_target2);
|
||||
if (Player* player = unit_target2->ToPlayer())
|
||||
pet->SendUpdateToPlayer(player);
|
||||
}
|
||||
|
||||
if (Unit* powner = pet->GetCharmerOrOwner())
|
||||
if (powner->GetTypeId() == TYPEID_PLAYER)
|
||||
pet->SendUpdateToPlayer(powner->ToPlayer());
|
||||
if (Player* player = powner->ToPlayer())
|
||||
pet->SendUpdateToPlayer(player);
|
||||
|
||||
result = SPELL_CAST_OK;
|
||||
}
|
||||
@@ -620,9 +620,9 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
|
||||
|
||||
pet->SetName(name);
|
||||
|
||||
Unit* owner = pet->GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
|
||||
Player* owner = pet->GetOwner();
|
||||
if (owner && owner->GetGroup())
|
||||
owner->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
|
||||
|
||||
pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED);
|
||||
|
||||
|
||||
@@ -4999,20 +4999,19 @@ void AuraEffect::HandleForceReaction(AuraApplication const* aurApp, uint8 mode,
|
||||
|
||||
Unit* target = aurApp->GetTarget();
|
||||
|
||||
if (target->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = target->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
Player* player = (Player*)target;
|
||||
uint32 factionId = GetMiscValue();
|
||||
ReputationRank factionRank = ReputationRank(m_amount);
|
||||
|
||||
uint32 faction_id = GetMiscValue();
|
||||
ReputationRank faction_rank = ReputationRank(m_amount);
|
||||
|
||||
player->GetReputationMgr().ApplyForceReaction(faction_id, faction_rank, apply);
|
||||
player->GetReputationMgr().ApplyForceReaction(factionId, factionRank, apply);
|
||||
player->GetReputationMgr().SendForceReactions();
|
||||
|
||||
// stop fighting if at apply forced rank friendly or at remove real rank friendly
|
||||
if ((apply && faction_rank >= REP_FRIENDLY) || (!apply && player->GetReputationRank(faction_id) >= REP_FRIENDLY))
|
||||
player->StopAttackFaction(faction_id);
|
||||
if ((apply && factionRank >= REP_FRIENDLY) || (!apply && player->GetReputationRank(factionId) >= REP_FRIENDLY))
|
||||
player->StopAttackFaction(factionId);
|
||||
}
|
||||
|
||||
void AuraEffect::HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bool apply) const
|
||||
@@ -5078,11 +5077,10 @@ void AuraEffect::HandleAuraConvertRune(AuraApplication const* aurApp, uint8 mode
|
||||
|
||||
Unit* target = aurApp->GetTarget();
|
||||
|
||||
if (target->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = target->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
Player* player = (Player*)target;
|
||||
|
||||
if (player->getClass() != CLASS_DEATH_KNIGHT)
|
||||
return;
|
||||
|
||||
|
||||
@@ -1071,7 +1071,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
for (SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr)
|
||||
{
|
||||
// some auras remove at aura remove
|
||||
if (!itr->second->IsFitToRequirements((Player*)target, zone, area))
|
||||
if (!itr->second->IsFitToRequirements(target->ToPlayer(), zone, area))
|
||||
target->RemoveAurasDueToSpell(itr->second->spellId);
|
||||
// some auras applied at aura apply
|
||||
else if (itr->second->autocast)
|
||||
|
||||
@@ -3542,11 +3542,10 @@ void Spell::_handle_finish_phase()
|
||||
|
||||
void Spell::SendSpellCooldown()
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* _player = m_caster->ToPlayer();
|
||||
if (!_player)
|
||||
return;
|
||||
|
||||
Player* _player = (Player*)m_caster;
|
||||
|
||||
// mana/health/etc potions, disabled by client (until combat out as declarate)
|
||||
if (m_CastItem && m_CastItem->IsPotion())
|
||||
{
|
||||
@@ -4343,7 +4342,11 @@ void Spell::SendResurrectRequest(Player* target)
|
||||
|
||||
void Spell::TakeCastItem()
|
||||
{
|
||||
if (!m_CastItem || m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
if (!m_CastItem)
|
||||
return;
|
||||
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
// not remove cast item at triggered spell (equipping, weapon damage, etc)
|
||||
@@ -4381,7 +4384,7 @@ void Spell::TakeCastItem()
|
||||
(charges > 0) ? --charges : ++charges; // abs(charges) less at 1 after use
|
||||
if (proto->Stackable == 1)
|
||||
m_CastItem->SetSpellCharges(i, charges);
|
||||
m_CastItem->SetState(ITEM_CHANGED, (Player*)m_caster);
|
||||
m_CastItem->SetState(ITEM_CHANGED, player);
|
||||
}
|
||||
|
||||
// all charges used
|
||||
@@ -4501,16 +4504,14 @@ SpellCastResult Spell::CheckRuneCost(uint32 runeCostID)
|
||||
if (m_spellInfo->PowerType != POWER_RUNE || !runeCostID)
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
Player* player = (Player*)m_caster;
|
||||
|
||||
if (player->getClass() != CLASS_DEATH_KNIGHT)
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
SpellRuneCostEntry const* src = sSpellRuneCostStore.LookupEntry(runeCostID);
|
||||
|
||||
if (!src)
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
@@ -5851,11 +5852,10 @@ SpellCastResult Spell::CheckPower()
|
||||
|
||||
SpellCastResult Spell::CheckItems()
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
|
||||
if (!m_CastItem)
|
||||
{
|
||||
if (m_castItemGUID)
|
||||
@@ -5864,14 +5864,14 @@ SpellCastResult Spell::CheckItems()
|
||||
else
|
||||
{
|
||||
uint32 itemid = m_CastItem->GetEntry();
|
||||
if (!p_caster->HasItemCount(itemid))
|
||||
if (!player->HasItemCount(itemid))
|
||||
return SPELL_FAILED_ITEM_NOT_READY;
|
||||
|
||||
ItemTemplate const* proto = m_CastItem->GetTemplate();
|
||||
if (!proto)
|
||||
return SPELL_FAILED_ITEM_NOT_READY;
|
||||
|
||||
for (int i = 0; i < MAX_ITEM_SPELLS; ++i)
|
||||
for (uint8 i = 0; i < MAX_ITEM_SPELLS; ++i)
|
||||
if (proto->Spells[i].SpellCharges)
|
||||
if (m_CastItem->GetSpellCharges(i) == 0)
|
||||
return SPELL_FAILED_NO_CHARGES_REMAIN;
|
||||
@@ -5881,10 +5881,10 @@ SpellCastResult Spell::CheckItems()
|
||||
{
|
||||
// such items should only fail if there is no suitable effect at all - see Rejuvenation Potions for example
|
||||
SpellCastResult failReason = SPELL_CAST_OK;
|
||||
for (int i = 0; i < MAX_SPELL_EFFECTS; i++)
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
// skip check, pet not required like checks, and for TARGET_UNIT_PET m_targets.GetUnitTarget() is not the real target but the caster
|
||||
if (m_spellInfo->Effects[i].TargetA.GetTarget() == TARGET_UNIT_PET)
|
||||
// skip check, pet not required like checks, and for TARGET_UNIT_PET m_targets.GetUnitTarget() is not the real target but the caster
|
||||
if (m_spellInfo->Effects[i].TargetA.GetTarget() == TARGET_UNIT_PET)
|
||||
continue;
|
||||
|
||||
if (m_spellInfo->Effects[i].Effect == SPELL_EFFECT_HEAL)
|
||||
@@ -5931,9 +5931,6 @@ SpellCastResult Spell::CheckItems()
|
||||
// check target item
|
||||
if (m_targets.GetItemTargetGUID())
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
if (!m_targets.GetItemTarget())
|
||||
return SPELL_FAILED_ITEM_GONE;
|
||||
|
||||
@@ -5944,7 +5941,7 @@ SpellCastResult Spell::CheckItems()
|
||||
else
|
||||
{
|
||||
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT))
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER && !m_caster->ToPlayer()->HasItemFitToSpellRequirements(m_spellInfo))
|
||||
if (!player->HasItemFitToSpellRequirements(m_spellInfo))
|
||||
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
}
|
||||
|
||||
@@ -5971,7 +5968,7 @@ SpellCastResult Spell::CheckItems()
|
||||
// do not take reagents for these item casts
|
||||
if (!(m_CastItem && m_CastItem->GetTemplate()->Flags & ITEM_PROTO_FLAG_TRIGGERED_CAST))
|
||||
{
|
||||
bool checkReagents = !(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST) && !p_caster->CanNoReagentCast(m_spellInfo);
|
||||
bool checkReagents = !(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST) && !player->CanNoReagentCast(m_spellInfo);
|
||||
// Not own traded item (in trader trade slot) requires reagents even if triggered spell
|
||||
if (!checkReagents)
|
||||
if (Item* targetItem = m_targets.GetItemTarget())
|
||||
@@ -5995,7 +5992,7 @@ SpellCastResult Spell::CheckItems()
|
||||
ItemTemplate const* proto = m_CastItem->GetTemplate();
|
||||
if (!proto)
|
||||
return SPELL_FAILED_ITEM_NOT_READY;
|
||||
for (int s=0; s < MAX_ITEM_PROTO_SPELLS; ++s)
|
||||
for (uint8 s = 0; s < MAX_ITEM_PROTO_SPELLS; ++s)
|
||||
{
|
||||
// CastItem will be used up and does not count as reagent
|
||||
int32 charges = m_CastItem->GetSpellCharges(s);
|
||||
@@ -6006,35 +6003,36 @@ SpellCastResult Spell::CheckItems()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!p_caster->HasItemCount(itemid, itemcount))
|
||||
if (!player->HasItemCount(itemid, itemcount))
|
||||
return SPELL_FAILED_REAGENTS;
|
||||
}
|
||||
}
|
||||
|
||||
// check totem-item requirements (items presence in inventory)
|
||||
uint32 totems = 2;
|
||||
for (int i = 0; i < 2; ++i)
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (m_spellInfo->Totem[i] != 0)
|
||||
{
|
||||
if (p_caster->HasItemCount(m_spellInfo->Totem[i]))
|
||||
if (player->HasItemCount(m_spellInfo->Totem[i]))
|
||||
{
|
||||
totems -= 1;
|
||||
continue;
|
||||
}
|
||||
}else
|
||||
totems -= 1;
|
||||
}
|
||||
else
|
||||
totems -= 1;
|
||||
}
|
||||
if (totems != 0)
|
||||
return SPELL_FAILED_TOTEMS; //0x7C
|
||||
|
||||
// Check items for TotemCategory (items presence in inventory)
|
||||
uint32 TotemCategory = 2;
|
||||
for (int i= 0; i < 2; ++i)
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (m_spellInfo->TotemCategory[i] != 0)
|
||||
{
|
||||
if (p_caster->HasItemTotemCategory(m_spellInfo->TotemCategory[i]))
|
||||
if (player->HasItemTotemCategory(m_spellInfo->TotemCategory[i]))
|
||||
{
|
||||
TotemCategory -= 1;
|
||||
continue;
|
||||
@@ -6048,7 +6046,7 @@ SpellCastResult Spell::CheckItems()
|
||||
}
|
||||
|
||||
// special checks for spell effects
|
||||
for (int i = 0; i < MAX_SPELL_EFFECTS; i++)
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
switch (m_spellInfo->Effects[i].Effect)
|
||||
{
|
||||
@@ -6058,24 +6056,24 @@ SpellCastResult Spell::CheckItems()
|
||||
if (!IsTriggered() && m_spellInfo->Effects[i].ItemType)
|
||||
{
|
||||
ItemPosCountVec dest;
|
||||
InventoryResult msg = p_caster->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, m_spellInfo->Effects[i].ItemType, 1);
|
||||
InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, m_spellInfo->Effects[i].ItemType, 1);
|
||||
if (msg != EQUIP_ERR_OK)
|
||||
{
|
||||
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(m_spellInfo->Effects[i].ItemType);
|
||||
/// @todo Needs review
|
||||
if (pProto && !(pProto->ItemLimitCategory))
|
||||
{
|
||||
p_caster->SendEquipError(msg, NULL, NULL, m_spellInfo->Effects[i].ItemType);
|
||||
player->SendEquipError(msg, NULL, NULL, m_spellInfo->Effects[i].ItemType);
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(m_spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (m_spellInfo->SpellFamilyFlags[0] & 0x40000000)))
|
||||
return SPELL_FAILED_TOO_MANY_OF_ITEM;
|
||||
else if (!(p_caster->HasItemCount(m_spellInfo->Effects[i].ItemType)))
|
||||
else if (!(player->HasItemCount(m_spellInfo->Effects[i].ItemType)))
|
||||
return SPELL_FAILED_TOO_MANY_OF_ITEM;
|
||||
else
|
||||
p_caster->CastSpell(m_caster, m_spellInfo->Effects[EFFECT_1].CalcValue(), false); // move this to anywhere
|
||||
player->CastSpell(m_caster, m_spellInfo->Effects[EFFECT_1].CalcValue(), false); // move this to anywhere
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
}
|
||||
}
|
||||
@@ -6093,10 +6091,10 @@ SpellCastResult Spell::CheckItems()
|
||||
if (m_CastItem && m_CastItem->GetTemplate()->Flags & ITEM_PROTO_FLAG_TRIGGERED_CAST)
|
||||
return SPELL_FAILED_TOTEM_CATEGORY;
|
||||
ItemPosCountVec dest;
|
||||
InventoryResult msg = p_caster->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, m_spellInfo->Effects[i].ItemType, 1);
|
||||
InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, m_spellInfo->Effects[i].ItemType, 1);
|
||||
if (msg != EQUIP_ERR_OK)
|
||||
{
|
||||
p_caster->SendEquipError(msg, NULL, NULL, m_spellInfo->Effects[i].ItemType);
|
||||
player->SendEquipError(msg, NULL, NULL, m_spellInfo->Effects[i].ItemType);
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
}
|
||||
}
|
||||
@@ -6177,7 +6175,7 @@ SpellCastResult Spell::CheckItems()
|
||||
uint32 item_disenchantskilllevel = itemProto->RequiredDisenchantSkill;
|
||||
if (item_disenchantskilllevel == uint32(-1))
|
||||
return SPELL_FAILED_CANT_BE_DISENCHANTED;
|
||||
if (item_disenchantskilllevel > p_caster->GetSkillValue(SKILL_ENCHANTING))
|
||||
if (item_disenchantskilllevel > player->GetSkillValue(SKILL_ENCHANTING))
|
||||
return SPELL_FAILED_LOW_CASTLEVEL;
|
||||
if (item_quality > 4 || item_quality < 2)
|
||||
return SPELL_FAILED_CANT_BE_DISENCHANTED;
|
||||
@@ -6199,7 +6197,7 @@ SpellCastResult Spell::CheckItems()
|
||||
return SPELL_FAILED_CANT_BE_PROSPECTED;
|
||||
//Check for enough skill in jewelcrafting
|
||||
uint32 item_prospectingskilllevel = m_targets.GetItemTarget()->GetTemplate()->RequiredSkillRank;
|
||||
if (item_prospectingskilllevel >p_caster->GetSkillValue(SKILL_JEWELCRAFTING))
|
||||
if (item_prospectingskilllevel >player->GetSkillValue(SKILL_JEWELCRAFTING))
|
||||
return SPELL_FAILED_LOW_CASTLEVEL;
|
||||
//make sure the player has the required ores in inventory
|
||||
if (m_targets.GetItemTarget()->GetCount() < 5)
|
||||
@@ -6222,7 +6220,7 @@ SpellCastResult Spell::CheckItems()
|
||||
return SPELL_FAILED_CANT_BE_MILLED;
|
||||
//Check for enough skill in inscription
|
||||
uint32 item_millingskilllevel = m_targets.GetItemTarget()->GetTemplate()->RequiredSkillRank;
|
||||
if (item_millingskilllevel >p_caster->GetSkillValue(SKILL_INSCRIPTION))
|
||||
if (item_millingskilllevel > player->GetSkillValue(SKILL_INSCRIPTION))
|
||||
return SPELL_FAILED_LOW_CASTLEVEL;
|
||||
//make sure the player has the required herbs in inventory
|
||||
if (m_targets.GetItemTarget()->GetCount() < 5)
|
||||
@@ -6236,13 +6234,10 @@ SpellCastResult Spell::CheckItems()
|
||||
case SPELL_EFFECT_WEAPON_DAMAGE:
|
||||
case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL:
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return SPELL_FAILED_TARGET_NOT_PLAYER;
|
||||
|
||||
if (m_attackType != RANGED_ATTACK)
|
||||
break;
|
||||
|
||||
Item* pItem = m_caster->ToPlayer()->GetWeaponForAttack(m_attackType);
|
||||
Item* pItem = player->GetWeaponForAttack(m_attackType);
|
||||
if (!pItem || pItem->IsBroken())
|
||||
return SPELL_FAILED_EQUIPPED_ITEM;
|
||||
|
||||
@@ -6251,15 +6246,15 @@ SpellCastResult Spell::CheckItems()
|
||||
case ITEM_SUBCLASS_WEAPON_THROWN:
|
||||
{
|
||||
uint32 ammo = pItem->GetEntry();
|
||||
if (!m_caster->ToPlayer()->HasItemCount(ammo))
|
||||
if (!player->HasItemCount(ammo))
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
};
|
||||
break;
|
||||
break;
|
||||
}
|
||||
case ITEM_SUBCLASS_WEAPON_GUN:
|
||||
case ITEM_SUBCLASS_WEAPON_BOW:
|
||||
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
|
||||
{
|
||||
uint32 ammo = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID);
|
||||
uint32 ammo = player->GetUInt32Value(PLAYER_AMMO_ID);
|
||||
if (!ammo)
|
||||
{
|
||||
// Requires No Ammo
|
||||
@@ -6292,12 +6287,13 @@ SpellCastResult Spell::CheckItems()
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
}
|
||||
|
||||
if (!m_caster->ToPlayer()->HasItemCount(ammo))
|
||||
if (!player->HasItemCount(ammo))
|
||||
{
|
||||
m_caster->ToPlayer()->SetUInt32Value(PLAYER_AMMO_ID, 0);
|
||||
player->SetUInt32Value(PLAYER_AMMO_ID, 0);
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
}
|
||||
}; break;
|
||||
break;
|
||||
}
|
||||
case ITEM_SUBCLASS_WEAPON_WAND:
|
||||
break;
|
||||
default:
|
||||
@@ -6313,7 +6309,7 @@ SpellCastResult Spell::CheckItems()
|
||||
if (!pProto)
|
||||
return SPELL_FAILED_ITEM_AT_MAX_CHARGES;
|
||||
|
||||
if (Item* pitem = p_caster->GetItemByEntry(item_id))
|
||||
if (Item* pitem = player->GetItemByEntry(item_id))
|
||||
{
|
||||
for (int x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
if (pProto->Spells[x].SpellCharges != 0 && pitem->GetSpellCharges(x) == pProto->Spells[x].SpellCharges)
|
||||
|
||||
@@ -562,9 +562,9 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
// Eviscerate
|
||||
else if (m_spellInfo->SpellFamilyFlags[0] & 0x00020000)
|
||||
{
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
if (Player* player = m_caster->ToPlayer())
|
||||
{
|
||||
if (uint32 combo = ((Player*)m_caster)->GetComboPoints())
|
||||
if (uint32 combo = player->GetComboPoints())
|
||||
{
|
||||
float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
|
||||
damage += irand(int32(ap * combo * 0.03f), int32(ap * combo * 0.07f));
|
||||
@@ -2722,30 +2722,30 @@ void Spell::EffectEnchantItemPerm(SpellEffIndex effIndex)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
if (!itemTarget)
|
||||
return;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
// Handle vellums
|
||||
if (itemTarget->IsWeaponVellum() || itemTarget->IsArmorVellum())
|
||||
{
|
||||
// destroy one vellum from stack
|
||||
uint32 count = 1;
|
||||
p_caster->DestroyItemCount(itemTarget, count, true);
|
||||
unitTarget=p_caster;
|
||||
player->DestroyItemCount(itemTarget, count, true);
|
||||
unitTarget = player;
|
||||
// and add a scroll
|
||||
DoCreateItem(effIndex, m_spellInfo->Effects[effIndex].ItemType);
|
||||
itemTarget=NULL;
|
||||
itemTarget = NULL;
|
||||
m_targets.SetItemTarget(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// do not increase skill if vellum used
|
||||
if (!(m_CastItem && m_CastItem->GetTemplate()->Flags & ITEM_PROTO_FLAG_TRIGGERED_CAST))
|
||||
p_caster->UpdateCraftSkill(m_spellInfo->Id);
|
||||
player->UpdateCraftSkill(m_spellInfo->Id);
|
||||
|
||||
uint32 enchant_id = m_spellInfo->Effects[effIndex].MiscValue;
|
||||
if (!enchant_id)
|
||||
@@ -2760,10 +2760,10 @@ void Spell::EffectEnchantItemPerm(SpellEffIndex effIndex)
|
||||
if (!item_owner)
|
||||
return;
|
||||
|
||||
if (item_owner != p_caster && p_caster->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
if (item_owner != player && player->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
{
|
||||
sLog->outCommand(p_caster->GetSession()->GetAccountId(), "GM %s (Account: %u) enchanting(perm): %s (Entry: %d) for player: %s (Account: %u)",
|
||||
p_caster->GetName().c_str(), p_caster->GetSession()->GetAccountId(),
|
||||
sLog->outCommand(player->GetSession()->GetAccountId(), "GM %s (Account: %u) enchanting(perm): %s (Entry: %d) for player: %s (Account: %u)",
|
||||
player->GetName().c_str(), player->GetSession()->GetAccountId(),
|
||||
itemTarget->GetTemplate()->Name1.c_str(), itemTarget->GetEntry(),
|
||||
item_owner->GetName().c_str(), item_owner->GetSession()->GetAccountId());
|
||||
}
|
||||
@@ -2786,19 +2786,19 @@ void Spell::EffectEnchantItemPrismatic(SpellEffIndex effIndex)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
if (!itemTarget)
|
||||
return;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
|
||||
uint32 enchant_id = m_spellInfo->Effects[effIndex].MiscValue;
|
||||
if (!enchant_id)
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(enchant_id);
|
||||
if (!pEnchant)
|
||||
uint32 enchantId = m_spellInfo->Effects[effIndex].MiscValue;
|
||||
if (!enchantId)
|
||||
return;
|
||||
|
||||
SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(enchantId);
|
||||
if (!enchant)
|
||||
return;
|
||||
|
||||
// support only enchantings with add socket in this slot
|
||||
@@ -2806,7 +2806,7 @@ void Spell::EffectEnchantItemPrismatic(SpellEffIndex effIndex)
|
||||
bool add_socket = false;
|
||||
for (uint8 i = 0; i < MAX_ITEM_ENCHANTMENT_EFFECTS; ++i)
|
||||
{
|
||||
if (pEnchant->type[i] == ITEM_ENCHANTMENT_TYPE_PRISMATIC_SOCKET)
|
||||
if (enchant->type[i] == ITEM_ENCHANTMENT_TYPE_PRISMATIC_SOCKET)
|
||||
{
|
||||
add_socket = true;
|
||||
break;
|
||||
@@ -2825,10 +2825,10 @@ void Spell::EffectEnchantItemPrismatic(SpellEffIndex effIndex)
|
||||
if (!item_owner)
|
||||
return;
|
||||
|
||||
if (item_owner != p_caster && p_caster->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
if (item_owner != player && player->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
{
|
||||
sLog->outCommand(p_caster->GetSession()->GetAccountId(), "GM %s (Account: %u) enchanting(perm): %s (Entry: %d) for player: %s (Account: %u)",
|
||||
p_caster->GetName().c_str(), p_caster->GetSession()->GetAccountId(),
|
||||
sLog->outCommand(player->GetSession()->GetAccountId(), "GM %s (Account: %u) enchanting(perm): %s (Entry: %d) for player: %s (Account: %u)",
|
||||
player->GetName().c_str(), player->GetSession()->GetAccountId(),
|
||||
itemTarget->GetTemplate()->Name1.c_str(), itemTarget->GetEntry(),
|
||||
item_owner->GetName().c_str(), item_owner->GetSession()->GetAccountId());
|
||||
}
|
||||
@@ -2836,7 +2836,7 @@ void Spell::EffectEnchantItemPrismatic(SpellEffIndex effIndex)
|
||||
// remove old enchanting before applying new if equipped
|
||||
item_owner->ApplyEnchantment(itemTarget, PRISMATIC_ENCHANTMENT_SLOT, false);
|
||||
|
||||
itemTarget->SetEnchantment(PRISMATIC_ENCHANTMENT_SLOT, enchant_id, 0, 0, m_caster->GetGUID());
|
||||
itemTarget->SetEnchantment(PRISMATIC_ENCHANTMENT_SLOT, enchantId, 0, 0, m_caster->GetGUID());
|
||||
|
||||
// add new enchanting if equipped
|
||||
item_owner->ApplyEnchantment(itemTarget, PRISMATIC_ENCHANTMENT_SLOT, true);
|
||||
@@ -2850,11 +2850,10 @@ void Spell::EffectEnchantItemTmp(SpellEffIndex effIndex)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
|
||||
// Rockbiter Weapon apply to both weapon
|
||||
if (!itemTarget)
|
||||
return;
|
||||
@@ -2894,7 +2893,7 @@ void Spell::EffectEnchantItemTmp(SpellEffIndex effIndex)
|
||||
|
||||
for (int j = BASE_ATTACK; j <= OFF_ATTACK; ++j)
|
||||
{
|
||||
if (Item* item = p_caster->GetWeaponForAttack(WeaponAttackType(j)))
|
||||
if (Item* item = player->GetWeaponForAttack(WeaponAttackType(j)))
|
||||
{
|
||||
if (item->IsFitToSpellRequirements(m_spellInfo))
|
||||
{
|
||||
@@ -2959,10 +2958,10 @@ void Spell::EffectEnchantItemTmp(SpellEffIndex effIndex)
|
||||
if (!item_owner)
|
||||
return;
|
||||
|
||||
if (item_owner != p_caster && p_caster->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
if (item_owner != player && player->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
{
|
||||
sLog->outCommand(p_caster->GetSession()->GetAccountId(), "GM %s (Account: %u) enchanting(temp): %s (Entry: %d) for player: %s (Account: %u)",
|
||||
p_caster->GetName().c_str(), p_caster->GetSession()->GetAccountId(),
|
||||
sLog->outCommand(player->GetSession()->GetAccountId(), "GM %s (Account: %u) enchanting(temp): %s (Entry: %d) for player: %s (Account: %u)",
|
||||
player->GetName().c_str(), player->GetSession()->GetAccountId(),
|
||||
itemTarget->GetTemplate()->Name1.c_str(), itemTarget->GetEntry(),
|
||||
item_owner->GetName().c_str(), item_owner->GetSession()->GetAccountId());
|
||||
}
|
||||
@@ -4387,21 +4386,20 @@ void Spell::EffectStuck(SpellEffIndex /*effIndex*/)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT)
|
||||
return;
|
||||
|
||||
if (!m_caster || m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_CAST_UNSTUCK))
|
||||
return;
|
||||
|
||||
Player* target = (Player*)m_caster;
|
||||
|
||||
TC_LOG_DEBUG(LOG_FILTER_SPELLS_AURAS, "Spell Effect: Stuck");
|
||||
TC_LOG_INFO(LOG_FILTER_SPELLS_AURAS, "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", target->GetName().c_str(), target->GetGUIDLow(), m_caster->GetMapId(), m_caster->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
|
||||
|
||||
if (target->IsInFlight())
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
target->TeleportTo(target->GetStartPosition(), TELE_TO_SPELL);
|
||||
TC_LOG_DEBUG(LOG_FILTER_SPELLS_AURAS, "Spell Effect: Stuck");
|
||||
TC_LOG_INFO(LOG_FILTER_SPELLS_AURAS, "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUIDLow(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
|
||||
|
||||
if (player->IsInFlight())
|
||||
return;
|
||||
|
||||
player->TeleportTo(player->GetStartPosition(), TELE_TO_SPELL);
|
||||
// homebind location is loaded always
|
||||
// target->TeleportTo(target->m_homebindMapId, target->m_homebindX, target->m_homebindY, target->m_homebindZ, target->GetOrientation(), (m_caster == m_caster ? TELE_TO_SPELL : 0));
|
||||
|
||||
@@ -4409,7 +4407,7 @@ void Spell::EffectStuck(SpellEffIndex /*effIndex*/)
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(8690);
|
||||
if (!spellInfo)
|
||||
return;
|
||||
Spell spell(target, spellInfo, TRIGGERED_FULL_MASK);
|
||||
Spell spell(player, spellInfo, TRIGGERED_FULL_MASK);
|
||||
spell.SendSpellCooldown();
|
||||
}
|
||||
|
||||
@@ -4459,10 +4457,12 @@ void Spell::EffectApplyGlyph(SpellEffIndex effIndex)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER || m_glyphIndex >= MAX_GLYPH_SLOT_INDEX)
|
||||
if (m_glyphIndex >= MAX_GLYPH_SLOT_INDEX)
|
||||
return;
|
||||
|
||||
Player* player = (Player*)m_caster;
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
// glyph sockets level requirement
|
||||
uint8 minLevel = 0;
|
||||
@@ -5388,10 +5388,10 @@ void Spell::EffectProspecting(SpellEffIndex /*effIndex*/)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
if (!itemTarget || !(itemTarget->GetTemplate()->Flags & ITEM_PROTO_FLAG_PROSPECTABLE))
|
||||
return;
|
||||
|
||||
@@ -5400,12 +5400,12 @@ void Spell::EffectProspecting(SpellEffIndex /*effIndex*/)
|
||||
|
||||
if (sWorld->getBoolConfig(CONFIG_SKILL_PROSPECTING))
|
||||
{
|
||||
uint32 SkillValue = p_caster->GetPureSkillValue(SKILL_JEWELCRAFTING);
|
||||
uint32 SkillValue = player->GetPureSkillValue(SKILL_JEWELCRAFTING);
|
||||
uint32 reqSkillValue = itemTarget->GetTemplate()->RequiredSkillRank;
|
||||
p_caster->UpdateGatherSkill(SKILL_JEWELCRAFTING, SkillValue, reqSkillValue);
|
||||
player->UpdateGatherSkill(SKILL_JEWELCRAFTING, SkillValue, reqSkillValue);
|
||||
}
|
||||
|
||||
m_caster->ToPlayer()->SendLoot(itemTarget->GetGUID(), LOOT_PROSPECTING);
|
||||
player->SendLoot(itemTarget->GetGUID(), LOOT_PROSPECTING);
|
||||
}
|
||||
|
||||
void Spell::EffectMilling(SpellEffIndex /*effIndex*/)
|
||||
@@ -5413,10 +5413,10 @@ void Spell::EffectMilling(SpellEffIndex /*effIndex*/)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
if (!itemTarget || !(itemTarget->GetTemplate()->Flags & ITEM_PROTO_FLAG_MILLABLE))
|
||||
return;
|
||||
|
||||
@@ -5425,12 +5425,12 @@ void Spell::EffectMilling(SpellEffIndex /*effIndex*/)
|
||||
|
||||
if (sWorld->getBoolConfig(CONFIG_SKILL_MILLING))
|
||||
{
|
||||
uint32 SkillValue = p_caster->GetPureSkillValue(SKILL_INSCRIPTION);
|
||||
uint32 SkillValue = player->GetPureSkillValue(SKILL_INSCRIPTION);
|
||||
uint32 reqSkillValue = itemTarget->GetTemplate()->RequiredSkillRank;
|
||||
p_caster->UpdateGatherSkill(SKILL_INSCRIPTION, SkillValue, reqSkillValue);
|
||||
player->UpdateGatherSkill(SKILL_INSCRIPTION, SkillValue, reqSkillValue);
|
||||
}
|
||||
|
||||
m_caster->ToPlayer()->SendLoot(itemTarget->GetGUID(), LOOT_MILLING);
|
||||
player->SendLoot(itemTarget->GetGUID(), LOOT_MILLING);
|
||||
}
|
||||
|
||||
void Spell::EffectSkill(SpellEffIndex /*effIndex*/)
|
||||
@@ -5470,10 +5470,13 @@ void Spell::EffectSkinPlayerCorpse(SpellEffIndex /*effIndex*/)
|
||||
return;
|
||||
|
||||
TC_LOG_DEBUG(LOG_FILTER_SPELLS_AURAS, "Effect: SkinPlayerCorpse");
|
||||
if ((m_caster->GetTypeId() != TYPEID_PLAYER) || (unitTarget->GetTypeId() != TYPEID_PLAYER) || (unitTarget->IsAlive()))
|
||||
|
||||
Player* player = m_caster->ToPlayer();
|
||||
Player* target = unitTarget->ToPlayer();
|
||||
if (!player || !target || target->IsAlive())
|
||||
return;
|
||||
|
||||
unitTarget->ToPlayer()->RemovedInsignia((Player*)m_caster);
|
||||
target->RemovedInsignia(player);
|
||||
}
|
||||
|
||||
void Spell::EffectStealBeneficialBuff(SpellEffIndex effIndex)
|
||||
|
||||
@@ -258,7 +258,7 @@ public:
|
||||
if (!unit || (unit->GetTypeId() != TYPEID_PLAYER))
|
||||
player = handler->GetSession()->GetPlayer();
|
||||
else
|
||||
player = (Player*)unit;
|
||||
player = unit->ToPlayer();
|
||||
|
||||
if (!unit)
|
||||
unit = player;
|
||||
|
||||
@@ -90,8 +90,9 @@ public:
|
||||
}
|
||||
|
||||
// check online security
|
||||
if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity((Player*)target, 0))
|
||||
return false;
|
||||
if (Player* player = target->ToPlayer())
|
||||
if (handler->HasLowerSecurity(player, 0))
|
||||
return false;
|
||||
|
||||
handler->GetSession()->GetPlayer()->RewardHonor(target, 1);
|
||||
return true;
|
||||
|
||||
@@ -655,11 +655,9 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (handler->HasLowerSecurity((Player*)target, 0, false))
|
||||
if (Player* player = target->ToPlayer())
|
||||
if (handler->HasLowerSecurity(player, 0, false))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (target->IsAlive())
|
||||
{
|
||||
@@ -2227,11 +2225,9 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (handler->HasLowerSecurity((Player*)target, 0, false))
|
||||
if (Player* player = target->ToPlayer())
|
||||
if (handler->HasLowerSecurity(player, 0, false))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!target->IsAlive())
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user