Команда для отправки цели для станции (#21)
* Команда для отправки цели для станции * Правки (cherry picked from commit 93a79c4952e3a75c32ff5cc4d07df4018a9bf7db)
This commit is contained in:
@@ -135,6 +135,7 @@ namespace Content.Client.Entry
|
|||||||
_prototypeManager.RegisterIgnore("wireLayout");
|
_prototypeManager.RegisterIgnore("wireLayout");
|
||||||
_prototypeManager.RegisterIgnore("alertLevels");
|
_prototypeManager.RegisterIgnore("alertLevels");
|
||||||
_prototypeManager.RegisterIgnore("nukeopsRole");
|
_prototypeManager.RegisterIgnore("nukeopsRole");
|
||||||
|
_prototypeManager.RegisterIgnore("stationGoal"); // WD ENGI EXCLUSIVE
|
||||||
_prototypeManager.RegisterIgnore("ghostRoleRaffleDecider");
|
_prototypeManager.RegisterIgnore("ghostRoleRaffleDecider");
|
||||||
|
|
||||||
//WD-EDIT
|
//WD-EDIT
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using Content.Server.Administration;
|
||||||
|
using Content.Server.Commands;
|
||||||
|
using Content.Shared.Administration;
|
||||||
|
using Robust.Shared.Console;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Server._White._Engi.StationGoal
|
||||||
|
{
|
||||||
|
[AdminCommand(AdminFlags.Fun)]
|
||||||
|
public sealed class StationGoalCommand : IConsoleCommand
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IEntityManager _entManager = default!;
|
||||||
|
|
||||||
|
public string Command => "sendstationgoal";
|
||||||
|
public string Description => Loc.GetString("send-station-goal-command-description");
|
||||||
|
public string Help => Loc.GetString("send-station-goal-command-help-text", ("command", Command));
|
||||||
|
|
||||||
|
public void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||||
|
{
|
||||||
|
if (args.Length != 2)
|
||||||
|
{
|
||||||
|
shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!NetEntity.TryParse(args[0], out var euidNet) || !_entManager.TryGetEntity(euidNet, out var euid))
|
||||||
|
{
|
||||||
|
shell.WriteError($"Failed to parse euid '{args[0]}'.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var protoId = args[1];
|
||||||
|
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
|
||||||
|
if (!prototypeManager.TryIndex<StationGoalPrototype>(protoId, out var proto))
|
||||||
|
{
|
||||||
|
shell.WriteError($"No station goal found with ID {protoId}!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var stationGoalPaper = IoCManager.Resolve<IEntityManager>().System<StationGoalPaperSystem>();
|
||||||
|
if (!stationGoalPaper.SendStationGoal(euid, protoId))
|
||||||
|
{
|
||||||
|
shell.WriteError("Station goal was not sent");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||||
|
{
|
||||||
|
switch (args.Length)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
var stations = ContentCompletionHelper.StationIds(_entManager);
|
||||||
|
return CompletionResult.FromHintOptions(stations, "[StationId]");
|
||||||
|
case 2:
|
||||||
|
var options = IoCManager.Resolve<IPrototypeManager>()
|
||||||
|
.EnumeratePrototypes<StationGoalPrototype>()
|
||||||
|
.Select(p => new CompletionOption(p.ID));
|
||||||
|
|
||||||
|
return CompletionResult.FromHintOptions(options, Loc.GetString("send-station-goal-command-arg-id"));
|
||||||
|
}
|
||||||
|
return CompletionResult.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Server._White._Engi.StationGoal
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WD ENGI EXCLUSIVE.
|
||||||
|
/// If attached to a station prototype, will send the station a random goal from the list.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class StationGoalComponent : Component
|
||||||
|
{
|
||||||
|
[DataField]
|
||||||
|
public List<ProtoId<StationGoalPrototype>> Goals = new();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace Content.Server._White._Engi.StationGoal
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WD ENGI EXCLUSIVE.
|
||||||
|
/// Paper with a written station goal in it.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class StationGoalPaperComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
using Content.Server.Fax;
|
||||||
|
using Content.Server.GameTicking.Events;
|
||||||
|
using Content.Server.Station.Components;
|
||||||
|
using Content.Server.Station.Systems;
|
||||||
|
using Content.Shared.Fax.Components;
|
||||||
|
using Content.Shared.Paper;
|
||||||
|
using Robust.Server.Player;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Random;
|
||||||
|
using Content.Server.RandomMetadata;
|
||||||
|
|
||||||
|
namespace Content.Server._White._Engi.StationGoal
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WD ENGI EXCLUSIVE.
|
||||||
|
/// System to spawn paper with station goal.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class StationGoalPaperSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||||
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
[Dependency] private readonly FaxSystem _fax = default!;
|
||||||
|
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||||
|
[Dependency] private readonly StationSystem _station = default!;
|
||||||
|
[Dependency] private readonly RandomMetadataSystem _randomMeta = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<RoundStartingEvent>(OnRoundStarting);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnRoundStarting(RoundStartingEvent ev)
|
||||||
|
{
|
||||||
|
var playerCount = _playerManager.PlayerCount;
|
||||||
|
|
||||||
|
var query = EntityQueryEnumerator<StationGoalComponent>();
|
||||||
|
while (query.MoveNext(out var uid, out var station))
|
||||||
|
{
|
||||||
|
var tempGoals = new List<ProtoId<StationGoalPrototype>>(station.Goals);
|
||||||
|
StationGoalPrototype? selGoal = null;
|
||||||
|
while (tempGoals.Count > 0)
|
||||||
|
{
|
||||||
|
var goalId = _random.Pick(tempGoals);
|
||||||
|
var goalProto = _proto.Index(goalId);
|
||||||
|
|
||||||
|
if (playerCount > goalProto.MaxPlayers ||
|
||||||
|
playerCount < goalProto.MinPlayers)
|
||||||
|
{
|
||||||
|
tempGoals.Remove(goalId);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
selGoal = goalProto;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selGoal is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (SendStationGoal(uid, selGoal))
|
||||||
|
{
|
||||||
|
Log.Info($"Goal {selGoal.ID} has been sent to station {MetaData(uid).EntityName}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SendStationGoal(EntityUid? ent, ProtoId<StationGoalPrototype> goal)
|
||||||
|
{
|
||||||
|
return SendStationGoal(ent, _proto.Index(goal));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// WD ENGI EXCLUSIVE.
|
||||||
|
/// Send a station goal on selected station to all faxes which are authorized to receive it.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>True if at least one fax received paper</returns>
|
||||||
|
public bool SendStationGoal(EntityUid? ent, StationGoalPrototype goal)
|
||||||
|
{
|
||||||
|
if (ent is null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!TryComp<StationDataComponent>(ent, out var stationData))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var today = DateTime.Today.ToString("dd.MM");
|
||||||
|
var namesList = new List<string>
|
||||||
|
{
|
||||||
|
"names_first_male",
|
||||||
|
"names_last_male"
|
||||||
|
};
|
||||||
|
var operatorName = _randomMeta.GetRandomFromSegments(namesList, " ");
|
||||||
|
|
||||||
|
var faxContent = Loc.GetString("engi-station-goal-form",
|
||||||
|
("station", MetaData(ent.Value).EntityName),
|
||||||
|
("date", today),
|
||||||
|
("operator", operatorName),
|
||||||
|
("text", Loc.GetString(goal.Text)));
|
||||||
|
|
||||||
|
var printout = new FaxPrintout(
|
||||||
|
faxContent,
|
||||||
|
Loc.GetString("engi-station-goal-fax-paper-name"),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
"paper_stamp-centcom",
|
||||||
|
new List<StampDisplayInfo>
|
||||||
|
{
|
||||||
|
new() { StampedName = Loc.GetString("stamp-component-stamped-name-centcom"), StampedColor = Color.FromHex("#006600") },
|
||||||
|
});
|
||||||
|
|
||||||
|
var wasSent = false;
|
||||||
|
var query = EntityQueryEnumerator<FaxMachineComponent>();
|
||||||
|
while (query.MoveNext(out var faxUid, out var fax))
|
||||||
|
{
|
||||||
|
if (!fax.ReceiveStationGoal)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var largestGrid = _station.GetLargestGrid(stationData);
|
||||||
|
var grid = Transform(faxUid).GridUid;
|
||||||
|
if (grid is not null && largestGrid == grid.Value)
|
||||||
|
{
|
||||||
|
_fax.Receive(faxUid, printout, null, fax);
|
||||||
|
foreach (var spawnEnt in goal.Spawns)
|
||||||
|
{
|
||||||
|
SpawnAtPosition(spawnEnt, Transform(faxUid).Coordinates);
|
||||||
|
}
|
||||||
|
wasSent = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wasSent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Server._White._Engi.StationGoal
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WD ENGI EXCLUSIVE.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable, Prototype("stationGoal")]
|
||||||
|
public sealed class StationGoalPrototype : IPrototype
|
||||||
|
{
|
||||||
|
[IdDataField]
|
||||||
|
public string ID { get; } = default!;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public string Text { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public int? MinPlayers;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public int? MaxPlayers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Goal may require certain items to complete. These items will appear near the receving fax machine at the start of the round.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public List<EntProtoId> Spawns = new();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -59,6 +59,14 @@ public sealed partial class FaxMachineComponent : Component
|
|||||||
[DataField]
|
[DataField]
|
||||||
public bool ReceiveNukeCodes { get; set; } = false;
|
public bool ReceiveNukeCodes { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// WD ENGI EXCLUSIVE.
|
||||||
|
/// Should that fax receive station goal info
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
[DataField("receiveStationGoal")]
|
||||||
|
public bool ReceiveStationGoal { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sound to play when fax has been emagged
|
/// Sound to play when fax has been emagged
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
226
Resources/Locale/ru-RU/_Engi/station-goal.ftl
Normal file
226
Resources/Locale/ru-RU/_Engi/station-goal.ftl
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
ent-StationGoalPaper = цель станции от Центком
|
||||||
|
.desc = Похоже у вас будет много работы.
|
||||||
|
|
||||||
|
engi-station-goal-fax-paper-name = цель станции от Центком
|
||||||
|
|
||||||
|
engi-station-goal-form = Постановление Центрального Командования
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Утверждение цели и задачи для станции { $station }
|
||||||
|
Центральным Командованием № 2562-CU-2
|
||||||
|
Дата: { $date }.2562 года
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Утвердить следующие цели для космической станции:
|
||||||
|
|
||||||
|
{ $text }
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1. Командование станции обязано строго следовать данной цели и заданию, а также предоставить все необходимые ресурсы и усилия для успешного выполнения миссии.
|
||||||
|
|
||||||
|
2. Право отменить данное постановление имеет исключительно Центральное Командование.
|
||||||
|
|
||||||
|
3. Сотрудникам станции запрещено покидать объект до момента выполнения цели. Исключение - станция находится в критическом состоянии и не является пригодной для жизни.
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Данное Постановление выписано:
|
||||||
|
И.Ф: { $operator }
|
||||||
|
Должность: Оператор Центрального Командования
|
||||||
|
Печать:
|
||||||
|
|
||||||
|
engi-station-goal-singularity = [bold]Постройка генератора, основанного на сингулярности.[/bold]
|
||||||
|
|
||||||
|
Все детали для цели должны быть заказаны или собраны на станции. Категорически запрещено использовать уже имеющиеся компоненты.
|
||||||
|
|
||||||
|
Для успешного выполнения цели необходимо сделать запуск сингулярности.
|
||||||
|
|
||||||
|
После окончания смены вся конструкция будет отсоединена от станции и транспортирована на другой объект.
|
||||||
|
|
||||||
|
engi-station-goal-solar-panels = [bold]Постройка сети солнечных панелей.[/bold]
|
||||||
|
|
||||||
|
Требования:
|
||||||
|
- Сеть должна состоять из минимум двух ветвей, расположенных на противоположных концах станции.
|
||||||
|
- Каждая ветвь должна состоять из минимум 36 солнечных панелей.
|
||||||
|
- Каждая ветвь должна иметь минимум два СМЭСа, несоединённых со станцией.
|
||||||
|
|
||||||
|
engi-station-goal-artifacts = [bold]Нахождение и исследование артефактов.[/bold]
|
||||||
|
|
||||||
|
Экипаж станции должен найти минимум три артефакта любым способом, отличным от покупки.
|
||||||
|
|
||||||
|
Сотрудники научного отдела должны изучить найденные артефакты и задокументировать их свойства.
|
||||||
|
|
||||||
|
В качестве документации могут быть приняты отчёты о каждом узле (печатаются на специальной консоли) и отдельный документ с описанием в доступной форме схемы артефакта.
|
||||||
|
|
||||||
|
Каждый документ должен быть подтверждён печатью научного руководителя или капитана. Артефакты с документацией должны быть доставлены на станцию центрального командования.
|
||||||
|
|
||||||
|
engi-station-goal-bank = [bold]Постройка орбитального хранилища с припасами и технологиями.[/bold]
|
||||||
|
|
||||||
|
Хранилище должно быть размещено в космосе, отдельно от основной станции, защищено от метеоритов и иметь автономное питание.
|
||||||
|
|
||||||
|
В хранилище должно быть минимум четыре ящика:
|
||||||
|
- ящик с продвинутыми медикаментами;
|
||||||
|
- ящик с запасами лучших семян;
|
||||||
|
- ящик-холодильник еды с высокой питательной ценностью;
|
||||||
|
- ящик с ценными, но не уникальными платами.
|
||||||
|
|
||||||
|
engi-station-goal-zoo = [bold]Улучшение рекреации персонала станции.[/bold]
|
||||||
|
|
||||||
|
Для этого инженерный отдел должен построить зоопарк с как минимум 3 (тремя) вольерами. На каждый вольер один вид. Каждый вольер должен быть обеспечен едой для конкретного вида и роботом-уборщиком. Площадь каждого вольера как минимум 16 м².
|
||||||
|
|
||||||
|
Животные должны быть заказаны в отделе снабжения.
|
||||||
|
|
||||||
|
engi-station-goal-mining-outpost = [bold]Постройка орбитального шахтёрского аванпоста.[/bold]
|
||||||
|
|
||||||
|
Аванпост должен быть размещен в космосе, отдельно от основной станции, защищён от метеоритов и иметь автономное питание, гравитацию и атмосферу.
|
||||||
|
|
||||||
|
Аванпост должен иметь как минимум две жилые комнаты с освещением и окнами. Оборудование для проведения работ: как минимум по две кирки, сумки для руды. Как минимум два шахтёрских скафандра.
|
||||||
|
|
||||||
|
На территории аванпоста должен быть склад для размещения добытого сырья и припасов: как минимум 500u (пятьсот единиц) пива в ящике-холодильнике для закусок. Как минимум по четыре набора медикаментов от механических повреждений.
|
||||||
|
|
||||||
|
engi-station-goal-tesla = [bold]Постройка генератора, основанного на Тесле.[/bold]
|
||||||
|
|
||||||
|
Все детали для цели должны быть заказаны или собраны на станции. Категорически запрещено использовать уже имеющиеся компоненты.
|
||||||
|
|
||||||
|
Для успешного выполнения цели необходимо сделать запуск теслы.
|
||||||
|
|
||||||
|
После окончания смены вся конструкция будет отсоединена от станции и транспортирована на другой объект.
|
||||||
|
|
||||||
|
engi-station-goal-security = [bold]Постройка и снабжение тренировочного комплекса для Службы Безопасности, с последующей проверкой состава.[/bold]
|
||||||
|
|
||||||
|
В будущем данная станция будет передислоцирована в сектор граничащий с небезопасным.
|
||||||
|
|
||||||
|
Задачей Инженерного отдела является постройка тренировочного комплекса, представляющего из себя полосу препятствий. Минимальное время на прохождение среднестатистического, подготовленного офицера, примерно 30 секунд.
|
||||||
|
Данная полоса должна включать в себя следующее:
|
||||||
|
- Змееобразные коридоры стекла.
|
||||||
|
- Различные препятствия для перелезания.
|
||||||
|
- Деревянную постройку с мишенями, имитирующую захват случайного отдела.
|
||||||
|
Инженерный отдел в праве строить и другие безопасные виды препятствий.
|
||||||
|
|
||||||
|
Задачей Медицинского отдела является изготовление партии таблеток Эфедрина, дозировкой 10u каждая, в минимальном количестве 10 шт, с последующей передачей на хранение в защищенном контейнере Смотрителю станции.
|
||||||
|
|
||||||
|
Задачей Службы Безопасности является проведение для каждого члена своего отдела тренировки на данной полосе с письменной фиксацией результатов. В результатах должно быть описано Имя и Фамилия сотрудника, а так же время за которое им была пройдена полоса. Лучшие сотрудники получат шанс на контракт о последующей работе на следующей смене данной станции. Результаты каждого сотрудника будет необходимо указать в отчете о состоянии цели.
|
||||||
|
|
||||||
|
engi-station-goal-shuttle-med = [bold]Постройка пилотируемого медицинского шаттла.[/bold]
|
||||||
|
|
||||||
|
Шаттл должен соответствовать следующим требованиям:
|
||||||
|
1. Обеспечен стабильным источником питания и резервной батареей СМЭС.
|
||||||
|
2. Уметь совершать следующие движения: крен, тангаж и рысканье.
|
||||||
|
3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён.
|
||||||
|
4. Иметь на борту химическую лабораторию с соответствующим оборудованием, рассчитанным минимум на одного сотрудника.
|
||||||
|
5. Иметь отсек для медицинских коек, рассчитанным минимум на десять человек.
|
||||||
|
6. Иметь на борту отсек с запасами медикаментов и провизии.
|
||||||
|
|
||||||
|
Справочная информация для неквалифицированного персонала:
|
||||||
|
Крен — вращательное движение.
|
||||||
|
Тангаж — поступательное движение "вперёд" и "назад".
|
||||||
|
Рысканье — поступательное движение "боком".
|
||||||
|
|
||||||
|
engi-station-goal-shuttle-sec = [bold]Постройка пилотируемого десантного шаттла.[/bold]
|
||||||
|
|
||||||
|
Шаттл должен соответствовать следующим требованиям:
|
||||||
|
1. Обеспечен стабильным источником питания и резервной батареей СМЭС.
|
||||||
|
2. Уметь совершать следующие движения: крен, тангаж и рысканье.
|
||||||
|
3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён.
|
||||||
|
4. Иметь на борту места и снаряжение как минимум на пять офицеров СБ.
|
||||||
|
Снаряжение для каждого офицера должно представлять из себя хотя бы один вид легального огнестрельного оружия, полученного не из арсенала, бронежилет, шлем, униформу.
|
||||||
|
5. Иметь на борту отсек с запасами медикаментов и провизии минимум на пять человек.
|
||||||
|
|
||||||
|
Справочная информация для неквалифицированного персонала:
|
||||||
|
Крен — вращательное движение.
|
||||||
|
Тангаж — поступательное движение "вперёд" и "назад".
|
||||||
|
Рысканье — поступательное движение "боком".
|
||||||
|
|
||||||
|
engi-station-goal-shuttle-rnd = [bold]Постройка пилотируемого исследовательского шаттла.[/bold]
|
||||||
|
|
||||||
|
Шаттл должен соответствовать следующим требованиям:
|
||||||
|
1. Обеспечен стабильным источником питания и резервной батареей СМЭС.
|
||||||
|
2. Уметь совершать следующие движения: крен, тангаж и рысканье.
|
||||||
|
3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён.
|
||||||
|
4. Иметь на борту следующие устройства и снаряжение: М.А.К.А.К. (x1), М.А.Р.Т.Ы.Х. (х2), синхронизатор аномалий (x1), магнитные сапоги (х2) и экспериментальный сосуд аномалии (х1), а также как минимум два скафандра EVA и два костюма радиационной защиты.
|
||||||
|
|
||||||
|
Справочная информация для неквалифицированного персонала:
|
||||||
|
Крен — вращательное движение.
|
||||||
|
Тангаж — поступательное движение "вперёд" и "назад".
|
||||||
|
Рысканье — поступательное движение "боком".
|
||||||
|
|
||||||
|
engi-station-goal-shuttle-srv = [bold]Постройка пилотируемого пассажирского шаттла.[/bold]
|
||||||
|
|
||||||
|
Шаттл должен соответствовать следующим требованиям:
|
||||||
|
1. Обеспечен стабильным источником питания и резервной батареей СМЭС.
|
||||||
|
2. Уметь совершать следующие движения: крен, тангаж и рысканье.
|
||||||
|
3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён.
|
||||||
|
4. Иметь на борту полностью обустроенный бар, в котором должен быть раздатчик безалкоголя, раздатчик алкоголя, бочка кваса, ящик барных принадлежностей, ящик пополнения раздатчика алкоголя, ящик пополнения раздатчика безалкоголя.
|
||||||
|
5. Иметь на борту обустроенную кухню, в которой должен быть ящик кухонных припасов и ящик кухонных принадлежностей. А также один гидропонный лоток и холодильник.
|
||||||
|
6. На борту должны быть приватные комнаты для комфортного проживания как минимум четверых человек.
|
||||||
|
7. На борту должен быть музыкальный автомат и ящик настольных игр.
|
||||||
|
|
||||||
|
Справочная информация для неквалифицированного персонала:
|
||||||
|
Крен — вращательное движение.
|
||||||
|
Тангаж — поступательное движение "вперёд" и "назад".
|
||||||
|
Рысканье — поступательное движение "боком".
|
||||||
|
|
||||||
|
engi-station-goal-shuttle-emergency = [bold]Постройка пилотируемого спасательного шаттла.[/bold]
|
||||||
|
|
||||||
|
Шаттл должен соответствовать следующим требованиям:
|
||||||
|
1. Обеспечен стабильным источником питания и резервной батареей СМЭС.
|
||||||
|
2. Уметь совершать следующие движения: крен, тангаж и рысканье.
|
||||||
|
3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён.
|
||||||
|
4. Иметь на борту ящик медицинских припасов, продвинутый аварийный набор, два ящика с наборами EVA, ящик стекла, два ящика стали, ящик пластали, ящик джетпаков, ящик ИРП.
|
||||||
|
|
||||||
|
Справочная информация для неквалифицированного персонала:
|
||||||
|
Крен — вращательное движение.
|
||||||
|
Тангаж — поступательное движение "вперёд" и "назад".
|
||||||
|
Рысканье — поступательное движение "боком".
|
||||||
|
|
||||||
|
engi-station-goal-theatre = [bold]Постройка театральной зоны.[/bold]
|
||||||
|
|
||||||
|
На данной станции пройдут переговоры с крупными компаниями для заключения партнёрских соглашений.
|
||||||
|
|
||||||
|
Театральная зона должна включать в себя:
|
||||||
|
1. Сцена с минимальным размером в 28м².
|
||||||
|
2. Минимальная вместимость зала в 21 персону.
|
||||||
|
3. Закулисье с различными нарядами, музыкальными инструментами, несколькими ящиками игрушек и мехом модели Х.О.Н.К.
|
||||||
|
4. Комнату или комнаты для четырех актеров. На каждого актера должно приходится по пять любых пирогов.
|
||||||
|
|
||||||
|
Материалы для клоунских скафандров вы можете получить из ящика театрального снаряжения.
|
||||||
|
В случае проведения тестового представления сервисный отдел станции будет вознагражден по прибытию на Станцию ЦК.
|
||||||
|
По окончании работ ЦК может прислать представителя для проведения тестового представления.
|
||||||
|
|
||||||
|
engi-station-goal-ai = [bold]Постройка автономного отсека ИИ.[/bold]
|
||||||
|
|
||||||
|
По окончанию строительства отсек должен быть отстыкован от станции и отправлен дрейфовать в космосе.
|
||||||
|
|
||||||
|
Требования:
|
||||||
|
1. Автономное питание на солнечных панелях или РИТЭГ, подключенные к СМЭС и Подстанции.
|
||||||
|
2. Иметь отсек для позитронного мозга.
|
||||||
|
3. Консоль сканера массы.
|
||||||
|
4. Два борга без позитронного мозга: инженерного и научного назначения.
|
||||||
|
5. Шлюз в отсек с командным доступом.
|
||||||
|
6. Сервер коммуникации и маршрутизатор проводных камер.
|
||||||
|
7. Снаружи отсек должен быть окружён контуром охлаждения.
|
||||||
|
Контур охлаждения должен представлять собой канал, шириной не менее одного метра, полностью заполненный любым газом, кроме обычной воздушной смеси, при температуре ниже -100 градусов по Цельсию и давлении как минимум в 3 раза превышающем атмосферное. Контур должен опоясывать не менее 80% модуля.
|
||||||
|
|
||||||
|
Рекомендуется предпринять дополнительные меры безопасности:
|
||||||
|
- Защиту от метеоритов.
|
||||||
|
- Сеть вокруг отсека под высоким напряжением.
|
||||||
|
|
||||||
|
engi-station-goal-botany = [bold]Постройка теплиц и выведение приспособленных к температуре растений.[/bold]
|
||||||
|
|
||||||
|
На станции или вблизи неё требуется построить три отсека с контролируемым климатом:
|
||||||
|
- Отсек с температурой 5 градусов Цельсия.
|
||||||
|
- Отсек с температурой 25 градусов Цельсия.
|
||||||
|
- Отсек с температурой 45 градусов Цельсия.
|
||||||
|
|
||||||
|
Каждый отсек необходимо снабдить минимум шестью гидропонными лотками и полным резервуаром с водой.
|
||||||
|
В каждом отсеке должно находится хотя бы одно растение, приспособленное к температуре отсека.
|
||||||
|
|
||||||
|
engi-station-goal-bunker = [bold]Приспособить станцию к мощным гиперэнергетическим потокам.[/bold]
|
||||||
|
|
||||||
|
Необходимо пристроить каждому отделу комнату, далее именуемой “бункер”, в которой экипаж станции мог бы укрыться от последствий гиперэнергетических потоков.
|
||||||
|
|
||||||
|
Требования к бункеру:
|
||||||
|
1. Минимальный размер 25м².
|
||||||
|
2. Укреплённые стены.
|
||||||
|
3. Вход через два непрозрачных шлюза с соответствующим отделу доступом.
|
||||||
|
4. От четырех кресел пилота.
|
||||||
|
5. Содержать базовые лекарства в виде таблеток со справкой о их назначении и наборы от механических повреждений.
|
||||||
|
6. Запасы провизии с расчетом на четыре человека, на срок от 72 часов.
|
||||||
|
7. Автономное питание и канистры с воздухом и кислородом.
|
||||||
|
8. Шкафчики со снаряжением для биологической и радиационной защиты. Так же аварийные скафандры EVA и костюм сапёра.
|
||||||
|
9. Интерком с общим ключом шифрования.
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
send-station-goal-command-description = Отправляет выбранную цель станции на всех факсы способные её принять
|
send-station-goal-command-description = WD ENGI EXCLUSIVE. Отправляет выбранную цель станции на все факсы способные её принять
|
||||||
send-station-goal-command-help-text = Использование: { $command } <id-цели>
|
send-station-goal-command-help-text = Использование: { $command } <id-цели>
|
||||||
send-station-goal-command-arg-id = <ID цели>
|
send-station-goal-command-arg-id = <ID цели>
|
||||||
|
|||||||
@@ -82,6 +82,7 @@
|
|||||||
- type: FaxMachine
|
- type: FaxMachine
|
||||||
name: "Central Command"
|
name: "Central Command"
|
||||||
notifyAdmins: true
|
notifyAdmins: true
|
||||||
|
receiveStationGoal: true # WD ENGI EXCLUSIVE
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: FaxMachineBase
|
parent: FaxMachineBase
|
||||||
@@ -109,5 +110,6 @@
|
|||||||
- type: FaxMachine
|
- type: FaxMachine
|
||||||
name: "Captain's Office"
|
name: "Captain's Office"
|
||||||
receiveNukeCodes: true
|
receiveNukeCodes: true
|
||||||
|
receiveStationGoal: true # WD ENGI EXCLUSIVE
|
||||||
- type: StealTarget
|
- type: StealTarget
|
||||||
stealGroup: FaxMachineCaptain
|
stealGroup: FaxMachineCaptain
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# WD ENGI EXCLUSIVE
|
||||||
|
- type: stationGoal
|
||||||
|
id: Singularity
|
||||||
|
text: engi-station-goal-singularity
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: SolarPanels
|
||||||
|
text: engi-station-goal-solar-panels
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Artifacts
|
||||||
|
text: engi-station-goal-artifacts
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Bank
|
||||||
|
text: engi-station-goal-bank
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Zoo
|
||||||
|
text: engi-station-goal-zoo
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: MiningOutpost
|
||||||
|
text: engi-station-goal-mining-outpost
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Tesla
|
||||||
|
text: engi-station-goal-tesla
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: SecurityTraining
|
||||||
|
text: engi-station-goal-security
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: ShuttleMed
|
||||||
|
text: engi-station-goal-shuttle-med
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: ShuttleSec
|
||||||
|
text: engi-station-goal-shuttle-sec
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: ShuttleRnd
|
||||||
|
text: engi-station-goal-shuttle-rnd
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: ShuttleSrv
|
||||||
|
text: engi-station-goal-shuttle-srv
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: ShuttleEmergency
|
||||||
|
text: engi-station-goal-shuttle-emergency
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Theatre
|
||||||
|
text: engi-station-goal-theatre
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: CellAI
|
||||||
|
text: engi-station-goal-ai
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Botany
|
||||||
|
text: engi-station-goal-botany
|
||||||
|
|
||||||
|
- type: stationGoal
|
||||||
|
id: Bunker
|
||||||
|
text: engi-station-goal-bunker
|
||||||
Reference in New Issue
Block a user