public override void Execute(Level level) { ClientAvatar avatar = level.GetPlayerAvatar(); GameObject gameObjectById = level.GameObjectManager.GetGameObjectByID(BuildingId); if (gameObjectById == null) { return; } ConstructionItem constructionItem = (ConstructionItem)gameObjectById; if (!constructionItem.CanUpgrade()) { return; } ConstructionItemData constructionItemData = constructionItem.GetConstructionItemData(); if (!avatar.HasEnoughResources(constructionItemData.GetBuildResource(constructionItem.GetUpgradeLevel() + 1), constructionItemData.GetBuildCost(constructionItem.GetUpgradeLevel() + 1)) || !level.HasFreeWorkers()) { return; } string name = level.GameObjectManager.GetGameObjectByID(BuildingId).GetData().GetName(); Logger.Write("Building To Upgrade : " + name + " (" + BuildingId + ')'); if (string.Equals(name, "Alliance Castle")) { avatar.IncrementAllianceCastleLevel(); BuildingData buildingData = ((Building)level.GameObjectManager.GetGameObjectByID(BuildingId)).GetBuildingData(); avatar.SetAllianceCastleTotalCapacity(buildingData.GetUnitStorageCapacity(avatar.GetAllianceCastleLevel())); } else if (string.Equals(name, "Town Hall")) { avatar.IncrementTownHallLevel(); } ResourceData buildResource = constructionItemData.GetBuildResource(constructionItem.GetUpgradeLevel() + 1); avatar.SetResourceCount(buildResource, avatar.GetResourceCount(buildResource) - constructionItemData.GetBuildCost(constructionItem.GetUpgradeLevel() + 1)); constructionItem.StartUpgrading(); }
public void CancelConstruction() { if (IsConstructing()) { bool wasUpgrading = IsUpgrading(); m_vIsConstructing = false; if (wasUpgrading) { SetUpgradeLevel(UpgradeLevel); } ConstructionItemData bd = GetConstructionItemData(); ResourceData rd = bd.GetBuildResource(UpgradeLevel + 1); int cost = bd.GetBuildCost(UpgradeLevel + 1); int multiplier = CSVManager.DataTables.GetGlobals().GetGlobalData("BUILD_CANCEL_MULTIPLIER").NumberValue; int resourceCount = (int)((cost * multiplier * (long)1374389535) >> 32); resourceCount = Math.Max((resourceCount >> 5) + (resourceCount >> 31), 0); Avatar.Avatar.CommodityCountChangeHelper(0, rd, resourceCount); m_vLevel.WorkerManager.DeallocateWorker(this); if (UpgradeLevel == -1) { m_vLevel.GameObjectManager.RemoveGameObject(this); } } }