feat: refresh pf when changing preset
This commit is contained in:
parent
28f3d84b03
commit
e469019c20
|
@ -1,16 +1,16 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BetterPartyFinder", "BetterPartyFinder\BetterPartyFinder.csproj", "{3692974D-42C1-4590-AB61-3D94D26A0634}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BetterPartyFinder", "BetterPartyFinder\BetterPartyFinder.csproj", "{3692974D-42C1-4590-AB61-3D94D26A0634}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{3692974D-42C1-4590-AB61-3D94D26A0634}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{3692974D-42C1-4590-AB61-3D94D26A0634}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{3692974D-42C1-4590-AB61-3D94D26A0634}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3692974D-42C1-4590-AB61-3D94D26A0634}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{3692974D-42C1-4590-AB61-3D94D26A0634}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{3692974D-42C1-4590-AB61-3D94D26A0634}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{3692974D-42C1-4590-AB61-3D94D26A0634}.Release|Any CPU.Build.0 = Release|Any CPU
|
{3692974D-42C1-4590-AB61-3D94D26A0634}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace BetterPartyFinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReceiveListing(PartyFinderListing listing, PartyFinderListingEventArgs args) {
|
private void ReceiveListing(PartyFinderListing listing, PartyFinderListingEventArgs args) {
|
||||||
args.Visible = this.ListingVisible(listing);
|
args.Visible = args.Visible && this.ListingVisible(listing);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ListingVisible(PartyFinderListing listing) {
|
private bool ListingVisible(PartyFinderListing listing) {
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
using System;
|
using System;
|
||||||
#if DEBUG
|
|
||||||
using System.Linq;
|
|
||||||
#endif
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using Dalamud.Hooking;
|
using Dalamud.Hooking;
|
||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
|
|
||||||
namespace BetterPartyFinder {
|
namespace BetterPartyFinder {
|
||||||
public class GameFunctions : IDisposable {
|
public class GameFunctions : IDisposable {
|
||||||
private Plugin Plugin { get; }
|
#region Request PF Listings
|
||||||
|
|
||||||
|
private delegate byte RequestPartyFinderListingsDelegate(IntPtr agent, short zero);
|
||||||
|
|
||||||
|
private readonly RequestPartyFinderListingsDelegate _requestPartyFinderListings;
|
||||||
|
private readonly Hook<RequestPartyFinderListingsDelegate> _requestPfListingsHook;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region PF Listings events
|
||||||
|
|
||||||
internal delegate void PartyFinderListingEventDelegate(PartyFinderListing listing, PartyFinderListingEventArgs args);
|
internal delegate void PartyFinderListingEventDelegate(PartyFinderListing listing, PartyFinderListingEventArgs args);
|
||||||
|
|
||||||
|
@ -16,17 +22,51 @@ namespace BetterPartyFinder {
|
||||||
|
|
||||||
private delegate void HandlePfPacketDelegate(IntPtr param1, IntPtr data);
|
private delegate void HandlePfPacketDelegate(IntPtr param1, IntPtr data);
|
||||||
|
|
||||||
private readonly Hook<HandlePfPacketDelegate>? _handlePacketHook;
|
private readonly Hook<HandlePfPacketDelegate> _handlePacketHook;
|
||||||
|
|
||||||
internal GameFunctions(Plugin plugin) {
|
#endregion
|
||||||
|
|
||||||
|
private Plugin Plugin { get; }
|
||||||
|
private IntPtr PartyFinderAgent { get; set; } = IntPtr.Zero;
|
||||||
|
|
||||||
|
public GameFunctions(Plugin plugin) {
|
||||||
this.Plugin = plugin;
|
this.Plugin = plugin;
|
||||||
|
|
||||||
|
var requestPfPtr = this.Plugin.Interface.TargetModuleScanner.ScanText("E8 ?? ?? ?? ?? 80 BB ?? ?? ?? ?? ?? 74 2B");
|
||||||
var listingPtr = this.Plugin.Interface.TargetModuleScanner.ScanText("40 53 41 57 48 83 EC 28 48 8B D9");
|
var listingPtr = this.Plugin.Interface.TargetModuleScanner.ScanText("40 53 41 57 48 83 EC 28 48 8B D9");
|
||||||
|
|
||||||
|
this._requestPartyFinderListings = Marshal.GetDelegateForFunctionPointer<RequestPartyFinderListingsDelegate>(requestPfPtr);
|
||||||
|
this._requestPfListingsHook = new Hook<RequestPartyFinderListingsDelegate>(requestPfPtr, new RequestPartyFinderListingsDelegate(this.OnRequestPartyFinderListings));
|
||||||
|
this._requestPfListingsHook.Enable();
|
||||||
|
|
||||||
this._handlePacketHook = new Hook<HandlePfPacketDelegate>(listingPtr, new HandlePfPacketDelegate(this.PacketDetour));
|
this._handlePacketHook = new Hook<HandlePfPacketDelegate>(listingPtr, new HandlePfPacketDelegate(this.PacketDetour));
|
||||||
this._handlePacketHook.Enable();
|
this._handlePacketHook.Enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose() {
|
||||||
|
this._requestPfListingsHook.Dispose();
|
||||||
|
this._handlePacketHook.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte OnRequestPartyFinderListings(IntPtr agent, short zero) {
|
||||||
|
this.PartyFinderAgent = agent;
|
||||||
|
return this._requestPfListingsHook.Original(agent, zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RequestPartyFinderListings() {
|
||||||
|
if (this.PartyFinderAgent == IntPtr.Zero) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var addon = this.Plugin.Interface.Framework.Gui.GetAddonByName("LookingForGroup", 1);
|
||||||
|
if (addon == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._requestPartyFinderListings(this.PartyFinderAgent, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void PacketDetour(IntPtr param1, IntPtr data) {
|
private void PacketDetour(IntPtr param1, IntPtr data) {
|
||||||
if (data == IntPtr.Zero) {
|
if (data == IntPtr.Zero) {
|
||||||
goto Return;
|
goto Return;
|
||||||
|
@ -50,15 +90,6 @@ namespace BetterPartyFinder {
|
||||||
|
|
||||||
var needToRewrite = false;
|
var needToRewrite = false;
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
var raw = Marshal.AllocHGlobal(PacketInfo.PacketSize);
|
|
||||||
Marshal.StructureToPtr(packet, raw, false);
|
|
||||||
var bytes = new byte[PacketInfo.PacketSize];
|
|
||||||
Marshal.Copy(raw, bytes, 0, PacketInfo.PacketSize);
|
|
||||||
PluginLog.Log(string.Join("", bytes.Select(b => b.ToString("x2"))));
|
|
||||||
Marshal.FreeHGlobal(raw);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (var i = 0; i < packet.listings.Length; i++) {
|
for (var i = 0; i < packet.listings.Length; i++) {
|
||||||
if (packet.listings[i].IsNull()) {
|
if (packet.listings[i].IsNull()) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -96,10 +127,6 @@ namespace BetterPartyFinder {
|
||||||
// free memory
|
// free memory
|
||||||
pinnedArray.Free();
|
pinnedArray.Free();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose() {
|
|
||||||
this._handlePacketHook?.Dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PartyFinderListingEventArgs {
|
internal class PartyFinderListingEventArgs {
|
||||||
|
|
|
@ -6,10 +6,10 @@ namespace BetterPartyFinder {
|
||||||
|
|
||||||
internal DalamudPluginInterface Interface { get; private set; } = null!;
|
internal DalamudPluginInterface Interface { get; private set; } = null!;
|
||||||
internal Configuration Config { get; private set; } = null!;
|
internal Configuration Config { get; private set; } = null!;
|
||||||
internal GameFunctions Functions { get; private set; } = null!;
|
|
||||||
private Filter Filter { get; set; } = null!;
|
private Filter Filter { get; set; } = null!;
|
||||||
internal PluginUi Ui { get; set; } = null!;
|
internal PluginUi Ui { get; set; } = null!;
|
||||||
private Commands Commands { get; set; } = null!;
|
private Commands Commands { get; set; } = null!;
|
||||||
|
internal GameFunctions Functions { get; set; } = null!;
|
||||||
|
|
||||||
public void Initialize(DalamudPluginInterface pluginInterface) {
|
public void Initialize(DalamudPluginInterface pluginInterface) {
|
||||||
this.Interface = pluginInterface;
|
this.Interface = pluginInterface;
|
||||||
|
|
|
@ -130,6 +130,7 @@ namespace BetterPartyFinder {
|
||||||
} catch (NullReferenceException) {
|
} catch (NullReferenceException) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.SetWindowPos(new Vector2(addon.X, addon.Y - ImGui.GetFrameHeight()));
|
ImGui.SetWindowPos(new Vector2(addon.X, addon.Y - ImGui.GetFrameHeight()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,6 +164,8 @@ namespace BetterPartyFinder {
|
||||||
if (ImGui.Selectable("<none>")) {
|
if (ImGui.Selectable("<none>")) {
|
||||||
this.Plugin.Config.SelectedPreset = null;
|
this.Plugin.Config.SelectedPreset = null;
|
||||||
this.Plugin.Config.Save();
|
this.Plugin.Config.Save();
|
||||||
|
|
||||||
|
this.Plugin.Functions.RequestPartyFinderListings();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var preset in this.Plugin.Config.Presets) {
|
foreach (var preset in this.Plugin.Config.Presets) {
|
||||||
|
@ -172,6 +175,8 @@ namespace BetterPartyFinder {
|
||||||
|
|
||||||
this.Plugin.Config.SelectedPreset = preset.Key;
|
this.Plugin.Config.SelectedPreset = preset.Key;
|
||||||
this.Plugin.Config.Save();
|
this.Plugin.Config.Save();
|
||||||
|
|
||||||
|
this.Plugin.Functions.RequestPartyFinderListings();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.EndCombo();
|
ImGui.EndCombo();
|
||||||
|
|
Loading…
Reference in New Issue