Index: game/Spell.cpp =================================================================== --- game/Spell.cpp (revision 5348) +++ game/Spell.cpp (working copy) @@ -3858,7 +3858,7 @@ case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL: { if(m_caster->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_TARGET_NOT_PLAYER; - if(m_spellInfo->rangeIndex == 1 || m_spellInfo->rangeIndex == 2 || m_spellInfo->rangeIndex == 7) + if(m_spellInfo->rangeIndex == 1 || m_spellInfo->rangeIndex == 2 || m_spellInfo->rangeIndex == 6 || m_spellInfo->rangeIndex == 7) break; Item *pItem = ((Player*)m_caster)->GetItemByPos( INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED ); if(!pItem || pItem->IsBroken() || pItem->GetProto()->Class != ITEM_CLASS_WEAPON ) Index: game/SpellEffects.cpp =================================================================== --- game/SpellEffects.cpp (revision 5348) +++ game/SpellEffects.cpp (working copy) @@ -3254,7 +3254,7 @@ // FIXME: we also need select OFF_ATTACK if trigering some spell at offhand attack else if(m_spellInfo->SpellVisual==3136 || m_spellInfo->SpellIconID==2293) attType = BASE_ATTACK; - else if(m_spellInfo->rangeIndex != 1 && m_spellInfo->rangeIndex != 2 && m_spellInfo->rangeIndex != 7) + else if(m_spellInfo->rangeIndex != 1 && m_spellInfo->rangeIndex != 2 && m_spellInfo->rangeIndex != 6 && m_spellInfo->rangeIndex != 7) { attType = RANGED_ATTACK; Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 5348) +++ game/Unit.cpp (working copy) @@ -4314,16 +4314,30 @@ return; } } - if( ((Player*)this)->HasSpellCooldown(32910)) + if( ((Player*)this)->HasSpellCooldown(windfurySpellId)) return; + ((Player*)this)->AddSpellCooldown(windfurySpellId,0,time(NULL) + 3); + SpellEntry const* windfurySpellEntry = sSpellStore.LookupEntry(windfurySpellId); - int32 addvalue = windfurySpellEntry->EffectBasePoints[0]; + // Value gained from additional AP + int32 APBonus = 0; + // Spell Casted 25504 for Main-Hand proc, 33750 for Off-Hand + uint32 procSpellId = 25504; - CastCustomSpell(this, 32910, &addvalue, NULL, NULL, true, castItem, triggeredByAura); + // Off-Hand? + if ( castItem->GetSlot() == EQUIPMENT_SLOT_OFFHAND ) + { + APBonus = (int32)(windfurySpellEntry->EffectBasePoints[0]/14 * GetAttackTime(OFF_ATTACK)/1000/2); + procSpellId = 33750; + } + else + APBonus = (int32)(windfurySpellEntry->EffectBasePoints[0]/14 * GetAttackTime(BASE_ATTACK)/1000); - ((Player*)this)->AddSpellCooldown(32910,0,time(NULL) + 3); + // Attack Twice + for ( uint32 i = 0; i<2; ++i ) + CastCustomSpell(pVictim,procSpellId,&APBonus,NULL,NULL,true,NULL,triggeredByAura); return; }