コード例 #1
0
        /// <summary>
        ///     Executes this command.
        /// </summary>
        public override int Execute(LogicLevel level)
        {
            if (this._villageType <= 1)
            {
                if (level.GetGameObjectManagerAt(this._villageType) != null)
                {
                    LogicGameObject gameObject = level.GetGameObjectManagerAt(this._villageType).GetGameObjectByID(this._gameObjectId);

                    if (gameObject != null)
                    {
                        if (gameObject.GetGameObjectType() == 0)
                        {
                            return(((LogicBuilding)gameObject).SpeedUpConstruction() ? 0 : -1);
                        }
                        if (gameObject.GetGameObjectType() == 4)
                        {
                            return(((LogicTrap)gameObject).SpeedUpConstruction() ? 0 : -1);
                        }
                        if (gameObject.GetGameObjectType() == 8)
                        {
                            return(-1);
                        }
                    }
                }

                return(-3);
            }

            return(-3);
        }
コード例 #2
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null)
            {
                if (gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
                {
                    LogicBuilding building = (LogicBuilding)gameObject;

                    if (!LogicDataTables.GetGlobals().AllowCancelBuildingConstruction() &&
                        building.GetUpgradeLevel() == 0 &&
                        building.IsConstructing())
                    {
                        if (!building.IsUpgrading())
                        {
                            return(-2);
                        }
                    }

                    if (building.IsConstructing())
                    {
                        building.GetListener().CancelNotification();
                        building.CancelConstruction();

                        return(0);
                    }
                }
                else if (gameObject.GetGameObjectType() == LogicGameObjectType.OBSTACLE)
                {
                    LogicObstacle obstacle = (LogicObstacle)gameObject;

                    if (obstacle.IsClearingOnGoing())
                    {
                        LogicObstacleData data         = obstacle.GetObstacleData();
                        LogicClientAvatar playerAvatar = level.GetPlayerAvatar();

                        playerAvatar.CommodityCountChangeHelper(0, data.GetClearResourceData(), data.GetClearCost());
                        obstacle.CancelClearing();

                        return(0);
                    }
                }
                else if (gameObject.GetGameObjectType() == LogicGameObjectType.TRAP)
                {
                    LogicTrap trap = (LogicTrap)gameObject;

                    if (trap.IsConstructing())
                    {
                        trap.GetListener().CancelNotification();
                        trap.CancelConstruction();

                        return(0);
                    }
                }
            }

            return(-1);
        }
コード例 #3
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null)
            {
                if (gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
                {
                    LogicBuilding     building     = (LogicBuilding)gameObject;
                    LogicBuildingData buildingData = building.GetBuildingData();

                    if (buildingData.GetGearUpBuildingData() == null || building.GetGearLevel() != 0)
                    {
                        if (building.GetAttackerItemData().HasAlternativeAttackMode())
                        {
                            LogicCombatComponent combatComponent = building.GetCombatComponent(false);

                            if (combatComponent != null)
                            {
                                combatComponent.ToggleAttackMode(this.m_layout, this.m_draftMode);

                                if (this.m_updateListener)
                                {
                                }

                                return(0);
                            }
                        }

                        return(-1);
                    }

                    return(-95);
                }

                if (gameObject.GetGameObjectType() == LogicGameObjectType.TRAP)
                {
                    LogicTrap trap = (LogicTrap)gameObject;

                    if (trap.HasAirMode())
                    {
                        trap.ToggleAirMode(this.m_layout, this.m_draftMode);

                        if (this.m_updateListener)
                        {
                        }

                        return(0);
                    }
                }
            }

            return(-1);
        }
コード例 #4
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null)
            {
                if (gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
                {
                    LogicBuilding        building        = (LogicBuilding)gameObject;
                    LogicBuildingData    buildingData    = building.GetBuildingData();
                    LogicCombatComponent combatComponent = building.GetCombatComponent(false);

                    if (combatComponent != null && combatComponent.GetAttackerItemData().GetTargetingConeAngle() != 0)
                    {
                        if (this.m_baseLayout == -1)
                        {
                            combatComponent.ToggleAimAngle(buildingData.GetAimRotateStep(), this.m_layout, this.m_draftLayout);
                        }
                        else
                        {
                            int draftAngle   = combatComponent.GetAimAngle(this.m_baseLayout, this.m_baseDraftLayout);
                            int currentAngle = combatComponent.GetAimAngle(this.m_layout, this.m_draftLayout);

                            combatComponent.ToggleAimAngle(draftAngle - currentAngle, this.m_layout, this.m_draftLayout);
                        }

                        return(0);
                    }
                }
                else if (gameObject.GetGameObjectType() == LogicGameObjectType.TRAP)
                {
                    LogicTrap trap = (LogicTrap)gameObject;

                    if (trap.GetTrapData().GetDirectionCount() > 0)
                    {
                        if (this.m_baseLayout == -1)
                        {
                            trap.ToggleDirection(this.m_layout, this.m_draftLayout);
                        }
                        else
                        {
                            trap.SetDirection(this.m_layout, this.m_draftLayout, trap.GetDirection(this.m_baseLayout, this.m_baseDraftLayout));
                        }

                        return(0);
                    }

                    return(-21);
                }
            }

            return(-1);
        }
コード例 #5
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null)
            {
                LogicClientAvatar playerAvatar = level.GetPlayerAvatar();

                if (gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
                {
                    LogicBuilding building = (LogicBuilding)gameObject;

                    if (building.CanSell())
                    {
                        playerAvatar.CommodityCountChangeHelper(0, building.GetSellResource(), building.GetSellPrice());
                        building.OnSell();

                        level.GetGameObjectManager().RemoveGameObject(building);

                        return(0);
                    }
                }
                else if (gameObject.GetGameObjectType() == LogicGameObjectType.DECO)
                {
                    LogicDeco         deco = (LogicDeco)gameObject;
                    LogicDecoData     data = deco.GetDecoData();
                    LogicResourceData buildResourceData = data.GetBuildResource();

                    int sellPrice = data.GetSellPrice();

                    if (buildResourceData.IsPremiumCurrency())
                    {
                        playerAvatar.SetDiamonds(playerAvatar.GetDiamonds() + sellPrice);
                        playerAvatar.SetFreeDiamonds(playerAvatar.GetFreeDiamonds() + sellPrice);
                        playerAvatar.GetChangeListener().FreeDiamondsAdded(sellPrice, 6);
                    }
                    else
                    {
                        playerAvatar.CommodityCountChangeHelper(0, buildResourceData, sellPrice);
                    }

                    level.GetGameObjectManager().RemoveGameObject(deco);

                    return(0);
                }
            }

            return(-1);
        }
コード例 #6
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding building = (LogicBuilding)gameObject;

                if (this.m_unitData != null)
                {
                    LogicUnitUpgradeComponent unitUpgradeComponent = building.GetUnitUpgradeComponent();

                    if (unitUpgradeComponent != null && unitUpgradeComponent.CanStartUpgrading(this.m_unitData))
                    {
                        LogicClientAvatar playerAvatar = level.GetPlayerAvatar();
                        int upgradeLevel = playerAvatar.GetUnitUpgradeLevel(this.m_unitData);
                        int upgradeCost  = this.m_unitData.GetUpgradeCost(upgradeLevel);
                        LogicResourceData upgradeResourceData = this.m_unitData.GetUpgradeResource(upgradeLevel);

                        if (playerAvatar.HasEnoughResources(upgradeResourceData, upgradeCost, true, this, false))
                        {
                            playerAvatar.CommodityCountChangeHelper(0, upgradeResourceData, -upgradeCost);
                            unitUpgradeComponent.StartUpgrading(this.m_unitData);

                            return(0);
                        }
                    }
                }
            }

            return(-1);
        }
コード例 #7
0
        public bool IsValidAttackPos(int x, int y)
        {
            for (int i = 0, posX = x - 1; i < 2; i++, posX++)
            {
                for (int j = 0, posY = y - 1; j < 2; j++, posY++)
                {
                    LogicTile tile = this.GetTile(posX + i, posY + j);

                    if (tile != null)
                    {
                        for (int k = 0; k < tile.GetGameObjectCount(); k++)
                        {
                            LogicGameObject gameObject = tile.GetGameObject(k);

                            if (!gameObject.IsPassable())
                            {
                                if (gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
                                {
                                    LogicBuilding building = (LogicBuilding)gameObject;

                                    if (!building.GetBuildingData().IsHidden())
                                    {
                                        return(false);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }
コード例 #8
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding building = (LogicBuilding)gameObject;

                if (building.IsLocked())
                {
                    if (building.GetUpgradeLevel() == 0 && building.CanUnlock(true))
                    {
                        LogicBuildingData buildingData = building.GetBuildingData();

                        if (buildingData.GetConstructionTime(0, level, 0) == 0 || level.HasFreeWorkers(this, -1))
                        {
                            LogicClientAvatar playerAvatar  = level.GetPlayerAvatar();
                            LogicResourceData buildResource = buildingData.GetBuildResource(0);
                            int buildCost = buildingData.GetBuildCost(0, level);

                            if (playerAvatar.HasEnoughResources(buildResource, buildCost, true, this, false))
                            {
                                playerAvatar.CommodityCountChangeHelper(0, buildResource, -buildCost);
                                building.StartConstructing(true);
                                building.GetListener().RefreshState();

                                return(0);
                            }
                        }
                    }
                }
            }

            return(-1);
        }
コード例 #9
0
        public override int Execute(LogicLevel level)
        {
            if (this.m_villageType <= 1 && level.GetGameObjectManagerAt(this.m_villageType) != null)
            {
                LogicGameObject gameObject = level.GetGameObjectManagerAt(this.m_villageType).GetGameObjectByID(this.m_gameObjectId);

                if (gameObject != null)
                {
                    LogicGameObjectType gameObjectType = gameObject.GetGameObjectType();

                    if (gameObjectType == LogicGameObjectType.BUILDING)
                    {
                        return(((LogicBuilding)gameObject).SpeedUpConstruction() ? 0 : -1);
                    }

                    if (gameObjectType == LogicGameObjectType.TRAP)
                    {
                        return(((LogicTrap)gameObject).SpeedUpConstruction() ? 0 : -2);
                    }

                    if (gameObjectType == LogicGameObjectType.VILLAGE_OBJECT)
                    {
                        return(((LogicVillageObject)gameObject).SpeedUpCostruction() ? 0 : -1);
                    }
                }
            }

            return(-3);
        }
        public void SetProductionType(LogicGameObject gameObject)
        {
            this.m_productionType = 0;

            if (gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                this.m_productionType = ((LogicBuilding)gameObject).GetBuildingData().IsForgesSpells() ? 1 : 0;
            }
        }
コード例 #11
0
        public bool FinishTaskOfOneWorker()
        {
            LogicGameObject gameObject = this.GetShortestTaskGO();

            if (gameObject != null)
            {
                switch (gameObject.GetGameObjectType())
                {
                case LogicGameObjectType.BUILDING:
                    LogicBuilding building = (LogicBuilding)gameObject;

                    if (building.IsConstructing())
                    {
                        return(building.SpeedUpConstruction());
                    }

                    if (building.GetHeroBaseComponent() != null)
                    {
                        return(building.GetHeroBaseComponent().SpeedUp());
                    }

                    break;

                case LogicGameObjectType.OBSTACLE:
                    LogicObstacle obstacle = (LogicObstacle)gameObject;

                    if (obstacle.IsClearingOnGoing())
                    {
                        return(obstacle.SpeedUpClearing());
                    }

                    break;

                case LogicGameObjectType.TRAP:
                    LogicTrap trap = (LogicTrap)gameObject;

                    if (trap.IsConstructing())
                    {
                        return(trap.SpeedUpConstruction());
                    }

                    break;

                case LogicGameObjectType.VILLAGE_OBJECT:
                    LogicVillageObject villageObject = (LogicVillageObject)gameObject;

                    if (villageObject.IsConstructing())
                    {
                        return(villageObject.SpeedUpCostruction());
                    }

                    break;
                }
            }

            return(false);
        }
コード例 #12
0
        /// <summary>
        ///     Sets the storage type.
        /// </summary>
        public void SetStorageType(LogicGameObject gameObject)
        {
            this._storageType = 0;

            if (gameObject.GetGameObjectType() == 0)
            {
                this._storageType = ((LogicBuilding)gameObject).GetBuildingData().ForgesSpells ? 1 : 0;
            }
        }
コード例 #13
0
        /// <summary>
        ///     Sets the production type.
        /// </summary>
        public void SetProductionType(LogicGameObject gameObject)
        {
            this._productionType = 0;

            if (gameObject.GetGameObjectType() == 0)
            {
                this._productionType = ((LogicBuilding)gameObject).GetBuildingData().ForgesSpells ? 1 : 0;
            }
        }
コード例 #14
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                if (gameObject.GetVillageType() == level.GetVillageType())
                {
                    LogicResourceProductionComponent resourceProductionComponent = gameObject.GetResourceProductionComponent();

                    if (resourceProductionComponent != null)
                    {
                        if (LogicDataTables.GetGlobals().CollectAllResourcesAtOnce())
                        {
                            int baseAvailableResources = resourceProductionComponent.GetResourceCount();
                            int baseCollectedResources = resourceProductionComponent.CollectResources(true);

                            bool storageIsFull = baseAvailableResources > 0 && baseCollectedResources == 0;

                            LogicArrayList <LogicComponent> components = level.GetComponentManager().GetComponents(resourceProductionComponent.GetComponentType());

                            for (int i = 0; i < components.Size(); i++)
                            {
                                LogicResourceProductionComponent component = (LogicResourceProductionComponent)components[i];

                                if (resourceProductionComponent != component && resourceProductionComponent.GetResourceData() == component.GetResourceData())
                                {
                                    int availableResources = component.GetResourceCount();
                                    int collectedResources = component.CollectResources(!storageIsFull);

                                    if (availableResources > 0)
                                    {
                                        if (collectedResources == 0)
                                        {
                                            storageIsFull = true;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            resourceProductionComponent.CollectResources(true);
                        }

                        return(0);
                    }

                    return(-1);
                }

                return(-3);
            }

            return(-2);
        }
コード例 #15
0
        public override int Execute(LogicLevel level)
        {
            LogicClientAvatar      playerAvatar       = level.GetPlayerAvatar();
            LogicGameObjectManager gameObjectManager  = level.GetGameObjectManager();
            LogicResourceData      repairResourceData = null;

            int repairCost = 0;

            for (int i = 0; i < this.m_gameObjectIds.Size(); i++)
            {
                LogicGameObject gameObject = gameObjectManager.GetGameObjectByID(this.m_gameObjectIds[i]);

                if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.TRAP)
                {
                    LogicTrap trap = (LogicTrap)gameObject;

                    if (trap.IsDisarmed() && !trap.IsConstructing())
                    {
                        LogicTrapData data = trap.GetTrapData();

                        repairResourceData = data.GetBuildResource();
                        repairCost        += data.GetRearmCost(trap.GetUpgradeLevel());
                    }
                }
            }

            if (repairResourceData != null && repairCost != 0)
            {
                if (playerAvatar.HasEnoughResources(repairResourceData, repairCost, true, this, false))
                {
                    playerAvatar.CommodityCountChangeHelper(0, repairResourceData, -repairCost);

                    for (int i = 0; i < this.m_gameObjectIds.Size(); i++)
                    {
                        LogicGameObject gameObject = gameObjectManager.GetGameObjectByID(this.m_gameObjectIds[i]);

                        if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.TRAP)
                        {
                            LogicTrap trap = (LogicTrap)gameObject;

                            if (trap.IsDisarmed() && !trap.IsConstructing())
                            {
                                trap.RepairTrap();
                            }
                        }
                    }

                    return(0);
                }

                return(-2);
            }

            return(-1);
        }
コード例 #16
0
        public override int Execute(LogicLevel level)
        {
            if (level.GetVillageType() == 1)
            {
                if (this.m_gameObjectId != 0)
                {
                    LogicGameObjectManager gameObjectManager = level.GetGameObjectManagerAt(1);
                    LogicGameObject        gameObject        = gameObjectManager.GetGameObjectByID(this.m_gameObjectId);

                    if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
                    {
                        LogicBuilding building = (LogicBuilding)gameObject;

                        if (this.m_unitData != null && level.GetGameMode().GetCalendar().IsProductionEnabled(this.m_unitData))
                        {
                            if (this.m_unitData.GetVillageType() == 1)
                            {
                                LogicVillage2UnitComponent village2UnitComponent = building.GetVillage2UnitComponent();

                                if (village2UnitComponent != null)
                                {
                                    if (this.m_unitData.IsUnlockedForProductionHouseLevel(gameObjectManager.GetHighestBuildingLevel(this.m_unitData.GetProductionHouseData(), true))
                                        )
                                    {
                                        LogicClientAvatar playerAvatar  = level.GetPlayerAvatar();
                                        LogicResourceData trainResource = this.m_unitData.GetTrainingResource();
                                        int trainCost = this.m_unitData.GetTrainingCost(playerAvatar.GetUnitUpgradeLevel(this.m_unitData));

                                        if (playerAvatar.HasEnoughResources(trainResource, trainCost, true, this, false))
                                        {
                                            village2UnitComponent.TrainUnit(this.m_unitData);
                                            playerAvatar.CommodityCountChangeHelper(0, trainResource, -trainCost);
                                        }

                                        return(0);
                                    }

                                    return(-7);
                                }

                                return(-4);
                            }

                            return(-8);
                        }
                    }

                    return(-5);
                }

                return(-1);
            }

            return(-10);
        }
コード例 #17
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.OBSTACLE)
            {
                return(((LogicObstacle)gameObject).SpeedUpClearing() ? 0 : -2);
            }

            return(-1);
        }
コード例 #18
0
        /// <summary>
        ///     Finishes the task of one worker.
        /// </summary>
        public bool FinishTaskOfOneWorker()
        {
            LogicGameObject gameObject = this.GetShortestTaskGO();

            if (gameObject != null)
            {
                switch (gameObject.GetGameObjectType())
                {
                case 0:
                    LogicBuilding building = (LogicBuilding)gameObject;

                    if (building.IsConstructing())
                    {
                        return(building.SpeedUpConstruction());
                    }

                    if (building.GetHeroBaseComponent() != null)
                    {
                        // TODO: Implement LogicHeroBaseComponent::speedUpUpgrade.
                    }

                    break;

                case 3:
                    LogicObstacle obstacle = (LogicObstacle)gameObject;

                    if (obstacle.IsClearingOnGoing())
                    {
                        return(obstacle.SpeedUpClearing());
                    }

                    break;

                case 4:
                    LogicTrap trap = (LogicTrap)gameObject;

                    if (trap.IsConstructing())
                    {
                        return(trap.SpeedUpConstruction());
                    }

                    break;

                case 8:
                    LogicVillageObject villageObject = (LogicVillageObject)gameObject;

                    break;
                }
            }

            return(false);
        }
コード例 #19
0
        public void UpdatePushBack()
        {
            int startSpeed = this.m_pushTime * this.m_pushTime / this.m_pushInitTime;
            int endSpeed   = this.m_pushInitTime - startSpeed;
            int pushBackX  = (startSpeed * this.m_pushBackStartPosition.m_x + endSpeed * this.m_pushBackEndPosition.m_x) / this.m_pushInitTime;
            int pushBackY  = (startSpeed * this.m_pushBackStartPosition.m_y + endSpeed * this.m_pushBackEndPosition.m_y) / this.m_pushInitTime;

            if (this.m_parent == null || this.m_parent.IsFlying() || this.m_parent.GetParent().GetLevel().GetTileMap().IsPassablePathFinder(pushBackX >> 8, pushBackY >> 8) ||
                this.m_ignorePush)
            {
                this.SetPosition(pushBackX, pushBackY);
            }
            else
            {
                this.m_pushBackStartPosition.m_x = this.m_position.m_x;
                this.m_pushBackStartPosition.m_y = this.m_position.m_y;
                this.m_pushBackEndPosition.m_x   = this.m_position.m_x;
                this.m_pushBackEndPosition.m_y   = this.m_position.m_y;
            }

            this.m_pushTime = LogicMath.Max(this.m_pushTime - 16, 0);

            if (this.m_pushTime == 0)
            {
                LogicGameObject      parent          = this.m_parent.GetParent();
                LogicCombatComponent combatComponent = parent.GetCombatComponent();

                if (parent.GetGameObjectType() == LogicGameObjectType.CHARACTER)
                {
                    LogicCharacter character = (LogicCharacter)parent;

                    if (character.GetCharacterData().GetPickNewTargetAfterPushback() || this.m_ignorePush)
                    {
                        if (combatComponent != null)
                        {
                            combatComponent.ForceNewTarget();
                        }
                    }
                }

                this.m_parent.NewTargetFound();

                if (combatComponent != null)
                {
                    combatComponent.StopAttack();
                }

                this.m_ignorePush = false;
            }
        }
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding             building             = (LogicBuilding)gameObject;
                LogicUnitUpgradeComponent unitUpgradeComponent = building.GetUnitUpgradeComponent();

                if (unitUpgradeComponent.GetCurrentlyUpgradedUnit() != null)
                {
                    return(unitUpgradeComponent.SpeedUp() ? 0 : -2);
                }
            }

            return(-1);
        }
コード例 #21
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding          building          = (LogicBuilding)gameObject;
                LogicHeroBaseComponent heroBaseComponent = building.GetHeroBaseComponent();

                if (heroBaseComponent != null && (uint)this.m_mode <= 1)
                {
                    return(heroBaseComponent.SetHeroMode(this.m_mode) ? 0 : -2);
                }
            }

            return(-1);
        }
コード例 #22
0
        public override void Tick()
        {
            if (this.m_triggeredByRadius)
            {
                LogicLevel level = this.m_parent.GetLevel();

                if (level.IsInCombatState())
                {
                    if (!this.m_triggered)
                    {
                        if (((level.GetLogicTime().GetTick() / 4) & 7) == 0)
                        {
                            LogicArrayList <LogicComponent> components = this.m_parent.GetComponentManager().GetComponents(LogicComponentType.MOVEMENT);

                            for (int i = 0; i < components.Size(); i++)
                            {
                                LogicGameObject gameObject = components[i].GetParent();

                                if (gameObject.GetGameObjectType() == LogicGameObjectType.CHARACTER)
                                {
                                    LogicCharacter         character         = (LogicCharacter)gameObject;
                                    LogicMovementComponent movementComponent = character.GetMovementComponent();

                                    bool triggerDisabled = false;

                                    if (movementComponent != null)
                                    {
                                        LogicMovementSystem movementSystem = movementComponent.GetMovementSystem();

                                        if (movementSystem != null && movementSystem.IsPushed())
                                        {
                                            triggerDisabled = movementSystem.IgnorePush();
                                        }
                                    }

                                    if (!triggerDisabled && character.GetCharacterData().GetTriggersTraps())
                                    {
                                        this.ObjectClose(character);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #23
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding          building          = (LogicBuilding)gameObject;
                LogicHeroBaseComponent heroBaseComponent = building.GetHeroBaseComponent();

                if (heroBaseComponent != null)
                {
                    heroBaseComponent.CancelUpgrade();
                    return(0);
                }
            }

            return(-1);
        }
コード例 #24
0
ファイル: LogicTile.cs プロジェクト: NotHuza/Cerberus-v4
        /// <summary>
        ///     Gets the tall grass object.
        /// </summary>
        public LogicObstacle GetTallGrass()
        {
            for (int i = 0; i < this._gameObjects.Count; i++)
            {
                LogicGameObject gameObject = this._gameObjects[i];

                if (gameObject.GetGameObjectType() == 3)
                {
                    LogicObstacle obstacle = (LogicObstacle)this._gameObjects[i];

                    if (obstacle.GetObstacleData().TallGrass)
                    {
                        return(obstacle);
                    }
                }
            }

            return(null);
        }
コード例 #25
0
        public LogicObstacle GetTallGrass()
        {
            for (int i = 0; i < this.m_gameObjects.Size(); i++)
            {
                LogicGameObject gameObject = this.m_gameObjects[i];

                if (gameObject.GetGameObjectType() == LogicGameObjectType.OBSTACLE)
                {
                    LogicObstacle obstacle = (LogicObstacle)this.m_gameObjects[i];

                    if (obstacle.GetObstacleData().IsTallGrass())
                    {
                        return(obstacle);
                    }
                }
            }

            return(null);
        }
コード例 #26
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = this.m_villageType <= 1 && level.GetGameObjectManagerAt(this.m_villageType) != null
                ? level.GetGameObjectManagerAt(this.m_villageType).GetGameObjectByID(this.m_gameObjectId)
                : level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding          building          = (LogicBuilding)gameObject;
                LogicHeroBaseComponent heroBaseComponent = building.GetHeroBaseComponent();

                if (heroBaseComponent != null)
                {
                    return(heroBaseComponent.SpeedUp() ? 0 : -2);
                }
            }

            return(-1);
        }
        public override int Execute(LogicLevel level)
        {
            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding building = (LogicBuilding)gameObject;

                bool success = building.SpeedUpBoostCooldown();

                if (building.GetBuildingData().IsClockTower())
                {
                    building.GetListener().RefreshState();
                }

                return(success ? 0 : -2);
            }

            return(-1);
        }
コード例 #28
0
        public void ObjectClose(LogicGameObject gameObject)
        {
            LogicHitpointComponent hitpointComponent = gameObject.GetHitpointComponent();

            if (hitpointComponent == null || hitpointComponent.GetTeam() != 1)
            {
                if (gameObject.GetGameObjectType() == LogicGameObjectType.CHARACTER)
                {
                    LogicCharacter     character = (LogicCharacter)gameObject;
                    LogicCharacterData data      = character.GetCharacterData();

                    if (data.GetHousingSpace() < this.m_minTriggerHousingLimit)
                    {
                        return;
                    }
                }

                LogicCombatComponent combatComponent = gameObject.GetCombatComponent();

                if (combatComponent == null || combatComponent.GetUndergroundTime() <= 0)
                {
                    if ((!gameObject.IsFlying() || this.m_airTrigger) && (gameObject.IsFlying() || this.m_groundTrigger))
                    {
                        if (this.m_healerTrigger || combatComponent == null || !combatComponent.IsHealer())
                        {
                            int distanceX = gameObject.GetX() - this.m_parent.GetMidX();
                            int distanceY = gameObject.GetY() - this.m_parent.GetMidY();

                            if (LogicMath.Abs(distanceX) <= this.m_triggerRadius &&
                                LogicMath.Abs(distanceY) <= this.m_triggerRadius &&
                                distanceX * distanceX + distanceY * distanceY < (uint)(this.m_triggerRadius * this.m_triggerRadius))
                            {
                                this.Trigger();
                            }
                        }
                    }
                }
            }
        }
コード例 #29
0
        public override int Execute(LogicLevel level)
        {
            if (LogicDataTables.GetGlobals().UseNewTraining())
            {
                LogicUnitProduction unitProduction = this.m_gameObjectId == -2
                    ? level.GetGameObjectManager().GetUnitProduction()
                    : this.m_gameObjectId == -1
                        ? level.GetGameObjectManager().GetSpellProduction()
                        : null;

                if (unitProduction != null)
                {
                    unitProduction.SetBoostPause(false);
                    this.UpdateProductionHouseListeners(level);
                }

                return(0);
            }

            LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null &&
                gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING &&
                gameObject.IsBoostPaused())
            {
                LogicBuilding building = (LogicBuilding)gameObject;

                if (building.CanStopBoost())
                {
                    building.SetBoostPause(false);
                    building.GetListener().RefreshState();

                    return(0);
                }
            }

            return(-1);
        }
コード例 #30
0
        public override int Execute(LogicLevel level)
        {
            LogicGameObjectManager gameObjectManager = level.GetGameObjectManager();
            LogicGameObject        gameObject        = gameObjectManager.GetGameObjectByID(this.m_gameObjectId);

            if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING)
            {
                LogicBuilding building = (LogicBuilding)gameObject;
                LogicVillage2UnitComponent village2UnitComponent = building.GetVillage2UnitComponent();

                if (village2UnitComponent != null)
                {
                    LogicClientAvatar playerAvatar = level.GetPlayerAvatar();

                    playerAvatar.CommodityCountChangeHelper(7, village2UnitComponent.GetUnitData(), -village2UnitComponent.GetUnitCount());
                    village2UnitComponent.RemoveUnits();

                    return(0);
                }
            }

            return(-1);
        }