Patch 6.4: add Prefix to Nameplate hook & update sigs
This commit is contained in:
@@ -12,6 +12,7 @@ namespace Pilz.Dalamud.Nameplates.EventArgs
|
|||||||
public IntPtr TitlePtr { get; set; }
|
public IntPtr TitlePtr { get; set; }
|
||||||
public IntPtr NamePtr { get; set; }
|
public IntPtr NamePtr { get; set; }
|
||||||
public IntPtr FreeCompanyPtr { get; set; }
|
public IntPtr FreeCompanyPtr { get; set; }
|
||||||
|
public IntPtr PrefixPtr { get; set; }
|
||||||
public bool IsTitleAboveName { get; set; }
|
public bool IsTitleAboveName { get; set; }
|
||||||
public bool IsTitleVisible { get; set; }
|
public bool IsTitleVisible { get; set; }
|
||||||
public int IconID { get; set; }
|
public int IconID { get; set; }
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ namespace Pilz.Dalamud.Nameplates.EventArgs
|
|||||||
public SeString Title { get; internal set; }
|
public SeString Title { get; internal set; }
|
||||||
public SeString Name { get; internal set; }
|
public SeString Name { get; internal set; }
|
||||||
public SeString FreeCompany { get; internal set; }
|
public SeString FreeCompany { get; internal set; }
|
||||||
|
public SeString Prefix { get; internal set; }
|
||||||
|
|
||||||
public bool IsTitleAboveName
|
public bool IsTitleAboveName
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
public event AddonNamePlate_SetPlayerNameManagedEventHandler AddonNamePlate_SetPlayerNameManaged;
|
public event AddonNamePlate_SetPlayerNameManagedEventHandler AddonNamePlate_SetPlayerNameManaged;
|
||||||
public delegate void AddonNamePlate_SetPlayerNameManagedEventHandler(AddonNamePlate_SetPlayerNameManagedEventArgs eventArgs);
|
public delegate void AddonNamePlate_SetPlayerNameManagedEventHandler(AddonNamePlate_SetPlayerNameManagedEventArgs eventArgs);
|
||||||
|
|
||||||
[Signature("48 89 5C 24 ?? 48 89 6C 24 ?? 56 57 41 54 41 56 41 57 48 83 EC 40 44 0F B6 E2", DetourName = nameof(SetPlayerNameplateDetour))]
|
[Signature("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 48 8B 5C 24 ?? 45 38 BE", DetourName = nameof(SetPlayerNameplateDetour))]
|
||||||
private readonly Hook<AddonNamePlate_SetPlayerNameplateDetour>? hook_AddonNamePlate_SetPlayerNameplateDetour = null;
|
private Hook<AddonNamePlate_SetPlayerNameplateDetour>? hook_AddonNamePlate_SetPlayerNameplateDetour = null;
|
||||||
private unsafe delegate IntPtr AddonNamePlate_SetPlayerNameplateDetour(IntPtr playerNameplateObjectPtr, bool isTitleAboveName, bool isTitleVisible, IntPtr titlePtr, IntPtr namePtr, IntPtr freeCompanyPtr, int iconId);
|
private unsafe delegate IntPtr AddonNamePlate_SetPlayerNameplateDetour(IntPtr playerNameplateObjectPtr, bool isTitleAboveName, bool isTitleVisible, IntPtr titlePtr, IntPtr namePtr, IntPtr freeCompanyPtr, IntPtr prefix, int iconId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines if all hooks are enabled. If this is false, then there might be something wrong or the class already has been disposed.
|
/// Defines if all hooks are enabled. If this is false, then there might be something wrong or the class already has been disposed.
|
||||||
@@ -86,7 +86,7 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
return hook != null && hook.IsEnabled;
|
return hook != null && hook.IsEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IntPtr SetPlayerNameplateDetour(IntPtr playerNameplateObjectPtr, bool isTitleAboveName, bool isTitleVisible, IntPtr titlePtr, IntPtr namePtr, IntPtr freeCompanyPtr, int iconId)
|
private IntPtr SetPlayerNameplateDetour(IntPtr playerNameplateObjectPtr, bool isTitleAboveName, bool isTitleVisible, IntPtr titlePtr, IntPtr namePtr, IntPtr freeCompanyPtr, IntPtr prefix, int iconId)
|
||||||
{
|
{
|
||||||
var result = IntPtr.Zero;
|
var result = IntPtr.Zero;
|
||||||
|
|
||||||
@@ -98,6 +98,7 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
TitlePtr = titlePtr,
|
TitlePtr = titlePtr,
|
||||||
NamePtr = namePtr,
|
NamePtr = namePtr,
|
||||||
FreeCompanyPtr = freeCompanyPtr,
|
FreeCompanyPtr = freeCompanyPtr,
|
||||||
|
PrefixPtr = prefix,
|
||||||
IsTitleAboveName = isTitleAboveName,
|
IsTitleAboveName = isTitleAboveName,
|
||||||
IsTitleVisible = isTitleVisible,
|
IsTitleVisible = isTitleVisible,
|
||||||
IconID = iconId
|
IconID = iconId
|
||||||
@@ -118,6 +119,7 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
eventArgs.TitlePtr,
|
eventArgs.TitlePtr,
|
||||||
eventArgs.NamePtr,
|
eventArgs.NamePtr,
|
||||||
eventArgs.FreeCompanyPtr,
|
eventArgs.FreeCompanyPtr,
|
||||||
|
prefix,
|
||||||
eventArgs.IconID);
|
eventArgs.IconID);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -130,6 +132,7 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
var freeTitle = false;
|
var freeTitle = false;
|
||||||
var freeName = false;
|
var freeName = false;
|
||||||
var freeFreeCompany = false;
|
var freeFreeCompany = false;
|
||||||
|
var freePrefix = false;
|
||||||
|
|
||||||
// Create NamePlateObject if possible
|
// Create NamePlateObject if possible
|
||||||
var namePlateObj = new SafeNameplateObject(playerNameplateObjectPtr);
|
var namePlateObj = new SafeNameplateObject(playerNameplateObjectPtr);
|
||||||
@@ -141,18 +144,20 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
SafeNameplateObject = namePlateObj,
|
SafeNameplateObject = namePlateObj,
|
||||||
Title = GameInterfaceHelper.ReadSeString(eventArgs.TitlePtr),
|
Title = GameInterfaceHelper.ReadSeString(eventArgs.TitlePtr),
|
||||||
Name = GameInterfaceHelper.ReadSeString(eventArgs.NamePtr),
|
Name = GameInterfaceHelper.ReadSeString(eventArgs.NamePtr),
|
||||||
FreeCompany = GameInterfaceHelper.ReadSeString(eventArgs.FreeCompanyPtr)
|
FreeCompany = GameInterfaceHelper.ReadSeString(eventArgs.FreeCompanyPtr),
|
||||||
|
Prefix = GameInterfaceHelper.ReadSeString(eventArgs.PrefixPtr)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get raw string content
|
// Get raw string content
|
||||||
var titleRaw = managedEventArgs.Title.Encode();
|
var titleRaw = managedEventArgs.Title.Encode();
|
||||||
var nameRaw = managedEventArgs.Name.Encode();
|
var nameRaw = managedEventArgs.Name.Encode();
|
||||||
var freeCompanyRaw = managedEventArgs.FreeCompany.Encode();
|
var freeCompanyRaw = managedEventArgs.FreeCompany.Encode();
|
||||||
|
var prefixRaw = managedEventArgs.Prefix.Encode();
|
||||||
|
|
||||||
// Invoke Managed Event
|
// Invoke Managed Event
|
||||||
AddonNamePlate_SetPlayerNameManaged.Invoke(managedEventArgs);
|
AddonNamePlate_SetPlayerNameManaged.Invoke(managedEventArgs);
|
||||||
|
|
||||||
// Get new Title string ontent
|
// Get new Title string content
|
||||||
var titleNewRaw = managedEventArgs.Title.Encode();
|
var titleNewRaw = managedEventArgs.Title.Encode();
|
||||||
if (!titleRaw.SequenceEqual(titleNewRaw))
|
if (!titleRaw.SequenceEqual(titleNewRaw))
|
||||||
{
|
{
|
||||||
@@ -160,7 +165,7 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
freeTitle = true;
|
freeTitle = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get new Name string ontent
|
// Get new Name string content
|
||||||
var nameNewRaw = managedEventArgs.Name.Encode();
|
var nameNewRaw = managedEventArgs.Name.Encode();
|
||||||
if (!nameRaw.SequenceEqual(nameNewRaw))
|
if (!nameRaw.SequenceEqual(nameNewRaw))
|
||||||
{
|
{
|
||||||
@@ -168,7 +173,7 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
freeName = true;
|
freeName = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get new Free Company string ontent
|
// Get new Free Company string content
|
||||||
var freeCompanyNewRaw = managedEventArgs.FreeCompany.Encode();
|
var freeCompanyNewRaw = managedEventArgs.FreeCompany.Encode();
|
||||||
if (!freeCompanyRaw.SequenceEqual(freeCompanyNewRaw))
|
if (!freeCompanyRaw.SequenceEqual(freeCompanyNewRaw))
|
||||||
{
|
{
|
||||||
@@ -176,6 +181,14 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
freeFreeCompany = true;
|
freeFreeCompany = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get new Prefix string content
|
||||||
|
var prefixNewRaw = managedEventArgs.Prefix.Encode();
|
||||||
|
if (!prefixRaw.SequenceEqual(prefixNewRaw))
|
||||||
|
{
|
||||||
|
eventArgs.PrefixPtr = GameInterfaceHelper.PluginAllocate(prefixNewRaw);
|
||||||
|
freePrefix = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Call Original as we changed something
|
// Call Original as we changed something
|
||||||
callOriginal();
|
callOriginal();
|
||||||
|
|
||||||
@@ -186,6 +199,8 @@ namespace Pilz.Dalamud.Nameplates
|
|||||||
GameInterfaceHelper.PluginFree(eventArgs.NamePtr);
|
GameInterfaceHelper.PluginFree(eventArgs.NamePtr);
|
||||||
if (freeFreeCompany)
|
if (freeFreeCompany)
|
||||||
GameInterfaceHelper.PluginFree(eventArgs.FreeCompanyPtr);
|
GameInterfaceHelper.PluginFree(eventArgs.FreeCompanyPtr);
|
||||||
|
if (freePrefix)
|
||||||
|
GameInterfaceHelper.PluginFree(eventArgs.PrefixPtr);
|
||||||
}
|
}
|
||||||
else if(!hasDefaultHookEvent)
|
else if(!hasDefaultHookEvent)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user