void Weapon::onUsedAmmo(Player* player, Item* item, Tile* destTile) const
{
if(!g_config.getBool(ConfigManager::REMOVE_WEAPON_AMMO))
return;
switch(ammoAction)
{
case AMMOACTION_REMOVECOUNT:
int32_t newCount = std::max((int32_t)0, ((int32_t)item->getItemCount()) - 1);
if (newCount == 0) {
int32_t ammoCount = std::max<int32_t>(1, std::min<int32_t>(100, player->__getItemTypeCount(item->getID())));
g_game.transformItem(item, item->getID(), ammoCount);
player->removeItemOfType(item->getID(), ammoCount, item->getSubType());
} else {
g_game.transformItem(item, item->getID(), newCount);
}
break;
case AMMOACTION_REMOVECHARGE:
g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getCharges()) - 1));
break;
case AMMOACTION_MOVE:
g_game.internalMoveItem(player, item->getParent(), destTile, INDEX_WHEREEVER, item, 1, NULL, FLAG_NOLIMIT);
break;
case AMMOACTION_MOVEBACK:
break;
default:
if(item->hasCharges())
g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getCharges()) - 1));
break;
}
}