mirror of
https://github.com/demostf/povunlock.git
synced 2026-06-03 22:14:11 +02:00
unset local player
This commit is contained in:
parent
6a4e501bbb
commit
104e68fc59
2 changed files with 25 additions and 46 deletions
43
src/lib.rs
43
src/lib.rs
|
|
@ -31,9 +31,6 @@ fn set_panic_hook() {
|
||||||
console_error_panic_hook::set_once();
|
console_error_panic_hook::set_once();
|
||||||
}
|
}
|
||||||
|
|
||||||
const LOCAL_PROP: SendPropIdentifier = SendPropIdentifier::new("DT_LocalPlayerExclusive", "m_nTickBase");
|
|
||||||
const EYE_X_PROP: SendPropIdentifier = SendPropIdentifier::new("DT_TFLocalPlayerExclusive", "m_angEyeAngles[0]");
|
|
||||||
const EYE_Y_PROP: SendPropIdentifier = SendPropIdentifier::new("DT_TFLocalPlayerExclusive", "m_angEyeAngles[1]");
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn unlock(input: &[u8]) -> Vec<u8> {
|
pub fn unlock(input: &[u8]) -> Vec<u8> {
|
||||||
|
|
@ -51,9 +48,15 @@ pub fn unlock(input: &[u8]) -> Vec<u8> {
|
||||||
let mut handler = DemoHandler::default();
|
let mut handler = DemoHandler::default();
|
||||||
handler.handle_header(&header);
|
handler.handle_header(&header);
|
||||||
|
|
||||||
let mut local_player_entity_id = None;
|
|
||||||
|
|
||||||
let mut mutators = MutatorList::new();
|
let mut mutators = MutatorList::new();
|
||||||
|
mutators.push_message_mutator(|message: &mut Message| {
|
||||||
|
if let Message::ServerInfo(info) = message {
|
||||||
|
info.player_slot = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mutators.push_message_filter(|message: &Message| {
|
||||||
|
!matches!(message, Message::SetView(_))
|
||||||
|
});
|
||||||
mutators.push_message_filter(|message: &Message| {
|
mutators.push_message_filter(|message: &Message| {
|
||||||
if let Message::UserMessage(usr_message) = message {
|
if let Message::UserMessage(usr_message) = message {
|
||||||
UserMessageType::CloseCaption != usr_message.message_type()
|
UserMessageType::CloseCaption != usr_message.message_type()
|
||||||
|
|
@ -65,36 +68,6 @@ pub fn unlock(input: &[u8]) -> Vec<u8> {
|
||||||
while let Some(mut packet) = packets.next(&handler.state_handler).unwrap() {
|
while let Some(mut packet) = packets.next(&handler.state_handler).unwrap() {
|
||||||
match &mut packet {
|
match &mut packet {
|
||||||
Packet::Signon(message_packet) | Packet::Message(message_packet) => {
|
Packet::Signon(message_packet) | Packet::Message(message_packet) => {
|
||||||
for msg in &mut message_packet
|
|
||||||
.messages {
|
|
||||||
if let Message::PacketEntities(PacketEntitiesMessage { entities, .. }) = msg {
|
|
||||||
for entity in entities {
|
|
||||||
if local_player_entity_id.is_none() && entity.get_prop_by_identifier(&LOCAL_PROP).is_some() {
|
|
||||||
dbg!(entity.entity_index);
|
|
||||||
local_player_entity_id = Some(entity.entity_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if Some(entity.entity_index) == local_player_entity_id {
|
|
||||||
let index_x = handler.state_handler.index_for_prop(entity.server_class, EYE_X_PROP).expect("index_x not found");
|
|
||||||
let index_y = handler.state_handler.index_for_prop(entity.server_class, EYE_Y_PROP).expect("index_y not found");
|
|
||||||
|
|
||||||
entity.apply_update(&[
|
|
||||||
SendProp {
|
|
||||||
index: index_x,
|
|
||||||
identifier: EYE_X_PROP,
|
|
||||||
value: SendPropValue::Float(message_packet.meta.view_angles[0].local_angles.x),
|
|
||||||
},
|
|
||||||
SendProp {
|
|
||||||
index: index_y,
|
|
||||||
identifier: EYE_Y_PROP,
|
|
||||||
value: SendPropValue::Float(message_packet.meta.view_angles[0].local_angles.y),
|
|
||||||
},
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message_packet.meta.view_angles = Default::default();
|
message_packet.meta.view_angles = Default::default();
|
||||||
message_packet
|
message_packet
|
||||||
.messages
|
.messages
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,14 @@ struct PacketMessageMutator<T: MessageMutator> {
|
||||||
|
|
||||||
impl<T: MessageMutator> PacketMutator for PacketMessageMutator<T> {
|
impl<T: MessageMutator> PacketMutator for PacketMessageMutator<T> {
|
||||||
fn mutate_packet(&self, packet: &mut Packet) {
|
fn mutate_packet(&self, packet: &mut Packet) {
|
||||||
if let Packet::Message(msg_packet) = packet {
|
match packet {
|
||||||
|
Packet::Message(msg_packet) | Packet::Signon(msg_packet) => {
|
||||||
msg_packet
|
msg_packet
|
||||||
.messages
|
.messages
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.for_each(|msg| self.mutator.mutate_message(msg));
|
.for_each(|msg| self.mutator.mutate_message(msg));
|
||||||
|
},
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -54,13 +57,16 @@ struct PacketMessageFilter<T: MessageFilter> {
|
||||||
|
|
||||||
impl<T: MessageFilter> PacketMutator for PacketMessageFilter<T> {
|
impl<T: MessageFilter> PacketMutator for PacketMessageFilter<T> {
|
||||||
fn mutate_packet(&self, packet: &mut Packet) {
|
fn mutate_packet(&self, packet: &mut Packet) {
|
||||||
if let Packet::Message(msg_packet) = packet {
|
match packet {
|
||||||
|
Packet::Message(msg_packet) | Packet::Signon(msg_packet) => {
|
||||||
let messages = take(&mut msg_packet.messages);
|
let messages = take(&mut msg_packet.messages);
|
||||||
msg_packet.messages = messages
|
msg_packet.messages = messages
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|msg| self.filter.filter(msg))
|
.filter(|msg| self.filter.filter(msg))
|
||||||
.collect();
|
.collect();
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue