public static void SaveHomeOwnerAvatarInHome(LogicClientAvatar logicClientAvatar, LogicClientHome logicClientHome) { CompressibleStringHelper.Uncompress(logicClientHome.GetCompressibleHomeJSON()); LogicJSONObject jsonObject = LogicJSONParser.ParseObject(logicClientHome.GetCompressibleHomeJSON().Get()); logicClientAvatar.SaveToDirect(jsonObject); logicClientHome.SetHomeJSON(LogicJSONParser.CreateJSONString(jsonObject, 512)); CompressibleStringHelper.Compress(logicClientHome.GetCompressibleHomeJSON()); }
public static GameMode LoadMatchedAttackState(HomeSession session, GameMatchedAttackState state) { LogicClientHome home = state.Home; LogicClientAvatar homeOwnerAvatar = state.HomeOwnerAvatar; LogicClientAvatar attackerLogicClientAvatar = state.PlayerAvatar; int currentTimestamp = TimeUtil.GetTimestamp(); int secondsSinceLastSave = state.SaveTime != -1 ? currentTimestamp - state.SaveTime : 0; int secondsSinceLastMaintenance = state.MaintenanceTime != -1 ? currentTimestamp - state.MaintenanceTime : 0; EnemyHomeDataMessage enemyHomeDataMessage = new EnemyHomeDataMessage(); enemyHomeDataMessage.SetCurrentTimestamp(currentTimestamp); enemyHomeDataMessage.SetSecondsSinceLastSave(secondsSinceLastSave); enemyHomeDataMessage.SetSecondsSinceLastMaintenance(secondsSinceLastMaintenance); enemyHomeDataMessage.SetLogicClientHome(home); enemyHomeDataMessage.SetLogicClientAvatar(homeOwnerAvatar); enemyHomeDataMessage.SetAttackerLogicClientAvatar(attackerLogicClientAvatar); enemyHomeDataMessage.SetAttackSource(3); enemyHomeDataMessage.Encode(); CompressibleStringHelper.Uncompress(home.GetCompressibleHomeJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleCalendarJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleGlobalJSON()); try { GameMode gameMode = new GameMode(session); gameMode.m_avatarChangeListener = new AvatarChangeListener(gameMode, attackerLogicClientAvatar); attackerLogicClientAvatar.SetChangeListener(gameMode.m_avatarChangeListener); gameMode.m_logicGameMode.LoadMatchedAttackState(home, homeOwnerAvatar, attackerLogicClientAvatar, currentTimestamp, secondsSinceLastSave, secondsSinceLastMaintenance); gameMode.m_gameDefenderLocked = state.GameDefenderLocked; gameMode.m_liveReplayId = state.LiveReplayId; ZLibHelper.CompressInZLibFormat(LogicStringUtil.GetBytes(LogicJSONParser.CreateJSONString(gameMode.m_logicGameMode.GetReplay().GetJson())), out byte[] streamJSON); ServerMessageManager.SendMessage(new InitializeLiveReplayMessage { AccountId = gameMode.m_liveReplayId, StreamData = streamJSON }, 9); session.SendPiranhaMessage(enemyHomeDataMessage, 1); return(gameMode); } catch (Exception exception) { Logging.Error("GameMode.loadMatchedAttackState: exception while the loading of attack state: " + exception); } return(null); }
public static GameMode LoadHomeState(HomeSession session, GameHomeState state) { LogicClientHome home = state.Home; LogicClientAvatar homeOwnerAvatar = state.PlayerAvatar; int currentTimestamp = TimeUtil.GetTimestamp(); int secondsSinceLastSave = state.SaveTime != -1 ? currentTimestamp - state.SaveTime : 0; int secondsSinceLastMaintenance = state.MaintenanceTime != -1 ? currentTimestamp - state.MaintenanceTime : 0; int reengagementSeconds = secondsSinceLastSave >= 86400 ? secondsSinceLastSave - 86400 : 0; OwnHomeDataMessage ownHomeDataMessage = new OwnHomeDataMessage(); ownHomeDataMessage.SetCurrentTimestamp(currentTimestamp); ownHomeDataMessage.SetReengagementSeconds(reengagementSeconds); ownHomeDataMessage.SetSecondsSinceLastSave(secondsSinceLastSave); ownHomeDataMessage.SetSecondsSinceLastMaintenance(secondsSinceLastMaintenance); ownHomeDataMessage.SetLogicClientHome(home); ownHomeDataMessage.SetLogicClientAvatar(homeOwnerAvatar); ownHomeDataMessage.SetLayoutId(state.LayoutId); ownHomeDataMessage.SetMapId(state.MapId); ownHomeDataMessage.Encode(); CompressibleStringHelper.Uncompress(home.GetCompressibleHomeJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleCalendarJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleGlobalJSON()); try { GameMode gameMode = new GameMode(session); gameMode.m_avatarChangeListener = new AvatarChangeListener(gameMode, homeOwnerAvatar); home.SetChangeListener(new HomeChangeListener(gameMode)); homeOwnerAvatar.SetChangeListener(gameMode.m_avatarChangeListener); gameMode.m_logicGameMode.LoadHomeState(home, homeOwnerAvatar, secondsSinceLastSave, -1, currentTimestamp, secondsSinceLastMaintenance, reengagementSeconds); session.SendPiranhaMessage(ownHomeDataMessage, 1); for (int i = 0; i < state.ServerCommands.Size(); i++) { gameMode.AddServerCommand(state.ServerCommands[i]); } return(gameMode); } catch (Exception exception) { Logging.Error("GameMode.loadHomeState: exception while the loading of attack state: " + exception); } return(null); }
public static GameMode LoadVisitAttackState(HomeSession session, GameVisitState state) { LogicClientHome home = state.Home; LogicClientAvatar homeOwnerAvatar = state.HomeOwnerAvatar; LogicClientAvatar visitorAvatar = state.PlayerAvatar; int currentTimestamp = TimeUtil.GetTimestamp(); int secondsSinceLastSave = state.SaveTime != -1 ? currentTimestamp - state.SaveTime : 0; int visitType = state.VisitType; VisitedHomeDataMessage visitedHomeDataMessage = new VisitedHomeDataMessage(); visitedHomeDataMessage.SetCurrentTimestamp(currentTimestamp); visitedHomeDataMessage.SetSecondsSinceLastSave(secondsSinceLastSave); visitedHomeDataMessage.SetLogicClientHome(home); visitedHomeDataMessage.SetOwnerLogicClientAvatar(homeOwnerAvatar); visitedHomeDataMessage.SetVisitorLogicClientAvatar(visitorAvatar); visitedHomeDataMessage.Encode(); CompressibleStringHelper.Uncompress(home.GetCompressibleHomeJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleCalendarJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleGlobalJSON()); try { GameMode gameMode = new GameMode(session); gameMode.m_avatarChangeListener = new AvatarChangeListener(gameMode, visitorAvatar); visitorAvatar.SetChangeListener(gameMode.m_avatarChangeListener); gameMode.m_logicGameMode.LoadVisitState(home, homeOwnerAvatar, visitorAvatar, secondsSinceLastSave, currentTimestamp); session.SendPiranhaMessage(visitedHomeDataMessage, 1); return(gameMode); } catch (Exception exception) { Logging.Error("GameMode.loadVisitAttackState: exception while the loading of visit state: " + exception); } return(null); }
public static GameMode LoadFakeAttackState(BattleSession session, GameFakeAttackState state) { LogicClientHome home = state.Home; LogicClientAvatar homeOwnerAvatar = state.HomeOwnerAvatar; LogicClientAvatar playerAvatar = state.PlayerAvatar; int currentTimestamp = TimeUtil.GetTimestamp(); int secondsSinceLastSave = state.SaveTime != -1 ? currentTimestamp - state.SaveTime : 0; int secondsSinceLastMaintenance = state.MaintenanceTime != -1 ? currentTimestamp - state.MaintenanceTime : 0; EnemyHomeDataMessage enemyHomeDataMessage = new EnemyHomeDataMessage(); enemyHomeDataMessage.SetCurrentTimestamp(currentTimestamp); enemyHomeDataMessage.SetSecondsSinceLastSave(secondsSinceLastSave); enemyHomeDataMessage.SetSecondsSinceLastMaintenance(secondsSinceLastMaintenance); enemyHomeDataMessage.SetLogicClientHome(home); enemyHomeDataMessage.SetLogicClientAvatar(homeOwnerAvatar); enemyHomeDataMessage.SetAttackerLogicClientAvatar(playerAvatar); enemyHomeDataMessage.SetAttackSource(1); enemyHomeDataMessage.Encode(); CompressibleStringHelper.Uncompress(home.GetCompressibleHomeJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleCalendarJSON()); CompressibleStringHelper.Uncompress(home.GetCompressibleGlobalJSON()); try { GameMode gameMode = new GameMode(session); gameMode.m_logicGameMode.LoadDirectAttackState(home, homeOwnerAvatar, playerAvatar, secondsSinceLastSave, false, false, currentTimestamp); session.SendPiranhaMessage(enemyHomeDataMessage, 1); return(gameMode); } catch (Exception exception) { Logging.Error("GameMode.loadFakeAttackState: exception while the loading of attack state: " + exception); } return(null); }
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); }