Stable to master merge (#41375)

* HOTFIX: Reword Wizard objective text to be more hostile (#41371)

Initial commit

* HOTFIX: automatically reset fallback gamemode to default (#41367)

automatically reset fallback gamemode to default after the round

* [HOTFIX] Prevent Payload Enumeration Failure.  (#41376)

* Prevent payload enumeration failure when spawning entities

* hate it here

* boop

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>

---------

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
slarticodefast
2025-11-10 21:11:50 +01:00
committed by GitHub
4 changed files with 33 additions and 25 deletions

View File

@@ -59,7 +59,7 @@ public sealed partial class GameTicker
foreach (var preset in fallbackPresets)
{
ClearGameRules();
SetGamePreset(preset);
SetGamePreset(preset, resetDelay: 1);
AddGamePresetRules();
StartGamePresetRules();
@@ -129,11 +129,11 @@ public sealed partial class GameTicker
}
}
public void SetGamePreset(string preset, bool force = false)
public void SetGamePreset(string preset, bool force = false, int? resetDelay = null)
{
var proto = FindGamePreset(preset);
if (proto != null)
SetGamePreset(proto, force);
SetGamePreset(proto, force, null, resetDelay);
}
public GamePresetPrototype? FindGamePreset(string preset)

View File

@@ -17,50 +17,49 @@ namespace Content.Server.Payload.EntitySystems;
public sealed class PayloadSystem : EntitySystem
{
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
[Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly ISerializationManager _serializationManager = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly TransformSystem _transform = default!;
private static readonly ProtoId<TagPrototype> PayloadTag = "Payload";
// TODO: Construction System Integration tests and remove the EnsureContainer from ConstructionSystem. :(
private static readonly string PayloadContainer = "payload";
private static readonly string TriggerContainer = "payloadTrigger";
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PayloadCaseComponent, TriggerEvent>(OnCaseTriggered);
SubscribeLocalEvent<PayloadTriggerComponent, TriggerEvent>(OnTriggerTriggered);
SubscribeLocalEvent<PayloadCaseComponent, ContainerIsInsertingAttemptEvent>(OnInsertAttempt);
SubscribeLocalEvent<PayloadCaseComponent, EntInsertedIntoContainerMessage>(OnEntityInserted);
SubscribeLocalEvent<PayloadCaseComponent, EntRemovedFromContainerMessage>(OnEntityRemoved);
SubscribeLocalEvent<PayloadCaseComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<ChemicalPayloadComponent, TriggerEvent>(HandleChemicalPayloadTrigger);
}
public IEnumerable<EntityUid> GetAllPayloads(EntityUid uid, ContainerManagerComponent? contMan = null)
public IEnumerable<EntityUid> GetAllPayloads(EntityUid uid)
{
if (!Resolve(uid, ref contMan, false))
if (!_container.TryGetContainer(uid, PayloadContainer, out var container))
yield break;
foreach (var container in contMan.Containers.Values)
foreach (var entity in container.ContainedEntities)
{
foreach (var entity in container.ContainedEntities)
{
if (_tagSystem.HasTag(entity, PayloadTag))
yield return entity;
}
if (_tagSystem.HasTag(entity, PayloadTag))
yield return entity;
}
}
private void OnCaseTriggered(EntityUid uid, PayloadCaseComponent component, TriggerEvent args)
{
// TODO: Adjust to the new trigger system
if (!TryComp(uid, out ContainerManagerComponent? contMan))
return;
// Pass trigger event onto all contained payloads. Payload capacity configurable by construction graphs.
foreach (var ent in GetAllPayloads(uid, contMan))
foreach (var ent in GetAllPayloads(uid))
{
RaiseLocalEvent(ent, ref args, false);
}
@@ -82,9 +81,18 @@ public sealed class PayloadSystem : EntitySystem
RaiseLocalEvent(parent, ref args);
}
private void OnInsertAttempt(Entity<PayloadCaseComponent> ent, ref ContainerIsInsertingAttemptEvent args)
{
if (args.Container.ID == PayloadContainer && !_tagSystem.HasTag(args.EntityUid, PayloadTag))
args.Cancel();
if (args.Container.ID == TriggerContainer && !HasComp<PayloadTriggerComponent>(args.EntityUid))
args.Cancel();
}
private void OnEntityInserted(EntityUid uid, PayloadCaseComponent _, EntInsertedIntoContainerMessage args)
{
if (!TryComp(args.Entity, out PayloadTriggerComponent? trigger))
if (args.Container.ID != TriggerContainer || !TryComp(args.Entity, out PayloadTriggerComponent? trigger))
return;
trigger.Active = true;
@@ -114,7 +122,7 @@ public sealed class PayloadSystem : EntitySystem
private void OnEntityRemoved(EntityUid uid, PayloadCaseComponent component, EntRemovedFromContainerMessage args)
{
if (!TryComp(args.Entity, out PayloadTriggerComponent? trigger))
if (args.Container.ID != TriggerContainer || !TryComp(args.Entity, out PayloadTriggerComponent? trigger))
return;
trigger.Active = false;

View File

@@ -42,8 +42,8 @@ roles-antag-wizard-objective = Teach them a lesson they'll never forget.
wizard-role-greeting =
It's wizard time, fireball!
There's been tensions between the Space Wizards Federation and NanoTrasen. You've been selected by the Space Wizards Federation to pay a visit to the station and give them a good "demonstration" of your powers.
What you do is up to you, but remember that the Space Wizards want you to make it out alive.
There's been tensions between the Space Wizards Federation and NanoTrasen. You've been selected by the Space Wizards Federation to pay a visit to the station and "remind them" why spellcasters are not to be trifled with.
Cause mayhem and destruction! What you do is up to you, but remember that the Space Wizards want you to make it out alive.
wizard-round-end-name = wizard

View File

@@ -25,8 +25,8 @@
- type: entity
parent: [BaseWizardObjective, BaseFreeObjective]
id: WizardDemonstrateObjective
name: Show off
description: Give the station a good demonstration of your powers!
name: Cause chaos
description: Teach those station welps to never disrespect a Wizard again!
components:
- type: Objective
icon: