From f2c35979ab5496c2373fefe32448dfeb1f702c1c Mon Sep 17 00:00:00 2001 From: GiR_Zippo Date: Mon, 15 Jul 2024 16:11:19 +0200 Subject: [PATCH] Add login / shutdown --- .../GameFunctions/MiscGameFunctions.cs | 27 +++++++++++++++++++ HypnotoadPlugin/HypnotoadPlugin.csproj | 2 +- HypnotoadPlugin/IPC/IPCProvider.cs | 2 ++ HypnotoadPlugin/MessageEnums.cs | 6 +++++ HypnotoadPlugin/Utils/AutoSelect.cs | 12 +++++++++ HypnotoadPlugin/Utils/Langstrings.cs | 12 +++++++++ HypnotoadPlugin/Windows/MainWindow.cs | 8 ++++++ 7 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 HypnotoadPlugin/GameFunctions/MiscGameFunctions.cs diff --git a/HypnotoadPlugin/GameFunctions/MiscGameFunctions.cs b/HypnotoadPlugin/GameFunctions/MiscGameFunctions.cs new file mode 100644 index 0000000..3bd1343 --- /dev/null +++ b/HypnotoadPlugin/GameFunctions/MiscGameFunctions.cs @@ -0,0 +1,27 @@ +using HypnotoadPlugin.Offsets; +using System.Threading.Tasks; +using System.Threading; +using System; + +namespace HypnotoadPlugin.GameFunctions; + +public static class MiscGameFunctions +{ + public static void CharacterLogout() + { + Party.Instance.AcceptPartyInviteEnable(); + Api.Framework.RunOnTick(delegate + { + Chat.SendMessage("/logout"); + }, default(TimeSpan), 10, default(CancellationToken)); + } + + public static void GameShutdown() + { + Party.Instance.AcceptPartyInviteEnable(); + Api.Framework.RunOnTick(delegate + { + Chat.SendMessage("/shutdown"); + }, default(TimeSpan), 10, default(CancellationToken)); + } +} diff --git a/HypnotoadPlugin/HypnotoadPlugin.csproj b/HypnotoadPlugin/HypnotoadPlugin.csproj index f9b1776..e784910 100644 --- a/HypnotoadPlugin/HypnotoadPlugin.csproj +++ b/HypnotoadPlugin/HypnotoadPlugin.csproj @@ -10,7 +10,7 @@ BardMusicPlayer & LightAmp companion for enhanced functionality. https://github.com/GiR-Zippo/Hypnotoad-Plugin - 0.0.1.33 + 0.0.1.34 diff --git a/HypnotoadPlugin/IPC/IPCProvider.cs b/HypnotoadPlugin/IPC/IPCProvider.cs index 17e4ef5..627e21e 100644 --- a/HypnotoadPlugin/IPC/IPCProvider.cs +++ b/HypnotoadPlugin/IPC/IPCProvider.cs @@ -29,6 +29,8 @@ public IPCProvider(Hypnotoad toad) Register("PartyUnFollow", () => FollowSystem.StopFollow()); Register("MoveTo", (string data) => MovementFactory.Instance.MoveTo(data)); Register("MoveStop", () => MovementFactory.Instance.StopMovement()); + Register("CharacterLogout", () => MiscGameFunctions.CharacterLogout()); + Register("GameShutdown", () => MiscGameFunctions.GameShutdown()); } public void Dispose() => _disposeActions?.Invoke(); diff --git a/HypnotoadPlugin/MessageEnums.cs b/HypnotoadPlugin/MessageEnums.cs index b4dd996..0fa164a 100644 --- a/HypnotoadPlugin/MessageEnums.cs +++ b/HypnotoadPlugin/MessageEnums.cs @@ -14,6 +14,11 @@ public enum MessageType None = 0, Handshake = 1, Version = 2, + MoveCharToPosition = 3, + StopMovement = 4, + + ClientLogout = 5, + GameShutdown = 6, SetGfx = 10, //Get<->Set NameAndHomeWorld = 11, //Get @@ -43,6 +48,7 @@ public enum MessageType PartyEnterHouse = 63, PartyTeleport = 64, //Set (host?show menu : accept TP) PartyFollow = 65 //Set (name";"HomeWorldId) | "" unfollow + } public readonly struct ChatMessageChannelType diff --git a/HypnotoadPlugin/Utils/AutoSelect.cs b/HypnotoadPlugin/Utils/AutoSelect.cs index 13e2bcd..abd049f 100644 --- a/HypnotoadPlugin/Utils/AutoSelect.cs +++ b/HypnotoadPlugin/Utils/AutoSelect.cs @@ -75,6 +75,18 @@ protected unsafe void AddonSetup(AddonEvent eventType, AddonArgs addonInfo) Party.Instance.AcceptDisable(); return; } + else if (Langstrings.ConfirmLogout.Any(r => r.IsMatch(text))) + { + SelectYes(addon); + Party.Instance.AcceptDisable(); + return; + } + else if (Langstrings.ConfirmShutdown.Any(r => r.IsMatch(text))) + { + SelectYes(addon); + Party.Instance.AcceptDisable(); + return; + } } public static unsafe bool SelectYes(AtkUnitBase* addon) diff --git a/HypnotoadPlugin/Utils/Langstrings.cs b/HypnotoadPlugin/Utils/Langstrings.cs index 0e6e6d2..37083cd 100644 --- a/HypnotoadPlugin/Utils/Langstrings.cs +++ b/HypnotoadPlugin/Utils/Langstrings.cs @@ -52,4 +52,16 @@ public static class Langstrings new Regex(@"Voulez-vous vous téléporter vers la destination .* \?") ]; + + internal static readonly List ConfirmLogout = + [ + new Regex(@"Zum Titelbildschirm zurückkehren\?"), + new Regex(@"Se déconnecter et retourner à l'écram titre \?") + ]; + + internal static readonly List ConfirmShutdown = + [ + new Regex(@"Das Spiel beenden\?"), + new Regex(@"Se déconnecter et quitter le jeu \?") + ]; } diff --git a/HypnotoadPlugin/Windows/MainWindow.cs b/HypnotoadPlugin/Windows/MainWindow.cs index f6efe65..9f892f5 100644 --- a/HypnotoadPlugin/Windows/MainWindow.cs +++ b/HypnotoadPlugin/Windows/MainWindow.cs @@ -129,6 +129,8 @@ private void pipeClient_MessageReceived(object sender, ConnectionMessageEventArg case MessageType.ProgramChange: PerformActions.GuitarSwitchTone(Convert.ToInt32(inMsg.message)); break; + case MessageType.ClientLogout: + case MessageType.GameShutdown: case MessageType.Chat: case MessageType.Instrument: case MessageType.AcceptReply: @@ -175,6 +177,12 @@ public override void Update() var msg = qt.Dequeue(); switch (msg.msgType) { + case MessageType.ClientLogout: + MiscGameFunctions.CharacterLogout(); + break; + case MessageType.GameShutdown: + MiscGameFunctions.GameShutdown(); + break; case MessageType.Chat: var chatMessageChannelType = ChatMessageChannelType.ParseByChannelCode(msg.msgChannel); if (chatMessageChannelType.Equals(ChatMessageChannelType.None))