public static void GrantInstantBuildingUpgrade(RewardVO reward, CurrentPlayer cp) { for (int i = 0; i < reward.BuildingInstantUpgrades.Length; i++) { string[] array = reward.BuildingInstantUpgrades[i].Split(new char[] { ':' }); int num = Convert.ToInt32(array[1], CultureInfo.InvariantCulture); string text = array[0]; BuildingTypeVO buildingTypeVO = Service.Get <IDataController>().Get <BuildingTypeVO>(text); if (buildingTypeVO == null) { Service.Get <StaRTSLogger>().WarnFormat("buildingUiD {0} does not exist", new object[] { text }); } else { BuildingUpgradeCatalog buildingUpgradeCatalog = Service.Get <BuildingUpgradeCatalog>(); ISupportController supportController = Service.Get <ISupportController>(); NodeList <BuildingNode> nodeList = Service.Get <EntityController>().GetNodeList <BuildingNode>(); for (BuildingNode buildingNode = nodeList.Head; buildingNode != null; buildingNode = buildingNode.Next) { BuildingTypeVO buildingType = buildingNode.BuildingComp.BuildingType; if (buildingType.Lvl < num && buildingType.Type == buildingTypeVO.Type && buildingType.Type != BuildingType.Clearable) { BuildingTypeVO byLevel = buildingUpgradeCatalog.GetByLevel(buildingType.UpgradeGroup, num); if (byLevel != null && byLevel.PlayerFacing) { if (!string.IsNullOrEmpty(buildingTypeVO.LinkedUnit)) { if (ContractUtils.IsChampionRepairing(buildingNode.Entity)) { supportController.FinishCurrentContract(buildingNode.Entity, true); } if (cp.Inventory.Champion.GetItemAmount(buildingTypeVO.LinkedUnit) == 0) { cp.OnChampionRepaired(buildingTypeVO.LinkedUnit); } } supportController.StartBuildingUpgrade(byLevel, buildingNode.Entity, true); int boardX = buildingNode.Entity.Get <BoardItemComponent>().BoardItem.BoardX; int boardZ = buildingNode.Entity.Get <BoardItemComponent>().BoardItem.BoardZ; float x; float z; EditBaseController.BuildingBoardToWorld(buildingNode.Entity, boardX, boardZ, out x, out z); Vector3 worldLocation = new Vector3(x, 0f, z); worldLocation.x = Units.BoardToWorldX(boardX); worldLocation.z = Units.BoardToWorldX(boardZ); Service.Get <WorldInitializer>().View.PanToLocation(worldLocation); } } } } } }
protected void ConfirmInstantUpgrade(object result, object cookie) { if (result == null) { return; } int num = GameUtils.CrystalCostToInstantUpgrade(this.nextBuildingInfo); if (!GameUtils.SpendCrystals(num)) { return; } this.buttonPrimaryAction.Enabled = false; this.buttonInstantBuy.Enabled = false; this.buttonSwap.Enabled = false; this.upgradeButton.Enabled = false; this.allowClose = false; ProcessingScreen.Show(); int currencyAmount = -num; string itemType = this.buildingInfo.Type.ToString(); string uid = this.buildingInfo.Uid; int itemCount = 1; string type = "instant_building"; string subType = "consumable"; Service.DMOAnalyticsController.LogInAppCurrencyAction(currencyAmount, itemType, uid, itemCount, type, subType); EventManager eventManager = Service.EventManager; eventManager.RegisterObserver(this, EventId.MissionCollecting, EventPriority.Default); this.instantUpgradeBuildingKey = this.selectedBuilding.BuildingComp.BuildingTO.Key; this.instantUpgradeBuildingUid = this.nextBuildingInfo.Uid; try { ISupportController iSupportController = Service.ISupportController; iSupportController.StartBuildingUpgrade(this.nextBuildingInfo, this.selectedBuilding, true); iSupportController.BuyOutCurrentBuildingContract(this.selectedBuilding, false); } finally { eventManager.UnregisterObserver(this, EventId.MissionCollecting); this.HandleInstantUpgradeRequest(); } }