1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package messages
import (
"bytes"
"github.com/pektezol/bitreader"
"github.com/pektezol/demoparser/packets/messages/types"
)
func ParseMessage(data []byte) []Message {
reader := bitreader.Reader(bytes.NewReader(data), true)
var messages []Message
for {
messageType, err := reader.ReadBits(6)
if err != nil {
break
}
switch messageType {
case 0x00:
messages = append(messages, Message{Data: types.NetNop{}})
case 0x01:
messages = append(messages, Message{Data: types.ParseNetDisconnect(reader)})
case 0x02:
messages = append(messages, Message{Data: types.ParseNetFile(reader)})
case 0x03:
messages = append(messages, Message{Data: types.ParseNetSplitScreenUser(reader)})
case 0x04:
messages = append(messages, Message{Data: types.ParseNetTick(reader)})
case 0x05:
messages = append(messages, Message{Data: types.ParseNetStringCmd(reader)})
case 0x06:
messages = append(messages, Message{Data: types.ParseNetSetConVar(reader)})
case 0x07:
messages = append(messages, Message{Data: types.ParseNetSignOnState(reader)})
case 0x08:
messages = append(messages, Message{Data: types.ParseSvcServerInfo(reader)})
case 0x09:
messages = append(messages, Message{Data: types.ParseSvcSendTable(reader)})
case 0x10:
messages = append(messages, Message{Data: types.ParseSvcClassInfo(reader)})
case 0x11:
messages = append(messages, Message{Data: types.ParseSvcSetPause(reader)})
case 0x12:
messages = append(messages, Message{Data: types.ParseSvcCreateStringTable(reader)})
case 0x13:
messages = append(messages, Message{Data: types.ParseSvcUpdateStringTable(reader)})
case 0x14:
messages = append(messages, Message{Data: types.ParseSvcVoiceInit(reader)})
case 0x15:
messages = append(messages, Message{Data: types.ParseSvcVoiceData(reader)})
case 0x16:
messages = append(messages, Message{Data: types.ParseSvcPrint(reader)})
case 0x17:
messages = append(messages, Message{Data: types.ParseSvcSounds(reader)})
case 0x18:
messages = append(messages, Message{Data: types.ParseSvcSetView(reader)})
case 0x19:
messages = append(messages, Message{Data: types.ParseSvcFixAngle(reader)})
case 0x20:
messages = append(messages, Message{Data: types.ParseSvcCrosshairAngle(reader)})
case 0x21:
// TODO: SvcBspDecal
case 0x22:
messages = append(messages, Message{Data: types.ParseSvcSplitScreen(reader)})
case 0x23:
messages = append(messages, Message{Data: types.ParseSvcUserMessage(reader)})
case 0x24:
messages = append(messages, Message{Data: types.ParseSvcEntityMessage(reader)})
case 0x25:
// TODO: SvcGameEvent
case 0x26:
messages = append(messages, Message{Data: types.ParseSvcPacketEntities(reader)})
case 0x27:
messages = append(messages, Message{Data: types.ParseSvcTempEntities(reader)})
case 0x28:
messages = append(messages, Message{Data: types.ParseSvcPrefetch(reader)})
case 0x29:
messages = append(messages, Message{Data: types.ParseSvcMenu(reader)})
case 0x30:
messages = append(messages, Message{Data: types.ParseSvcGameEventList(reader)})
case 0x31:
messages = append(messages, Message{Data: types.ParseSvcGetCvarValue(reader)})
case 0x32:
messages = append(messages, Message{Data: types.ParseSvcCmdKeyValues(reader)})
case 0x33:
messages = append(messages, Message{Data: types.ParseSvcPaintmapData(reader)})
}
}
return messages
}
type Message struct {
Data any
}
|