From d1c4e0e23bf8162e2a5268af6cb21ab933352c67 Mon Sep 17 00:00:00 2001 From: lcdr Date: Mon, 18 Jan 2021 20:38:04 +0100 Subject: [PATCH] Add support for destroyable serialization --- examples/capture_parser.rs | 3 +- src/raknet/client/replica/destroyable.rs | 32 +++++++++++++++++- .../tests/DestroyableSerialization.bin | Bin 0 -> 49 bytes .../replica/tests/DestroyableSerialization.rs | 20 +++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/raknet/client/replica/tests/DestroyableSerialization.bin create mode 100644 src/raknet/client/replica/tests/DestroyableSerialization.rs diff --git a/examples/capture_parser.rs b/examples/capture_parser.rs index a7c6ebc..eea1762 100644 --- a/examples/capture_parser.rs +++ b/examples/capture_parser.rs @@ -14,7 +14,7 @@ use lu_packets::{ buff::BuffConstruction, character::CharacterConstruction, controllable_physics::{ControllablePhysicsConstruction, ControllablePhysicsSerialization}, - destroyable::DestroyableConstruction, + destroyable::{DestroyableConstruction, DestroyableSerialization}, fx::FxConstruction, inventory::InventoryConstruction, level_progression::LevelProgressionConstruction, @@ -75,6 +75,7 @@ impl ReplicaContext for PlayerContext<'_> { vec![ |x| Ok(Box::new(ControllablePhysicsSerialization::deserialize(x)?)), + |x| Ok(Box::new(DestroyableSerialization::deserialize(x)?)), ] } } diff --git a/src/raknet/client/replica/destroyable.rs b/src/raknet/client/replica/destroyable.rs index a3ee11a..a2c9b56 100644 --- a/src/raknet/client/replica/destroyable.rs +++ b/src/raknet/client/replica/destroyable.rs @@ -5,7 +5,7 @@ use endio_bit::{BEBitReader, BEBitWriter}; use lu_packets_derive::{BitVariantTests, ReplicaSerde}; use crate::common::LVec; -use super::ComponentConstruction; +use super::{ComponentConstruction, ComponentSerialization}; #[derive(Debug, Deserialize, PartialEq, Serialize)] pub struct StatusImmunityInfo { @@ -127,9 +127,39 @@ pub struct DestroyableConstruction { pub is_on_a_threat_list: Option, } +#[derive(Debug, PartialEq, ReplicaSerde)] +pub struct SerializationStatsInfo { + pub cur_health: u32, + pub max_health: f32, + pub cur_armor: u32, + pub max_armor: f32, + pub cur_imag: u32, + pub max_imag: f32, + pub damage_absorption_points: u32, + pub immunity: bool, + pub is_gm_immune: bool, + pub is_shielded: bool, + pub actual_max_health: f32, + pub actual_max_armor: f32, + pub actual_max_imag: f32, + pub factions: LVec, + pub is_smashable: bool, +} + +#[derive(BitVariantTests, Debug, PartialEq, ReplicaSerde)] +pub struct DestroyableSerialization { + pub serialization_stats_info: Option, + pub is_on_a_threat_list: Option, +} impl ComponentConstruction for DestroyableConstruction { fn ser(&self, writer: &mut BEBitWriter>) -> Res<()> { self.serialize(writer) } } + +impl ComponentSerialization for DestroyableSerialization { + fn ser(&self, writer: &mut BEBitWriter>) -> Res<()> { + self.serialize(writer) + } +} diff --git a/src/raknet/client/replica/tests/DestroyableSerialization.bin b/src/raknet/client/replica/tests/DestroyableSerialization.bin new file mode 100644 index 0000000000000000000000000000000000000000..c8ebd444cd4f8e380e6b7b21ae5804c8ab1ab843 GIT binary patch literal 49 ucmZo^U;qLEg;p@FpwI@U4HVjebO8egivR;hivR;Bi+}(F1ET>010MjyB?fB% literal 0 HcmV?d00001 diff --git a/src/raknet/client/replica/tests/DestroyableSerialization.rs b/src/raknet/client/replica/tests/DestroyableSerialization.rs new file mode 100644 index 0000000..98db84b --- /dev/null +++ b/src/raknet/client/replica/tests/DestroyableSerialization.rs @@ -0,0 +1,20 @@ +DestroyableSerialization { + serialization_stats_info: Some(SerializationStatsInfo { + cur_health: 9, + max_health: 10.0, + cur_armor: 11, + max_armor: 12.0, + cur_imag: 13, + max_imag: 14.0, + damage_absorption_points: 15, + immunity: true, + is_gm_immune: true, + is_shielded: true, + actual_max_health: 16.0, + actual_max_armor: 17.0, + actual_max_imag: 18.0, + factions: vec![19].into(), + is_smashable: true, + }), + is_on_a_threat_list: Some(true), +}