From a88de537ec81b4b5da08c7cc6b881f0396e35d0e Mon Sep 17 00:00:00 2001 From: AtmoOmen Date: Sat, 3 Oct 2026 20:10:48 +0800 Subject: [PATCH 1/3] FramesUntilLogout --- FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs b/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs index 6592c6204..7b5d7d34f 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs @@ -67,7 +67,13 @@ public unsafe partial struct AgentLobby { [FieldOffset(0x12B8)] public long QueueTimeSinceLastUpdate; [FieldOffset(0x12C8)] public int QueuePosition; - [FieldOffset(0x12CD)] public sbyte HoveredCharacterIndex; // index in CharaSelectCharacterList + /// + /// Set to 60 when logout is requested, decremented by 1 each frame. + /// When it reaches 0, the game sets LobbyUIStage to 1. + /// + [FieldOffset(0x12CD)] public byte FramesUntilLogout; + + [FieldOffset(0x12CD), Obsolete("Use FramesUntilLogout instead.")] public sbyte HoveredCharacterIndex; // index in CharaSelectCharacterList [FieldOffset(0x12D0)] public ulong SelectedCharacterContentId; From 8ae36d955ade9b9c4b7913703149b2130d970f09 Mon Sep 17 00:00:00 2001 From: AtmoOmen Date: Sat, 3 Oct 2026 20:12:03 +0800 Subject: [PATCH 2/3] HandleLogout --- FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs b/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs index 7b5d7d34f..57287c5d7 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs @@ -105,8 +105,11 @@ public unsafe partial struct AgentLobby { [MemberFunction("40 53 56 57 41 57 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 8B 99")] public partial void UpdateLoginPosition(int newPosition); + /// + /// + /// [MemberFunction("40 56 41 56 41 57 48 83 EC 40 80 B9")] - public partial void HandleLogout(bool isExiting, byte a3); // a3 is some kind of frame-based countdown for the lobby + public partial void HandleLogout(bool isExiting, byte framesUntilLogout); } [GenerateInterop] From 5c0b93b947faf3a8e998e3307038bb73a67670ac Mon Sep 17 00:00:00 2001 From: Haselnussbomber Date: Wed, 7 Oct 2026 15:21:43 +0200 Subject: [PATCH 3/3] Rename field, change obsolete message --- FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs b/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs index 57287c5d7..f02d4cbe8 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentLobby.cs @@ -35,7 +35,8 @@ public unsafe partial struct AgentLobby { [FieldOffset(0xE30), FixedSizeArray] internal FixedSizeArray7 _unkUtf8Strings; [FieldOffset(0x1240)] public sbyte ServiceAccountIndex; - [FieldOffset(0x1241)] public byte SelectedCharacterIndex; + [FieldOffset(0x1241)] public sbyte DisplayedCharacterIndex; + [FieldOffset(0x1241), Obsolete("Renamed to DisplayedCharacterIndex")] public byte SelectedCharacterIndex; [FieldOffset(0x1248)] public ulong HoveredCharacterContentId; [FieldOffset(0x1250)] public byte DataCenter; @@ -73,7 +74,7 @@ public unsafe partial struct AgentLobby { /// [FieldOffset(0x12CD)] public byte FramesUntilLogout; - [FieldOffset(0x12CD), Obsolete("Use FramesUntilLogout instead.")] public sbyte HoveredCharacterIndex; // index in CharaSelectCharacterList + [FieldOffset(0x12CD), Obsolete("Use DisplayedCharacterIndex")] public sbyte HoveredCharacterIndex; // index in CharaSelectCharacterList [FieldOffset(0x12D0)] public ulong SelectedCharacterContentId;