mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
handle updated static baseline in the same packet as using the baseline
This commit is contained in:
parent
d8b8a44243
commit
3b424f8a89
1 changed files with 24 additions and 1 deletions
|
|
@ -2,7 +2,7 @@ use crate::demo::message::{Message, MessageType};
|
||||||
use crate::demo::packet::datatable::{ParseSendTable, ServerClass};
|
use crate::demo::packet::datatable::{ParseSendTable, ServerClass};
|
||||||
use crate::demo::packet::stringtable::{StringTable, StringTableEntry};
|
use crate::demo::packet::stringtable::{StringTable, StringTableEntry};
|
||||||
use crate::demo::packet::Packet;
|
use crate::demo::packet::Packet;
|
||||||
use crate::Result;
|
use crate::{ParseError, Result};
|
||||||
|
|
||||||
use crate::demo::header::Header;
|
use crate::demo::header::Header;
|
||||||
use crate::demo::packet::message::MessagePacketMeta;
|
use crate::demo::packet::message::MessagePacketMeta;
|
||||||
|
|
@ -91,6 +91,7 @@ impl<'a, T: MessageHandler> DemoHandler<'a, T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_packet(&mut self, packet: Packet<'a>) -> Result<()> {
|
pub fn handle_packet(&mut self, packet: Packet<'a>) -> Result<()> {
|
||||||
|
let mut baselines_updated = false;
|
||||||
match packet {
|
match packet {
|
||||||
Packet::DataTables(packet) => {
|
Packet::DataTables(packet) => {
|
||||||
self.handle_data_table(packet.tables, packet.server_classes)?;
|
self.handle_data_table(packet.tables, packet.server_classes)?;
|
||||||
|
|
@ -110,8 +111,30 @@ impl<'a, T: MessageHandler> DemoHandler<'a, T> {
|
||||||
self.handle_string_table(message.table)
|
self.handle_string_table(message.table)
|
||||||
}
|
}
|
||||||
Message::UpdateStringTable(message) => {
|
Message::UpdateStringTable(message) => {
|
||||||
|
baselines_updated = true;
|
||||||
self.handle_table_update(message.table_id, message.entries)
|
self.handle_table_update(message.table_id, message.entries)
|
||||||
}
|
}
|
||||||
|
Message::PacketEntities(mut msg) => {
|
||||||
|
if baselines_updated {
|
||||||
|
// if baselines were updated in the same packet, the newly added
|
||||||
|
// static baselines wont be used yet, patch it up afterward
|
||||||
|
for ent in msg.entities.iter_mut() {
|
||||||
|
if ent.baseline_props.is_empty() {
|
||||||
|
let send_table = self
|
||||||
|
.state_handler
|
||||||
|
.send_tables
|
||||||
|
.get(usize::from(ent.server_class))
|
||||||
|
.ok_or(ParseError::UnknownServerClass(
|
||||||
|
ent.server_class,
|
||||||
|
))?;
|
||||||
|
ent.baseline_props = self
|
||||||
|
.state_handler
|
||||||
|
.get_static_baseline(ent.server_class, send_table)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.handle_message(Message::PacketEntities(msg))
|
||||||
|
}
|
||||||
message => self.handle_message(message),
|
message => self.handle_message(message),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue