private bool SetDeployableCount(string uid, int amount, InventoryStorage storage, int size) { if (amount < 0) { Service.Logger.Debug("Cannot set a deployable count less than zero. uid: " + uid); return(false); } int num = storage.GetTotalStorageAmount() + amount * size; if (num > storage.GetTotalStorageCapacity()) { Service.Logger.Debug("Not enough capacity for deployable. uid: " + uid); return(false); } int delta = amount - storage.GetItemAmount(uid); storage.ModifyItemAmount(uid, delta); return(true); }
public static int TransferPrizeFromInventory(PrizeType prizeType, string prizeID) { Lang lang = Service.Get <Lang>(); IDataController dataController = Service.Get <IDataController>(); CurrentPlayer currentPlayer = Service.Get <CurrentPlayer>(); PrizeInventory prizes = currentPlayer.Prizes; Inventory inventory = currentPlayer.Inventory; InventoryStorage inventoryStorage = null; IUpgradeableVO finalUnitFromPrize = TimedEventPrizeUtils.GetFinalUnitFromPrize(prizeType, prizeID); string text = null; string text2 = null; string id = null; int result = 0; int num = 0; switch (prizeType) { case PrizeType.Currency: num = prizes.GetResourceAmount(prizeID); TimedEventPrizeUtils.GetCurrencyAmountToTransfer(prizeID, ref num, ref result); if (num > 0) { inventory.ModifyItemAmount(prizeID, num); prizes.ModifyResourceAmount(prizeID, -num); text = "INVENTORY_REWARD_USED_CURRENCY"; text2 = lang.Get(prizeID.ToUpper(), new object[0]); } else { id = "INVENTORY_NO_ROOM"; } break; case PrizeType.Infantry: case PrizeType.Vehicle: case PrizeType.Mercenary: inventoryStorage = inventory.Troop; if (inventoryStorage.GetTotalStorageCapacity() >= inventoryStorage.GetTotalStorageAmount() + finalUnitFromPrize.Size) { num = 1; inventoryStorage.ModifyItemAmount(finalUnitFromPrize.Uid, num); prizes.ModifyTroopAmount(prizeID, -num); text = "INVENTORY_REWARD_USED_TROOP"; text2 = LangUtils.GetTroopDisplayName((TroopTypeVO)finalUnitFromPrize); StorageSpreadUtils.UpdateAllStarportFullnessMeters(); } else { id = "NOT_ENOUGH_HOUSING"; } result = prizes.GetTroopAmount(prizeID); break; case PrizeType.Hero: inventoryStorage = inventory.Hero; if (!Service.Get <BuildingLookupController>().HasHeroCommand()) { id = "INVENTORY_NO_HERO_COMMAND"; } else if (inventoryStorage.GetTotalStorageCapacity() >= inventoryStorage.GetTotalStorageAmount() + finalUnitFromPrize.Size) { bool flag = false; foreach (KeyValuePair <string, InventoryEntry> current in inventoryStorage.GetInternalStorage()) { if (current.get_Value().Amount > 0) { TroopTypeVO troopTypeVO = dataController.Get <TroopTypeVO>(current.get_Key()); if (troopTypeVO.UpgradeGroup == finalUnitFromPrize.UpgradeGroup) { flag = true; break; } } } if (!flag) { flag = ContractUtils.HasExistingHeroContract(finalUnitFromPrize.UpgradeGroup); } if (!flag) { num = 1; inventoryStorage.ModifyItemAmount(finalUnitFromPrize.Uid, num); prizes.ModifyTroopAmount(prizeID, -num); text = "INVENTORY_REWARD_USED_HERO"; text2 = LangUtils.GetTroopDisplayName((TroopTypeVO)finalUnitFromPrize); Service.Get <EventManager>().SendEvent(EventId.HeroMobilizedFromPrize, finalUnitFromPrize.Uid); } else { id = "INVENTORY_NO_ROOM_HERO_IN_QUEUE"; } } else { id = "INVENTORY_NO_ROOM_HERO"; } result = prizes.GetTroopAmount(prizeID); break; case PrizeType.SpecialAttack: inventoryStorage = inventory.SpecialAttack; if (!Service.Get <BuildingLookupController>().HasStarshipCommand()) { id = "INVENTORY_NO_FLEET_COMMAND"; } else if (inventoryStorage.GetTotalStorageCapacity() >= inventoryStorage.GetTotalStorageAmount() + finalUnitFromPrize.Size) { num = 1; inventoryStorage.ModifyItemAmount(finalUnitFromPrize.Uid, num); prizes.ModifySpecialAttackAmount(prizeID, -num); text = "INVENTORY_REWARD_USED_TROOP"; text2 = LangUtils.GetStarshipDisplayName((SpecialAttackTypeVO)finalUnitFromPrize); Service.Get <EventManager>().SendEvent(EventId.StarshipMobilizedFromPrize, finalUnitFromPrize.Uid); } else { id = "NOT_ENOUGH_SPACE"; } result = prizes.GetSpecialAttackAmount(prizeID); break; } if (num > 0) { InventoryTransferRequest request = new InventoryTransferRequest(prizeID, num); Service.Get <ServerAPI>().Enqueue(new InventoryTransferCommand(request)); } else { string message = lang.Get(id, new object[0]); AlertScreen.ShowModal(false, null, message, null, null); } if (text != null) { string text3 = (prizeType == PrizeType.Hero) ? text2 : lang.Get("AMOUNT_AND_NAME", new object[] { num, text2 }); string instructions = lang.Get(text, new object[] { text3 }); Service.Get <UXController>().MiscElementsManager.ShowPlayerInstructions(instructions, 1f, 2f); } return(result); }