pub mod lobby; pub mod message; pub mod room; pub mod quest; pub mod ship; use libpso::character::character::Inventory; use libpso::packet::ship::{PlayerHeader, PlayerInfo}; use stats::leveltable::LEVEL_TABLE; use crate::ship::character::CharacterBytesBuilder; use crate::ship::ship::ClientState; use crate::ship::location::AreaClient; use crate::ship::items::inventory::InventoryState; pub fn player_header(tag: u32, client: &ClientState, area_client: &AreaClient) -> PlayerHeader { PlayerHeader { tag, guildcard: client.user.id.0, _unknown1: [0; 5], client_id: area_client.local_client.id() as u32, name: libpso::utf8_to_utf16_array!(client.character.name, 16), _unknown2: 2, } } pub async fn player_info(tag: u32, client: &ClientState, area_client: &AreaClient, inventory: &InventoryState) -> PlayerInfo { let (level, stats) = LEVEL_TABLE.get_stats_from_exp(client.character.char_class, client.character.exp); let character = CharacterBytesBuilder::default() .character(&client.character) .stats(&stats) .level(level - 1) .meseta(inventory.meseta) .build(); PlayerInfo { header: player_header(tag, client, area_client), inventory: Inventory { item_count: inventory.count() as u8, hp_mats_used: 0, // TODO: materials tp_mats_used: 0, // TODO: materials language: 0, // TODO: account language items: inventory.as_client_inventory_items(), }, character, } }