Skip to content

Commit

Permalink
Merge branch 'guard_sec' of https://github.com/AdventureTimeSS14/spac…
Browse files Browse the repository at this point in the history
…e_station_ADT into guard_sec
  • Loading branch information
Schrodinger71 committed Oct 29, 2024
2 parents e5b3df9 + dfc882a commit 29ac0de
Show file tree
Hide file tree
Showing 39 changed files with 68,845 additions and 46 deletions.
216 changes: 216 additions & 0 deletions Content.Server/ADT/Administration/Commands/SendERTCommand.cs
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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Content.Shared.Verbs;
using Robust.Shared.Network;
using Robust.Shared.Player;
using Robust.Shared.Timing;

namespace Content.Shared.Chemistry.EntitySystems;

Expand All @@ -21,6 +22,7 @@ public sealed class SolutionTransferSystem : EntitySystem
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solution = default!;
[Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; // ADT-Tweak

/// <summary>
/// Default transfer amounts for the set-transfer verb.
Expand Down Expand Up @@ -101,7 +103,7 @@ private void AddSetTransferVerbs(Entity<SolutionTransferComponent> ent, ref GetV

private void OnAfterInteract(Entity<SolutionTransferComponent> ent, ref AfterInteractEvent args)
{
if (!args.CanReach || args.Target is not {} target)
if (!args.CanReach || args.Target is not {} target || !_gameTiming.IsFirstTimePredicted) // ADT-Tweak
return;

var (uid, comp) = ent;
Expand Down
5 changes: 5 additions & 0 deletions Resources/Audio/Items/Toys/attributions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,8 @@
license: "CC0-1.0"
copyright: "Created by xprospero for ss14"
source: "https://github.com/space-wizards/space-station-14/blob/master/Resources/Audio/Items/Toys/rubber_chicken_3.ogg"

- files: ["scaryswings.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Music made by MasterSwordRemix, from Spooky Month animation made by SrPelo"
source: "https://www.youtube.com/MasterSwordRemix"
Binary file added Resources/Audio/Items/Toys/scaryswings.ogg
Binary file not shown.
41 changes: 41 additions & 0 deletions Resources/Changelog/1ChangelogADT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3818,3 +3818,44 @@ Entries:
законов!, type: Add}
time: '2024-10-27T09:04:19Z'
id: 475
- author: Rip_Zoro
changes:
- {message: Добавлен перевод ионной винтовки., type: Add}
- {message: Добавлен перевод валюты аплинка ОБР., type: Add}
time: '2024-10-27T21:48:43Z'
id: 476
- author: Tamioki
changes:
- {message: Добавлена игрушка Скида и Тыковки, type: Add}
time: '2024-10-28T14:35:36Z'
id: 477
- author: Filo
changes:
- {message: Добавлен продвинутый голопроектор в аплинк ОБР, type: Add}
- {message: Убран Бронебойный набор из аплинка ОБР, type: Remove}
- {message: Парамедик получил доступ в космос., type: Tweak}
- {message: 'Пассажиры приняли переименование в Ассистентов за доступ в тех
тоннели, хотя обязанностей у них не прибавилось.', type: Tweak}
time: '2024-10-28T14:35:36Z'
id: 478
- author: Kasey [Adnoda] Bitboxxer
changes:
- {message: Теперь метелочка ведьмы исправлена !, type: Fix}
time: '2024-10-28T18:11:13Z'
id: 479
- author: Filo
changes:
- {message: Добавлена возможность вскрытия запитанных шлюзов для слаймов из
вентиляций ( Alt+ЛКМ по шлюзу. ), type: Add}
time: '2024-10-29T06:30:34Z'
id: 480
- author: Шрёдька
changes:
- {message: Добавлена новая команда sendert для вызова ОБР., type: Add}
time: '2024-10-29T15:48:24Z'
id: 481
- author: Mirokko
changes:
- {message: Исправлен визуальный баг при переливании жидкости., type: Fix}
time: '2024-10-29T15:48:24Z'
id: 482
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@ ghost-role-information-cmnd-cburn-agent-name = Майор РХБЗЗ
ghost-role-information-cmnd-cburn-agent-description = Высококвалифицированный командир РХБЗЗ, способный справиться с любыми угрозами.
ghost-role-information-carpcat-name = Мэттью
ghost-role-information-carpcat-description = Ваши хозяева отправляются на очередное задание, почему бы не пойти с ними?
ghost-role-information-carpcat-rules =
Ты [color=red][bold]Командный антагонист[/bold][/color]. Ваши намерения ясны, и они несут вред станции и её экипажу.
Вы [bold]должны слушаться и помогать[/bold] ядерным оперативникам в выполнении своей задачи и кусайте наглых сотрудников станции.
71 changes: 71 additions & 0 deletions Resources/Locale/ru-RU/ADT/command/sendert.ftl
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 = Нет
Loading

0 comments on commit 29ac0de

Please sign in to comment.