Index: src/map/ai/ai_char_normal.cpp =================================================================== --- src/map/ai/ai_char_normal.cpp (revision 3768) +++ src/map/ai/ai_char_normal.cpp (working copy) @@ -987,7 +987,7 @@ if(slot == SLOT_RANGED) { - damage = battleutils::CheckForDamageMultiplier(PItem,damage, 0); + damage = battleutils::CheckForDamageMultiplier(PItem,damage, 0,m_PChar); if(PItem != NULL) { @@ -2224,7 +2224,7 @@ hitOccured = true; damage = (damage + m_PChar->GetRangedWeaponDmg() + battleutils::GetFSTR(m_PChar,m_PBattleSubTarget,SLOT_RANGED)) * pdif * 5; - damage = battleutils::CheckForDamageMultiplier(PItem,damage, 0); + damage = battleutils::CheckForDamageMultiplier(PItem,damage,0,m_PChar); damage = battleutils::RangedDmgTaken(m_PBattleSubTarget, damage); } @@ -3432,7 +3432,7 @@ if (Action.reaction == REACTION_HIT || Action.reaction == REACTION_BLOCK || Action.reaction == REACTION_GUARD) { - damage = battleutils::CheckForDamageMultiplier(PWeapon,damage,i); + damage = battleutils::CheckForDamageMultiplier(PWeapon,damage,i,m_PChar); Action.param = battleutils::TakePhysicalDamage(m_PChar, m_PBattleTarget, damage, isBlocked, fstrslot, 1, taChar, true); } else Index: src/map/battleutils.cpp =================================================================== --- src/map/battleutils.cpp (revision 3768) +++ src/map/battleutils.cpp (working copy) @@ -413,12 +413,13 @@ * * ************************************************************************/ -uint32 CheckForDamageMultiplier(CItemWeapon* PWeapon, uint32 damage, uint8 hitNumber) +uint32 CheckForDamageMultiplier(CItemWeapon* PWeapon, uint32 damage, uint8 hitNumber, CCharEntity* m_PChar) { if (PWeapon==NULL) return damage; uint32 originalDamage = damage; + CItemWeapon* PAmmo = (CItemWeapon*)m_PChar->getStorage(LOC_INVENTORY)->GetItem(m_PChar->equip[SLOT_AMMO]); switch (PWeapon->getID()) { @@ -463,14 +464,46 @@ return (damage = (damage * 2)); break; + // Magnus Stone Weapons + case 18533: // Magnus Axe + case 19168: // Magnus Claymore + case 19131: // Magnus Dagger + case 17047: // Magnus Hammer + case 19313: // Magnus Lance + case 18620: // Magnus Pole + case 18777: // Magnus Sainti + case 18967: // Magnus Scythe + case 18893: // Magnus Sword + case 18514: // Magnus Toporok + case 19289: // Toki + case 18456: // Yoshihiro + if(PAmmo->getID() == 19262) + { + if (rand()%100 > 50) + { + // ShowDebug(CL_CYAN"Magnus Weapon Proc \n"); + if ( (PAmmo->getQuantity()-1) < 1) // ammo will run out after this attack, make sure we remove it from equip + { + uint8 slot = m_PChar->equip[SLOT_AMMO]; + charutils::UnequipItem(m_PChar,SLOT_AMMO); + charutils::UpdateItem(m_PChar, LOC_INVENTORY, slot, -1); + } + else + { + charutils::UpdateItem(m_PChar, LOC_INVENTORY, m_PChar->equip[SLOT_AMMO], -1); + } + m_PChar->pushPacket(new CInventoryFinishPacket()); + originalDamage = (damage * 2); + } + } + break; default: - return originalDamage; // just to be sure break; } + + return originalDamage; - - } @@ -3635,7 +3668,7 @@ realHits++; // incase player has gungnir^^ (or any other damage increases weapons) - damageForRound = battleutils::CheckForDamageMultiplier(PWeapon,damageForRound,i); + damageForRound = battleutils::CheckForDamageMultiplier(PWeapon,damageForRound,i,((CCharEntity*)PAttacker)); totalDamage += damageForRound; Index: src/map/battleutils.h =================================================================== --- src/map/battleutils.h (revision 3768) +++ src/map/battleutils.h (working copy) @@ -152,7 +152,7 @@ void MakeEntityStandUp(CBattleEntity* PEntity); bool IsEngauged(CBattleEntity* PEntity); CBattleEntity* getAvailableTrickAttackChar(CBattleEntity* taUser, CBattleEntity* PMob); - uint32 CheckForDamageMultiplier(CItemWeapon* PWeapon, uint32 damage, uint8 hitNumber); + uint32 CheckForDamageMultiplier(CItemWeapon* PWeapon, uint32 damage, uint8 hitNumber, CCharEntity* m_PChar); bool HasNinjaTool(CBattleEntity* PEntity, CSpell* PSpell, bool ConsumeTool); bool TryCharm(CBattleEntity* PCharmer, CBattleEntity* PVictim, uint32 base);