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; }
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)); } } } } }
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); }
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); }
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); }
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]; }
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); }
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; }
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); }
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); } } }
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; }
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); } }
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; } }; } } }
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; } } }
public LogicVillageObject(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType) { // LogicVillageObject. }
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; }