feat: add periodic recruitment payload

This commit is contained in:
Anna 2022-01-11 01:58:32 -05:00
parent aaa605e806
commit 4b8ee3d648
Signed by: anna
GPG Key ID: 0B391D8F06FCD9E0
3 changed files with 32 additions and 0 deletions

View File

@ -428,4 +428,23 @@ internal unsafe class GameFunctions : IDisposable {
var itemFinder = Framework.Instance()->GetUiModule()->GetItemFinderModule();
this._searchForItem(itemFinder, itemId, 1);
}
internal static void OpenPartyFinder() {
// this whole method: 6.05: 84433A
var lfg = Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId(AgentId.LookingForGroup);
if (lfg->IsAgentActive()) {
var addonId = lfg->GetAddonID();
var atkModule = Framework.Instance()->GetUiModule()->GetRaptureAtkModule();
var atkModuleVtbl = (void**) atkModule->AtkModule.vtbl;
var vf27 = (delegate* unmanaged<RaptureAtkModule*, ulong, ulong, byte>) atkModuleVtbl[27];
vf27(atkModule, addonId, 1);
} else {
// 6.05: 8443DD
if (*(uint*) ((IntPtr) lfg + 0x2AB8) > 0) {
lfg->Hide();
} else {
lfg->Show();
}
}
}
}

View File

@ -175,6 +175,13 @@ internal sealed class PayloadHandler {
this.ClickLinkPayload(chunk, payload, link);
break;
}
case RawPayload raw: {
if (Equals(raw, ChunkUtil.PeriodicRecruitmentLink)) {
GameFunctions.OpenPartyFinder();
}
break;
}
}
}

View File

@ -70,6 +70,8 @@ internal static class ChunkUtil {
glow.Pop();
} else if (Equals(rawPayload, RawPayload.LinkTerminator)) {
link = null;
} else if (Equals(rawPayload, PeriodicRecruitmentLink)) {
link = rawPayload;
}
break;
@ -84,4 +86,8 @@ internal static class ChunkUtil {
return chunks;
}
internal static readonly RawPayload PeriodicRecruitmentLink = new(new byte[] {
0x02, 0x27, 0x07, 0x08, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03,
});
}