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