public override void Execute(Level level)
 {
     ClientAvatar ca = level.GetPlayerAvatar();
     GameObject go = level.GameObjectManager.GetGameObjectByID(BuildingId);
     if(go != null)
     {
         Building b = (Building)go;
         HeroBaseComponent hbc = b.GetHeroBaseComponent();
         if(hbc != null)
         {
             if(hbc.CanStartUpgrading())
             {
                 HeroData hd = ObjectManager.DataTables.GetHeroByName(b.GetBuildingData().HeroType);
                 int currentLevel = ca.GetUnitUpgradeLevel(hd);
                 ResourceData rd = hd.GetUpgradeResource(currentLevel);
                 int cost = hd.GetUpgradeCost(currentLevel);
                 if(ca.HasEnoughResources(rd, cost))
                 {
                     if(level.HasFreeWorkers())
                     {
                         hbc.StartUpgrading();
                     }
                 }
             }
         }
     }
 }
        //00 00 02 25 00 00 00 00 07 1D CD 65 0A 1D CD 65 09 1D CD 65 0B 1D CD 65 08 1D CD 65 0C 1D CD 65 07 1D CD 65 06 00 00 1B 07
        //public uint Unknown1 { get; set; } //00 00 2D 7F some client tick

        public override void Execute(Level level)
        {
            ClientAvatar ca = level.GetPlayerAvatar();

            foreach(var buildingId in m_vBuildingIdList)
            {
                Building b = (Building)level.GameObjectManager.GetGameObjectByID(buildingId);
                if (b.CanUpgrade())
                {
                    BuildingData bd = b.GetBuildingData();
                    int cost = bd.GetBuildCost(b.GetUpgradeLevel() + 1);
                    ResourceData rd;
                    if(m_vIsAltResource == 0)
                        rd = bd.GetBuildResource(b.GetUpgradeLevel() + 1);
                    else
                        rd = bd.GetAltBuildResource(b.GetUpgradeLevel() + 1);
                    if (ca.HasEnoughResources(rd, cost))
                    {
                        if (level.HasFreeWorkers())
                        {
                            ca.SetResourceCount(rd, ca.GetResourceCount(rd) - cost);
                            b.StartUpgrading();
                        }
                    }
                }
            }
        }
        public override void Execute(Level level)
        {
            ClientAvatar ca = level.GetPlayerAvatar();

            TrapData td = (TrapData)ObjectManager.DataTables.GetDataById(TrapId);
            Trap t = new Trap(td, level);

            if (ca.HasEnoughResources(td.GetBuildResource(0), td.GetBuildCost(0)))
            {
                if (level.HasFreeWorkers())
                {
                    ResourceData rd = td.GetBuildResource(0);
                    ca.CommodityCountChangeHelper(0, rd, -td.GetBuildCost(0));

                    t.StartConstructing(X, Y);
                    level.GameObjectManager.AddGameObject(t);
                }
            }
        }
        public uint Unknown1 { get; set; } //00 00 2D 7F some client tick

        public override void Execute(Level level)
        {
            ClientAvatar ca = level.GetPlayerAvatar();

            BuildingData bd = (BuildingData)ObjectManager.DataTables.GetDataById(BuildingId);
            Building b = new Building(bd, level);

            if (ca.HasEnoughResources(bd.GetBuildResource(0), bd.GetBuildCost(0)))
            {
                if (bd.IsWorkerBuilding() || level.HasFreeWorkers())
                {
                    //Ajouter un check sur le réservoir d'élixir noir
                    ResourceData rd = bd.GetBuildResource(0);
                    ca.CommodityCountChangeHelper(0, rd, -bd.GetBuildCost(0));

                    b.StartConstructing(X, Y);
                    level.GameObjectManager.AddGameObject(b);
                }
            }
        }
        public override void Execute(Level level)
        {
            ClientAvatar ca = level.GetPlayerAvatar();
            GameObject go = level.GameObjectManager.GetGameObjectByID(BuildingId);

            ConstructionItem b = (ConstructionItem)go;
            if(b.CanUpgrade())
            {
                var bd = b.GetConstructionItemData();
                if (ca.HasEnoughResources(bd.GetBuildResource(b.GetUpgradeLevel() + 1), bd.GetBuildCost(b.GetUpgradeLevel() + 1)))
                {
                    if (level.HasFreeWorkers())
                    {
                        ResourceData rd = bd.GetBuildResource(b.GetUpgradeLevel() + 1);
                        ca.SetResourceCount(rd, ca.GetResourceCount(rd) - bd.GetBuildCost(b.GetUpgradeLevel() + 1));
                        b.StartUpgrading();
                    }
                }
            }
        }