Index: game/Player.cpp =================================================================== --- game/Player.cpp (revision 5293) +++ game/Player.cpp (working copy) @@ -6030,7 +6030,7 @@ _ApplyAmmoBonuses(); if(apply) - CastItemEquipSpell(item); + CastItemEquipSpell(item, false); else for (int i = 0; i < 5; i++) if(proto->Spells[i].SpellId) @@ -6385,7 +6385,7 @@ } } -void Player::CastItemEquipSpell(Item *item) +void Player::CastItemEquipSpell(Item *item, bool Shapeshift) { if(!item) return; @@ -6405,6 +6405,24 @@ if(spellData.SpellTrigger != ITEM_SPELLTRIGGER_ON_EQUIP) continue; + // check if it is valid spell + SpellEntry const* spellproto = sSpellStore.LookupEntry(spellData.SpellId); + if(!spellproto) + continue; + + // shapeshift applies only spells to current form + if ( Shapeshift ) + { + if (!spellproto->Stances || !(spellproto->Stances & (1<Stances) + { + if ( !(spellproto->Stances & (1<ItemSet) AddItemsSetItem(this,m_items[i]); - CastItemEquipSpell(m_items[i]); + CastItemEquipSpell(m_items[i], false); ApplyEnchantment(m_items[i], true); } @@ -15203,6 +15221,10 @@ break; } } + // apply auras in this form + for (int i = 0; i < INVENTORY_SLOT_BAG_END; i++) + if(m_items[i]) + CastItemEquipSpell(m_items[i], true); UpdateAttackPowerAndDamage(); UpdateAttackPowerAndDamage(true); Index: game/Player.h =================================================================== --- game/Player.h (revision 5293) +++ game/Player.h (working copy) @@ -1633,7 +1633,7 @@ void CorrectMetaGemEnchants(uint8 slot, bool apply); void InitDataForForm(); - void CastItemEquipSpell(Item *item); + void CastItemEquipSpell(Item *item, bool Shapeshift); void CastItemCombatSpell(Item *item,Unit* Target, WeaponAttackType attType); void SendInitWorldStates();