From f1b51708b406ad46b2a6262be135c16266ac5d28 Mon Sep 17 00:00:00 2001
From: meli <57847713+ff-meli@users.noreply.github.com>
Date: Thu, 30 Apr 2020 16:50:34 -0700
Subject: [PATCH] Update ActorTable offsets for hp/mp, add ui (display-only..
probably) status effects
---
Dalamud/Game/ClientState/Actors/Types/Chara.cs | 2 +-
Dalamud/Game/ClientState/Structs/Actor.cs | 12 ++++++++----
.../Game/ClientState/Structs/StatusEffect.cs | 18 ++++++++++++++++++
3 files changed, 27 insertions(+), 5 deletions(-)
create mode 100644 Dalamud/Game/ClientState/Structs/StatusEffect.cs
diff --git a/Dalamud/Game/ClientState/Actors/Types/Chara.cs b/Dalamud/Game/ClientState/Actors/Types/Chara.cs
index 06b0657f9..467ad087a 100644
--- a/Dalamud/Game/ClientState/Actors/Types/Chara.cs
+++ b/Dalamud/Game/ClientState/Actors/Types/Chara.cs
@@ -42,7 +42,7 @@ namespace Dalamud.Game.ClientState.Actors.Types {
///
/// The maximum MP of this Chara.
///
- public int MaxMp => this.actorStruct.MaxMp;
+ public int MaxMp => 10000; // Currently hardcoded because the value in actorStruct is very questionable.
///
/// Byte array describing the visual appearance of this Chara. Indexed by .
diff --git a/Dalamud/Game/ClientState/Structs/Actor.cs b/Dalamud/Game/ClientState/Structs/Actor.cs
index 89308a2f2..745eb7e76 100644
--- a/Dalamud/Game/ClientState/Structs/Actor.cs
+++ b/Dalamud/Game/ClientState/Structs/Actor.cs
@@ -38,12 +38,16 @@ namespace Dalamud.Game.ClientState.Structs
[FieldOffset(0x1868)] public int NameId;
[FieldOffset(0x1884)] public byte CurrentWorld;
[FieldOffset(0x1886)] public byte HomeWorld;
- [FieldOffset(6328)] public int CurrentHp;
- [FieldOffset(6332)] public int MaxHp;
- [FieldOffset(6336)] public int CurrentMp;
- [FieldOffset(6340)] public int MaxMp;
+ [FieldOffset(0x1898)] public int CurrentHp;
+ [FieldOffset(0x189C)] public int MaxHp;
+ [FieldOffset(0x18A0)] public int CurrentMp;
+ // This value is weird. It seems to change semi-randomly between 0 and 10k, definitely
+ // in response to mp-using events, but it doesn't often have a value and the changing seems
+ // somewhat arbitrary.
+ [FieldOffset(0x18AA)] public int MaxMp;
[FieldOffset(6358)] public byte ClassJob;
[FieldOffset(6360)] public byte Level;
+ [FieldOffset(0x1958)][MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public StatusEffect[] UIStatusEffects;
}
}
diff --git a/Dalamud/Game/ClientState/Structs/StatusEffect.cs b/Dalamud/Game/ClientState/Structs/StatusEffect.cs
new file mode 100644
index 000000000..584c5c48d
--- /dev/null
+++ b/Dalamud/Game/ClientState/Structs/StatusEffect.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace Dalamud.Game.ClientState.Structs
+{
+ ///
+ /// Native memory representation of a FFXIV status effect.
+ ///
+ [StructLayout(LayoutKind.Sequential)]
+ public struct StatusEffect
+ {
+ public short EffectId;
+ public byte StackCount;
+ public byte Param;
+ public float Duration;
+ public int OwnerId;
+ }
+}