public static bool DecreaseAmmos(this ICharacterData data, AmmoType ammoType, short amount, out Dictionary <CharacterItem, short> decreaseItems) { decreaseItems = new Dictionary <CharacterItem, short>(); Dictionary <int, short> decreasingItemIndexes = new Dictionary <int, short>(); IList <CharacterItem> nonEquipItems = data.NonEquipItems; short tempDecresingAmount = 0; for (int i = nonEquipItems.Count - 1; i >= 0; --i) { CharacterItem nonEquipItem = nonEquipItems[i]; if (nonEquipItem.GetAmmoItem() != null && nonEquipItem.GetAmmoItem().ammoType == ammoType) { if (amount - nonEquipItem.amount > 0) { tempDecresingAmount = nonEquipItem.amount; } else { tempDecresingAmount = amount; } amount -= tempDecresingAmount; decreasingItemIndexes[i] = tempDecresingAmount; } if (amount == 0) { break; } } if (amount > 0) { return(false); } foreach (KeyValuePair <int, short> decreasingItem in decreasingItemIndexes) { decreaseItems.Add(data.NonEquipItems[decreasingItem.Key], decreasingItem.Value); DecreaseItemsByIndex(data, decreasingItem.Key, decreasingItem.Value); } return(true); }