Index: src/map/ai/ai_char_normal.cpp =================================================================== --- src/map/ai/ai_char_normal.cpp (revision 2989) +++ src/map/ai/ai_char_normal.cpp (working copy) @@ -2082,6 +2082,12 @@ CItemWeapon* PAmmo = (CItemWeapon*)m_PChar->getStorage(LOC_INVENTORY)->GetItem(m_PChar->equip[SLOT_AMMO]); uint8 recycleChance = m_PChar->getMod(MOD_RECYCLE); + if(hitOccured && m_PChar->StatusEffectContainer->HasStatusEffect(EFFECT_UNLIMITED_SHOT)) + { + m_PChar->StatusEffectContainer->DelStatusEffect(EFFECT_UNLIMITED_SHOT); + recycleChance = 100; + } + if (charutils::hasTrait(m_PChar,TRAIT_RECYCLE)) recycleChance += m_PChar->PMeritPoints->GetMeritValue(MERIT_RECYCLE,m_PChar->GetMLevel()); @@ -2614,24 +2620,41 @@ if (m_PWeaponSkill->getID() >= 192 && m_PWeaponSkill->getID() <= 218) { //ranged WS IDs + + + //if using unlimited shot, ammo will not be consumed + if (m_PChar->StatusEffectContainer->HasStatusEffect(EFFECT_UNLIMITED_SHOT)) + { + if (damage > 0) + { + m_PChar->StatusEffectContainer->DelStatusEffect(EFFECT_UNLIMITED_SHOT); + } + } + else + { + CItemWeapon* PAmmo = (CItemWeapon*)m_PChar->getStorage(LOC_INVENTORY)->GetItem(m_PChar->equip[SLOT_AMMO]); + + - if(PAmmo!=NULL && rand()%100 > (m_PChar->getMod(MOD_RECYCLE) + m_PChar->PMeritPoints->GetMeritValue(MERIT_RECYCLE,m_PChar->GetMLevel())) ) - { - if ( (PAmmo->getQuantity()-1) < 1) // ammo will run out after this shot, make sure we remove it from equip + if(PAmmo!=NULL && rand()%100 > (m_PChar->getMod(MOD_RECYCLE) + m_PChar->PMeritPoints->GetMeritValue(MERIT_RECYCLE,m_PChar->GetMLevel())) ) { - uint8 slot = m_PChar->equip[SLOT_AMMO]; - charutils::UnequipItem(m_PChar,SLOT_AMMO); - charutils::UpdateItem(m_PChar, LOC_INVENTORY, slot, -1); + if ( (PAmmo->getQuantity()-1) < 1) // ammo will run out after this shot, 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()); } - else - { - charutils::UpdateItem(m_PChar, LOC_INVENTORY, m_PChar->equip[SLOT_AMMO], -1); - } - m_PChar->pushPacket(new CInventoryFinishPacket()); + } + } - // DO NOT REMOVE! This is here for a reason... // Skill chains should not be affected by MISSED weapon skills or non-elemental // weapon skills such as: Spirits Within, Spirit Taker, Energy Steal, Energy Drain, Starlight, and Moonlight.