* Early commit * Early commit 2 * merging master broke my git * does anyone even read these * life is fleeting * it just works * this time passing integration tests * Remove hashset yaml serialization for now * You got a license for those nullables? * No examine, no context menu, part and mechanism parenting and visibility * Fix wrong brain sprite state * Removing layers was a mistake * just tear body system a new one and see if it still breathes * Remove redundant code * Add that comment back * Separate damage and body, component states, stomach rework * Add containers for body parts * Bring layers back pls * Fix parts magically changing color * Reimplement sprite layer visibility * Fix tests * Add leg test * Active legs is gone Crab rave * Merge fixes, rename DamageState to CurrentState * Remove IShowContextMenu and ICanExamine
80 lines
3.5 KiB
C#
80 lines
3.5 KiB
C#
#nullable enable
|
|
using JetBrains.Annotations;
|
|
using Content.Server.GameObjects.Components.Doors;
|
|
using Content.Server.GameObjects.Components.GUI;
|
|
using Content.Server.GameObjects.Components.Items.Storage;
|
|
using Content.Shared.GameObjects.Components.Inventory;
|
|
using Content.Shared.GameObjects.Components.Damage;
|
|
using Robust.Server.GameObjects.EntitySystems;
|
|
using Robust.Server.Interfaces.Player;
|
|
using Robust.Shared.Audio;
|
|
using Robust.Shared.GameObjects.Systems;
|
|
using Robust.Shared.Interfaces.GameObjects;
|
|
using Robust.Shared.Interfaces.Random;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Localization;
|
|
|
|
namespace Content.Server.StationEvents
|
|
{
|
|
[UsedImplicitly]
|
|
public sealed class BoltsDown : StationEvent
|
|
{
|
|
public override string Name => "BoltsDown";
|
|
public override StationEventWeight Weight => StationEventWeight.Low;
|
|
public override int? MaxOccurrences => 1;
|
|
private float _elapsedTime;
|
|
private int _eventDuration;
|
|
protected override string StartAnnouncement => Loc.GetString(
|
|
"The clover hat hackers turned the bolts of all the airlocks in the station down. We have dispatched high quality hacking equipment at every crewmember location so that this productive shift can continue");
|
|
protected override string EndAnnouncement => Loc.GetString(
|
|
"Our cybersecurity team has dealt with the problem and restarted all the airlocks bolts in the station. Have a nice shift.");
|
|
public override void Startup()
|
|
{
|
|
base.Startup();
|
|
EntitySystem.Get<AudioSystem>().PlayGlobal("/Audio/Effects/alert.ogg", AudioParams.Default.WithVolume(-10f));
|
|
_eventDuration = IoCManager.Resolve<IRobustRandom>().Next(120, 180);
|
|
|
|
var componentManager = IoCManager.Resolve<IComponentManager>();
|
|
foreach (var component in componentManager.EntityQuery<AirlockComponent>()) component.BoltsDown = true;
|
|
|
|
var playerManager = IoCManager.Resolve<IPlayerManager>();
|
|
foreach (var player in playerManager.GetAllPlayers())
|
|
{
|
|
if (player.AttachedEntity == null || !player.AttachedEntity.TryGetComponent(out InventoryComponent? inventory)) return;
|
|
if (inventory.TryGetSlotItem(EquipmentSlotDefines.Slots.BELT, out ItemComponent? item)
|
|
&& item?.Owner.Prototype?.ID == "UtilityBeltClothingFilledEvent") return;
|
|
if (player.AttachedEntity.TryGetComponent<IDamageableComponent>(out var damageable)
|
|
&& damageable.CurrentState == DamageState.Dead) return;
|
|
|
|
var entityManager = IoCManager.Resolve<IEntityManager>();
|
|
var playerPos = player.AttachedEntity.Transform.Coordinates;
|
|
entityManager.SpawnEntity("UtilityBeltClothingFilledEvent", playerPos);
|
|
}
|
|
}
|
|
public override void Shutdown()
|
|
{
|
|
base.Shutdown();
|
|
EntitySystem.Get<AudioSystem>().PlayGlobal("/Audio/Effects/alert.ogg", AudioParams.Default.WithVolume(-10f));
|
|
|
|
var componentManager = IoCManager.Resolve<IComponentManager>();
|
|
foreach (var component in componentManager.EntityQuery<AirlockComponent>()) component.BoltsDown = false;
|
|
}
|
|
public override void Update(float frameTime)
|
|
{
|
|
if (!Running)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_elapsedTime += frameTime;
|
|
|
|
if (_elapsedTime < _eventDuration)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Running = false;
|
|
}
|
|
}
|
|
}
|