mirror of
https://codeberg.org/demostf/edit.git
synced 2026-10-01 07:34:05 +02:00
separate option for invalid deletes
This commit is contained in:
parent
e95a9e4a2c
commit
fabf773f72
8 changed files with 177 additions and 116 deletions
|
|
@ -1,4 +1,3 @@
|
|||
use crate::missing_preserve::RemoveInvalidPreserveEntity;
|
||||
use crate::mutate::MutatorList;
|
||||
use tf_demo_parser::demo::message::usermessage::UserMessageType;
|
||||
use tf_demo_parser::demo::message::Message;
|
||||
|
|
@ -12,5 +11,4 @@ pub fn clean_demo(mutators: &mut MutatorList) {
|
|||
true
|
||||
}
|
||||
});
|
||||
mutators.push_message_mutator(RemoveInvalidPreserveEntity::new());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use std::collections::{BTreeMap, BTreeSet};
|
||||
|
||||
use tf_demo_parser::demo::data::{DemoTick, ServerTick};
|
||||
use tf_demo_parser::demo::message::BaselineIndex;
|
||||
use tf_demo_parser::demo::message::packetentities::{
|
||||
EntityId, PacketEntitiesMessage, PacketEntity, UpdateType,
|
||||
};
|
||||
|
|
@ -155,7 +156,7 @@ impl ActiveEntities {
|
|||
entity_index: removed,
|
||||
props: vec![],
|
||||
in_pvs: false,
|
||||
baseline_index: 0,
|
||||
baseline_index: BaselineIndex::First,
|
||||
update_type: if self.deleted_entities.contains(&removed) {
|
||||
UpdateType::Delete
|
||||
} else {
|
||||
|
|
@ -173,7 +174,7 @@ impl ActiveEntities {
|
|||
|
||||
baselines[0].updated_base_line = true;
|
||||
baselines[1].updated_base_line = true;
|
||||
baselines[0].base_line = 1;
|
||||
baselines[0].base_line = BaselineIndex::Second;
|
||||
|
||||
(
|
||||
baselines.into_iter(),
|
||||
|
|
@ -200,7 +201,7 @@ fn encode_entities(
|
|||
removed_entities,
|
||||
max_entries,
|
||||
delta,
|
||||
base_line: 0,
|
||||
base_line: BaselineIndex::First,
|
||||
updated_base_line: false,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ struct Args {
|
|||
from: Option<u32>,
|
||||
#[arg(long)]
|
||||
to: Option<u32>,
|
||||
#[arg(long)]
|
||||
remove_invalid_deletes: bool,
|
||||
}
|
||||
|
||||
impl Args {
|
||||
|
|
@ -27,6 +29,7 @@ impl Args {
|
|||
} else {
|
||||
None
|
||||
},
|
||||
remove_invalid_deletes: self.remove_invalid_deletes,
|
||||
..EditOptions::default()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
use crate::missing_preserve::removed_invalid_deletes;
|
||||
use crate::{clean_demo, strip_cond, unlock_pov, MutatorList};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tf_demo_parser::demo::data::DemoTick;
|
||||
|
|
@ -5,12 +6,15 @@ use tf_demo_parser::demo::message::packetentities::EntityId;
|
|||
use tf_demo_parser::demo::message::Message;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Default)]
|
||||
#[non_exhaustive]
|
||||
pub struct EditOptions {
|
||||
pub unlock_pov: bool,
|
||||
#[serde(default)]
|
||||
pub remove_conditions: Vec<CondOptions>,
|
||||
#[serde(default)]
|
||||
pub cut: Option<TickRange>,
|
||||
#[serde(default)]
|
||||
pub remove_invalid_deletes: bool,
|
||||
}
|
||||
|
||||
impl EditOptions {
|
||||
|
|
@ -38,6 +42,10 @@ impl EditOptions {
|
|||
unlock_pov(&mut mutators, spectator_id);
|
||||
}
|
||||
|
||||
if self.remove_invalid_deletes {
|
||||
removed_invalid_deletes(&mut mutators);
|
||||
}
|
||||
|
||||
mutators
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use crate::mutate::{MessageMutator, MutatorList};
|
|||
use std::cell::Cell;
|
||||
use tf_demo_parser::demo::message::packetentities::{EntityId, PacketEntity, UpdateType};
|
||||
use tf_demo_parser::demo::message::usermessage::UserMessage;
|
||||
use tf_demo_parser::demo::message::Message;
|
||||
use tf_demo_parser::demo::message::{BaselineIndex, Message};
|
||||
use tf_demo_parser::demo::packet::Packet;
|
||||
use tf_demo_parser::ParserState;
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ impl MessageMutator for AddStvEntity {
|
|||
fn mutate_message(&self, message: &mut Message, _state: &ParserState) {
|
||||
if !self.added.get() {
|
||||
if let Message::PacketEntities(ent_message) = message {
|
||||
if ent_message.base_line == 0 {
|
||||
if ent_message.base_line == BaselineIndex::First {
|
||||
let player_entity = ent_message
|
||||
.entities
|
||||
.iter()
|
||||
|
|
@ -46,7 +46,7 @@ impl MessageMutator for AddStvEntity {
|
|||
serial_number: 1234567,
|
||||
delay: None,
|
||||
delta: None,
|
||||
baseline_index: 0,
|
||||
baseline_index: BaselineIndex::First,
|
||||
});
|
||||
ent_message
|
||||
.entities
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue