public LogicPlaceUnplacedObjectCommand(int x, int y, int upgradeLevel, LogicGameObjectData gameObjectData)
 {
     this.m_x              = x;
     this.m_y              = y;
     this.m_upgradeLevel   = upgradeLevel;
     this.m_gameObjectData = gameObjectData;
 }
Exemplo n.º 2
0
        public override void FastForwardTime(int time)
        {
            if (this.m_timer != null)
            {
                if (this.m_timer.GetEndTimestamp() == -1)
                {
                    this.m_timer.StartTimer(this.m_timer.GetRemainingSeconds(this.m_parent.GetLevel().GetLogicTime()) - time, this.m_parent.GetLevel().GetLogicTime(), false, -1);
                }
                else
                {
                    this.m_timer.AdjustEndSubtick(this.m_parent.GetLevel());
                }

                int clockTowerBoostTime = this.m_parent.GetLevel().GetUpdatedClockTowerBoostTime();

                if (clockTowerBoostTime > 0 && this.m_parent.GetLevel().IsClockTowerBoostPaused())
                {
                    LogicGameObjectData data = this.m_parent.GetData();

                    if (data.GetDataType() == LogicDataType.BUILDING)
                    {
                        if (data.GetVillageType() == 1)
                        {
                            this.m_timer.SetFastForward(this.m_timer.GetFastForward() +
                                                        60 * LogicMath.Min(time, clockTowerBoostTime) * (LogicDataTables.GetGlobals().GetClockTowerBoostMultiplier() - 1));
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        public LogicTriggerComponentTriggeredCommand(LogicGameObject gameObject) : this()
        {
            this.m_id   = gameObject.GetGlobalID();
            this.m_data = gameObject.GetData();

            gameObject.Save(this.m_json, 0);
        }
        public LogicAlliancePortal(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
        {
            LogicBunkerComponent bunkerComponent = new LogicBunkerComponent(this, 0);

            bunkerComponent.SetComponentMode(0);
            this.AddComponent(bunkerComponent);
        }
Exemplo n.º 5
0
        public override void Destruct()
        {
            base.Destruct();

            this.m_data = null;
            this.m_json = null;
        }
        private static LogicGameObject CreateGameObjectIfAnyPlaceExist(LogicGameObjectData data, LogicLevel level, int width, int height, int villageType, int x = 0, int y = 0)
        {
            int levelEndX = level.GetPlayArea().GetEndX();
            int levelEndY = level.GetPlayArea().GetEndY();

            if (x == 0 && y == 0)
            {
                x = level.GetPlayArea().GetStartX();
                y = level.GetPlayArea().GetStartY();
            }

            while (true)
            {
                if (level.IsValidPlaceForBuilding(x, y, width, height, null))
                {
                    LogicGameObject gameObject = LogicGameObjectFactory.CreateGameObject(data, level, villageType);
                    gameObject.SetInitialPosition(x << 9, y << 9);
                    level.GetGameObjectManagerAt(villageType).AddGameObject(gameObject, -1);
                    return(gameObject);
                }

                if (++x + width > levelEndX)
                {
                    if (++y + height > levelEndY)
                    {
                        break;
                    }
                    x = level.GetPlayArea().GetStartX();
                }
            }

            return(null);
        }
Exemplo n.º 7
0
        public override void Decode(ByteStream stream)
        {
            this.m_id   = stream.ReadVInt();
            this.m_data = (LogicGameObjectData)LogicDataTables.GetDataById(stream.ReadVInt());
            this.m_json = LogicJSONParser.ParseObject(stream.ReadString(900000) ?? string.Empty);

            base.Decode(stream);
        }
Exemplo n.º 8
0
 public LogicSpell(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
 {
     this.m_allowDestruction      = true;
     this.m_randomOffset          = new LogicVector2();
     this.m_duplicateHousingSpace = -1;
     this.m_playEffectOffsetX     = 100;
     this.m_playEffectOffsetY     = 100;
 }
        public override void Decode(ByteStream stream)
        {
            this.m_x = stream.ReadInt();
            this.m_y = stream.ReadInt();
            this.m_gameObjectData = (LogicGameObjectData)ByteStreamHelper.ReadDataReference(stream);
            this.m_upgradeLevel   = stream.ReadInt();

            base.Decode(stream);
        }
        public static void LoadDebugJSONArray(LogicLevel level, LogicJSONArray jsonArray, LogicGameObjectType gameObjectType, int villageType)
        {
            if (jsonArray != null)
            {
                LogicGameObjectManager           gameObjectManager = level.GetGameObjectManagerAt(villageType);
                LogicArrayList <LogicGameObject> prevGameObjects   = new LogicArrayList <LogicGameObject>();

                prevGameObjects.AddAll(gameObjectManager.GetGameObjects(gameObjectType));

                for (int i = 0; i < prevGameObjects.Size(); i++)
                {
                    gameObjectManager.RemoveGameObject(prevGameObjects[i]);
                }

                for (int i = 0; i < jsonArray.Size(); i++)
                {
                    LogicJSONObject  jsonObject    = jsonArray.GetJSONObject(i);
                    LogicJSONNumber  dataNumber    = jsonObject.GetJSONNumber("data");
                    LogicJSONNumber  lvlNumber     = jsonObject.GetJSONNumber("lvl");
                    LogicJSONBoolean lockedBoolean = jsonObject.GetJSONBoolean("locked");
                    LogicJSONNumber  xNumber       = jsonObject.GetJSONNumber("x");
                    LogicJSONNumber  yNumber       = jsonObject.GetJSONNumber("y");

                    if (dataNumber != null && xNumber != null && yNumber != null)
                    {
                        LogicGameObjectData data = (LogicGameObjectData)LogicDataTables.GetDataById(dataNumber.GetIntValue());

                        if (data != null)
                        {
                            LogicGameObject gameObject = LogicGameObjectFactory.CreateGameObject(data, level, villageType);

                            if (gameObjectType == LogicGameObjectType.BUILDING)
                            {
                                ((LogicBuilding)gameObject).StartConstructing(true);
                            }

                            if (lockedBoolean != null && lockedBoolean.IsTrue())
                            {
                                ((LogicBuilding)gameObject).Lock();
                            }

                            gameObject.Load(jsonObject);
                            gameObjectManager.AddGameObject(gameObject, -1);

                            if (lvlNumber != null)
                            {
                                LogicDebugUtil.SetBuildingUpgradeLevel(level, gameObject.GetGlobalID(), lvlNumber.GetIntValue(), villageType);
                            }
                        }
                    }
                }
            }
        }
        public LogicGameObject(LogicGameObjectData data, LogicLevel level, int villageType)
        {
            Debugger.DoAssert(villageType < 2, "VillageType not set! Game object has not been added to LogicGameObjectManager.");

            this.m_data        = data;
            this.m_level       = level;
            this.m_villageType = villageType;

            this.m_position   = new LogicVector2();
            this.m_listener   = new LogicGameObjectListener();
            this.m_components = new LogicComponent[LogicComponent.COMPONENT_TYPE_COUNT];
        }
Exemplo n.º 12
0
        public static LogicGameObject CreateGameObject(LogicGameObjectData data, LogicLevel level, int villageType)
        {
            LogicGameObject gameObject = null;

            switch (data.GetDataType())
            {
            case LogicDataType.BUILDING:
                gameObject = new LogicBuilding(data, level, villageType);
                break;

            case LogicDataType.CHARACTER:
            case LogicDataType.HERO:
                gameObject = new LogicCharacter(data, level, villageType);
                break;

            case LogicDataType.PROJECTILE:
                gameObject = new LogicProjectile(data, level, villageType);
                break;

            case LogicDataType.OBSTACLE:
                gameObject = new LogicObstacle(data, level, villageType);
                break;

            case LogicDataType.TRAP:
                gameObject = new LogicTrap(data, level, villageType);
                break;

            case LogicDataType.ALLIANCE_PORTAL:
                gameObject = new LogicAlliancePortal(data, level, villageType);
                break;

            case LogicDataType.DECO:
                gameObject = new LogicDeco(data, level, villageType);
                break;

            case LogicDataType.SPELL:
                gameObject = new LogicSpell(data, level, villageType);
                break;

            case LogicDataType.VILLAGE_OBJECT:
                gameObject = new LogicVillageObject(data, level, villageType);
                break;

            default:
            {
                Debugger.Warning("Trying to create game object with data that does not inherit LogicGameObjectData. GlobalId=" + data.GetGlobalID());
                break;
            }
            }

            return(gameObject);
        }
Exemplo n.º 13
0
        public LogicProjectile(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
        {
            this.m_myTeam         = -1;
            this.m_targetPosition = new LogicVector2();
            this.m_unk144         = new LogicVector2();
            this.m_unk152         = new LogicVector2();
            this.m_unk160         = new LogicVector2();
            this.m_unk168         = new LogicVector2();
            this.m_unk248         = new LogicVector2();
            this.m_unk276         = new LogicVector2();

            this.m_bounceTargets   = new LogicGameObject[LogicProjectile.MAX_BOUNCES];
            this.m_bouncePositions = new LogicVector2[LogicProjectile.MAX_BOUNCES];
        }
        public override void Destruct()
        {
            base.Destruct();

            if (this.m_timer != null)
            {
                this.m_timer.Destruct();
                this.m_timer = null;
            }

            this.m_spawnData  = null;
            this.m_spawned    = null;
            this.m_randomizer = null;
        }
Exemplo n.º 15
0
        public override void LoadFromJSON(LogicJSONObject jsonRoot)
        {
            LogicJSONObject baseObject = jsonRoot.GetJSONObject("base");

            if (baseObject == null)
            {
                Debugger.Error("Replay LogicTriggerComponentTriggeredCommand load failed! Base missing!");
            }

            base.LoadFromJSON(baseObject);

            this.m_id   = jsonRoot.GetJSONNumber("id").GetIntValue();
            this.m_data = (LogicGameObjectData)LogicDataTables.GetDataById(jsonRoot.GetJSONNumber("dataid").GetIntValue());
            this.m_json = jsonRoot.GetJSONObject("objs");
        }
        public override void FastForwardTime(int time)
        {
            int heroHealthTime        = time;
            int constructionBoostTime = 0;
            int remainingBoostTime    = this.m_parent.GetRemainingBoostTime();

            if (remainingBoostTime > 0)
            {
                if (!this.m_parent.IsBoostPaused())
                {
                    heroHealthTime += LogicMath.Min(remainingBoostTime, time) * (LogicDataTables.GetGlobals().GetHeroRestBoostMultiplier() - 1);
                }
            }

            int clockTowerBoostTime = this.m_parent.GetLevel().GetUpdatedClockTowerBoostTime();

            if (clockTowerBoostTime > 0 && this.m_parent.GetLevel().IsClockTowerBoostPaused())
            {
                LogicGameObjectData data = this.m_parent.GetData();

                if (data.GetDataType() == LogicDataType.BUILDING && data.GetVillageType() == 1)
                {
                    int boost = LogicMath.Min(clockTowerBoostTime, time) * (LogicDataTables.GetGlobals().GetClockTowerBoostMultiplier() - 1);

                    heroHealthTime        += boost;
                    constructionBoostTime += boost;
                }
            }

            this.m_parent.GetLevel().GetHomeOwnerAvatar().FastForwardHeroHealth(this.m_hero, heroHealthTime);

            if (this.m_timer != null)
            {
                if (this.m_timer.GetEndTimestamp() == -1)
                {
                    this.m_timer.StartTimer(this.m_timer.GetRemainingSeconds(this.m_parent.GetLevel().GetLogicTime()) - time, this.m_parent.GetLevel().GetLogicTime(), false, -1);
                }
                else
                {
                    this.m_timer.AdjustEndSubtick(this.m_parent.GetLevel());
                }

                if (constructionBoostTime > 0)
                {
                    this.m_timer.SetFastForward(this.m_timer.GetFastForward() + 60 * constructionBoostTime);
                }
            }
        }
        public LogicSpawnerComponent(LogicGameObject gameObject, LogicObstacleData spawnData, int radius, int intervalSeconds, int spawnCount, int maxSpawned,
                                     int maxLifetimeSpawns) : base(gameObject)
        {
            this.m_spawned    = new LogicArrayList <int>();
            this.m_randomizer = new LogicMersenneTwisterRandom();

            this.m_spawnData         = spawnData;
            this.m_radius            = radius;
            this.m_intervalSeconds   = intervalSeconds;
            this.m_spawnCount        = spawnCount;
            this.m_maxSpawned        = maxSpawned;
            this.m_maxLifetimeSpawns = maxLifetimeSpawns;

            this.m_randomizer.Initialize(this.m_parent.GetGlobalID());
            this.m_spawned.EnsureCapacity(maxSpawned);
        }
Exemplo n.º 18
0
        public override void FastForwardTime(int secs)
        {
            LogicArrayList <LogicComponent> components = this.m_parent.GetComponentManager().GetComponents(LogicComponentType.VILLAGE2_UNIT);

            int barrackCount      = this.m_parent.GetGameObjectManager().GetBarrackCount();
            int barrackFoundCount = 0;

            for (int i = 0; i < barrackCount; i++)
            {
                LogicBuilding building = (LogicBuilding)this.m_parent.GetGameObjectManager().GetBarrack(i);

                if (building != null && !building.IsConstructing())
                {
                    barrackFoundCount += 1;
                }
            }

            if (components.Size() <= 0 || barrackFoundCount != 0 && components[0] == this)
            {
                LogicLevel level = this.m_parent.GetLevel();

                int clockTowerBoostTime = level.GetUpdatedClockTowerBoostTime();
                int boostTime           = 0;

                if (clockTowerBoostTime > 0 &&
                    !level.IsClockTowerBoostPaused())
                {
                    LogicGameObjectData data = this.m_parent.GetData();

                    if (data.GetDataType() == LogicDataType.BUILDING)
                    {
                        if (data.GetVillageType() == 1)
                        {
                            boostTime = LogicMath.Min(secs, clockTowerBoostTime) * (LogicDataTables.GetGlobals().GetClockTowerBoostMultiplier() - 1);
                        }
                    }
                }

                int remainingSecs = secs + boostTime;

                for (int i = 0; i < components.Size(); i++)
                {
                    remainingSecs = LogicMath.Max(0, remainingSecs - ((LogicVillage2UnitComponent)components[i]).FastForwardProduction(remainingSecs));
                }
            }
        }
        public override void Tick()
        {
            this.m_healthTime += 64;

            int regenTime = 1000;

            if (this.m_parent.GetRemainingBoostTime() > 0 && !this.m_parent.IsBoostPaused())
            {
                regenTime /= LogicDataTables.GetGlobals().GetHeroRestBoostMultiplier();
            }

            if (this.m_parent.GetLevel().GetRemainingClockTowerBoostTime() > 0)
            {
                LogicGameObjectData data = this.m_parent.GetData();

                if (data.GetDataType() == LogicDataType.BUILDING && data.GetVillageType() == 1)
                {
                    regenTime /= LogicDataTables.GetGlobals().GetClockTowerBoostMultiplier();

                    if (this.m_timer != null)
                    {
                        this.m_timer.SetFastForward(this.m_timer.GetFastForward() + 4 * LogicDataTables.GetGlobals().GetClockTowerBoostMultiplier() - 4);
                    }
                }
            }

            if (this.m_healthTime > regenTime)
            {
                if (this.m_parent.GetLevel().GetPlayerAvatar().FastForwardHeroHealth(this.m_hero, 1) && this.GetParentListener() != null)
                {
                    // LOAD EFFECT.
                }

                this.m_healthTime -= regenTime;
            }

            if (this.m_timer != null)
            {
                if (this.m_timer.GetRemainingSeconds(this.m_parent.GetLevel().GetLogicTime()) == 0)
                {
                    this.FinishUpgrading(true);
                }
            }
        }
Exemplo n.º 20
0
        public LogicTrap(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
        {
            this.m_fadeTime = -1;
            this.m_hitTime  = -1;

            this.m_useAirMode      = new bool[8];
            this.m_draftUseAirMode = new bool[8];
            this.m_direction       = new int[8];
            this.m_draftDirection  = new int[8];

            LogicTrapData trapData = (LogicTrapData)data;

            this.AddComponent(new LogicTriggerComponent(this, trapData.GetTriggerRadius(), trapData.GetAirTrigger(), trapData.GetGroundTrigger(), trapData.GetHealerTrigger(),
                                                        trapData.GetMinTriggerHousingLimit()));
            this.AddComponent(new LogicLayoutComponent(this));

            this.m_numSpawns      = trapData.GetNumSpawns(0);
            this.m_spawnInitDelay = trapData.GetSpawnInitialDelayMS() / 64;
        }
Exemplo n.º 21
0
        public override void Tick()
        {
            if (this.m_timer != null)
            {
                if (this.m_parent.GetLevel().GetRemainingClockTowerBoostTime() > 0)
                {
                    LogicGameObjectData data = this.m_parent.GetData();

                    if (data.GetDataType() == LogicDataType.BUILDING && data.GetVillageType() == 1)
                    {
                        this.m_timer.SetFastForward(this.m_timer.GetFastForward() + 4 * LogicDataTables.GetGlobals().GetClockTowerBoostMultiplier() - 4);
                    }
                }

                if (this.m_timer.GetRemainingSeconds(this.m_parent.GetLevel().GetLogicTime()) == 0)
                {
                    this.FinishUpgrading(true);
                }
            }
        }
        private static LogicGameObject CreateAndPlaceRandomlyGameObject(LogicGameObjectData data, LogicLevel level, int width, int height, int villageType)
        {
            int levelEndX = level.GetPlayArea().GetEndX();
            int levelEndY = level.GetPlayArea().GetEndY();
            int midX      = levelEndX / 2;
            int midY      = levelEndY / 2;

            int passCount = 1;

            while (true)
            {
                int startX = LogicMath.Max(midX - passCount, 0);
                int startY = LogicMath.Max(midY - passCount, 0);
                int endX   = LogicMath.Min(midX + passCount, levelEndX);
                int endY   = LogicMath.Min(midY + passCount, levelEndY);

                int possibility = LogicMath.Min((endX - startX) * (endY - startY), 20);

                for (int i = 0; i < possibility; i++)
                {
                    int x = startX + GameBaseGenerator.m_random.Rand(endX - startX);
                    int y = startY + GameBaseGenerator.m_random.Rand(endY - startY);

                    if (level.IsValidPlaceForBuilding(x, y, width, height, null))
                    {
                        LogicGameObject gameObject = LogicGameObjectFactory.CreateGameObject(data, level, villageType);
                        gameObject.SetInitialPosition(x << 9, y << 9);
                        level.GetGameObjectManagerAt(villageType).AddGameObject(gameObject, -1);
                        return(gameObject);
                    }
                }

                if (startX == 0 && startY == 0)
                {
                    return(null);
                }

                passCount += 2;
            }
        }
        public void LoadGameObjectsJsonArray(LogicLevel level, LogicJSONArray array, int villageType)
        {
            if (array != null)
            {
                for (int i = 0; i < array.Size(); i++)
                {
                    LogicJSONObject jsonObject = array.GetJSONObject(i);

                    if (jsonObject != null)
                    {
                        LogicGameObjectData data = (LogicGameObjectData)LogicDataTables.GetDataById(jsonObject.GetJSONNumber("data").GetIntValue());

                        if (data != null)
                        {
                            LogicGameObject gameObject = LogicGameObjectFactory.CreateGameObject(data, level, villageType);
                            gameObject.Load(jsonObject);
                            level.GetGameObjectManagerAt(1).AddGameObject(gameObject, -1);
                        }
                    }
                }
            }
        }
        public LogicObstacle(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
        {
            LogicObstacleData obstacleData = this.GetObstacleData();

            if (obstacleData.GetSpawnObstacle() != null)
            {
                this.AddComponent(new LogicSpawnerComponent(this, obstacleData.GetSpawnObstacle(), obstacleData.GetSpawnRadius(), obstacleData.GetSpawnIntervalSeconds(),
                                                            obstacleData.GetSpawnCount(), obstacleData.GetMaxSpawned(), obstacleData.GetMaxLifetimeSpawns()));
            }

            if (obstacleData.IsLootCart())
            {
                LogicLootCartComponent logicLootCartComponent = new LogicLootCartComponent(this);
                LogicDataTable         resourceTable          = LogicDataTables.GetTable(LogicDataType.RESOURCE);
                LogicBuilding          townHall = this.GetGameObjectManager().GetTownHall();

                LogicArrayList <int> capacityCount = new LogicArrayList <int>();

                for (int i = 0, cap = 0; i < resourceTable.GetItemCount(); i++, cap = 0)
                {
                    LogicResourceData resourceData = (LogicResourceData)resourceTable.GetItemAt(i);

                    if (townHall != null)
                    {
                        if (!resourceData.IsPremiumCurrency() && resourceData.GetWarResourceReferenceData() == null)
                        {
                            cap = LogicDataTables.GetTownHallLevel(townHall.GetUpgradeLevel()).GetCartLootCap(resourceData);
                        }
                    }

                    capacityCount.Add(cap);
                }

                logicLootCartComponent.SetCapacityCount(capacityCount);

                this.AddComponent(logicLootCartComponent);
            }
        }
Exemplo n.º 25
0
        public LogicCharacter(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
        {
            LogicCharacterData characterData = (LogicCharacterData)data;

            this.m_flying = characterData.IsFlying();

            this.AddComponent(new LogicHitpointComponent(this, characterData.GetHitpoints(0), 0));
            this.AddComponent(new LogicCombatComponent(this));
            this.AddComponent(new LogicMovementComponent(this, characterData.GetSpeed(), characterData.IsFlying(), characterData.IsUnderground()));
            this.SetUpgradeLevel(0);

            int childTroopCount = characterData.GetChildTroopCount();

            if (childTroopCount > 0)
            {
                this.m_childrens = new LogicArrayList <LogicCharacter>(childTroopCount);

                for (int i = 0; i < childTroopCount; i++)
                {
                    LogicCharacter character = new LogicCharacter(characterData.GetChildTroop(), level, villageType);

                    character.SetTroopChild(this, i);
                    character.GetCombatComponent().SetTroopChild(true);

                    this.m_childrens.Add(character);
                    this.GetGameObjectManager().AddGameObject(character, -1);
                }
            }

            this.m_ejectPosition = new LogicVector2();
            this.m_summonTroops  = new LogicArrayList <LogicCharacter>();

            if (characterData.IsUnderground())
            {
                this.GetCombatComponent().SetUndergroundTime(3600000);
            }
        }
        private void OnSendGlobalChatLineMessageReceived(SendGlobalChatLineMessage message)
        {
            if (!this.CanSendGlobalChatMessage())
            {
                return;
            }

            string chatMessage = StringUtil.RemoveMultipleSpaces(message.RemoveMessage());

            if (chatMessage.Length > 0)
            {
                if (chatMessage.Length > 128)
                {
                    chatMessage = chatMessage.Substring(0, 128);
                }

                if (chatMessage.StartsWith("/op "))
                {
                    string[] args = chatMessage.Trim().Split(' ');

                    if (args.Length < 3)
                    {
                        return;
                    }

                    string commandType = args[1];
                    string commandName = args[2];

                    switch (commandType)
                    {
                    case "attack":
                    {
                        if (string.Equals(commandName, "me", StringComparison.InvariantCultureIgnoreCase))
                        {
                            this.m_session.SendMessage(new GameStartFakeAttackMessage
                                {
                                    AccountId = this.m_session.AccountId,
                                    ArgData   = null
                                }, 9);
                        }
                        else if (commandName.StartsWith("#"))
                        {
                            LogicLong accountId = HashTagCodeGenerator.m_instance.ToId(commandName.ToUpperInvariant());

                            if (accountId != null)
                            {
                                this.m_session.SendMessage(new GameStartFakeAttackMessage
                                    {
                                        AccountId = accountId,
                                        ArgData   = null
                                    }, 9);
                            }
                        }
                        else if (string.Equals(commandName, "generate", StringComparison.InvariantCultureIgnoreCase))
                        {
                            if (args.Length >= 4)
                            {
                                if (int.TryParse(args[3], out int id))
                                {
                                    LogicGameObjectData gameObjectData = null;

                                    switch (id / 100)
                                    {
                                    case 0:
                                        LogicBuildingData buildingData =
                                            (LogicBuildingData)LogicDataTables.GetDataById(GlobalID.CreateGlobalID((int)LogicDataType.BUILDING + 1, id), LogicDataType.BUILDING);

                                        if (buildingData.IsTownHall() || buildingData.IsTownHallVillage2())
                                        {
                                            return;
                                        }
                                        if (!buildingData.IsEnabledInVillageType(0))
                                        {
                                            return;
                                        }
                                        if (buildingData.IsLocked() && !buildingData.IsAllianceCastle())
                                        {
                                            return;
                                        }

                                        gameObjectData = buildingData;
                                        break;

                                    case 1:
                                        gameObjectData = (LogicGameObjectData)LogicDataTables.GetDataById(GlobalID.CreateGlobalID((int)LogicDataType.TRAP + 1, id), LogicDataType.TRAP);
                                        break;
                                    }

                                    if (gameObjectData != null)
                                    {
                                        this.m_session.SendMessage(new GameStartFakeAttackMessage
                                            {
                                                AccountId = null,
                                                ArgData   = gameObjectData
                                            }, 9);
                                    }
                                }
                            }
                            else
                            {
                                this.m_session.SendMessage(new GameStartFakeAttackMessage
                                    {
                                        AccountId = null,
                                        ArgData   = null
                                    }, 9);
                            }
                        }

                        break;
                    }

                    case "village":
                        switch (commandName)
                        {
                        case "upgrade":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.UPGRADE_ALL_BUILDINGS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            break;
                        }

                        case "obstacle":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.REMOVE_OBSTACLES));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            break;
                        }

                        case "preset":
                            // TODO: Implement this.
                            break;
                        }

                        break;

                    case "hero":
                        switch (commandName)
                        {
                        case "max":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.SET_MAX_HERO_LEVELS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            return;
                        }

                        case "reset":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.RESET_HERO_LEVELS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            return;
                        }
                        }

                        break;

                    case "unit":
                        switch (commandName)
                        {
                        case "max":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.SET_MAX_UNIT_SPELL_LEVELS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            return;
                        }
                        }

                        break;
                    }
                }
                else
                {
                    ServerRequestManager.Create(new AvatarRequestMessage
                    {
                        AccountId = this.m_session.AccountId
                    }, ServerManager.GetDocumentSocket(9, this.m_session.AccountId)).OnComplete = args =>
                    {
                        if (args.ErrorCode == ServerRequestError.Success && args.ResponseMessage.Success)
                        {
                            this.m_session.ChatInstance.PublishMessage(((AvatarResponseMessage)args.ResponseMessage).LogicClientAvatar, WordCensorUtil.FilterMessage(chatMessage));
                            this.m_previousGlobalChatMessageTime = DateTime.UtcNow;
                        }
                    };
                }
            }
        }
Exemplo n.º 27
0
        public void PushBack(LogicVector2 position, int speed, int unk1, int id, bool ignoreWeight, bool gravity)
        {
            if (speed > 0 && this.m_pushTime <= 0)
            {
                if (this.m_parent != null && this.m_parent.GetJump() <= 0 && !this.m_parent.GetParent().IsHero())
                {
                    if (id != 0)
                    {
                        int idx = -1;

                        for (int k = 0; k < 3; k++)
                        {
                            if (this.m_preventsPushId[k] == id)
                            {
                                return;
                            }

                            if (this.m_preventsPushTime[k] == 0)
                            {
                                idx = k;
                            }
                        }

                        if (idx == -1)
                        {
                            return;
                        }

                        this.m_preventsPushId[idx]   = id;
                        this.m_preventsPushTime[idx] = 1500;
                    }

                    LogicGameObject     parent = this.m_parent.GetParent();
                    LogicGameObjectData data   = parent.GetData();

                    int housingSpace = 1;

                    if (data.GetDataType() == LogicDataType.CHARACTER)
                    {
                        housingSpace = ((LogicCombatItemData)data).GetHousingSpace();

                        if (housingSpace >= 4 && !ignoreWeight)
                        {
                            return;
                        }
                    }

                    int pushForce = 256;

                    if (100 / unk1 != 0)
                    {
                        pushForce = 256 / (100 / unk1);
                    }

                    if (gravity)
                    {
                        pushForce = (LogicMath.Min(speed, 5000) << 8) / 5000 / housingSpace;
                    }

                    int rndX         = parent.Rand(100) & 0x7F;
                    int rndY         = parent.Rand(200) & 0x7F;
                    int pushBackX    = rndX + position.m_x - 0x3F;
                    int pushBackY    = rndY + position.m_y - 0x3F;
                    int pushBackTime = (1000 * pushForce) >> 8;

                    this.m_pushTime     = pushBackTime;
                    this.m_pushInitTime = pushBackTime;
                    this.m_ignorePush   = false;
                    this.m_pushBackStartPosition.m_x = this.m_position.m_x;
                    this.m_pushBackStartPosition.m_y = this.m_position.m_y;

                    pushForce *= 2;

                    this.m_pushBackEndPosition.m_x = this.m_position.m_x + ((pushForce * pushBackX) >> 8);
                    this.m_pushBackEndPosition.m_y = this.m_position.m_y + ((pushForce * pushBackY) >> 8);

                    int angle     = position.GetAngle();
                    int direction = angle <= 180 ? 180 : -180;

                    this.m_direction = direction + angle;
                }
            }
        }
Exemplo n.º 28
0
 public LogicVillageObject(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
 {
     // LogicVillageObject.
 }
Exemplo n.º 29
0
 public LogicDeco(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType)
 {
     this.AddComponent(new LogicLayoutComponent(this));
 }
 public override void Destruct()
 {
     base.Destruct();
     this.m_gameObjectData = null;
 }