From 8352bfc1d8deedd4d6a0a5b0698fe1f8b9a06e88 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Mon, 7 Nov 2022 18:42:28 +0300 Subject: stringtable done, can't see data properly --- go.mod | 2 +- go.sum | 6 ++---- packets/classes/stringtable.go | 36 ++++++++++++++++++++++++++++++++- packets/classes/types.go | 18 ++++++++++++++--- packets/classes/usercmd.go | 45 +++++++----------------------------------- packets/message.go | 17 ++++++++-------- packets/types.go | 2 +- 7 files changed, 70 insertions(+), 56 deletions(-) diff --git a/go.mod b/go.mod index 8b852ea..8a6514d 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,4 @@ module github.com/pektezol/demoparser go 1.19 -require github.com/pektezol/bitreader v1.2.1 +require github.com/pektezol/bitreader v1.2.2 diff --git a/go.sum b/go.sum index 34c0ab2..fdee37c 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,4 @@ -github.com/pektezol/bitreader v1.1.2 h1:F0u8qiauIwh52lwiwy7UMQ03/bw4NuEXQU0UFBL+A2w= -github.com/pektezol/bitreader v1.1.2/go.mod h1:RKAUiA//jCPJzO10P+VSkBq4wfY38TaNjpCjQ+DmbcQ= -github.com/pektezol/bitreader v1.2.0 h1:7sr46Rgx06j5+adLn3xOUSHc+Pz2GoFC1BIk+2ktdxg= -github.com/pektezol/bitreader v1.2.0/go.mod h1:RKAUiA//jCPJzO10P+VSkBq4wfY38TaNjpCjQ+DmbcQ= github.com/pektezol/bitreader v1.2.1 h1:ChmgZjsi1hftUgH2LkfttjsER5UGYxrwwfsH2QCx/SU= github.com/pektezol/bitreader v1.2.1/go.mod h1:RKAUiA//jCPJzO10P+VSkBq4wfY38TaNjpCjQ+DmbcQ= +github.com/pektezol/bitreader v1.2.2 h1:NtRAoG48Wbnu/A300lGsQuo0ajLHKJXat884esWMrLo= +github.com/pektezol/bitreader v1.2.2/go.mod h1:RKAUiA//jCPJzO10P+VSkBq4wfY38TaNjpCjQ+DmbcQ= diff --git a/packets/classes/stringtable.go b/packets/classes/stringtable.go index df8e840..64e8496 100644 --- a/packets/classes/stringtable.go +++ b/packets/classes/stringtable.go @@ -1,5 +1,39 @@ package classes -func ParseStringTable() { +import ( + "bytes" + "github.com/pektezol/bitreader" +) + +func ParseStringTable(data []byte) []StringTable { + reader := bitreader.Reader(bytes.NewReader(data), true) + var stringTables []StringTable + numOfTables := reader.TryReadInt8() + for i := 0; i < int(numOfTables); i++ { + var stringTable StringTable + stringTable.TableName = reader.TryReadString() + stringTable.NumOfEntries = int16(reader.TryReadInt16()) + stringTable.EntryName = reader.TryReadString() + if reader.TryReadBool() { + stringTable.EntrySize = int16(reader.TryReadInt16()) + } + if reader.TryReadBool() { + stringTable.EntryData = reader.TryReadBytesToSlice(int(stringTable.EntrySize)) + } + if reader.TryReadBool() { + stringTable.NumOfClientEntries = int16(reader.TryReadInt16()) + } + if reader.TryReadBool() { + stringTable.ClientEntryName = reader.TryReadString() + } + if reader.TryReadBool() { + stringTable.ClientEntrySize = int16(reader.TryReadInt16()) + } + if reader.TryReadBool() { + stringTable.ClientEntryData = reader.TryReadBytesToSlice(int(stringTable.ClientEntrySize)) + } + stringTables = append(stringTables, stringTable) + } + return stringTables } diff --git a/packets/classes/types.go b/packets/classes/types.go index 8e630b6..a1a281e 100644 --- a/packets/classes/types.go +++ b/packets/classes/types.go @@ -11,18 +11,30 @@ type CmdInfo struct { } type UserCmdInfo struct { - CommandNumber int - TickCount int + CommandNumber int32 + TickCount int32 ViewAnglesX float32 ViewAnglesY float32 ViewAnglesZ float32 ForwardMove float32 SideMove float32 UpMove float32 - Buttons int + Buttons int32 Impulse byte WeaponSelect int WeaponSubtype int MouseDx int16 MouseDy int16 } + +type StringTable struct { + TableName string + NumOfEntries int16 + EntryName string + EntrySize int16 + EntryData []byte + NumOfClientEntries int16 + ClientEntryName string + ClientEntrySize int16 + ClientEntryData []byte +} diff --git a/packets/classes/usercmd.go b/packets/classes/usercmd.go index a3183b6..78e9c58 100644 --- a/packets/classes/usercmd.go +++ b/packets/classes/usercmd.go @@ -1,94 +1,63 @@ package classes import ( + "bytes" + "github.com/pektezol/bitreader" ) -func ParseUserCmdInfo(reader *bitreader.ReaderType, size int) UserCmdInfo { - var bitCount int +func ParseUserCmdInfo(data []byte) UserCmdInfo { + reader := bitreader.Reader(bytes.NewReader(data), true) var userCmdInfo UserCmdInfo if reader.TryReadBool() { - userCmdInfo.CommandNumber = int(reader.TryReadInt32()) - bitCount += 32 + userCmdInfo.CommandNumber = int32(reader.TryReadInt32()) } - bitCount++ if reader.TryReadBool() { - userCmdInfo.TickCount = int(reader.TryReadInt32()) - bitCount += 32 + userCmdInfo.TickCount = int32(reader.TryReadInt32()) } - bitCount++ if reader.TryReadBool() { userCmdInfo.ViewAnglesX = reader.TryReadFloat32() - bitCount += 32 } - bitCount++ if reader.TryReadBool() { userCmdInfo.ViewAnglesY = reader.TryReadFloat32() - bitCount += 32 } - bitCount++ if reader.TryReadBool() { userCmdInfo.ViewAnglesZ = reader.TryReadFloat32() - bitCount += 32 } - bitCount++ if reader.TryReadBool() { userCmdInfo.ForwardMove = reader.TryReadFloat32() - bitCount += 32 } - bitCount++ if reader.TryReadBool() { userCmdInfo.SideMove = reader.TryReadFloat32() - bitCount += 32 } - bitCount++ if reader.TryReadBool() { userCmdInfo.UpMove = reader.TryReadFloat32() - bitCount += 32 } - bitCount++ if reader.TryReadBool() { - userCmdInfo.Buttons = int(reader.TryReadInt32()) - bitCount += 32 + userCmdInfo.Buttons = int32(reader.TryReadInt32()) } - bitCount++ if reader.TryReadBool() { userCmdInfo.Impulse = reader.TryReadInt8() - bitCount += 8 } - bitCount++ if reader.TryReadBool() { value, err := reader.ReadBits(11) if err != nil { panic(err) } userCmdInfo.WeaponSelect = int(value) - bitCount += 11 if reader.TryReadBool() { value, err := reader.ReadBits(6) if err != nil { panic(err) } userCmdInfo.WeaponSubtype = int(value) - bitCount += 6 } - bitCount++ } - bitCount++ if reader.TryReadBool() { userCmdInfo.MouseDx = int16(reader.TryReadInt16()) - bitCount += 16 } - bitCount++ if reader.TryReadBool() { userCmdInfo.MouseDy = int16(reader.TryReadInt16()) - bitCount += 16 } - bitCount++ - /*if bitCount > size*8 { - //reader.SkipBits(size * 8) - return userCmdInfo - }*/ - reader.SkipBits(size*8 - bitCount) return userCmdInfo } diff --git a/packets/message.go b/packets/message.go index 3688ff9..922f918 100644 --- a/packets/message.go +++ b/packets/message.go @@ -31,7 +31,6 @@ func ParseMessage(reader *bitreader.ReaderType) (status int) { OutSequence: int32(reader.TryReadInt32()), Size: int32(reader.TryReadInt32()), } - //classes.ParseUserCmdInfo(reader, packet.Size) reader.SkipBytes(int(packet.Size)) //fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet) return 2 @@ -51,15 +50,15 @@ func ParseMessage(reader *bitreader.ReaderType) (status int) { Cmd: int32(reader.TryReadInt32()), Size: int32(reader.TryReadInt32()), } - userCmd.Data = classes.ParseUserCmdInfo(reader, int(userCmd.Size)) - fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd) + userCmd.Data = classes.ParseUserCmdInfo(reader.TryReadBytesToSlice(int(userCmd.Size))) + // fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd) return 5 case 0x06: // TODO: DataTables val := reader.TryReadInt32() reader.SkipBytes(int(val)) // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType) return 6 - case 0x07: // TODO: Stop - RemainingData + case 0x07: stop := Stop{ RemainingData: nil, } @@ -71,10 +70,12 @@ func ParseMessage(reader *bitreader.ReaderType) (status int) { reader.SkipBytes(int(val)) // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType) return 8 - case 0x09: // TODO: StringTables - val := reader.TryReadInt32() - reader.SkipBytes(int(val)) - // fmt.Printf("[%d] (%d) StringTables: \n", messageTick, messageType) + case 0x09: // TODO: StringTables - Data + stringTables := StringTables{ + Size: int32(reader.TryReadInt32()), + } + stringTables.Data = classes.ParseStringTable(reader.TryReadBytesToSlice(int(stringTables.Size))) + // fmt.Printf("[%d] (%d) StringTables: %v\n", messageTick, messageType, stringTables) return 9 default: return 0 diff --git a/packets/types.go b/packets/types.go index 5e75643..2a4cf4b 100644 --- a/packets/types.go +++ b/packets/types.go @@ -62,5 +62,5 @@ type CustomData struct { type StringTables struct { Size int32 - Data []byte + Data []classes.StringTable } -- cgit v1.2.3