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 crate::common::leveltable::CharacterLevelTable; use crate::ship::character::CharacterBytesBuilder; use crate::ship::ship::ClientState; use crate::ship::location::AreaClient; use crate::ship::items::ItemManager; 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 fn player_info(tag: u32, client: &ClientState, area_client: &AreaClient, item_manager: &ItemManager, level_table: &CharacterLevelTable) -> PlayerInfo { let (level, stats) = level_table.get_stats_from_exp(client.character.char_class, client.character.exp); let inventory = item_manager.get_character_inventory(&client.character).unwrap(); let character = CharacterBytesBuilder::default() .character(&client.character) .stats(&stats) .level(level - 1) .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, } }