remove start packet trouble

This commit is contained in:
Robin Appelman 2022-04-23 13:57:03 +02:00
commit e51d6f42e7

View file

@ -74,28 +74,7 @@ pub fn cut(input: &[u8], start_tick: u32, end_tick: u32) -> Vec<u8> {
.unwrap(); .unwrap();
handler.handle_packet(packet).unwrap(); handler.handle_packet(packet).unwrap();
} }
let delta_tick = start_state.last_delta;
let mut next = packets.next(&start_handler.state_handler).unwrap().unwrap();
let mut delta_tick = 0;
let mut max = 0;
let mut baseline = 0;
if let Packet::Message(MessagePacket { messages, .. }) = &next {
for msg in messages {
if let Message::PacketEntities(PacketEntitiesMessage {
delta: Some(delta),
max_entries,
base_line,
..
}) = msg
{
max = *max_entries;
baseline = *base_line;
delta_tick = delta.get();
}
}
} else {
panic!("first packet is not a MessagePacket, pick a different start tick")
}
let start_entities = start_state.entities.entity_ids(); let start_entities = start_state.entities.entity_ids();
@ -138,9 +117,8 @@ pub fn cut(input: &[u8], start_tick: u32, end_tick: u32) -> Vec<u8> {
messages: vec![ messages: vec![
msg, msg,
Message::PacketEntities(PacketEntitiesMessage { Message::PacketEntities(PacketEntitiesMessage {
max_entries: max, max_entries: start_state.entity_max,
delta: Some((delta_tick - 1).try_into().unwrap()), delta: Some((delta_tick - 1).try_into().unwrap()),
base_line: baseline,
..PacketEntitiesMessage::default() ..PacketEntitiesMessage::default()
}), }),
], ],
@ -166,11 +144,6 @@ pub fn cut(input: &[u8], start_tick: u32, end_tick: u32) -> Vec<u8> {
packet.set_tick(packet.tick() - start_tick) packet.set_tick(packet.tick() - start_tick)
}); });
mutators.mutate_packet(&mut next);
next.encode(&mut out_stream, &handler.state_handler)
.unwrap();
handler.handle_packet(next).unwrap();
while let Some(mut packet) = packets.next(&handler.state_handler).unwrap() { while let Some(mut packet) = packets.next(&handler.state_handler).unwrap() {
let original_tick = packet.tick(); let original_tick = packet.tick();
@ -202,6 +175,8 @@ struct StartState<'a> {
table_updates: StringTablesUpdates, table_updates: StringTablesUpdates,
start_packets: Vec<Packet<'a>>, start_packets: Vec<Packet<'a>>,
server_tick: u32, server_tick: u32,
entity_max: u16,
last_delta: u32,
} }
fn skip_start<'a>( fn skip_start<'a>(
@ -213,6 +188,8 @@ fn skip_start<'a>(
let mut table_updates = StringTablesUpdates::default(); let mut table_updates = StringTablesUpdates::default();
let mut start_packets = Vec::with_capacity(6); let mut start_packets = Vec::with_capacity(6);
let mut server_tick = 0; let mut server_tick = 0;
let mut entity_max = 0;
let mut last_delta = 0;
while let Some(packet) = packets.next(&handler.state_handler).unwrap() { while let Some(packet) = packets.next(&handler.state_handler).unwrap() {
if PRESERVE_PACKETS.contains(&packet.packet_type()) { if PRESERVE_PACKETS.contains(&packet.packet_type()) {
@ -224,6 +201,10 @@ fn skip_start<'a>(
table_updates.handle_message(&msg); table_updates.handle_message(&msg);
match msg { match msg {
Message::PacketEntities(msg) => { Message::PacketEntities(msg) => {
if let Some(delta) = msg.delta {
last_delta = delta.get();
}
entity_max = msg.max_entries;
entities.handle_message(msg, &handler.state_handler); entities.handle_message(msg, &handler.state_handler);
} }
Message::NetTick(NetTickMessage { tick, .. }) => { Message::NetTick(NetTickMessage { tick, .. }) => {
@ -247,6 +228,8 @@ fn skip_start<'a>(
table_updates, table_updates,
start_packets, start_packets,
server_tick, server_tick,
entity_max,
last_delta,
} }
} }