diff options
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 37 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 |
4 files changed, 26 insertions, 19 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8e810efd975..1fed200d1c1 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1258,13 +1258,12 @@ void Player::Update(uint32 p_time) // If this is set during update SetSpellModTakingSpell call is missing somewhere in the code // Having this would prevent more aura charges to be dropped, so let's crash //assert (!m_spellModTakingSpell); - if (/*m_pad ||*/ m_spellModTakingSpell) + if ( m_spellModTakingSpell) { //sLog.outCrash("Player has m_pad %u during update!", m_pad); //if (m_spellModTakingSpell) - sLog.outCrash("Player has m_spellModTakingSpell %u during update!", m_spellModTakingSpell->m_spellInfo->Id); - return; - //m_spellModTakingSpell = NULL; + sLog.outCrash("Player has m_spellModTakingSpell %u during update!", m_spellModTakingSpell->m_spellInfo->Id); + m_spellModTakingSpell = NULL; } //used to implement delayed far teleports @@ -5574,7 +5573,7 @@ void Player::SetRegularAttackTime() { for (uint8 i = 0; i < MAX_ATTACK; ++i) { - Item *tmpitem = GetWeaponForAttack(WeaponAttackType(i)); + Item *tmpitem = GetWeaponForAttack(WeaponAttackType(i), true); if (tmpitem && !tmpitem->IsBroken()) { ItemPrototype const *proto = tmpitem->GetProto(); @@ -7606,7 +7605,7 @@ void Player::_ApplyWeaponDependentAuraCritMod(Item *item, WeaponAttackType attac void Player::_ApplyWeaponDependentAuraDamageMod(Item *item, WeaponAttackType attackType, AuraEffect const* aura, bool apply) { //don't apply mod if item is broken - if (item->IsBroken()) + if (item->IsBroken() || !CanUseAttackType(attackType)) return; // ignore spell mods for not wands @@ -7715,7 +7714,7 @@ void Player::UpdateEquipSpellsAtFormChange() { for (uint8 i = 0; i < INVENTORY_SLOT_BAG_END; ++i) { - if (m_items[i] && !m_items[i]->IsBroken()) + if (m_items[i] && !m_items[i]->IsBroken() && CanUseAttackType(GetAttackBySlot(i))) { ApplyItemEquipSpell(m_items[i],false,true); // remove spells that not fit to form ApplyItemEquipSpell(m_items[i],true,true); // add spells that fit form but not active @@ -7749,7 +7748,7 @@ void Player::CastItemCombatSpell(Unit *target, WeaponAttackType attType, uint32 { // If usable, try to cast item spell if (Item * item = GetItemByPos(INVENTORY_SLOT_BAG_0,i)) - if (!item->IsBroken()) + if (!item->IsBroken() && CanUseAttackType(attType)) if (ItemPrototype const *proto = item->GetProto()) { // Additional check for weapons @@ -7999,7 +7998,7 @@ void Player::_RemoveAllItemMods() if (proto->ItemSet) RemoveItemsSetItem(this,proto); - if (m_items[i]->IsBroken()) + if (m_items[i]->IsBroken() || !CanUseAttackType(GetAttackBySlot(i))) continue; ApplyItemEquipSpell(m_items[i], false); @@ -8011,7 +8010,7 @@ void Player::_RemoveAllItemMods() { if (m_items[i]) { - if (m_items[i]->IsBroken()) + if (m_items[i]->IsBroken() || !CanUseAttackType(GetAttackBySlot(i))) continue; ItemPrototype const *proto = m_items[i]->GetProto(); if (!proto) @@ -8039,7 +8038,7 @@ void Player::_ApplyAllItemMods() { if (m_items[i]) { - if (m_items[i]->IsBroken()) + if (m_items[i]->IsBroken() || !CanUseAttackType(GetAttackBySlot(i))) continue; ItemPrototype const *proto = m_items[i]->GetProto(); @@ -8069,7 +8068,7 @@ void Player::_ApplyAllItemMods() if (proto->ItemSet) AddItemsSetItem(this,m_items[i]); - if (m_items[i]->IsBroken()) + if (m_items[i]->IsBroken() || !CanUseAttackType(GetAttackBySlot(i))) continue; ApplyItemEquipSpell(m_items[i],true); @@ -8086,7 +8085,7 @@ void Player::_ApplyAllLevelScaleItemMods(bool apply) { if (m_items[i]) { - if (m_items[i]->IsBroken()) + if (m_items[i]->IsBroken() || !CanUseAttackType(GetAttackBySlot(i))) continue; ItemPrototype const *proto = m_items[i]->GetProto(); @@ -9542,7 +9541,11 @@ Item* Player::GetWeaponForAttack(WeaponAttackType attackType, bool useable /*= f default: return NULL; } - Item* item = GetUseableItemByPos(INVENTORY_SLOT_BAG_0, slot); + Item* item = NULL; + if (useable) + GetUseableItemByPos(INVENTORY_SLOT_BAG_0, slot); + else + GetItemByPos(INVENTORY_SLOT_BAG_0, slot); if (!item || item->GetProto()->Class != ITEM_CLASS_WEAPON) return NULL; @@ -9557,7 +9560,11 @@ Item* Player::GetWeaponForAttack(WeaponAttackType attackType, bool useable /*= f Item* Player::GetShield(bool useable) const { - Item* item = GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); + Item* item = NULL; + if (useable) + GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); + else + GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); if (!item || item->GetProto()->Class != ITEM_CLASS_ARMOR) return NULL; diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 7bc3877afc0..7f25f2b3655 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -666,7 +666,7 @@ void Player::UpdateExpertise(WeaponAttackType attack) int32 expertise = int32(GetRatingBonusValue(CR_EXPERTISE)); - Item *weapon = GetWeaponForAttack(attack); + Item *weapon = GetWeaponForAttack(attack, true); AuraEffectList const& expAuras = GetAuraEffectsByType(SPELL_AURA_MOD_EXPERTISE); for (AuraEffectList::const_iterator itr = expAuras.begin(); itr != expAuras.end(); ++itr) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e9e1bdc0258..7be93c48764 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1585,7 +1585,7 @@ uint32 Unit::CalcArmorReducedDamage(Unit* pVictim, const uint32 damage, SpellEnt // item dependent spell - check curent weapons for (int i = 0; i < MAX_ATTACK; ++i) { - Item *weapon = ToPlayer()->GetWeaponForAttack(WeaponAttackType(i)); + Item *weapon = ToPlayer()->GetWeaponForAttack(WeaponAttackType(i), true); if (weapon && weapon->IsFitToSpellRequirements((*itr)->GetSpellProto())) { @@ -14488,7 +14488,7 @@ float Unit::GetAPMultiplier(WeaponAttackType attType, bool normalized) if (!normalized || GetTypeId() != TYPEID_PLAYER) return float(GetAttackTime(attType))/1000.0f; - Item *Weapon = this->ToPlayer()->GetWeaponForAttack(attType); + Item *Weapon = this->ToPlayer()->GetWeaponForAttack(attType, true); if (!Weapon) return 2.4; // fist attack diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 0f71f29906e..181822c39e2 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4116,7 +4116,7 @@ void Spell::EffectAddHonor(uint32 /*i*/) if (m_CastItem) { unitTarget->ToPlayer()->RewardHonor(NULL, 1, damage/10); - sLog.outError("SpellEffect::AddHonor (spell_id %u) rewards %d honor points (item %u) for player: %u", m_spellInfo->Id, damage/10, m_CastItem->GetEntry(),unitTarget->ToPlayer()->GetGUIDLow()); + sLog.outDebug("SpellEffect::AddHonor (spell_id %u) rewards %d honor points (item %u) for player: %u", m_spellInfo->Id, damage/10, m_CastItem->GetEntry(),unitTarget->ToPlayer()->GetGUIDLow()); return; } |
