fix: make pf links work

This commit is contained in:
Anna 2023-02-27 20:23:15 -05:00
parent 42ebd5c376
commit 9a42b1b9da
3 changed files with 11 additions and 16 deletions

View File

@ -227,7 +227,7 @@ internal unsafe class GameFunctions : IDisposable {
vf27(atkModule, addonId, 1); vf27(atkModule, addonId, 1);
} else { } else {
// 6.05: 8443DD // 6.05: 8443DD
if (*(uint*) ((IntPtr) lfg + 0x2AB8) > 0) { if (*(uint*) ((IntPtr) lfg + 0x2C20) > 0) {
lfg->Hide(); lfg->Hide();
} else { } else {
lfg->Show(); lfg->Show();

View File

@ -14,6 +14,7 @@ using ImGuiNET;
using ImGuiScene; using ImGuiScene;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets;
using Action = System.Action; using Action = System.Action;
using PartyFinderPayload = Dalamud.Game.Text.SeStringHandling.Payloads.PartyFinderPayload;
namespace ChatTwo; namespace ChatTwo;
@ -295,20 +296,18 @@ internal sealed class PayloadHandler {
break; break;
} }
case PartyFinderPayload pf: { case PartyFinderPayload pf: {
this.Ui.Plugin.Functions.OpenPartyFinder(pf.Id); if (pf.LinkType == PartyFinderPayload.PartyFinderLinkType.PartyFinderNotification) {
GameFunctions.GameFunctions.OpenPartyFinder();
} else {
this.Ui.Plugin.Functions.OpenPartyFinder(pf.ListingId);
}
break; break;
} }
case AchievementPayload achievement: { case AchievementPayload achievement: {
this.Ui.Plugin.Functions.OpenAchievement(achievement.Id); this.Ui.Plugin.Functions.OpenAchievement(achievement.Id);
break; break;
} }
case RawPayload raw: {
if (Equals(raw, ChunkUtil.PeriodicRecruitmentLink)) {
GameFunctions.GameFunctions.OpenPartyFinder();
}
break;
}
} }
} }

View File

@ -63,16 +63,14 @@ internal static class ChunkUtil {
case PayloadType.Player: case PayloadType.Player:
link = payload; link = payload;
break; break;
case PayloadType.PartyFinder:
link = payload;
break;
case PayloadType.Unknown: case PayloadType.Unknown:
var rawPayload = (RawPayload) payload; var rawPayload = (RawPayload) payload;
if (rawPayload.Data.Length > 1 && rawPayload.Data[1] == 0x13) { if (rawPayload.Data.Length > 1 && rawPayload.Data[1] == 0x13) {
foreground.Pop(); foreground.Pop();
glow.Pop(); glow.Pop();
} else if (rawPayload.Data.Length > 7 && rawPayload.Data[1] == 0x27 && rawPayload.Data[3] == 0x0A) {
// pf payload
var reader = new BinaryReader(new MemoryStream(rawPayload.Data[4..]));
var id = GetInteger(reader);
link = new PartyFinderPayload(id);
} else if (rawPayload.Data.Length > 5 && rawPayload.Data[1] == 0x27 && rawPayload.Data[3] == 0x06) { } else if (rawPayload.Data.Length > 5 && rawPayload.Data[1] == 0x27 && rawPayload.Data[3] == 0x06) {
// achievement payload // achievement payload
var reader = new BinaryReader(new MemoryStream(rawPayload.Data[4..])); var reader = new BinaryReader(new MemoryStream(rawPayload.Data[4..]));
@ -80,8 +78,6 @@ internal static class ChunkUtil {
link = new AchievementPayload(id); link = new AchievementPayload(id);
} else if (Equals(rawPayload, RawPayload.LinkTerminator)) { } else if (Equals(rawPayload, RawPayload.LinkTerminator)) {
link = null; link = null;
} else if (Equals(rawPayload, PeriodicRecruitmentLink)) {
link = rawPayload;
} }
break; break;