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);
    }