From e178961cd251573362324a169713ca996eac388c Mon Sep 17 00:00:00 2001
From: Hero010h <163765999+Hero010h@users.noreply.github.com>
Date: Sat, 4 Jan 2025 22:15:12 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=BE=D0=BC=D0=B0=D0=B5=D1=82=20=D0=BF?=
=?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20=D0=BD=D0=B0=D0=BA=D1=80=D1=83?=
=?UTF-8?q?=D1=82=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../{ => HoursPanel}/HoursPanel.xaml | 1 +
.../{ => HoursPanel}/HoursPanel.xaml.cs | 36 +++++++++++++++++--
.../HoursPanel/HoursPanelSystem.cs | 23 ++++++++++++
.../HoursPanel/HoursPanelSystem.cs | 26 ++++++++++++++
.../HoursPanelSystem/HoursPanelMessage.cs | 17 +++++++++
.../SharedHoursPanelSystem.cs | 18 ++++++++++
6 files changed, 119 insertions(+), 2 deletions(-)
rename Content.Client/_White/Administration/{ => HoursPanel}/HoursPanel.xaml (96%)
rename Content.Client/_White/Administration/{ => HoursPanel}/HoursPanel.xaml.cs (73%)
create mode 100644 Content.Client/_White/Administration/HoursPanel/HoursPanelSystem.cs
create mode 100644 Content.Server/_White/Administration/HoursPanel/HoursPanelSystem.cs
create mode 100644 Content.Shared/_White/Administration/HoursPanelSystem/HoursPanelMessage.cs
create mode 100644 Content.Shared/_White/Administration/HoursPanelSystem/SharedHoursPanelSystem.cs
diff --git a/Content.Client/_White/Administration/HoursPanel.xaml b/Content.Client/_White/Administration/HoursPanel/HoursPanel.xaml
similarity index 96%
rename from Content.Client/_White/Administration/HoursPanel.xaml
rename to Content.Client/_White/Administration/HoursPanel/HoursPanel.xaml
index 6ea7218d98..65f75b1ba6 100644
--- a/Content.Client/_White/Administration/HoursPanel.xaml
+++ b/Content.Client/_White/Administration/HoursPanel/HoursPanel.xaml
@@ -14,6 +14,7 @@
+
diff --git a/Content.Client/_White/Administration/HoursPanel.xaml.cs b/Content.Client/_White/Administration/HoursPanel/HoursPanel.xaml.cs
similarity index 73%
rename from Content.Client/_White/Administration/HoursPanel.xaml.cs
rename to Content.Client/_White/Administration/HoursPanel/HoursPanel.xaml.cs
index c51cedc28d..c00cb8acbd 100644
--- a/Content.Client/_White/Administration/HoursPanel.xaml.cs
+++ b/Content.Client/_White/Administration/HoursPanel/HoursPanel.xaml.cs
@@ -7,6 +7,8 @@ using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using static Robust.Client.UserInterface.Controls.LineEdit;
+using Content.Shared._White.Administration;
+using Robust.Client.UserInterface.Controls;
namespace Content.Client._White.Administration;
@@ -16,19 +18,43 @@ public sealed partial class HoursPanel : DefaultWindow
{
public HoursPanel()
{
+ var owner = new HoursPanelSystem(this);
RobustXamlLoader.Load(this);
var roles = new Dictionary();
PlayerNameLine.OnTextChanged += _ => OnNamesChanged();
+ PlayerNameLine.OnTextEntered += _ => OnNameSubmited(owner, roles);
PlayerList.OnSelectionChanged += OnPlayerSelectionChanged;
HourButton.OnPressed += _ => AddMinutes(60);
MinutesLine.OnTextChanged += UpdateButtonsText;
- RoleOption.OnItemSelected += args => RoleOption.SelectId(args.Id);
+ RoleOption.OnItemSelected += args => OnItemSelected(args, owner, roles);
SubmitButton.OnPressed += _ => OnSubmitButtonOnPressed(roles);
SaveButton.OnPressed += _ => OnSaveButtonOnPressed();
OnNamesChanged();
InitRoleList(roles);
-
}
+
+ public void UpdateTime(TimeSpan? time)
+ {
+ if (time == null)
+ TimeDisplayer.Text = $"Время игры: нет данных";
+ else
+ TimeDisplayer.Text = $"Время игры: {time}";
+ }
+
+ private void OnItemSelected(OptionButton.ItemSelectedEventArgs args, HoursPanelSystem owner, Dictionary roles)
+ {
+ RoleOption.SelectId(args.Id);
+ OnNameSubmited(owner, roles);
+ }
+
+ private void OnNameSubmited(HoursPanelSystem owner, Dictionary roles)
+ {
+ if (string.IsNullOrWhiteSpace(PlayerNameLine.Text))
+ return;
+
+ owner.SendPlayerTimeRequest(new HoursPanelMessage(PlayerNameLine.Text, roles[RoleOption.SelectedId]));
+ }
+
private void InitRoleList(Dictionary roles)
{
var roleInd = 0;
@@ -101,4 +127,10 @@ public sealed partial class HoursPanel : DefaultWindow
$"playtime_save {PlayerNameLine.Text}");
SaveButton.Disabled = true;
}
+ private void GetPlayerTime()
+ {
+ if (string.IsNullOrWhiteSpace(PlayerNameLine.Text))
+ return;
+
+ }
}
diff --git a/Content.Client/_White/Administration/HoursPanel/HoursPanelSystem.cs b/Content.Client/_White/Administration/HoursPanel/HoursPanelSystem.cs
new file mode 100644
index 0000000000..f58f182490
--- /dev/null
+++ b/Content.Client/_White/Administration/HoursPanel/HoursPanelSystem.cs
@@ -0,0 +1,23 @@
+using Content.Shared._White.Administration;
+
+namespace Content.Client._White.Administration;
+
+public sealed class HoursPanelSystem : SharedHoursPanelSystem
+{
+ public HoursPanel Panel { get; }
+ public HoursPanelSystem(HoursPanel panel)
+ {
+ Panel = panel;
+ }
+
+ protected override void OnHoursPanelMessage(HoursPanelMessage message, EntitySessionEventArgs eventArgs)
+ {
+ if (message.Time != null)
+ Panel.UpdateTime(message.Time);
+ }
+
+ public void SendPlayerTimeRequest(HoursPanelMessage message)
+ {
+ RaiseNetworkEvent(message);
+ }
+}
diff --git a/Content.Server/_White/Administration/HoursPanel/HoursPanelSystem.cs b/Content.Server/_White/Administration/HoursPanel/HoursPanelSystem.cs
new file mode 100644
index 0000000000..0c9d20122c
--- /dev/null
+++ b/Content.Server/_White/Administration/HoursPanel/HoursPanelSystem.cs
@@ -0,0 +1,26 @@
+using Content.Shared._White.Administration;
+using Robust.Server.Player;
+using Content.Server.Players.PlayTimeTracking;
+
+namespace Content.Server._White.Administration;
+
+public sealed class HoursPanelSystem : SharedHoursPanelSystem
+{
+ [Dependency] private readonly IPlayerManager _playerManager = default!;
+ [Dependency] private readonly IPlayTimeTrackingManager _playTimeTracking = default!;
+ protected override void OnHoursPanelMessage(HoursPanelMessage message, EntitySessionEventArgs eventArgs)
+ {
+ if (message.Time != null)
+ return;
+
+ if (_playerManager.TryGetSessionByUsername(message.PlayerCKey, out var player))
+ return;
+
+ if (message.Job == "Overall")
+ {
+ var timer = _playTimeTracking.GetOverallPlaytime(player!);
+ RaiseNetworkEvent(new HoursPanelMessage(message.PlayerCKey, message.Job, timer));
+ return;
+ }
+ }
+}
diff --git a/Content.Shared/_White/Administration/HoursPanelSystem/HoursPanelMessage.cs b/Content.Shared/_White/Administration/HoursPanelSystem/HoursPanelMessage.cs
new file mode 100644
index 0000000000..b173469a4d
--- /dev/null
+++ b/Content.Shared/_White/Administration/HoursPanelSystem/HoursPanelMessage.cs
@@ -0,0 +1,17 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._White.Administration;
+
+[Serializable, NetSerializable]
+public sealed class HoursPanelMessage : EntityEventArgs
+{
+ public string PlayerCKey { get; }
+ public string Job { get; }
+ public TimeSpan? Time { get; }
+ public HoursPanelMessage(string playerCKey, string job, TimeSpan? time = null)
+ {
+ PlayerCKey = playerCKey;
+ Job = job;
+ Time = time;
+ }
+}
diff --git a/Content.Shared/_White/Administration/HoursPanelSystem/SharedHoursPanelSystem.cs b/Content.Shared/_White/Administration/HoursPanelSystem/SharedHoursPanelSystem.cs
new file mode 100644
index 0000000000..95f70a71e9
--- /dev/null
+++ b/Content.Shared/_White/Administration/HoursPanelSystem/SharedHoursPanelSystem.cs
@@ -0,0 +1,18 @@
+using Robust.Shared.Network;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._White.Administration;
+
+public abstract class SharedHoursPanelSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeNetworkEvent(OnHoursPanelMessage);
+ }
+
+ protected virtual void OnHoursPanelMessage(HoursPanelMessage message, EntitySessionEventArgs eventArgs)
+ {
+ }
+}