Fix dead people standing up after being stunned (#3330)

* fix crit/dead players standing up

* actually fix crit/dead players standing up

* nullable + missed check

Co-authored-by: cyclowns <cyclowns@protonmail.ch>
This commit is contained in:
mirrorcult
2021-02-20 15:55:35 -07:00
committed by GitHub
parent f85d8435c1
commit 6c088c36b8
4 changed files with 26 additions and 16 deletions

View File

@@ -337,7 +337,8 @@ namespace Content.Server.GameObjects.Components.Buckle
Appearance?.SetData(BuckleVisuals.Buckled, false); Appearance?.SetData(BuckleVisuals.Buckled, false);
if (_stunnable != null && _stunnable.KnockedDown) if (_stunnable != null && _stunnable.KnockedDown
|| (_mobState?.IsIncapacitated() ?? false))
{ {
EntitySystem.Get<StandingStateSystem>().Down(Owner); EntitySystem.Get<StandingStateSystem>().Down(Owner);
} }

View File

@@ -353,13 +353,16 @@ namespace Content.Server.GameObjects.Components.Instruments
UserInterface?.CloseAll(); UserInterface?.CloseAll();
if(Handheld) if (mob != null)
EntitySystem.Get<StandingStateSystem>().DropAllItemsInHands(mob, false);
if (mob != null && mob.TryGetComponent(out StunnableComponent? stun))
{ {
stun.Stun(1); if (Handheld)
Clean(); EntitySystem.Get<StandingStateSystem>().DropAllItemsInHands(mob, false);
if (mob.TryGetComponent(out StunnableComponent? stun))
{
stun.Stun(1);
Clean();
}
} }
InstrumentPlayer = null; InstrumentPlayer = null;

View File

@@ -1,9 +1,11 @@
using Content.Server.GameObjects.EntitySystems; #nullable enable
using Content.Server.GameObjects.EntitySystems;
using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects;
using Content.Server.Utility; using Content.Server.Utility;
using Content.Shared.Alert; using Content.Shared.Alert;
using Content.Shared.Audio; using Content.Shared.Audio;
using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs;
using Content.Shared.GameObjects.Components.Mobs.State;
using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Movement;
using Content.Shared.Interfaces; using Content.Shared.Interfaces;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
@@ -39,7 +41,8 @@ namespace Content.Server.GameObjects.Components.Mobs
StunnedTimer = 0f; StunnedTimer = 0f;
SlowdownTimer = 0f; SlowdownTimer = 0f;
if (KnockedDown) if (KnockedDown &&
Owner.TryGetComponent(out IMobStateComponent? mobState) && !mobState.IsIncapacitated())
{ {
EntitySystem.Get<StandingStateSystem>().Standing(Owner); EntitySystem.Get<StandingStateSystem>().Standing(Owner);
} }
@@ -65,7 +68,8 @@ namespace Content.Server.GameObjects.Components.Mobs
{ {
KnockdownTimer -= delta; KnockdownTimer -= delta;
if (KnockdownTimer <= 0f) if (KnockdownTimer <= 0f
&& Owner.TryGetComponent(out IMobStateComponent? mobState) && !mobState.IsIncapacitated())
{ {
EntitySystem.Get<StandingStateSystem>().Standing(Owner); EntitySystem.Get<StandingStateSystem>().Standing(Owner);
@@ -82,7 +86,7 @@ namespace Content.Server.GameObjects.Components.Mobs
{ {
SlowdownTimer = 0f; SlowdownTimer = 0f;
if (Owner.TryGetComponent(out MovementSpeedModifierComponent movement)) if (Owner.TryGetComponent(out MovementSpeedModifierComponent? movement))
{ {
movement.RefreshMovementSpeedModifiers(); movement.RefreshMovementSpeedModifiers();
} }
@@ -92,7 +96,7 @@ namespace Content.Server.GameObjects.Components.Mobs
} }
if (!StunStart.HasValue || !StunEnd.HasValue || if (!StunStart.HasValue || !StunEnd.HasValue ||
!Owner.TryGetComponent(out ServerAlertsComponent status)) !Owner.TryGetComponent(out ServerAlertsComponent? status))
{ {
return; return;
} }

View File

@@ -1,5 +1,7 @@
using Content.Server.Interfaces.GameObjects.Components.Items; #nullable enable
using Content.Server.Interfaces.GameObjects.Components.Items;
using Content.Shared.Audio; using Content.Shared.Audio;
using Content.Shared.GameObjects.Components.Mobs.State;
using Content.Shared.GameObjects.Components.Rotation; using Content.Shared.GameObjects.Components.Rotation;
using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.EntitySystems;
using JetBrains.Annotations; using JetBrains.Annotations;
@@ -13,7 +15,7 @@ namespace Content.Server.GameObjects.EntitySystems
{ {
protected override bool OnDown(IEntity entity, bool playSound = true, bool dropItems = true, bool force = false) protected override bool OnDown(IEntity entity, bool playSound = true, bool dropItems = true, bool force = false)
{ {
if (!entity.TryGetComponent(out AppearanceComponent appearance)) if (!entity.TryGetComponent(out AppearanceComponent? appearance))
{ {
return false; return false;
} }
@@ -37,7 +39,7 @@ namespace Content.Server.GameObjects.EntitySystems
protected override bool OnStand(IEntity entity) protected override bool OnStand(IEntity entity)
{ {
if (!entity.TryGetComponent(out AppearanceComponent appearance)) return false; if (!entity.TryGetComponent(out AppearanceComponent? appearance)) return false;
appearance.TryGetData<RotationState>(RotationVisuals.RotationState, out var oldState); appearance.TryGetData<RotationState>(RotationVisuals.RotationState, out var oldState);
var newState = RotationState.Vertical; var newState = RotationState.Vertical;
@@ -53,7 +55,7 @@ namespace Content.Server.GameObjects.EntitySystems
{ {
base.DropAllItemsInHands(entity, doMobChecks); base.DropAllItemsInHands(entity, doMobChecks);
if (!entity.TryGetComponent(out IHandsComponent hands)) return; if (!entity.TryGetComponent(out IHandsComponent? hands)) return;
foreach (var heldItem in hands.GetAllHeldItems()) foreach (var heldItem in hands.GetAllHeldItems())
{ {