Skip to content

Commit 715d9ac

Browse files
committed
feat: add SayText/SayText2 and ChatMessage events for CS2 demos
It looks like chat messages are now networked in recent Valve demos.
1 parent 3b8cde4 commit 715d9ac

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

pkg/demoinfocs/net_messages.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,52 @@ func (p *parser) handleServerInfoS2(srvInfo *msgs2.CSVCMsg_ServerInfo) {
109109
})
110110
}
111111

112+
func (p *parser) handleMessageSayText(msg *msgs2.CUserMessageSayText) {
113+
p.eventDispatcher.Dispatch(events.SayText{
114+
EntIdx: int(msg.GetPlayerindex()),
115+
IsChat: msg.GetChat(),
116+
IsChatAll: false,
117+
Text: msg.GetText(),
118+
})
119+
}
120+
121+
func (p *parser) handleMessageSayText2(msg *msgs2.CUserMessageSayText2) {
122+
p.eventDispatcher.Dispatch(events.SayText2{
123+
EntIdx: int(msg.GetEntityindex()),
124+
IsChat: msg.GetChat(),
125+
IsChatAll: false,
126+
MsgName: msg.GetMessagename(),
127+
Params: []string{msg.GetParam1(), msg.GetParam2(), msg.GetParam3(), msg.GetParam4()},
128+
})
129+
130+
switch msg.GetMessagename() {
131+
case "Cstrike_Chat_All":
132+
fallthrough
133+
case "Cstrike_Chat_AllDead":
134+
sender := p.gameState.playersByEntityID[int(msg.GetEntityindex())]
135+
136+
p.eventDispatcher.Dispatch(events.ChatMessage{
137+
Sender: sender,
138+
Text: msg.GetParam2(),
139+
IsChatAll: false,
140+
})
141+
142+
case "#CSGO_Coach_Join_T": // Ignore these
143+
case "#CSGO_Coach_Join_CT":
144+
case "#Cstrike_Name_Change":
145+
case "Cstrike_Chat_T_Loc":
146+
case "Cstrike_Chat_CT_Loc":
147+
case "Cstrike_Chat_T_Dead":
148+
case "Cstrike_Chat_CT_Dead":
149+
150+
default:
151+
errMsg := fmt.Sprintf("skipped sending ChatMessageEvent for SayText2 with unknown MsgName %q", msg.GetMessagename())
152+
153+
p.eventDispatcher.Dispatch(events.ParserWarn{Message: errMsg})
154+
unassert.Error(errMsg)
155+
}
156+
}
157+
112158
func (p *parser) handleServerRankUpdate(msg *msgs2.CCSUsrMsg_ServerRankUpdate) {
113159
for _, v := range msg.RankUpdate {
114160
steamID32 := uint32(v.GetAccountId())

pkg/demoinfocs/parser.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,8 @@ func NewParserWithConfig(demostream io.Reader, config ParserConfig) Parser {
427427
p.msgDispatcher.RegisterHandler(p.handleUpdateStringTableS2)
428428
p.msgDispatcher.RegisterHandler(p.handleSetConVarS2)
429429
p.msgDispatcher.RegisterHandler(p.handleServerRankUpdate)
430+
p.msgDispatcher.RegisterHandler(p.handleMessageSayText)
431+
p.msgDispatcher.RegisterHandler(p.handleMessageSayText2)
430432

431433
if config.MsgQueueBufferSize >= 0 {
432434
p.initMsgQueue(config.MsgQueueBufferSize)

0 commit comments

Comments
 (0)