8 Commits
v0.3.1 ... v0.4

6 changed files with 39 additions and 11 deletions

View File

@@ -12,6 +12,7 @@ namespace Pilz.Dalamud.Nameplates.EventArgs
public IntPtr TitlePtr { get; set; }
public IntPtr NamePtr { get; set; }
public IntPtr FreeCompanyPtr { get; set; }
public IntPtr PrefixPtr { get; set; }
public bool IsTitleAboveName { get; set; }
public bool IsTitleVisible { get; set; }
public int IconID { get; set; }

View File

@@ -19,7 +19,8 @@ namespace Pilz.Dalamud.Nameplates.EventArgs
public SafeNameplateObject SafeNameplateObject { get; set; }
public SeString Title { get; internal set; }
public SeString Name { get; internal set; }
public SeString FreeCompany { get; set; }
public SeString FreeCompany { get; internal set; }
public SeString Prefix { get; internal set; }
public bool IsTitleAboveName
{

View File

@@ -28,9 +28,9 @@ namespace Pilz.Dalamud.Nameplates
public event AddonNamePlate_SetPlayerNameManagedEventHandler AddonNamePlate_SetPlayerNameManaged;
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))]
private readonly 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);
[Signature("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 48 8B 5C 24 ?? 45 38 BE", DetourName = nameof(SetPlayerNameplateDetour))]
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, IntPtr prefix, int iconId);
/// <summary>
/// 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;
}
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;
@@ -98,6 +98,7 @@ namespace Pilz.Dalamud.Nameplates
TitlePtr = titlePtr,
NamePtr = namePtr,
FreeCompanyPtr = freeCompanyPtr,
PrefixPtr = prefix,
IsTitleAboveName = isTitleAboveName,
IsTitleVisible = isTitleVisible,
IconID = iconId
@@ -118,6 +119,7 @@ namespace Pilz.Dalamud.Nameplates
eventArgs.TitlePtr,
eventArgs.NamePtr,
eventArgs.FreeCompanyPtr,
prefix,
eventArgs.IconID);
};
@@ -130,6 +132,7 @@ namespace Pilz.Dalamud.Nameplates
var freeTitle = false;
var freeName = false;
var freeFreeCompany = false;
var freePrefix = false;
// Create NamePlateObject if possible
var namePlateObj = new SafeNameplateObject(playerNameplateObjectPtr);
@@ -141,18 +144,20 @@ namespace Pilz.Dalamud.Nameplates
SafeNameplateObject = namePlateObj,
Title = GameInterfaceHelper.ReadSeString(eventArgs.TitlePtr),
Name = GameInterfaceHelper.ReadSeString(eventArgs.NamePtr),
FreeCompany = GameInterfaceHelper.ReadSeString(eventArgs.FreeCompanyPtr)
FreeCompany = GameInterfaceHelper.ReadSeString(eventArgs.FreeCompanyPtr),
Prefix = GameInterfaceHelper.ReadSeString(eventArgs.PrefixPtr)
};
// Get raw string content
var titleRaw = managedEventArgs.Title.Encode();
var nameRaw = managedEventArgs.Name.Encode();
var freeCompanyRaw = managedEventArgs.FreeCompany.Encode();
var prefixRaw = managedEventArgs.Prefix.Encode();
// Invoke Managed Event
AddonNamePlate_SetPlayerNameManaged.Invoke(managedEventArgs);
// Get new Title string ontent
// Get new Title string content
var titleNewRaw = managedEventArgs.Title.Encode();
if (!titleRaw.SequenceEqual(titleNewRaw))
{
@@ -160,7 +165,7 @@ namespace Pilz.Dalamud.Nameplates
freeTitle = true;
}
// Get new Name string ontent
// Get new Name string content
var nameNewRaw = managedEventArgs.Name.Encode();
if (!nameRaw.SequenceEqual(nameNewRaw))
{
@@ -168,7 +173,7 @@ namespace Pilz.Dalamud.Nameplates
freeName = true;
}
// Get new Free Company string ontent
// Get new Free Company string content
var freeCompanyNewRaw = managedEventArgs.FreeCompany.Encode();
if (!freeCompanyRaw.SequenceEqual(freeCompanyNewRaw))
{
@@ -176,6 +181,14 @@ namespace Pilz.Dalamud.Nameplates
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
callOriginal();
@@ -186,6 +199,8 @@ namespace Pilz.Dalamud.Nameplates
GameInterfaceHelper.PluginFree(eventArgs.NamePtr);
if (freeFreeCompany)
GameInterfaceHelper.PluginFree(eventArgs.FreeCompanyPtr);
if (freePrefix)
GameInterfaceHelper.PluginFree(eventArgs.PrefixPtr);
}
else if(!hasDefaultHookEvent)
{

View File

@@ -21,9 +21,10 @@
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<Copyright>Pilzinsel64</Copyright>
<PackageProjectUrl>https://github.com/Pilzinsel64/Pilz.Dalamud</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/Pilzinsel64/Pilz.Dalamud</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Version>0.3.1</Version>
<Version>0.4.0</Version>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>
@@ -58,4 +59,8 @@
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>
</Project>

View File

@@ -57,7 +57,7 @@ public class NameplateFeature : IDisposable
}
```
This is an example of editing the title to "Good Player" and change the color of the name:
This is an example of editing the title to "Good Player", make the name italic and also force the title to always be above the name:
```cs
private void Hooks_AddonNamePlate_SetPlayerNameManaged(Pilz.Dalamud.Nameplates.EventArgs.AddonNamePlate_SetPlayerNameManagedEventArgs eventArgs)

6
packages.lock.json Normal file
View File

@@ -0,0 +1,6 @@
{
"version": 1,
"dependencies": {
"net7.0-windows7.0": {}
}
}