6
2026-01-24 12:49:55 +03:00

74 lines
2.5 KiB
C#

using System.Numerics;
using Content.Server.Players.PlayTimeTracking;
using Content.Server.Radio.EntitySystems;
using Content.Shared._NF.CCVar;
using Content.Shared.Radio;
using Robust.Shared.Map;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
namespace Content.Server.GameTicking; // Intentionally colliding namespaces to extend the class
public sealed partial class GameTicker
{
[Dependency] private readonly PlayTimeTrackingManager _playTimeManager = default!;
[Dependency] private readonly RadioSystem _radio = default!;
private bool _newPlayerGreetingEnabled = true;
private TimeSpan _newPlayerGreetingMaxTime = TimeSpan.FromMinutes(180);
private ProtoId<RadioChannelPrototype> _newPlayerRadioChannel = "Service";
private EntProtoId _greetingRadioSource = "GreetingRadioSource";
private EntityUid _greetingEntity = EntityUid.Invalid;
public void NFInitialize()
{
Subs.CVar(_cfg, NFCCVars.NewPlayerRadioGreetingEnabled, e => _newPlayerGreetingEnabled = e, true);
Subs.CVar(_cfg, NFCCVars.NewPlayerRadioGreetingMaxPlaytime, e => _newPlayerGreetingMaxTime = TimeSpan.FromMinutes(e), true);
Subs.CVar(_cfg, NFCCVars.NewPlayerRadioGreetingChannel, SetChannel, true);
}
private void SetChannel(string channel)
{
if (_prototypeManager.HasIndex<RadioChannelPrototype>(channel))
_newPlayerRadioChannel = channel;
}
private void NFRoundStarted()
{
_greetingEntity = Spawn(_greetingRadioSource, new MapCoordinates(Vector2.Zero, DefaultMap));
}
private void NFRoundRestartCleanup()
{
if (_greetingEntity != EntityUid.Invalid)
{
QueueDel(_greetingEntity);
_greetingEntity = EntityUid.Invalid;
}
}
private void HandleGreetingMessage(ICommonSession session, EntityUid mob, EntityUid station)
{
if (!_newPlayerGreetingEnabled)
return;
TimeSpan playtime;
try
{
playtime = _playTimeManager.GetOverallPlaytime(session);
}
catch (InvalidOperationException)
{
return;
}
if (playtime < _newPlayerGreetingMaxTime)
{
_radio.SendRadioMessage(_greetingEntity, Loc.GetString("latejoin-arrival-new-player-announcement",
("character", MetaData(mob).EntityName),
("station", station)),
_newPlayerRadioChannel,
_greetingEntity);
}
}
}