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();
        }
Exemplo n.º 2
0
 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);
         }
     }
 }