diff --git a/src/bin/kawari-world.rs b/src/bin/kawari-world.rs index fce66ca..0235a64 100644 --- a/src/bin/kawari-world.rs +++ b/src/bin/kawari-world.rs @@ -194,6 +194,7 @@ async fn main() { // fill inventory connection.inventory.equip_racial_items( chara_details.chara_make.customize.race, + chara_details.chara_make.customize.gender, ); // Send inventory diff --git a/src/world/inventory.rs b/src/world/inventory.rs index 188e36d..200f63e 100644 --- a/src/world/inventory.rs +++ b/src/world/inventory.rs @@ -1,3 +1,10 @@ +use physis::{ + common::{Language, Platform}, + gamedata::GameData, +}; + +use crate::config::get_config; + #[derive(Default, Copy, Clone)] pub struct Item { pub quantity: u32, @@ -57,13 +64,41 @@ impl Inventory { } /// Equip the starting items for a given race - pub fn equip_racial_items(&mut self, race_id: u8) { + pub fn equip_racial_items(&mut self, race_id: u8, gender: u8) { + let config = get_config(); + + let mut game_data = + GameData::from_existing(Platform::Win32, &config.game_location).unwrap(); + + let exh = game_data.read_excel_sheet_header("Race").unwrap(); + let exd = game_data + .read_excel_sheet("Race", &exh, Language::English, 0) + .unwrap(); + + let world_row = &exd.read_row(&exh, race_id as u32).unwrap()[0]; + + let get_column = |column_index: usize| { + let physis::exd::ColumnData::Int32(item_id) = &world_row.data[column_index] else { + panic!("Unexpected type!"); + }; + + *item_id + }; + + if gender == 0 { + self.equipped.body = Item::new(1, get_column(2) as u32); + self.equipped.hands = Item::new(1, get_column(3) as u32); + self.equipped.legs = Item::new(1, get_column(4) as u32); + self.equipped.feet = Item::new(1, get_column(5) as u32); + } else { + self.equipped.body = Item::new(1, get_column(6) as u32); + self.equipped.hands = Item::new(1, get_column(7) as u32); + self.equipped.legs = Item::new(1, get_column(8) as u32); + self.equipped.feet = Item::new(1, get_column(9) as u32); + } + // TODO: don't hardcode self.equipped.main_hand = Item::new(1, 0x00000641); - self.equipped.body = Item::new(1, 0x00000ba8); - self.equipped.hands = Item::new(1, 0x00000dc1); - self.equipped.legs = Item::new(1, 0x00000ce1); - self.equipped.feet = Item::new(1, 0x00000ea7); self.equipped.ears = Item::new(1, 0x00003b1b); self.equipped.neck = Item::new(1, 0x00003b1a); self.equipped.wrists = Item::new(1, 0x00003b1c);