diff --git a/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs b/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs
index 0859bd5ca9..40e468e4b7 100644
--- a/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs
+++ b/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs
@@ -244,10 +244,12 @@ public sealed partial class AdminLogsControl : Control
foreach (var child in LogsContainer.Children)
{
- if (child is not AdminLogLabel log)
+ // Sunrise edit start - крутые красивые логи
+ if (child is not SunriseAdminLogLabel log)
{
continue;
}
+ // Sunrise edit end
child.Visible = ShouldShowLog(log);
if (child.Visible)
@@ -271,7 +273,8 @@ public sealed partial class AdminLogsControl : Control
button.Text.Contains(PlayerSearch.Text, StringComparison.OrdinalIgnoreCase);
}
- private bool LogMatchesPlayerFilter(AdminLogLabel label)
+ // Sunrise edit - крутые красивые логи
+ private bool LogMatchesPlayerFilter(SunriseAdminLogLabel label)
{
if (label.Log.Players.Length == 0)
return SelectedPlayers.Count == 0 || IncludeNonPlayerLogs;
@@ -279,7 +282,8 @@ public sealed partial class AdminLogsControl : Control
return SelectedPlayers.Overlaps(label.Log.Players);
}
- private bool ShouldShowLog(AdminLogLabel label)
+ // Sunrise edit - крутые красивые логи
+ private bool ShouldShowLog(SunriseAdminLogLabel label)
{
// Check log type
if (!SelectedTypes.Contains(label.Log.Type))
@@ -471,7 +475,11 @@ public sealed partial class AdminLogsControl : Control
{
ref var log = ref span[i];
var separator = new HSeparator();
- var label = new AdminLogLabel(ref log, separator);
+
+ // Sunrise edit start - крутые красивые логи
+ var label = new SunriseAdminLogLabel(ref log, separator);
+ // Sunrise edit end
+
label.Visible = ShouldShowLog(label);
TotalLogs++;
diff --git a/Content.Client/Administration/UI/Logs/AdminLogsEui.cs b/Content.Client/Administration/UI/Logs/AdminLogsEui.cs
index 28aca23f75..4a2219d501 100644
--- a/Content.Client/Administration/UI/Logs/AdminLogsEui.cs
+++ b/Content.Client/Administration/UI/Logs/AdminLogsEui.cs
@@ -1,5 +1,6 @@
using System.IO;
using System.Linq;
+using Content.Client._Sunrise.Administration.UI.CustomControls;
using Content.Client.Administration.UI.CustomControls;
using Content.Client.Eui;
using Content.Shared.Administration.Logs;
@@ -109,8 +110,10 @@ public sealed class AdminLogsEui : BaseEui
await writer.WriteLineAsync(CsvHeader);
foreach (var child in LogsControl.LogsContainer.Children)
{
- if (child is not AdminLogLabel logLabel || !child.Visible)
+ // Sunrise edit start - крутые красивые логи
+ if (child is not SunriseAdminLogLabel logLabel || !child.Visible)
continue;
+ // Sunrise edit end
var log = logLabel.Log;
diff --git a/Content.Client/_Sunrise/Administration/UI/CustomControls/SunriseAdminLogLabel.cs b/Content.Client/_Sunrise/Administration/UI/CustomControls/SunriseAdminLogLabel.cs
index befc54dd5f..9023881a27 100644
--- a/Content.Client/_Sunrise/Administration/UI/CustomControls/SunriseAdminLogLabel.cs
+++ b/Content.Client/_Sunrise/Administration/UI/CustomControls/SunriseAdminLogLabel.cs
@@ -8,6 +8,15 @@ using Robust.Shared.Utility;
namespace Content.Client._Sunrise.Administration.UI.CustomControls;
+///
+/// Красивая обертка для логов, поддерживающая форматирование текста.
+///
+///
+/// Добавляет в начало файла цветовой индикатор важности логи и выделяет время жирным текстом.
+/// Дополнительную информацию о сущности выделяет цветом, чтобы не засорять основную информацию.
+/// Цвета логов определяются в
+///
+///
public sealed class SunriseAdminLogLabel : RichTextLabel
{
private const string InfoColor = "gray";
@@ -91,7 +100,7 @@ public sealed class SunriseAdminLogLabel : RichTextLabel
#endregion
- public SharedAdminLog Log { get; }
+ public new SharedAdminLog Log { get; }
public HSeparator Separator { get; }
@@ -100,9 +109,9 @@ public sealed class SunriseAdminLogLabel : RichTextLabel
Separator.Visible = Visible;
}
- protected override void Dispose(bool disposing)
+ protected override void ExitedTree()
{
- base.Dispose(disposing);
+ base.ExitedTree();
OnVisibilityChanged -= VisibilityChanged;
}
diff --git a/Content.Client/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs b/Content.Client/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs
deleted file mode 100644
index 7bcf74bb07..0000000000
--- a/Content.Client/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Content.Shared.Sunrise.FactionGunBlockerSystem;
-
-namespace Content.Client._Sunrise.FactionWeaponBlockerSystem;
-
-[RegisterComponent]
-public sealed partial class FactionWeaponBlockerComponent : SharedFactionWeaponBlockerComponent
-{
- [ViewVariables(VVAccess.ReadWrite)]
- public bool CanUse;
-
- [ViewVariables(VVAccess.ReadWrite)]
- public string AlertText = "";
-}
diff --git a/Content.Client/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs b/Content.Client/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs
deleted file mode 100644
index c1cade0790..0000000000
--- a/Content.Client/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using Content.Shared.Interaction.Events;
-using Content.Shared.Sunrise.FactionGunBlockerSystem;
-using Content.Shared.Weapons.Melee.Events;
-using Content.Shared.Weapons.Ranged.Systems;
-using Robust.Shared.GameStates;
-
-namespace Content.Client._Sunrise.FactionWeaponBlockerSystem;
-
-public sealed class FactionWeaponBlockerSystem : EntitySystem
-{
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent(OnShootAttempt);
- SubscribeLocalEvent(OnMeleeAttempt);
- SubscribeLocalEvent(OnUseAttempt);
- SubscribeLocalEvent(OnInteractAttempt);
- SubscribeLocalEvent(OnFactionWeaponBlockerHandleState);
- }
-
- private void OnUseAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref UseAttemptEvent args)
- {
- if (component.CanUse)
- return;
-
- args.Cancel();
- }
-
- private void OnInteractAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref InteractionAttemptEvent args)
- {
- if (component.CanUse)
- return;
-
- args.Cancelled = true;
- }
-
- private void OnFactionWeaponBlockerHandleState(EntityUid uid, FactionWeaponBlockerComponent component, ref ComponentHandleState args)
- {
- if (args.Current is not FactionWeaponBlockerComponentState state)
- return;
-
- component.CanUse = state.CanUse;
- component.AlertText = state.AlertText;
- }
-
- private void OnMeleeAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptMeleeEvent args)
- {
- if (component.CanUse)
- return;
-
- args.Cancelled = true;
- args.Message = component.AlertText;
- }
-
- private void OnShootAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptShootEvent args)
- {
- if (component.CanUse)
- return;
-
- args.Cancelled = true;
- args.Message = component.AlertText;
- }
-}
diff --git a/Content.IntegrationTests/Tests/Administration/Logs/LogWindowTest.cs b/Content.IntegrationTests/Tests/Administration/Logs/LogWindowTest.cs
index 80236c7d90..7a73ebd8f3 100644
--- a/Content.IntegrationTests/Tests/Administration/Logs/LogWindowTest.cs
+++ b/Content.IntegrationTests/Tests/Administration/Logs/LogWindowTest.cs
@@ -1,4 +1,5 @@
using System.Linq;
+using Content.Client._Sunrise.Administration.UI.CustomControls;
using Content.Client.Administration.UI;
using Content.Client.Administration.UI.CustomControls;
using Content.Client.Administration.UI.Logs;
@@ -41,7 +42,11 @@ public sealed class LogWindowTest : InteractionTest
await Client.WaitPost(() => search.Text = guid.ToString());
await ClickControl(refresh);
await RunTicks(5);
- var searchResult = cont.Children.Where(x => x.Visible && x is AdminLogLabel).Cast().ToArray();
+
+ // Sunrise edit start - крутые красивые логи
+ var searchResult = cont.Children.Where(x => x.Visible && x is SunriseAdminLogLabel).Cast().ToArray();
+ // Sunrise edit end
+
Assert.That(searchResult.Length, Is.EqualTo(1));
Assert.That(searchResult[0].Log.Message, Contains.Substring($" test log 1: {guid}"));
@@ -53,7 +58,11 @@ public sealed class LogWindowTest : InteractionTest
await Client.WaitPost(() => search.Text = guid.ToString());
await ClickControl(refresh);
await RunTicks(5);
- searchResult = cont.Children.Where(x => x.Visible && x is AdminLogLabel).Cast().ToArray();
+
+ // Sunrise edit start - крутые красивые логи
+ searchResult = cont.Children.Where(x => x.Visible && x is SunriseAdminLogLabel).Cast().ToArray();
+ // Sunrise edit end
+
Assert.That(searchResult.Length, Is.EqualTo(1));
Assert.That(searchResult[0].Log.Message, Contains.Substring($" test log 2: {guid}"));
}
diff --git a/Content.IntegrationTests/Tests/Atmos/TileAtmosphereTest.cs b/Content.IntegrationTests/Tests/Atmos/TileAtmosphereTest.cs
index 368bb63c1d..c9f9937669 100644
--- a/Content.IntegrationTests/Tests/Atmos/TileAtmosphereTest.cs
+++ b/Content.IntegrationTests/Tests/Atmos/TileAtmosphereTest.cs
@@ -61,6 +61,11 @@ public abstract class TileAtmosphereTest : AtmosTest
[Test]
public async Task FireSpreading()
{
+ // Sunrise added start - так как у нас включен ветер - это ломает математику теста. Ветер нужно выключить
+ Server.CfgMan.SetCVar(CCVars.SpaceWind, false);
+ Assert.That(Server.CfgMan.GetCVar(CCVars.SpaceWind), Is.False);
+ // Sunrise added end
+
var markers = SEntMan.AllEntities();
EntityUid source, point1, point2;
diff --git a/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs b/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs
index 19e8aba182..c0b85a3b3e 100644
--- a/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs
+++ b/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs
@@ -47,6 +47,14 @@ public sealed class BuckleDragTest : InteractionTest
Assert.That(pullable.Puller, Is.Null);
Assert.That(pullable.BeingPulled, Is.False);
+ // Sunrise added start - у нас пулинг не убирает бакл
+ // Поэтому делаем это вручную, до того, как человека схватят, чтобы логика теста не сломалась
+ await Server.WaitAssertion(() =>
+ {
+ Assert.That(Server.System().TryUnbuckle(sUrist, sUrist));
+ });
+ // Sunrise added end
+
// Start pulling, and thus unbuckle them
await PressKey(ContentKeyFunctions.TryPullObject, cursorEntity: urist);
await RunTicks(5);
diff --git a/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs b/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs
index abfb1e629e..de271b5f45 100644
--- a/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs
+++ b/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs
@@ -28,6 +28,9 @@ namespace Content.IntegrationTests.Tests.Buckle
id: {BuckleDummyId}
components:
- type: Buckle
+ # Sunrise edit start
+ unbuckleDoafterTime: 0
+ # Sunrise edit end
- type: Hands
- type: ComplexInteraction
- type: InputMover
diff --git a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs
index e2bedda080..4da58f139b 100644
--- a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs
+++ b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs
@@ -251,6 +251,11 @@ public sealed class SuicideCommandTests
var player = playerMan.Sessions.First().AttachedEntity!.Value;
var mind = mindSystem.GetMind(player);
+ // Sunrise edit start - подарки от праздников ломают тест.
+ // Поэтому выбрасываем все говно, что может помешать
+ handsSystem.TryDrop(player);
+ // Sunrise edit end
+
MindComponent mindComponent = default;
MobStateComponent mobStateComp = default;
MobThresholdsComponent mobThresholdsComp = default;
@@ -326,6 +331,11 @@ public sealed class SuicideCommandTests
var player = playerMan.Sessions.First().AttachedEntity!.Value;
var mind = mindSystem.GetMind(player);
+ // Sunrise edit start - подарки от праздников ломают тест.
+ // Поэтому выбрасываем все говно, что может помешать
+ handsSystem.TryDrop(player);
+ // Sunrise edit end
+
MindComponent mindComponent = default;
MobStateComponent mobStateComp = default;
MobThresholdsComponent mobThresholdsComp = default;
diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs
index 9b0e7729f5..b9e4a390d2 100644
--- a/Content.IntegrationTests/Tests/EntityTest.cs
+++ b/Content.IntegrationTests/Tests/EntityTest.cs
@@ -242,6 +242,10 @@ namespace Content.IntegrationTests.Tests
"StationEvent",
"TimedDespawn",
+ // Sunrise added start
+ "StationTransitHub",
+ // Sunrise added end
+
// makes an announcement on mapInit.
"AnnounceOnSpawn",
};
diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs
index 3c62970371..0fdd291334 100644
--- a/Content.Server/GameTicking/GameTicker.Spawning.cs
+++ b/Content.Server/GameTicking/GameTicker.Spawning.cs
@@ -1,6 +1,7 @@
using System.Globalization;
using System.Linq;
using System.Numerics;
+using Content.Server._Sunrise.Helpers;
using Content.Server._Sunrise.Station;
using Content.Server.Administration.Managers;
using Content.Server.Administration.Systems;
@@ -13,7 +14,6 @@ using Content.Server.Spawners.Components;
using Content.Server.Speech.Components;
using Content.Server.Station.Components;
using Content.Shared.CCVar;
-using Content.Shared._Sunrise.SunriseCCVars;
using Content.Shared.Database;
using Content.Shared.GameTicking;
using Content.Shared.Humanoid;
@@ -45,7 +45,11 @@ namespace Content.Server.GameTicking
[Dependency] private readonly AdminSystem _admin = default!;
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
[Dependency] private readonly ArrivalsSystem _arrivals = default!;
- [Dependency] private readonly NewLifeSystem _newLifeSystem = default!; // Sunrise-Edit
+
+ // Sunrise added start
+ [Dependency] private readonly NewLifeSystem _newLife = default!;
+ [Dependency] private readonly SunriseHelpersSystem _helpers = default!;
+ // Sunrise added end
public static readonly EntProtoId ObserverPrototypeName = "MobObserver";
public static readonly EntProtoId AdminObserverPrototypeName = "AdminObserver";
@@ -182,7 +186,10 @@ namespace Content.Server.GameTicking
if (station == EntityUid.Invalid)
{
- var stations = GetSpawnableStations();
+ // Sunrise edit start - фикс спавна на ЦК вместо девмапы
+ var stations = _helpers.GetSpawnableStations();
+ // Sunrise edit end
+
_robustRandom.Shuffle(stations);
if (stations.Count == 0)
station = EntityUid.Invalid;
@@ -197,8 +204,8 @@ namespace Content.Server.GameTicking
}
// Sunrise-NewLife-Start
- _newLifeSystem.AddUsedCharactersForRespawn(player.UserId, _prefsManager.GetPreferences(player.UserId).SelectedCharacterIndex);
- _newLifeSystem.SetNextAllowRespawn(player.UserId, _gameTiming.CurTime + TimeSpan.FromMinutes(_newLifeSystem.NewLifeTimeout));
+ _newLife.AddUsedCharactersForRespawn(player.UserId, _prefsManager.GetPreferences(player.UserId).SelectedCharacterIndex);
+ _newLife.SetNextAllowRespawn(player.UserId, _gameTiming.CurTime + TimeSpan.FromMinutes(_newLife.NewLifeTimeout));
// Sunrise-NewLife-End
string speciesId;
@@ -272,11 +279,17 @@ namespace Content.Server.GameTicking
return;
}
- DoSpawn(player, character, station, jobId, silent, out var mob, out var jobPrototype, out var jobName);
+ // Sunrise edit start - почему-то тут проебан тип спавна,
+ // что приводит к тому, что ивент о спавне игрока не знает, куда его спавнить.
+ // Учитывая, что у нас система из Delta-V с этими спавнпоинтами - я думаю, что тут наша ошибка, а не виздена.
+ var spawnPointType = lateJoin ? SpawnPointType.LateJoin : SpawnPointType.Job;
+
+ DoSpawn(player, character, station, jobId, silent, out var mob, out var jobPrototype, out var jobName, spawnPointType);
+ // Sunrise edit end
// Sunrise-Start
if (HasComp(station))
- EntityManager.AddComponent(mob);
+ EnsureComp(mob);
// Sunrise-End
if (lateJoin && !silent)
@@ -365,7 +378,8 @@ namespace Content.Server.GameTicking
bool silent,
out EntityUid mob,
out JobPrototype jobPrototype,
- out string jobName)
+ out string jobName,
+ SpawnPointType spawnPointType = SpawnPointType.Unset) // Sunrise added
{
PlayerJoinGame(player, silent);
@@ -380,7 +394,7 @@ namespace Content.Server.GameTicking
_playTimeTrackings.PlayerRolesChanged(player);
- var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character);
+ var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character, spawnPointType: spawnPointType);
DebugTools.AssertNotNull(mobMaybe);
mob = mobMaybe!.Value;
diff --git a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs
index 638abdcc18..8f2301844f 100644
--- a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs
+++ b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs
@@ -164,6 +164,14 @@ public sealed class SecretRuleSystem : GameRuleSystem
if (selected == null)
return false;
+ // Sunrise added start - Почему раньше это НЕ учитывалось
+ if (players < selected.MinPlayers)
+ return false;
+
+ if (players > selected.MaxPlayers)
+ return false;
+ // Sunrise added end
+
foreach (var ruleId in selected.Rules)
{
if (!_prototypeManager.TryIndex(ruleId, out EntityPrototype? rule)
diff --git a/Content.Server/Holiday/HolidayGiveawayItemPrototype.cs b/Content.Server/Holiday/HolidayGiveawayItemPrototype.cs
deleted file mode 100644
index 716e69b07b..0000000000
--- a/Content.Server/Holiday/HolidayGiveawayItemPrototype.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
-
-namespace Content.Server.Holiday
-{
- [Prototype("holidayGiveawayItem")]
- public sealed partial class HolidayGiveawayItemPrototype : IPrototype
- {
- [ViewVariables]
- [IdDataField]
- public string ID { get; private set; } = default!;
-
- [DataField("holiday", customTypeSerializer:typeof(PrototypeIdSerializer))]
- public string Holiday { get; private set; } = string.Empty;
-
- [DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer))]
- public string Prototype { get; private set; } = string.Empty;
- }
-}
diff --git a/Content.Server/Holiday/HolidayPrototype.cs b/Content.Server/Holiday/HolidayPrototype.cs
index b9ba91819f..aab94349ba 100644
--- a/Content.Server/Holiday/HolidayPrototype.cs
+++ b/Content.Server/Holiday/HolidayPrototype.cs
@@ -39,8 +39,8 @@ namespace Content.Server.Holiday
private IHolidayGreet _greet = new DefaultHolidayGreet();
// Sunrise-Start
- [DataField("greetColor")]
- private Color? _color;
+ [DataField]
+ public Color? Color;
// Sunrise-End
[DataField("celebrate")]
@@ -56,13 +56,6 @@ namespace Content.Server.Holiday
return _greet.Greet(this);
}
- // Sunrise-Start
- public Color? GreetColor()
- {
- return _color;
- }
- // Sunrise-End
-
///
/// Called before the round starts to set up any festive shenanigans.
///
diff --git a/Content.Server/Holiday/HolidaySystem.cs b/Content.Server/Holiday/HolidaySystem.cs
index 049123d62b..b3ed4e11c1 100644
--- a/Content.Server/Holiday/HolidaySystem.cs
+++ b/Content.Server/Holiday/HolidaySystem.cs
@@ -59,7 +59,7 @@ namespace Content.Server.Holiday
{
foreach (var holiday in _currentHolidays)
{
- _chatManager.DispatchServerAnnouncement(holiday.Greet(), holiday.GreetColor()); // Sunrise-Edit
+ _chatManager.DispatchServerAnnouncement(holiday.Greet(), holiday.Color); // Sunrise-Edit
}
}
@@ -108,7 +108,7 @@ namespace Content.Server.Holiday
break;
}
}
-
+
private void OnLightMapInit(Entity ent, ref MapInitEvent args)
{
foreach (var holiday in _currentHolidays)
diff --git a/Content.Server/Ninja/Systems/ToggleNinjaSuitDrawSystem.cs b/Content.Server/Ninja/Systems/ToggleNinjaSuitDrawSystem.cs
index 09eccd0464..58b1311852 100644
--- a/Content.Server/Ninja/Systems/ToggleNinjaSuitDrawSystem.cs
+++ b/Content.Server/Ninja/Systems/ToggleNinjaSuitDrawSystem.cs
@@ -24,9 +24,16 @@ public sealed class ToggleNinjaSuitDrawSystem : EntitySystem
private void OnMapInit(Entity ent, ref MapInitEvent args)
{
- var uid = ent.Owner;
- var draw = Comp(uid);
- _suitDraw.SetEnabled((uid, draw), _toggle.IsActivated(uid));
+ if (!TryComp(ent, out var draw))
+ {
+ // Если тут будет стоять еррор, то AllComponentsToOneDeleteTest насрет, что все плохо.
+ Log.Warning($"Found entity {ToPrettyString(ent)} with {nameof(ToggleNinjaSuitDrawComponent)} but without {nameof(NinjaSuitDrawComponent)}! Toggle component will be removed");
+ RemComp(ent);
+
+ return;
+ }
+
+ _suitDraw.SetEnabled((ent, draw), _toggle.IsActivated(ent.Owner));
}
private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args)
diff --git a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs
index f3ac5e7969..34a0c592fa 100644
--- a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs
+++ b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs
@@ -33,36 +33,29 @@ public sealed class SpawnPointSystem : EntitySystem
if (args.Station != null && _stationSystem.GetOwningStation(uid, xform) != args.Station)
continue;
+ // Sunrise added start
// Delta-V: Allow setting a desired SpawnPointType
- if (args.DesiredSpawnPointType != SpawnPointType.Unset)
+
+ // То, что приходит из ивента главнее заданного в спавнпоинте.
+ var spawnPointType = args.DesiredSpawnPointType != SpawnPointType.Unset
+ ? args.DesiredSpawnPointType
+ : spawnPoint.SpawnType;
+
+ var isMatchingJob = string.IsNullOrEmpty(args.Job)
+ || string.IsNullOrEmpty(spawnPoint.Job)
+ || spawnPoint.Job == args.Job;
+
+ switch (spawnPointType)
{
- var isMatchingJob = spawnPoint.SpawnType == SpawnPointType.Job &&
- (args.Job == null || spawnPoint.Job == args.Job);
-
- switch (args.DesiredSpawnPointType)
- {
- case SpawnPointType.Job when isMatchingJob:
- case SpawnPointType.LateJoin when spawnPoint.SpawnType == SpawnPointType.LateJoin:
- case SpawnPointType.Observer when spawnPoint.SpawnType == SpawnPointType.Observer:
- possiblePositions.Add(xform.Coordinates);
- break;
- default:
- continue;
- }
- }
-
- // Sunrise-Start
- else
- {
-
- if (spawnPoint.SpawnType == SpawnPointType.Job &&
- (args.Job == null || spawnPoint.Job == args.Job))
- {
+ case SpawnPointType.Job when isMatchingJob && spawnPoint.SpawnType == SpawnPointType.Job:
+ case SpawnPointType.LateJoin when spawnPoint.SpawnType == SpawnPointType.LateJoin:
+ case SpawnPointType.Observer when spawnPoint.SpawnType == SpawnPointType.Observer:
possiblePositions.Add(xform.Coordinates);
- }
+ break;
+ default:
+ continue;
}
- // Sunrise-End
-
+ // Sunrise added end
}
if (possiblePositions.Count == 0)
diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs
index 490afb8461..da5758cdb8 100644
--- a/Content.Server/Station/Systems/StationSpawningSystem.cs
+++ b/Content.Server/Station/Systems/StationSpawningSystem.cs
@@ -1,5 +1,4 @@
using Content.Server.Access.Systems;
-using Content.Server.Holiday;
using Content.Server.Humanoid;
using Content.Server.Mind;
using Content.Server.PDA;
@@ -11,7 +10,6 @@ using Content.Shared.Access.Systems;
using Content.Shared.CCVar;
using Content.Shared.Clothing;
using Content.Shared.DetailExaminable;
-using Content.Shared.Hands.EntitySystems;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Prototypes;
using Content.Shared.IdentityManagement;
@@ -222,25 +220,6 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem
{
jobSpecial.AfterEquip(entity);
}
-
- // Sunrise-Start
- foreach (var giveaway in _prototypeManager.EnumeratePrototypes())
- {
- if (string.IsNullOrEmpty(giveaway.Holiday) || string.IsNullOrEmpty(giveaway.Prototype))
- continue;
-
- var sysMan = IoCManager.Resolve();
-
- if (!sysMan.GetEntitySystem().IsCurrentlyHoliday(giveaway.Holiday))
- continue;
-
- var entMan = IoCManager.Resolve();
-
- var ent = entMan.SpawnEntity(giveaway.Prototype, entMan.GetComponent(entity).Coordinates);
-
- sysMan.GetEntitySystem().PickupOrDrop(entity, ent);
- }
- // Sunrise-End
}
///
diff --git a/Content.Server/_Sunrise/Biocode/Systems/BiocodeDefibrillatorSystem.cs b/Content.Server/_Sunrise/Biocode/Systems/BiocodeDefibrillatorSystem.cs
index 9f2f21ec0f..b5a4d0acd7 100644
--- a/Content.Server/_Sunrise/Biocode/Systems/BiocodeDefibrillatorSystem.cs
+++ b/Content.Server/_Sunrise/Biocode/Systems/BiocodeDefibrillatorSystem.cs
@@ -15,6 +15,7 @@ public sealed class BiocodeDefibrillatorSystem : EntitySystem
public override void Initialize()
{
base.Initialize();
+
SubscribeLocalEvent(OnCanZap);
}
@@ -28,7 +29,7 @@ public sealed class BiocodeDefibrillatorSystem : EntitySystem
// User is not authorized, cancel the zap
if (!string.IsNullOrEmpty(component.AlertText))
- _popup.PopupEntity(component.AlertText, uid, args.User.Value);
+ _popup.PopupEntity(Loc.GetString(component.AlertText), uid, args.User.Value);
args.Cancelled = true;
}
diff --git a/Content.Server/_Sunrise/BloodCult/GameRule/BloodCultRuleSystem.cs b/Content.Server/_Sunrise/BloodCult/GameRule/BloodCultRuleSystem.cs
index 835d1c9236..1acb915843 100644
--- a/Content.Server/_Sunrise/BloodCult/GameRule/BloodCultRuleSystem.cs
+++ b/Content.Server/_Sunrise/BloodCult/GameRule/BloodCultRuleSystem.cs
@@ -397,6 +397,9 @@ public sealed class BloodCultRuleSystem : GameRuleSystem
{
foreach (var userAction in actionsComponent.Actions)
{
+ if (TerminatingOrDeleted(userAction))
+ continue;
+
var entityPrototypeId = MetaData(userAction).EntityPrototype?.ID;
if (entityPrototypeId != null && BloodCultistComponent.CultistActions.Contains(entityPrototypeId))
_actionsSystem.RemoveAction(uid, userAction);
diff --git a/Content.Server/_Sunrise/BloodCult/Items/Systems/CultMirrorShieldSystem.cs b/Content.Server/_Sunrise/BloodCult/Items/Systems/CultMirrorShieldSystem.cs
index 6a38709ad9..53ddc2a978 100644
--- a/Content.Server/_Sunrise/BloodCult/Items/Systems/CultMirrorShieldSystem.cs
+++ b/Content.Server/_Sunrise/BloodCult/Items/Systems/CultMirrorShieldSystem.cs
@@ -13,11 +13,13 @@ using Content.Shared._Sunrise.Events;
using Content.Shared.Blocking;
using Content.Shared.Body.Events;
using Content.Shared.Damage;
+using Content.Shared.Damage.Components;
using Content.Shared.FixedPoint;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction.Components;
using Content.Shared.Inventory;
using Content.Shared.Mobs;
+using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Content.Shared.NPC.Systems;
using Content.Shared.Popups;
@@ -164,6 +166,10 @@ public sealed partial class CultMirrorShieldSystem : EntitySystem
///
private void OnIllusionInit(EntityUid uid, CultMirrorIllusionComponent component, ComponentInit args)
{
+ EnsureComp(uid);
+ EnsureComp(uid);
+ EnsureComp(uid);
+
_mobThreshold.SetMobStateThreshold(uid, 15, MobState.Critical);
_mobThreshold.SetMobStateThreshold(uid, 20, MobState.Dead);
}
diff --git a/Content.Server/_Sunrise/ExtendedAccess/ExtendedAccessSystem.cs b/Content.Server/_Sunrise/ExtendedAccess/ExtendedAccessSystem.cs
index 82731fa4be..901f7b5a64 100644
--- a/Content.Server/_Sunrise/ExtendedAccess/ExtendedAccessSystem.cs
+++ b/Content.Server/_Sunrise/ExtendedAccess/ExtendedAccessSystem.cs
@@ -73,6 +73,9 @@ public sealed class ExtendedAccessSystem : EntitySystem
///
private void AfterDelay(Entity station)
{
+ if (TerminatingOrDeleted(station))
+ return;
+
_chat.DispatchStationAnnouncement(station,
Loc.GetString("access-system-accesses-established"),
colorOverride: Color.Yellow,
diff --git a/Content.Server/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs b/Content.Server/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs
deleted file mode 100644
index b034d102c8..0000000000
--- a/Content.Server/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Content.Shared.NPC.Prototypes;
-using Content.Shared.Sunrise.FactionGunBlockerSystem;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
-
-namespace Content.Server._Sunrise.FactionWeaponBlockerSystem;
-
-[RegisterComponent]
-public sealed partial class FactionWeaponBlockerComponent : SharedFactionWeaponBlockerComponent
-{
- [ViewVariables(VVAccess.ReadWrite)]
- public bool CanUse;
-
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("alertText")]
- public string AlertText = "";
-
- [ViewVariables(VVAccess.ReadWrite),
- DataField("factions", customTypeSerializer:typeof(PrototypeIdHashSetSerializer))]
- public HashSet Factions = new();
-}
diff --git a/Content.Server/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs b/Content.Server/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs
deleted file mode 100644
index 5852f8009e..0000000000
--- a/Content.Server/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using Content.Shared.Hands;
-using Content.Shared.NPC.Components;
-using Content.Shared.Sunrise.FactionGunBlockerSystem;
-using Content.Shared.Weapons.Melee.Events;
-using Content.Shared.Weapons.Ranged.Systems;
-using Robust.Shared.GameStates;
-
-namespace Content.Server._Sunrise.FactionWeaponBlockerSystem;
-
-public sealed class FactionWeaponBlockerSystem : EntitySystem
-{
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent(OnShootAttempt);
- SubscribeLocalEvent(OnMeleeAttempt);
- SubscribeLocalEvent(OnGetState);
- SubscribeLocalEvent(OnGotEquippedHand);
- }
-
- private void OnGotEquippedHand(EntityUid uid, FactionWeaponBlockerComponent component, GotEquippedHandEvent args)
- {
- var canUse = false;
- if (TryComp(args.User, out var npcFactionMemberComponent))
- {
- foreach (var faction in npcFactionMemberComponent.Factions)
- {
- if (component.Factions.Contains(faction))
- canUse = true;
- }
- }
-
- component.CanUse = canUse;
- Dirty(uid, component);
- }
-
- private void OnGetState(EntityUid uid, FactionWeaponBlockerComponent component, ref ComponentGetState args)
- {
- args.State = new FactionWeaponBlockerComponentState()
- {
- CanUse = component.CanUse,
- AlertText = component.AlertText
- };
- }
-
- private void OnMeleeAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptMeleeEvent args)
- {
- if (component.CanUse)
- return;
-
- args.Cancelled = true;
- args.Message = component.AlertText;
- }
-
- private void OnShootAttempt(EntityUid uid, FactionWeaponBlockerComponent component, ref AttemptShootEvent args)
- {
- if (component.CanUse)
- return;
-
- args.Cancelled = true;
- args.Message = component.AlertText;
- }
-}
diff --git a/Content.Server/_Sunrise/Helpers/SunriseHelpersSystem.cs b/Content.Server/_Sunrise/Helpers/SunriseHelpersSystem.cs
index 23e9d968b7..cf2aa6ff98 100644
--- a/Content.Server/_Sunrise/Helpers/SunriseHelpersSystem.cs
+++ b/Content.Server/_Sunrise/Helpers/SunriseHelpersSystem.cs
@@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using Content.Server._Sunrise.Other.StationOnlyDirectSpawn;
using Content.Server.Atmos.EntitySystems;
using Content.Server.Station.Components;
using Content.Shared._Sunrise.Helpers;
@@ -125,4 +126,19 @@ public sealed partial class SunriseHelpersSystem : SharedSunriseHelpersSystem
}
#endregion
+
+ public List GetSpawnableStations()
+ {
+ var spawnableStations = new List();
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var uid, out _, out _))
+ {
+ if (HasComp(uid))
+ continue;
+
+ spawnableStations.Add(uid);
+ }
+
+ return spawnableStations;
+ }
}
diff --git a/Content.Server/_Sunrise/Holiday/HolidayGiveaway/HolidayGiveawayItemPrototype.cs b/Content.Server/_Sunrise/Holiday/HolidayGiveaway/HolidayGiveawayItemPrototype.cs
new file mode 100644
index 0000000000..6d5fdbafdc
--- /dev/null
+++ b/Content.Server/_Sunrise/Holiday/HolidayGiveaway/HolidayGiveawayItemPrototype.cs
@@ -0,0 +1,22 @@
+using Content.Server.Holiday;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._Sunrise.Holiday.HolidayGiveaway;
+
+///
+/// Прототип для подарков, которые будут выданы в определенный праздник.
+///
+///
+///
+[Prototype]
+public sealed partial class HolidayGiveawayItemPrototype : IPrototype
+{
+ [IdDataField, ViewVariables]
+ public string ID { get; private set; } = default!;
+
+ [DataField(required: true)]
+ public ProtoId Holiday;
+
+ [DataField(required: true)]
+ public EntProtoId Prototype;
+}
diff --git a/Content.Server/_Sunrise/Holiday/HolidayGiveaway/HolidayGiveawaySystem.cs b/Content.Server/_Sunrise/Holiday/HolidayGiveaway/HolidayGiveawaySystem.cs
new file mode 100644
index 0000000000..9258d23ea9
--- /dev/null
+++ b/Content.Server/_Sunrise/Holiday/HolidayGiveaway/HolidayGiveawaySystem.cs
@@ -0,0 +1,128 @@
+using Content.Server.GameTicking;
+using Content.Server.Hands.Systems;
+using Content.Server.Holiday;
+using Content.Shared.CCVar;
+using Content.Shared.GameTicking;
+using Robust.Shared.Configuration;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._Sunrise.Holiday.HolidayGiveaway;
+
+///
+/// Система для выдачи различных подарков во время определенных праздников.
+///
+public sealed class HolidayGiveawaySystem : EntitySystem
+{
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+ [Dependency] private readonly IConfigurationManager _configuration = default!;
+ [Dependency] private readonly HolidaySystem _holiday = default!;
+ [Dependency] private readonly HandsSystem _hands = default!;
+
+ ///
+ /// Кешированные текущие раздачи, которые будут применены после спавна игрока в
+ /// Сбрасываются и пересчитываются каждый раунд в
+ ///
+ private readonly List> _activeGiveaways = [];
+
+ [ViewVariables]
+ private bool _enabled = true;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ Subs.CVar(_configuration, CCVars.HolidaysEnabled, OnHolidaysEnableChange);
+
+ SubscribeLocalEvent(CacheGiveaways);
+ SubscribeLocalEvent(CacheGiveaways);
+
+ SubscribeLocalEvent(OnPlayerSpawn);
+ SubscribeLocalEvent(Cancel);
+ }
+
+ ///
+ /// Основной метод для кеширования подарков.
+ ///
+ private void CacheGiveaways(GameRunLevelChangedEvent ev)
+ {
+ if (!_enabled)
+ return;
+
+ if (ev.New != GameRunLevel.PreRoundLobby)
+ return;
+
+ CacheGiveaways();
+ }
+
+ ///
+ /// Дополнительный метод для кеширования подарков.
+ /// Специально для случая, когда лобби недоступно или выключено.
+ ///
+ private void CacheGiveaways(RoundStartedEvent ev)
+ {
+ if (!_enabled)
+ return;
+
+ if (_activeGiveaways.Count != 0)
+ return;
+
+ CacheGiveaways();
+ }
+
+ private void CacheGiveaways()
+ {
+ _activeGiveaways.Clear();
+
+ foreach (var giveaway in _prototype.EnumeratePrototypes())
+ {
+ if (!_holiday.IsCurrentlyHoliday(giveaway.Holiday))
+ continue;
+
+ _activeGiveaways.Add(giveaway.ID);
+ }
+ }
+
+ private void OnPlayerSpawn(PlayerSpawnCompleteEvent ev)
+ {
+ if (!_enabled)
+ return;
+
+ if (_activeGiveaways.Count == 0)
+ return;
+
+ var attempt = new HolidayGiveawayAttemptEvent();
+ RaiseLocalEvent(ev.Mob, ref attempt);
+
+ if (attempt.Canceled)
+ return;
+
+ foreach (var giveawayProto in _activeGiveaways)
+ {
+ var giveAway = _prototype.Index(giveawayProto);
+ var present = SpawnNextToOrDrop(giveAway.Prototype, ev.Mob);
+
+ _hands.PickupOrDrop(ev.Mob, present);
+ }
+ }
+
+ private void Cancel(Entity ent, ref HolidayGiveawayAttemptEvent args)
+ {
+ args.Canceled = true;
+ }
+
+ private void OnHolidaysEnableChange(bool enabled)
+ {
+ _enabled = enabled;
+
+ if (enabled)
+ CacheGiveaways();
+ else
+ _activeGiveaways.Clear();
+ }
+}
+
+[ByRefEvent]
+public record struct HolidayGiveawayAttemptEvent
+{
+ public bool Canceled;
+}
diff --git a/Content.Server/_Sunrise/Holiday/HolidayGiveaway/PreventHolidayGiveawayComponent.cs b/Content.Server/_Sunrise/Holiday/HolidayGiveaway/PreventHolidayGiveawayComponent.cs
new file mode 100644
index 0000000000..fef1b13dc7
--- /dev/null
+++ b/Content.Server/_Sunrise/Holiday/HolidayGiveaway/PreventHolidayGiveawayComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server._Sunrise.Holiday.HolidayGiveaway;
+
+///
+/// Компонент, блокирующий выдаче сущности подарков в честь праздника.
+///
+[RegisterComponent]
+public sealed partial class PreventHolidayGiveawayComponent : Component
+{
+
+}
diff --git a/Content.Server/_Sunrise/Other/StationOnlyDirectSpawn/StationOnlyDirectSpawnComponent.cs b/Content.Server/_Sunrise/Other/StationOnlyDirectSpawn/StationOnlyDirectSpawnComponent.cs
new file mode 100644
index 0000000000..ec35a450e1
--- /dev/null
+++ b/Content.Server/_Sunrise/Other/StationOnlyDirectSpawn/StationOnlyDirectSpawnComponent.cs
@@ -0,0 +1,11 @@
+namespace Content.Server._Sunrise.Other.StationOnlyDirectSpawn;
+
+///
+/// Компонент маркер, который обозначает, что на станции нельзя будет заспавниться путем случайного выбора из пула доступных станций.
+/// Это нужно, чтобы помечать станции, на которые появляться должно быть можно ТОЛЬКО путем прямого спавна на ней
+///
+[RegisterComponent]
+public sealed partial class StationOnlyDirectSpawnComponent : Component
+{
+
+}
diff --git a/Content.Server/_Sunrise/SyndicateTeleporter/SyndicateTeleporterSystem.cs b/Content.Server/_Sunrise/SyndicateTeleporter/SyndicateTeleporterSystem.cs
index 459373bd6f..43cd7597ba 100644
--- a/Content.Server/_Sunrise/SyndicateTeleporter/SyndicateTeleporterSystem.cs
+++ b/Content.Server/_Sunrise/SyndicateTeleporter/SyndicateTeleporterSystem.cs
@@ -48,7 +48,8 @@ public sealed class SyndicateTeleporterSystem : EntitySystem
if (TryComp(uid, out var biocode) && !_biocode.CanUse(args.User, biocode.Factions))
{
if (!string.IsNullOrEmpty(biocode.AlertText))
- _popup.PopupEntity(biocode.AlertText, args.User, args.User);
+ _popup.PopupEntity(Loc.GetString(biocode.AlertText), args.User, args.User);
+
args.Handled = true;
return;
}
diff --git a/Content.Shared/Buckle/Components/BuckleComponent.cs b/Content.Shared/Buckle/Components/BuckleComponent.cs
index 9b0a157bdf..f25aeb08b1 100644
--- a/Content.Shared/Buckle/Components/BuckleComponent.cs
+++ b/Content.Shared/Buckle/Components/BuckleComponent.cs
@@ -73,7 +73,7 @@ public sealed partial class BuckleComponent : Component
// Sunrise-Start
[DataField]
- public float UnbuckleDoafterTime = 2f;
+ public TimeSpan UnbuckleDoafterTime = TimeSpan.FromSeconds(2f);
// Sunrise-End
}
diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs
index 64996b091b..7bfa8ffb25 100644
--- a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs
+++ b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs
@@ -116,14 +116,10 @@ public abstract partial class SharedBuckleSystem
{
BreakOnMove = true,
BreakOnDamage = true,
- AttemptFrequency = AttemptFrequency.EveryTick
+ AttemptFrequency = AttemptFrequency.EveryTick,
};
- if (_doAfter.TryStartDoAfter(doAfterArgs))
- {
- args.Handled = true;
- return;
- }
+ args.Handled = _doAfter.TryStartDoAfter(doAfterArgs);
}
}
// Sunrise-End
diff --git a/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingComponent.cs b/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingComponent.cs
index 19f9f9975a..b7e1d0e593 100644
--- a/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingComponent.cs
+++ b/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingComponent.cs
@@ -1,17 +1,15 @@
using Content.Shared.Damage;
-using Content.Shared.Damage.Prototypes;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Shared._Sunrise.Abilities.Felinid;
-[RegisterComponent]
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class FelinidLickingComponent : Component
{
- [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string ActionLickingWoundsId = "ActionLickingWounds";
+ [DataField]
+ public EntProtoId ActionLickingWoundsId = "ActionLickingWounds";
[DataField(required: true)]
public DamageSpecifier Damage = default!;
@@ -26,8 +24,11 @@ public sealed partial class FelinidLickingComponent : Component
public TimeSpan Delay = TimeSpan.FromSeconds(3f);
[DataField]
- public SoundSpecifier? HealingBeginSound = null;
+ public SoundSpecifier? HealingBeginSound;
[DataField]
- public SoundSpecifier? HealingEndSound = null;
+ public SoundSpecifier? HealingEndSound;
+
+ [ViewVariables, AutoNetworkedField]
+ public EntityUid? Action;
}
diff --git a/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingSystem.cs b/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingSystem.cs
index 333fa6423b..c6431fc4bf 100644
--- a/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingSystem.cs
+++ b/Content.Shared/_Sunrise/Abilities/Felinid/FelinidLickingSystem.cs
@@ -1,5 +1,4 @@
using Content.Shared.Actions;
-using Content.Shared.Damage;
using Content.Shared.DoAfter;
using Content.Shared.Popups;
using Content.Shared.Standing;
@@ -12,7 +11,6 @@ using Content.Shared.Mobs.Systems;
using Content.Shared.Nutrition.Components;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Serialization;
-using System.Diagnostics.CodeAnalysis;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Systems;
@@ -25,56 +23,63 @@ public sealed class FelinidLickingSystem : EntitySystem
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
- [Dependency] private readonly SharedBloodstreamSystem _bloodstreamSystem = default!;
+ [Dependency] private readonly SharedBloodstreamSystem _bloodstream = default!;
[Dependency] private readonly StandingStateSystem _standing = default!;
- [Dependency] private readonly InventorySystem _inventorySystem = default!;
- [Dependency] private readonly MobStateSystem _mobStateSystem = default!;
+ [Dependency] private readonly InventorySystem _inventory = default!;
+ [Dependency] private readonly MobStateSystem _mobState = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnStartup);
+ SubscribeLocalEvent(OnShutdown);
+
SubscribeLocalEvent(OnLickingAction);
SubscribeLocalEvent(OnDoAfter);
}
- private void OnStartup(EntityUid uid, FelinidLickingComponent component, ComponentStartup args)
+ private void OnStartup(Entity ent, ref ComponentStartup args)
{
- _actions.AddAction(uid, component.ActionLickingWoundsId);
+ _actions.AddAction(ent, ref ent.Comp.Action, ent.Comp.ActionLickingWoundsId);
+ Dirty(ent);
}
- private void OnLickingAction(EntityUid uid, FelinidLickingComponent component, LickingWoundsTargetActionEvent args)
+ private void OnShutdown(Entity ent, ref ComponentShutdown args)
{
- if (args.Handled || args.Target == null) // мда
+ _actions.RemoveAction(ent.Owner, ent.Comp.Action);
+ }
+
+ private void OnLickingAction(Entity ent, ref LickingWoundsTargetActionEvent args)
+ {
+ if (args.Handled) // мда
return;
- var target = args.Target;
-
- if (!CanLick(uid, target, component, out var damageable, out var errorMessage))
+ if (!CanLick(ent, args.Target, out var errorMessage))
{
if (errorMessage != null)
- _popup.PopupClient(errorMessage, uid, uid);
+ _popup.PopupClient(errorMessage, ent, ent);
+
return;
}
- StartLicking(uid, target, component, damageable!);
+ args.Handled = TryStartLicking(ent, args.Target);
}
- private void StartLicking(EntityUid uid, EntityUid target, FelinidLickingComponent licking, DamageableComponent damageable)
+ private bool TryStartLicking(Entity ent, EntityUid target)
{
- _audio.PlayPredicted(licking.HealingBeginSound, uid, uid);
+ _audio.PlayPredicted(ent.Comp.HealingBeginSound, ent, ent);
- var doAfterArgs = new DoAfterArgs(EntityManager, uid, licking.Delay, new FelinidLickingDoAfterEvent(), uid, target: target)
+ var doAfterArgs = new DoAfterArgs(EntityManager, ent, ent.Comp.Delay, new FelinidLickingDoAfterEvent(), ent, target: target)
{
BreakOnMove = true,
- NeedHand = false
+ NeedHand = false,
};
- _doAfter.TryStartDoAfter(doAfterArgs);
+ return _doAfter.TryStartDoAfter(doAfterArgs);
}
- private void OnDoAfter(EntityUid uid, FelinidLickingComponent component, FelinidLickingDoAfterEvent args)
+ private void OnDoAfter(Entity ent, ref FelinidLickingDoAfterEvent args)
{
if (args.Cancelled || args.Handled || args.Target is not { } target)
return;
@@ -82,28 +87,26 @@ public sealed class FelinidLickingSystem : EntitySystem
if (!TryComp(target, out var damageable))
return;
- _damageable.TryChangeDamage(target, component.Damage, true, origin: uid);
+ _damageable.TryChangeDamage(target, ent.Comp.Damage, true, origin: ent);
- if (component.StopBleeding && TryComp(target, out var bloodstream))
+ if (ent.Comp.StopBleeding && TryComp(target, out var bloodstream))
{
var wasBleeding = bloodstream.BleedAmount > 0;
- _bloodstreamSystem.TryModifyBleedAmount((target, bloodstream), component.BloodlossModifier);
+ _bloodstream.TryModifyBleedAmount((target, bloodstream), ent.Comp.BloodlossModifier);
if (wasBleeding && bloodstream.BleedAmount <= 0)
{
- var popup = (uid == target)
+ var popup = ent.Owner == target
? Loc.GetString("medical-item-stop-bleeding-self")
: Loc.GetString("medical-item-stop-bleeding", ("target", Identity.Entity(target, EntityManager)));
- _popup.PopupClient(popup, target, uid);
+ _popup.PopupClient(popup, target, ent);
}
}
- _audio.PlayPredicted(component.HealingEndSound, uid, uid);
+ _audio.PlayPredicted(ent.Comp.HealingEndSound, ent, ent);
- if (_mobStateSystem.IsAlive(target) && HasDamageToHeal(target, damageable, component))
- {
- StartLicking(uid, target, component, damageable);
- }
+ if (_mobState.IsAlive(target) && HasDamageToHeal(target, damageable, ent.Comp))
+ TryStartLicking(ent, target);
args.Handled = true;
}
@@ -111,28 +114,24 @@ public sealed class FelinidLickingSystem : EntitySystem
///
/// Проверяет, можно ли облизывать раны цели
///
- /// Тот, кто облизывает
+ /// Тот, кто облизывает
/// Цель
- /// Компонент облизывания
- /// Компонент урона цели (если доступен)
/// Сообщение об ошибке (если есть)
/// True, если можно облизывать
- private bool CanLick(EntityUid licker, EntityUid target, FelinidLickingComponent component,
- [NotNullWhen(true)] out DamageableComponent? damageable, out string? errorMessage)
+ private bool CanLick(Entity ent, EntityUid target, out string? errorMessage)
{
- damageable = null;
errorMessage = null;
- if (_standing.IsDown(licker))
+ if (_standing.IsDown(ent.Owner))
return false;
- if (!TryComp(target, out damageable))
+ if (!TryComp(target, out var damageable))
return false;
- if (!_mobStateSystem.IsAlive(target))
+ if (!_mobState.IsAlive(target))
return false;
- if (HasIngestionBlocker(licker))
+ if (HasIngestionBlocker(ent))
{
errorMessage = Loc.GetString("felinid-licking-blocked-by-blocker");
return false;
@@ -144,7 +143,7 @@ public sealed class FelinidLickingSystem : EntitySystem
return false;
}
- if (!HasDamageToHeal(target, damageable, component))
+ if (!HasDamageToHeal(target, damageable, ent.Comp))
return false;
return true;
@@ -155,7 +154,7 @@ public sealed class FelinidLickingSystem : EntitySystem
///
private bool HasDamageToHeal(EntityUid target, DamageableComponent damageable, FelinidLickingComponent licking)
{
- foreach (var (type, amount) in licking.Damage.DamageDict)
+ foreach (var (type, _) in licking.Damage.DamageDict)
{
if (damageable.Damage.DamageDict.TryGetValue(type, out var currentDamage) &&
currentDamage > FixedPoint2.Zero)
@@ -181,7 +180,7 @@ public sealed class FelinidLickingSystem : EntitySystem
if (!TryComp(uid, out var inventory))
return false;
- var enumerator = _inventorySystem.GetSlotEnumerator((uid, inventory), SlotFlags.MASK | SlotFlags.HEAD);
+ var enumerator = _inventory.GetSlotEnumerator((uid, inventory), SlotFlags.MASK | SlotFlags.HEAD);
while (enumerator.NextItem(out var item))
{
if (TryComp(item, out var blocker) && blocker.Enabled)
@@ -199,7 +198,7 @@ public sealed class FelinidLickingSystem : EntitySystem
if (!TryComp(uid, out var inventory))
return false;
- var enumerator = _inventorySystem.GetSlotEnumerator((uid, inventory), SlotFlags.INNERCLOTHING | SlotFlags.OUTERCLOTHING);
+ var enumerator = _inventory.GetSlotEnumerator((uid, inventory), SlotFlags.INNERCLOTHING | SlotFlags.OUTERCLOTHING);
return enumerator.NextItem(out _);
}
}
diff --git a/Content.Shared/_Sunrise/Biocode/BiocodeComponent.cs b/Content.Shared/_Sunrise/Biocode/BiocodeComponent.cs
index 701a4867c6..7a574d6d5b 100644
--- a/Content.Shared/_Sunrise/Biocode/BiocodeComponent.cs
+++ b/Content.Shared/_Sunrise/Biocode/BiocodeComponent.cs
@@ -1,16 +1,15 @@
using Content.Shared.NPC.Prototypes;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
namespace Content.Shared._Sunrise.Biocode;
-[RegisterComponent]
+[RegisterComponent, NetworkedComponent]
public sealed partial class BiocodeComponent : Component
{
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("alertText")]
- public string AlertText = "";
+ [DataField]
+ public string AlertText = "item-biocode-refused";
- [ViewVariables(VVAccess.ReadWrite),
- DataField("factions", customTypeSerializer:typeof(PrototypeIdHashSetSerializer))]
- public HashSet Factions = new();
+ [DataField(required: true)]
+ public HashSet> Factions = [];
}
diff --git a/Content.Shared/_Sunrise/Biocode/BiocodeSystem.cs b/Content.Shared/_Sunrise/Biocode/BiocodeSystem.cs
index abb5eafa31..2719d9a8df 100644
--- a/Content.Shared/_Sunrise/Biocode/BiocodeSystem.cs
+++ b/Content.Shared/_Sunrise/Biocode/BiocodeSystem.cs
@@ -1,5 +1,7 @@
using Content.Shared.NPC.Components;
+using Content.Shared.NPC.Prototypes;
using Content.Shared.Popups;
+using Robust.Shared.Prototypes;
namespace Content.Shared._Sunrise.Biocode;
@@ -13,7 +15,7 @@ public sealed class BiocodeSystem : EntitySystem
SubscribeLocalEvent(OnAttemptThrowBiocode);
}
- public bool CanUse(EntityUid user, HashSet factions)
+ public bool CanUse(EntityUid user, HashSet> factions)
{
var canUse = false;
if (!TryComp(user, out var npcFactionMemberComponent))
@@ -34,7 +36,7 @@ public sealed class BiocodeSystem : EntitySystem
return;
if (!string.IsNullOrEmpty(component.AlertText))
- _popup.PopupEntity(component.AlertText, args.User.Value, args.User.Value);
+ _popup.PopupEntity(Loc.GetString(component.AlertText), args.User.Value, args.User.Value);
args.Cancelled = true;
}
diff --git a/Content.Shared/_Sunrise/Biocode/Components/BiocodeDeactivationComponent.cs b/Content.Shared/_Sunrise/Biocode/Components/BiocodeDeactivationComponent.cs
index 22dd415fef..c729532d0e 100644
--- a/Content.Shared/_Sunrise/Biocode/Components/BiocodeDeactivationComponent.cs
+++ b/Content.Shared/_Sunrise/Biocode/Components/BiocodeDeactivationComponent.cs
@@ -11,19 +11,19 @@ public sealed partial class BiocodeDeactivationComponent : Component
///
/// Whether the item should be deactivated when removed from authorized user's possession.
///
- [DataField, ViewVariables(VVAccess.ReadWrite)]
+ [DataField]
public bool DeactivateOnRemoval = true;
///
/// Whether the item should be deactivated when placed in unauthorized user's possession.
///
- [DataField, ViewVariables(VVAccess.ReadWrite)]
+ [DataField]
public bool DeactivateOnUnauthorized = true;
///
/// Alert text to show when unauthorized user tries to use the item.
/// If null, uses the BiocodeComponent's alert text.
///
- [DataField, ViewVariables(VVAccess.ReadWrite)]
+ [DataField]
public string? AlertText;
}
diff --git a/Content.Shared/_Sunrise/BloodCult/Systems/CultistSystem.cs b/Content.Shared/_Sunrise/BloodCult/Systems/CultistSystem.cs
deleted file mode 100644
index 8cda35764a..0000000000
--- a/Content.Shared/_Sunrise/BloodCult/Systems/CultistSystem.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Content.Shared._Sunrise.BloodCult.Components;
-
-namespace Content.Shared._Sunrise.BloodCult.Systems;
-
-///
-/// Thats need for chat perms update
-///
-public sealed class CultistSystem : EntitySystem
-{
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent(OnInit);
- SubscribeLocalEvent(OnRemove);
- }
-
- private void OnInit(EntityUid uid, BloodCultistComponent component, ComponentStartup args)
- {
- RaiseLocalEvent(new EventCultistComponentState(true));
- }
-
- private void OnRemove(EntityUid uid, BloodCultistComponent component, ComponentShutdown args)
- {
- RaiseLocalEvent(new EventCultistComponentState(false));
- }
-}
-
-public sealed class EventCultistComponentState
-{
- public EventCultistComponentState(bool state)
- {
- Created = state;
- }
-
- public bool Created { get; }
-}
diff --git a/Content.Shared/_Sunrise/Boss/Systems/SharedHellSpawnInvincibilitySystem.cs b/Content.Shared/_Sunrise/Boss/Systems/SharedHellSpawnInvincibilitySystem.cs
index 670a3cf6de..d37439c8e1 100644
--- a/Content.Shared/_Sunrise/Boss/Systems/SharedHellSpawnInvincibilitySystem.cs
+++ b/Content.Shared/_Sunrise/Boss/Systems/SharedHellSpawnInvincibilitySystem.cs
@@ -59,7 +59,7 @@ public abstract class SharedHellSpawnInvincibilitySystem : EntitySystem
private void RemoveGodmode(EntityUid uid, HellSpawnInvincibilityComponent? comp = null)
{
- if (!Resolve(uid, ref comp))
+ if (!Resolve(uid, ref comp, false))
return;
if (HasComp(uid))
{
diff --git a/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs b/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs
new file mode 100644
index 0000000000..0dc0479ad9
--- /dev/null
+++ b/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerComponent.cs
@@ -0,0 +1,18 @@
+using Content.Shared.NPC.Prototypes;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem;
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class FactionWeaponBlockerComponent : Component
+{
+ [ViewVariables, AutoNetworkedField]
+ public bool CanUse;
+
+ [DataField]
+ public string AlertText = "weapon-biocode-refused";
+
+ [DataField(required: true)]
+ public HashSet> Factions = [];
+}
diff --git a/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs b/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs
new file mode 100644
index 0000000000..8c0e3b8ac1
--- /dev/null
+++ b/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/FactionWeaponBlockerSystem.cs
@@ -0,0 +1,53 @@
+using System.Linq;
+using Content.Shared.Hands;
+using Content.Shared.NPC.Components;
+using Content.Shared.Weapons.Melee.Events;
+using Content.Shared.Weapons.Ranged.Systems;
+
+namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem;
+
+public sealed class SharedFactionWeaponBlockerSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnShootAttempt);
+ SubscribeLocalEvent(OnMeleeAttempt);
+
+ SubscribeLocalEvent(OnGotEquippedHand);
+ }
+
+ private void OnGotEquippedHand(Entity ent, ref GotEquippedHandEvent args)
+ {
+ if (!TryComp(args.User, out var npcFactionMemberComponent))
+ return;
+
+ var canUse = npcFactionMemberComponent.Factions
+ .Any(x => ent.Comp.Factions.Contains(x));
+
+ if (ent.Comp.CanUse == canUse)
+ return;
+
+ ent.Comp.CanUse = canUse;
+ Dirty(ent);
+ }
+
+ private void OnMeleeAttempt(Entity ent, ref AttemptMeleeEvent args)
+ {
+ if (ent.Comp.CanUse)
+ return;
+
+ args.Cancelled = true;
+ args.Message = Loc.GetString(ent.Comp.AlertText);
+ }
+
+ private void OnShootAttempt(Entity ent, ref AttemptShootEvent args)
+ {
+ if (ent.Comp.CanUse)
+ return;
+
+ args.Cancelled = true;
+ args.Message = Loc.GetString(ent.Comp.AlertText);
+ }
+}
diff --git a/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/SharedFactionWeaponBlockerComponent.cs b/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/SharedFactionWeaponBlockerComponent.cs
deleted file mode 100644
index b945b08f65..0000000000
--- a/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/SharedFactionWeaponBlockerComponent.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Robust.Shared.GameStates;
-using Robust.Shared.Serialization;
-
-namespace Content.Shared.Sunrise.FactionGunBlockerSystem;
-
-[NetworkedComponent]
-public abstract partial class SharedFactionWeaponBlockerComponent : Component
-{
-
-}
-
-[Serializable, NetSerializable]
-public sealed class FactionWeaponBlockerComponentState : ComponentState
-{
- public bool CanUse;
- public string AlertText = "";
-}
diff --git a/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/SharedFactionWeaponBlockerSystem.cs b/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/SharedFactionWeaponBlockerSystem.cs
deleted file mode 100644
index ecb4e5d3db..0000000000
--- a/Content.Shared/_Sunrise/FactionWeaponBlockerSystem/SharedFactionWeaponBlockerSystem.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem;
-
-public sealed class SharedFactionWeaponBlockerSystem : EntitySystem
-{
-
-}
diff --git a/Content.Shared/_Sunrise/Trigger/TriggerOnBeingGibbed/TriggerOnBeingGibbedComponent.cs b/Content.Shared/_Sunrise/Trigger/TriggerOnBeingGibbed/TriggerOnBeingGibbedComponent.cs
new file mode 100644
index 0000000000..46723baf06
--- /dev/null
+++ b/Content.Shared/_Sunrise/Trigger/TriggerOnBeingGibbed/TriggerOnBeingGibbedComponent.cs
@@ -0,0 +1,10 @@
+using Content.Shared.Trigger.Components.Triggers;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._Sunrise.Trigger.TriggerOnBeingGibbed;
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class TriggerOnBeingGibbedComponent : BaseTriggerOnXComponent
+{
+
+}
diff --git a/Content.Shared/_Sunrise/Trigger/TriggerOnBeingGibbed/TriggerOnBeingGibbedSystem.cs b/Content.Shared/_Sunrise/Trigger/TriggerOnBeingGibbed/TriggerOnBeingGibbedSystem.cs
new file mode 100644
index 0000000000..7423586f6c
--- /dev/null
+++ b/Content.Shared/_Sunrise/Trigger/TriggerOnBeingGibbed/TriggerOnBeingGibbedSystem.cs
@@ -0,0 +1,21 @@
+using Content.Shared.Body.Events;
+using Content.Shared.Trigger.Systems;
+
+namespace Content.Shared._Sunrise.Trigger.TriggerOnBeingGibbed;
+
+public sealed class TriggerOnBeingGibbedSystem : EntitySystem
+{
+ [Dependency] private readonly TriggerSystem _trigger = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(Trigger);
+ }
+
+ private void Trigger(Entity ent, ref BeingGibbedEvent args)
+ {
+ _trigger.Trigger(ent, key: ent.Comp.KeyOut);
+ }
+}
diff --git a/Resources/Locale/en-US/_prototypes/_sunrise/structures/interrogator.ftl b/Resources/Locale/en-US/_prototypes/_sunrise/structures/interrogator.ftl
index 8bc794f08e..ab713e5d38 100644
--- a/Resources/Locale/en-US/_prototypes/_sunrise/structures/interrogator.ftl
+++ b/Resources/Locale/en-US/_prototypes/_sunrise/structures/interrogator.ftl
@@ -2,7 +2,5 @@ ent-ImplantExtractor = microwave implant extractor
.desc = A high-tech device specifically designed for implant extraction in conditions with low-skilled medical personnel.
ent-Interrogator = interrogator
.desc = apchy
-ent-ImplantExtractorMachineCircuitboard = implant scan machine board
- .desc = A machine printed circuit board for a implant extractor.
ent-InterrogatorMachineCircuitboard = interrogator machine board
.desc = A machine printed circuit board for a interrogator.
diff --git a/Resources/Locale/ru-RU/_prototypes/_sunrise/structures/interrogator.ftl b/Resources/Locale/ru-RU/_prototypes/_sunrise/structures/interrogator.ftl
index cbce8b0377..1f92955815 100644
--- a/Resources/Locale/ru-RU/_prototypes/_sunrise/structures/interrogator.ftl
+++ b/Resources/Locale/ru-RU/_prototypes/_sunrise/structures/interrogator.ftl
@@ -2,7 +2,5 @@ ent-ImplantExtractor = Микроволновой экстрактор импл
.desc = Устройство предназначеное для извлечения имплантов из гуманоидов, разработанное для извлечени имплантов в условиях низкоквалифицированных врачей.
ent-Interrogator = Экстрактор имплантов
.desc = Устройство предназначеное для извлечения имплантов из гуманоидов.
-ent-ImplantExtractorMachineCircuitboard = плата машины для сканирования имплантатов
- .desc = Машинная печатная плата для экстрактора имплантатов.
ent-InterrogatorMachineCircuitboard = машинная плата интеррогатора
.desc = Машинная печатная плата для интеррогатора.
diff --git a/Resources/Locale/ru-RU/_strings/_sunrise/weapons/biocode.ftl b/Resources/Locale/ru-RU/_strings/_sunrise/weapons/biocode.ftl
new file mode 100644
index 0000000000..61d24369d3
--- /dev/null
+++ b/Resources/Locale/ru-RU/_strings/_sunrise/weapons/biocode.ftl
@@ -0,0 +1,2 @@
+weapon-biocode-refused = Данное оружие биокодировано. Вы не можете его использовать.
+item-biocode-refused = Данный предмет биокодирован. Вы не можете его использовать.
diff --git a/Resources/Locale/ru-RU/_strings/contraband/contraband-severity.ftl b/Resources/Locale/ru-RU/_strings/contraband/contraband-severity.ftl
index 81e0b2bd5a..919e668ac4 100644
--- a/Resources/Locale/ru-RU/_strings/contraband/contraband-severity.ftl
+++ b/Resources/Locale/ru-RU/_strings/contraband/contraband-severity.ftl
@@ -10,4 +10,4 @@ contraband-examine-text-in-the-clear = [color=green][italic]Вы, скорее
contraband-examinable-verb-text = Легальность
contraband-examinable-verb-message = Проверить легальность этого предмета.
contraband-department-plural = { $department }
-contraband-job-plural = { MAKEPLURAL($job) }
+contraband-job-plural = { $job }
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
index 0ffdf55d8f..9987e35a72 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
@@ -32,7 +32,7 @@
sprite: Objects/Specific/Service/vending_machine_restock.rsi
state: base
product: CrateVendingMachineRestockClothesFilled
- cost: 3270 # Sunrise-edit
+ cost: 3600 # Sunrise-edit
category: cargoproduct-category-name-service
group: market
@@ -102,7 +102,7 @@
sprite: Objects/Specific/Service/vending_machine_restock.rsi
state: base
product: CrateVendingMachineRestockMedicalFilled
- cost: 2045 # Sunrise-edit
+ cost: 2200 # Sunrise-edit
category: cargoproduct-category-name-medical
group: market
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
index 26bd1434d5..d746dd22bc 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
@@ -80,7 +80,9 @@
- id: ClothingUniformJumpsuitHosFormal
- id: ClothingOuterWinterHoS
- id: ClothingNeckCloakHos
+ # Sunrise edit start
- id: ClothingHoSMantleCoat
+ # Sunrise edit end
- type: entity
id: DresserQuarterMasterFilled
diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
index 0a95d78bba..bce7c665cc 100644
--- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
+++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
@@ -39,9 +39,9 @@
# Sunrise-start
- type: PhysicalComposition
materialComposition:
- Steel: 25
- Plastic: 25
- Cloth: 500
+ Steel: 5
+ Plastic: 20
+ Cloth: 100
# Sunrise-end
- type: entity
@@ -332,6 +332,8 @@
grid:
- 0,0,19,9
# Sunrise-start
+ - type: StaticPrice
+ price: 700
- type: PhysicalComposition
materialComposition:
Steel: 1000
diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml
index 50464fa6d8..6abdb6af75 100644
--- a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml
+++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml
@@ -255,6 +255,8 @@
sprintModifier: 1 # makes its stats identical to other variants of bag of holding
- type: HeldSpeedModifier
# Sunrise-start
+ - type: StaticPrice
+ price: 700
- type: PhysicalComposition
materialComposition:
Steel: 1000
diff --git a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml
index 12e248f637..d1764df745 100644
--- a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml
+++ b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml
@@ -188,6 +188,8 @@
grid:
- 0,0,19,9
# Sunrise-start
+ - type: StaticPrice
+ price: 700
- type: PhysicalComposition
materialComposition:
Steel: 1000
diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml
index 9b8f3cab21..04aef58eed 100644
--- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml
+++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml
@@ -213,11 +213,14 @@
- type: ShowSyndicateIcons
- type: entity
- parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband, WeldingMaskBase]
+ parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband]
id: ClothingEyesHudSyndicate
name: syndicate visor
description: The syndicate's professional head-up display, designed for better detection of humanoids and their subsequent elimination.
components:
+ # Sunrise added start
+ - type: FlashImmunity
+ # Sunrise added end
- type: Sprite
sprite: Clothing/Eyes/Hud/synd.rsi
- type: Clothing
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml
index d9475c9ebe..e504396294 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml
@@ -7,7 +7,7 @@
id: FoodBreadBase
components:
- type: Item
- size: Normal
+ size: Small # Sunrise edit - для багета внутри запаски мима
- type: FlavorProfile
flavors:
- bread
@@ -670,7 +670,7 @@
quickEquip: false
- type: Item
shape:
- - 0,0,0,3
+ - 0,0,0,2 # Sunrise edit - для багета внутри запаски мима
storedRotation: -45
inhandVisuals:
left:
diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml
index 0eebf01b09..3c37fd264a 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml
@@ -425,6 +425,10 @@
- state: paper_stamp-generic
map: ["enum.PaperVisualLayers.Stamp"]
visible: false
+ # Sunrise edit start - пендосы ебанные. PaperVisuals требуется этот слой. Я сделал его фиктивным
+ - map: [ "enum.PaperVisualLayers.Writing" ]
+ visible: false
+ # Sunrise edit end
- type: Paper
content: envelope-default-message
- type: PaperVisuals
@@ -460,7 +464,7 @@
tags:
- Trash
- Document
- #- type: Appearance, hide stamp marks until we have some kind of displacement
+ - type: Appearance # Sunrise edit - ебанный рот это нужно для работы FireVisuals
- type: Flammable
fireSpread: true
canResistFire: false
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
index 721a723aef..64e3ba6bea 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
@@ -602,7 +602,7 @@
# Gygax
- type: entity
id: MechGygax
- parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
+ parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
name: Gygax
description: While lightly armored, the Gygax has incredible mobility thanks to its ability that lets it smash through walls at high speeds.
components:
@@ -665,7 +665,7 @@
# Durand
- type: entity
id: MechDurand
- parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
+ parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
name: Durand
description: A slow but beefy combat exosuit that is extra scary in confined spaces due to its punches. Xenos hate it!
components:
@@ -734,7 +734,7 @@
# NT Gygax
- type: entity
id: MechNTGygax
- parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
+ parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
name: Nanotrasen Special Gygax
description: "Nanotrasen's trump card when solving problems. High durability, increased protection against shock, explosions, temperature, shots: conventional, laser and energy, as well as expanded equipment slots allow to turn the situation on the station upside down. Gas pedals consume a colossal amount of energy."
components:
diff --git a/Resources/Prototypes/Entities/Objects/Tools/energydome.yml b/Resources/Prototypes/Entities/Objects/Tools/energydome.yml
index ae251db211..75ff14af9c 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/energydome.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/energydome.yml
@@ -1,3 +1,5 @@
+# TODO: Перенеси в папки санрайза
+
- type: entity
name: blood red personal shield generator
description: A personal shield generator that protects the wearer from lasers and bullets but prevents from using ranged weapons himself. Uses a power cell.
@@ -137,6 +139,7 @@
maxChargeRate: 1000 #<- passive charging frow power net
supplyRampTolerance: 500
supplyRampRate: 50
+ netsync: false # Sunrise edit
- type: BatteryCharger
voltage: Medium
- type: NodeContainer
diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml
index 3e054017c4..bab09318ac 100644
--- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml
+++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml
@@ -60,6 +60,7 @@
- type: Transform
- type: ProtectedGrid
- type: UnbuildableGrid
+ - type: StationOnlyDirectSpawn # Sunrise added
- type: entity
id: StandardStationArena
diff --git a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml
index 4bc1e0d6ea..742e5a4a17 100644
--- a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml
+++ b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml
@@ -31,7 +31,7 @@
acts: [ "Destruction" ]
- type: Storage
grid:
- - 0,0,6,3
+ - 0,0,6,4 # Sunrise edit - миллион одежды не лезет в таком маленький комод
maxItemSize: Normal
- type: ContainerContainer
containers:
diff --git a/Resources/Prototypes/Recipes/Lathes/machine_boards.yml b/Resources/Prototypes/Recipes/Lathes/machine_boards.yml
index be605792b3..86ef8ce532 100644
--- a/Resources/Prototypes/Recipes/Lathes/machine_boards.yml
+++ b/Resources/Prototypes/Recipes/Lathes/machine_boards.yml
@@ -573,8 +573,8 @@
- type: latheRecipe #sunrise-start
parent: BaseGoldCircuitboardRecipe
- id: ImplantExtractorMachineCircuitboard
- result: ImplantExtractorMachineCircuitboard
+ id: InterrogatorMachineCircuitboard
+ result: InterrogatorMachineCircuitboard
materials:
Steel: 100
Glass: 500
diff --git a/Resources/Prototypes/_Starlight/Entities/Objects/Misc/improvised_parts.yml b/Resources/Prototypes/_Starlight/Entities/Objects/Misc/improvised_parts.yml
index 1b8396786b..33dce55a6c 100644
--- a/Resources/Prototypes/_Starlight/Entities/Objects/Misc/improvised_parts.yml
+++ b/Resources/Prototypes/_Starlight/Entities/Objects/Misc/improvised_parts.yml
@@ -236,7 +236,7 @@
- Metal
- type: Construction
graph: SwordForgedGraph
- node: tool
+ node: sword
- type: entity
parent: BaseItem
@@ -257,7 +257,7 @@
- Metal
- type: Construction
graph: ClaymoreForgedGraph
- node: tool
+ node: sword
- type: entity
parent: BaseItem
diff --git a/Resources/Prototypes/_Starlight/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/_Starlight/Entities/Objects/Shields/shields.yml
index 7fdc467844..c061e05719 100644
--- a/Resources/Prototypes/_Starlight/Entities/Objects/Shields/shields.yml
+++ b/Resources/Prototypes/_Starlight/Entities/Objects/Shields/shields.yml
@@ -311,5 +311,5 @@
min: 2
max: 10
- type: Construction
- graph: MakeshiftShield
- node: makeshiftShield
+ graph: ImprovisedShieldGraph
+ node: start
diff --git a/Resources/Prototypes/_Sunrise/Actions/felinid.yml b/Resources/Prototypes/_Sunrise/Actions/felinid.yml
index c0933a8acf..bc7641736b 100644
--- a/Resources/Prototypes/_Sunrise/Actions/felinid.yml
+++ b/Resources/Prototypes/_Sunrise/Actions/felinid.yml
@@ -6,7 +6,6 @@
categories: [ HideSpawnMenu ]
components:
- type: Action
- temporary: true
useDelay: 6
icon:
sprite: /Textures/_Sunrise/Actions/felionoid.rsi
diff --git a/Resources/Prototypes/_Sunrise/BloodCult/Entities/Items/bola.yml b/Resources/Prototypes/_Sunrise/BloodCult/Entities/Items/bola.yml
index 16bf544b2f..e0bfea97d6 100644
--- a/Resources/Prototypes/_Sunrise/BloodCult/Entities/Items/bola.yml
+++ b/Resources/Prototypes/_Sunrise/BloodCult/Entities/Items/bola.yml
@@ -16,4 +16,3 @@
- type: Biocode
factions:
- BloodCult
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
diff --git a/Resources/Prototypes/_Sunrise/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/_Sunrise/Catalog/Fills/Backpacks/duffelbag.yml
index e2c4526509..29ca586255 100644
--- a/Resources/Prototypes/_Sunrise/Catalog/Fills/Backpacks/duffelbag.yml
+++ b/Resources/Prototypes/_Sunrise/Catalog/Fills/Backpacks/duffelbag.yml
@@ -2,46 +2,43 @@
parent: ClothingBackpackDuffelSyndicateBundle
id: ClothingBackpackDuffelSyndicateFilledBauer127
name: Sniper bundle
- description: "Iconic heavy anti-materiel sniper rifle with three spare magazines, a large-calibre ammo boxes and thermal goggles."
+ description: Iconic heavy anti-materiel sniper rifle with three spare magazines, a large-calibre ammo boxes and thermal goggles.
components:
- - type: StorageFill
- contents:
- - id: WeaponRifleBauer127Biocode
- - id: MagazineBauer127
- amount: 3
- - id: MagazineBoxAntiMateriel
- - id: MagazineBauer127Penetrator
- amount: 2
- - id: MagazineBauer127Frag
- amount: 2
- - id: MagazineBauer127Blast
- amount: 2
- - id: MagazineBauer127Emp
- amount: 2
- - id: ClothingEyesGlassesSniperThermalSyndie
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponRifleBauer127Biocode
+ - id: MagazineBauer127
+ amount: 3
+ - id: MagazineBoxAntiMateriel
+ - id: MagazineBauer127Penetrator
+ amount: 2
+ - id: MagazineBauer127Frag
+ amount: 2
+ - id: MagazineBauer127Blast
+ amount: 2
+ - id: MagazineBauer127Emp
+ amount: 2
+ - id: ClothingEyesGlassesSniperThermalSyndie
- type: entity
parent: ClothingBackpackDuffelSyndicateAmmo
id: ClothingBackpackDuffelSyndicateSuperAmmoFilled
name: ammo bundle
- description: "Reloading! Contains 4 magazines for the C-20r, 5 drums for the Bulldog, 3 magazines for the Estoc DMR, and 2 ammo boxes for the L6 SAW."
+ description: Reloading! Contains 4 magazines for the C-20r, 5 drums for the Bulldog, 3 magazines for the Estoc DMR, and 2 ammo boxes for the L6 SAW.
components:
- - type: StorageFill
- contents:
- - id: SMGAmmoKit # Sunrise-edit
- amount: 1
- - id: ShotGunKit # Sunrise-edit
- amount: 1
- - id: LMGKit # Sunrise-edit
- amount: 1
- - id: MMGKit # Sunrise-edit
- amount: 1
- - id: CaselessAmmoKit # Sunrise-edit
- amount: 1
- - id: RifleAmmoKit # Sunrise-edit
- amount: 1
- - id: DragunovAmmoKit # Sunrise-edit
- amount: 1
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: SMGAmmoKit
+ - id: ShotGunKit
+ - id: LMGKit
+ - id: MMGKit
+ - id: CaselessAmmoKit
+ - id: RifleAmmoKit
+ - id: DragunovAmmoKit
#ERT_Uplink
- type: entity
@@ -50,13 +47,15 @@
name: Bundle MP5
description: MP5 with 4 raspy magazines.
components:
- - type: StorageFill
- contents:
- - id: WeaponSubMachineGunMP5
- - id: MagazineMP5
- amount: 1
- - id: MagazineMP5Extended
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponSubMachineGunMP5
+ - id: MagazineMP5
+ amount: 1
+ - id: MagazineMP5Extended
+ amount: 4
- type: entity
id: ClothingBackpackDuffelWeaponSubMachineGunMP7Filled
@@ -64,11 +63,13 @@
name: Bundle MP7
description: MP7 with 3 raspy magazines.
components:
- - type: StorageFill
- contents:
- - id: WeaponSubMachineGunMP7
- - id: MagazinePistolHighCapacityFMJ
- amount: 3
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponSubMachineGunMP7
+ - id: MagazinePistolHighCapacityFMJ
+ amount: 3
- type: entity
id: ClothingBackpackDuffelWeaponSubMachineGunWt550
@@ -76,13 +77,15 @@
name: Bundle WT550
description: WT550 with 3 raspy magazines FMJ and 2 HP.
components:
- - type: StorageFill
- contents:
- - id: WeaponSubMachineGunWt550
- - id: MagazinePistolSubMachineGunTopMounted
- amount: 3
- - id: MagazinePistolSubMachineGunTopMountedHP
- amount: 2
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponSubMachineGunWt550
+ - id: MagazinePistolSubMachineGunTopMounted
+ amount: 3
+ - id: MagazinePistolSubMachineGunTopMountedHP
+ amount: 2
- type: entity
id: ClothingBackpackDuffelWeaponSubMachineGunDrozdMk2
@@ -90,13 +93,15 @@
name: Bundle Drozd Mk2
description: Drozd Mk2 with 3 raspy magazines FMJ and 2 HP.
components:
- - type: StorageFill
- contents:
- - id: WeaponSubMachineGunDrozdMk2
- - id: MagazinePistolSubMachineGunFMJ
- amount: 3
- - id: MagazinePistolSubMachineGunHP
- amount: 2
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponSubMachineGunDrozdMk2
+ - id: MagazinePistolSubMachineGunFMJ
+ amount: 3
+ - id: MagazinePistolSubMachineGunHP
+ amount: 2
- type: entity
id: ClothingBackpackDuffelWeaponRifleLecterFilled
@@ -104,15 +109,16 @@
name: Bundle lecter Mk2
description: Lecter Mk2 with 3 raspy FMJ magazines and 2 HP.
components:
- - type: StorageFill
- contents:
- - id: WeaponRifleLecterMk2
- - id: MagazineRifleFMJ
- amount: 3
- - id: MagazineRifleHP
- amount: 2
- - id: MagazineRifleSP
- amount: 1
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponRifleLecterMk2
+ - id: MagazineRifleFMJ
+ amount: 3
+ - id: MagazineRifleHP
+ amount: 2
+ - id: MagazineRifleSP
- type: entity
id: ClothingBackpackDuffelWeaponRifleM52Filled
@@ -120,15 +126,16 @@
name: Bundle M-52
description: Premium assault rifle with 3 raspy FMJ magazines, 2 SP and 1 HP.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleM52
- id: MagazineRifleM52FMJ
amount: 3
- id: MagazineRifleM52SP
amount: 2
- id: MagazineRifleM52HP
- amount: 1
- type: entity
id: ClothingBackpackDuffelWeaponSubMachineGunP90Filled
@@ -136,8 +143,10 @@
name: Bundle p90
description: P-90 with 4 raspy magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponSubMachineGunP90
- id: MagazineP90
amount: 2
@@ -150,8 +159,10 @@
name: Bundle ams42
description: AMS-42 with 4 raspy magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponAMS-42
- id: MagazineRifleSP
amount: 4
@@ -162,8 +173,10 @@
name: Bundle G36
description: G36 with 4 raspy magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleG36
- id: MagazineRifleSP
amount: 4
@@ -174,11 +187,13 @@
name: Bundle Assault Shotgun
description: Assault Shotgun with 6 raspy speedloaders.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponShotgunCycler
- id: SpeedLoaderShellShotgun
- amount: 4
+ amount: 2
- id: SpeedLoaderShotgunSlug
amount: 2
@@ -188,8 +203,10 @@
name: Bundle Trenchgun 4034
description: Trenchgun 4034 with 1 Box ammo.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponShotgunTrenchgun4034
- id: BoxLethalshot
- id: BoxShotgunFlare
@@ -201,8 +218,10 @@
name: Bundle law12
description: Law-12 with 1 Box ammo.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponShotgunSPAS12
- id: BoxLethalshot
- id: BoxShotgunFlare
@@ -214,13 +233,14 @@
name: Bundle SKM-24
description: SKM-24 with 6 raspy various magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleSKM24Nano
- id: MagazineLightRifleSP
amount: 3
- id: MagazineLightRifleFMJ
- amount: 1
- id: MagazineLightRifleHP
amount: 2
@@ -230,8 +250,10 @@
name: Bundle SKM-24
description: AR18 with 6 raspy Incendiary magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleSKM24
- id: MagazineLightRifleIncendiary
amount: 6
@@ -243,11 +265,12 @@
name: Bundle SKM-28
description: SKM-28 with 6 raspy various magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleSKM28Nano
- id: MagazineRifleHeavyFMJ
- amount: 1
- id: MagazineRifleHeavySP
amount: 3
- id: MagazineRifleHeavyHP
@@ -259,8 +282,10 @@
name: Bundle SKM-28
description: SKM-28 with 6 raspy Incendiary magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleSKM28
- id: MagazineRifleHeavyIncendiary
amount: 6
@@ -272,8 +297,10 @@
name: Bundle br64
description: BR64 with 2 raspy magazines.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleBR64
- id: MagazineRifleHeavyFMJ
amount: 2
@@ -284,8 +311,10 @@
name: Bundle smart gun M492
description: M492 with 2 raspy SP and FMJ belt-box.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponLightMachineGunM492
- id: MagazineLightRifleBeltBox
- id: MagazineLightRifleBeltBoxFMJ
@@ -293,11 +322,13 @@
- type: entity
id: ClothingBackpackDuffelWeaponLightMachineGunM492CBURN
parent: ClothingBackpackDuffelCBURN
- name: Bundle M492 "Incinerator"
+ name: Bundle M492 Incinerator
description: M492 with 3 raspy Incendiary belt-box.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponLightMachineGunM492Cburn
- id: MagazineLightRifleBeltBoxIncendiary
amount: 3
@@ -309,11 +340,13 @@
name: Bundle Hristov
description: Hristov with 4 raspy .60 10-rounds Box.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponSniperHristov
- id: MagazineBoxAntiMateriel
- amount: 4
+ amount: 3
- type: entity
id: ClothingBackpackDuffelWeaponRifleAsh12
@@ -321,12 +354,14 @@
name: Bundle ASH-12
description: ASH-12 with 5 magazines and a blueprint.
components:
- - type: StorageFill
- contents:
- - id: WeaponRifleAsh12
- - id: MagazineAsh12
- amount: 5
- - id: BlueprintMagAsh12Slug
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponRifleAsh12
+ - id: MagazineAsh12
+ amount: 5
+ - id: BlueprintMagAsh12Slug
- type: entity
id: ClothingBackpackDuffelNanotrasenMedicalBundleFilled
@@ -334,42 +369,46 @@
name: nanotrasen medical bundle
description: A large duffel bag for holding any medical army goods.
components:
- - type: StorageFill
- contents:
- - id: DefibrillatorCompact
- - id: MedkitCombatFilled
- amount: 3
- - id: Tourniquet
- amount: 2
- - id: MedipenCombatInjector
- amount: 2
- - id: CombatMedipen
- amount: 4
- - id: PunctAutoInjector
- amount: 4
- - id: PyraAutoInjector
- amount: 4
- - id: AirlossAutoInjector
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: DefibrillatorCompact
+ - id: MedkitCombatFilled
+ amount: 3
+ - id: Tourniquet
+ amount: 2
+ - id: MedipenCombatInjector
+ amount: 2
+ - id: CombatMedipen
+ amount: 4
+ - id: PunctAutoInjector
+ amount: 4
+ - id: PyraAutoInjector
+ amount: 4
+ - id: AirlossAutoInjector
+ amount: 4
- type: entity
parent: ClothingBackpackDuffelAbductorBundle
id: ClothingBackpackDuffelAbductorFilled
suffix: Filled
components:
- - type: StorageFill
- contents:
- - id: HemostatAbductor
- - id: SawAbductor
- - id: DrillAbductor
- - id: CauteryAbductor
- - id: RetractorAbductor
- - id: ScalpelAbductor
- - id: BoneGelAbductor
- - id: BoneSetterAbductor
- - id: NitrousOxideTankFilled
- - id: NitrousOxideTankFilled
- - id: ClothingMaskBreath
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: HemostatAbductor
+ - id: SawAbductor
+ - id: DrillAbductor
+ - id: CauteryAbductor
+ - id: RetractorAbductor
+ - id: ScalpelAbductor
+ - id: BoneGelAbductor
+ - id: BoneSetterAbductor
+ - id: NitrousOxideTankFilled
+ - id: NitrousOxideTankFilled
+ - id: ClothingMaskBreath
- type: entity
@@ -378,82 +417,94 @@
name: Minotaur bundle
description: "Lean and mean: Contains smooth, powerful, highly illegal Shotgun, a 5 12g buckshot drums."
components:
- - type: StorageFill
- contents:
- - id: WeaponShotgunMinotaurBiocode
- - id: MagazineShotgun
- - id: MagazineShotgun
- - id: MagazineShotgun
- - id: MagazineShotgun
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponShotgunMinotaurBiocode
+ - id: MagazineShotgun
+ - id: MagazineShotgun
+ - id: MagazineShotgun
+ - id: MagazineShotgun
- type: entity
parent: ClothingBackpackDuffelSyndicateBundle
id: ClothingBackpackDuffelSyndicateFilledDeagle
name: Desert Eagle bundle
- description: "Contains high damage Desert Eagle, a 3 magnum magazines."
+ description: Contains high damage Desert Eagle, a 3 magnum magazines.
components:
- - type: StorageFill
- contents:
- - id: WeaponPistolDeagle
- - id: MagazineShotgun
- - id: MagazineShotgun
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: WeaponPistolDeagle
+ - id: MagazineDeagle
+ amount: 3
- type: entity
parent: ClothingBackpackDuffelSyndicateBundle
id: ClothingBackpackDufelSyndicateFilledMantisBladeArms
name: Mantis Blade bundle
- description: "Contains a pair of cybernetic arms, watch out. You got a psycho on the loose."
+ description: Contains a pair of cybernetic arms, watch out. You got a psycho on the loose.
components:
- - type: StorageFill
- contents:
- - id: RightArmCyberMantisBlade
- - id: LeftArmCyberMantisBlade
- - id: RightHandCyber
- - id: LeftHandCyber
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: RightArmCyberMantisBlade
+ - id: LeftArmCyberMantisBlade
+ - id: RightHandCyber
+ - id: LeftHandCyber
- type: entity
parent: ClothingBackpackDuffelSyndicateBundle
id: ClothingBackpackDuffelSyndicateFilledInfiltration
name: infiltration hardsuit bundle
- description: "Contains the latest in Syndicate chameleon technology, the infiltration hardsuit."
+ description: Contains the latest in Syndicate chameleon technology, the infiltration hardsuit.
components:
- - type: StorageFill
- contents:
- - id: ClothingOuterHardsuitInfiltrationBiocode
- - id: ClothingMaskGasSyndicate
- - id: ClothingHandsGlovesCombatCQC
- - id: DoubleEmergencyOxygenTankFilled
- - id: DoubleEmergencyNitrogenTankFilled
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: ClothingOuterHardsuitInfiltrationBiocode
+ - id: ClothingMaskGasSyndicate
+ - id: ClothingHandsGlovesCombatCQC
+ - id: DoubleEmergencyOxygenTankFilled
+ - id: DoubleEmergencyNitrogenTankFilled
- type: entity
parent: ClothingBackpackMessengerPirate
id: ClothingBackpackMessengerPirateDecoyKitFilled
name: decoy bundle
- description: "Contains visual distractions. Smell and audio coming soon."
+ description: Contains visual distractions. Smell and audio coming soon.
components:
- - type: StorageFill
- contents:
- - id: BalloonPirate1
- - id: BalloonPirate2
- - id: BalloonPirate3
- - id: BalloonPirate4
- - id: BalloonPirate5
- - id: BalloonPirate6
- - id: BalloonPirate7
- - id: BalloonPirate8
- - id: GrenadeDummy
- amount: 4
- - id: SnapPop
- amount: 2
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: BalloonPirate1
+ - id: BalloonPirate2
+ - id: BalloonPirate3
+ - id: BalloonPirate4
+ - id: BalloonPirate5
+ - id: BalloonPirate6
+ - id: BalloonPirate7
+ - id: BalloonPirate8
+ - id: GrenadeDummy
+ amount: 4
+ - id: SnapPop
+ amount: 2
- type: entity
id: ClothingBackpackDuffelMilitaryBundleScaf
parent: ClothingBackpackDuffelMilitary
name: Scaf bundle
- description: "Contains the old combat EVA suit."
+ description: Contains the old combat EVA suit.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: ClothingOuterHardsuitScaf
- id: ClothingHeadHelmetHardsuitScaf
- id: DoubleEmergencyOxygenTankFilled
@@ -463,10 +514,12 @@
id: ClothingBackpackDuffelMilitaryBundlePirateEva
parent: ClothingBackpackDuffelMilitary
name: Pirate EVA bundle
- description: "Contains the old pirate EVA suit."
+ description: Contains the old pirate EVA suit.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: ClothingHeadHelmetPirateOld
- id: ClothingOuterEVASuitPirateOld
- id: DoubleEmergencyOxygenTankFilled
@@ -476,20 +529,19 @@
id: ClothingBackpackMessengerMercenaryBundleSKM24
parent: ClothingBackpackMessengerMercenary
name: SKM-24 bundle
- description: "Contains the cheap assault rifle."
+ description: Contains the cheap assault rifle.
components:
- - type: StorageFill
- contents:
- - id: WeaponRifleSKM24
- orGroup: SKM24
- - id: WeaponRifleSKM24Syndi
- orGroup: SKM24
- - id: WeaponRifleSKM24White
- orGroup: SKM24
- - id: WeaponRifleSKM24Nano
- orGroup: SKM24
- - id: WeaponRifleSKM24Green
- orGroup: SKM24
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - !type:GroupSelector
+ children:
+ - id: WeaponRifleSKM24
+ - id: WeaponRifleSKM24Syndi
+ - id: WeaponRifleSKM24White
+ - id: WeaponRifleSKM24Nano
+ - id: WeaponRifleSKM24Green
- id: MagazineLightRifleFMJ
- id: MagazineLightRifleSP
- id: MagazineLightRifleSP
@@ -501,26 +553,25 @@
id: ClothingBackpackMessengerPirateBundleSKM24Scrap
parent: ClothingBackpackMessengerPirate
name: SKM-24 bundle
- description: "Contains the cheapest assault rifle."
+ description: Contains the cheapest assault rifle.
components:
- - type: StorageFill
- contents:
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
- id: WeaponRifleSKM24Scrap
- id: MagazineLightRifleImprovised
- id: MagazineLightRifleImprovised
- id: MagazineLightRifleImprovised
- - id: MagazineBoxImprovisedRifle
- prob: 0.5
- orGroup: MagRifle
- - id: MagazineLightRifleFMJ
- prob: 0.25
- orGroup: MagRifle
- - id: MagazineLightRifleAP
- prob: 0.01
- orGroup: MagRifle
- - id: MagazineLightRifleHP
- prob: 0.4
- orGroup: MagRifle
- - id: MagazineLightRifleSP
- prob: 0.4
- orGroup: MagRifle
+ - !type:GroupSelector
+ children:
+ - id: MagazineBoxImprovisedRifle
+ prob: 0.5
+ - id: MagazineLightRifleFMJ
+ prob: 0.25
+ - id: MagazineLightRifleAP
+ prob: 0.01
+ - id: MagazineLightRifleHP
+ prob: 0.4
+ - id: MagazineLightRifleSP
+ prob: 0.4
diff --git a/Resources/Prototypes/_Sunrise/Catalog/Fills/Books/general.yml b/Resources/Prototypes/_Sunrise/Catalog/Fills/Books/general.yml
index 98ef19a90e..6c49d3a55e 100644
--- a/Resources/Prototypes/_Sunrise/Catalog/Fills/Books/general.yml
+++ b/Resources/Prototypes/_Sunrise/Catalog/Fills/Books/general.yml
@@ -1,19 +1,21 @@
- type: entity
- name: blue shield encryption key box
parent: BoxEncryptionKeyPassenger
id: BoxEncryptionKeyLaw
+ name: law encryption key box
components:
- - type: StorageFill
- contents:
- - id: EncryptionKeyLaw
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase:
+ id: EncryptionKeyLaw
+ amount: 4
- type: entity
- name: blue shield encryption key box
parent: BoxEncryptionKeyPassenger
id: BoxEncryptionKeyBlueShield
+ name: blue shield encryption key box
components:
- - type: StorageFill
- contents:
- - id: EncryptionKeyBlueShield
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase:
+ id: EncryptionKeyBlueShield
+ amount: 4
diff --git a/Resources/Prototypes/_Sunrise/Catalog/Fills/Boxes/syndicate.yml b/Resources/Prototypes/_Sunrise/Catalog/Fills/Boxes/syndicate.yml
index c0dee0ced9..cf44c2bea0 100644
--- a/Resources/Prototypes/_Sunrise/Catalog/Fills/Boxes/syndicate.yml
+++ b/Resources/Prototypes/_Sunrise/Catalog/Fills/Boxes/syndicate.yml
@@ -6,11 +6,13 @@
- type: Storage
grid:
- 0,0,3,1
- - type: StorageFill
- contents:
- - id: ExplosiveCollarRed
- - id: ExplosiveCollarWhite
- - id: Bouquet
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: ExplosiveCollarRed
+ - id: ExplosiveCollarWhite
+ - id: Bouquet
- type: Sprite
layers:
- state: box_of_doom_big
@@ -26,11 +28,13 @@
maxItemSize: Normal
grid:
- 0,0,2,2
- - type: StorageFill
- contents:
- - id: CaneShotgun
- - id: ShellShotgunBooze
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: CaneShotgun
+ - id: ShellShotgunBooze
+ amount: 4
- type: entity
parent: [BoxCardboard, BaseSyndicateContraband]
@@ -69,14 +73,15 @@
id: SMGAmmoKit
name: C20r ammo kit
components:
- - type: StorageFill
- contents:
- - id: MagazinePistolSubMachineGunSP
- - id: MagazinePistolSubMachineGunSP
- - id: MagazinePistolSubMachineGunSP
- - id: MagazinePistolSubMachineGunFMJ
- - id: MagazinePistolSubMachineGunFMJ
- - id: MagazinePistolSubMachineGunHP
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazinePistolSubMachineGunSP
+ amount: 3
+ - id: MagazinePistolSubMachineGunFMJ
+ amount: 2
+ - id: MagazinePistolSubMachineGunHP
- type: Sprite
layers:
- state: box_of_doom_big
@@ -87,14 +92,15 @@
id: RifleAmmoKit
name: Estoc ammo kit
components:
- - type: StorageFill
- contents:
- - id: MagazineRifleSP
- - id: MagazineRifleSP
- - id: MagazineRifleSP
- - id: MagazineRifleFMJ
- - id: MagazineRifleFMJ
- - id: MagazineRifleAP
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineRifleSP
+ amount: 3
+ - id: MagazineRifleFMJ
+ amount: 2
+ - id: MagazineRifleAP
- type: Sprite
layers:
- state: box_of_doom_big
@@ -108,12 +114,12 @@
- type: Storage
grid:
- 0,0,1,3
- - type: StorageFill
- contents:
- - id: MagazinePistolSubMachineGunCaselessExtended
- - id: MagazinePistolSubMachineGunCaselessExtended
- - id: MagazinePistolSubMachineGunCaselessExtended
- - id: MagazinePistolSubMachineGunCaselessExtended
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazinePistolSubMachineGunCaselessExtended
+ amount: 4
- type: Sprite
layers:
- state: box_of_doom
@@ -127,12 +133,14 @@
- type: Storage
grid:
- 0,0,1,3
- - type: StorageFill
- contents:
- - id: MagazineDragunov
- - id: MagazineDragunov
- - id: MagazineDragunovExtended
- - id: MagazineDragunovExtended
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineDragunov
+ amount: 2
+ - id: MagazineDragunovExtended
+ amount: 2
- type: Sprite
layers:
- state: box_of_doom
@@ -143,14 +151,16 @@
id: AntimaterialAmmoKit
name: Antimaterial magazine kit
components:
- - type: StorageFill
- contents:
- - id: MagazineBauer127
- - id: MagazineBauer127
- - id: MagazineBauer127Penetrator
- - id: MagazineBauer127Frag
- - id: MagazineBauer127Blast
- - id: MagazineBauer127Emp
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineBauer127
+ amount: 2
+ - id: MagazineBauer127Penetrator
+ - id: MagazineBauer127Frag
+ - id: MagazineBauer127Blast
+ - id: MagazineBauer127Emp
- type: Sprite
layers:
- state: box_of_doom
@@ -161,91 +171,35 @@
id: SMGIncendiaryAmmoKit
name: C20r Incendiary ammo kit
components:
- - type: StorageFill
- contents:
- - id: MagazinePistolSubMachineGunIncendiary
- amount: 8
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazinePistolSubMachineGunIncendiary
+ amount: 8
- type: Sprite
layers:
- state: box_of_doom_big
- state: smg_red
-# - type: entity
-# parent: BaseSyndicateAmmoKit
-# id: SMGUraniumAmmoKit
-# name: C20r Uranium ammo kit
-# components:
-# - type: StorageFill
-# contents:
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - id: MagazinePistolSubMachineGunUranium
-# - type: Sprite
-# layers:
-# - state: box_of_doom_big
-# - state: smg_uranium
-
- type: entity
parent: BaseSyndicateAmmoKit
id: ShotGunKit
name: Bulldog ammo kit
components:
- - type: StorageFill
- contents:
- - id: MagazineShotgun
- - id: MagazineShotgun
- - id: MagazineShotgun
- - id: MagazineShotgun
- - id: MagazineShotgun
- - id: MagazineShotgunSlug
- - id: MagazineShotgunSlug
- - id: MagazineShotgunSlug
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineShotgun
+ amount: 5
+ - id: MagazineShotgunSlug
+ amount: 3
- type: Sprite
layers:
- state: box_of_doom_big
- state: shotgun_base
-# - type: entity
-# parent: BaseSyndicateAmmoKit
-# id: ShotGunIncendiaryKit
-# name: Bulldog Incendiary ammo kit
-# components:
-# - type: StorageFill
-# contents:
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - id: MagazineShotgunIncendiary
-# - type: Sprite
-# layers:
-# - state: box_of_doom_big
-# - state: shotgun_red
-
-# - type: entity
-# parent: BaseSyndicateAmmoKit
-# id: ShotGunUraniumKit
-# name: Bulldog Uranium ammo kit
-# components:
-# - type: StorageFill
-# contents:
-# - id: MagazineShotgunUranium
-# - id: MagazineShotgunUranium
-# - id: MagazineShotgunUranium
-# - id: MagazineShotgunUranium
-# - type: Sprite
-# layers:
-# - state: box_of_doom_big
-# - state: shotgun_uranium
-
- type: entity
parent: BaseSyndicateAmmoKit
id: MMGKit
@@ -258,11 +212,12 @@
- type: Storage
grid:
- 0,0,2,1
- - type: StorageFill
- contents:
- - id: MagazineDl6902
- - id: MagazineDl6902
- - id: MagazineDl6902
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineDl6902
+ amount: 3
- type: Sprite
layers:
- state: box_of_doom_big
@@ -276,11 +231,13 @@
- type: Storage
grid:
- 0,0,3,1
- - type: StorageFill
- contents:
- - id: MagazineRifleBoxSP
- amount: 3
- - id: MagazineRifleBoxFMJ
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineRifleBoxSP
+ amount: 3
+ - id: MagazineRifleBoxFMJ
- type: Sprite
layers:
- state: box_of_doom_big
@@ -291,10 +248,12 @@
id: LMGIncendiaryKit
name: L6 Saw Incendiary ammo kit
components:
- - type: StorageFill
- contents:
- - id: MagazineRifleBoxIncendiary
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineRifleBoxIncendiary
+ amount: 4
- type: Sprite
layers:
- state: box_of_doom_big
@@ -305,10 +264,12 @@
id: LMGUraniumKit
name: L6 Saw Uranium ammo kit
components:
- - type: StorageFill
- contents:
- - id: MagazineRifleBoxUranium
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: MagazineRifleBoxUranium
+ amount: 4
- type: Sprite
layers:
- state: box_of_doom_big
@@ -335,7 +296,6 @@
- id: CyberEyeThermal
sound:
path: /Audio/Effects/unwrap.ogg
- # Sunrise edit start
- type: EmitSoundOnPickup
sound:
path: /Audio/_Sunrise/Items/Handling/cardboardbox_pickup.ogg
@@ -348,7 +308,6 @@
- type: EmitSoundOnCollide
sound:
path: /Audio/_Sunrise/Items/Handling/cardboardbox_drop.ogg
- # Sunrise edit end
- type: entity
parent: CyberEyeThermalBox
@@ -422,10 +381,12 @@
- type: Storage
grid:
- 0,0,1,1
- - type: StorageFill
- contents:
- - id: RightArmCyberMantisBlade
- - id: LeftArmCyberMantisBlade
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ children:
+ - id: RightArmCyberMantisBlade
+ - id: LeftArmCyberMantisBlade
- type: Sprite
layers:
- state: box_of_doom_big
diff --git a/Resources/Prototypes/_Sunrise/Catalog/Fills/Crates/armory.yml b/Resources/Prototypes/_Sunrise/Catalog/Fills/Crates/armory.yml
index 748bd9c8e2..dbc3dc2b49 100644
--- a/Resources/Prototypes/_Sunrise/Catalog/Fills/Crates/armory.yml
+++ b/Resources/Prototypes/_Sunrise/Catalog/Fills/Crates/armory.yml
@@ -4,14 +4,16 @@
name: Trenchgun4034 crate
description: Contains two Trenchgun4034 with two Bandolier and four buckshot box. Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: WeaponShotgunTrenchgun4034
- amount: 2
- - id: ClothingBeltBandolier
- amount: 2
- - id: BoxLethalshot
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: WeaponShotgunTrenchgun4034
+ amount: 2
+ - id: ClothingBeltBandolier
+ amount: 2
+ - id: BoxLethalshot
+ amount: 4
- type: entity
id: CrateArmoryCombatShotgun
@@ -19,29 +21,33 @@
name: Combat Shotgun crate
description: Contains two Combat Shotgun with two Bandolier and four buckshot box. Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: WeaponShotgunCombat
- amount: 2
- - id: ClothingBeltBandolier
- amount: 2
- - id: BoxLethalshot
- amount: 4
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: WeaponShotgunCombat
+ amount: 2
+ - id: ClothingBeltBandolier
+ amount: 2
+ - id: BoxLethalshot
+ amount: 4
- type: entity
id: CrateArmoryShotgunAmmo
parent: [ CrateWeaponSecure, BaseSecurityContraband ]
name: Shotgun Ammo crate
- description: Contains varios Box Shotgun ammo. Requires Armory access to open.
+ description: Contains various Box Shotgun ammo. Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: BoxLethalshot
- amount: 4
- - id: BoxBeanbag
- amount: 2
- - id: BoxShotgunSlug
- amount: 2
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: BoxLethalshot
+ amount: 4
+ - id: BoxBeanbag
+ amount: 2
+ - id: BoxShotgunSlug
+ amount: 2
- type: entity
id: CrateArmoryAKMS
@@ -49,18 +55,20 @@
name: AKMS crate
description: Contains two AKMS assault rifle with four mags. Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: WeaponRifleAKM
- amount: 2
- - id: MagazineLightRifleSP
- amount: 1
- - id: MagazineLightRifleHP
- amount: 1
- - id: MagazineLightRifleFMJ
- amount: 1
- - id: MagazineLightRifleAP
- amount: 1
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: WeaponRifleAKM
+ amount: 2
+ - id: MagazineLightRifleSP
+ amount: 1
+ - id: MagazineLightRifleHP
+ amount: 1
+ - id: MagazineLightRifleFMJ
+ amount: 1
+ - id: MagazineLightRifleAP
+ amount: 1
- type: entity
id: CrateArmoryMP5
@@ -68,12 +76,14 @@
name: MP5 crate
description: Contains two MP5 submachine gun with two mags. Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: WeaponSubMachineGunMP5
- amount: 2
- - id: MagazineMP5
- amount: 2
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: WeaponSubMachineGunMP5
+ amount: 2
+ - id: MagazineMP5
+ amount: 2
- type: entity
id: CrateArmoryIK30
@@ -81,12 +91,14 @@
name: IK-30 crate
description: Contains three IK-30 laser carbine with additional ammunition. Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: WeaponGunLaserCarbineSemi
- amount: 3
- - id: MagazineBatteryLr30
- amount: 3
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: WeaponGunLaserCarbineSemi
+ amount: 3
+ - id: MagazineBatteryLr30
+ amount: 3
- type: entity
id: CrateArmoryIK30Magazines
@@ -94,7 +106,9 @@
name: IK-30 magazine's crate
description: Contains six magazines for "IK-30". Requires Armory access to open.
components:
- - type: StorageFill
- contents:
- - id: MagazineBatteryLr30
- amount: 6
+ - type: EntityTableContainerFill
+ containers:
+ entity_storage: !type:AllSelector
+ children:
+ - id: MagazineBatteryLr30
+ amount: 6
diff --git a/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/glasses.yml
index d7b645b62e..83eaaecec2 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/glasses.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/glasses.yml
@@ -21,7 +21,7 @@
sprite: _Sunrise/Clothing/Eyes/Glasses/kim.rsi
- type: entity
- parent: [ClothingEyesBase, ShowSecurityIcons, BaseRestrictedContraband]
+ parent: [ClothingEyesBase, ShowSecurityIcons, BaseSecurityContraband]
id: ClothingEyesGlassesBlueShield
name: blueshield's glasses
description: The innovative blue lenses hide your eyes from light flashes and have a built-in visor.
@@ -74,7 +74,7 @@
- WhitelistChameleon
- type: entity
- parent: [BaseNightVisionDevice, ClothingEyesGlassesSunglasses,ShowSecurityIcons, PowerCellSlotSmallItem]
+ parent: [BaseNightVisionDevice, ClothingEyesGlassesSunglasses, ShowSecurityIcons, PowerCellSlotSmallItem]
id: ClothingEyesGlassesNVG
name: sun glasses
description: A pair of black sunglasses.
diff --git a/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/hud.yml
index 2b40cbcca1..391638ce4f 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/hud.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Clothing/Eyes/hud.yml
@@ -14,7 +14,7 @@
- HudMedical
- type: entity
- parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband, WeldingMaskBase]
+ parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband]
id: ClothingEyesHudSyndicateMech
name: syndicate Mech pilot visor
description: The syndicate Mech pilote`s professional head-up display, designed for quick diagnosis of their Mech's status.
@@ -28,7 +28,8 @@
damageContainers:
- Inorganic
- Silicon
- - Mech # Sunrise-edit
+ - Mech
+ - type: FlashImmunity
- type: entity
parent: [ ClothingEyesBase, ShowSecurityIcons ]
@@ -44,4 +45,4 @@
damageContainers:
- Inorganic
- Silicon
- - Mech # Sunrise-edit
+ - Mech
diff --git a/Resources/Prototypes/_Sunrise/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/_Sunrise/Entities/Clothing/Head/helmets.yml
index 0b115f9050..12440dcc56 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Clothing/Head/helmets.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Clothing/Head/helmets.yml
@@ -31,16 +31,14 @@
Blunt: 0.9
Slash: 0.9
Piercing: 0.95
- # SUNRISE EDIT
- type: Tag
tags:
- ClothMade
- FullCovered # INTERACTIONS
- WhitelistChameleon
- # SUNRISE EDIT
- type: entity
- parent: [ClothingHeadBase, BaseRestrictedContraband, BaseFoldable]
+ parent: [ClothingHeadBase, BaseSecurityContraband, BaseFoldable]
id: ClothingHeadHelmetPubg
name: Altyn
description: A fortified helmet used to suppress and incite riots.
@@ -69,13 +67,11 @@
Piercing: 0.85
- type: ExplosionResistance
damageCoefficient: 0.95
- # SUNRISE EDIT
- type: Tag
tags:
- ClothMade
- FullCovered # INTERACTIONS
- WhitelistChameleon
- # SUNRISE EDIT
# region ERT Amber EVA
- type: entity
diff --git a/Resources/Prototypes/_Sunrise/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/_Sunrise/Entities/Clothing/OuterClothing/hardsuits.yml
index 8853647248..97e405deee 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Clothing/OuterClothing/hardsuits.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Clothing/OuterClothing/hardsuits.yml
@@ -205,7 +205,7 @@
- WhitelistChameleon
- type: entity
- parent: [ClothingOuterHardsuitBase, BaseRestrictedContraband]
+ parent: ClothingOuterHardsuitBase
id: ClothingOuterLightHardsuitUSSP
name: Thunder-P
description: A lightweight combat suit designed for rapid response and mobile operations. The light armor provides protection against firearms and allows for high maneuverability. The Grom-P is used by assault troops for fast and effective combat operations.
@@ -235,12 +235,11 @@
clothingPrototype: ClothingHeadHelmetLightHardsuitUSSP
- type: entity
- parent: [ClothingOuterHardsuitEngineering, BaseEngineeringContraband]
+ parent: [ ClothingOuterHardsuitEngineering, BaseEngineeringContraband ]
id: ClothingOuterHardsuitEngineeringCompact
name: senior's engineer hardsuit
description: A special suit that protects against hazardous, low pressure environments. Has radiation shielding. Very compact.
components:
- # Sunrise-Start
- type: FireProtection
reduction: 0.8
- type: ExplosionResistance
@@ -256,7 +255,6 @@
Shock: 0.5
Heat: 0.7
Radiation: 0.4
- # Sunrise-End
- type: ClothingSpeedModifier
walkModifier: 0.85
sprintModifier: 0.85
diff --git a/Resources/Prototypes/_Sunrise/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/_Sunrise/Entities/Clothing/Uniforms/jumpsuits.yml
index 6cc507072c..363c767a88 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Clothing/Uniforms/jumpsuits.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Clothing/Uniforms/jumpsuits.yml
@@ -397,7 +397,7 @@
- type: Sprite
sprite: _Sunrise/Clothing/Uniforms/Jumpsuit/alcoholichka.rsi
- type: Clothing
- sprite: _Sunrise/Clothing/Uniforms/Jumpsuit/alcoholichka.rs
+ sprite: _Sunrise/Clothing/Uniforms/Jumpsuit/alcoholichka.rsi
- type: entity
parent: ClothingUniformBase
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Circuitboards/computer.yml
index e6b9fe5f80..acf4b19cb1 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Circuitboards/computer.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Circuitboards/computer.yml
@@ -128,7 +128,7 @@
- type: Sprite
state: cpu_supply
- type: ComputerBoard
- prototype: ComputerFineRecords
+ prototype: ComputerContrabandSale
- type: StaticPrice
price: 3000
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Syndicate_Gadgets/biocode.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Syndicate_Gadgets/biocode.yml
index f4f4e5150b..0f4e6d153d 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Syndicate_Gadgets/biocode.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Devices/Syndicate_Gadgets/biocode.yml
@@ -7,7 +7,6 @@
factions:
- Syndicate
- Thief
- alertText: Данный предмет биокодирован. Вы не можете его использовать.
- type: entity
parent: DefibrillatorSyndicate
@@ -17,8 +16,6 @@
- type: Biocode
factions:
- Syndicate
- alertText: Данный предмет биокодирован. Вы не можете его использовать.
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Mech/mechs.yml
index caff903742..f0b96429c2 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Mech/mechs.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Mech/mechs.yml
@@ -128,7 +128,7 @@
# region Mech Pod
- type: entity
id: MechSecPod
- parent: [ BaseMechPod, BaseRestrictedContraband ]
+ parent: [ BaseMechPod, BaseSecurityContraband ]
name: Security Pod
description: Despite its size, the Security Pod has incredible mobility in space thanks to its engines.
suffix: Filled
@@ -169,6 +169,7 @@
equipmentWhitelist:
tags:
- CombatMech
+ - PaddyMech
startingEquipment:
- WeaponMechCombatSolarisLaser
- type: Reflect
@@ -193,7 +194,7 @@
- type: entity
id: MechMiningPod
- parent: [ BaseMechPod, BaseRestrictedContraband ]
+ parent: [ BaseMechPod, BaseSalvageSpecialistContraband ]
name: Mining Pod
description: Despite its size, the Mining Pod has incredible survability in space.
suffix: Filled
@@ -553,7 +554,7 @@
- type: entity
id: MechPhazon
- parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
+ parent: [ BaseMech, CombatMech, BaseSecurityScienceContraband ]
name: Phazon
description: The most advanced mech on the market, the pinnacle of technological development, extremely mobile and deadly.
components:
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Medical/handheld_bso_crew_monitor.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Medical/handheld_bso_crew_monitor.yml
index d8970bcd01..2000f1d45b 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Medical/handheld_bso_crew_monitor.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Medical/handheld_bso_crew_monitor.yml
@@ -1,12 +1,9 @@
- type: entity
name: CommandFriend™ X-02
- parent: [ BaseHandheldComputer, BaseRestrictedContraband ]
+ parent: [ BaseHandheldComputer, BaseMedicalContraband ]
id: HandheldBSOCrewMonitor
description: Does not monitor the competence levels of command members.
components:
-# - type: Tag
-# tags:
-# - BSOBeltEquip
- type: Sprite
sprite: _Sunrise/Objects/Specific/Medical/handheld_bso_crewmonitor.rsi
state: scanner
@@ -28,9 +25,6 @@
parent: HandheldBSOCrewMonitor
suffix: Empty
components:
-# - type: Tag
-# tags:
-# - BSOBeltEquip
- type: ItemSlots
slots:
cell_slot:
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Ammunition/Catrtidges/heavy_rifle.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Ammunition/Catrtidges/heavy_rifle.yml
index 8b2324b98c..03751be376 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Ammunition/Catrtidges/heavy_rifle.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Ammunition/Catrtidges/heavy_rifle.yml
@@ -15,6 +15,8 @@
map: ["enum.AmmoVisualLayers.Base"]
- type: Appearance
- type: SpentAmmoVisuals
+ - type: StaticPrice
+ price: 3
- type: PhysicalComposition
materialComposition:
Steel: 10
@@ -36,6 +38,8 @@
map: ["enum.AmmoVisualLayers.Base"]
- type: Appearance
- type: SpentAmmoVisuals
+ - type: StaticPrice
+ price: 3
- type: PhysicalComposition
materialComposition:
Steel: 10
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
index 1f497d89f3..f1b9a35328 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
@@ -54,9 +54,9 @@
- type: entity
name: LNT620 "Spark"
- parent: [ BaseWeaponAutoPowerCell, BaseRestrictedContraband ]
+ parent: [ BaseWeaponAutoPowerCell, BaseSecurityContraband ]
id: WeaponLaserLNT620
- description: "Automatic Laser NanoTrasen LNT620."
+ description: Automatic Laser NanoTrasen LNT620.
components:
- type: Sprite
sprite: _Sunrise/Objects/Weapons/Guns/Battery/smg_laser.rsi
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Biocode/biocode.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Biocode/biocode.yml
index e0a1c39c29..f165b81e31 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Biocode/biocode.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Biocode/biocode.yml
@@ -6,7 +6,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponShotgunBulldog
@@ -16,7 +15,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponLightMachineGunL6
@@ -26,7 +24,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSubMachineGunC20r
@@ -36,7 +33,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponRifleEstoc
@@ -46,7 +42,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponLauncherChinaLake
@@ -56,7 +51,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponLauncherM79
@@ -66,7 +60,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSniperHristov
@@ -76,7 +69,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponPistolDeagle
@@ -86,7 +78,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponRifleM90GrenadeLauncher
@@ -96,7 +87,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponRifleBauer127
@@ -106,7 +96,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSniperDragunov
@@ -116,7 +105,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSIAR52
@@ -126,7 +114,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponDL6902
@@ -136,7 +123,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponAJ100
@@ -146,7 +132,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSyndieLaserPistol
@@ -156,7 +141,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponLaserMinigun
@@ -166,7 +150,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSyndieLaserGun
@@ -176,7 +159,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponGrenadeLauncherGL70
@@ -186,7 +168,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponShotgunMinotaur
@@ -196,7 +177,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponEnergyCrossbow
@@ -206,7 +186,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponSubMachineGunC40r
@@ -216,7 +195,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: entity
parent: WeaponPistolDeagleGolden
@@ -226,4 +204,3 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Throwable/grenades.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Throwable/grenades.yml
index 345536aa2e..1e90f328aa 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Throwable/grenades.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Guns/Throwable/grenades.yml
@@ -1,7 +1,7 @@
- type: entity
name: SyndyFlash Grenade
description: It definitely smells fake.
- parent: [ GrenadeBase, BaseRestrictedContraband, GrenadeFlashBang ]
+ parent: [ GrenadeBase, BaseSyndicateContraband, GrenadeFlashBang ]
id: SyndyFlashGrenade
components:
- type: Sprite
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/biocode.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/biocode.yml
index 43ebf493a6..4ffafb7e83 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/biocode.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/biocode.yml
@@ -6,10 +6,9 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: Construction
graph: EnergySwordDoubleGraph
- node: DoubleEnergySwordNode
+ node: double
- type: Biocode
factions:
- Syndicate
@@ -22,7 +21,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: Tag
tags:
- EnergySword
@@ -41,7 +39,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: Biocode
factions:
- Syndicate
@@ -54,7 +51,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: Biocode
factions:
- Syndicate
@@ -67,7 +63,6 @@
- type: FactionWeaponBlocker
factions:
- Syndicate
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
- type: Biocode
factions:
- Syndicate
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Throwable/biocode.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Throwable/biocode.yml
index 8219a87eda..5d68d27d8c 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Throwable/biocode.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Throwable/biocode.yml
@@ -7,4 +7,3 @@
factions:
- Syndicate
- Thief
- alertText: Данное оружие биокодировано. Вы не можете его использовать.
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/base_contraband.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/base_contraband.yml
new file mode 100644
index 0000000000..76e42550d9
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/base_contraband.yml
@@ -0,0 +1,15 @@
+- type: entity
+ id: BaseSecurityScienceContraband
+ parent: BaseRestrictedContraband
+ abstract: true
+ components:
+ - type: Contraband
+ allowedDepartments: [ Security, Science ]
+
+- type: entity
+ id: BaseSalvageSpecialistContraband
+ parent: BaseRestrictedContraband
+ abstract: true
+ components:
+ - type: Contraband
+ allowedJobs: [ SalvageSpecialist ]
diff --git a/Resources/Prototypes/_Sunrise/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/_Sunrise/Entities/Structures/Machines/lathe.yml
index cc7af11a40..60773fc674 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Structures/Machines/lathe.yml
@@ -11,6 +11,8 @@
layers:
- state: icon
map: ["enum.LatheVisualLayers.IsRunning"]
+ - type: Machine
+ board: SewingPrinterMetusMachineCircuitboard
- type: Lathe
staticPacks:
- ClothingMetusPlanetPrison
@@ -107,6 +109,8 @@
- PowerCellsStatic
- ElectronicsStaticPrison
- HydroponicsStatic
+ - type: Machine
+ board: AutolathePrisonMetusMachineCircuitboard
- type: entity
id: PirateTechFab
diff --git a/Resources/Prototypes/_Sunrise/Entities/Structures/Reflector/reflector.yml b/Resources/Prototypes/_Sunrise/Entities/Structures/Reflector/reflector.yml
index 5ce9380156..2ba04ed3e8 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Structures/Reflector/reflector.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Structures/Reflector/reflector.yml
@@ -1,3 +1,6 @@
+# Какого хуя это не наследуется от BaseStructure
+# TODO: Исправьте это говно кто-нибудь
+
- type: entity
id: Reflector
name: reflector
@@ -16,6 +19,7 @@
- type: Pullable
- type: Rotatable
- type: Machine
+ board: ReflectorMachineCircuitboard
- type: Physics
bodyType: Static
- type: Fixtures
diff --git a/Resources/Prototypes/_Sunrise/Entities/Structures/Wallmounts/shelfs.yml b/Resources/Prototypes/_Sunrise/Entities/Structures/Wallmounts/shelfs.yml
index 225d69b2df..c9699f2ed5 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Structures/Wallmounts/shelfs.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Structures/Wallmounts/shelfs.yml
@@ -28,15 +28,9 @@
collection: MetalBreak
- !type:SpawnEntitiesBehavior
spawn:
- SheetSteel1:
- min: 4
- max: 12
MaterialWoodPlank1:
min: 1
max: 4
- PartRodMetal1:
- min: 2
- max: 8
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Fixtures
@@ -101,14 +95,14 @@
- !type:SpawnEntitiesBehavior
spawn:
SheetSteel1:
- min: 4
- max: 12
+ min: 0
+ max: 1
MaterialWoodPlank1:
min: 1
max: 4
PartRodMetal1:
- min: 2
- max: 8
+ min: 1
+ max: 2
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Fixtures
diff --git a/Resources/Prototypes/_Sunrise/Entities/Structures/Walls/railingwood.yml b/Resources/Prototypes/_Sunrise/Entities/Structures/Walls/railingwood.yml
index 1a7af2f7c1..6455bf087a 100644
--- a/Resources/Prototypes/_Sunrise/Entities/Structures/Walls/railingwood.yml
+++ b/Resources/Prototypes/_Sunrise/Entities/Structures/Walls/railingwood.yml
@@ -64,8 +64,8 @@
- !type:SpawnEntitiesBehavior
spawn:
MaterialWoodPlank:
- min: 1
- max: 2
+ min: 0
+ max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Construction
@@ -165,8 +165,8 @@
- !type:SpawnEntitiesBehavior
spawn:
MaterialWoodPlank:
- min: 1
- max: 2
+ min: 0
+ max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Construction
diff --git a/Resources/Prototypes/_Sunrise/FleshCult/flesh_heart.yml b/Resources/Prototypes/_Sunrise/FleshCult/flesh_heart.yml
index 602f1028b4..311f5d5ddf 100644
--- a/Resources/Prototypes/_Sunrise/FleshCult/flesh_heart.yml
+++ b/Resources/Prototypes/_Sunrise/FleshCult/flesh_heart.yml
@@ -3,6 +3,7 @@
parent: BaseStructure
name: Flesh Heart
description: Flesh Heart
+ categories: [ Spawner ]
placement:
mode: AlignTileAny
components:
diff --git a/Resources/Prototypes/_Sunrise/Recipes/Lathes/Packs/science.yml b/Resources/Prototypes/_Sunrise/Recipes/Lathes/Packs/science.yml
index cc064048bc..60761a4581 100644
--- a/Resources/Prototypes/_Sunrise/Recipes/Lathes/Packs/science.yml
+++ b/Resources/Prototypes/_Sunrise/Recipes/Lathes/Packs/science.yml
@@ -17,7 +17,7 @@
- DurandTargetingElectronics
- ClarkeCentralElectronics
- ClarkePeripheralsElectronics
- - ImplantExtractorMachineCircuitboard
+ - InterrogatorMachineCircuitboard
- ExosuitFabricatorHyperConvectionMachineCircuitboard
- MedicalAssemblerMachineCircuitboard
diff --git a/Resources/Prototypes/_Sunrise/Recipes/Lathes/misc.yml b/Resources/Prototypes/_Sunrise/Recipes/Lathes/misc.yml
index 27c1212e5b..cf2d7bb3e5 100644
--- a/Resources/Prototypes/_Sunrise/Recipes/Lathes/misc.yml
+++ b/Resources/Prototypes/_Sunrise/Recipes/Lathes/misc.yml
@@ -18,14 +18,9 @@
Plastic: 600
- type: latheRecipe
+ parent: BaseLightRecipe
id: UvLightTube
result: UvLightTube
- categories:
- - Lights
- completetime: 2
- materials:
- Steel: 50
- Glass: 50
- type: latheRecipe
id: ClothingShoesBootsMagSec
diff --git a/Resources/Prototypes/_Sunrise/Research/medical.yml b/Resources/Prototypes/_Sunrise/Research/medical.yml
index c3cacfff42..019dd895a7 100644
--- a/Resources/Prototypes/_Sunrise/Research/medical.yml
+++ b/Resources/Prototypes/_Sunrise/Research/medical.yml
@@ -256,7 +256,7 @@
tier: 3
cost: 12500
recipeUnlocks:
- - ImplantExtractorMachineCircuitboard
+ - InterrogatorMachineCircuitboard
- type: technology
id: AutoMenders
diff --git a/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_ensign.yml b/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_ensign.yml
index 80c7fb72b0..651d2077bc 100644
--- a/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_ensign.yml
+++ b/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_ensign.yml
@@ -55,3 +55,15 @@
storage:
back:
- HandheldBSOCrewMonitor
+
+- type: chameleonOutfit
+ id: BlueShieldEnsignChameleonOutfit
+ job: BlueShieldEnsign
+ icon: JobIconBlueShield
+ equipment:
+ shoes: ClothingShoesBootsBlueShieldFilled
+ eyes: ClothingEyesGlassesBlueShield
+ head: ClothingHeadHatBeretBlueShield
+ outerClothing: ClothingOuterArmorBlueShield
+ belt: ClothingBeltBlueShieldWebbingFilled
+ gloves: ClothingHandsGlovesCombat
\ No newline at end of file
diff --git a/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_officer.yml b/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_officer.yml
index bc0b728d05..b1873070d9 100644
--- a/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_officer.yml
+++ b/Resources/Prototypes/_Sunrise/Roles/Jobs/Blueshield/blueshield_officer.yml
@@ -52,3 +52,13 @@
storage:
back:
# - HandheldBSOCrewMonitor
+
+- type: chameleonOutfit
+ id: BlueShieldOfficerChameleonOutfit
+ job: BlueShieldOfficer
+ icon: JobIconBlueShield
+ equipment:
+ shoes: ClothingShoesBootsBlueShieldFilled
+ eyes: ClothingEyesGlassesBlueShield
+ outerClothing: ClothingOuterArmorBlueShield
+ gloves: ClothingHandsGlovesCombat
\ No newline at end of file
diff --git a/Resources/Prototypes/_Sunrise/Roles/Jobs/Command/commaid.yml b/Resources/Prototypes/_Sunrise/Roles/Jobs/Command/commaid.yml
index 15f82c21ab..08b8b441e0 100644
--- a/Resources/Prototypes/_Sunrise/Roles/Jobs/Command/commaid.yml
+++ b/Resources/Prototypes/_Sunrise/Roles/Jobs/Command/commaid.yml
@@ -40,3 +40,14 @@
sprite: /Textures/_Sunrise/Interface/Misc/job_icons.rsi
state: CommandMaid
+- type: chameleonOutfit
+ id: ComMaidChameleonOutfit
+ job: ComMaid
+ icon: JobIconComMaid
+ equipment:
+ jumpsuit: ClothingUniformJumpskirtElegantMaid
+ head: ClothingHeadNurseHat
+ eyes: ClothingEyesGlassesSunglasses
+ neck: BunnyButterfly
+ shoes: ClothingShoesColorWhite
+
diff --git a/Resources/Prototypes/_Sunrise/Structures/Machines/computers.yml b/Resources/Prototypes/_Sunrise/Structures/Machines/computers.yml
index d65be60063..df6a6e7cb0 100644
--- a/Resources/Prototypes/_Sunrise/Structures/Machines/computers.yml
+++ b/Resources/Prototypes/_Sunrise/Structures/Machines/computers.yml
@@ -347,10 +347,8 @@
description:
components:
- type: CargoPalletConsole
- #tag: #Service sale
- #whitelist:
- # components:
- # - Food
+ - type: Computer
+ board: ComputerServiceSaleConsoleCircuitboard
- type: entity
id: ComputerSecuritySaleConsole
@@ -360,10 +358,8 @@
description:
components:
- type: CargoPalletConsole
-# tag: #Security sale
-# whitelist:
-# components:
-# - Gun
+ - type: Computer
+ board: ComputerSecuritySaleConsoleCircuitboard
- type: entity
id: ComputerMedicalSaleConsole
@@ -373,10 +369,8 @@
description:
components:
- type: CargoPalletConsole
-# tag: #Medical sale
-# whitelist:
-# components:
-# - Healing
+ - type: Computer
+ board: ComputerMedicalSaleConsoleCircuitboard
- type: entity
id: ComputerMiningSaleConsole
@@ -386,10 +380,8 @@
description:
components:
- type: CargoPalletConsole
-# tag: #Mining sale
-# whitelist:
-# components:
-# - Material
+ - type: Computer
+ board: ComputerMiningSaleConsoleCircuitboard
- type: entity
id: ComputerScienceSaleConsole
@@ -399,13 +391,8 @@
description:
components:
- type: CargoPalletConsole
-# tag: #Science sale
-# whitelist:
-# components:
-# - TechnologyDisk
-# - MachineBoard
-# - MachinePart
-# - PowerCell
+ - type: Computer
+ board: ComputerScienceSaleConsoleboard
- type: entity
parent: ComputerComms
diff --git a/Resources/Prototypes/_Sunrise/Structures/interrogator.yml b/Resources/Prototypes/_Sunrise/Structures/interrogator.yml
index 7f39daf819..24a7e5605f 100644
--- a/Resources/Prototypes/_Sunrise/Structures/interrogator.yml
+++ b/Resources/Prototypes/_Sunrise/Structures/interrogator.yml
@@ -48,7 +48,7 @@
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Machine
- board: ImplantExtractorMachineCircuitboard
+ board: InterrogatorMachineCircuitboard
- type: WiresPanel
- type: ApcPowerReceiver
powerLoad: 200
@@ -70,10 +70,10 @@
board: InterrogatorMachineCircuitboard
- type: entity
- id: ImplantExtractorMachineCircuitboard
+ id: InterrogatorMachineCircuitboard
parent: BaseMachineCircuitboard
- name: implant scan machine board
- description: A machine printed circuit board for a implant extractor.
+ name: interrogator machine board
+ description: A machine printed circuit board for a interrogator.
components:
- type: Sprite
state: medical
@@ -83,12 +83,3 @@
Manipulator: 4
Glass: 1
Cable: 1
-
-- type: entity
- id: InterrogatorMachineCircuitboard
- parent: ImplantExtractorMachineCircuitboard
- name: interrogator machine board
- description: A machine printed circuit board for a interrogator.
- components:
- - type: Sprite
- state: medical
diff --git a/Resources/Prototypes/_Sunrise/game_presets.yml b/Resources/Prototypes/_Sunrise/game_presets.yml
index 7e51f82166..720f2635a2 100644
--- a/Resources/Prototypes/_Sunrise/game_presets.yml
+++ b/Resources/Prototypes/_Sunrise/game_presets.yml
@@ -26,3 +26,16 @@
- SpaceTrafficControlEventScheduler
- SubGamemodesRule
- BasicRoundstartVariation
+
+- type: gamePreset
+ id: ExtraLowPop
+ name: extra-title
+ hide: true
+ description: extra-description
+ maxPlayers: 10
+ rules:
+ - BasicStationEventScheduler
+ - MeteorSwarmScheduler
+ - SpaceTrafficControlEventScheduler
+ - SubGamemodesRule
+ - BasicRoundstartVariation
diff --git a/Resources/Prototypes/_Sunrise/holidays.yml b/Resources/Prototypes/_Sunrise/holidays.yml
index 484dfec52d..773217a146 100644
--- a/Resources/Prototypes/_Sunrise/holidays.yml
+++ b/Resources/Prototypes/_Sunrise/holidays.yml
@@ -8,7 +8,7 @@
greet:
!type:Custom
text: holiday-custom-vigers-ray-birthday
- greetColor: gold
+ color: gold
- type: holidayGiveawayItem
id: VigersRayBirthdayGiveawayPresent
@@ -43,7 +43,7 @@
greet:
!type:Custom
text: holiday-custom-helloween
- greetColor: orange
+ color: orange
- type: holidayGiveawayItem
id: HelloweenGiveawayCandle
diff --git a/Resources/Prototypes/_Sunrise/secret_weights.yml b/Resources/Prototypes/_Sunrise/secret_weights.yml
index 540652ecb2..ad798f6d53 100644
--- a/Resources/Prototypes/_Sunrise/secret_weights.yml
+++ b/Resources/Prototypes/_Sunrise/secret_weights.yml
@@ -6,6 +6,7 @@
AssaultOps: 0.1
Revolutionary: 0.1
Nukeops: 0.1
+ ExtraLowPop: 1 # У этой штуки максимум 10 игроков. Так что высокий вес - нормально
- type: weightedRandom
id: FishSecret
@@ -15,3 +16,4 @@
AssaultOps: 0.1
Revolutionary: 0.1
Nukeops: 0.1
+ ExtraLowPop: 1 # У этой штуки максимум 10 игроков. Так что высокий вес - нормально
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml
index c7a2c9e983..a38acf3185 100644
--- a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml
+++ b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml
@@ -32,7 +32,7 @@
-
+
diff --git a/Resources/ServerInfo/Guidebook/_Sunrise/Antagonist/Changelings.xml b/Resources/ServerInfo/Guidebook/_Sunrise/Antagonist/Changelings.xml
index 7973227003..03aa4edf4b 100644
--- a/Resources/ServerInfo/Guidebook/_Sunrise/Antagonist/Changelings.xml
+++ b/Resources/ServerInfo/Guidebook/_Sunrise/Antagonist/Changelings.xml
@@ -1,8 +1,6 @@
# Генокрад
-
-
-
+
Генокрад — это разумное инопланетное существо, способное принимать человеческий облик. Генокрады - это инопланетяне в форме головной слизи, но до начала смены они либо превращаются в кого-то, когда они находятся вне станции, либо они каким-то образом убивают кого-то и превращаются в генокрада неизвестным образом.
Главным оружием генокрада является его способность внутренне синтезировать опасные химические вещества, превращаться в других существ, которых он поглотил, и сливаться с людьми.
diff --git a/Resources/migration.yml b/Resources/migration.yml
index 649b708eba..6bb02276fa 100644
--- a/Resources/migration.yml
+++ b/Resources/migration.yml
@@ -944,4 +944,6 @@ HyposprayMedical: null
HyposprayMedicalNoFilterBox: null
GrenadeFlashTimer: null
+ImplantExtractorMachineCircuitboard: InterrogatorMachineCircuitboard
+
# Sunrise-End