mirror of
https://github.com/redstrate/Kawari.git
synced 2025-04-22 23:27: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::connection::LobbyConnection;
|
||||
use kawari::lobby::ipc::{
|
||||
CharacterDetails, ClientLobbyIpcData, LobbyCharacterAction, ServerLobbyIpcData,
|
||||
CharacterDetails, ClientLobbyIpcData, LobbyCharacterActionKind, ServerLobbyIpcData,
|
||||
ServerLobbyIpcSegment, ServerLobbyIpcType,
|
||||
};
|
||||
use kawari::oodle::FFXIVOodle;
|
||||
|
@ -70,17 +70,12 @@ async fn main() {
|
|||
|
||||
connection.send_lobby_info(*sequence).await;
|
||||
}
|
||||
ClientLobbyIpcData::LobbyCharacterAction {
|
||||
sequence,
|
||||
action,
|
||||
name,
|
||||
json,
|
||||
..
|
||||
} => {
|
||||
match action {
|
||||
LobbyCharacterAction::ReserveName => {
|
||||
ClientLobbyIpcData::LobbyCharacterAction(character_action) => {
|
||||
match &character_action.action {
|
||||
LobbyCharacterActionKind::ReserveName => {
|
||||
tracing::info!(
|
||||
"Player is requesting {name} as a new character name!"
|
||||
"Player is requesting {} as a new character name!",
|
||||
character_action.name
|
||||
);
|
||||
|
||||
// reject
|
||||
|
@ -121,11 +116,13 @@ async fn main() {
|
|||
server_id: 0,
|
||||
timestamp: 0,
|
||||
data: ServerLobbyIpcData::CharacterCreated {
|
||||
sequence: *sequence + 1,
|
||||
sequence: character_action.sequence + 1,
|
||||
unk: 0x00010101,
|
||||
details: CharacterDetails {
|
||||
content_id: CONTENT_ID,
|
||||
character_name: name.clone(),
|
||||
character_name: character_action
|
||||
.name
|
||||
.clone(),
|
||||
origin_server_name: "KAWARI"
|
||||
.to_string(),
|
||||
current_server_name: "KAWARI"
|
||||
|
@ -146,10 +143,11 @@ async fn main() {
|
|||
.await;
|
||||
}
|
||||
}
|
||||
LobbyCharacterAction::Create => {
|
||||
LobbyCharacterActionKind::Create => {
|
||||
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);
|
||||
|
||||
// a slightly different character created packet now
|
||||
|
@ -161,12 +159,14 @@ async fn main() {
|
|||
server_id: 0,
|
||||
timestamp: 0,
|
||||
data: ServerLobbyIpcData::CharacterCreated {
|
||||
sequence: *sequence + 1,
|
||||
sequence: character_action.sequence + 1,
|
||||
unk: 0x00020101,
|
||||
details: CharacterDetails {
|
||||
id: 0x07369f3a, // notice that we give them an id now
|
||||
content_id: CONTENT_ID,
|
||||
character_name: name.clone(),
|
||||
character_name: character_action
|
||||
.name
|
||||
.clone(),
|
||||
origin_server_name: "KAWARI"
|
||||
.to_string(),
|
||||
current_server_name: "KAWARI"
|
||||
|
@ -187,16 +187,16 @@ async fn main() {
|
|||
.await;
|
||||
}
|
||||
}
|
||||
LobbyCharacterAction::Rename => todo!(),
|
||||
LobbyCharacterAction::Delete => todo!(),
|
||||
LobbyCharacterAction::Move => todo!(),
|
||||
LobbyCharacterAction::RemakeRetainer => todo!(),
|
||||
LobbyCharacterAction::RemakeChara => todo!(),
|
||||
LobbyCharacterAction::SettingsUploadBegin => todo!(),
|
||||
LobbyCharacterAction::SettingsUpload => todo!(),
|
||||
LobbyCharacterAction::WorldVisit => todo!(),
|
||||
LobbyCharacterAction::DataCenterToken => todo!(),
|
||||
LobbyCharacterAction::Request => todo!(),
|
||||
LobbyCharacterActionKind::Rename => todo!(),
|
||||
LobbyCharacterActionKind::Delete => todo!(),
|
||||
LobbyCharacterActionKind::Move => todo!(),
|
||||
LobbyCharacterActionKind::RemakeRetainer => todo!(),
|
||||
LobbyCharacterActionKind::RemakeChara => todo!(),
|
||||
LobbyCharacterActionKind::SettingsUploadBegin => todo!(),
|
||||
LobbyCharacterActionKind::SettingsUpload => todo!(),
|
||||
LobbyCharacterActionKind::WorldVisit => todo!(),
|
||||
LobbyCharacterActionKind::DataCenterToken => todo!(),
|
||||
LobbyCharacterActionKind::Request => todo!(),
|
||||
}
|
||||
}
|
||||
ClientLobbyIpcData::RequestEnterWorld {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
use binrw::binrw;
|
||||
|
||||
use crate::CHAR_NAME_MAX_LENGTH;
|
||||
|
||||
use super::{read_string, write_string};
|
||||
|
||||
#[binrw]
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
pub enum LobbyCharacterAction {
|
||||
pub enum LobbyCharacterActionKind {
|
||||
#[brw(magic = 0x1u8)]
|
||||
ReserveName,
|
||||
#[brw(magic = 0x2u8)]
|
||||
|
@ -28,3 +32,24 @@ pub enum LobbyCharacterAction {
|
|||
#[brw(magic = 0x15u8)]
|
||||
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;
|
||||
|
||||
mod character_action;
|
||||
pub use character_action::LobbyCharacterAction;
|
||||
pub use character_action::{LobbyCharacterAction, LobbyCharacterActionKind};
|
||||
|
||||
mod character_list;
|
||||
pub use character_list::{CharacterDetails, LobbyCharacterList};
|
||||
|
@ -15,7 +15,6 @@ mod service_account_list;
|
|||
pub use service_account_list::{LobbyServiceAccountList, ServiceAccount};
|
||||
|
||||
use crate::{
|
||||
CHAR_NAME_MAX_LENGTH,
|
||||
common::{read_string, write_string},
|
||||
packet::{IpcSegment, IpcSegmentTrait},
|
||||
};
|
||||
|
@ -146,24 +145,7 @@ pub enum ClientLobbyIpcData {
|
|||
// TODO: what is in here?
|
||||
},
|
||||
#[br(pre_assert(*magic == ClientLobbyIpcType::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,
|
||||
},
|
||||
LobbyCharacterAction(LobbyCharacterAction),
|
||||
#[br(pre_assert(*magic == ClientLobbyIpcType::RequestEnterWorld))]
|
||||
RequestEnterWorld {
|
||||
#[brw(pad_before = 16)]
|
||||
|
|
Loading…
Add table
Reference in a new issue