aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--pkg/classes/consoleCmd.go5
-rw-r--r--pkg/classes/customData.go7
-rw-r--r--pkg/classes/dataTables.go23
-rw-r--r--pkg/classes/packet.go63
-rw-r--r--pkg/classes/sarData.go89
-rw-r--r--pkg/classes/signOn.go52
-rw-r--r--pkg/classes/stop.go17
-rw-r--r--pkg/classes/stringTables.go100
-rw-r--r--pkg/classes/userCmd.go10
-rw-r--r--pkg/messages/messages.go6
-rw-r--r--pkg/messages/types/netDisconnect.go2
-rw-r--r--pkg/messages/types/netFile.go5
-rw-r--r--pkg/messages/types/netNop.go3
-rw-r--r--pkg/messages/types/netSetConVar.go5
-rw-r--r--pkg/messages/types/netSignOnState.go9
-rw-r--r--pkg/messages/types/netSplitScreenUser.go3
-rw-r--r--pkg/messages/types/netStringCmd.go5
-rw-r--r--pkg/messages/types/netTick.go5
-rw-r--r--pkg/messages/types/svcBspDecal.go7
-rw-r--r--pkg/messages/types/svcClassInfo.go9
-rw-r--r--pkg/messages/types/svcCmdKeyValues.go3
-rw-r--r--pkg/messages/types/svcCreateStringTable.go9
-rw-r--r--pkg/messages/types/svcCrosshairAngle.go5
-rw-r--r--pkg/messages/types/svcEntityMessage.go5
-rw-r--r--pkg/messages/types/svcFixAngle.go6
-rw-r--r--pkg/messages/types/svcGameEvent.go3
-rw-r--r--pkg/messages/types/svcGameEventList.go3
-rw-r--r--pkg/messages/types/svcGetCvarValue.go4
-rw-r--r--pkg/messages/types/svcMenu.go4
-rw-r--r--pkg/messages/types/svcPacketEntities.go9
-rw-r--r--pkg/messages/types/svcPaintmapData.go3
-rw-r--r--pkg/messages/types/svcPrefetch.go3
-rw-r--r--pkg/messages/types/svcPrint.go20
-rw-r--r--pkg/messages/types/svcSendTable.go5
-rw-r--r--pkg/messages/types/svcServerInfo.go18
-rw-r--r--pkg/messages/types/svcSetPause.go3
-rw-r--r--pkg/messages/types/svcSetView.go3
-rw-r--r--pkg/messages/types/svcSounds.go5
-rw-r--r--pkg/messages/types/svcSplitScreen.go4
-rw-r--r--pkg/messages/types/svcTempEntities.go4
-rw-r--r--pkg/messages/types/svcUpdateStringTable.go4
-rw-r--r--pkg/messages/types/svcUserMessage.go4
-rw-r--r--pkg/messages/types/svcVoiceData.go5
-rw-r--r--pkg/messages/types/svcVoiceInit.go5
-rw-r--r--pkg/packets/headers.go3
-rw-r--r--pkg/packets/packets.go48
-rw-r--r--pkg/verification/verification.go33
-rw-r--r--pkg/writer/writer.go47
48 files changed, 189 insertions, 504 deletions
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 @@
1package classes 1package classes
2 2
3import ( 3import (
4 "strings"
5
6 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/pkg/writer"
8) 5)
9 6
10type ConsoleCmd struct { 7type ConsoleCmd struct {
@@ -15,5 +12,5 @@ type ConsoleCmd struct {
15func (consoleCmd *ConsoleCmd) ParseConsoleCmd(reader *bitreader.Reader) { 12func (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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type CustomData struct { 7type 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
10type DataTables struct { 9type 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
59func ParseSendTable(reader *bitreader.Reader) SendTable { 56func 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 @@
1package classes 1package classes
2 2
3import ( 3import (
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
11const MSSC int = 2 7const MSSC int = 2
@@ -30,61 +26,8 @@ type CmdInfo struct {
30 26
31func (packet *Packet) ParsePacket(reader *bitreader.Reader) { 27func (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
48func (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
68type CmdInfoFlags int
69
70const (
71 ECmdInfoFlagsNone = 0
72 ECmdInfoFlagsUseOrigin2 = 1
73 ECmdInfoFlagsUserAngles2 = 1 << 1
74 ECmdInfoFlagsNoInterp = 1 << 2
75)
76
77func (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
11type SarDataType uint8 11type 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 @@
1package classes
2
3import (
4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/messages"
6 "github.com/pektezol/demoparser/pkg/writer"
7)
8
9type SignOn struct {
10 PacketInfo []CmdInfo
11 InSequence uint32
12 OutSequence uint32
13 Size uint32
14 Data []any
15}
16
17func (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
34func (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 @@
1package classes
2
3import (
4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6)
7
8type Stop struct {
9 RemainingData []byte
10}
11
12func (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 @@
1package classes
2
3import (
4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6)
7
8type StringTables struct {
9 Size int32
10 Data []StringTable
11}
12
13type StringTable struct {
14 Name string
15 TableEntries []StringTableEntry
16 Classes []StringTableClass
17}
18
19type StringTableEntry struct {
20 Name string
21 EntryData StringTableEntryData
22}
23
24type StringTableEntryData struct {
25 // TODO: Parse StringTableEntry
26}
27
28type StringTableClass struct {
29 Name string
30 Data string
31}
32
33func (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
46func (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
79func (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
92func (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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type UserCmd struct { 7type 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
91func (button Buttons) GetButtons() []string { 83func (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 @@
1package messages 1package messages
2 2
3import ( 3import (
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
11func ParseMessages(messageType uint64, reader *bitreader.Reader) any { 8func 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type NetDisconnect struct { 7type 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
10type NetFile struct { 9type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type NetNop struct{} 7type NetNop struct{}
9 8
10func ParseNetNop(reader *bitreader.Reader) NetNop { 9func 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type NetSetConVar struct { 7type NetSetConVar struct {
@@ -18,13 +17,13 @@ type conVar struct {
18func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { 17func 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
10type NetSignOnState struct { 9type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type NetSplitScreenUser struct { 7type 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 @@
1package messages 1package messages
2 2
3import ( 3import (
4 "strings"
5
6 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/pkg/writer"
8) 5)
9 6
10type NetStringCmd struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type NetTick struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcBspDecal struct { 7type 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
10type SvcClassInfo struct { 9type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcCmdKeyValues struct { 7type 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
10type SvcCreateStringTable struct { 9type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcCrosshairAngle struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcEntityMessage struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcFixAngle struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcGameEvent struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcGameEventList struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcGetCvarValue struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcMenu struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcPacketEntities struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcPaintmapData struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcPrefetch struct { 7type 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 @@
1package messages 1package messages
2 2
3import ( 3import (
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
10type SvcPrint struct { 13type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcSendTable struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcServerInfo struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcSetPause struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcSetView struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcSounds struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcSplitScreen struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcTempEntities struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcUpdateStringTable struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcUserMessage struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcVoiceData struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type SvcVoiceInit struct { 7type 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
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer"
6) 5)
7 6
8type Headers struct { 7type 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
3import ( 3import (
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
9type PacketMessageInfo struct { 9type 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 @@
1package verification
2
3import (
4 "log"
5 "sort"
6)
7
8var ServerNumbers []int
9
10var Ticks uint32
11
12func 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 @@
1package writer
2
3import (
4 "fmt"
5 "strings"
6)
7
8var output strings.Builder
9
10var temp strings.Builder
11
12func 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
19func AppendLine(str string, a ...any) {
20 Append(str, a...)
21 output.WriteString("\n")
22}
23
24func GetString() string {
25 return output.String()
26}
27
28func 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
35func TempAppendLine(str string, a ...any) {
36 TempAppend(str, a...)
37 temp.WriteString("\n")
38}
39
40func TempGetString() string {
41 return temp.String()
42}
43
44func AppendOutputFromTemp() {
45 output.WriteString(temp.String())
46 temp.Reset()
47}