public static void ExecuteServerCommandsInOfflineMode(GameAvatar document) { if (document.ServerCommands.Size() != 0) { LogicGameMode logicGameMode = new LogicGameMode(); LogicLevel logicLevel = logicGameMode.GetLevel(); logicLevel.SetVisitorAvatar(document.LogicClientAvatar); try { for (int i = 0; i < document.ServerCommands.Size(); i++) { int result = document.ServerCommands[i].Execute(logicLevel); if (result == 0) { document.ServerCommands.Remove(i--); } } GameAvatarManager.Save(document); } catch (Exception exception) { Logging.Error("GameAvatarManager.executeServerCommandsInOfflineMode: server command execution in offline mode failed: " + exception); } } }
public override int Execute(LogicLevel level) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (level.GetVillageType() == 1) { LogicGameMode gameMode = level.GetGameMode(); if (!gameMode.IsInAttackPreparationMode()) { if (gameMode.GetState() != 5) { return(-9); } } if (this.m_oldUnitData != null && this.m_newUnitData != null && gameMode.GetCalendar().IsProductionEnabled(this.m_newUnitData)) { if (!this.m_newUnitData.IsUnlockedForBarrackLevel(playerAvatar.GetVillage2BarrackLevel())) { if (gameMode.GetState() != 7) { return(-7); } } int oldUnitCount = playerAvatar.GetUnitCountVillage2(this.m_oldUnitData); int oldUnitsInCamp = this.m_oldUnitData.GetUnitsInCamp(playerAvatar.GetUnitUpgradeLevel(this.m_oldUnitData)); if (oldUnitCount >= oldUnitsInCamp) { int newUnitCount = playerAvatar.GetUnitCountVillage2(this.m_newUnitData); int newUnitsInCamp = this.m_newUnitData.GetUnitsInCamp(playerAvatar.GetUnitUpgradeLevel(this.m_newUnitData)); playerAvatar.SetUnitCountVillage2(this.m_oldUnitData, oldUnitCount - oldUnitsInCamp); playerAvatar.SetUnitCountVillage2(this.m_newUnitData, newUnitCount + newUnitsInCamp); LogicArrayList <LogicDataSlot> unitsNew = playerAvatar.GetUnitsNewVillage2(); for (int i = 0; i < unitsNew.Size(); i++) { LogicDataSlot slot = unitsNew[i]; if (slot.GetCount() > 0) { playerAvatar.CommodityCountChangeHelper(8, slot.GetData(), -slot.GetCount()); } } return(0); } return(-23); } return(-7); } return(-10); }
public override int Execute(LogicLevel level) { if (level.GetVillageType() == 0) { LogicGameMode gameMode = level.GetGameMode(); if (gameMode.GetShieldRemainingSeconds() <= 0) { gameMode.SetShieldRemainingSeconds(0); gameMode.SetGuardRemainingSeconds(0); gameMode.GetLevel().GetHome().GetChangeListener().ShieldActivated(0, 0); } else { int guardTime = gameMode.GetGuardRemainingSeconds(); gameMode.SetShieldRemainingSeconds(0); gameMode.SetGuardRemainingSeconds(guardTime); gameMode.SetPersonalBreakCooldownSeconds(LogicDataTables.GetGlobals().GetPersonalBreakLimitSeconds()); level.GetHome().GetChangeListener().ShieldActivated(0, guardTime); } return(0); } return(-32); }
public ServerCommandStorage(GameMode gameMode, LogicGameMode logicGameMode) { this.m_gameMode = gameMode; this.m_logicGameMode = logicGameMode; this.m_bufferedServerCommands = new LogicArrayList <LogicServerCommand>(); this.m_executedServerCommands = new LogicArrayList <LogicServerCommand>(); }
private GameMode(BattleSession session) { this.m_session = session; this.m_logicWatch = new Stopwatch(); this.m_logicGameMode = new LogicGameMode(); this.m_serverCommandStorage = new ServerCommandStorage(this, this.m_logicGameMode); this.m_gameListener = new GameListener(this); this.m_logicGameMode.GetLevel().SetGameListener(this.m_gameListener); this.m_logicGameMode.GetCommandManager().SetListener(this.m_serverCommandStorage); }
public override void LoadFromSnapshot(LogicJSONObject jsonObject) { LogicLevel level = this.m_parent.GetLevel(); LogicGameMode gameMode = level.GetGameMode(); if (gameMode.GetVisitType() == 1 || gameMode.GetVisitType() == 4 || gameMode.GetVisitType() == 5) { int idx = 7; if (gameMode.GetVisitType() != 4 || !level.IsArrangedWar()) { int warLayout = level.GetWarLayout(); if (warLayout < 0 || !level.IsWarBase()) { idx = level.GetActiveLayout(); } else { idx = warLayout; } } LogicJSONNumber xNumber = jsonObject.GetJSONNumber(this.GetLayoutVariableNameX(idx, false)); LogicJSONNumber yNumber = jsonObject.GetJSONNumber(this.GetLayoutVariableNameY(idx, false)); if (xNumber != null && yNumber != null) { this.m_parent.SetInitialPosition(xNumber.GetIntValue() << 9, yNumber.GetIntValue() << 9); Debugger.DoAssert(idx < 8, "Layout index out of bands"); this.m_layoutPosition[idx].Set(xNumber.GetIntValue(), yNumber.GetIntValue()); } } }
public ServerCommandStorage(GameMode gameMode, LogicGameMode logicGameMode) { this.m_gameMode = gameMode; this.m_logicGameMode = logicGameMode; }
public GameMode() { this.m_logicGameMode = new LogicGameMode(); }
public override int Execute(LogicLevel level) { if (this.m_shieldData != null) { int cooldownSecs = level.GetCooldownManager().GetCooldownSeconds(this.m_shieldData.GetGlobalID()); if (cooldownSecs <= 0) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (this.m_shieldData.GetScoreLimit() > playerAvatar.GetScore() || this.m_shieldData.GetScoreLimit() <= 0) { if (playerAvatar.HasEnoughDiamonds(this.m_shieldData.GetDiamondsCost(), true, level)) { LogicGameMode gameMode = level.GetGameMode(); playerAvatar.UseDiamonds(this.m_shieldData.GetDiamondsCost()); playerAvatar.GetChangeListener().DiamondPurchaseMade(6, this.m_shieldData.GetGlobalID(), this.m_shieldData.GetTimeHours() * 3600, this.m_shieldData.GetDiamondsCost(), level.GetVillageType()); int shieldTime = gameMode.GetShieldRemainingSeconds() + this.m_shieldData.GetTimeHours() * 3600; int guardTime = gameMode.GetGuardRemainingSeconds(); int personalBreak = 0; if (this.m_shieldData.GetTimeHours() <= 0) { if (shieldTime > 0) { return(-2); } guardTime += this.m_shieldData.GetGuardTimeHours() * 3600; } else { LogicLeagueData leagueData = playerAvatar.GetLeagueTypeData(); if (playerAvatar.GetAttackShieldReduceCounter() != 0) { playerAvatar.SetAttackShieldReduceCounter(0); playerAvatar.GetChangeListener().AttackShieldReduceCounterChanged(0); } if (playerAvatar.GetDefenseVillageGuardCounter() != 0) { playerAvatar.SetDefenseVillageGuardCounter(0); playerAvatar.GetChangeListener().DefenseVillageGuardCounterChanged(0); } guardTime += leagueData.GetVillageGuardInMins() * 60; } if (shieldTime <= 0) { personalBreak = LogicMath.Min(LogicDataTables.GetGlobals().GetPersonalBreakLimitSeconds() + this.m_shieldData.GetGuardTimeHours() * 3600, gameMode.GetPersonalBreakCooldownSeconds() + this.m_shieldData.GetGuardTimeHours() * 3600); } else { personalBreak = shieldTime + LogicDataTables.GetGlobals().GetPersonalBreakLimitSeconds(); } gameMode.SetPersonalBreakCooldownSeconds(personalBreak); gameMode.SetShieldRemainingSeconds(shieldTime); gameMode.SetGuardRemainingSeconds(guardTime); level.GetHome().GetChangeListener().ShieldActivated(shieldTime, guardTime); level.GetCooldownManager().AddCooldown(this.m_shieldData.GetGlobalID(), this.m_shieldData.GetCooldownSecs()); return(0); } } } } return(-1); }
/// <summary> /// Executes this command. /// </summary> public override int Execute(LogicLevel level) { if (this._shieldData != null) { int cooldownSecs = level.GetCooldownManager().GetCooldownSeconds(this._shieldData.GetGlobalID()); if (cooldownSecs <= 0) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (this._shieldData.GetScoreLimit() > playerAvatar.GetScore() || this._shieldData.GetScoreLimit() <= 0) { if (playerAvatar.HasEnoughDiamonds(this._shieldData.GetDiamondsCost(), true, level)) { LogicGameMode gameMode = level.GetGameMode(); playerAvatar.UseDiamonds(this._shieldData.GetDiamondsCost()); int shieldTime = gameMode.GetShieldRemainingSeconds() + this._shieldData.TimeH * 3600; int guardTime = gameMode.GetGuardRemainingSeconds(); int maintenanceTime = 0; if (this._shieldData.TimeH <= 0) { if (shieldTime > 0) { return(-2); } guardTime += this._shieldData.GuardTimeH * 3600; } else { LogicLeagueData leagueData = playerAvatar.GetLeagueTypeData(); if (playerAvatar.GetShieldCostAmount() != 0) { playerAvatar.SetShieldCostAmount(0); } guardTime += leagueData.VillageGuardInMins * 60; } if (shieldTime <= 0) { maintenanceTime = LogicMath.Min(LogicDataTables.GetGlobals().GetPersonalBreakLimitSeconds() + this._shieldData.GuardTimeH * 3600, gameMode.GetMaintenanceRemainingSeconds() + this._shieldData.GuardTimeH * 3600); } else { maintenanceTime = shieldTime + LogicDataTables.GetGlobals().GetPersonalBreakLimitSeconds(); } gameMode.SetMaintenanceRemainingSeconds(maintenanceTime); gameMode.SetShieldRemainingSeconds(shieldTime); gameMode.SetGuardRemainingSeconds(guardTime); level.GetCooldownManager().AddCooldown(this._shieldData.GetGlobalID(), this._shieldData.GetCooldownSecs()); return(0); } } } } return(-1); }
public static LogicClientHome GenerateBase(LogicGameObjectData gameObjectData) { LogicClientHome logicClientHome = new LogicClientHome(); LogicGameMode logicGameMode = new LogicGameMode(); LogicLevel logicLevel = logicGameMode.GetLevel(); LogicGameObjectManager logicGameObjectManager = logicLevel.GetGameObjectManagerAt(0); logicLevel.SetLoadingVillageType(-1); logicLevel.SetVillageType(0); logicLevel.SetExperienceVersion(1); logicLevel.SetHomeOwnerAvatar(GameBaseGenerator.HomeOwnerAvatar); LogicBuilding townHall = new LogicBuilding(LogicDataTables.GetTownHallData(), logicLevel, 0); townHall.SetInitialPosition((LogicLevel.TILEMAP_SIZE_X / 2 - townHall.GetWidthInTiles() / 2) << 9, (LogicLevel.TILEMAP_SIZE_Y / 2 - townHall.GetHeightInTiles() / 2) << 9); townHall.SetUpgradeLevel(townHall.GetBuildingData().GetUpgradeLevelCount() - 1); logicGameObjectManager.AddGameObject(townHall, -1); LogicTownhallLevelData townhallLevelData = LogicDataTables.GetTownHallLevel(townHall.GetUpgradeLevel()); if (gameObjectData == null) { LogicArrayList <LogicGameObject> scrambler = new LogicArrayList <LogicGameObject>(); for (int i = 0; i < GameBaseGenerator.m_defenseBuildingArray.Size(); i++) { LogicBuildingData buildingData = GameBaseGenerator.m_defenseBuildingArray[i]; for (int j = townhallLevelData.GetUnlockedBuildingCount(buildingData); j > 0; j--) { LogicBuilding logicBuilding = (LogicBuilding)GameBaseGenerator.CreateAndPlaceRandomlyGameObject(buildingData, logicLevel, buildingData.GetWidth(), buildingData.GetHeight(), 0); if (logicBuilding != null) { logicBuilding.SetLocked(false); logicBuilding.SetUpgradeLevel(buildingData.GetUpgradeLevelCount() - 1); scrambler.Add(logicBuilding); int upgradeLevel = buildingData.GetUpgradeLevelCount() - 1; int minUpgradeLevelForGearUp = buildingData.GetMinUpgradeLevelForGearUp(); if (minUpgradeLevelForGearUp > -1 && upgradeLevel >= minUpgradeLevelForGearUp) { if (GameBaseGenerator.m_random.Rand(100) >= 50) { logicBuilding.SetGearLevel(1); } } if (buildingData.GetAttackerItemData(upgradeLevel).GetTargetingConeAngle() != 0) { logicBuilding.GetCombatComponent().ToggleAimAngle(buildingData.GetAimRotateStep() * GameBaseGenerator.m_random.Rand(360 / buildingData.GetAimRotateStep()), 0, false); } if (buildingData.GetAttackerItemData(upgradeLevel).HasAlternativeAttackMode()) { if (minUpgradeLevelForGearUp > -1 && logicBuilding.GetGearLevel() != 1) { continue; } if (GameBaseGenerator.m_random.Rand(100) >= 50) { logicBuilding.GetCombatComponent().ToggleAttackMode(0, false); } } } } } for (int i = 0; i < GameBaseGenerator.m_otherBuildingArray.Size(); i++) { LogicBuildingData buildingData = GameBaseGenerator.m_otherBuildingArray[i]; for (int j = townhallLevelData.GetUnlockedBuildingCount(buildingData); j > 0; j--) { LogicBuilding logicBuilding = (LogicBuilding)GameBaseGenerator.CreateAndPlaceRandomlyGameObject(buildingData, logicLevel, buildingData.GetWidth(), buildingData.GetHeight(), 0); if (logicBuilding != null) { logicBuilding.SetLocked(false); logicBuilding.SetUpgradeLevel(buildingData.GetUpgradeLevelCount() - 1); scrambler.Add(logicBuilding); } } } for (int i = 0; i < GameBaseGenerator.m_trapArray.Size(); i++) { LogicTrapData trapData = (LogicTrapData)GameBaseGenerator.m_trapArray[i]; for (int j = townhallLevelData.GetUnlockedTrapCount(trapData); j > 0; j--) { LogicTrap trap = (LogicTrap)GameBaseGenerator.CreateAndPlaceRandomlyGameObject(trapData, logicLevel, trapData.GetWidth(), trapData.GetHeight(), 0); if (trap != null) { trap.SetUpgradeLevel(trapData.GetUpgradeLevelCount() - 1); scrambler.Add(trap); } } } for (int i = 0; i < scrambler.Size(); i++) { LogicGameObject gameObject = scrambler[i]; LogicData data = gameObject.GetData(); int width = gameObject.GetWidthInTiles(); int height = gameObject.GetHeightInTiles(); int x = gameObject.GetX(); int y = gameObject.GetY(); LogicArrayList <LogicGameObject> available = new LogicArrayList <LogicGameObject>(); for (int j = i + 1; j < scrambler.Size(); j++) { if (data != scrambler[j].GetData()) { if (scrambler[j].GetWidthInTiles() == width && scrambler[j].GetHeightInTiles() == height) { available.Add(scrambler[j]); } } } if (available.Size() != 0) { LogicGameObject swapObj = available[GameBaseGenerator.m_random.Rand(available.Size())]; gameObject.SetInitialPosition(swapObj.GetX(), swapObj.GetY()); swapObj.SetInitialPosition(x, y); } } } else { int maxUpgradeLevel = 0; int width = 1; int height = 1; switch (gameObjectData.GetDataType()) { case LogicDataType.BUILDING: { LogicBuildingData logicBuildingData = (LogicBuildingData)gameObjectData; maxUpgradeLevel = logicBuildingData.GetUpgradeLevelCount(); width = logicBuildingData.GetWidth(); height = logicBuildingData.GetHeight(); break; } case LogicDataType.TRAP: LogicTrapData logicTrapData = (LogicTrapData)gameObjectData; maxUpgradeLevel = logicTrapData.GetUpgradeLevelCount(); width = logicTrapData.GetWidth(); height = logicTrapData.GetHeight(); break; } int upgLevel = maxUpgradeLevel - 1; int x = 0; int y = 0; while (true) { LogicBuilding building = (LogicBuilding)GameBaseGenerator.CreateGameObjectIfAnyPlaceExist(gameObjectData, logicLevel, width, height, 0, x, y); if (building == null) { break; } building.SetLocked(false); building.SetUpgradeLevel(upgLevel != -1 ? upgLevel : GameBaseGenerator.m_random.Rand(building.GetUpgradeLevel())); x = building.GetTileX(); y = building.GetTileY(); } } for (int i = 0; i < 10; i++) { logicGameObjectManager.Village1CreateObstacle(); } LogicJSONObject jsonObject = new LogicJSONObject(); logicGameMode.SaveToJSON(jsonObject); logicGameMode.Destruct(); logicClientHome.SetHomeJSON(LogicJSONParser.CreateJSONString(jsonObject, 2048)); CompressibleStringHelper.Compress(logicClientHome.GetCompressibleHomeJSON()); return(logicClientHome); }