You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.5 KiB

4 years ago
4 years ago
3 years ago
  1. pub mod lobby;
  2. pub mod message;
  3. pub mod room;
  4. pub mod quest;
  5. pub mod ship;
  6. pub mod character;
  7. use libpso::character::character::Inventory;
  8. use libpso::packet::ship::{PlayerHeader, PlayerInfo};
  9. use stats::leveltable::LEVEL_TABLE;
  10. use crate::character::CharacterBytesBuilder;
  11. use client::ClientState;
  12. use location::AreaClient;
  13. use items::inventory::InventoryState;
  14. pub fn player_header(tag: u32, client: &ClientState, area_client: &AreaClient) -> PlayerHeader {
  15. PlayerHeader {
  16. tag,
  17. guildcard: client.user.id.0,
  18. _unknown1: [0; 5],
  19. client_id: area_client.local_client.id() as u32,
  20. name: libpso::utf8_to_utf16_array!(client.character.name, 16),
  21. _unknown2: 2,
  22. }
  23. }
  24. pub async fn player_info(tag: u32, client: &ClientState, area_client: &AreaClient, inventory: &InventoryState) -> PlayerInfo {
  25. let (level, stats) = LEVEL_TABLE.get_stats_from_exp(client.character.char_class, client.character.exp);
  26. let character = CharacterBytesBuilder::default()
  27. .character(&client.character)
  28. .stats(&stats)
  29. .level(level - 1)
  30. .meseta(inventory.meseta)
  31. .build();
  32. PlayerInfo {
  33. header: player_header(tag, client, area_client),
  34. inventory: Inventory {
  35. item_count: inventory.count() as u8,
  36. hp_mats_used: 0, // TODO: materials
  37. tp_mats_used: 0, // TODO: materials
  38. language: 0, // TODO: account language
  39. items: inventory.as_client_inventory_items(),
  40. },
  41. character,
  42. }
  43. }