-
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.
[ADMIN] new command "sendert" (#690)
## Описание PR <!-- Что вы изменили в этом пулл реквесте? --> ## Почему / Баланс *чтобы не было глупых вопросов, а как вызвать ОБР* ## Техническая информация <!-- Если речь идет об изменении кода, кратко изложите на высоком уровне принцип работы нового кода. Это облегчает рецензирование.- --> ## Медиа ![image](https://github.com/user-attachments/assets/7c8f5653-3f67-416a-9004-b1f614c39866) ![image](https://github.com/user-attachments/assets/c31da81b-3e54-4600-be9c-de12b185ea14) ## Требования <!-- В связи с наплывом ПР'ов нам необходимо убедиться, что ПР'ы следуют правильным рекомендациям. Пожалуйста, уделите время прочтению, если делаете пулл реквест (ПР) впервые. Отметьте поля ниже, чтобы подтвердить, что Вы действительно видели их (поставьте X в скобках, например [X]): --> - [ ] Я прочитал(а) и следую [Руководство по созданию пулл реквестов](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html). Я понимаю, что в противном случае мой ПР может быть закрыт по усмотрению мейнтейнера. - [ ] Я добавил скриншоты/видео к этому пулл реквесту, демонстрирующие его изменения в игре, **или** этот пулл реквест не требует демонстрации в игре ## Критические изменения <!-- Перечислите все критические изменения, включая изменения пространства имён, публичных классов/методов/полей, переименования прототипов, и предоставьте инструкции по их исправлению. --> **Чейнджлог** :cl: Шрёдька - add: Добавлена новая команда sendert для вызова ОБР.
- Loading branch information
1 parent
63c7cd3
commit ab4f930
Showing
15 changed files
with
68,708 additions
and
33 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
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 = Нет |
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
Oops, something went wrong.