diff --git a/src/ipc/zone/actor_control.rs b/src/ipc/zone/actor_control.rs index 283d17a..d811de7 100644 --- a/src/ipc/zone/actor_control.rs +++ b/src/ipc/zone/actor_control.rs @@ -95,6 +95,11 @@ pub enum ActorControlCategory { #[bw(map = write_bool_as::)] unlocked: bool, }, + #[brw(magic = 0x122u16)] + Emote { + #[brw(pad_before = 2)] // padding + emote: u32, + }, } #[binrw] diff --git a/src/ipc/zone/client_trigger.rs b/src/ipc/zone/client_trigger.rs index 3fba1a0..d08a710 100644 --- a/src/ipc/zone/client_trigger.rs +++ b/src/ipc/zone/client_trigger.rs @@ -12,6 +12,11 @@ pub enum ClientTriggerCommand { Unk1 {}, #[brw(magic = 0xC9u16)] Unk2 {}, + #[brw(magic = 0x1F4u16)] + Emote { + #[brw(pad_before = 2)] // padding + emote: u32, + }, #[brw(magic = 0x1F9u16)] ChangePose { #[brw(pad_before = 2)] // padding diff --git a/src/world/server.rs b/src/world/server.rs index 800e438..275e15d 100644 --- a/src/world/server.rs +++ b/src/world/server.rs @@ -376,6 +376,18 @@ pub async fn server_main_loop(mut recv: Receiver) -> Result<(), std::i to_remove.push(id); } } + ClientTriggerCommand::Emote { emote } => { + let msg = FromServer::ActorControl( + from_actor_id, + ActorControl { + category: ActorControlCategory::Emote { emote: *emote }, + }, + ); + + if handle.send(msg).is_err() { + to_remove.push(id); + } + } _ => tracing::warn!("Server doesn't know what to do with {:#?}", trigger), } }