mirror of
https://github.com/redstrate/Kawari.git
synced 2025-04-23 07:37:46 +00:00
Move LobbyCharacterAction into it's own struct
This commit is contained in:
parent
ff9bcb255d
commit
dc8d8638f6
3 changed files with 55 additions and 48 deletions
|
@ -2,7 +2,7 @@ use kawari::CONTENT_ID;
|
||||||
use kawari::lobby::chara_make::CharaMake;
|
use kawari::lobby::chara_make::CharaMake;
|
||||||
use kawari::lobby::connection::LobbyConnection;
|
use kawari::lobby::connection::LobbyConnection;
|
||||||
use kawari::lobby::ipc::{
|
use kawari::lobby::ipc::{
|
||||||
CharacterDetails, ClientLobbyIpcData, LobbyCharacterAction, ServerLobbyIpcData,
|
CharacterDetails, ClientLobbyIpcData, LobbyCharacterActionKind, ServerLobbyIpcData,
|
||||||
ServerLobbyIpcSegment, ServerLobbyIpcType,
|
ServerLobbyIpcSegment, ServerLobbyIpcType,
|
||||||
};
|
};
|
||||||
use kawari::oodle::FFXIVOodle;
|
use kawari::oodle::FFXIVOodle;
|
||||||
|
@ -70,17 +70,12 @@ async fn main() {
|
||||||
|
|
||||||
connection.send_lobby_info(*sequence).await;
|
connection.send_lobby_info(*sequence).await;
|
||||||
}
|
}
|
||||||
ClientLobbyIpcData::LobbyCharacterAction {
|
ClientLobbyIpcData::LobbyCharacterAction(character_action) => {
|
||||||
sequence,
|
match &character_action.action {
|
||||||
action,
|
LobbyCharacterActionKind::ReserveName => {
|
||||||
name,
|
|
||||||
json,
|
|
||||||
..
|
|
||||||
} => {
|
|
||||||
match action {
|
|
||||||
LobbyCharacterAction::ReserveName => {
|
|
||||||
tracing::info!(
|
tracing::info!(
|
||||||
"Player is requesting {name} as a new character name!"
|
"Player is requesting {} as a new character name!",
|
||||||
|
character_action.name
|
||||||
);
|
);
|
||||||
|
|
||||||
// reject
|
// reject
|
||||||
|
@ -121,11 +116,13 @@ async fn main() {
|
||||||
server_id: 0,
|
server_id: 0,
|
||||||
timestamp: 0,
|
timestamp: 0,
|
||||||
data: ServerLobbyIpcData::CharacterCreated {
|
data: ServerLobbyIpcData::CharacterCreated {
|
||||||
sequence: *sequence + 1,
|
sequence: character_action.sequence + 1,
|
||||||
unk: 0x00010101,
|
unk: 0x00010101,
|
||||||
details: CharacterDetails {
|
details: CharacterDetails {
|
||||||
content_id: CONTENT_ID,
|
content_id: CONTENT_ID,
|
||||||
character_name: name.clone(),
|
character_name: character_action
|
||||||
|
.name
|
||||||
|
.clone(),
|
||||||
origin_server_name: "KAWARI"
|
origin_server_name: "KAWARI"
|
||||||
.to_string(),
|
.to_string(),
|
||||||
current_server_name: "KAWARI"
|
current_server_name: "KAWARI"
|
||||||
|
@ -146,10 +143,11 @@ async fn main() {
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LobbyCharacterAction::Create => {
|
LobbyCharacterActionKind::Create => {
|
||||||
tracing::info!("Player is creating a new character!");
|
tracing::info!("Player is creating a new character!");
|
||||||
|
|
||||||
let chara_make = CharaMake::from_json(json);
|
let chara_make =
|
||||||
|
CharaMake::from_json(&character_action.json);
|
||||||
println!("charamake: {:#?}", chara_make);
|
println!("charamake: {:#?}", chara_make);
|
||||||
|
|
||||||
// a slightly different character created packet now
|
// a slightly different character created packet now
|
||||||
|
@ -161,12 +159,14 @@ async fn main() {
|
||||||
server_id: 0,
|
server_id: 0,
|
||||||
timestamp: 0,
|
timestamp: 0,
|
||||||
data: ServerLobbyIpcData::CharacterCreated {
|
data: ServerLobbyIpcData::CharacterCreated {
|
||||||
sequence: *sequence + 1,
|
sequence: character_action.sequence + 1,
|
||||||
unk: 0x00020101,
|
unk: 0x00020101,
|
||||||
details: CharacterDetails {
|
details: CharacterDetails {
|
||||||
id: 0x07369f3a, // notice that we give them an id now
|
id: 0x07369f3a, // notice that we give them an id now
|
||||||
content_id: CONTENT_ID,
|
content_id: CONTENT_ID,
|
||||||
character_name: name.clone(),
|
character_name: character_action
|
||||||
|
.name
|
||||||
|
.clone(),
|
||||||
origin_server_name: "KAWARI"
|
origin_server_name: "KAWARI"
|
||||||
.to_string(),
|
.to_string(),
|
||||||
current_server_name: "KAWARI"
|
current_server_name: "KAWARI"
|
||||||
|
@ -187,16 +187,16 @@ async fn main() {
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LobbyCharacterAction::Rename => todo!(),
|
LobbyCharacterActionKind::Rename => todo!(),
|
||||||
LobbyCharacterAction::Delete => todo!(),
|
LobbyCharacterActionKind::Delete => todo!(),
|
||||||
LobbyCharacterAction::Move => todo!(),
|
LobbyCharacterActionKind::Move => todo!(),
|
||||||
LobbyCharacterAction::RemakeRetainer => todo!(),
|
LobbyCharacterActionKind::RemakeRetainer => todo!(),
|
||||||
LobbyCharacterAction::RemakeChara => todo!(),
|
LobbyCharacterActionKind::RemakeChara => todo!(),
|
||||||
LobbyCharacterAction::SettingsUploadBegin => todo!(),
|
LobbyCharacterActionKind::SettingsUploadBegin => todo!(),
|
||||||
LobbyCharacterAction::SettingsUpload => todo!(),
|
LobbyCharacterActionKind::SettingsUpload => todo!(),
|
||||||
LobbyCharacterAction::WorldVisit => todo!(),
|
LobbyCharacterActionKind::WorldVisit => todo!(),
|
||||||
LobbyCharacterAction::DataCenterToken => todo!(),
|
LobbyCharacterActionKind::DataCenterToken => todo!(),
|
||||||
LobbyCharacterAction::Request => todo!(),
|
LobbyCharacterActionKind::Request => todo!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClientLobbyIpcData::RequestEnterWorld {
|
ClientLobbyIpcData::RequestEnterWorld {
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
use binrw::binrw;
|
use binrw::binrw;
|
||||||
|
|
||||||
|
use crate::CHAR_NAME_MAX_LENGTH;
|
||||||
|
|
||||||
|
use super::{read_string, write_string};
|
||||||
|
|
||||||
#[binrw]
|
#[binrw]
|
||||||
#[derive(Clone, PartialEq, Debug)]
|
#[derive(Clone, PartialEq, Debug)]
|
||||||
pub enum LobbyCharacterAction {
|
pub enum LobbyCharacterActionKind {
|
||||||
#[brw(magic = 0x1u8)]
|
#[brw(magic = 0x1u8)]
|
||||||
ReserveName,
|
ReserveName,
|
||||||
#[brw(magic = 0x2u8)]
|
#[brw(magic = 0x2u8)]
|
||||||
|
@ -28,3 +32,24 @@ pub enum LobbyCharacterAction {
|
||||||
#[brw(magic = 0x15u8)]
|
#[brw(magic = 0x15u8)]
|
||||||
Request,
|
Request,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[binrw]
|
||||||
|
#[derive(Clone, PartialEq, Debug)]
|
||||||
|
pub struct LobbyCharacterAction {
|
||||||
|
pub sequence: u64,
|
||||||
|
pub character_id: u64,
|
||||||
|
#[br(pad_before = 8)]
|
||||||
|
pub character_index: u8,
|
||||||
|
pub action: LobbyCharacterActionKind,
|
||||||
|
pub world_id: u16,
|
||||||
|
#[bw(pad_size_to = CHAR_NAME_MAX_LENGTH)]
|
||||||
|
#[br(count = CHAR_NAME_MAX_LENGTH)]
|
||||||
|
#[br(map = read_string)]
|
||||||
|
#[bw(map = write_string)]
|
||||||
|
pub name: String,
|
||||||
|
#[bw(pad_size_to = 436)]
|
||||||
|
#[br(count = 436)]
|
||||||
|
#[br(map = read_string)]
|
||||||
|
#[bw(map = write_string)]
|
||||||
|
pub json: String,
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use binrw::binrw;
|
use binrw::binrw;
|
||||||
|
|
||||||
mod character_action;
|
mod character_action;
|
||||||
pub use character_action::LobbyCharacterAction;
|
pub use character_action::{LobbyCharacterAction, LobbyCharacterActionKind};
|
||||||
|
|
||||||
mod character_list;
|
mod character_list;
|
||||||
pub use character_list::{CharacterDetails, LobbyCharacterList};
|
pub use character_list::{CharacterDetails, LobbyCharacterList};
|
||||||
|
@ -15,7 +15,6 @@ mod service_account_list;
|
||||||
pub use service_account_list::{LobbyServiceAccountList, ServiceAccount};
|
pub use service_account_list::{LobbyServiceAccountList, ServiceAccount};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
CHAR_NAME_MAX_LENGTH,
|
|
||||||
common::{read_string, write_string},
|
common::{read_string, write_string},
|
||||||
packet::{IpcSegment, IpcSegmentTrait},
|
packet::{IpcSegment, IpcSegmentTrait},
|
||||||
};
|
};
|
||||||
|
@ -146,24 +145,7 @@ pub enum ClientLobbyIpcData {
|
||||||
// TODO: what is in here?
|
// TODO: what is in here?
|
||||||
},
|
},
|
||||||
#[br(pre_assert(*magic == ClientLobbyIpcType::LobbyCharacterAction))]
|
#[br(pre_assert(*magic == ClientLobbyIpcType::LobbyCharacterAction))]
|
||||||
LobbyCharacterAction {
|
LobbyCharacterAction(LobbyCharacterAction),
|
||||||
sequence: u64,
|
|
||||||
character_id: u64,
|
|
||||||
#[br(pad_before = 8)]
|
|
||||||
character_index: u8,
|
|
||||||
action: LobbyCharacterAction,
|
|
||||||
world_id: u16,
|
|
||||||
#[bw(pad_size_to = CHAR_NAME_MAX_LENGTH)]
|
|
||||||
#[br(count = CHAR_NAME_MAX_LENGTH)]
|
|
||||||
#[br(map = read_string)]
|
|
||||||
#[bw(map = write_string)]
|
|
||||||
name: String,
|
|
||||||
#[bw(pad_size_to = 436)]
|
|
||||||
#[br(count = 436)]
|
|
||||||
#[br(map = read_string)]
|
|
||||||
#[bw(map = write_string)]
|
|
||||||
json: String,
|
|
||||||
},
|
|
||||||
#[br(pre_assert(*magic == ClientLobbyIpcType::RequestEnterWorld))]
|
#[br(pre_assert(*magic == ClientLobbyIpcType::RequestEnterWorld))]
|
||||||
RequestEnterWorld {
|
RequestEnterWorld {
|
||||||
#[brw(pad_before = 16)]
|
#[brw(pad_before = 16)]
|
||||||
|
|
Loading…
Add table
Reference in a new issue