public void HandleCommand(ByteReader data) { ScheduledCommand cmd = ScheduledCommand.Deserialize(data); cmd.issuedBySelf = data.ReadBool(); OnMainThread.ScheduleCommand(cmd); }
public void HandleWorldData(ByteReader data) { connection.State = ConnectionStateEnum.ClientPlaying; Log.Message("Game data size: " + data.Length); int factionId = data.ReadInt32(); Multiplayer.session.myFactionId = factionId; int tickUntil = data.ReadInt32(); byte[] worldData = GZipStream.UncompressBuffer(data.ReadPrefixedBytes()); OnMainThread.cachedGameData = worldData; List <int> mapsToLoad = new List <int>(); int mapCmdsCount = data.ReadInt32(); for (int i = 0; i < mapCmdsCount; i++) { int mapId = data.ReadInt32(); int mapCmdsLen = data.ReadInt32(); List <ScheduledCommand> mapCmds = new List <ScheduledCommand>(mapCmdsLen); for (int j = 0; j < mapCmdsLen; j++) { mapCmds.Add(ScheduledCommand.Deserialize(new ByteReader(data.ReadPrefixedBytes()))); } OnMainThread.cachedMapCmds[mapId] = mapCmds; } int mapDataCount = data.ReadInt32(); for (int i = 0; i < mapDataCount; i++) { int mapId = data.ReadInt32(); byte[] rawMapData = data.ReadPrefixedBytes(); byte[] mapData = GZipStream.UncompressBuffer(rawMapData); OnMainThread.cachedMapData[mapId] = mapData; mapsToLoad.Add(mapId); } Multiplayer.session.localCmdId = data.ReadInt32(); TickPatch.tickUntil = tickUntil; TickPatch.SkipTo( toTickUntil: true, onFinish: () => Multiplayer.Client.Send(Packets.Client_WorldReady), cancelButtonKey: "Quit", onCancel: GenScene.GoToMainMenu ); ReloadGame(mapsToLoad); }
public void HandleCommand(ByteReader data) { ScheduledCommand cmd = ScheduledCommand.Deserialize(data); cmd.issuedBySelf = data.ReadBool(); OnMainThread.ScheduleCommand(cmd); Multiplayer.session.localCmdId++; Multiplayer.session.ProcessTimeControl(); }
private List <ScheduledCommand> DeserializeCmds(byte[] data) { var reader = new ByteReader(data); int count = reader.ReadInt32(); var result = new List <ScheduledCommand>(count); for (int i = 0; i < count; i++) { result.Add(ScheduledCommand.Deserialize(new ByteReader(reader.ReadPrefixedBytes()))); } return(result); }
public void HandleMapResponse(ByteReader data) { int mapId = data.ReadInt32(); int mapCmdsLen = data.ReadInt32(); List <ScheduledCommand> mapCmds = new List <ScheduledCommand>(mapCmdsLen); for (int j = 0; j < mapCmdsLen; j++) { mapCmds.Add(ScheduledCommand.Deserialize(new ByteReader(data.ReadPrefixedBytes()))); } OnMainThread.cachedMapCmds[mapId] = mapCmds; byte[] mapData = GZipStream.UncompressBuffer(data.ReadPrefixedBytes()); OnMainThread.cachedMapData[mapId] = mapData; //ClientJoiningState.ReloadGame(TickPatch.tickUntil, Find.Maps.Select(m => m.uniqueID).Concat(mapId).ToList()); // todo Multiplayer.client.Send(Packets.CLIENT_MAP_LOADED); }
public void HandleWorldData(ByteReader data) { connection.State = ConnectionStateEnum.ClientPlaying; Log.Message("Game data size: " + data.Length); int factionId = data.ReadInt32(); Multiplayer.session.myFactionId = factionId; int tickUntil = data.ReadInt32(); var dataSnapshot = new GameDataSnapshot(); byte[] worldData = GZipStream.UncompressBuffer(data.ReadPrefixedBytes()); dataSnapshot.gameData = worldData; byte[] semiPersistentData = GZipStream.UncompressBuffer(data.ReadPrefixedBytes()); dataSnapshot.semiPersistentData = semiPersistentData; List <int> mapsToLoad = new List <int>(); int mapCmdsCount = data.ReadInt32(); for (int i = 0; i < mapCmdsCount; i++) { int mapId = data.ReadInt32(); int mapCmdsLen = data.ReadInt32(); List <ScheduledCommand> mapCmds = new List <ScheduledCommand>(mapCmdsLen); for (int j = 0; j < mapCmdsLen; j++) { mapCmds.Add(ScheduledCommand.Deserialize(new ByteReader(data.ReadPrefixedBytes()))); } dataSnapshot.mapCmds[mapId] = mapCmds; } int mapDataCount = data.ReadInt32(); for (int i = 0; i < mapDataCount; i++) { int mapId = data.ReadInt32(); byte[] rawMapData = data.ReadPrefixedBytes(); byte[] mapData = GZipStream.UncompressBuffer(rawMapData); dataSnapshot.mapData[mapId] = mapData; mapsToLoad.Add(mapId); } Session.dataSnapshot = dataSnapshot; Multiplayer.session.localCmdId = data.ReadInt32(); TickPatch.shouldPause = data.ReadBool(); TickPatch.tickUntil = tickUntil; TickPatch.SetSimulation( toTickUntil: true, onFinish: () => Multiplayer.Client.Send(Packets.Client_WorldReady), cancelButtonKey: "Quit", onCancel: GenScene.GoToMainMenu // Calls StopMultiplayer through a patch ); ReloadGame(mapsToLoad, true, false); }