From 4452b6d4d21fed0d962704f68d9ce3f779dfa946 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 10 Jun 2020 21:23:10 -0600 Subject: [PATCH] add materials --- src/entity/character.rs | 13 +++++++++++++ src/entity/gateway/inmemory.rs | 1 + src/ship/character.rs | 24 ++++++++++++++++-------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/entity/character.rs b/src/entity/character.rs index 8f6f2b7..80b714c 100644 --- a/src/entity/character.rs +++ b/src/entity/character.rs @@ -225,6 +225,16 @@ impl CharacterTechMenu { } } +#[derive(Clone, Default)] +pub struct CharacterMaterials { + pub power: u32, + pub mind: u32, + pub def: u32, + pub evade: u32, + pub luck: u32, + pub hp: u32, + pub tp: u32, +} #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct CharacterEntityId(pub u32); @@ -245,6 +255,7 @@ pub struct NewCharacterEntity { pub config: CharacterConfig, pub info_board: CharacterInfoboard, pub guildcard: CharacterGuildCard, + pub materials: CharacterMaterials, pub tech_menu: CharacterTechMenu, pub meseta: u32, @@ -264,6 +275,7 @@ impl NewCharacterEntity { config: CharacterConfig::new(), info_board: CharacterInfoboard::new(), guildcard: CharacterGuildCard::default(), + materials: CharacterMaterials::default(), tech_menu: CharacterTechMenu::new(), meseta: 0, } @@ -287,6 +299,7 @@ pub struct CharacterEntity { pub config: CharacterConfig, pub info_board: CharacterInfoboard, pub guildcard: CharacterGuildCard, + pub materials: CharacterMaterials, pub tech_menu: CharacterTechMenu, pub meseta: u32, diff --git a/src/entity/gateway/inmemory.rs b/src/entity/gateway/inmemory.rs index fbaafd1..14bfa2a 100644 --- a/src/entity/gateway/inmemory.rs +++ b/src/entity/gateway/inmemory.rs @@ -120,6 +120,7 @@ impl EntityGateway for InMemoryGateway { config: character.config, info_board: character.info_board, guildcard: character.guildcard, + materials: character.materials, tech_menu: character.tech_menu, meseta: character.meseta, }; diff --git a/src/ship/character.rs b/src/ship/character.rs index b87fb1d..a3f5281 100644 --- a/src/ship/character.rs +++ b/src/ship/character.rs @@ -46,13 +46,13 @@ impl<'a> CharacterBytesBuilder<'a> { let level = self.level.unwrap(); character::Character { name: libpso::utf8_to_utf16_array!(character.name, 16), - hp: stats.hp, - atp: stats.atp, - mst: stats.mst, - evp: stats.evp, - dfp: stats.dfp, + hp: stats.hp + character.materials.hp as u16 * 2, + atp: stats.atp + character.materials.power as u16 * 2, + mst: stats.mst + character.materials.mind as u16 * 2, + evp: stats.evp + character.materials.evade as u16 * 2, + dfp: stats.dfp + character.materials.def as u16 * 2, ata: stats.ata, - lck: stats.lck, + lck: stats.lck + character.materials.luck as u16 * 2, level: level, section_id: character.section_id.into(), ch_class: character.char_class.into(), @@ -158,7 +158,6 @@ impl<'a> FullCharacterBytesBuilder<'a> { } } - pub fn build(self) -> character::FullCharacter { let character = self.character.unwrap(); let stats = self.stats.unwrap(); @@ -169,6 +168,13 @@ impl<'a> FullCharacterBytesBuilder<'a> { let symbol_chat = self.symbol_chat.unwrap(); let tech_menu = self.tech_menu.unwrap(); + let mut inventory_items = inventory.as_client_inventory_items(); + inventory_items[7].material_count = character.materials.power as u8; + inventory_items[8].material_count = character.materials.mind as u8; + inventory_items[9].material_count = character.materials.evade as u8; + inventory_items[10].material_count = character.materials.def as u8; + inventory_items[11].material_count = character.materials.luck as u8; + character::FullCharacter { character: CharacterBytesBuilder::new() .character(&character) @@ -177,7 +183,9 @@ impl<'a> FullCharacterBytesBuilder<'a> { .build(), inventory: character::Inventory { item_count: inventory.count() as u8, - items: inventory.as_client_inventory_items(), + items: inventory_items, + hp_mats_used: character.materials.hp as u8 * 2, + tp_mats_used: character.materials.tp as u8 * 2, ..character::Inventory::default() }, key_team_config: character::KeyTeamConfig {