separate option for invalid deletes

This commit is contained in:
Robin Appelman 2025-05-18 18:55:26 +02:00
commit fabf773f72
8 changed files with 177 additions and 116 deletions

View file

@ -1,10 +1,9 @@
use crate::mutate::MessageMutator;
use log::{info, warn};
use crate::mutate::{MessageMutator, MutatorList};
use log::warn;
use std::cell::RefCell;
use std::collections::{BTreeMap, BTreeSet};
use tf_demo_parser::demo::message::packetentities::{EntityId, PacketEntity, UpdateType};
use std::collections::BTreeSet;
use tf_demo_parser::demo::message::packetentities::{EntityId, UpdateType};
use tf_demo_parser::demo::message::Message;
use tf_demo_parser::demo::packet::datatable::{ClassId, ServerClass};
use tf_demo_parser::ParserState;
#[derive(Default)]
@ -34,14 +33,16 @@ impl MessageMutator for RemoveInvalidPreserveEntity {
}
}
UpdateType::Delete => {
self.known_entities.borrow_mut().remove(&entity.entity_index);
},
self.known_entities
.borrow_mut()
.remove(&entity.entity_index);
}
_ => {}
};
}
ent_message.removed_entities.retain(|id| {
if self.known_entities.borrow().contains(&id) {
// just not deleting makes the demo play, but with some ERROR entities
// just not deleting makes the demo play but seems like it could cause further issues
// having a Delete or Leave makes it crash further in the demo
// warn!("inserting delete for {}", id);
@ -63,9 +64,15 @@ impl MessageMutator for RemoveInvalidPreserveEntity {
true
}
});
ent_message.entities.sort_by(|a, b| a.entity_index.cmp(&b.entity_index));
ent_message
.entities
.sort_by(|a, b| a.entity_index.cmp(&b.entity_index));
ent_message.removed_entities.extend(deferred_deletes);
ent_message.removed_entities.sort();
}
}
}
pub fn removed_invalid_deletes(mutators: &mut MutatorList) {
mutators.push_message_mutator(RemoveInvalidPreserveEntity::default())
}