using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Shared.Localizations; using Robust.Server.GameObjects; namespace Content.Server.GameTicking.Rules; public sealed class DragonRuleSystem : GameRuleSystem { [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly StationSystem _station = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(AfterAntagEntitySelected); } private void AfterAntagEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) { _antag.SendBriefing(args.EntityUid, MakeBriefing(args.EntityUid), null, null); } private string MakeBriefing(EntityUid dragon) { var direction = string.Empty; var dragonXform = Transform(dragon); var station = _station.GetStationInMap(dragonXform.MapID); EntityUid? stationGrid = null; if (TryComp(station, out var stationData)) stationGrid = _station.GetLargestGrid(stationData); if (stationGrid is not null) { var stationPosition = _transform.GetWorldPosition((EntityUid)stationGrid); var dragonPosition = _transform.GetWorldPosition(dragon); var vectorToStation = stationPosition - dragonPosition; direction = ContentLocalizationManager.FormatDirection(vectorToStation.GetDir()); } var briefing = Loc.GetString("dragon-role-briefing", ("direction", direction)); return briefing; } }