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:
AJCM-git
2020-10-08 11:59:20 -04:00
committed by GitHub
parent 970f3bc82f
commit ea30709cde
8 changed files with 97 additions and 7 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View 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;
}
}
}

View File

@@ -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>())

View File

@@ -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

View File

@@ -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

View File

@@ -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