Prevent Holoparasites from attacking their host (#6019)
This commit is contained in:
@@ -8,6 +8,7 @@ using Content.Shared.Audio;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.MobState;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Audio;
|
||||
@@ -48,6 +49,8 @@ namespace Content.Server.Guardian
|
||||
SubscribeLocalEvent<GuardianHostComponent, MoveEvent>(OnHostMove);
|
||||
SubscribeLocalEvent<GuardianHostComponent, MobStateChangedEvent>(OnHostStateChange);
|
||||
SubscribeLocalEvent<GuardianHostComponent, ComponentShutdown>(OnHostShutdown);
|
||||
|
||||
SubscribeLocalEvent<GuardianComponent, AttackAttemptEvent>(OnGuardianAttackAttempt);
|
||||
}
|
||||
|
||||
private void OnGuardianUnplayer(EntityUid uid, GuardianComponent component, PlayerDetachedEvent args)
|
||||
@@ -79,6 +82,15 @@ namespace Content.Server.Guardian
|
||||
EntityManager.QueueDeleteEntity(component.HostedGuardian.Value);
|
||||
}
|
||||
|
||||
private void OnGuardianAttackAttempt(EntityUid uid, GuardianComponent component, AttackAttemptEvent args)
|
||||
{
|
||||
if (args.Cancelled || args.Target != component.Host)
|
||||
return;
|
||||
|
||||
_popupSystem.PopupCursor(Loc.GetString("guardian-attack-host"), Filter.Entities(uid));
|
||||
args.Cancel();
|
||||
}
|
||||
|
||||
public void ToggleGuardian(GuardianHostComponent hostComponent)
|
||||
{
|
||||
if (hostComponent.HostedGuardian == null ||
|
||||
|
||||
@@ -299,7 +299,7 @@ namespace Content.Server.Interaction
|
||||
if (!ValidateInteractAndFace(user, coordinates))
|
||||
return;
|
||||
|
||||
if (!_actionBlockerSystem.CanAttack(user))
|
||||
if (!_actionBlockerSystem.CanAttack(user, target))
|
||||
return;
|
||||
|
||||
if (!wideAttack)
|
||||
|
||||
@@ -82,9 +82,9 @@ namespace Content.Shared.ActionBlocker
|
||||
return !ev.Cancelled;
|
||||
}
|
||||
|
||||
public bool CanAttack(EntityUid uid)
|
||||
public bool CanAttack(EntityUid uid, EntityUid? target = null)
|
||||
{
|
||||
var ev = new AttackAttemptEvent(uid);
|
||||
var ev = new AttackAttemptEvent(uid, target);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
|
||||
return !ev.Cancelled;
|
||||
|
||||
@@ -4,11 +4,13 @@ namespace Content.Shared.Interaction.Events
|
||||
{
|
||||
public class AttackAttemptEvent : CancellableEntityEventArgs
|
||||
{
|
||||
public AttackAttemptEvent(EntityUid uid)
|
||||
public EntityUid Uid { get; }
|
||||
public EntityUid? Target { get; }
|
||||
|
||||
public AttackAttemptEvent(EntityUid uid, EntityUid? target = null)
|
||||
{
|
||||
Uid = uid;
|
||||
}
|
||||
|
||||
public EntityUid Uid { get; }
|
||||
Target = target;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,4 +20,5 @@ guardian-entity-taking-damage = Your guardian is taking damage!
|
||||
guardian-host-critical-warn = YOUR HOST IS WOUNDED!
|
||||
guardian-host-death-warn = YOUR FORM SUCCUMBS TO NONEXISTENCE!
|
||||
guardian-death-warn = YOUR BODY IS PIERCED BY SUBATOMIC PAIN AS IT DISINTEGRATES!
|
||||
guardian-attack-host = You cannot attack your host.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user