This reverts commit ca260ee666.
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server.Afk.Events;
|
using Content.Server.Afk.Events;
|
||||||
using Content.Server.Chat.Managers;
|
|
||||||
using Content.Server.GameTicking;
|
using Content.Server.GameTicking;
|
||||||
using Content.Shared.CCVar;
|
using Content.Shared.CCVar;
|
||||||
using Robust.Server.Player;
|
using Robust.Server.Player;
|
||||||
@@ -21,20 +20,17 @@ public sealed class AFKSystem : EntitySystem
|
|||||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||||
[Dependency] private readonly IGameTiming _timing = default!;
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
[Dependency] private readonly GameTicker _ticker = default!;
|
[Dependency] private readonly GameTicker _ticker = default!;
|
||||||
[Dependency] private readonly IChatManager _chatManager = default!;
|
|
||||||
|
|
||||||
private float _checkDelay;
|
private float _checkDelay;
|
||||||
private float _kickDelay;
|
|
||||||
private TimeSpan _checkTime;
|
private TimeSpan _checkTime;
|
||||||
|
|
||||||
private readonly Dictionary<IPlayerSession, TimeSpan> _afkPlayers = new();
|
private readonly HashSet<IPlayerSession> _afkPlayers = new();
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
_playerManager.PlayerStatusChanged += OnPlayerChange;
|
_playerManager.PlayerStatusChanged += OnPlayerChange;
|
||||||
_configManager.OnValueChanged(CCVars.AfkTime, SetAfkDelay, true);
|
_configManager.OnValueChanged(CCVars.AfkTime, SetAfkDelay, true);
|
||||||
_configManager.OnValueChanged(CCVars.AfkKickTime, SetAfkKickDelay, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetAfkDelay(float obj)
|
private void SetAfkDelay(float obj)
|
||||||
@@ -42,11 +38,6 @@ public sealed class AFKSystem : EntitySystem
|
|||||||
_checkDelay = obj;
|
_checkDelay = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetAfkKickDelay(float obj)
|
|
||||||
{
|
|
||||||
_kickDelay = obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnPlayerChange(object? sender, SessionStatusEventArgs e)
|
private void OnPlayerChange(object? sender, SessionStatusEventArgs e)
|
||||||
{
|
{
|
||||||
switch (e.NewStatus)
|
switch (e.NewStatus)
|
||||||
@@ -63,7 +54,6 @@ public sealed class AFKSystem : EntitySystem
|
|||||||
_afkPlayers.Clear();
|
_afkPlayers.Clear();
|
||||||
_playerManager.PlayerStatusChanged -= OnPlayerChange;
|
_playerManager.PlayerStatusChanged -= OnPlayerChange;
|
||||||
_configManager.UnsubValueChanged(CCVars.AfkTime, SetAfkDelay);
|
_configManager.UnsubValueChanged(CCVars.AfkTime, SetAfkDelay);
|
||||||
_configManager.UnsubValueChanged(CCVars.AfkKickTime, SetAfkKickDelay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(float frameTime)
|
public override void Update(float frameTime)
|
||||||
@@ -88,25 +78,18 @@ public sealed class AFKSystem : EntitySystem
|
|||||||
var pSession = (IPlayerSession) session;
|
var pSession = (IPlayerSession) session;
|
||||||
var isAfk = _afkManager.IsAfk(pSession);
|
var isAfk = _afkManager.IsAfk(pSession);
|
||||||
|
|
||||||
if (isAfk && _afkPlayers.TryAdd(pSession, _timing.CurTime))
|
if (isAfk && _afkPlayers.Add(pSession))
|
||||||
{
|
{
|
||||||
var ev = new AFKEvent(pSession);
|
var ev = new AFKEvent(pSession);
|
||||||
RaiseLocalEvent(ref ev);
|
RaiseLocalEvent(ref ev);
|
||||||
|
continue;
|
||||||
_chatManager.DispatchServerMessage(pSession, Loc.GetString("afk-system-kick-warning"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isAfk && _afkPlayers.Remove(pSession))
|
if (!isAfk && _afkPlayers.Remove(pSession))
|
||||||
{
|
{
|
||||||
var ev = new UnAFKEvent(pSession);
|
var ev = new UnAFKEvent(pSession);
|
||||||
RaiseLocalEvent(ref ev);
|
RaiseLocalEvent(ref ev);
|
||||||
}
|
continue;
|
||||||
|
|
||||||
if (isAfk &&
|
|
||||||
_afkPlayers.TryGetValue(pSession, out var startAfkTime) &&
|
|
||||||
_timing.CurTime - startAfkTime >= TimeSpan.FromSeconds(_kickDelay))
|
|
||||||
{
|
|
||||||
pSession.ConnectedClient.Disconnect( Loc.GetString("afk-system-kick-reason"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1161,12 +1161,6 @@ namespace Content.Shared.CCVar
|
|||||||
public static readonly CVarDef<float> AfkTime =
|
public static readonly CVarDef<float> AfkTime =
|
||||||
CVarDef.Create("afk.time", 60f, CVar.SERVERONLY);
|
CVarDef.Create("afk.time", 60f, CVar.SERVERONLY);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// How long seconds a client can go after being detected as AFK before being kicked.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly CVarDef<float> AfkKickTime =
|
|
||||||
CVarDef.Create("afk.kick_time", 600f, CVar.SERVERONLY);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IC
|
* IC
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
afk-system-kick-warning = You will be kicked for being AFK soon!
|
|
||||||
afk-system-kick-reason = You were kicked for being AFK!
|
|
||||||
Reference in New Issue
Block a user