1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-05-06 04:37:46 +00:00

Overhaul segment types, their names and their order

This commit is contained in:
Joshua Goins 2025-05-02 00:03:36 -04:00
parent b426de677f
commit f3f25eb219
8 changed files with 197 additions and 122 deletions

View file

@ -10,7 +10,7 @@ use kawari::lobby::ipc::{ClientLobbyIpcData, ServerLobbyIpcSegment};
use kawari::lobby::send_custom_world_packet;
use kawari::oodle::OodleNetwork;
use kawari::packet::ConnectionType;
use kawari::packet::{PacketState, SegmentType, send_keep_alive};
use kawari::packet::{PacketState, SegmentData, send_keep_alive};
use tokio::io::AsyncReadExt;
use tokio::net::TcpListener;
@ -60,11 +60,11 @@ async fn main() {
if n != 0 {
let (segments, _) = connection.parse_packet(&buf[..n]).await;
for segment in &segments {
match &segment.segment_type {
SegmentType::InitializeEncryption { phrase, key } => {
match &segment.data {
SegmentData::SecuritySetup { phrase, key } => {
connection.initialize_encryption(phrase, key).await
}
SegmentType::Ipc { data } => match &data.data {
SegmentData::Ipc { data } => match &data.data {
ClientLobbyIpcData::LoginEx {
sequence,
session_id,
@ -150,7 +150,7 @@ async fn main() {
.await;
}
},
SegmentType::KeepAlive { id, timestamp } => {
SegmentData::KeepAliveRequest { id, timestamp } => {
send_keep_alive::<ServerLobbyIpcSegment>(
&mut connection.socket,
&mut connection.state,

View file

@ -11,8 +11,8 @@ use kawari::config::get_config;
use kawari::oodle::OodleNetwork;
use kawari::opcodes::ServerZoneIpcType;
use kawari::packet::{
CompressionType, ConnectionType, PacketSegment, PacketState, SegmentType, send_keep_alive,
send_packet,
CompressionType, ConnectionType, PacketSegment, PacketState, SegmentData, SegmentType,
send_keep_alive, send_packet,
};
use kawari::world::ipc::{
ActionEffect, ActionResult, ClientZoneIpcData, EffectKind, GameMasterCommandType,
@ -272,10 +272,10 @@ async fn client_loop(
if n > 0 {
let (segments, connection_type) = connection.parse_packet(&buf[..n]).await;
for segment in &segments {
match &segment.segment_type {
SegmentType::InitializeSession { actor_id } => {
match &segment.data {
SegmentData::Setup { ticket } => {
// for some reason they send a string representation
let actor_id = actor_id.parse::<u32>().unwrap();
let actor_id = ticket.parse::<u32>().unwrap();
// initialize player data if it doesn't exist'
if connection.player_data.actor_id == 0 {
@ -293,7 +293,7 @@ async fn client_loop(
connection.handle.send(ToServer::NewClient(client_handle.clone())).await;
}
}
SegmentType::Ipc { data } => {
SegmentData::Ipc { data } => {
match &data.data {
ClientZoneIpcData::InitRequest { .. } => {
tracing::info!(
@ -317,7 +317,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -369,7 +370,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -418,7 +420,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -438,7 +441,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -508,7 +512,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -528,7 +533,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -564,7 +570,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -748,7 +755,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
@ -799,7 +807,7 @@ async fn client_loop(
}
}
}
SegmentType::KeepAlive { id, timestamp } => {
SegmentData::KeepAliveRequest { id, timestamp } => {
send_keep_alive::<ServerZoneIpcSegment>(
&mut connection.socket,
&mut connection.state,
@ -809,10 +817,10 @@ async fn client_loop(
)
.await
}
SegmentType::KeepAliveResponse { .. } => {
SegmentData::KeepAliveResponse { .. } => {
tracing::info!("Got keep alive response from client... cool...");
}
SegmentType::CustomIpc { data } => {
SegmentData::KawariIpc { data } => {
match &data.data {
CustomIpcData::RequestCreateCharacter {
service_account_id,
@ -860,7 +868,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::CustomIpc {
segment_type: SegmentType::KawariIpc,
data: SegmentData::KawariIpc {
data: CustomIpcSegment {
unk1: 0,
unk2: 0,
@ -888,7 +897,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::CustomIpc {
segment_type: SegmentType::KawariIpc,
data: SegmentData::KawariIpc {
data: CustomIpcSegment {
unk1: 0,
unk2: 0,
@ -911,7 +921,8 @@ async fn client_loop(
.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::CustomIpc {
segment_type: SegmentType::KawariIpc,
data: SegmentData::KawariIpc {
data: CustomIpcSegment {
unk1: 0,
unk2: 0,
@ -958,7 +969,8 @@ async fn client_loop(
&[PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::CustomIpc {
segment_type: SegmentType::KawariIpc,
data: SegmentData::KawariIpc {
data: CustomIpcSegment {
unk1: 0,
unk2: 0,
@ -988,7 +1000,8 @@ async fn client_loop(
&[PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::CustomIpc {
segment_type: SegmentType::KawariIpc,
data: SegmentData::KawariIpc {
data: CustomIpcSegment {
unk1: 0,
unk2: 0,

View file

@ -14,7 +14,7 @@ use crate::{
oodle::OodleNetwork,
opcodes::ServerLobbyIpcType,
packet::{
CompressionType, ConnectionType, PacketSegment, PacketState, SegmentType,
CompressionType, ConnectionType, PacketSegment, PacketState, SegmentData, SegmentType,
generate_encryption_key, parse_packet, send_packet,
},
};
@ -76,7 +76,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::InitializationEncryptionResponse { data },
segment_type: SegmentType::SecurityInitialize,
data: SegmentData::SecurityInitialize { data },
})
.await;
}
@ -103,7 +104,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -146,7 +148,8 @@ impl LobbyConnection {
let response_packet = PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
};
packets.push(response_packet);
}
@ -167,7 +170,8 @@ impl LobbyConnection {
let response_packet = PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
};
packets.push(response_packet);
}
@ -269,7 +273,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -301,7 +306,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -328,7 +334,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -388,7 +395,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0x0,
target_actor: 0x0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
} else {
@ -410,7 +418,8 @@ impl LobbyConnection {
let response_packet = PacketSegment {
source_actor: 0x0,
target_actor: 0x0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
};
self.send_segment(response_packet).await;
}
@ -482,7 +491,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0x0,
target_actor: 0x0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -534,7 +544,8 @@ impl LobbyConnection {
self.send_segment(PacketSegment {
source_actor: 0x0,
target_actor: 0x0,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -569,7 +580,8 @@ pub async fn send_custom_world_packet(segment: CustomIpcSegment) -> Option<Custo
let segment: PacketSegment<CustomIpcSegment> = PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::CustomIpc { data: segment },
segment_type: SegmentType::KawariIpc,
data: SegmentData::KawariIpc { data: segment },
};
send_packet(
@ -587,8 +599,8 @@ pub async fn send_custom_world_packet(segment: CustomIpcSegment) -> Option<Custo
if n != 0 {
let (segments, _) = parse_packet::<CustomIpcSegment>(&buf[..n], &mut packet_state).await;
return match &segments[0].segment_type {
SegmentType::CustomIpc { data } => Some(data.clone()),
return match &segments[0].data {
SegmentData::KawariIpc { data } => Some(data.clone()),
_ => None,
};
}

View file

@ -1,8 +1,8 @@
mod parsing;
use parsing::PacketHeader;
pub use parsing::{
ConnectionType, PacketSegment, PacketState, SegmentType, parse_packet, send_keep_alive,
send_packet,
ConnectionType, PacketSegment, PacketState, SegmentData, SegmentType, parse_packet,
send_keep_alive, send_packet,
};
mod compression;

View file

@ -25,21 +25,44 @@ pub enum ConnectionType {
}
#[binrw]
#[brw(import(size: u32, encryption_key: Option<&[u8]>))]
#[brw(repr = u16)]
#[derive(Debug, PartialEq, Copy, Clone)]
pub enum SegmentType {
Setup = 0x1,
Initialize = 0x2,
// Also known as "UPLAYER"
Ipc = 0x3,
KeepAliveRequest = 0x7,
KeepAliveResponse = 0x8,
// Also known as "SECSETUP"
SecuritySetup = 0x9,
// Also known as "SECINIT"
SecurityInitialize = 0xA,
// This isn't in retail!
KawariIpc = 0xAAAA,
}
#[binrw]
#[brw(import(kind: &SegmentType, size: u32, encryption_key: Option<&[u8]>))]
#[derive(Debug, Clone)]
pub enum SegmentType<T: ReadWriteIpcSegment> {
// Client->Server Packets
#[brw(magic = 0x1u32)]
InitializeSession {
pub enum SegmentData<T: ReadWriteIpcSegment> {
#[br(pre_assert(*kind == SegmentType::Setup))]
Setup {
#[brw(pad_before = 4)] // empty
#[brw(pad_size_to = 36)]
#[br(count = 36)]
#[br(map = read_string)]
#[bw(map = write_string)]
actor_id: String, // square enix in their infinite wisdom has this as a STRING REPRESENTATION of an integer. what
ticket: String, // square enix in their infinite wisdom has this as a STRING REPRESENTATION of an integer. what
},
#[brw(magic = 0x9u32)]
InitializeEncryption {
#[br(pre_assert(*kind == SegmentType::Initialize))]
Initialize {
player_id: u32,
#[brw(pad_after = 32)]
timestamp: u32,
},
#[br(pre_assert(*kind == SegmentType::SecuritySetup))]
SecuritySetup {
#[brw(pad_before = 36)] // empty
#[brw(pad_size_to = 32)]
#[br(count = 32)]
@ -51,34 +74,25 @@ pub enum SegmentType<T: ReadWriteIpcSegment> {
#[brw(pad_after = 512)] // empty
key: [u8; 4],
},
#[brw(magic = 0x3u32)]
#[br(pre_assert(*kind == SegmentType::Ipc))]
Ipc {
#[br(parse_with = decrypt, args(size, encryption_key))]
#[bw(write_with = encrypt, args(size, encryption_key))]
data: T,
},
#[brw(magic = 0x7u32)]
KeepAlive { id: u32, timestamp: u32 },
// Server->Client Packets
#[brw(magic = 0xAu32)]
InitializationEncryptionResponse {
#[br(pre_assert(*kind == SegmentType::KeepAliveRequest))]
KeepAliveRequest { id: u32, timestamp: u32 },
#[br(pre_assert(*kind == SegmentType::SecurityInitialize))]
SecurityInitialize {
#[br(count = 0x280)]
#[brw(pad_size_to = 640)]
data: Vec<u8>,
},
#[brw(magic = 0x8u32)]
#[br(pre_assert(*kind == SegmentType::KeepAliveResponse))]
KeepAliveResponse { id: u32, timestamp: u32 },
#[brw(magic = 0x2u32)]
ZoneInitialize {
player_id: u32,
#[brw(pad_after = 32)]
timestamp: u32,
},
// Custom Packets
#[brw(magic = 0xAAAAu32)]
CustomIpc { data: CustomIpcSegment },
#[br(pre_assert(*kind == SegmentType::KawariIpc))]
KawariIpc { data: CustomIpcSegment },
}
#[binrw]
@ -104,23 +118,25 @@ pub struct PacketSegment<T: ReadWriteIpcSegment> {
pub size: u32,
pub source_actor: u32,
pub target_actor: u32,
#[brw(args(size, encryption_key))]
pub segment_type: SegmentType<T>,
#[brw(pad_after = 2)] // padding
pub segment_type: SegmentType,
#[brw(args(&segment_type, size, encryption_key))]
pub data: SegmentData<T>,
}
impl<T: ReadWriteIpcSegment> PacketSegment<T> {
pub fn calc_size(&self) -> u32 {
let header = std::mem::size_of::<u32>() * 4;
header as u32
+ match &self.segment_type {
SegmentType::InitializeEncryption { .. } => 616,
SegmentType::InitializationEncryptionResponse { .. } => 640,
SegmentType::Ipc { data } => data.calc_size(),
SegmentType::KeepAlive { .. } => 0x8,
SegmentType::KeepAliveResponse { .. } => 0x8,
SegmentType::ZoneInitialize { .. } => 40,
SegmentType::InitializeSession { .. } => 40,
SegmentType::CustomIpc { data } => data.calc_size(),
+ match &self.data {
SegmentData::SecuritySetup { .. } => 616,
SegmentData::SecurityInitialize { .. } => 640,
SegmentData::Ipc { data } => data.calc_size(),
SegmentData::KeepAliveRequest { .. } => 0x8,
SegmentData::KeepAliveResponse { .. } => 0x8,
SegmentData::Initialize { .. } => 40,
SegmentData::Setup { .. } => 40,
SegmentData::KawariIpc { data } => data.calc_size(),
}
}
}
@ -217,7 +233,8 @@ pub async fn send_keep_alive<T: ReadWriteIpcSegment>(
let response_packet: PacketSegment<T> = PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::KeepAliveResponse { id, timestamp },
segment_type: SegmentType::KeepAliveResponse,
data: SegmentData::KeepAliveResponse { id, timestamp },
};
send_packet(
socket,
@ -261,16 +278,16 @@ mod tests {
}
let packet_types = [
SegmentType::InitializeEncryption {
SegmentData::SecuritySetup {
phrase: String::new(),
key: [0; 4],
},
SegmentType::InitializationEncryptionResponse { data: Vec::new() },
SegmentType::KeepAlive {
SegmentData::SecurityInitialize { data: Vec::new() },
SegmentData::KeepAliveRequest {
id: 0,
timestamp: 0,
},
SegmentType::KeepAliveResponse {
SegmentData::KeepAliveResponse {
id: 0,
timestamp: 0,
},
@ -282,7 +299,8 @@ mod tests {
let packet_segment: PacketSegment<ClientLobbyIpcSegment> = PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: packet.clone(),
segment_type: SegmentType::Setup,
data: packet.clone(),
};
packet_segment.write_le(&mut cursor).unwrap();

View file

@ -2,7 +2,7 @@ use crate::{
common::{CustomizeData, ObjectId, ObjectTypeId, Position, timestamp_secs},
config::get_config,
opcodes::ServerZoneIpcType,
packet::{PacketSegment, SegmentType},
packet::{PacketSegment, SegmentData, SegmentType},
world::{
Actor, Event,
ipc::{
@ -122,7 +122,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: 0x106ad804,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -147,7 +148,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: 0x106ad804,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -198,7 +200,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: 0x106ad804,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -238,7 +241,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: 0x106ad804,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -277,7 +281,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -301,7 +306,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: connection.player_data.actor_id,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -344,7 +350,8 @@ impl ChatHandler {
.send_segment(PacketSegment {
source_actor: 0x106ad804,
target_actor: connection.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}

View file

@ -14,8 +14,8 @@ use crate::{
config::get_config,
opcodes::{ServerChatIpcType, ServerZoneIpcType},
packet::{
CompressionType, ConnectionType, PacketSegment, PacketState, SegmentType, parse_packet,
send_packet,
CompressionType, ConnectionType, PacketSegment, PacketState, SegmentData, SegmentType,
parse_packet, send_packet,
},
world::chat::{ServerChatIpcData, ServerChatIpcSegment},
};
@ -199,7 +199,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::KeepAlive {
segment_type: SegmentType::KeepAliveRequest,
data: SegmentData::KeepAliveRequest {
id: 0xE0037603u32,
timestamp: timestamp_secs(),
},
@ -210,7 +211,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::ZoneInitialize {
segment_type: SegmentType::Initialize,
data: SegmentData::Initialize {
player_id: self.player_data.actor_id,
timestamp: timestamp_secs(),
},
@ -225,7 +227,8 @@ impl ZoneConnection {
self.send_chat_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::KeepAlive {
segment_type: SegmentType::KeepAliveRequest,
data: SegmentData::KeepAliveRequest {
id: 0xE0037603u32,
timestamp: timestamp_secs(),
},
@ -237,7 +240,8 @@ impl ZoneConnection {
self.send_chat_segment(PacketSegment {
source_actor: 0,
target_actor: 0,
segment_type: SegmentType::ZoneInitialize {
segment_type: SegmentType::Initialize,
data: SegmentData::Initialize {
player_id: self.player_data.actor_id,
timestamp: timestamp_secs(),
},
@ -262,7 +266,8 @@ impl ZoneConnection {
self.send_chat_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -287,7 +292,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -311,7 +317,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: actor_id,
target_actor: actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -338,7 +345,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: actor.id.0,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
@ -364,7 +372,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: actor.id.0,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
@ -394,7 +403,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -458,7 +468,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -478,7 +489,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -520,7 +532,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
};
@ -546,7 +559,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -577,7 +591,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
};
@ -604,7 +619,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -633,7 +649,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -653,7 +670,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -696,7 +714,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
@ -715,7 +734,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: actor_id.0,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -739,7 +759,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}
@ -802,7 +823,8 @@ impl ZoneConnection {
self.send_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
})
.await;
}

View file

@ -3,7 +3,7 @@ use mlua::{FromLua, Lua, LuaSerdeExt, UserData, UserDataMethods, Value};
use crate::{
common::{ObjectId, ObjectTypeId, Position, timestamp_secs},
opcodes::ServerZoneIpcType,
packet::{PacketSegment, SegmentType},
packet::{PacketSegment, SegmentData, SegmentType},
};
use super::{
@ -45,7 +45,8 @@ impl LuaPlayer {
self.queue_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
});
}
@ -76,7 +77,8 @@ impl LuaPlayer {
self.queue_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
});
}
@ -94,7 +96,8 @@ impl LuaPlayer {
self.queue_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
segment_type: SegmentType::Ipc,
data: SegmentData::Ipc { data: ipc },
});
}