From 88a09bea71d64385773e4ccde19d1ea7205ccd8d Mon Sep 17 00:00:00 2001 From: Spatison <137375981+Spatison@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:33:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D1=83=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9=20(#468)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Двери больше нельзя моментально открыть голыми руками * add: Несколько целевой пинпоинтер для оперативников синдиката * add: Боеголовка синдиката --- .../GameTicking/Rules/NukeopsRuleSystem.cs | 86 ++++++++----- Content.Server/Nuke/NukeCodePaperSystem.cs | 4 +- Content.Server/Pinpointer/PinpointerSystem.cs | 4 +- .../Pinpointer/PinpointerSystem.multiple.cs | 75 ++++++++++++ Content.Shared/Prying/Systems/PryingSystem.cs | 2 +- .../Nuke/NuclearBombSyndicateComponent.cs | 12 ++ .../Pinpointer/MultiplePinpointerComponent.cs | 13 ++ .../entities/objects/devices/nuke.ftl | 3 + Resources/Maps/Shuttles/infiltrator.yml | 115 ++++++++++-------- Resources/Maps/Shuttles/striker.yml | 43 +++---- .../Catalog/Fills/Backpacks/duffelbag.yml | 11 ++ .../Entities/Objects/Devices/pinpointer.yml | 20 +++ .../Entities/Objects/Misc/paper.yml | 1 + .../Entities/Structures/Machines/nuke.yml | 9 ++ .../Roles/Jobs/Fun/misc_startinggear.yml | 2 +- 15 files changed, 295 insertions(+), 105 deletions(-) create mode 100644 Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs create mode 100644 Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs create mode 100644 Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index c2f00a6c06..77d38c8bb9 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -251,8 +251,32 @@ public sealed class NukeopsRuleSystem : GameRuleSystem continue; } + MapId? targetStationMap = null; + if (nukeops.TargetStation != null && TryComp(nukeops.TargetStation, out StationDataComponent? stationData)) + { + var stationGrid = stationData.Grids.FirstOrNull(); + targetStationMap = stationGrid != null + ? Transform(stationGrid.Value).MapID + : null; + } + + // WD EDIT nukeops.WinConditions.Add(WinCondition.NukeExplodedOnCorrectStation); - SetWinType(uid, WinType.OpsMajor, nukeops); + + + var operatives = EntityQuery(true); + var operativesAlive = operatives + .Any(ent => ent.Item2.MapID != targetStationMap && ent.Item1.Running); + + if (operativesAlive) + SetWinType(uid, WinType.OpsMajor, nukeops); + else + { + nukeops.WinConditions.Add(WinCondition.AllNukiesDead); + SetWinType(uid, WinType.OpsMinor, nukeops); + } + // WD EDIT + correctStation = true; } @@ -516,7 +540,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem return; // If the win condition was set to operative/crew major win, ignore. - if (component.WinType == WinType.OpsMajor || component.WinType == WinType.CrewMajor) + if (component.WinType == WinType.OpsMajor || component.WinType == WinType.CrewMajor || component.WinType == WinType.OpsMinor) return; var nukeQuery = AllEntityQuery(); @@ -527,6 +551,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem if (nuke.Status != NukeStatus.ARMED) continue; + Log.Error("hyi"); // UH OH if (nukeTransform.MapUid != null && centcomms.Contains(nukeTransform.MapUid.Value)) { @@ -552,39 +577,42 @@ public sealed class NukeopsRuleSystem : GameRuleSystem } } - var allAlive = true; - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var nukeopsUid, out _, out var mindContainer, out var mobState)) + if (!component.WinConditions.Contains(WinCondition.AllNukiesDead)) // WD EDIT { - // mind got deleted somehow so ignore it - if (!_mind.TryGetMind(nukeopsUid, out _, out var mind, mindContainer)) - continue; - - // check if player got gibbed or ghosted or something - count as dead - if (mind.OwnedEntity != null && - // if the player somehow isn't a mob anymore that also counts as dead - // have to be alive, not crit or dead - mobState.CurrentState is MobState.Alive) + var allAlive = true; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var nukeopsUid, out _, out var mindContainer, out var mobState)) { - continue; + // mind got deleted somehow so ignore it + if (!_mind.TryGetMind(nukeopsUid, out _, out var mind, mindContainer)) + continue; + + // check if player got gibbed or ghosted or something - count as dead + if (mind.OwnedEntity != null && + // if the player somehow isn't a mob anymore that also counts as dead + // have to be alive, not crit or dead + mobState.CurrentState is MobState.Alive) + { + continue; + } + + allAlive = false; + break; } - allAlive = false; - break; - } + // If all nuke ops were alive at the end of the round, + // the nuke ops win. This is to prevent people from + // running away the moment nuke ops appear. + if (allAlive) + { + SetWinType(uid, WinType.OpsMinor, component); + component.WinConditions.Add(WinCondition.AllNukiesAlive); + return; + } - // If all nuke ops were alive at the end of the round, - // the nuke ops win. This is to prevent people from - // running away the moment nuke ops appear. - if (allAlive) - { - SetWinType(uid, WinType.OpsMinor, component); - component.WinConditions.Add(WinCondition.AllNukiesAlive); - return; + component.WinConditions.Add(WinCondition.SomeNukiesAlive); } - component.WinConditions.Add(WinCondition.SomeNukiesAlive); - var diskAtCentCom = false; var diskQuery = AllEntityQuery(); @@ -619,7 +647,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem component.WinType = type; - if (endRound && (type == WinType.CrewMajor || type == WinType.OpsMajor)) + if (endRound && (type == WinType.CrewMajor || type == WinType.OpsMajor || type == WinType.OpsMinor)) _roundEndSystem.EndRound(); } diff --git a/Content.Server/Nuke/NukeCodePaperSystem.cs b/Content.Server/Nuke/NukeCodePaperSystem.cs index 8df25feebf..c0a4d5f231 100644 --- a/Content.Server/Nuke/NukeCodePaperSystem.cs +++ b/Content.Server/Nuke/NukeCodePaperSystem.cs @@ -114,9 +114,7 @@ namespace Content.Server.Nuke foreach (var (nukeUid, nuke) in nukes) { if (!onlyCurrentStation && - (owningStation == null && - nuke.OriginMapGrid != (transform.MapID, transform.GridUid) || - nuke.OriginStation != owningStation)) + nuke.OriginStation != owningStation) { continue; } diff --git a/Content.Server/Pinpointer/PinpointerSystem.cs b/Content.Server/Pinpointer/PinpointerSystem.cs index be9a715d5d..0a7098909f 100644 --- a/Content.Server/Pinpointer/PinpointerSystem.cs +++ b/Content.Server/Pinpointer/PinpointerSystem.cs @@ -8,7 +8,7 @@ using Content.Shared.IdentityManagement; namespace Content.Server.Pinpointer; -public sealed class PinpointerSystem : SharedPinpointerSystem +public sealed partial class PinpointerSystem : SharedPinpointerSystem { [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; @@ -18,6 +18,8 @@ public sealed class PinpointerSystem : SharedPinpointerSystem public override void Initialize() { base.Initialize(); + InitializeMultiplePinpointer(); // WD EDIT + _xformQuery = GetEntityQuery(); SubscribeLocalEvent(OnActivate); diff --git a/Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs b/Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs new file mode 100644 index 0000000000..5a0dd8b215 --- /dev/null +++ b/Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs @@ -0,0 +1,75 @@ +using Content.Shared._White.Pinpointer; +using Content.Shared.Interaction; +using Content.Shared.Pinpointer; + +namespace Content.Server.Pinpointer; + +public sealed partial class PinpointerSystem +{ + public void InitializeMultiplePinpointer() + { + SubscribeLocalEvent(OnMultiplePinpointerStartup); + SubscribeLocalEvent(OnMultiplePinpointerActivated); + SubscribeLocalEvent(OnMultiplePinpointerHandleState); + } + + private void OnMultiplePinpointerHandleState(EntityUid uid, MultiplePinpointerComponent component, ref AfterAutoHandleStateEvent args) + { + SetMultiplePinpointer(uid, component); + } + + private void OnMultiplePinpointerStartup(EntityUid uid, MultiplePinpointerComponent multiple, ComponentStartup args) + { + var pinpointer = EntityManager.EnsureComponent(uid); + + SetMultiplePinpointer(uid, multiple, pinpointer); + } + + private void OnMultiplePinpointerActivated(EntityUid uid, MultiplePinpointerComponent multiple, ActivateInWorldEvent args) + { + if (args.Handled) + return; + + args.Handled = CycleMultiplePinpointer(uid, multiple, args.User); + } + + private bool CycleMultiplePinpointer(EntityUid uid, MultiplePinpointerComponent? multiple = null, EntityUid? user = null) + { + if (!Resolve(uid, ref multiple)) + return false; + + if (multiple.Modes.Length == 0) + return false; + + multiple.CurrentEntry = (uint)((multiple.CurrentEntry + 1) % multiple.Modes.Length); + SetMultiplePinpointer(uid, multiple, user: user); + + return true; + } + + private void SetMultiplePinpointer(EntityUid uid, + MultiplePinpointerComponent? multiple = null, + PinpointerComponent? pin = null, + EntityUid? user = null) + { + if (!Resolve(uid, ref multiple, ref pin)) + return; + + if (multiple.Modes.Length <= multiple.CurrentEntry) + return; + + var current = multiple.Modes[multiple.CurrentEntry]; + SetDistance(uid, Distance.Unknown, pin); + if (current == "Off") + { + SetActive(uid, true, pin); + pin.Component = null; + } + else + { + SetActive(uid, false, pin); + pin.Component = current; + } + LocateTarget(uid, pin); + } +} diff --git a/Content.Shared/Prying/Systems/PryingSystem.cs b/Content.Shared/Prying/Systems/PryingSystem.cs index aefec3e211..5d75aec9ff 100644 --- a/Content.Shared/Prying/Systems/PryingSystem.cs +++ b/Content.Shared/Prying/Systems/PryingSystem.cs @@ -134,7 +134,7 @@ public sealed class PryingSystem : EntitySystem RaiseLocalEvent(target, ref modEv); - var time = TimeSpan.FromSeconds(!TryComp(target, out var airlock) || !airlock.Powered ? 0 : modEv.BaseTime * modEv.PryTimeModifier * toolModifier); // WD EDIT + var time = TimeSpan.FromSeconds(modEv.BaseTime * modEv.PryTimeModifier * (toolModifier - (!TryComp(target, out var airlock) || !airlock.Powered ? 1 : 0))); // WD EDIT var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new DoorPryDoAfterEvent(), target, target, tool) { diff --git a/Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs b/Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs new file mode 100644 index 0000000000..2062b0d35a --- /dev/null +++ b/Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Nuke; + +/// +/// Used for tracking the nuke bomb - isn't a tag for pinpointer purposes. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class NuclearBombSyndicateComponent : Component +{ + +} diff --git a/Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs b/Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs new file mode 100644 index 0000000000..b27503cd4c --- /dev/null +++ b/Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Pinpointer; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class MultiplePinpointerComponent : Component +{ + [DataField(required: true)] + public string[] Modes = Array.Empty(); + + [ViewVariables, AutoNetworkedField] + public uint CurrentEntry = 0; +} diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl index 564c2bae35..dd92dc38c2 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl @@ -4,6 +4,9 @@ ent-NuclearBomb = ядерная боеголовка ent-NuclearBombUnanchored = { ent-NuclearBomb } .suffix = незакрепленный .desc = { ent-NuclearBomb.desc } +ent-NuclearBombSyndicate = { ent-NuclearBomb } + .suffix = синдикат + .desc = { ent-NuclearBomb.desc } ent-NuclearBombKeg = ядерная боеголовка .desc = Вам, вероятно, не стоит оставаться здесь, чтобы проверить, запущена ли она. Сбоку имеется кран. .suffix = кег diff --git a/Resources/Maps/Shuttles/infiltrator.yml b/Resources/Maps/Shuttles/infiltrator.yml index 55955bfeea..38077ca1b9 100644 --- a/Resources/Maps/Shuttles/infiltrator.yml +++ b/Resources/Maps/Shuttles/infiltrator.yml @@ -165,6 +165,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -180,6 +188,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.14996 moles: @@ -195,6 +211,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -210,6 +234,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -225,6 +257,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -240,6 +280,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 - type: DecalGrid chunkCollection: @@ -2650,8 +2698,6 @@ entities: rot: 3.141592653589793 rad pos: 5.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 369 @@ -2660,8 +2706,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixer entities: - uid: 370 @@ -2675,8 +2719,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.78 inletOneConcentration: 0.22 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasPassiveVent @@ -2687,24 +2729,18 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 372 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 373 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 374 @@ -3268,8 +3304,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasPressurePump @@ -3282,8 +3316,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - proto: GasVentPump @@ -3294,8 +3326,6 @@ entities: rot: -1.5707963267948966 rad pos: 0.5,-11.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 450 @@ -3304,8 +3334,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 451 @@ -3314,8 +3342,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 452 @@ -3324,8 +3350,6 @@ entities: rot: 3.141592653589793 rad pos: -4.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 453 @@ -3334,8 +3358,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 454 @@ -3344,8 +3366,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 455 @@ -3353,8 +3373,6 @@ entities: - type: Transform pos: 0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasVentScrubber @@ -3365,8 +3383,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 457 @@ -3375,8 +3391,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 458 @@ -3385,8 +3399,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 459 @@ -3395,8 +3407,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 460 @@ -3405,8 +3415,6 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 461 @@ -3414,8 +3422,6 @@ entities: - type: Transform pos: -0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - proto: GeneratorBasic15kW @@ -3635,6 +3641,9 @@ entities: - type: Transform pos: 4.5,-5.5 parent: 1 + - type: PointLight + color: '#D56C6CFF' + enabled: True - type: EntityStorage air: volume: 200 @@ -3653,6 +3662,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - type: ContainerContainer containers: entity_storage: !type:Container @@ -3726,19 +3743,19 @@ entities: - type: Transform pos: 5.6633797,-17.565443 parent: 1 -- proto: NuclearBombUnanchored +- proto: NuclearBombSyndicate entities: - uid: 509 components: - type: Transform pos: -2.5,-12.5 parent: 1 -- proto: NukeCodePaper +- proto: NukeCodePaperStation entities: - uid: 510 components: - type: Transform - pos: -2.5286522,-11.44479 + pos: -2.4890966,-11.441471 parent: 1 - proto: Ointment entities: @@ -3766,8 +3783,8 @@ entities: - type: Transform pos: -1.5,-24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 + - type: PolymorphableCanister + currentPrototype: OxygenCanister - proto: OxygenTankFilled entities: - uid: 515 @@ -4551,8 +4568,8 @@ entities: - type: Transform pos: 2.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 + - type: PolymorphableCanister + currentPrototype: StorageCanister - proto: SubstationBasic entities: - uid: 628 diff --git a/Resources/Maps/Shuttles/striker.yml b/Resources/Maps/Shuttles/striker.yml index 6a450f5266..6ef324fdbb 100644 --- a/Resources/Maps/Shuttles/striker.yml +++ b/Resources/Maps/Shuttles/striker.yml @@ -184,6 +184,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -191,6 +199,7 @@ entities: shakeTimes: 10 - type: SpreaderGrid - type: GridPathfinding + - type: NukeOpsShuttle - proto: AirCanister entities: - uid: 91 @@ -198,8 +207,8 @@ entities: - type: Transform pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 + - type: PolymorphableCanister + currentPrototype: AirCanister - proto: AirlockExternalShuttleSyndicateLocked entities: - uid: 142 @@ -825,6 +834,10 @@ entities: occludes: True ents: - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CyberPen entities: - uid: 77 @@ -1041,8 +1054,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: GasVentPump entities: - uid: 218 @@ -1054,8 +1065,6 @@ entities: address: Vnt-5f41a0ae transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 219 components: - type: Transform @@ -1066,8 +1075,6 @@ entities: address: Vnt-129c27d2 transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 220 components: - type: Transform @@ -1078,8 +1085,6 @@ entities: address: Vnt-11c4609d transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 221 components: - type: Transform @@ -1090,8 +1095,6 @@ entities: address: Vnt-6859729f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 222 components: - type: Transform @@ -1102,8 +1105,6 @@ entities: address: Vnt-19d24c7f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - proto: GeneratorBasic15kW entities: - uid: 41 @@ -1457,6 +1458,13 @@ entities: - type: Transform pos: 1.561105,-2.5567772 parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 - proto: PinpointerNuclear entities: - uid: 162 @@ -2379,11 +2387,4 @@ entities: occludes: True ents: - 346 -- proto: YellowOxygenTankFilled - entities: - - uid: 167 - components: - - type: Transform - pos: 1.60798,-0.3062118 - parent: 325 ... diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 4e4b6d9382..a91c3b2644 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -332,6 +332,17 @@ - id: PinpointerSyndicateNuclear - id: DeathAcidifierImplanter +- type: entity + parent: ClothingBackpackDuffelSyndicateBundle + id: ClothingBackpackDuffelSyndicateLonelyOperative + name: operative duffelbag + components: + - type: StorageFill + contents: + - id: BoxSurvivalSyndicate + - id: WeaponPistolViper + - id: PinpointerStationNuclear + - id: DeathAcidifierImplanter - type: entity parent: ClothingBackpackDuffelSyndicateMedicalBundle diff --git a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml index 29d6d67885..0bf0145080 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml @@ -63,6 +63,26 @@ - type: Pinpointer component: NukeDisk targetName: nuclear authentication disk + updateTargetName: true + + - type: MultiplePinpointer + modes: + - Off + - NukeDisk + - NuclearBombSyndicate + - NukeOpsShuttle + +- type: entity + parent: PinpointerSyndicateNuclear + id: PinpointerStationNuclear + suffix: Station bomb + components: + - type: MultiplePinpointer + modes: + - Off + - NukeDisk + - Nuke + - NukeOpsShuttle - type: entity name: universal pinpointer diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index 6ea6395763..6e84c47ff8 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -303,6 +303,7 @@ suffix: Station Only components: - type: NukeCodePaper + allNukesAvailable: false - type: entity name: pen diff --git a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml index 2aab75d54e..d1cbf154a9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml @@ -94,6 +94,15 @@ - type: Physics bodyType: Dynamic +- type: entity + parent: NuclearBombUnanchored + id: NuclearBombSyndicate + suffix: syndicate + components: + - type: NuclearBombSyndicate + - type: NukeLabel + prefix: nuke-label-syndicate + - type: entity parent: StorageTank id: NuclearBombKeg diff --git a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml index 8388cec302..6d531175b7 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml @@ -142,7 +142,7 @@ id: SyndicateLoneOperativeGearFull equipment: jumpsuit: ClothingUniformJumpsuitOperative - back: ClothingBackpackDuffelSyndicateOperative + back: ClothingBackpackDuffelSyndicateLonelyOperative mask: ClothingMaskGasSyndicate eyes: ClothingEyesHudSyndicate ears: ClothingHeadsetAltSyndicate