diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-09-23 10:06:39 +0300 |
|---|---|---|
| committer | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-09-23 10:06:39 +0300 |
| commit | 9991801e4037d8dc530876584f21c1674c9e3bba (patch) | |
| tree | efa20cd6aa6556cfdea81f4c99251e0688847ca6 | |
| parent | organize packets and classes (#9) (diff) | |
| download | sdp.go-verification.tar.gz sdp.go-verification.tar.bz2 sdp.go-verification.zip | |
init: will look at this laterverification
Diffstat (limited to '')
49 files changed, 239 insertions, 507 deletions
diff --git a/cmd/parser.go b/cmd/parser.go index cf82529..1b17dce 100644 --- a/cmd/parser.go +++ b/cmd/parser.go | |||
| @@ -3,15 +3,20 @@ package main | |||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | "os" | 5 | "os" |
| 6 | "sort" | ||
| 7 | "strconv" | ||
| 8 | "strings" | ||
| 6 | 9 | ||
| 7 | "github.com/pektezol/bitreader" | 10 | "github.com/pektezol/bitreader" |
| 8 | "github.com/pektezol/demoparser/pkg/packets" | 11 | "github.com/pektezol/demoparser/pkg/packets" |
| 9 | "github.com/pektezol/demoparser/pkg/writer" | 12 | "github.com/pektezol/demoparser/pkg/verification" |
| 10 | ) | 13 | ) |
| 11 | 14 | ||
| 12 | const littleEndian bool = true | 15 | const littleEndian bool = true |
| 13 | 16 | ||
| 14 | func main() { | 17 | func main() { |
| 18 | fmt.Println("Portal 2 Run Validity Checker Tool") | ||
| 19 | fmt.Println() | ||
| 15 | if len(os.Args) != 2 { | 20 | if len(os.Args) != 2 { |
| 16 | panic("specify file in command line arguments") | 21 | panic("specify file in command line arguments") |
| 17 | } | 22 | } |
| @@ -24,9 +29,27 @@ func main() { | |||
| 24 | reader := bitreader.NewReader(file, littleEndian) | 29 | reader := bitreader.NewReader(file, littleEndian) |
| 25 | demoParserHandler(reader) | 30 | demoParserHandler(reader) |
| 26 | defer file.Close() | 31 | defer file.Close() |
| 27 | defer fmt.Println(writer.GetString()) | 32 | fmt.Println() |
| 33 | fmt.Println("Total Ticks from SAR:", verification.Ticks) | ||
| 34 | fmt.Println() | ||
| 35 | if verification.IsContinuous(verification.ServerNumbers) { | ||
| 36 | fmt.Println("Server Numbers: VALID") | ||
| 37 | fmt.Println(verification.ServerNumbers) | ||
| 38 | } else { | ||
| 39 | fmt.Println("[!] Server Numbers: NOT VALID") | ||
| 40 | fmt.Println(verification.ServerNumbers) | ||
| 41 | } | ||
| 42 | fmt.Scanln() | ||
| 28 | return | 43 | return |
| 29 | } | 44 | } |
| 45 | sort.Slice(files, func(i, j int) bool { | ||
| 46 | // Extract numeric parts from file names | ||
| 47 | numA := extractNumber(files[i].Name()) | ||
| 48 | numB := extractNumber(files[j].Name()) | ||
| 49 | |||
| 50 | // Compare the extracted numbers for sorting | ||
| 51 | return numA < numB | ||
| 52 | }) | ||
| 30 | for _, fileinfo := range files { // If it is a directory | 53 | for _, fileinfo := range files { // If it is a directory |
| 31 | file, err := os.Open(os.Args[1] + fileinfo.Name()) | 54 | file, err := os.Open(os.Args[1] + fileinfo.Name()) |
| 32 | if err != nil { | 55 | if err != nil { |
| @@ -35,8 +58,18 @@ func main() { | |||
| 35 | reader := bitreader.NewReader(file, littleEndian) | 58 | reader := bitreader.NewReader(file, littleEndian) |
| 36 | demoParserHandler(reader) | 59 | demoParserHandler(reader) |
| 37 | defer file.Close() | 60 | defer file.Close() |
| 38 | defer fmt.Println(writer.GetString()) | ||
| 39 | } | 61 | } |
| 62 | fmt.Println() | ||
| 63 | fmt.Println("Total Ticks from SAR:", verification.Ticks) | ||
| 64 | fmt.Println() | ||
| 65 | if verification.IsContinuous(verification.ServerNumbers) { | ||
| 66 | fmt.Println("Server Numbers: VALID") | ||
| 67 | fmt.Println(verification.ServerNumbers) | ||
| 68 | } else { | ||
| 69 | fmt.Println("[!] Server Numbers: NOT VALID") | ||
| 70 | fmt.Println(verification.ServerNumbers) | ||
| 71 | } | ||
| 72 | fmt.Scanln() | ||
| 40 | } | 73 | } |
| 41 | 74 | ||
| 42 | func demoParserHandler(reader *bitreader.Reader) { | 75 | func demoParserHandler(reader *bitreader.Reader) { |
| @@ -48,3 +81,17 @@ func demoParserHandler(reader *bitreader.Reader) { | |||
| 48 | } | 81 | } |
| 49 | } | 82 | } |
| 50 | } | 83 | } |
| 84 | |||
| 85 | func extractNumber(filename string) int { | ||
| 86 | // Split the filename by underscores | ||
| 87 | parts := strings.Split(filename, "_") | ||
| 88 | |||
| 89 | // Get the last part which should be the number | ||
| 90 | lastPart := parts[len(parts)-1] | ||
| 91 | |||
| 92 | // Remove any non-digit characters | ||
| 93 | numStr := strings.TrimSuffix(lastPart, ".dem") // Assuming filenames end with ".txt" | ||
| 94 | num, _ := strconv.Atoi(numStr) | ||
| 95 | |||
| 96 | return num | ||
| 97 | } | ||
diff --git a/pkg/classes/consoleCmd.go b/pkg/classes/consoleCmd.go index 75a56eb..aeb56a2 100644 --- a/pkg/classes/consoleCmd.go +++ b/pkg/classes/consoleCmd.go | |||
| @@ -1,10 +1,7 @@ | |||
| 1 | package classes | 1 | package classes |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "strings" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 5 | ) |
| 9 | 6 | ||
| 10 | type ConsoleCmd struct { | 7 | type ConsoleCmd struct { |
| @@ -15,5 +12,5 @@ type ConsoleCmd struct { | |||
| 15 | func (consoleCmd *ConsoleCmd) ParseConsoleCmd(reader *bitreader.Reader) { | 12 | func (consoleCmd *ConsoleCmd) ParseConsoleCmd(reader *bitreader.Reader) { |
| 16 | consoleCmd.Size = reader.TryReadSInt32() | 13 | consoleCmd.Size = reader.TryReadSInt32() |
| 17 | consoleCmd.Data = reader.TryReadStringLength(uint64(consoleCmd.Size)) | 14 | consoleCmd.Data = reader.TryReadStringLength(uint64(consoleCmd.Size)) |
| 18 | writer.AppendLine("\t%s", strings.TrimSpace(consoleCmd.Data)) | 15 | |
| 19 | } | 16 | } |
diff --git a/pkg/classes/customData.go b/pkg/classes/customData.go index 2dadde4..1fc8a1e 100644 --- a/pkg/classes/customData.go +++ b/pkg/classes/customData.go | |||
| @@ -2,7 +2,6 @@ package classes | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type CustomData struct { | 7 | type CustomData struct { |
| @@ -16,13 +15,13 @@ func (customData *CustomData) ParseCustomData(reader *bitreader.Reader, tickNumb | |||
| 16 | customData.Size = reader.TryReadSInt32() | 15 | customData.Size = reader.TryReadSInt32() |
| 17 | if customData.Type != 0 || customData.Size == 8 { | 16 | if customData.Type != 0 || customData.Size == 8 { |
| 18 | // Not SAR data | 17 | // Not SAR data |
| 19 | writer.AppendLine("[%d] %s (%d):", tickNumber, "CUSTOMDATA", packetType) | 18 | |
| 20 | customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size))) | 19 | customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size))) |
| 21 | writer.AppendLine("\t%s", customData.Data) | 20 | |
| 22 | return | 21 | return |
| 23 | } | 22 | } |
| 24 | // SAR data | 23 | // SAR data |
| 25 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SARDATA", packetType) | 24 | |
| 26 | sarData := SarData{} | 25 | sarData := SarData{} |
| 27 | data := reader.TryReadBytesToSlice(uint64(customData.Size)) | 26 | data := reader.TryReadBytesToSlice(uint64(customData.Size)) |
| 28 | sarReader := bitreader.NewReaderFromBytes(data, true) | 27 | sarReader := bitreader.NewReaderFromBytes(data, true) |
diff --git a/pkg/classes/dataTables.go b/pkg/classes/dataTables.go index 27ab9e4..64b909e 100644 --- a/pkg/classes/dataTables.go +++ b/pkg/classes/dataTables.go | |||
| @@ -4,7 +4,6 @@ import ( | |||
| 4 | "fmt" | 4 | "fmt" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 7 | ) |
| 9 | 8 | ||
| 10 | type DataTables struct { | 9 | type DataTables struct { |
| @@ -46,14 +45,12 @@ func (dataTables *DataTables) ParseDataTables(reader *bitreader.Reader) { | |||
| 46 | count++ | 45 | count++ |
| 47 | dataTables.SendTable = append(dataTables.SendTable, ParseSendTable(dataTableReader)) | 46 | dataTables.SendTable = append(dataTables.SendTable, ParseSendTable(dataTableReader)) |
| 48 | } | 47 | } |
| 49 | writer.AppendLine("\t%d Send Tables:", count) | 48 | |
| 50 | writer.AppendOutputFromTemp() | ||
| 51 | numOfClasses := dataTableReader.TryReadBits(16) | 49 | numOfClasses := dataTableReader.TryReadBits(16) |
| 52 | for count = 0; count < int(numOfClasses); count++ { | 50 | for count = 0; count < int(numOfClasses); count++ { |
| 53 | dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) | 51 | dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) |
| 54 | } | 52 | } |
| 55 | writer.AppendLine("\t%d Classes:", count) | 53 | |
| 56 | writer.AppendOutputFromTemp() | ||
| 57 | } | 54 | } |
| 58 | 55 | ||
| 59 | func ParseSendTable(reader *bitreader.Reader) SendTable { | 56 | func ParseSendTable(reader *bitreader.Reader) SendTable { |
| @@ -65,7 +62,7 @@ func ParseSendTable(reader *bitreader.Reader) SendTable { | |||
| 65 | if sendTable.NumOfProps < 0 { | 62 | if sendTable.NumOfProps < 0 { |
| 66 | return sendTable | 63 | return sendTable |
| 67 | } | 64 | } |
| 68 | writer.TempAppendLine("\t\t%s (%d Props):", sendTable.NetTableName, sendTable.NumOfProps) | 65 | |
| 69 | for count := 0; count < int(sendTable.NumOfProps); count++ { | 66 | for count := 0; count < int(sendTable.NumOfProps); count++ { |
| 70 | propType := int8(reader.TryReadBits(5)) | 67 | propType := int8(reader.TryReadBits(5)) |
| 71 | if propType >= int8(7) { | 68 | if propType >= int8(7) { |
| @@ -77,26 +74,26 @@ func ParseSendTable(reader *bitreader.Reader) SendTable { | |||
| 77 | SendPropFlags: uint32(reader.TryReadBits(19)), | 74 | SendPropFlags: uint32(reader.TryReadBits(19)), |
| 78 | Priority: reader.TryReadUInt8(), | 75 | Priority: reader.TryReadUInt8(), |
| 79 | } | 76 | } |
| 80 | writer.TempAppend("\t\t\t%s\t", prop.SendPropType) | 77 | |
| 81 | if propType == int8(ESendPropTypeDataTable) || checkBit(prop.SendPropFlags, 6) { | 78 | if propType == int8(ESendPropTypeDataTable) || checkBit(prop.SendPropFlags, 6) { |
| 82 | prop.ExcludeDtName = reader.TryReadString() | 79 | prop.ExcludeDtName = reader.TryReadString() |
| 83 | writer.TempAppend(":\t%s\t", prop.ExcludeDtName) | 80 | |
| 84 | } else { | 81 | } else { |
| 85 | switch propType { | 82 | switch propType { |
| 86 | case int8(ESendPropTypeString), int8(ESendPropTypeInt), int8(ESendPropTypeFloat), int8(ESendPropTypeVector3), int8(ESendPropTypeVector2): | 83 | case int8(ESendPropTypeString), int8(ESendPropTypeInt), int8(ESendPropTypeFloat), int8(ESendPropTypeVector3), int8(ESendPropTypeVector2): |
| 87 | prop.LowValue = reader.TryReadFloat32() | 84 | prop.LowValue = reader.TryReadFloat32() |
| 88 | prop.HighValue = reader.TryReadFloat32() | 85 | prop.HighValue = reader.TryReadFloat32() |
| 89 | prop.NumBits = int32(reader.TryReadBits(7)) | 86 | prop.NumBits = int32(reader.TryReadBits(7)) |
| 90 | writer.TempAppend("Low: %f\tHigh: %f\t%d bits\t", prop.LowValue, prop.HighValue, prop.NumBits) | 87 | |
| 91 | case int8(ESendPropTypeArray): | 88 | case int8(ESendPropTypeArray): |
| 92 | prop.NumElements = int32(reader.TryReadBits(10)) | 89 | prop.NumElements = int32(reader.TryReadBits(10)) |
| 93 | writer.TempAppend("Elements: %d\t", prop.NumElements) | 90 | |
| 94 | default: | 91 | default: |
| 95 | writer.TempAppend("Unknown Prop Type: %v\t", propType) | 92 | |
| 96 | return sendTable | 93 | return sendTable |
| 97 | } | 94 | } |
| 98 | } | 95 | } |
| 99 | writer.TempAppend("Flags: %v\tPriority: %d\n", prop.GetFlags(), prop.Priority) | 96 | |
| 100 | sendTable.Props = append(sendTable.Props, prop) | 97 | sendTable.Props = append(sendTable.Props, prop) |
| 101 | } | 98 | } |
| 102 | return sendTable | 99 | return sendTable |
| @@ -108,7 +105,7 @@ func ParseServerClassInfo(reader *bitreader.Reader, count int, numOfClasses int) | |||
| 108 | ClassName: reader.TryReadString(), | 105 | ClassName: reader.TryReadString(), |
| 109 | DataTableName: reader.TryReadString(), | 106 | DataTableName: reader.TryReadString(), |
| 110 | } | 107 | } |
| 111 | writer.TempAppendLine("\t\t\t[%d] %s (%s)", serverClassInfo.ClassId, serverClassInfo.ClassName, serverClassInfo.DataTableName) | 108 | |
| 112 | return serverClassInfo | 109 | return serverClassInfo |
| 113 | } | 110 | } |
| 114 | 111 | ||
diff --git a/pkg/classes/packet.go b/pkg/classes/packet.go index 0bba102..a81cd87 100644 --- a/pkg/classes/packet.go +++ b/pkg/classes/packet.go | |||
| @@ -1,11 +1,7 @@ | |||
| 1 | package classes | 1 | package classes |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/messages" | ||
| 8 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 9 | ) | 5 | ) |
| 10 | 6 | ||
| 11 | const MSSC int = 2 | 7 | const MSSC int = 2 |
| @@ -30,61 +26,8 @@ type CmdInfo struct { | |||
| 30 | 26 | ||
| 31 | func (packet *Packet) ParsePacket(reader *bitreader.Reader) { | 27 | func (packet *Packet) ParsePacket(reader *bitreader.Reader) { |
| 32 | for count := 0; count < MSSC; count++ { | 28 | for count := 0; count < MSSC; count++ { |
| 33 | packet.ParseCmdInfo(reader) | 29 | reader.SkipBytes(76) |
| 34 | } | ||
| 35 | packet.InSequence = reader.TryReadUInt32() | ||
| 36 | packet.OutSequence = reader.TryReadUInt32() | ||
| 37 | packet.Size = reader.TryReadUInt32() | ||
| 38 | packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(packet.Size)), true) | ||
| 39 | for { | ||
| 40 | messageType, err := packetReader.ReadBits(6) | ||
| 41 | if err != nil { | ||
| 42 | break | ||
| 43 | } | ||
| 44 | packet.Data = append(packet.Data, messages.ParseMessages(messageType, packetReader)) | ||
| 45 | } | ||
| 46 | } | ||
| 47 | |||
| 48 | func (packet *Packet) ParseCmdInfo(reader *bitreader.Reader) { | ||
| 49 | packet.PacketInfo = append(packet.PacketInfo, CmdInfo{ | ||
| 50 | Flags: reader.TryReadUInt32(), | ||
| 51 | ViewOrigin: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 52 | ViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 53 | LocalViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 54 | ViewOrigin2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 55 | ViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 56 | LocalViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 57 | }) | ||
| 58 | writer.AppendLine("\tFlags: %s", CmdInfoFlags(packet.PacketInfo[len(packet.PacketInfo)-1].Flags).String()) | ||
| 59 | writer.AppendLine("\tView Origin: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewOrigin) | ||
| 60 | writer.AppendLine("\tView Angles: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewAngles) | ||
| 61 | writer.AppendLine("\tLocal View Angles: %v", packet.PacketInfo[len(packet.PacketInfo)-1].LocalViewAngles) | ||
| 62 | writer.AppendLine("\tView Origin 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewOrigin2) | ||
| 63 | writer.AppendLine("\tView Angles 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].ViewAngles2) | ||
| 64 | writer.AppendLine("\tLocal View Angles 2: %v", packet.PacketInfo[len(packet.PacketInfo)-1].LocalViewAngles2) | ||
| 65 | writer.AppendLine("") | ||
| 66 | } | ||
| 67 | |||
| 68 | type CmdInfoFlags int | ||
| 69 | |||
| 70 | const ( | ||
| 71 | ECmdInfoFlagsNone = 0 | ||
| 72 | ECmdInfoFlagsUseOrigin2 = 1 | ||
| 73 | ECmdInfoFlagsUserAngles2 = 1 << 1 | ||
| 74 | ECmdInfoFlagsNoInterp = 1 << 2 | ||
| 75 | ) | ||
| 76 | |||
| 77 | func (cmdInfoFlags CmdInfoFlags) String() string { | ||
| 78 | switch cmdInfoFlags { | ||
| 79 | case ECmdInfoFlagsNone: | ||
| 80 | return "None" | ||
| 81 | case ECmdInfoFlagsUseOrigin2: | ||
| 82 | return "UseOrigin2" | ||
| 83 | case ECmdInfoFlagsUserAngles2: | ||
| 84 | return "UserAngles2" | ||
| 85 | case ECmdInfoFlagsNoInterp: | ||
| 86 | return "NoInterp" | ||
| 87 | default: | ||
| 88 | return fmt.Sprintf("%d", int(cmdInfoFlags)) | ||
| 89 | } | 30 | } |
| 31 | reader.SkipBytes(8) | ||
| 32 | reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32())) | ||
| 90 | } | 33 | } |
diff --git a/pkg/classes/sarData.go b/pkg/classes/sarData.go index 27e8a64..9e6ae0b 100644 --- a/pkg/classes/sarData.go +++ b/pkg/classes/sarData.go | |||
| @@ -5,7 +5,7 @@ import ( | |||
| 5 | "fmt" | 5 | "fmt" |
| 6 | 6 | ||
| 7 | "github.com/pektezol/bitreader" | 7 | "github.com/pektezol/bitreader" |
| 8 | "github.com/pektezol/demoparser/pkg/writer" | 8 | "github.com/pektezol/demoparser/pkg/verification" |
| 9 | ) | 9 | ) |
| 10 | 10 | ||
| 11 | type SarDataType uint8 | 11 | type SarDataType uint8 |
| @@ -164,26 +164,31 @@ func (sarData *SarData) ParseSarData(reader *bitreader.Reader) (err error) { | |||
| 164 | len = 9 | 164 | len = 9 |
| 165 | } | 165 | } |
| 166 | dataReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(len-1), true) | 166 | dataReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(len-1), true) |
| 167 | writer.AppendLine("\tMessage: %s (%d):", sarData.Type.String(), sarData.Type) | ||
| 168 | switch sarData.Type { | 167 | switch sarData.Type { |
| 169 | case ESarDataTimescaleCheat: | 168 | case ESarDataTimescaleCheat: |
| 169 | fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 170 | |||
| 170 | sarData.Data, err = parseTimescaleCheatData(dataReader, len) | 171 | sarData.Data, err = parseTimescaleCheatData(dataReader, len) |
| 171 | if err != nil { | 172 | if err != nil { |
| 172 | sarData.Data = nil | 173 | sarData.Data = nil |
| 173 | } | 174 | } |
| 174 | case ESarDataInitialCVar: | 175 | case ESarDataInitialCVar: |
| 176 | |||
| 175 | sarData.Data = parseInitialCVarData(dataReader) | 177 | sarData.Data = parseInitialCVarData(dataReader) |
| 176 | case ESarDataEntityInputSlot: | 178 | case ESarDataEntityInputSlot: |
| 177 | sarData.Slot = int(dataReader.TryReadBytes(1)) | 179 | sarData.Slot = int(dataReader.TryReadBytes(1)) |
| 178 | writer.AppendLine("\t\tSlot: %d", sarData.Slot) | ||
| 179 | case ESarDataEntityInput: | 180 | case ESarDataEntityInput: |
| 180 | sarData.Data = parseEntityInputData(dataReader) | 181 | sarData.Data = parseEntityInputData(dataReader) |
| 181 | case ESarDataChecksum: | 182 | case ESarDataChecksum: |
| 183 | // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 184 | |||
| 182 | sarData.Data, err = parseChecksumData(dataReader, len) | 185 | sarData.Data, err = parseChecksumData(dataReader, len) |
| 183 | if err != nil { | 186 | if err != nil { |
| 184 | sarData.Data = nil | 187 | sarData.Data = nil |
| 185 | } | 188 | } |
| 186 | case ESarDataChecksumV2: | 189 | case ESarDataChecksumV2: |
| 190 | // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 191 | |||
| 187 | sarData.Data, err = parseChecksumV2Data(dataReader, len) | 192 | sarData.Data, err = parseChecksumV2Data(dataReader, len) |
| 188 | if err != nil { | 193 | if err != nil { |
| 189 | sarData.Data = nil | 194 | sarData.Data = nil |
| @@ -197,37 +202,50 @@ func (sarData *SarData) ParseSarData(reader *bitreader.Reader) (err error) { | |||
| 197 | sarData.Slot = slot | 202 | sarData.Slot = slot |
| 198 | } | 203 | } |
| 199 | case ESarDataChallengeFlags, ESarDataCrouchFly: | 204 | case ESarDataChallengeFlags, ESarDataCrouchFly: |
| 205 | // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 206 | |||
| 200 | sarData.Slot, err = parseChallengeFlagsCrouchFlyData(dataReader, len) | 207 | sarData.Slot, err = parseChallengeFlagsCrouchFlyData(dataReader, len) |
| 201 | if err != nil { | 208 | if err != nil { |
| 202 | sarData.Data = nil | 209 | sarData.Data = nil |
| 203 | } | 210 | } |
| 204 | writer.AppendLine("\t\tSlot: %d", sarData.Slot) | 211 | // fmt.Printf("\t\tSlot: %d\n", sarData.Slot) |
| 205 | case ESarDataPause: | 212 | case ESarDataPause: |
| 213 | fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 214 | |||
| 206 | sarData.Data, err = parsePauseData(dataReader, len) | 215 | sarData.Data, err = parsePauseData(dataReader, len) |
| 207 | if err != nil { | 216 | if err != nil { |
| 208 | sarData.Data = nil | 217 | sarData.Data = nil |
| 209 | } | 218 | } |
| 210 | case ESarDataWaitRun: | 219 | case ESarDataWaitRun: |
| 220 | fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 221 | |||
| 211 | sarData.Data, err = parseWaitRunData(dataReader, len) | 222 | sarData.Data, err = parseWaitRunData(dataReader, len) |
| 212 | if err != nil { | 223 | if err != nil { |
| 213 | sarData.Data = nil | 224 | sarData.Data = nil |
| 214 | } | 225 | } |
| 215 | case ESarDataHWaitRun: | 226 | case ESarDataHWaitRun: |
| 227 | fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 228 | |||
| 216 | sarData.Data, err = parseHWaitRunData(dataReader, len) | 229 | sarData.Data, err = parseHWaitRunData(dataReader, len) |
| 217 | if err != nil { | 230 | if err != nil { |
| 218 | sarData.Data = nil | 231 | sarData.Data = nil |
| 219 | } | 232 | } |
| 220 | case ESarDataSpeedrunTime: | 233 | case ESarDataSpeedrunTime: |
| 234 | fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 235 | |||
| 221 | sarData.Data, err = parseSpeedrunTimeData(dataReader, len) | 236 | sarData.Data, err = parseSpeedrunTimeData(dataReader, len) |
| 222 | if err != nil { | 237 | if err != nil { |
| 223 | sarData.Data = nil | 238 | sarData.Data = nil |
| 224 | } | 239 | } |
| 225 | case ESarDataTimestamp: | 240 | case ESarDataTimestamp: |
| 241 | // fmt.Printf("\tMessage: %s (%d):\n", sarData.Type.String(), sarData.Type) | ||
| 242 | |||
| 226 | sarData.Data, err = parseTimestampData(dataReader, len) | 243 | sarData.Data, err = parseTimestampData(dataReader, len) |
| 227 | if err != nil { | 244 | if err != nil { |
| 228 | sarData.Data = nil | 245 | sarData.Data = nil |
| 229 | } | 246 | } |
| 230 | case ESarDataFileChecksum: | 247 | case ESarDataFileChecksum: |
| 248 | |||
| 231 | sarData.Data, err = parseFileChecksumData(dataReader, len) | 249 | sarData.Data, err = parseFileChecksumData(dataReader, len) |
| 232 | if err != nil { | 250 | if err != nil { |
| 233 | sarData.Data = nil | 251 | sarData.Data = nil |
| @@ -246,7 +264,7 @@ func parseTimescaleCheatData(reader *bitreader.Reader, length uint64) (SarDataTi | |||
| 246 | sarDataTimescaleCheat := SarDataTimescaleCheat{ | 264 | sarDataTimescaleCheat := SarDataTimescaleCheat{ |
| 247 | Timescale: reader.TryReadFloat32(), | 265 | Timescale: reader.TryReadFloat32(), |
| 248 | } | 266 | } |
| 249 | writer.AppendLine("\t\tTimescale: %f", sarDataTimescaleCheat.Timescale) | 267 | fmt.Printf("\t\tTimescale: %f\n", sarDataTimescaleCheat.Timescale) |
| 250 | return sarDataTimescaleCheat, nil | 268 | return sarDataTimescaleCheat, nil |
| 251 | } | 269 | } |
| 252 | 270 | ||
| @@ -255,7 +273,7 @@ func parseInitialCVarData(reader *bitreader.Reader) SarDataInitialCVar { | |||
| 255 | CVar: reader.TryReadString(), | 273 | CVar: reader.TryReadString(), |
| 256 | Val: reader.TryReadString(), | 274 | Val: reader.TryReadString(), |
| 257 | } | 275 | } |
| 258 | writer.AppendLine("\t\tCvar: \"%s\" = \"%s\"", sarDataInitialCvar.CVar, sarDataInitialCvar.Val) | 276 | // fmt.Printf("\t\tCvar: \"%s\" = \"%s\"\n", sarDataInitialCvar.CVar, sarDataInitialCvar.Val) |
| 259 | return sarDataInitialCvar | 277 | return sarDataInitialCvar |
| 260 | } | 278 | } |
| 261 | 279 | ||
| @@ -266,10 +284,10 @@ func parseEntityInputData(reader *bitreader.Reader) SarDataEntityInput { | |||
| 266 | InputName: reader.TryReadString(), | 284 | InputName: reader.TryReadString(), |
| 267 | Parameter: reader.TryReadString(), | 285 | Parameter: reader.TryReadString(), |
| 268 | } | 286 | } |
| 269 | writer.AppendLine("\t\tTarget: %s", sarDataEntityInput.TargetName) | 287 | // fmt.Printf("\t\tTarget: %s\n", sarDataEntityInput.TargetName) |
| 270 | writer.AppendLine("\t\tClass: %s", sarDataEntityInput.ClassName) | 288 | // fmt.Printf("\t\tClass: %s\n", sarDataEntityInput.ClassName) |
| 271 | writer.AppendLine("\t\tInput: %s", sarDataEntityInput.InputName) | 289 | // fmt.Printf("\t\tInput: %s\n", sarDataEntityInput.InputName) |
| 272 | writer.AppendLine("\t\tParameter: %s", sarDataEntityInput.Parameter) | 290 | // fmt.Printf("\t\tParameter: %s\n", sarDataEntityInput.Parameter) |
| 273 | return sarDataEntityInput | 291 | return sarDataEntityInput |
| 274 | } | 292 | } |
| 275 | 293 | ||
| @@ -281,8 +299,8 @@ func parseChecksumData(reader *bitreader.Reader, length uint64) (SarDataChecksum | |||
| 281 | DemoSum: reader.TryReadUInt32(), | 299 | DemoSum: reader.TryReadUInt32(), |
| 282 | SarSum: reader.TryReadUInt32(), | 300 | SarSum: reader.TryReadUInt32(), |
| 283 | } | 301 | } |
| 284 | writer.AppendLine("\t\tDemo Checksum: %d", sarDataChecksum.DemoSum) | 302 | // fmt.Printf("\t\tDemo Checksum: %d\n", sarDataChecksum.DemoSum) |
| 285 | writer.AppendLine("\t\tSAR Checksum: %d", sarDataChecksum.SarSum) | 303 | // fmt.Printf("\t\tSAR Checksum: %d\n", sarDataChecksum.SarSum) |
| 286 | return sarDataChecksum, nil | 304 | return sarDataChecksum, nil |
| 287 | } | 305 | } |
| 288 | 306 | ||
| @@ -294,8 +312,8 @@ func parseChecksumV2Data(reader *bitreader.Reader, length uint64) (SarDataChecks | |||
| 294 | SarSum: reader.TryReadUInt32(), | 312 | SarSum: reader.TryReadUInt32(), |
| 295 | Signature: [64]byte(reader.TryReadBytesToSlice(60)), | 313 | Signature: [64]byte(reader.TryReadBytesToSlice(60)), |
| 296 | } | 314 | } |
| 297 | writer.AppendLine("\t\tSAR Checksum: %d", sarDataChecksumV2.SarSum) | 315 | // fmt.Printf("\t\tSAR Checksum: %d\n", sarDataChecksumV2.SarSum) |
| 298 | writer.AppendLine("\t\tSignature: %v", sarDataChecksumV2.Signature) | 316 | // fmt.Printf("\t\tSignature: %v\n", sarDataChecksumV2.Signature) |
| 299 | return sarDataChecksumV2, nil | 317 | return sarDataChecksumV2, nil |
| 300 | } | 318 | } |
| 301 | 319 | ||
| @@ -312,10 +330,10 @@ func parsePortalPlacementData(reader *bitreader.Reader, length uint64) (SarDataP | |||
| 312 | Y: reader.TryReadFloat32(), | 330 | Y: reader.TryReadFloat32(), |
| 313 | Z: reader.TryReadFloat32(), | 331 | Z: reader.TryReadFloat32(), |
| 314 | } | 332 | } |
| 315 | writer.AppendLine("\t\tOrange: %t", orange) | 333 | // fmt.Printf("\t\tOrange: %t\n", orange) |
| 316 | writer.AppendLine("\t\tX: %f", sarDataPortalPlacement.X) | 334 | // fmt.Printf("\t\tX: %f\n", sarDataPortalPlacement.X) |
| 317 | writer.AppendLine("\t\tY: %f", sarDataPortalPlacement.Y) | 335 | // fmt.Printf("\t\tY: %f\n", sarDataPortalPlacement.Y) |
| 318 | writer.AppendLine("\t\tZ: %f", sarDataPortalPlacement.Z) | 336 | // fmt.Printf("\t\tZ: %f\n", sarDataPortalPlacement.Z) |
| 319 | return sarDataPortalPlacement, slot, nil | 337 | return sarDataPortalPlacement, slot, nil |
| 320 | } | 338 | } |
| 321 | 339 | ||
| @@ -333,7 +351,7 @@ func parsePauseData(reader *bitreader.Reader, length uint64) (SarDataPause, erro | |||
| 333 | sarDataPause := SarDataPause{ | 351 | sarDataPause := SarDataPause{ |
| 334 | PauseTicks: reader.TryReadUInt32(), | 352 | PauseTicks: reader.TryReadUInt32(), |
| 335 | } | 353 | } |
| 336 | writer.AppendLine("\t\tPause Ticks: %d", sarDataPause.PauseTicks) | 354 | fmt.Printf("\t\tPause Ticks: %d\n", sarDataPause.PauseTicks) |
| 337 | return sarDataPause, nil | 355 | return sarDataPause, nil |
| 338 | } | 356 | } |
| 339 | 357 | ||
| @@ -345,8 +363,8 @@ func parseWaitRunData(reader *bitreader.Reader, length uint64) (SarDataWaitRun, | |||
| 345 | Ticks: int(reader.TryReadUInt32()), | 363 | Ticks: int(reader.TryReadUInt32()), |
| 346 | Cmd: reader.TryReadString(), | 364 | Cmd: reader.TryReadString(), |
| 347 | } | 365 | } |
| 348 | writer.AppendLine("\t\tTicks: %d", sarDataWaitRun.Ticks) | 366 | fmt.Printf("\t\tTicks: %d\n", sarDataWaitRun.Ticks) |
| 349 | writer.AppendLine("\t\tCmd: \"%s\"", sarDataWaitRun.Cmd) | 367 | fmt.Printf("\t\tCmd: \"%s\"\n", sarDataWaitRun.Cmd) |
| 350 | return sarDataWaitRun, nil | 368 | return sarDataWaitRun, nil |
| 351 | } | 369 | } |
| 352 | 370 | ||
| @@ -358,8 +376,8 @@ func parseHWaitRunData(reader *bitreader.Reader, length uint64) (SarDataHWaitRun | |||
| 358 | Ticks: int(reader.TryReadUInt32()), | 376 | Ticks: int(reader.TryReadUInt32()), |
| 359 | Cmd: reader.TryReadString(), | 377 | Cmd: reader.TryReadString(), |
| 360 | } | 378 | } |
| 361 | writer.AppendLine("\t\tTicks: %d", sarDataHWaitRun.Ticks) | 379 | fmt.Printf("\t\tTicks: %d\n", sarDataHWaitRun.Ticks) |
| 362 | writer.AppendLine("\t\tCmd: \"%s\"", sarDataHWaitRun.Cmd) | 380 | fmt.Printf("\t\tCmd: \"%s\"\n", sarDataHWaitRun.Cmd) |
| 363 | return sarDataHWaitRun, nil | 381 | return sarDataHWaitRun, nil |
| 364 | } | 382 | } |
| 365 | 383 | ||
| @@ -372,14 +390,15 @@ func parseSpeedrunTimeData(reader *bitreader.Reader, length uint64) (SarDataSpee | |||
| 372 | for splitCount := 0; splitCount < int(numberOfSplits); splitCount++ { | 390 | for splitCount := 0; splitCount < int(numberOfSplits); splitCount++ { |
| 373 | splits[splitCount].Name = reader.TryReadString() | 391 | splits[splitCount].Name = reader.TryReadString() |
| 374 | splits[splitCount].NSegs = reader.TryReadUInt32() | 392 | splits[splitCount].NSegs = reader.TryReadUInt32() |
| 375 | writer.AppendLine("\t\t[%d] Split Name: \"%s\"", splitCount, splits[splitCount].Name) | 393 | fmt.Printf("\t\t[%d] Split Name: \"%s\"\n", splitCount, splits[splitCount].Name) |
| 376 | writer.AppendLine("\t\t[%d] Number of Segments: %d", splitCount, splits[splitCount].NSegs) | 394 | fmt.Printf("\t\t[%d] Number of Segments: %d\n", splitCount, splits[splitCount].NSegs) |
| 377 | splits[splitCount].Segs = make([]SarDataSpeedrunTimeSegs, splits[splitCount].NSegs) | 395 | splits[splitCount].Segs = make([]SarDataSpeedrunTimeSegs, splits[splitCount].NSegs) |
| 378 | for segCount := 0; segCount < int(splits[splitCount].NSegs); segCount++ { | 396 | for segCount := 0; segCount < int(splits[splitCount].NSegs); segCount++ { |
| 379 | splits[splitCount].Segs[segCount].Name = reader.TryReadString() | 397 | splits[splitCount].Segs[segCount].Name = reader.TryReadString() |
| 380 | splits[splitCount].Segs[segCount].Ticks = reader.TryReadUInt32() | 398 | splits[splitCount].Segs[segCount].Ticks = reader.TryReadUInt32() |
| 381 | writer.AppendLine("\t\t\t[%d] Segment Name: \"%s\"", segCount, splits[splitCount].Segs[segCount].Name) | 399 | verification.Ticks += splits[splitCount].Segs[segCount].Ticks |
| 382 | writer.AppendLine("\t\t\t[%d] Segment Ticks: %d", segCount, splits[splitCount].Segs[segCount].Ticks) | 400 | fmt.Printf("\t\t\t[%d] Segment Name: \"%s\"\n", segCount, splits[splitCount].Segs[segCount].Name) |
| 401 | fmt.Printf("\t\t\t[%d] Segment Ticks: %d\n", segCount, splits[splitCount].Segs[segCount].Ticks) | ||
| 383 | } | 402 | } |
| 384 | } | 403 | } |
| 385 | return SarDataSpeedrunTime{ | 404 | return SarDataSpeedrunTime{ |
| @@ -401,12 +420,12 @@ func parseTimestampData(reader *bitreader.Reader, length uint64) (SarDataTimesta | |||
| 401 | Minute: timestamp[5], | 420 | Minute: timestamp[5], |
| 402 | Second: timestamp[6], | 421 | Second: timestamp[6], |
| 403 | } | 422 | } |
| 404 | writer.AppendLine("\t\tYear: %d", sarDataTimeStamp.Year) | 423 | // fmt.Printf("\t\tYear: %d\n", sarDataTimeStamp.Year) |
| 405 | writer.AppendLine("\t\tMonth: %d", sarDataTimeStamp.Month) | 424 | // fmt.Printf("\t\tMonth: %d\n", sarDataTimeStamp.Month) |
| 406 | writer.AppendLine("\t\tDay: %d", sarDataTimeStamp.Day) | 425 | // fmt.Printf("\t\tDay: %d\n", sarDataTimeStamp.Day) |
| 407 | writer.AppendLine("\t\tHour: %d", sarDataTimeStamp.Hour) | 426 | // fmt.Printf("\t\tHour: %d\n", sarDataTimeStamp.Hour) |
| 408 | writer.AppendLine("\t\tMinute: %d", sarDataTimeStamp.Minute) | 427 | // fmt.Printf("\t\tMinute: %d\n", sarDataTimeStamp.Minute) |
| 409 | writer.AppendLine("\t\tSecond: %d", sarDataTimeStamp.Second) | 428 | // fmt.Printf("\t\tSecond: %d\n", sarDataTimeStamp.Second) |
| 410 | return sarDataTimeStamp, nil | 429 | return sarDataTimeStamp, nil |
| 411 | } | 430 | } |
| 412 | 431 | ||
| @@ -418,7 +437,7 @@ func parseFileChecksumData(reader *bitreader.Reader, length uint64) (SarDataFile | |||
| 418 | Sum: reader.TryReadUInt32(), | 437 | Sum: reader.TryReadUInt32(), |
| 419 | Path: reader.TryReadString(), | 438 | Path: reader.TryReadString(), |
| 420 | } | 439 | } |
| 421 | writer.AppendLine("\t\tChecksum: %d", sarDataFileChecksum.Sum) | 440 | // fmt.Printf("\t\tChecksum: %d\n", sarDataFileChecksum.Sum) |
| 422 | writer.AppendLine("\t\tPath: \"%s\"", sarDataFileChecksum.Path) | 441 | // fmt.Printf("\t\tPath: \"%s\"\n", sarDataFileChecksum.Path) |
| 423 | return sarDataFileChecksum, nil | 442 | return sarDataFileChecksum, nil |
| 424 | } | 443 | } |
diff --git a/pkg/classes/signOn.go b/pkg/classes/signOn.go deleted file mode 100644 index fad696c..0000000 --- a/pkg/classes/signOn.go +++ /dev/null | |||
| @@ -1,52 +0,0 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "github.com/pektezol/bitreader" | ||
| 5 | "github.com/pektezol/demoparser/pkg/messages" | ||
| 6 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 7 | ) | ||
| 8 | |||
| 9 | type SignOn struct { | ||
| 10 | PacketInfo []CmdInfo | ||
| 11 | InSequence uint32 | ||
| 12 | OutSequence uint32 | ||
| 13 | Size uint32 | ||
| 14 | Data []any | ||
| 15 | } | ||
| 16 | |||
| 17 | func (signOn *SignOn) ParseSignOn(reader *bitreader.Reader) { | ||
| 18 | for count := 0; count < MSSC; count++ { | ||
| 19 | signOn.ParseCmdInfo(reader) | ||
| 20 | } | ||
| 21 | signOn.InSequence = reader.TryReadUInt32() | ||
| 22 | signOn.OutSequence = reader.TryReadUInt32() | ||
| 23 | signOn.Size = reader.TryReadUInt32() | ||
| 24 | packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(signOn.Size)), true) | ||
| 25 | for { | ||
| 26 | messageType, err := packetReader.ReadBits(6) | ||
| 27 | if err != nil { | ||
| 28 | break | ||
| 29 | } | ||
| 30 | signOn.Data = append(signOn.Data, messages.ParseMessages(messageType, packetReader)) | ||
| 31 | } | ||
| 32 | } | ||
| 33 | |||
| 34 | func (signOn *SignOn) ParseCmdInfo(reader *bitreader.Reader) { | ||
| 35 | signOn.PacketInfo = append(signOn.PacketInfo, CmdInfo{ | ||
| 36 | Flags: reader.TryReadUInt32(), | ||
| 37 | ViewOrigin: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 38 | ViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 39 | LocalViewAngles: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 40 | ViewOrigin2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 41 | ViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 42 | LocalViewAngles2: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | ||
| 43 | }) | ||
| 44 | writer.AppendLine("\tFlags: %s", CmdInfoFlags(signOn.PacketInfo[len(signOn.PacketInfo)-1].Flags).String()) | ||
| 45 | writer.AppendLine("\tView Origin: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewOrigin) | ||
| 46 | writer.AppendLine("\tView Angles: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewAngles) | ||
| 47 | writer.AppendLine("\tLocal View Angles: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].LocalViewAngles) | ||
| 48 | writer.AppendLine("\tView Origin 2: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewOrigin2) | ||
| 49 | writer.AppendLine("\tView Angles 2: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].ViewAngles2) | ||
| 50 | writer.AppendLine("\tLocal View Angles 2: %v", signOn.PacketInfo[len(signOn.PacketInfo)-1].LocalViewAngles2) | ||
| 51 | writer.AppendLine("") | ||
| 52 | } | ||
diff --git a/pkg/classes/stop.go b/pkg/classes/stop.go deleted file mode 100644 index 753be19..0000000 --- a/pkg/classes/stop.go +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "github.com/pektezol/bitreader" | ||
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | ||
| 7 | |||
| 8 | type Stop struct { | ||
| 9 | RemainingData []byte | ||
| 10 | } | ||
| 11 | |||
| 12 | func (stop *Stop) ParseStop(reader *bitreader.Reader) { | ||
| 13 | if reader.TryReadBool() { | ||
| 14 | stop.RemainingData = reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits())) | ||
| 15 | writer.AppendLine("\tRemaining Data: %v", stop.RemainingData) | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/pkg/classes/stringTables.go b/pkg/classes/stringTables.go deleted file mode 100644 index 01939b2..0000000 --- a/pkg/classes/stringTables.go +++ /dev/null | |||
| @@ -1,100 +0,0 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "github.com/pektezol/bitreader" | ||
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | ||
| 7 | |||
| 8 | type StringTables struct { | ||
| 9 | Size int32 | ||
| 10 | Data []StringTable | ||
| 11 | } | ||
| 12 | |||
| 13 | type StringTable struct { | ||
| 14 | Name string | ||
| 15 | TableEntries []StringTableEntry | ||
| 16 | Classes []StringTableClass | ||
| 17 | } | ||
| 18 | |||
| 19 | type StringTableEntry struct { | ||
| 20 | Name string | ||
| 21 | EntryData StringTableEntryData | ||
| 22 | } | ||
| 23 | |||
| 24 | type StringTableEntryData struct { | ||
| 25 | // TODO: Parse StringTableEntry | ||
| 26 | } | ||
| 27 | |||
| 28 | type StringTableClass struct { | ||
| 29 | Name string | ||
| 30 | Data string | ||
| 31 | } | ||
| 32 | |||
| 33 | func (stringTables *StringTables) ParseStringTables(reader *bitreader.Reader) { | ||
| 34 | stringTables.Size = reader.TryReadSInt32() | ||
| 35 | stringTableReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(stringTables.Size)), true) | ||
| 36 | tableCount := stringTableReader.TryReadBits(8) | ||
| 37 | tables := make([]StringTable, tableCount) | ||
| 38 | for i := 0; i < int(tableCount); i++ { | ||
| 39 | var table StringTable | ||
| 40 | table.ParseStream(stringTableReader) | ||
| 41 | tables[i] = table | ||
| 42 | } | ||
| 43 | stringTables.Data = tables | ||
| 44 | } | ||
| 45 | |||
| 46 | func (stringTable *StringTable) ParseStream(reader *bitreader.Reader) { | ||
| 47 | stringTable.Name = reader.TryReadString() | ||
| 48 | entryCount := reader.TryReadBits(16) | ||
| 49 | writer.AppendLine("\tTable Name: %s", stringTable.Name) | ||
| 50 | stringTable.TableEntries = make([]StringTableEntry, entryCount) | ||
| 51 | |||
| 52 | for i := 0; i < int(entryCount); i++ { | ||
| 53 | var entry StringTableEntry | ||
| 54 | entry.Parse(reader) | ||
| 55 | stringTable.TableEntries[i] = entry | ||
| 56 | } | ||
| 57 | if entryCount != 0 { | ||
| 58 | writer.AppendLine("\t\t%d Table Entries:", entryCount) | ||
| 59 | writer.AppendOutputFromTemp() | ||
| 60 | } else { | ||
| 61 | writer.AppendLine("\t\tNo Table Entries") | ||
| 62 | } | ||
| 63 | if reader.TryReadBool() { | ||
| 64 | classCount := reader.TryReadBits(16) | ||
| 65 | stringTable.Classes = make([]StringTableClass, classCount) | ||
| 66 | |||
| 67 | for i := 0; i < int(classCount); i++ { | ||
| 68 | var class StringTableClass | ||
| 69 | class.Parse(reader) | ||
| 70 | stringTable.Classes[i] = class | ||
| 71 | } | ||
| 72 | writer.AppendLine("\t\t%d Classes:", classCount) | ||
| 73 | writer.AppendOutputFromTemp() | ||
| 74 | } else { | ||
| 75 | writer.AppendLine("\t\tNo Class Entries") | ||
| 76 | } | ||
| 77 | } | ||
| 78 | |||
| 79 | func (stringTableEntry *StringTableEntry) Parse(reader *bitreader.Reader) { | ||
| 80 | stringTableEntry.Name = reader.TryReadString() | ||
| 81 | if reader.TryReadBool() { | ||
| 82 | byteLen, err := reader.ReadBits(16) | ||
| 83 | if err != nil { | ||
| 84 | return | ||
| 85 | } | ||
| 86 | dataBsr := reader.TryReadBytesToSlice(byteLen) | ||
| 87 | _ = bitreader.NewReaderFromBytes(dataBsr, true) // TODO: Parse StringTableEntry | ||
| 88 | // stringTableEntry.EntryData.ParseStream(entryReader) | ||
| 89 | } | ||
| 90 | } | ||
| 91 | |||
| 92 | func (stringTableClass *StringTableClass) Parse(reader *bitreader.Reader) { | ||
| 93 | stringTableClass.Name = reader.TryReadString() | ||
| 94 | writer.TempAppendLine("\t\t\tName: %s", stringTableClass.Name) | ||
| 95 | if reader.TryReadBool() { | ||
| 96 | dataLen := reader.TryReadBits(16) | ||
| 97 | stringTableClass.Data = reader.TryReadStringLength(dataLen) | ||
| 98 | writer.TempAppendLine("\t\t\tData: %s", stringTableClass.Data) | ||
| 99 | } | ||
| 100 | } | ||
diff --git a/pkg/classes/userCmd.go b/pkg/classes/userCmd.go index 24969f1..c793612 100644 --- a/pkg/classes/userCmd.go +++ b/pkg/classes/userCmd.go | |||
| @@ -2,7 +2,6 @@ package classes | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type UserCmd struct { | 7 | type UserCmd struct { |
| @@ -78,14 +77,7 @@ func (userCmd *UserCmd) ParseUserCmdInfo(reader *bitreader.Reader) { | |||
| 78 | if reader.TryReadBool() { | 77 | if reader.TryReadBool() { |
| 79 | userCmd.Data.MouseDy = reader.TryReadUInt16() | 78 | userCmd.Data.MouseDy = reader.TryReadUInt16() |
| 80 | } | 79 | } |
| 81 | writer.AppendLine("\tCommand Number: %v", userCmd.Data.CommandNumber) | 80 | |
| 82 | writer.AppendLine("\tTick Count: %v", userCmd.Data.TickCount) | ||
| 83 | writer.AppendLine("\tView Angles: %v", []float32{userCmd.Data.ViewAnglesX, userCmd.Data.ViewAnglesY, userCmd.Data.ViewAnglesZ}) | ||
| 84 | writer.AppendLine("\tMovement: %v", []float32{userCmd.Data.ForwardMove, userCmd.Data.SideMove, userCmd.Data.UpMove}) | ||
| 85 | writer.AppendLine("\tButtons: %v", Buttons(userCmd.Data.Buttons).GetButtons()) | ||
| 86 | writer.AppendLine("\tImpulse: %v", userCmd.Data.Impulse) | ||
| 87 | writer.AppendLine("\tWeapon, Subtype: %v, %v", userCmd.Data.WeaponSelect, userCmd.Data.WeaponSubType) | ||
| 88 | writer.AppendLine("\tMouse Dx, Mouse Dy: %v, %v", userCmd.Data.MouseDx, userCmd.Data.MouseDy) | ||
| 89 | } | 81 | } |
| 90 | 82 | ||
| 91 | func (button Buttons) GetButtons() []string { | 83 | func (button Buttons) GetButtons() []string { |
diff --git a/pkg/messages/messages.go b/pkg/messages/messages.go index 5cc781d..cf2d1dc 100644 --- a/pkg/messages/messages.go +++ b/pkg/messages/messages.go | |||
| @@ -1,11 +1,8 @@ | |||
| 1 | package messages | 1 | package messages |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "reflect" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | messages "github.com/pektezol/demoparser/pkg/messages/types" | 5 | messages "github.com/pektezol/demoparser/pkg/messages/types" |
| 8 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 9 | ) | 6 | ) |
| 10 | 7 | ||
| 11 | func ParseMessages(messageType uint64, reader *bitreader.Reader) any { | 8 | func ParseMessages(messageType uint64, reader *bitreader.Reader) any { |
| @@ -82,7 +79,6 @@ func ParseMessages(messageType uint64, reader *bitreader.Reader) any { | |||
| 82 | default: | 79 | default: |
| 83 | return nil | 80 | return nil |
| 84 | } | 81 | } |
| 85 | writer.AppendLine("\tMessage: %s (%d):", reflect.ValueOf(messageData).Type(), messageType) | 82 | |
| 86 | writer.AppendOutputFromTemp() | ||
| 87 | return messageData | 83 | return messageData |
| 88 | } | 84 | } |
diff --git a/pkg/messages/types/netDisconnect.go b/pkg/messages/types/netDisconnect.go index c2e22c1..ac5139f 100644 --- a/pkg/messages/types/netDisconnect.go +++ b/pkg/messages/types/netDisconnect.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type NetDisconnect struct { | 7 | type NetDisconnect struct { |
| @@ -13,6 +12,5 @@ func ParseNetDisconnect(reader *bitreader.Reader) NetDisconnect { | |||
| 13 | netDisconnect := NetDisconnect{ | 12 | netDisconnect := NetDisconnect{ |
| 14 | Text: reader.TryReadString(), | 13 | Text: reader.TryReadString(), |
| 15 | } | 14 | } |
| 16 | writer.TempAppendLine("\t\tText: %s", netDisconnect.Text) | ||
| 17 | return netDisconnect | 15 | return netDisconnect |
| 18 | } | 16 | } |
diff --git a/pkg/messages/types/netFile.go b/pkg/messages/types/netFile.go index 4ebd770..fc65229 100644 --- a/pkg/messages/types/netFile.go +++ b/pkg/messages/types/netFile.go | |||
| @@ -4,7 +4,6 @@ import ( | |||
| 4 | "fmt" | 4 | "fmt" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 7 | ) |
| 9 | 8 | ||
| 10 | type NetFile struct { | 9 | type NetFile struct { |
| @@ -40,8 +39,6 @@ func ParseNetFile(reader *bitreader.Reader) NetFile { | |||
| 40 | FileName: reader.TryReadString(), | 39 | FileName: reader.TryReadString(), |
| 41 | FileFlags: NetFileFlags(reader.TryReadBits(2)).String(), | 40 | FileFlags: NetFileFlags(reader.TryReadBits(2)).String(), |
| 42 | } | 41 | } |
| 43 | writer.TempAppendLine("\t\tTransfer ID: %d", netFile.TransferId) | 42 | |
| 44 | writer.TempAppendLine("\t\tFile Name: %s", netFile.FileName) | ||
| 45 | writer.TempAppendLine("\t\tFile Flags: %s", netFile.FileFlags) | ||
| 46 | return netFile | 43 | return netFile |
| 47 | } | 44 | } |
diff --git a/pkg/messages/types/netNop.go b/pkg/messages/types/netNop.go index 0ee1d0d..826da6b 100644 --- a/pkg/messages/types/netNop.go +++ b/pkg/messages/types/netNop.go | |||
| @@ -2,12 +2,11 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type NetNop struct{} | 7 | type NetNop struct{} |
| 9 | 8 | ||
| 10 | func ParseNetNop(reader *bitreader.Reader) NetNop { | 9 | func ParseNetNop(reader *bitreader.Reader) NetNop { |
| 11 | writer.TempAppendLine("\t\t{}") | 10 | |
| 12 | return NetNop{} | 11 | return NetNop{} |
| 13 | } | 12 | } |
diff --git a/pkg/messages/types/netSetConVar.go b/pkg/messages/types/netSetConVar.go index 530cb6b..03e9e0d 100644 --- a/pkg/messages/types/netSetConVar.go +++ b/pkg/messages/types/netSetConVar.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type NetSetConVar struct { | 7 | type NetSetConVar struct { |
| @@ -18,13 +17,13 @@ type conVar struct { | |||
| 18 | func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { | 17 | func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { |
| 19 | length := reader.TryReadUInt8() | 18 | length := reader.TryReadUInt8() |
| 20 | convars := []conVar{} | 19 | convars := []conVar{} |
| 21 | writer.TempAppendLine("\t\tLength: %d", length) | 20 | |
| 22 | for count := 0; count < int(length); count++ { | 21 | for count := 0; count < int(length); count++ { |
| 23 | convar := conVar{ | 22 | convar := conVar{ |
| 24 | Name: reader.TryReadString(), | 23 | Name: reader.TryReadString(), |
| 25 | Value: reader.TryReadString(), | 24 | Value: reader.TryReadString(), |
| 26 | } | 25 | } |
| 27 | writer.TempAppendLine("\t\t[%d] %s: %s", count, convar.Name, convar.Value) | 26 | |
| 28 | convars = append(convars, convar) | 27 | convars = append(convars, convar) |
| 29 | } | 28 | } |
| 30 | return NetSetConVar{ | 29 | return NetSetConVar{ |
diff --git a/pkg/messages/types/netSignOnState.go b/pkg/messages/types/netSignOnState.go index f784b0a..65e17a4 100644 --- a/pkg/messages/types/netSignOnState.go +++ b/pkg/messages/types/netSignOnState.go | |||
| @@ -4,7 +4,6 @@ import ( | |||
| 4 | "fmt" | 4 | "fmt" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 7 | ) |
| 9 | 8 | ||
| 10 | type NetSignOnState struct { | 9 | type NetSignOnState struct { |
| @@ -60,17 +59,15 @@ func ParseNetSignOnState(reader *bitreader.Reader) NetSignOnState { | |||
| 60 | NumServerPlayers: reader.TryReadUInt32(), | 59 | NumServerPlayers: reader.TryReadUInt32(), |
| 61 | IdsLength: reader.TryReadUInt32(), | 60 | IdsLength: reader.TryReadUInt32(), |
| 62 | } | 61 | } |
| 63 | writer.TempAppendLine("\t\tSign On State: %s", netSignOnState.SignOnState) | 62 | |
| 64 | writer.TempAppendLine("\t\tSpawn Count: %d", netSignOnState.SpawnCount) | ||
| 65 | writer.TempAppendLine("\t\tNumber Of Server Players: %d", netSignOnState.NumServerPlayers) | ||
| 66 | if netSignOnState.IdsLength > 0 { | 63 | if netSignOnState.IdsLength > 0 { |
| 67 | netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) | 64 | netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) |
| 68 | writer.TempAppendLine("\t\tPlayer Network IDs: %v", netSignOnState.PlayersNetworksIds) | 65 | |
| 69 | } | 66 | } |
| 70 | netSignOnState.MapNameLength = reader.TryReadUInt32() | 67 | netSignOnState.MapNameLength = reader.TryReadUInt32() |
| 71 | if netSignOnState.MapNameLength > 0 { | 68 | if netSignOnState.MapNameLength > 0 { |
| 72 | netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) | 69 | netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) |
| 73 | writer.TempAppendLine("\t\tMap Name: %s", netSignOnState.MapName) | 70 | |
| 74 | } | 71 | } |
| 75 | return netSignOnState | 72 | return netSignOnState |
| 76 | } | 73 | } |
diff --git a/pkg/messages/types/netSplitScreenUser.go b/pkg/messages/types/netSplitScreenUser.go index 6068a28..8b14f63 100644 --- a/pkg/messages/types/netSplitScreenUser.go +++ b/pkg/messages/types/netSplitScreenUser.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type NetSplitScreenUser struct { | 7 | type NetSplitScreenUser struct { |
| @@ -13,6 +12,6 @@ func ParseNetSplitScreenUser(reader *bitreader.Reader) NetSplitScreenUser { | |||
| 13 | netSplitScreenUser := NetSplitScreenUser{ | 12 | netSplitScreenUser := NetSplitScreenUser{ |
| 14 | Slot: reader.TryReadBool(), | 13 | Slot: reader.TryReadBool(), |
| 15 | } | 14 | } |
| 16 | writer.TempAppendLine("\t\tSlot: %t", netSplitScreenUser.Slot) | 15 | |
| 17 | return netSplitScreenUser | 16 | return netSplitScreenUser |
| 18 | } | 17 | } |
diff --git a/pkg/messages/types/netStringCmd.go b/pkg/messages/types/netStringCmd.go index 57ae813..2f7e830 100644 --- a/pkg/messages/types/netStringCmd.go +++ b/pkg/messages/types/netStringCmd.go | |||
| @@ -1,10 +1,7 @@ | |||
| 1 | package messages | 1 | package messages |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "strings" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 5 | ) |
| 9 | 6 | ||
| 10 | type NetStringCmd struct { | 7 | type NetStringCmd struct { |
| @@ -15,6 +12,6 @@ func ParseNetStringCmd(reader *bitreader.Reader) NetStringCmd { | |||
| 15 | netStringCmd := NetStringCmd{ | 12 | netStringCmd := NetStringCmd{ |
| 16 | Command: reader.TryReadString(), | 13 | Command: reader.TryReadString(), |
| 17 | } | 14 | } |
| 18 | writer.TempAppendLine("\t\tCommand: \"%s\"", strings.TrimSpace(netStringCmd.Command)) | 15 | |
| 19 | return netStringCmd | 16 | return netStringCmd |
| 20 | } | 17 | } |
diff --git a/pkg/messages/types/netTick.go b/pkg/messages/types/netTick.go index 1c01171..49e997e 100644 --- a/pkg/messages/types/netTick.go +++ b/pkg/messages/types/netTick.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type NetTick struct { | 7 | type NetTick struct { |
| @@ -17,8 +16,6 @@ func ParseNetTick(reader *bitreader.Reader) NetTick { | |||
| 17 | HostFrameTime: float32(reader.TryReadUInt16()) / 1e5, | 16 | HostFrameTime: float32(reader.TryReadUInt16()) / 1e5, |
| 18 | HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5, | 17 | HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5, |
| 19 | } | 18 | } |
| 20 | writer.TempAppendLine("\t\tTick: %d", netTick.Tick) | 19 | |
| 21 | writer.TempAppendLine("\t\tHost Frame Time: %f", netTick.HostFrameTime) | ||
| 22 | writer.TempAppendLine("\t\tHost Frame Time Std Deviation: %f", netTick.HostFrameTimeStdDeviation) | ||
| 23 | return netTick | 20 | return netTick |
| 24 | } | 21 | } |
diff --git a/pkg/messages/types/svcBspDecal.go b/pkg/messages/types/svcBspDecal.go index cf94c1d..6bf96a3 100644 --- a/pkg/messages/types/svcBspDecal.go +++ b/pkg/messages/types/svcBspDecal.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcBspDecal struct { | 7 | type SvcBspDecal struct { |
| @@ -28,11 +27,7 @@ func ParseSvcBspDecal(reader *bitreader.Reader) SvcBspDecal { | |||
| 28 | svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11)) | 27 | svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11)) |
| 29 | } | 28 | } |
| 30 | svcBspDecal.LowPriority = reader.TryReadBool() | 29 | svcBspDecal.LowPriority = reader.TryReadBool() |
| 31 | writer.TempAppendLine("\t\tPosition: %v", svcBspDecal.Pos) | 30 | |
| 32 | writer.TempAppendLine("\t\tDecal Texture Index: %d", svcBspDecal.DecalTextureIndex) | ||
| 33 | writer.TempAppendLine("\t\tEntity Index: %d", svcBspDecal.EntityIndex) | ||
| 34 | writer.TempAppendLine("\t\tModel Index: %d", svcBspDecal.ModelIndex) | ||
| 35 | writer.TempAppendLine("\t\tLow Priority: %t", svcBspDecal.LowPriority) | ||
| 36 | return svcBspDecal | 31 | return svcBspDecal |
| 37 | } | 32 | } |
| 38 | 33 | ||
diff --git a/pkg/messages/types/svcClassInfo.go b/pkg/messages/types/svcClassInfo.go index 384c501..4677946 100644 --- a/pkg/messages/types/svcClassInfo.go +++ b/pkg/messages/types/svcClassInfo.go | |||
| @@ -4,7 +4,6 @@ import ( | |||
| 4 | "math" | 4 | "math" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 7 | ) |
| 9 | 8 | ||
| 10 | type SvcClassInfo struct { | 9 | type SvcClassInfo struct { |
| @@ -25,19 +24,19 @@ func ParseSvcClassInfo(reader *bitreader.Reader) SvcClassInfo { | |||
| 25 | CreateOnClient: reader.TryReadBool(), | 24 | CreateOnClient: reader.TryReadBool(), |
| 26 | } | 25 | } |
| 27 | classes := []serverClass{} | 26 | classes := []serverClass{} |
| 28 | writer.TempAppendLine("\t\tCreate On Client: %t", svcClassInfo.CreateOnClient) | 27 | |
| 29 | if !svcClassInfo.CreateOnClient { | 28 | if !svcClassInfo.CreateOnClient { |
| 30 | writer.TempAppendLine("\t\t%d Server Classes:", svcClassInfo.ClassCount) | 29 | |
| 31 | for count := 0; count < int(svcClassInfo.ClassCount); count++ { | 30 | for count := 0; count < int(svcClassInfo.ClassCount); count++ { |
| 32 | classes = append(classes, serverClass{ | 31 | classes = append(classes, serverClass{ |
| 33 | ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))), | 32 | ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))), |
| 34 | ClassName: reader.TryReadString(), | 33 | ClassName: reader.TryReadString(), |
| 35 | DataTableName: reader.TryReadString(), | 34 | DataTableName: reader.TryReadString(), |
| 36 | }) | 35 | }) |
| 37 | writer.TempAppendLine("\t\t\t[%d] %s (%s)", classes[len(classes)-1].ClassId, classes[len(classes)-1].ClassName, classes[len(classes)-1].DataTableName) | 36 | |
| 38 | } | 37 | } |
| 39 | } else { | 38 | } else { |
| 40 | writer.TempAppendLine("\t\t%d Server Classes", svcClassInfo.ClassCount) | 39 | |
| 41 | } | 40 | } |
| 42 | svcClassInfo.ServerClasses = classes | 41 | svcClassInfo.ServerClasses = classes |
| 43 | return svcClassInfo | 42 | return svcClassInfo |
diff --git a/pkg/messages/types/svcCmdKeyValues.go b/pkg/messages/types/svcCmdKeyValues.go index 5c80d0b..61d6290 100644 --- a/pkg/messages/types/svcCmdKeyValues.go +++ b/pkg/messages/types/svcCmdKeyValues.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcCmdKeyValues struct { | 7 | type SvcCmdKeyValues struct { |
| @@ -15,6 +14,6 @@ func ParseSvcCmdKeyValues(reader *bitreader.Reader) SvcCmdKeyValues { | |||
| 15 | Length: reader.TryReadUInt32(), | 14 | Length: reader.TryReadUInt32(), |
| 16 | } | 15 | } |
| 17 | svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length)) | 16 | svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length)) |
| 18 | writer.TempAppendLine("\t\tData: %v", svcCmdKeyValues.Data) | 17 | |
| 19 | return svcCmdKeyValues | 18 | return svcCmdKeyValues |
| 20 | } | 19 | } |
diff --git a/pkg/messages/types/svcCreateStringTable.go b/pkg/messages/types/svcCreateStringTable.go index ff2e27d..8d36fcf 100644 --- a/pkg/messages/types/svcCreateStringTable.go +++ b/pkg/messages/types/svcCreateStringTable.go | |||
| @@ -4,7 +4,6 @@ import ( | |||
| 4 | "math" | 4 | "math" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 8 | ) | 7 | ) |
| 9 | 8 | ||
| 10 | type SvcCreateStringTable struct { | 9 | type SvcCreateStringTable struct { |
| @@ -32,13 +31,7 @@ func ParseSvcCreateStringTable(reader *bitreader.Reader) SvcCreateStringTable { | |||
| 32 | svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4)) | 31 | svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4)) |
| 33 | } | 32 | } |
| 34 | svcCreateStringTable.Flags = int8(reader.TryReadBits(2)) | 33 | svcCreateStringTable.Flags = int8(reader.TryReadBits(2)) |
| 35 | writer.TempAppendLine("\t\tName: %s", svcCreateStringTable.Name) | 34 | |
| 36 | writer.TempAppendLine("\t\tMax Enties: %d", svcCreateStringTable.MaxEntries) | ||
| 37 | writer.TempAppendLine("\t\tNumber Of Entiries: %d", svcCreateStringTable.NumEntries) | ||
| 38 | writer.TempAppendLine("\t\tUser Data Fixed Size: %t", svcCreateStringTable.UserDataFixedSize) | ||
| 39 | writer.TempAppendLine("\t\tUser Data Size: %d", svcCreateStringTable.UserDataSize) | ||
| 40 | writer.TempAppendLine("\t\tUser Data Size In Bits: %d", svcCreateStringTable.UserDataSizeBits) | ||
| 41 | writer.TempAppendLine("\t\tFlags: %d", svcCreateStringTable.Flags) | ||
| 42 | reader.SkipBits(uint64(svcCreateStringTable.Length)) // TODO: StringTable parsing | 35 | reader.SkipBits(uint64(svcCreateStringTable.Length)) // TODO: StringTable parsing |
| 43 | return svcCreateStringTable | 36 | return svcCreateStringTable |
| 44 | } | 37 | } |
diff --git a/pkg/messages/types/svcCrosshairAngle.go b/pkg/messages/types/svcCrosshairAngle.go index efd6d77..f689876 100644 --- a/pkg/messages/types/svcCrosshairAngle.go +++ b/pkg/messages/types/svcCrosshairAngle.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcCrosshairAngle struct { | 7 | type SvcCrosshairAngle struct { |
| @@ -23,8 +22,6 @@ func ParseSvcCrosshairAngle(reader *bitreader.Reader) SvcCrosshairAngle { | |||
| 23 | Z: float32(reader.TryReadBits(16)), | 22 | Z: float32(reader.TryReadBits(16)), |
| 24 | }, | 23 | }, |
| 25 | } | 24 | } |
| 26 | writer.TempAppendLine("\t\tX: %f", svcCrosshairAngle.Angle.X) | 25 | |
| 27 | writer.TempAppendLine("\t\tY: %f", svcCrosshairAngle.Angle.Y) | ||
| 28 | writer.TempAppendLine("\t\tZ: %f", svcCrosshairAngle.Angle.Z) | ||
| 29 | return svcCrosshairAngle | 26 | return svcCrosshairAngle |
| 30 | } | 27 | } |
diff --git a/pkg/messages/types/svcEntityMessage.go b/pkg/messages/types/svcEntityMessage.go index a511fea..c4676ec 100644 --- a/pkg/messages/types/svcEntityMessage.go +++ b/pkg/messages/types/svcEntityMessage.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcEntityMessage struct { | 7 | type SvcEntityMessage struct { |
| @@ -19,8 +18,6 @@ func ParseSvcEntityMessage(reader *bitreader.Reader) SvcEntityMessage { | |||
| 19 | Length: uint16(reader.TryReadBits(11)), | 18 | Length: uint16(reader.TryReadBits(11)), |
| 20 | } | 19 | } |
| 21 | svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length)) | 20 | svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length)) |
| 22 | writer.TempAppendLine("\t\tEntity Index: %d", svcEntityMessage.EntityIndex) | 21 | |
| 23 | writer.TempAppendLine("\t\tClass ID: %d", svcEntityMessage.ClassId) | ||
| 24 | writer.TempAppendLine("\t\tData: %v", svcEntityMessage.Data) | ||
| 25 | return svcEntityMessage | 22 | return svcEntityMessage |
| 26 | } | 23 | } |
diff --git a/pkg/messages/types/svcFixAngle.go b/pkg/messages/types/svcFixAngle.go index b79c02d..f00c239 100644 --- a/pkg/messages/types/svcFixAngle.go +++ b/pkg/messages/types/svcFixAngle.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcFixAngle struct { | 7 | type SvcFixAngle struct { |
| @@ -25,9 +24,6 @@ func ParseSvcFixAngle(reader *bitreader.Reader) SvcFixAngle { | |||
| 25 | Z: float32(reader.TryReadBits(16)), | 24 | Z: float32(reader.TryReadBits(16)), |
| 26 | }, | 25 | }, |
| 27 | } | 26 | } |
| 28 | writer.TempAppendLine("\t\tRelative: %t", svcFixAngle.Relative) | 27 | |
| 29 | writer.TempAppendLine("\t\tX: %f", svcFixAngle.Angle.X) | ||
| 30 | writer.TempAppendLine("\t\tY: %f", svcFixAngle.Angle.Y) | ||
| 31 | writer.TempAppendLine("\t\tZ: %f", svcFixAngle.Angle.Z) | ||
| 32 | return svcFixAngle | 28 | return svcFixAngle |
| 33 | } | 29 | } |
diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go index e12d75a..ec96653 100644 --- a/pkg/messages/types/svcGameEvent.go +++ b/pkg/messages/types/svcGameEvent.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcGameEvent struct { | 7 | type SvcGameEvent struct { |
| @@ -15,6 +14,6 @@ func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { | |||
| 15 | Length: uint16(reader.TryReadBits(11)), | 14 | Length: uint16(reader.TryReadBits(11)), |
| 16 | } | 15 | } |
| 17 | svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)) | 16 | svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)) |
| 18 | writer.TempAppendLine("\t\tData: %v", svcGameEvent.Data) | 17 | |
| 19 | return svcGameEvent | 18 | return svcGameEvent |
| 20 | } | 19 | } |
diff --git a/pkg/messages/types/svcGameEventList.go b/pkg/messages/types/svcGameEventList.go index 1fa7589..ca2cf76 100644 --- a/pkg/messages/types/svcGameEventList.go +++ b/pkg/messages/types/svcGameEventList.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcGameEventList struct { | 7 | type SvcGameEventList struct { |
| @@ -20,6 +19,6 @@ func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList { | |||
| 20 | Length: int32(reader.TryReadBits(20)), | 19 | Length: int32(reader.TryReadBits(20)), |
| 21 | } | 20 | } |
| 22 | reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)) | 21 | reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)) |
| 23 | writer.TempAppendLine("\t\tEvents: %d", svcGameEventList.Events) | 22 | |
| 24 | return svcGameEventList | 23 | return svcGameEventList |
| 25 | } | 24 | } |
diff --git a/pkg/messages/types/svcGetCvarValue.go b/pkg/messages/types/svcGetCvarValue.go index 939e6b6..b0513d0 100644 --- a/pkg/messages/types/svcGetCvarValue.go +++ b/pkg/messages/types/svcGetCvarValue.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcGetCvarValue struct { | 7 | type SvcGetCvarValue struct { |
| @@ -15,7 +14,6 @@ func ParseSvcGetCvarValue(reader *bitreader.Reader) SvcGetCvarValue { | |||
| 15 | Cookie: reader.TryReadSInt32(), | 14 | Cookie: reader.TryReadSInt32(), |
| 16 | CvarName: reader.TryReadString(), | 15 | CvarName: reader.TryReadString(), |
| 17 | } | 16 | } |
| 18 | writer.TempAppendLine("\t\tCookie: %d", svcGetCvarValue.Cookie) | 17 | |
| 19 | writer.TempAppendLine("\t\tCvar: \"%s\"", svcGetCvarValue.CvarName) | ||
| 20 | return svcGetCvarValue | 18 | return svcGetCvarValue |
| 21 | } | 19 | } |
diff --git a/pkg/messages/types/svcMenu.go b/pkg/messages/types/svcMenu.go index 33ccb70..df14048 100644 --- a/pkg/messages/types/svcMenu.go +++ b/pkg/messages/types/svcMenu.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcMenu struct { | 7 | type SvcMenu struct { |
| @@ -17,7 +16,6 @@ func ParseSvcMenu(reader *bitreader.Reader) SvcMenu { | |||
| 17 | Length: reader.TryReadUInt32(), | 16 | Length: reader.TryReadUInt32(), |
| 18 | } | 17 | } |
| 19 | svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length)) | 18 | svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length)) |
| 20 | writer.TempAppendLine("\t\tType: %d", svcMenu.Type) | 19 | |
| 21 | writer.TempAppendLine("\t\tData: %v", svcMenu.Data) | ||
| 22 | return svcMenu | 20 | return svcMenu |
| 23 | } | 21 | } |
diff --git a/pkg/messages/types/svcPacketEntities.go b/pkg/messages/types/svcPacketEntities.go index 05b6794..8000a55 100644 --- a/pkg/messages/types/svcPacketEntities.go +++ b/pkg/messages/types/svcPacketEntities.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcPacketEntities struct { | 7 | type SvcPacketEntities struct { |
| @@ -31,12 +30,6 @@ func ParseSvcPacketEntities(reader *bitreader.Reader) SvcPacketEntities { | |||
| 31 | svcPacketEntities.Length = uint32(reader.TryReadBits(20)) | 30 | svcPacketEntities.Length = uint32(reader.TryReadBits(20)) |
| 32 | svcPacketEntities.UpdatedBaseline = reader.TryReadBool() | 31 | svcPacketEntities.UpdatedBaseline = reader.TryReadBool() |
| 33 | svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) | 32 | svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) |
| 34 | writer.TempAppendLine("\t\tMax Entries: %d", svcPacketEntities.MaxEntries) | 33 | |
| 35 | writer.TempAppendLine("\t\tIs Delta: %t", svcPacketEntities.IsDelta) | ||
| 36 | writer.TempAppendLine("\t\tDelta From: %d", svcPacketEntities.DeltaFrom) | ||
| 37 | writer.TempAppendLine("\t\tBaseline: %t", svcPacketEntities.BaseLine) | ||
| 38 | writer.TempAppendLine("\t\tUpdated Baseline: %t", svcPacketEntities.UpdatedBaseline) | ||
| 39 | writer.TempAppendLine("\t\t%d Updated Entries:", svcPacketEntities.UpdatedEntries) | ||
| 40 | writer.TempAppendLine("\t\tData: %v", svcPacketEntities.Data) | ||
| 41 | return svcPacketEntities | 34 | return svcPacketEntities |
| 42 | } | 35 | } |
diff --git a/pkg/messages/types/svcPaintmapData.go b/pkg/messages/types/svcPaintmapData.go index 40f6ad0..49aa433 100644 --- a/pkg/messages/types/svcPaintmapData.go +++ b/pkg/messages/types/svcPaintmapData.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcPaintmapData struct { | 7 | type SvcPaintmapData struct { |
| @@ -15,6 +14,6 @@ func ParseSvcPaintmapData(reader *bitreader.Reader) SvcPaintmapData { | |||
| 15 | Length: reader.TryReadUInt32(), | 14 | Length: reader.TryReadUInt32(), |
| 16 | } | 15 | } |
| 17 | svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length)) | 16 | svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length)) |
| 18 | writer.TempAppendLine("\t\tData: %v", svcPaintmapData.Data) | 17 | |
| 19 | return svcPaintmapData | 18 | return svcPaintmapData |
| 20 | } | 19 | } |
diff --git a/pkg/messages/types/svcPrefetch.go b/pkg/messages/types/svcPrefetch.go index b71e61f..a9a88fe 100644 --- a/pkg/messages/types/svcPrefetch.go +++ b/pkg/messages/types/svcPrefetch.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcPrefetch struct { | 7 | type SvcPrefetch struct { |
| @@ -13,6 +12,6 @@ func ParseSvcPrefetch(reader *bitreader.Reader) SvcPrefetch { | |||
| 13 | svcPrefetch := SvcPrefetch{ | 12 | svcPrefetch := SvcPrefetch{ |
| 14 | SoundIndex: int16(reader.TryReadBits(13)), | 13 | SoundIndex: int16(reader.TryReadBits(13)), |
| 15 | } | 14 | } |
| 16 | writer.TempAppendLine("\t\tSound Index: %d", svcPrefetch.SoundIndex) | 15 | |
| 17 | return svcPrefetch | 16 | return svcPrefetch |
| 18 | } | 17 | } |
diff --git a/pkg/messages/types/svcPrint.go b/pkg/messages/types/svcPrint.go index 760a3c5..7b3b388 100644 --- a/pkg/messages/types/svcPrint.go +++ b/pkg/messages/types/svcPrint.go | |||
| @@ -1,10 +1,13 @@ | |||
| 1 | package messages | 1 | package messages |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | ||
| 5 | "regexp" | ||
| 6 | "strconv" | ||
| 4 | "strings" | 7 | "strings" |
| 5 | 8 | ||
| 6 | "github.com/pektezol/bitreader" | 9 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | 10 | "github.com/pektezol/demoparser/pkg/verification" |
| 8 | ) | 11 | ) |
| 9 | 12 | ||
| 10 | type SvcPrint struct { | 13 | type SvcPrint struct { |
| @@ -16,6 +19,19 @@ func ParseSvcPrint(reader *bitreader.Reader) SvcPrint { | |||
| 16 | Message: reader.TryReadString(), | 19 | Message: reader.TryReadString(), |
| 17 | } | 20 | } |
| 18 | // common psycopath behaviour | 21 | // common psycopath behaviour |
| 19 | writer.TempAppendLine("\t\t%s", strings.Replace(strings.ReplaceAll(strings.ReplaceAll(svcPrint.Message, "\n", "\n\t\t"), "\n\t\t\n\t\t", ""), "\n\t\t", "", 1)) | 22 | print := fmt.Sprintf("\t\t%s\n", strings.Replace(strings.ReplaceAll(strings.ReplaceAll(svcPrint.Message, "\n", "\n\t\t"), "\n\t\t\n\t\t", ""), "\n\t\t", "", 1)) |
| 23 | // Define a regular expression pattern to match the "Server Number" line and capture the integer value. | ||
| 24 | pattern := `Server Number: (\d+)` | ||
| 25 | |||
| 26 | // Compile the regular expression pattern. | ||
| 27 | re := regexp.MustCompile(pattern) | ||
| 28 | |||
| 29 | // Find the match in the text. | ||
| 30 | match := re.FindStringSubmatch(print) | ||
| 31 | if len(match) >= 1 { | ||
| 32 | serverNumber := match[1] | ||
| 33 | n, _ := strconv.Atoi(serverNumber) | ||
| 34 | verification.ServerNumbers = append(verification.ServerNumbers, n) | ||
| 35 | } | ||
| 20 | return svcPrint | 36 | return svcPrint |
| 21 | } | 37 | } |
diff --git a/pkg/messages/types/svcSendTable.go b/pkg/messages/types/svcSendTable.go index 78df195..4397db0 100644 --- a/pkg/messages/types/svcSendTable.go +++ b/pkg/messages/types/svcSendTable.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcSendTable struct { | 7 | type SvcSendTable struct { |
| @@ -17,8 +16,6 @@ func ParseSvcSendTable(reader *bitreader.Reader) SvcSendTable { | |||
| 17 | Length: reader.TryReadUInt8(), | 16 | Length: reader.TryReadUInt8(), |
| 18 | } | 17 | } |
| 19 | svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length))) | 18 | svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length))) |
| 20 | writer.TempAppendLine("\t\tNeeds Decoder: %t", svcSendTable.NeedsDecoder) | 19 | |
| 21 | writer.TempAppendLine("\t\tLength: %d", svcSendTable.Length) | ||
| 22 | writer.TempAppendLine("\t\tProps: %d", svcSendTable.Props) | ||
| 23 | return svcSendTable | 20 | return svcSendTable |
| 24 | } | 21 | } |
diff --git a/pkg/messages/types/svcServerInfo.go b/pkg/messages/types/svcServerInfo.go index a6acd53..507b7ca 100644 --- a/pkg/messages/types/svcServerInfo.go +++ b/pkg/messages/types/svcServerInfo.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcServerInfo struct { | 7 | type SvcServerInfo struct { |
| @@ -43,21 +42,6 @@ func ParseSvcServerInfo(reader *bitreader.Reader) SvcServerInfo { | |||
| 43 | SkyName: reader.TryReadString(), | 42 | SkyName: reader.TryReadString(), |
| 44 | HostName: reader.TryReadString(), | 43 | HostName: reader.TryReadString(), |
| 45 | } | 44 | } |
| 46 | writer.TempAppendLine("\t\tNetwork Protocol: %d", svcServerInfo.Protocol) | 45 | |
| 47 | writer.TempAppendLine("\t\tServer Count: %d", svcServerInfo.ServerCount) | ||
| 48 | writer.TempAppendLine("\t\tIs Hltv: %t", svcServerInfo.IsHltv) | ||
| 49 | writer.TempAppendLine("\t\tIs Dedicated: %t", svcServerInfo.IsDedicated) | ||
| 50 | writer.TempAppendLine("\t\tServer Client CRC: %d", svcServerInfo.ClientCrc) | ||
| 51 | writer.TempAppendLine("\t\tString Table CRC: %d", svcServerInfo.StringTableCrc) | ||
| 52 | writer.TempAppendLine("\t\tMax Server Classes: %d", svcServerInfo.MaxServerClasses) | ||
| 53 | writer.TempAppendLine("\t\tServer Map CRC: %d", svcServerInfo.MapCrc) | ||
| 54 | writer.TempAppendLine("\t\tCurrent Player Count: %d", svcServerInfo.PlayerCount) | ||
| 55 | writer.TempAppendLine("\t\tMax Player Count: %d", svcServerInfo.MaxClients) | ||
| 56 | writer.TempAppendLine("\t\tInterval Per Tick: %f", svcServerInfo.TickInterval) | ||
| 57 | writer.TempAppendLine("\t\tPlatform: %s", svcServerInfo.Platform) | ||
| 58 | writer.TempAppendLine("\t\tGame Directory: %s", svcServerInfo.GameDir) | ||
| 59 | writer.TempAppendLine("\t\tMap Name: %s", svcServerInfo.MapName) | ||
| 60 | writer.TempAppendLine("\t\tSky Name: %s", svcServerInfo.SkyName) | ||
| 61 | writer.TempAppendLine("\t\tHost Name: %s", svcServerInfo.HostName) | ||
| 62 | return svcServerInfo | 46 | return svcServerInfo |
| 63 | } | 47 | } |
diff --git a/pkg/messages/types/svcSetPause.go b/pkg/messages/types/svcSetPause.go index d979ac5..1f6f25f 100644 --- a/pkg/messages/types/svcSetPause.go +++ b/pkg/messages/types/svcSetPause.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcSetPause struct { | 7 | type SvcSetPause struct { |
| @@ -13,6 +12,6 @@ func ParseSvcSetPause(reader *bitreader.Reader) SvcSetPause { | |||
| 13 | svcSetPause := SvcSetPause{ | 12 | svcSetPause := SvcSetPause{ |
| 14 | Paused: reader.TryReadBool(), | 13 | Paused: reader.TryReadBool(), |
| 15 | } | 14 | } |
| 16 | writer.TempAppendLine("\t\tPaused: %t", svcSetPause.Paused) | 15 | |
| 17 | return svcSetPause | 16 | return svcSetPause |
| 18 | } | 17 | } |
diff --git a/pkg/messages/types/svcSetView.go b/pkg/messages/types/svcSetView.go index bdb6203..a60d547 100644 --- a/pkg/messages/types/svcSetView.go +++ b/pkg/messages/types/svcSetView.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcSetView struct { | 7 | type SvcSetView struct { |
| @@ -13,6 +12,6 @@ func ParseSvcSetView(reader *bitreader.Reader) SvcSetView { | |||
| 13 | svcSetView := SvcSetView{ | 12 | svcSetView := SvcSetView{ |
| 14 | EntityIndex: uint16(reader.TryReadBits(11)), | 13 | EntityIndex: uint16(reader.TryReadBits(11)), |
| 15 | } | 14 | } |
| 16 | writer.TempAppendLine("\t\tEntity Index: %d", svcSetView.EntityIndex) | 15 | |
| 17 | return svcSetView | 16 | return svcSetView |
| 18 | } | 17 | } |
diff --git a/pkg/messages/types/svcSounds.go b/pkg/messages/types/svcSounds.go index 1affeb4..34d99f6 100644 --- a/pkg/messages/types/svcSounds.go +++ b/pkg/messages/types/svcSounds.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcSounds struct { | 7 | type SvcSounds struct { |
| @@ -24,8 +23,6 @@ func ParseSvcSounds(reader *bitreader.Reader) SvcSounds { | |||
| 24 | svcSounds.Length = reader.TryReadUInt16() | 23 | svcSounds.Length = reader.TryReadUInt16() |
| 25 | } | 24 | } |
| 26 | svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length)) | 25 | svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length)) |
| 27 | writer.TempAppendLine("\t\tReliable Sound: %t", svcSounds.ReliableSound) | 26 | |
| 28 | writer.TempAppendLine("\t\tSound Count: %d", svcSounds.SoundCount) | ||
| 29 | writer.TempAppendLine("\t\tData: %v", svcSounds.Data) | ||
| 30 | return svcSounds | 27 | return svcSounds |
| 31 | } | 28 | } |
diff --git a/pkg/messages/types/svcSplitScreen.go b/pkg/messages/types/svcSplitScreen.go index 653438a..fc6acb4 100644 --- a/pkg/messages/types/svcSplitScreen.go +++ b/pkg/messages/types/svcSplitScreen.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcSplitScreen struct { | 7 | type SvcSplitScreen struct { |
| @@ -17,7 +16,6 @@ func ParseSvcSplitScreen(reader *bitreader.Reader) SvcSplitScreen { | |||
| 17 | Length: uint16(reader.TryReadBits(11)), | 16 | Length: uint16(reader.TryReadBits(11)), |
| 18 | } | 17 | } |
| 19 | svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length)) | 18 | svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length)) |
| 20 | writer.TempAppendLine("\t\tRemove User: %t", svcSplitScreen.RemoveUser) | 19 | |
| 21 | writer.TempAppendLine("\t\tData: %v", svcSplitScreen.Data) | ||
| 22 | return svcSplitScreen | 20 | return svcSplitScreen |
| 23 | } | 21 | } |
diff --git a/pkg/messages/types/svcTempEntities.go b/pkg/messages/types/svcTempEntities.go index 407bfd6..41b1afb 100644 --- a/pkg/messages/types/svcTempEntities.go +++ b/pkg/messages/types/svcTempEntities.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcTempEntities struct { | 7 | type SvcTempEntities struct { |
| @@ -17,7 +16,6 @@ func ParseSvcTempEntities(reader *bitreader.Reader) SvcTempEntities { | |||
| 17 | Length: uint32(reader.TryReadBits(17)), | 16 | Length: uint32(reader.TryReadBits(17)), |
| 18 | } | 17 | } |
| 19 | svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length)) | 18 | svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length)) |
| 20 | writer.TempAppendLine("\t\tNumber Of Entries: %d", svcTempEntities.NumEntries) | 19 | |
| 21 | writer.TempAppendLine("\t\tData: %v", svcTempEntities.Data) | ||
| 22 | return svcTempEntities | 20 | return svcTempEntities |
| 23 | } | 21 | } |
diff --git a/pkg/messages/types/svcUpdateStringTable.go b/pkg/messages/types/svcUpdateStringTable.go index 68c8fb5..ca716eb 100644 --- a/pkg/messages/types/svcUpdateStringTable.go +++ b/pkg/messages/types/svcUpdateStringTable.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcUpdateStringTable struct { | 7 | type SvcUpdateStringTable struct { |
| @@ -21,7 +20,6 @@ func ParseSvcUpdateStringTable(reader *bitreader.Reader) SvcUpdateStringTable { | |||
| 21 | } | 20 | } |
| 22 | svcUpdateStringTable.Length = int32(reader.TryReadBits(20)) | 21 | svcUpdateStringTable.Length = int32(reader.TryReadBits(20)) |
| 23 | svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length)) | 22 | svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length)) |
| 24 | writer.TempAppendLine("\t\tTable ID: %d", svcUpdateStringTable.TableId) | 23 | |
| 25 | writer.TempAppendLine("\t\tNumber Of Changed Entries: %d", svcUpdateStringTable.NumChangedEntries) | ||
| 26 | return svcUpdateStringTable | 24 | return svcUpdateStringTable |
| 27 | } | 25 | } |
diff --git a/pkg/messages/types/svcUserMessage.go b/pkg/messages/types/svcUserMessage.go index e5b1943..a26f0ff 100644 --- a/pkg/messages/types/svcUserMessage.go +++ b/pkg/messages/types/svcUserMessage.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcUserMessage struct { | 7 | type SvcUserMessage struct { |
| @@ -89,8 +88,7 @@ func ParseSvcUserMessage(reader *bitreader.Reader) SvcUserMessage { | |||
| 89 | Length: int16(reader.TryReadBits(12)), | 88 | Length: int16(reader.TryReadBits(12)), |
| 90 | } | 89 | } |
| 91 | svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length)) | 90 | svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length)) |
| 92 | writer.TempAppendLine("\t\tType: %d", svcUserMessage.Type) | 91 | |
| 93 | writer.TempAppendLine("\t\tData: %v", svcUserMessage.Data) | ||
| 94 | return svcUserMessage | 92 | return svcUserMessage |
| 95 | } | 93 | } |
| 96 | 94 | ||
diff --git a/pkg/messages/types/svcVoiceData.go b/pkg/messages/types/svcVoiceData.go index c3e08ee..6ac8050 100644 --- a/pkg/messages/types/svcVoiceData.go +++ b/pkg/messages/types/svcVoiceData.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcVoiceData struct { | 7 | type SvcVoiceData struct { |
| @@ -21,8 +20,6 @@ func ParseSvcVoiceData(reader *bitreader.Reader) SvcVoiceData { | |||
| 21 | svcVoiceData.Proximity = true | 20 | svcVoiceData.Proximity = true |
| 22 | } | 21 | } |
| 23 | svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length)) | 22 | svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length)) |
| 24 | writer.TempAppendLine("\t\tFrom Client: %d", svcVoiceData.FromClient) | 23 | |
| 25 | writer.TempAppendLine("\t\tProximity: %t", svcVoiceData.Proximity) | ||
| 26 | writer.TempAppendLine("\t\tData: %v", svcVoiceData.Data) | ||
| 27 | return svcVoiceData | 24 | return svcVoiceData |
| 28 | } | 25 | } |
diff --git a/pkg/messages/types/svcVoiceInit.go b/pkg/messages/types/svcVoiceInit.go index 03e0e25..eb6093f 100644 --- a/pkg/messages/types/svcVoiceInit.go +++ b/pkg/messages/types/svcVoiceInit.go | |||
| @@ -2,7 +2,6 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type SvcVoiceInit struct { | 7 | type SvcVoiceInit struct { |
| @@ -25,8 +24,6 @@ func ParseSvcVoiceInit(reader *bitreader.Reader) SvcVoiceInit { | |||
| 25 | svcVoiceInit.SampleRate = 11025 | 24 | svcVoiceInit.SampleRate = 11025 |
| 26 | } | 25 | } |
| 27 | } | 26 | } |
| 28 | writer.TempAppendLine("\t\tCodec: %s", svcVoiceInit.Codec) | 27 | |
| 29 | writer.TempAppendLine("\t\tQuality: %d", svcVoiceInit.Quality) | ||
| 30 | writer.TempAppendLine("\t\tSample Rate: %d", svcVoiceInit.SampleRate) | ||
| 31 | return svcVoiceInit | 28 | return svcVoiceInit |
| 32 | } | 29 | } |
diff --git a/pkg/packets/headers.go b/pkg/packets/headers.go index d92b22d..124eb95 100644 --- a/pkg/packets/headers.go +++ b/pkg/packets/headers.go | |||
| @@ -2,7 +2,6 @@ package packets | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 6 | ) | 5 | ) |
| 7 | 6 | ||
| 8 | type Headers struct { | 7 | type Headers struct { |
| @@ -42,6 +41,6 @@ func ParseHeaders(reader *bitreader.Reader) Headers { | |||
| 42 | if headers.NetworkProtocol != 2001 { | 41 | if headers.NetworkProtocol != 2001 { |
| 43 | panic("this parser only supports demos from portal 2") | 42 | panic("this parser only supports demos from portal 2") |
| 44 | } | 43 | } |
| 45 | writer.AppendLine("Headers: %+v", headers) | 44 | |
| 46 | return headers | 45 | return headers |
| 47 | } | 46 | } |
diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go index b1d6a40..06eb48d 100644 --- a/pkg/packets/packets.go +++ b/pkg/packets/packets.go | |||
| @@ -3,7 +3,7 @@ package packets | |||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/classes" | 5 | "github.com/pektezol/demoparser/pkg/classes" |
| 6 | "github.com/pektezol/demoparser/pkg/writer" | 6 | "github.com/pektezol/demoparser/pkg/messages" |
| 7 | ) | 7 | ) |
| 8 | 8 | ||
| 9 | type PacketMessageInfo struct { | 9 | type PacketMessageInfo struct { |
| @@ -18,42 +18,46 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 18 | slotNumber := reader.TryReadUInt8() | 18 | slotNumber := reader.TryReadUInt8() |
| 19 | switch packetType { | 19 | switch packetType { |
| 20 | case 1: // SignOn | 20 | case 1: // SignOn |
| 21 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SIGNON", packetType) | 21 | for count := 0; count < 2; count++ { |
| 22 | signOn := classes.SignOn{} | 22 | reader.SkipBytes(76) |
| 23 | signOn.ParseSignOn(reader) | 23 | } |
| 24 | reader.SkipBytes(8) | ||
| 25 | packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32())), true) | ||
| 26 | for { | ||
| 27 | messageType, err := packetReader.ReadBits(6) | ||
| 28 | if err != nil { | ||
| 29 | break | ||
| 30 | } | ||
| 31 | messages.ParseMessages(messageType, packetReader) | ||
| 32 | } | ||
| 24 | case 2: // Packet | 33 | case 2: // Packet |
| 25 | writer.AppendLine("[%d] %s (%d):", tickNumber, "PACKET", packetType) | 34 | for count := 0; count < 2; count++ { |
| 26 | packet := classes.Packet{} | 35 | reader.SkipBytes(76) |
| 27 | packet.ParsePacket(reader) | 36 | } |
| 37 | reader.SkipBytes(8) | ||
| 38 | reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32())) | ||
| 28 | case 3: // SyncTick | 39 | case 3: // SyncTick |
| 29 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SYNCTICK", packetType) | ||
| 30 | syncTick := classes.SyncTick{} | ||
| 31 | syncTick.ParseSyncTick() | ||
| 32 | case 4: // ConsoleCmd | 40 | case 4: // ConsoleCmd |
| 33 | writer.AppendLine("[%d] %s (%d):", tickNumber, "CONSOLECMD", packetType) | 41 | |
| 34 | consoleCmd := classes.ConsoleCmd{} | 42 | consoleCmd := classes.ConsoleCmd{} |
| 35 | consoleCmd.ParseConsoleCmd(reader) | 43 | consoleCmd.ParseConsoleCmd(reader) |
| 36 | case 5: // UserCmd | 44 | case 5: // UserCmd |
| 37 | writer.AppendLine("[%d] %s (%d):", tickNumber, "USERCMD", packetType) | 45 | |
| 38 | userCmd := classes.UserCmd{} | 46 | userCmd := classes.UserCmd{} |
| 39 | userCmd.ParseUserCmd(reader) | 47 | userCmd.ParseUserCmd(reader) |
| 40 | case 6: // DataTables | 48 | case 6: // DataTables |
| 41 | writer.AppendLine("[%d] %s (%d):", tickNumber, "DATATABLES", packetType) | 49 | reader.SkipBytes(uint64(reader.TryReadUInt32())) |
| 42 | dataTables := classes.DataTables{} | ||
| 43 | dataTables.ParseDataTables(reader) | ||
| 44 | case 7: // Stop | 50 | case 7: // Stop |
| 45 | writer.AppendLine("[%d] %s (%d):", tickNumber, "STOP", packetType) | 51 | if reader.TryReadBool() { |
| 46 | stop := classes.Stop{} | 52 | reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits())) |
| 47 | stop.ParseStop(reader) | 53 | } |
| 48 | case 8: // CustomData TODO: not sar data | 54 | case 8: // CustomData TODO: not sar data |
| 49 | customData := classes.CustomData{} | 55 | customData := classes.CustomData{} |
| 50 | customData.ParseCustomData(reader, tickNumber, packetType) | 56 | customData.ParseCustomData(reader, tickNumber, packetType) |
| 51 | case 9: // StringTables TODO: parsing string table data | 57 | case 9: // StringTables TODO: parsing string table data |
| 52 | writer.AppendLine("[%d] %s (%d):", tickNumber, "STRINGTABLES", packetType) | 58 | reader.SkipBytes(uint64(reader.TryReadUInt32())) |
| 53 | stringTables := classes.StringTables{} | ||
| 54 | stringTables.ParseStringTables(reader) | ||
| 55 | default: // Invalid | 59 | default: // Invalid |
| 56 | writer.AppendLine("[%d] %s (%d):", tickNumber, "INVALID", packetType) | 60 | |
| 57 | panic("invalid packet type") | 61 | panic("invalid packet type") |
| 58 | } | 62 | } |
| 59 | return PacketMessageInfo{ | 63 | return PacketMessageInfo{ |
diff --git a/pkg/verification/verification.go b/pkg/verification/verification.go new file mode 100644 index 0000000..487daf8 --- /dev/null +++ b/pkg/verification/verification.go | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | package verification | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "log" | ||
| 5 | "sort" | ||
| 6 | ) | ||
| 7 | |||
| 8 | var ServerNumbers []int | ||
| 9 | |||
| 10 | var Ticks uint32 | ||
| 11 | |||
| 12 | func IsContinuous(arr []int) bool { | ||
| 13 | if len(arr) == 0 { | ||
| 14 | return false | ||
| 15 | } | ||
| 16 | |||
| 17 | // Sort the array first | ||
| 18 | sort.Ints(arr) | ||
| 19 | |||
| 20 | // Start with the first element | ||
| 21 | prev := arr[0] | ||
| 22 | |||
| 23 | for i := 1; i < len(arr); i++ { | ||
| 24 | // Check if the current element is consecutive to the previous one | ||
| 25 | if arr[i] != prev+1 { | ||
| 26 | log.Printf("%d != %d", arr[i], prev+1) | ||
| 27 | return false | ||
| 28 | } | ||
| 29 | prev = arr[i] | ||
| 30 | } | ||
| 31 | |||
| 32 | return true | ||
| 33 | } | ||
diff --git a/pkg/writer/writer.go b/pkg/writer/writer.go deleted file mode 100644 index 6b66e75..0000000 --- a/pkg/writer/writer.go +++ /dev/null | |||
| @@ -1,47 +0,0 @@ | |||
| 1 | package writer | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "fmt" | ||
| 5 | "strings" | ||
| 6 | ) | ||
| 7 | |||
| 8 | var output strings.Builder | ||
| 9 | |||
| 10 | var temp strings.Builder | ||
| 11 | |||
| 12 | func Append(str string, a ...any) { | ||
| 13 | _, err := output.WriteString(fmt.Sprintf(str, a...)) | ||
| 14 | if err != nil { | ||
| 15 | output.WriteString(err.Error()) | ||
| 16 | } | ||
| 17 | } | ||
| 18 | |||
| 19 | func AppendLine(str string, a ...any) { | ||
| 20 | Append(str, a...) | ||
| 21 | output.WriteString("\n") | ||
| 22 | } | ||
| 23 | |||
| 24 | func GetString() string { | ||
| 25 | return output.String() | ||
| 26 | } | ||
| 27 | |||
| 28 | func TempAppend(str string, a ...any) { | ||
| 29 | _, err := temp.WriteString(fmt.Sprintf(str, a...)) | ||
| 30 | if err != nil { | ||
| 31 | temp.WriteString(err.Error()) | ||
| 32 | } | ||
| 33 | } | ||
| 34 | |||
| 35 | func TempAppendLine(str string, a ...any) { | ||
| 36 | TempAppend(str, a...) | ||
| 37 | temp.WriteString("\n") | ||
| 38 | } | ||
| 39 | |||
| 40 | func TempGetString() string { | ||
| 41 | return temp.String() | ||
| 42 | } | ||
| 43 | |||
| 44 | func AppendOutputFromTemp() { | ||
| 45 | output.WriteString(temp.String()) | ||
| 46 | temp.Reset() | ||
| 47 | } | ||