From 70002bbe7a7600d8a6e7c43fffb4d3f395d75b73 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 1 Apr 2025 23:11:27 -0400 Subject: [PATCH] Extract voice id from the game, add to chardat file --- dalamud/Auracite/MiscStep.cs | 10 +++++++++- dalamud/Auracite/Plugin.cs | 4 +++- src/data.rs | 2 ++ src/lib.rs | 3 ++- src/package.rs | 1 + 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/dalamud/Auracite/MiscStep.cs b/dalamud/Auracite/MiscStep.cs index d66fe12..d459a4b 100644 --- a/dalamud/Auracite/MiscStep.cs +++ b/dalamud/Auracite/MiscStep.cs @@ -1,5 +1,6 @@ using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.UI; +using FFXIVClientStructs.FFXIV.Client.Game.Character; namespace Auracite; @@ -16,6 +17,13 @@ public class MiscStep : IStep Plugin.package.is_novice = PlayerState.Instance()->IsNovice(); Plugin.package.is_returner = PlayerState.Instance()->IsReturner(); Plugin.package.player_commendations = PlayerState.Instance()->PlayerCommendations; + + var localPlayer = Plugin.ClientState.LocalPlayer; + if (localPlayer != null) + { + var gameObject = (Character*)localPlayer.Address; + Plugin.package.voice = gameObject->Vfx.VoiceId; + } } Completed?.Invoke(); @@ -34,4 +42,4 @@ public class MiscStep : IStep public void Dispose() { } -} \ No newline at end of file +} diff --git a/dalamud/Auracite/Plugin.cs b/dalamud/Auracite/Plugin.cs index 9c12076..2a434fb 100644 --- a/dalamud/Auracite/Plugin.cs +++ b/dalamud/Auracite/Plugin.cs @@ -73,6 +73,8 @@ public sealed class Plugin : IDalamudPlugin public string? portrait_frame; public string? plate_frame; public string? accent; + + public int voice; } public static Package? package; @@ -131,4 +133,4 @@ public sealed class Plugin : IDalamudPlugin CurrentStep.Completed += NextStep; CurrentStep.Run(); } -} \ No newline at end of file +} diff --git a/src/data.rs b/src/data.rs index a680c5b..73443bb 100644 --- a/src/data.rs +++ b/src/data.rs @@ -77,6 +77,8 @@ pub struct CharacterData { pub plate_classjob_level: Option, #[serde(skip_serializing_if = "Option::is_none")] pub search_comment: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub voice: Option, #[serde(skip)] pub face_url: String, diff --git a/src/lib.rs b/src/lib.rs index b0ae808..847c90b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -210,6 +210,7 @@ pub async fn archive_character( char_data.plate_classjob = Some(package.plate_class_job); char_data.plate_classjob_level = Some(package.plate_class_job_level); char_data.search_comment = Some(package.search_comment); + char_data.voice = Some(package.voice); zip.start_file("plate-portrait.png", options)?; zip.write_all( @@ -330,7 +331,7 @@ pub async fn archive_character( bust: package.bust_size as u8, face_paint: package.facepaint as u8, face_paint_color: package.facepaint_color as u8, - voice: 0, // TODO: need to get from game + voice: package.voice as u8, }, timestamp, comment: "Generated by Auracite".to_string(), diff --git a/src/package.rs b/src/package.rs index e3dad89..11b50cf 100644 --- a/src/package.rs +++ b/src/package.rs @@ -23,6 +23,7 @@ pub struct Package { pub portrait_frame: Option, pub plate_frame: Option, pub accent: Option, + pub voice: i32, // Appearance pub race: i32,