Bolts down event and minor tweaks (#2053)
* initial commit * I have to switch to master * oops * i need to merge master * finishing touches * updating submodule * bye Co-authored-by: Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
This commit is contained in:
@@ -76,7 +76,7 @@ namespace Content.Server.Chat
|
||||
var msg = _netManager.CreateNetMessage<MsgChatMessage>();
|
||||
msg.Channel = ChatChannel.Radio;
|
||||
msg.Message = message;
|
||||
msg.MessageWrap = "Station: {0}";
|
||||
msg.MessageWrap = "Centcom Announcement:\n{0}";
|
||||
_netManager.ServerSendToAll(msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace Content.Server.GameObjects.Components.Doors
|
||||
private bool _boltsDown;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
private bool BoltsDown
|
||||
public bool BoltsDown
|
||||
{
|
||||
get => _boltsDown;
|
||||
set
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Content.Server.GameObjects.EntitySystems.StationEvents
|
||||
|
||||
private List<StationEvent> _stationEvents = new List<StationEvent>();
|
||||
|
||||
private const float MinimumTimeUntilFirstEvent = 600;
|
||||
private const float MinimumTimeUntilFirstEvent = 300;
|
||||
|
||||
/// <summary>
|
||||
/// How long until the next check for an event runs
|
||||
|
||||
79
Content.Server/StationEvents/BoltsDown.cs
Normal file
79
Content.Server/StationEvents/BoltsDown.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
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())
|
||||
{
|
||||
var inventory = player.AttachedEntity.GetComponent<InventoryComponent>();
|
||||
if (player.AttachedEntity == null) 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.CurrentDamageState == 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ namespace Content.Server.StationEvents
|
||||
|
||||
public override StationEventWeight Weight => StationEventWeight.Normal;
|
||||
|
||||
public override int? MaxOccurrences => 3;
|
||||
public override int? MaxOccurrences => 2;
|
||||
|
||||
protected override string StartAnnouncement => Loc.GetString(
|
||||
"Abnormal activity detected in the station's powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.");
|
||||
@@ -47,7 +47,7 @@ namespace Content.Server.StationEvents
|
||||
|
||||
_announced = false;
|
||||
_elapsedTime = 0.0f;
|
||||
_failDuration = IoCManager.Resolve<IRobustRandom>().Next(30, 120);
|
||||
_failDuration = IoCManager.Resolve<IRobustRandom>().Next(60, 120);
|
||||
var componentManager = IoCManager.Resolve<IComponentManager>();
|
||||
|
||||
foreach (PowerReceiverComponent component in componentManager.EntityQuery<PowerReceiverComponent>())
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace Content.Server.StationEvents
|
||||
/// <summary>
|
||||
/// How long until the radiation storm starts
|
||||
/// </summary>
|
||||
private const float StartupTime = 10;
|
||||
private const float StartupTime = 5;
|
||||
|
||||
/// <summary>
|
||||
/// How long the radiation storm has been running for
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Content.Server.StationEvents
|
||||
/// In minutes, when is the first time this event can start
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public virtual int EarliestStart { get; } = 20;
|
||||
public virtual int EarliestStart { get; } = 5;
|
||||
|
||||
/// <summary>
|
||||
/// How many players need to be present on station for the event to run
|
||||
|
||||
@@ -12,3 +12,14 @@
|
||||
- name: Welder
|
||||
- name: Multitool
|
||||
- name: ApcExtensionCableStack
|
||||
|
||||
- type: entity
|
||||
id: UtilityBeltClothingFilledEvent
|
||||
parent: UtilityBeltClothing
|
||||
suffix: Filled
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- name: Crowbar
|
||||
- name: Screwdriver
|
||||
- name: Multitool
|
||||
|
||||
Reference in New Issue
Block a user