Skip to content

Commit f78c6ad

Browse files
authored
add server_message game event (#197)
1 parent 6822ff3 commit f78c6ad

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

src/parser/src/second_pass/game_events.rs

+28-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ use csgoproto::cstrike15_usermessages::CCSUsrMsg_ServerRankUpdate;
2020
use csgoproto::networkbasetypes::csvcmsg_game_event::Key_t;
2121
use csgoproto::networkbasetypes::CNETMsg_SetConVar;
2222
use csgoproto::networkbasetypes::CSVCMsg_GameEvent;
23+
use csgoproto::usermessages::CUserMessageSayText;
24+
use csgoproto::usermessages::CUserMessageSayText2;
2325
use itertools::Itertools;
2426
use protobuf::Message;
2527
use serde::ser::SerializeMap;
@@ -855,7 +857,6 @@ impl<'a> SecondPassParser<'a> {
855857
None
856858
}
857859
pub fn create_custom_event_chat_message(&mut self, msg_bytes: &[u8]) -> Result<(), DemoParserError> {
858-
use csgoproto::usermessages::CUserMessageSayText2;
859860
self.game_events_counter.insert("chat_message".to_string());
860861
if !self.wanted_events.contains(&"chat_message".to_string()) && self.wanted_events.first() != Some(&"all".to_string()) {
861862
return Ok(());
@@ -864,7 +865,6 @@ impl<'a> SecondPassParser<'a> {
864865
Ok(msg) => msg,
865866
Err(_) => return Err(DemoParserError::MalformedMessage),
866867
};
867-
868868
let mut fields = vec![];
869869
let controller_id = chat_msg.entityindex();
870870
let res = self.find_user_by_controller_id(controller_id);
@@ -887,6 +887,32 @@ impl<'a> SecondPassParser<'a> {
887887
self.game_events.push(ge);
888888
Ok(())
889889
}
890+
pub fn create_custom_event_server_message(&mut self, msg_bytes: &[u8]) -> Result<(), DemoParserError> {
891+
self.game_events_counter.insert("server_message".to_string());
892+
if !self.wanted_events.contains(&"server_message".to_string()) && self.wanted_events.first() != Some(&"all".to_string()) {
893+
return Ok(());
894+
}
895+
let chat_msg: CUserMessageSayText = match Message::parse_from_bytes(&msg_bytes) {
896+
Ok(msg) => msg,
897+
Err(_) => return Err(DemoParserError::MalformedMessage),
898+
};
899+
let mut fields = vec![];
900+
fields.push(EventField {
901+
data: Some(Variant::String(chat_msg.text().to_owned())),
902+
name: "server_message".to_string(),
903+
});
904+
fields.push(EventField {
905+
data: Some(Variant::I32(self.tick)),
906+
name: "tick".to_string(),
907+
});
908+
let ge = GameEvent {
909+
name: "server_message".to_string(),
910+
fields: fields,
911+
tick: self.tick,
912+
};
913+
self.game_events.push(ge);
914+
Ok(())
915+
}
890916

891917
pub fn create_custom_event_round_start(&mut self, _events: &[GameEventInfo]) -> Result<(), DemoParserError> {
892918
self.game_events_counter.insert("round_start".to_string());
@@ -895,7 +921,6 @@ impl<'a> SecondPassParser<'a> {
895921
}
896922
let mut fields = vec![];
897923
fields.extend(self.find_non_player_props());
898-
899924
fields.push(EventField {
900925
data: self.find_current_round(),
901926
name: "round".to_string(),
@@ -910,7 +935,6 @@ impl<'a> SecondPassParser<'a> {
910935
tick: self.tick,
911936
};
912937
self.game_events.push(ge);
913-
914938
Ok(())
915939
}
916940

src/parser/src/second_pass/other_netmessages.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ use crate::first_pass::read_bits::DemoParserError;
22
use crate::first_pass::sendtables::Serializer;
33
use crate::maps::PAINTKITS;
44
use crate::maps::WEAPINDICIES;
5-
use crate::second_pass::parser_settings::ChatMessageRecord;
65
use crate::second_pass::parser_settings::EconItem;
76
use crate::second_pass::parser_settings::PlayerEndMetaData;
87
use crate::second_pass::parser_settings::SecondPassParser;
98
use csgoproto::cstrike15_usermessages::CCSUsrMsg_EndOfMatchAllPlayersData;
109
use csgoproto::cstrike15_usermessages::CCSUsrMsg_SendPlayerItemDrops;
1110
use csgoproto::networkbasetypes::CNETMsg_SetConVar;
12-
use csgoproto::usermessages::CUserMessageSayText2;
1311
use protobuf::Message;
1412

1513
#[derive(Debug, Clone)]
@@ -55,10 +53,7 @@ impl<'a> SecondPassParser<'a> {
5553
}
5654
Ok(())
5755
}
58-
pub fn parse_chat_messages(&mut self, bytes: &[u8]) -> Result<(), DemoParserError> {
59-
self.create_custom_event_chat_message(bytes)?;
60-
Ok(())
61-
}
56+
6257
pub fn parse_convars(&mut self, bytes: &[u8]) -> Result<(), DemoParserError> {
6358
let convar: CNETMsg_SetConVar = match Message::parse_from_bytes(&bytes) {
6459
Ok(msg) => msg,

src/parser/src/second_pass/parser.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ impl<'a> SecondPassParser<'a> {
130130
svc_ServerInfo => self.parse_server_info(msg_bytes),
131131
CS_UM_SendPlayerItemDrops => self.parse_item_drops(msg_bytes),
132132
CS_UM_EndOfMatchAllPlayersData => self.parse_player_end_msg(msg_bytes),
133-
UM_SayText2 => self.parse_chat_messages(msg_bytes),
133+
UM_SayText2 => self.create_custom_event_chat_message(msg_bytes),
134+
UM_SayText => self.create_custom_event_server_message(msg_bytes),
134135
net_SetConVar => self.create_custom_event_parse_convars(msg_bytes),
135136
CS_UM_PlayerStatsUpdate => self.parse_player_stats_update(msg_bytes),
136137
CS_UM_ServerRankUpdate => self.create_custom_event_rank_update(msg_bytes),
@@ -219,7 +220,8 @@ impl<'a> SecondPassParser<'a> {
219220
svc_UpdateStringTable => self.update_string_table(&msg_bytes),
220221
CS_UM_SendPlayerItemDrops => self.parse_item_drops(&msg_bytes),
221222
CS_UM_EndOfMatchAllPlayersData => self.parse_player_end_msg(&msg_bytes),
222-
UM_SayText2 => self.parse_chat_messages(&msg_bytes),
223+
UM_SayText2 => self.create_custom_event_chat_message(&msg_bytes),
224+
UM_SayText => self.create_custom_event_server_message(bytes),
223225
net_SetConVar => self.create_custom_event_parse_convars(&msg_bytes),
224226
CS_UM_PlayerStatsUpdate => self.parse_player_stats_update(&msg_bytes),
225227
svc_ServerInfo => self.parse_server_info(&msg_bytes),

0 commit comments

Comments
 (0)