diff --git a/MosswartMassacre/CharacterStats.cs b/MosswartMassacre/CharacterStats.cs index 30918de..5862dc2 100644 --- a/MosswartMassacre/CharacterStats.cs +++ b/MosswartMassacre/CharacterStats.cs @@ -42,6 +42,19 @@ namespace MosswartMassacre // Cached title data (populated from network messages) private static int currentTitle = -1; + private static List titlesList = new List(); + + // Cached DWORD properties (populated from 0x0013 message) + private static Dictionary characterProperties = new Dictionary(); + + // DWORD blacklist — exclude cosmetic/internal properties (same as TreeStats) + private static readonly HashSet dwordBlacklist = new HashSet { + 2, 5, 7, 10, 17, 19, 20, 24, 25, 26, 28, 30, 33, 35, 36, 38, 43, 45, + 86, 87, 88, 89, 90, 91, 92, 98, + 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 117, 125, 129, 131, 134, + 158, 159, 160, 166, 170, 171, 172, 174, 175, 176, 177, 178, 179, 188, 193, + 270, 271, 272, 293 + }; /// /// Reset all cached data. Call on plugin init. @@ -58,6 +71,8 @@ namespace MosswartMassacre luminanceEarned = -1; luminanceTotal = -1; currentTitle = -1; + titlesList.Clear(); + characterProperties.Clear(); } /// @@ -142,6 +157,18 @@ namespace MosswartMassacre else if (key == Constants.MaximumLuminanceKey) luminanceTotal = value; } + + // Parse DWORD properties (augmentations, ratings, masteries, society, etc.) + MessageStruct dwords = props.Struct("dwords"); + characterProperties.Clear(); + for (int i = 0; i < dwords.Count; i++) + { + var tmpStruct = dwords.Struct(i); + int key = tmpStruct.Value("key"); + int value = tmpStruct.Value("value"); + if (!dwordBlacklist.Contains(key)) + characterProperties[key] = value; + } } catch (Exception ex) { @@ -185,6 +212,14 @@ namespace MosswartMassacre { try { + // Capture full titles list + MessageStruct titles = e.Message.Struct("titles"); + titlesList.Clear(); + for (int i = 0; i < titles.Count; i++) + { + titlesList.Add(titles.Struct(i).Value("value")); + } + currentTitle = e.Message.Value("current"); } catch (Exception ex) @@ -325,7 +360,9 @@ namespace MosswartMassacre attributes = attributes, vitals = vitals, skills = skills, - allegiance = allegiance + allegiance = allegiance, + properties = characterProperties.Count > 0 ? new Dictionary(characterProperties) : null, + titles = titlesList.Count > 0 ? new List(titlesList) : null }; _ = WebSocket.SendCharacterStatsAsync(payload); diff --git a/MosswartMassacre/bin/Release/MosswartMassacre.dll b/MosswartMassacre/bin/Release/MosswartMassacre.dll index f517edb..ee3856c 100644 Binary files a/MosswartMassacre/bin/Release/MosswartMassacre.dll and b/MosswartMassacre/bin/Release/MosswartMassacre.dll differ