-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'guard_sec' of https://github.com/AdventureTimeSS14/spac…
…e_station_ADT into guard_sec
- Loading branch information
Showing
39 changed files
with
68,845 additions
and
46 deletions.
There are no files selected for viewing
216 changes: 216 additions & 0 deletions
216
Content.Server/ADT/Administration/Commands/SendERTCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,216 @@ | ||
using Content.Server.Administration; | ||
using Content.Server.Administration.Logs; | ||
using Content.Server.AlertLevel; | ||
using Content.Server.Audio; | ||
using Content.Server.Chat.Systems; | ||
using Content.Server.Station.Systems; | ||
using Content.Shared.Administration; | ||
using Content.Shared.Database; | ||
using Robust.Server.GameObjects; | ||
using Robust.Server.Maps; | ||
using Robust.Server.Player; | ||
using Robust.Shared.Audio; | ||
using Robust.Shared.Console; | ||
using Robust.Shared.Map; | ||
using Robust.Shared.Player; | ||
using System.Numerics; | ||
using Content.Server.Chat.Managers; | ||
using Robust.Shared.ContentPack; | ||
|
||
namespace Content.Server.ADT.Administration.Commands; | ||
|
||
[AdminCommand(AdminFlags.Admin)] | ||
public sealed class SendERTCommand : IConsoleCommand | ||
{ | ||
[Dependency] private readonly IMapManager _mapManager = default!; | ||
[Dependency] private readonly IAdminLogManager _adminLogger = default!; | ||
[Dependency] private readonly IEntitySystemManager _system = default!; | ||
[Dependency] private readonly IEntityManager _entManager = default!; | ||
[Dependency] private readonly IPlayerManager _playerManager = default!; | ||
[Dependency] private readonly IChatManager _chat = default!; | ||
[Dependency] private readonly IResourceManager _resourceManager = default!; | ||
|
||
public string Command => "sendert"; | ||
public string Description => Loc.GetString("send-ert-description"); | ||
public string Help => Loc.GetString("send-ert-help"); | ||
public void Execute(IConsoleShell shell, string argStr, string[] args) | ||
{ | ||
#region Setup vars | ||
string audioPath = ""; | ||
string defaultGridPath = "/Maps/ADTMaps/Shuttles/ERT", defaultAudioPath = "/Audio/Corvax/Adminbuse"; | ||
string alertLevelCode = "gamma"; | ||
int volume = 0; | ||
bool isLoadGrid = false, isAnnounce = true, isPlayAudio = true, isSetAlertLevel = true, playAuidoFromAnnouncement = false; | ||
Color announceColor = Color.SeaBlue; | ||
#endregion | ||
|
||
var player = shell.Player; | ||
if (player?.AttachedEntity == null) // Are we the server's console? | ||
{ shell.WriteLine(Loc.GetString("shell-only-players-can-run-this-command")); return; } | ||
|
||
var stationUid = _system.GetEntitySystem<StationSystem>().GetOwningStation(player.AttachedEntity.Value); | ||
if (stationUid == null) | ||
{ | ||
shell.WriteLine(Loc.GetString("cmd-setalertlevel-invalid-grid")); | ||
return; | ||
} | ||
|
||
#region Set isAnnounce | ||
switch (args.Length) | ||
{ | ||
case 0: | ||
shell.WriteLine(Loc.GetString("send-ert-help")); | ||
return; | ||
case 1: | ||
isAnnounce = true; | ||
break; | ||
default: | ||
if (bool.TryParse(args[1].ToLower(), out var temp)) { isAnnounce = temp; } | ||
else { shell.WriteError(Loc.GetString($"send-ert-truefalse-error")); return; } | ||
break; | ||
} | ||
#endregion | ||
|
||
#region ERT type check | ||
switch (args[0].ToLower()) | ||
{ | ||
case "default": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "default-rev": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "security": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "engineer": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "medical": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "janitor": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "chaplain": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "cbun": | ||
audioPath = $"{defaultAudioPath}/yesert.ogg"; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "deathsquad": | ||
//alertLevelCode = "epsilon"; | ||
announceColor = Color.White; | ||
isLoadGrid = true; | ||
break; | ||
|
||
case "denial": | ||
audioPath = $"{defaultAudioPath}/noert.ogg"; | ||
isAnnounce = true; | ||
isLoadGrid = false; | ||
isSetAlertLevel = false; | ||
break; | ||
|
||
default: | ||
isLoadGrid = false; | ||
shell.WriteError(Loc.GetString("send-ert-erttype-error")); | ||
return; | ||
|
||
} | ||
#endregion | ||
|
||
#region Command's body | ||
if (isLoadGrid) // Create grid & map | ||
{ | ||
var gridPath = $"{defaultGridPath}/{args[0].ToLower()}.yml"; | ||
if (!_resourceManager.TryContentFileRead(gridPath, out var _)) | ||
{ | ||
shell.WriteError(Loc.GetString("send-ert-erttype-error-path")); | ||
shell.WriteError($"No map found: {gridPath}"); | ||
return; | ||
} | ||
|
||
var mapId = _mapManager.CreateMap(); | ||
_system.GetEntitySystem<MetaDataSystem>().SetEntityName(_mapManager.GetMapEntityId(mapId), Loc.GetString("sent-ert-map-name")); | ||
var girdOptions = new MapLoadOptions(); | ||
girdOptions.Offset = new Vector2(0, 0); | ||
girdOptions.Rotation = Angle.FromDegrees(0); | ||
_system.GetEntitySystem<MapLoaderSystem>().Load(mapId, gridPath, girdOptions); | ||
shell.WriteLine($"Карта {gridPath} успешно загружена! :з"); | ||
_chat.SendAdminAlert($"Админ {player.Name} вызвал {args[0].ToLower()}. Карте 'Сектор патрулирования' было присовино ID: {mapId}. Точка телепортации для призраков появилась на шаттле."); | ||
} | ||
|
||
if (isAnnounce) // Write announce & play audio | ||
{ | ||
if (isSetAlertLevel) | ||
{ | ||
if (stationUid == null) { shell.WriteLine(Loc.GetString("sent-ert-invalid-grid")); return; } //We are on station? | ||
_system.GetEntitySystem<AlertLevelSystem>().SetLevel(stationUid.Value, alertLevelCode, false, true, true, true); | ||
} | ||
|
||
if (isPlayAudio) | ||
{ | ||
Filter filter = Filter.Empty().AddAllPlayers(_playerManager); | ||
|
||
var audioOption = AudioParams.Default; | ||
audioOption = audioOption.WithVolume(volume); | ||
|
||
_entManager.System<ServerGlobalSoundSystem>().PlayAdminGlobal(filter, audioPath, audioOption, true); | ||
} | ||
|
||
_system.GetEntitySystem<ChatSystem>().DispatchGlobalAnnouncement(Loc.GetString($"ert-send-{args[0].ToLower()}-announcement"), Loc.GetString($"ert-send-{args[0].ToLower()}-announcer"), playSound: playAuidoFromAnnouncement, colorOverride: announceColor); | ||
} | ||
#endregion | ||
|
||
_adminLogger.Add(LogType.Action, LogImpact.High, $"{player} send ERT. Type: {args[0]}. Is announce: {isAnnounce}"); | ||
} | ||
|
||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args) | ||
{ | ||
if (args.Length == 1) | ||
{ | ||
var type = new CompletionOption[] | ||
{ | ||
new("Default", Loc.GetString("send-ert-hint-type-default")), | ||
new("Default-rev", Loc.GetString("send-ert-hint-type-default-rev")), | ||
new("Security", Loc.GetString("send-ert-hint-type-security")), | ||
new("Engineer", Loc.GetString("send-ert-hint-type-engineer")), | ||
new("Medical", Loc.GetString("send-ert-hint-type-medical")), | ||
new("Janitor", Loc.GetString("send-ert-hint-type-janitor")), | ||
new("Chaplain", Loc.GetString("send-ert-hint-type-chaplain")), | ||
new("CBUN", Loc.GetString("send-ert-hint-type-cbrn")), | ||
new("DeathSquad", Loc.GetString("send-ert-hint-type-deathsquad")), | ||
new("Denial", Loc.GetString("send-ert-hint-type-denial")), | ||
}; | ||
return CompletionResult.FromHintOptions(type, Loc.GetString("send-ert-hint-type")); | ||
} | ||
|
||
if (args.Length == 2) | ||
{ | ||
var isAnnounce = new CompletionOption[] | ||
{ | ||
new("true", Loc.GetString("send-ert-hint-isannounce-true")), | ||
new("false", Loc.GetString("send-ert-hint-isannounce-false")), | ||
}; | ||
return CompletionResult.FromHintOptions(isAnnounce, Loc.GetString("send-ert-hint-isannounce")); | ||
} | ||
|
||
return CompletionResult.Empty; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# Command | ||
send-ert-description = Вызывает ОБР заданного типа. Вы должны находиться на станции. | ||
send-ert-help = sendert <тип ОБР> (объявляют себя? По умолчанию true) | ||
# Errors | ||
send-ert-truefalse-error = Вторая переменная не соответствует ни true, ни false | ||
send-ert-erttype-error = Обнаружен неизвестный отряд ОБР | ||
sent-ert-invalid-grid = Вы находитесь не на станции. Для запуска команды ваш персонаж должен находится на гриде станции | ||
send-ert-erttype-error-path = Неизвестный путь к шаттлу или он отстуствует | ||
# Map name | ||
sent-ert-map-name = Сектор патруля | ||
# ERT type: default | ||
ert-send-default-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-default-announcer = Центральное командование | ||
# ERT type: default-rev | ||
ert-send-default-rev-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-default-rev-announcer = Центральное командование | ||
# ERT type: security | ||
ert-send-security-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-security-announcer = Центральное командование | ||
# ERT type: engineer | ||
ert-send-engineer-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-engineer-announcer = Центральное командование | ||
# ERT type: medical | ||
ert-send-medical-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-medical-announcer = Центральное командование | ||
# ERT type: janitor | ||
ert-send-janitor-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-janitor-announcer = Центральное командование | ||
# ERT type: chaplain | ||
ert-send-chaplain-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-chaplain-announcer = Центральное командование | ||
# ERT type: cbun | ||
ert-send-cbun-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос одобрен. Отряд будет подготовлен и отправлен в кротчайшие сроки. | ||
ert-send-cbun-announcer = Центральное командование | ||
# ERT type: deathsquad | ||
ert-send-deathsquad-announcement = Приказ Центрального командования. Экипаж станции должен оставаться на своих местах. Ожидайте шаттл эвакуации. | ||
ert-send-deathsquad-announcer = Центральное командование | ||
# ERT type: denial | ||
ert-send-denial-announcement = Внимание! Мы получили запрос на отряд быстрого реагирования. Запрос отклонён. Попытайтесь решить проблемы своими силами. | ||
ert-send-denial-announcer = Центральное командование | ||
# Hints | ||
send-ert-hint-type = Тип ОБР | ||
send-ert-hint-type-default = Стандартный отряд(Против ЯО) | ||
send-ert-hint-type-default-rev = Стандартный отряд(Против бунтов) | ||
send-ert-hint-type-security = Отряд СБ ОБР | ||
send-ert-hint-type-engineer = Отряд инженеров ОБР | ||
send-ert-hint-type-medical = Отряд медиков ОБР | ||
send-ert-hint-type-janitor = Отряд уборщиков ОБР | ||
send-ert-hint-type-chaplain = Отряд священников ОБР | ||
send-ert-hint-type-cbrn = Отряд РХБЗЗ | ||
send-ert-hint-type-deathsquad = Отряд Эскадрона смерти | ||
send-ert-hint-type-denial = Отказ в вызове ОБР | ||
send-ert-hint-isannounce = Объявляют себя? | ||
send-ert-hint-isannounce-true = Да | ||
send-ert-hint-isannounce-false = Нет |
Oops, something went wrong.