diff --git a/dalamud/Auracite/AppearanceStep.cs b/dalamud/Auracite/AppearanceStep.cs new file mode 100644 index 0000000..3d993c0 --- /dev/null +++ b/dalamud/Auracite/AppearanceStep.cs @@ -0,0 +1,31 @@ +using System; +using Dalamud.Game.ClientState.Objects.Enums; +using Dalamud.Game.Text; +using Dalamud.Game.Text.SeStringHandling; + +namespace Auracite; + +public class AppearanceStep : IStep +{ + public event IStep.CompletedDelegate? Completed; + + public void Run() + { + if (Plugin.ClientState.LocalPlayer != null) + { + Plugin.package.height = Plugin.ClientState.LocalPlayer.Customize[(int)CustomizeIndex.Height]; + Plugin.package.bust_size = Plugin.ClientState.LocalPlayer.Customize[(int)CustomizeIndex.BustSize]; + } + Completed?.Invoke(); + } + + public string StepName() + { + return "Appearance"; + } + + public string StepDescription() + { + return "No user action required."; + } +} \ No newline at end of file diff --git a/dalamud/Auracite/IStep.cs b/dalamud/Auracite/IStep.cs index 79245a6..2516bb1 100644 --- a/dalamud/Auracite/IStep.cs +++ b/dalamud/Auracite/IStep.cs @@ -6,6 +6,8 @@ public interface IStep { public event CompletedDelegate Completed; + void Run(); + string StepName(); string StepDescription(); diff --git a/dalamud/Auracite/PlaytimeStep.cs b/dalamud/Auracite/PlaytimeStep.cs index c910f46..539210a 100644 --- a/dalamud/Auracite/PlaytimeStep.cs +++ b/dalamud/Auracite/PlaytimeStep.cs @@ -18,6 +18,10 @@ public class PlaytimeStep : IStep, IDisposable public event IStep.CompletedDelegate? Completed; + public void Run() + { + } + public string StepName() { return "Playtime"; diff --git a/dalamud/Auracite/Plugin.cs b/dalamud/Auracite/Plugin.cs index 4c62bbf..e179793 100644 --- a/dalamud/Auracite/Plugin.cs +++ b/dalamud/Auracite/Plugin.cs @@ -16,7 +16,7 @@ public sealed class Plugin : IDalamudPlugin private readonly WindowSystem WindowSystem = new("Auracite"); private readonly List _steps = - [typeof(PlaytimeStep)]; + [typeof(AppearanceStep), typeof(PlaytimeStep)]; private int _stepIndex; @@ -25,6 +25,8 @@ public sealed class Plugin : IDalamudPlugin public class Package { public string playtime; + public int height; + public int bust_size; } public static Package? package; @@ -78,6 +80,7 @@ public sealed class Plugin : IDalamudPlugin } CurrentStep = (IStep)Activator.CreateInstance(_steps[_stepIndex])!; CurrentStep.Completed += NextStep; + CurrentStep.Run(); } private void SendPackage() diff --git a/src/data.rs b/src/data.rs index f854e53..5af4560 100644 --- a/src/data.rs +++ b/src/data.rs @@ -5,19 +5,26 @@ pub struct Currencies { pub gil: i64, } +#[derive(Default, Serialize)] +pub struct Appearance { + pub race: String, + pub subrace: String, + pub gender: String, + pub height: i32, + pub bust_size: i32 +} + #[derive(Default, Serialize)] pub struct CharacterData { pub name: String, pub world: String, pub data_center: String, - pub race: String, - pub subrace: String, - pub gender: String, pub city_state: String, pub nameday: String, pub guardian: String, pub currencies: Currencies, pub playtime: String, + pub appearance: Appearance, #[serde(skip)] pub face_url: String, diff --git a/src/html.rs b/src/html.rs index e63cbfb..73fee24 100644 --- a/src/html.rs +++ b/src/html.rs @@ -18,9 +18,9 @@ pub fn write_html(char_data: &CharacterData, file_path: &str) -> io::Result<()> name => char_data.name, world => char_data.world, data_center => char_data.data_center, - race => char_data.race, - subrace => char_data.subrace, - gender => char_data.gender, + race => char_data.appearance.race, + subrace => char_data.appearance.subrace, + gender => char_data.appearance.gender, nameday => char_data.nameday, city_state => char_data.city_state }) diff --git a/src/main.rs b/src/main.rs index 984f768..d566be8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,6 +30,8 @@ struct Args { #[derive(Default, Deserialize, Clone)] struct Package { playtime: String, + height: i32, + bust_size: i32, } #[derive(Clone)] @@ -44,7 +46,7 @@ impl Service for PackageService<'_> { fn call(&self, req: Request) -> Result, Self::Error> { *self.package.lock().unwrap() = serde_json::from_str(&String::from_utf8(req.into_body().into_bytes().unwrap()).unwrap()).unwrap(); - + *self.wants_stop.lock().unwrap() = true; Ok(Response::builder() @@ -109,6 +111,8 @@ fn main() { let package = &*package.lock().unwrap(); char_data.playtime = package.playtime.parse().unwrap(); + char_data.appearance.height = package.height; + char_data.appearance.bust_size = package.bust_size; } let serialized = serde_json::to_string(&char_data).unwrap(); diff --git a/src/parser.rs b/src/parser.rs index 1885619..0a8d6d8 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -69,12 +69,12 @@ pub fn parse_lodestone(data: &str) -> CharacterData { let inner_html = block_name.inner_html(); let captures = re.captures(&inner_html).unwrap(); - char_data.race = captures.get(1).unwrap().as_str().to_owned(); - char_data.subrace = captures.get(2).unwrap().as_str().to_owned(); + char_data.appearance.race = captures.get(1).unwrap().as_str().to_owned(); + char_data.appearance.subrace = captures.get(2).unwrap().as_str().to_owned(); if captures.get(3).unwrap().as_str() == "♀" { - char_data.gender = "Female".parse().unwrap(); + char_data.appearance.gender = "Female".parse().unwrap(); } else { - char_data.gender = "Male".parse().unwrap(); + char_data.appearance.gender = "Male".parse().unwrap(); } } } else if name == "City-state" {