public virtual int ReadData(IBitStream stream) { uint someVal = stream.ReadBits(2); uint someVal2 = stream.ReadBits(16); return(0); }
public IGameEvent DeSerialize(IBitStream stream) { var a1 = stream.ReadBits(0x20); var a2 = stream.ReadBits(0x20); return(new BeginRoundEvent()); }
public int ProcessReceivedPacket(IBitStream stream) { uint val1 = stream.ReadBits(1); if (val1 != 1) { return(1); } uint numberOfEvents = stream.ReadBits(8); uint someVal2 = stream.ReadBits(5); uint action2 = stream.ReadBits(1); uint d = 0; while (numberOfEvents > 0) { try { IGameEvent eventInstance = ReadGameEvent(stream, true); eventInstance.Process(Client); } catch (Exception) { } numberOfEvents--; } return(0); }
public IGameEvent DeSerialize(IBitStream stream) { int v2 = 0; do { ++v2; }while (((1 << v2) - 1) < 2); uint v10 = 0; v10 = stream.ReadBits((uint)v2); uint v9 = 0; v9 = stream.ReadBits(8); uint v7 = 0; uint v6 = 0; do { uint v3 = 0; do { uint v8 = 0; uint v4 = v3++ + v6; v8 = stream.ReadBits(4); }while (v3 <= 6); ++v7; v6 += 7; }while (v7 <= 1); return(new UnlockEvent()); }
public virtual int ProcessReceivedPacket(IBitStream stream) { uint playerAction = stream.ReadBits(1); if (playerAction != 1) { return(1); } uint someVal = stream.ReadBits(4); uint someVal2 = stream.ReadBits(9); uint someVal3 = 0; if (someVal > 0) { uint action2 = stream.ReadBits(1); if (action2 == 1) { } else { someVal3 = stream.ReadBits(31); } } if (someVal <= 0) { return(1); } new PlayerAction().ReadFromStream(stream); return(0); }
public IGameEvent DeSerialize(IBitStream stream) { var remoteEvent = new PostRemoteEvent(); remoteEvent.EventId = stream.ReadBits(4); remoteEvent.FunctionId = stream.ReadBits(32); var p3 = stream.ReadBits(32); var p4 = stream.ReadBits(8); return(remoteEvent); }
public void TestReadBits() { int bitOffset = 0; int totalBits = data.Length * 8; while (bitOffset < totalBits) { int thisTime = Math.Min(rng.Next(512) + 1, totalBits - bitOffset); dbgAll.ReadBits(thisTime); bitOffset += thisTime; } }
public IGameEvent DeSerialize(IBitStream stream) { var challengeResponseEvent = new ChallengeResponseEvent(); challengeResponseEvent.Challenge = stream.ReadBytes(73); var ss = stream.ReadBits(32); //1768123489 challengeResponseEvent.NetVersionNumber = stream.ReadBits(32); //Network Build Number var ssss = stream.ReadBits(1); challengeResponseEvent.GameId = stream.ReadBits(31); return(challengeResponseEvent); }
public virtual int ReadControlObjectState(IBitStream stream) { uint someVal = stream.ReadBits(12); uint i = stream.ReadBits(1); if (i == 1) { } else { var ii = stream.ReadBits(31); } return(0); }
public IGameEvent DeSerialize(IBitStream stream) { var v1 = stream.ReadBits(8);//target, if mapvote this is a map index var v2 = stream.ReadBits(8); var v3 = stream.ReadBits(8); var v4 = stream.ReadBits(8);//target, if mapvote this is a map index var v5 = stream.ReadBits(8); var v6 = stream.ReadBits(8); var voteCaster = stream.ReadBits(8); var updateVoteType = stream.ReadBits(8); //8 = updateparticipant status, 9 = updateclientstate var voteType = stream.ReadBits(8); //0 = updatePendingVote, 1 = map, 2 = kick, 3 = mutiny var v10 = stream.ReadBits(32); return(new VoteEvent()); }
public virtual int ProcessReceivedPacket(IBitStream stream) { uint val1 = stream.ReadBits(1); if (val1 != 1) { return(1); } uint someVal = stream.ReadBits(32); uint someVal2 = stream.ReadBits(8); uint someVal3 = stream.ReadBits(1); ReadControlObjectState(stream); ReadData(stream); return(0); }
public IGameEvent DeSerialize(IBitStream stream) { uint v8 = stream.ReadBits(1); if (v8 != 1) { uint blockLength = 8 * stream.ReadBits(8) & 0x7F8; var data = stream.ReadBits(blockLength); return(null); } else { uint idk = stream.ReadBits(8); return(null); } return(null); }
public byte[] ReadBits(int bits) { var a = A.ReadBits(bits); var b = B.ReadBits(bits); Verify(a.SequenceEqual(b), true); return(a); }
public IBlockEvent DeSerialize(IBitStream stream) { var clientInfo = new ClientInfoEvent(); var userNameLength = stream.ReadBits(0x10); if (userNameLength > 0) { clientInfo.Username = stream.ReadString(userNameLength); } var v1 = stream.ReadBits(32); var v2 = stream.ReadBits(1); var v3 = stream.ReadBits(31); var v4 = stream.ReadBits(0x10); if (v4 > 0) { clientInfo.Username = stream.ReadString(v4); } var v5 = stream.ReadBits(0x10); if (v5 > 0) { clientInfo.SomeString = stream.ReadString(v5); } var v6 = stream.ReadBits(1); return(clientInfo); }
public IBlockEvent DeSerialize(IBitStream stream) { var mapListEvent = new MapListEvent(); var mapCount = stream.ReadBits(16); while (mapCount > 0) { var map = new Map(); map.MaxPlayers = stream.ReadBits(16); var mapNameLen = stream.ReadBits(16); map.MapName = stream.ReadString(mapNameLen); var gameModeLen = stream.ReadBits(16); map.GameMode = stream.ReadString(gameModeLen); mapListEvent.Maps.Add(map); mapCount--; } return(mapListEvent); }
public IGameEvent DeSerialize(IBitStream stream) { var block = new DataBlockEvent(); var newBlock = stream.ReadBool(); if (!newBlock) { uint blockLength = stream.ReadBits(8); //actual formula in the game exe: 8 * stream.ReadBits(8) & 0x7F8; we just read the bytes since this formula is used to read it as bits block.Block = stream.ReadBytes(blockLength); } else { block.BlockEventId = stream.ReadBits(32); //triggers specific event in EventManager, 0=ServerInfo, 1=ClientInfo, 5=MapList block.BlockLength = stream.ReadBits(32); //full length of incoming data(in case it's sent in multiple packets) block.NewBlock = true; } return(block); }
public IGameEvent DeSerialize(IBitStream stream) { var challengeEvent = new ChallengeEvent(); challengeEvent.Challenge = stream.ReadBytes(10); //actual challenge? var modNameLength = stream.ReadBits(8); //modname length challengeEvent.ModName = stream.ReadString(modNameLength); //actual modname return(challengeEvent); }
public IGameEvent DeSerialize(IBitStream stream) { stream.ReadBits(8); stream.ReadBits(4); stream.ReadBits(1); stream.ReadBits(1); stream.ReadBits(1); stream.ReadBits(8); stream.ReadBits(8); stream.ReadBits(0x10); return(new CreateSpawnGroupEvent()); }
public IGameEvent DeSerialize(IBitStream stream) { int v2 = 0; do { ++v2; }while (((1 << v2) - 1) < 7); uint somthing = stream.ReadBits((uint)v2); return(new ConnectionTypeEvent()); }
public virtual int ReadFromStream(IBitStream stream) { int v = 0; do { uint someVal = stream.ReadBits(1); if (someVal == 1) { } else { uint someVal2 = stream.ReadBits(15); } v++; }while (v <= 5); uint vv = stream.ReadBits(32); uint vvv = stream.ReadBits(9); uint vvvv = stream.ReadBits(1); return(0); }
public IGameEvent DeSerialize(IBitStream stream) { var templateId = stream.ReadBits(0x20); var objectId = stream.ReadBits(0x10); var v3 = stream.ReadBits(0x20); var v4 = stream.ReadBits(0x20); var v5 = stream.ReadBits(0x20); var kitId = stream.ReadBits(4); var v7 = stream.ReadBits(4); return(null); }
public IBlockEvent DeSerialize(IBitStream stream) { var mapInfoEvent = new MapInfoEvent(); var gameModeLen = stream.ReadBits(0x10); mapInfoEvent.GameMode = stream.ReadString(gameModeLen); var pathLen = stream.ReadBits(0x10); mapInfoEvent.MapPath = stream.ReadString(pathLen); var levelNameLen = stream.ReadBits(0x10); mapInfoEvent.MapName = stream.ReadString(levelNameLen); var v4 = stream.ReadBits(1); mapInfoEvent.MaxPlayers = stream.ReadBits(31); mapInfoEvent.CommanderEnabled = stream.ReadBits(1); var v7 = stream.ReadBits(1); mapInfoEvent.ChallengeOrdinal = stream.ReadBits(31); var v9 = stream.ReadBits(1); var v10 = stream.ReadBits(1); return(mapInfoEvent); }
public IGameEvent DeSerialize(IBitStream stream) { var createPlayerEvent = new CreatePlayerEvent(); createPlayerEvent.PlayerTeam = stream.ReadBits(3); createPlayerEvent.SpawnGroup = stream.ReadBits(4); var v3 = stream.ReadBits(1); createPlayerEvent.PlayerId = stream.ReadBits(8); //id given by gameserver, not actual gamespy id createPlayerEvent.PlayerIndex = stream.ReadBits(0x10); //another server id? This one does not start at 0 var v6 = stream.ReadBits(0x10); //always 0 createPlayerEvent.IsAI = stream.ReadBool(); createPlayerEvent.PlayerName = stream.ReadString(32).Replace("\0", ""); return(createPlayerEvent); }
public static void Apply(CreateStringTable table, IBitStream reader, DemoParser parser) { if (table.Name == "modelprecache") { while (parser.modelprecache.Count < table.MaxEntries) { parser.modelprecache.Add(null); } } if (reader.ReadBit()) throw new NotImplementedException("Encoded with dictionaries, unable to decode"); int nTemp = table.MaxEntries; int nEntryBits = 0; while ((nTemp >>= 1) != 0) ++nEntryBits; List<string> history = new List<string>(); int lastEntry = -1; for (int i = 0; i < table.NumEntries; i++) { int entryIndex = lastEntry + 1; // d in the entity-index if (!reader.ReadBit()) { entryIndex = (int)reader.ReadInt(nEntryBits); } lastEntry = entryIndex; // Read the name of the string into entry. string entry = ""; if (entryIndex < 0 || entryIndex >= table.MaxEntries) { throw new InvalidDataException("bogus string index"); } if (reader.ReadBit()) { bool substringcheck = reader.ReadBit(); if (substringcheck) { int index = (int)reader.ReadInt(5); int bytestocopy = (int)reader.ReadInt(5); entry = history[index].Substring(0, bytestocopy); entry += reader.ReadString(1024); } else { entry = reader.ReadString(1024); } } if (entry == null) entry = ""; if (history.Count > 31) history.RemoveAt(0); history.Add(entry); // Read in the user data. byte[] userdata = new byte[0]; if (reader.ReadBit()) { if (table.UserDataFixedSize) { userdata = reader.ReadBits(table.UserDataSizeBits); } else { int bytesToRead = (int)reader.ReadInt(14); userdata = reader.ReadBytes(bytesToRead); } } if (userdata.Length == 0) break; if (table.Name == "userinfo") { // Now we'll parse the players out of it. BinaryReader playerReader = new BinaryReader(new MemoryStream(userdata)); PlayerInfo info = PlayerInfo.ParseFrom(playerReader); parser.RawPlayers[entryIndex] = info; } else if (table.Name == "instancebaseline") { int classid = int.Parse(entry); //wtf volvo? parser.instanceBaseline[classid] = userdata; } else if (table.Name == "modelprecache") { parser.modelprecache[entryIndex] = entry; } } parser.stringTables.Add(table); }
public byte ReadByte(byte bitSize) { return(_input.ReadBits(bitSize)); }
public IGameEvent ReadGameEvent(IBitStream stream, bool useOld = false) { uint eventId = 0; int v3 = 127;//adjust value depending on game, 127 is for bf2 and bf2142 int v4 = 0; do { ++v4; }while (v3 > (1 << v4) - 1);//if the event amount defined above is 127 then the result will be 7, meaning we read 7 bits and those 7 bits are the event id eventId = stream.ReadBits((uint)v4); IGameEvent eventInstance; if (!useOld) { eventInstance = Config.EventRegistry.Trigger(eventId, stream);//dont use in development } else #region old { if (eventId == 1) { eventInstance = new ChallengeEvent().DeSerialize(stream); } else if (eventId == 2) { eventInstance = new ChallengeResponseEvent().DeSerialize(stream); } else if (eventId == 3) { eventInstance = new ConnectionTypeEvent().DeSerialize(stream); } else if (eventId == 4) { eventInstance = new DataBlockEvent().DeSerialize(stream); } else if (eventId == 5) { eventInstance = new CreatePlayerEvent().DeSerialize(stream); } else if (eventId == 6) { eventInstance = new CreateObjectEvent().DeSerialize(stream); } else if (eventId == 8) { eventInstance = new DestroyObjectEvent().DeSerialize(stream); } else if (eventId == 11) { eventInstance = new PostRemoteEvent().DeSerialize(stream); } else if (eventId == 16) { eventInstance = new StringBlockEvent().DeSerialize(stream); } else if (eventId == 31) { eventInstance = new CreateKitEvent().DeSerialize(stream); } else if (eventId == 35) //voip event { stream.ReadBits(9); //just read so we can skip eventInstance = null; } else if (eventId == 39) { eventInstance = new VoteEvent().DeSerialize(stream); } else if (eventId == 42) { eventInstance = new UnlockEvent().DeSerialize(stream); } else if (eventId == 46) { eventInstance = new ContentCheckEvent().DeSerialize(stream); } else if (eventId == 50) { eventInstance = null; } else if (eventId == 54) //voip event, we dont care { stream.ReadBits(0x10); //just read so we can skip eventInstance = null; } else if (eventId == 56) { eventInstance = new BeginRoundEvent().DeSerialize(stream); } else if (eventId == 57) { eventInstance = new CreateSpawnGroupEvent().DeSerialize(stream); } else { eventInstance = null; } } #endregion return(eventInstance); }
public byte ReadBits(byte bitSize) { return(_sourceStream.ReadBits(bitSize)); }
public static void Apply(CreateStringTable table, IBitStream reader, DemoParser parser) { if (table.Name == "modelprecache") { while (parser.modelprecache.Count < table.MaxEntries) { parser.modelprecache.Add(null); } } if (reader.ReadBit()) { throw new NotImplementedException("Encoded with dictionaries, unable to decode"); } int nTemp = table.MaxEntries; int nEntryBits = 0; while ((nTemp >>= 1) != 0) { ++nEntryBits; } List <string> history = new List <string>(); int lastEntry = -1; for (int i = 0; i < table.NumEntries; i++) { int entryIndex = lastEntry + 1; // d in the entity-index if (!reader.ReadBit()) { entryIndex = (int)reader.ReadInt(nEntryBits); } lastEntry = entryIndex; // Read the name of the string into entry. string entry = ""; if (entryIndex < 0 || entryIndex >= table.MaxEntries) { throw new InvalidDataException("bogus string index"); } if (reader.ReadBit()) { bool substringcheck = reader.ReadBit(); if (substringcheck) { int index = (int)reader.ReadInt(5); int bytestocopy = (int)reader.ReadInt(5); entry = history[index].Substring(0, bytestocopy); entry += reader.ReadString(1024); } else { entry = reader.ReadString(1024); } } if (entry == null) { entry = ""; } if (history.Count > 31) { history.RemoveAt(0); } history.Add(entry); // Read in the user data. byte[] userdata = new byte[0]; if (reader.ReadBit()) { if (table.UserDataFixedSize) { userdata = reader.ReadBits(table.UserDataSizeBits); } else { int bytesToRead = (int)reader.ReadInt(14); userdata = reader.ReadBytes(bytesToRead); } } if (userdata.Length == 0) { continue; } if (table.Name == "userinfo") { // Now we'll parse the players out of it. BinaryReader playerReader = new BinaryReader(new MemoryStream(userdata)); PlayerInfo info = PlayerInfo.ParseFrom(playerReader); parser.RawPlayers[entryIndex] = info; } else if (table.Name == "instancebaseline") { int classid = int.Parse(entry); //wtf volvo? parser.instanceBaseline[classid] = userdata; } else if (table.Name == "modelprecache") { parser.modelprecache[entryIndex] = entry; } } parser.stringTables.Add(table); }
public IBlockEvent DeSerialize(IBitStream stream) { var serverInfo = new ServerInfoEvent(); uint gameNameLength = stream.ReadBits(0x10); serverInfo.GameName = stream.ReadString(gameNameLength); uint v10 = 0; uint v11 = stream.ReadBits(0x10); var description = ""; do { uint descriptionPartLength = stream.ReadBits(0x10); if (descriptionPartLength != 0) { description += stream.ReadString(descriptionPartLength); } v10++; }while (v11 > v10); serverInfo.GameDescription = description; var v12 = stream.ReadBits(1); //20//some value that is always 1 serverInfo.Unknown1 = stream.ReadBits(1); //21 serverInfo.AllowNoseCam = stream.ReadBits(1); //22 serverInfo.HitIndicator = stream.ReadBits(1); //23 serverInfo.TeamKillPunishByDefault = stream.ReadBits(1); //24 serverInfo.AllowFreeCam = stream.ReadBits(1); //25 serverInfo.AllowExternalViews = stream.ReadBits(1); //26 serverInfo.Unknown2 = stream.ReadBits(32); //7 serverInfo.Unknown3 = stream.ReadBits(0x10); //16 serverInfo.Unknown4 = stream.ReadBits(0x10); //17 var v22 = stream.ReadBits(1); serverInfo.Unknown5 = stream.ReadBits(31); //9 serverInfo.GameSpyPort = stream.ReadBits(0x10); //26 var v25 = stream.ReadBits(1); serverInfo.RadioSpamInterval = stream.ReadBits(31);//10 var v27 = stream.ReadBits(1); serverInfo.RadioMaxSpamFlagCount = stream.ReadBits(31);//11 var v29 = stream.ReadBits(1); serverInfo.RadioBlockedDurationTime = stream.ReadBits(31); //12 var v31 = stream.ReadBits(1); //54 serverInfo.VotingEnabled = stream.ReadBits(1); //55 serverInfo.Unknown6 = stream.ReadBits(0x10); //28 serverInfo.FriendlyFireWithMines = stream.ReadBits(1); //58 serverInfo.TeamVoteOnly = stream.ReadBits(1); //59 serverInfo.NoVehicles = stream.ReadBits(1); //60 serverInfo.Unknown7 = stream.ReadBits(1); //61 var v38 = stream.ReadBits(1); serverInfo.RoundsPerMap = stream.ReadBits(31);//16 var v40 = stream.ReadBits(1); serverInfo.SpawnTime = stream.ReadBits(31);//17 var v42 = stream.ReadBits(1); serverInfo.TimeLimit = stream.ReadBits(31);//18 var v44 = stream.ReadBits(1); serverInfo.TicketRatio = stream.ReadBits(31);//19 var v46 = stream.ReadBits(1); serverInfo.TeamRatioPercent = stream.ReadBits(31); //20 serverInfo.AutoBalanceTeam = stream.ReadBits(1); //84 serverInfo.UseGlobalUnlocks = stream.ReadBits(1); //85 var v50 = stream.ReadBits(1); serverInfo.CoopBotRatio = stream.ReadBits(31);//22 var v52 = stream.ReadBits(1); serverInfo.CoopBotCount = stream.ReadBits(31);//23 var v54 = stream.ReadBits(1); serverInfo.CoopBotDifficulty = stream.ReadBits(31);//24 return(serverInfo); }
public IGameEvent DeSerialize(IBitStream stream) { var templateId = stream.ReadBits(0x20); var objectId = stream.ReadBits(0x10); var v3 = stream.ReadBits(2); var isMultiSpawn = stream.ReadBits(1);//if true means spawn the same object multiple times if (isMultiSpawn == 1) { var spawnAmount = stream.ReadBits(8); } else { var v5 = stream.ReadBits(1); if (v5 == 1) { var v6 = stream.ReadBits(0x20) ^ 0x80000000; var v7 = stream.ReadBits(0x20) ^ 0x80000000; var v8 = stream.ReadBits(0x20) ^ 0x80000000; var v222 = 0; } else { } var hasVector = stream.ReadBool(); if (hasVector) { var v6 = stream.ReadBits(0x20) ^ 0x80000000; var v7 = stream.ReadBits(0x20) ^ 0x80000000; var v8 = stream.ReadBits(0x20) ^ 0x80000000; var v222 = 0; } else { } } return(null); }
public void Handle(PacketType packetType, IBitStream stream) { lock (this) { switch (packetType) { case PacketType.ConnectionAcknowledge: break; //now we can receive and send packets case PacketType.PingRequest: uint type1 = 0; uint Type2 = 0; uint type3 = 0; stream.ReadExtendedHeader(ref type1, ref Type2, ref type3); uint i = stream.ReadBits(1); uint v4 = 0; if (i == 1) { if (type1 != ClientPacketId && (v4 = (type1 - ClientPacketId) & 0x3F) <= 0x1F) { if (v4 > 1) { v28 += (int)v4 - 1; v54 <<= (int)v4 - 1; } v54 *= 2; ++v28; ClientPacketId = type1; } } uint token = stream.ReadBits(32); SendPingResponse(token); break; case PacketType.PingResponse: break; case PacketType.Data: uint t1 = 0; uint clientPacketCounter = 0; //a3 & 0x3F uint t3 = 0; stream.ReadExtendedHeader(ref clientPacketCounter, ref t1, ref t3); int v11 = (int)(clientPacketCounter - ClientPacketId) & 0x3F; if (v11 > 1) { v28 += v11 - 1; v54 <<= v11 - 1; } v54 = 2 * v54 | 1; ClientPacketId = clientPacketCounter; var packetLength = stream.ReadBits(16); //payload length in bytes new PlayerActionManager().ProcessReceivedPacket(stream); GameEventManager.ProcessReceivedPacket(stream); new GhostManager().ProcessReceivedPacket(stream); if (!IsAuthenticated && Config.LoadedMod.RequiresChallenge) //create and send a challenge { var challenge = (IGameEvent)Activator.CreateInstance(Config.LoadedMod.ChallengeEvent); challenge.Transmit(this); } Send(); //call send to send all queued events break; case PacketType.Disconnect: var err = stream.ReadBits(0x20); //var msgLength = stream.ReadBits(0x10); //var msg = stream.ReadString(msgLength); break; } } }