]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
PlayerPanel Follow button (#36466)
authorErrant <35878406+Errant-4@users.noreply.github.com>
Sat, 12 Apr 2025 20:00:46 +0000 (22:00 +0200)
committerGitHub <noreply@github.com>
Sat, 12 Apr 2025 20:00:46 +0000 (22:00 +0200)
* Follow button

* remove event stuff

Content.Client/Administration/UI/PlayerPanel/PlayerPanel.xaml
Content.Client/Administration/UI/PlayerPanel/PlayerPanel.xaml.cs
Content.Client/Administration/UI/PlayerPanel/PlayerPanelEui.cs
Content.Server/Administration/PlayerPanelEui.cs
Content.Shared/Administration/PlayerPanelEuiState.cs
Resources/Locale/en-US/administration/ui/player-panel.ftl

index 8feec273b471a0636cadd53a2f8b1a98b0191ecf..4791dcf6aaefe0410907ca949e552f19c7ba31ff 100644 (file)
        <Label Name="SharedConnections"/>
 
        <BoxContainer Align="Center">
-           <GridContainer Rows="5">
+           <GridContainer Rows="6">
             <Button Name="NotesButton" Text="{Loc player-panel-show-notes}" SetWidth="136" Disabled="True"/>
             <Button Name="AhelpButton" Text="{Loc player-panel-help}" Disabled="True"/>
             <Button Name="FreezeButton" Text = "{Loc player-panel-freeze}" Disabled="True"/>
             <controls:ConfirmButton Name="KickButton" Text="{Loc player-panel-kick}" Disabled="True"/>
             <controls:ConfirmButton Name="DeleteButton" Text="{Loc player-panel-delete}" Disabled="True"/>
+            <Button Name="FollowButton" Text="{Loc player-panel-follow}"/>
             <Button Name="ShowBansButton" Text="{Loc player-panel-show-bans}" SetWidth="136" Disabled="True"/>
             <Button Name="LogsButton" Text="{Loc player-panel-logs}" Disabled="True"/>
             <Button Name="FreezeAndMuteToggleButton" Text="{Loc player-panel-freeze-and-mute}" Disabled="True"/>
index 1674989c2791944404d8ac4b2ffcd0adedd6fde1..14311851b450545f59d25568aa872952e18e476f 100644 (file)
@@ -2,7 +2,6 @@ using Content.Client.Administration.Managers;
 using Content.Client.UserInterface.Controls;
 using Content.Shared.Administration;
 using Robust.Client.AutoGenerated;
-using Robust.Client.UserInterface;
 using Robust.Client.UserInterface.XAML;
 using Robust.Shared.Network;
 using Robust.Shared.Utility;
@@ -21,6 +20,7 @@ public sealed partial class PlayerPanel : FancyWindow
     public event Action<string?>? OnKick;
     public event Action<NetUserId?>? OnOpenBanPanel;
     public event Action<NetUserId?, bool>? OnWhitelistToggle;
+    public event Action? OnFollow;
     public event Action? OnFreezeAndMuteToggle;
     public event Action? OnFreeze;
     public event Action? OnLogs;
@@ -47,6 +47,7 @@ public sealed partial class PlayerPanel : FancyWindow
                 OnWhitelistToggle?.Invoke(TargetPlayer, _isWhitelisted);
                 SetWhitelisted(!_isWhitelisted);
             };
+            FollowButton.OnPressed += _ => OnFollow?.Invoke();
             FreezeButton.OnPressed += _ => OnFreeze?.Invoke();
             FreezeAndMuteToggleButton.OnPressed += _ => OnFreezeAndMuteToggle?.Invoke();
             LogsButton.OnPressed += _ => OnLogs?.Invoke();
index 87ce75604632aba1ec3781c883dbabe0a38b98b6..2129fa5b0c19da749899816f0098d20f793e20a6 100644 (file)
@@ -38,6 +38,7 @@ public sealed class PlayerPanelEui : BaseEui
         PlayerPanel.OnLogs += () => SendMessage(new PlayerPanelLogsMessage());
         PlayerPanel.OnRejuvenate += () => SendMessage(new PlayerPanelRejuvenationMessage());
         PlayerPanel.OnDelete+= () => SendMessage(new PlayerPanelDeleteMessage());
+        PlayerPanel.OnFollow += () => SendMessage(new PlayerPanelFollowMessage());
 
         PlayerPanel.OnClose += () => SendMessage(new CloseEuiMessage());
     }
index 6c30488886622a77553ea24e71088ddf2fc1940d..31acd33bf120c2a3a231e6781e9502b3fc86743d 100644 (file)
@@ -8,6 +8,7 @@ using Content.Server.EUI;
 using Content.Shared.Administration;
 using Content.Shared.Database;
 using Content.Shared.Eui;
+using Content.Shared.Follower;
 using Robust.Server.Player;
 using Robust.Shared.Player;
 
@@ -33,11 +34,13 @@ public sealed class PlayerPanelEui : BaseEui
     private bool _frozen;
     private bool _canFreeze;
     private bool _canAhelp;
+    private FollowerSystem _follower;
 
     public PlayerPanelEui(LocatedPlayerData player)
     {
         IoCManager.InjectDependencies(this);
         _targetPlayer = player;
+        _follower = _entity.System<FollowerSystem>();
     }
 
     public override void Opened()
@@ -141,6 +144,16 @@ public sealed class PlayerPanelEui : BaseEui
                     _entity.DeleteEntity(session.AttachedEntity);
                 }
                 break;
+            case PlayerPanelFollowMessage:
+                if (!_admins.HasAdminFlag(Player, AdminFlags.Admin) ||
+                    !_player.TryGetSessionById(_targetPlayer.UserId, out session) ||
+                    session.AttachedEntity == null ||
+                    Player.AttachedEntity is null ||
+                    session.AttachedEntity == Player.AttachedEntity)
+                    return;
+
+                _follower.StartFollowingEntity(Player.AttachedEntity.Value, session.AttachedEntity.Value);
+                break;
         }
     }
 
index 186b992e4ef9fe815e3f3fde03c39328787cdc66..8942cc8aab5fd6d229cac31ec4f691d72454565c 100644 (file)
@@ -1,12 +1,12 @@
 using Content.Shared.Eui;
 using Robust.Shared.Network;
 using Robust.Shared.Serialization;
-using YamlDotNet.Serialization.Callbacks;
 
 namespace Content.Shared.Administration;
 
 [Serializable, NetSerializable]
-public sealed class PlayerPanelEuiState(NetUserId guid,
+public sealed class PlayerPanelEuiState(
+    NetUserId guid,
     string username,
     TimeSpan playtime,
     int? totalNotes,
@@ -52,3 +52,6 @@ public sealed class PlayerPanelDeleteMessage : EuiMessageBase;
 
 [Serializable, NetSerializable]
 public sealed class PlayerPanelRejuvenationMessage: EuiMessageBase;
+
+[Serializable, NetSerializable]
+public sealed class PlayerPanelFollowMessage: EuiMessageBase;
index cfb014948d55b202c717dd7c53076ab32e71aafc..f2d89fe2c2edd859ccca2bf0990b24104341e13b 100644 (file)
@@ -21,3 +21,4 @@ player-panel-delete = Delete
 player-panel-rejuvenate = Rejuvenate
 player-panel-false = False
 player-panel-true = True
+player-panel-follow = Follow