diff --git a/KitchenSink/Commands/CharacterSwitch.cs b/KitchenSink/Commands/CharacterSwitch.cs index 7bdb4d6..6cd994b 100644 --- a/KitchenSink/Commands/CharacterSwitch.cs +++ b/KitchenSink/Commands/CharacterSwitch.cs @@ -55,11 +55,18 @@ internal sealed class CharacterSwitch : IDisposable { unsafe { - UIInputData* uiInputData = UIInputData.Instance(); - MouseButtonFlags mouseButtonFlags = - uiInputData != null ? uiInputData->MouseButtonReleasedFlags : MouseButtonFlags.LBUTTON; - var target = FindCharacter(mouseButtonFlags.HasFlag(MouseButtonFlags.RBUTTON) ? -1 : 1); - SwitchCharacter(target); + uint? homeWorldId = _clientState.LocalPlayer?.HomeWorld.Id; + uint? currentWorldId = _clientState.LocalPlayer?.CurrentWorld.Id; + if (homeWorldId == currentWorldId) + { + UIInputData* uiInputData = UIInputData.Instance(); + MouseButtonFlags mouseButtonFlags = + uiInputData != null ? uiInputData->MouseButtonReleasedFlags : MouseButtonFlags.LBUTTON; + var target = FindCharacter(mouseButtonFlags.HasFlag(MouseButtonFlags.RBUTTON) ? -1 : 1); + SwitchCharacter(target); + } + else + _commandManager.ProcessCommand("/li"); } }; @@ -167,23 +174,32 @@ internal sealed class CharacterSwitch : IDisposable private void UpdateDtrBar() { string? currentWorld = _clientState.LocalPlayer?.CurrentWorld.GameData?.Name?.ToString(); + string? homeWorld = _clientState.LocalPlayer?.HomeWorld.GameData?.Name?.ToString(); var characterIds = _autoRetainerApi.GetRegisteredCharacters() ?? new(); - var characterIdsOnCurrentWorld = characterIds - .Where(x => _autoRetainerApi.GetOfflineCharacterData(x)?.World == currentWorld).ToList(); + var characterIdsOnHomeWorld = characterIds + .Where(x => _autoRetainerApi.GetOfflineCharacterData(x)?.World == homeWorld).ToList(); - SeIconChar seIconChar = SeIconChar.Instance1 + characterIdsOnCurrentWorld.IndexOf(_clientState.LocalContentId); - _dtrBarEntry.Text = seIconChar.ToIconString(); + SeIconChar seIconChar = SeIconChar.Instance1 + characterIdsOnHomeWorld.IndexOf(_clientState.LocalContentId); + if (currentWorld == homeWorld) + { + _dtrBarEntry.Text = seIconChar.ToIconString(); - var previous = FindCharacter(-1); - var next = FindCharacter(1); - if (previous != null && next != null) - _dtrBarEntry.Tooltip = $"Prev: {previous.Name}\nNext: {next.Name}"; - else if (previous != null) - _dtrBarEntry.Tooltip = $"Prev: {previous.Name}"; - else if (next != null) - _dtrBarEntry.Tooltip = $"Next: {next.Name}"; + var previous = FindCharacter(-1); + var next = FindCharacter(1); + if (previous != null && next != null) + _dtrBarEntry.Tooltip = $"Prev: {previous.Name}\nNext: {next.Name}"; + else if (previous != null) + _dtrBarEntry.Tooltip = $"Prev: {previous.Name}"; + else if (next != null) + _dtrBarEntry.Tooltip = $"Next: {next.Name}"; + else + _dtrBarEntry.Tooltip = null; + } else - _dtrBarEntry.Tooltip = null; + { + _dtrBarEntry.Text = $"{homeWorld} {seIconChar.ToIconString()}"; + _dtrBarEntry.Tooltip = $"Return to {homeWorld}"; + } } public void Dispose() diff --git a/KitchenSink/KitchenSink.csproj b/KitchenSink/KitchenSink.csproj index 1a70f7a..d4e368b 100644 --- a/KitchenSink/KitchenSink.csproj +++ b/KitchenSink/KitchenSink.csproj @@ -1,7 +1,7 @@  net8.0-windows - 0.1 + 0.2 12 enable true diff --git a/KitchenSink/KitchenSink.json b/KitchenSink/KitchenSink.json index e8a1d25..523d3d2 100644 --- a/KitchenSink/KitchenSink.json +++ b/KitchenSink/KitchenSink.json @@ -4,5 +4,6 @@ "Punchline": "A plugin for things that aren't worth their own plugins.", "Description": "A plugin for things that aren't worth their own plugins; see commands for details.", "Tags": ["character switch"], + "RepoUrl": "https://git.carvel.li/liza/KitchenSink", "IconUrl": "https://plugins.carvel.li/icons/KitchenSink.png" }