Log verbs & alt-click interactions. (#5471)
* verb logging * Just a lil regex Verb ([a-zA-Z]*) = new\(\) Verb $1 = new(args) * nvm that didn't work * better log messages * Revert "Just a lil regex" This reverts commit aa2b143d042f1ed007c801d9e2c264cb07993aa1. * remove garbage code * better docstring
This commit is contained in:
@@ -1,21 +1,26 @@
|
||||
using System.Collections.Generic;
|
||||
using Content.Shared.Administration.Logs;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
|
||||
namespace Content.Shared.Verbs
|
||||
{
|
||||
public class SharedVerbSystem : EntitySystem
|
||||
public abstract class SharedVerbSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedAdminLogSystem _logSystem = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Raises a number of events in order to get all verbs of the given type(s) defined in local systems. This
|
||||
/// does not request verbs from the server.
|
||||
/// </summary>
|
||||
public virtual Dictionary<VerbType, SortedSet<Verb>> GetLocalVerbs(IEntity target, IEntity user, VerbType verbTypes, bool force=false)
|
||||
public virtual Dictionary<VerbType, SortedSet<Verb>> GetLocalVerbs(IEntity target, IEntity user, VerbType verbTypes, bool force = false)
|
||||
{
|
||||
Dictionary<VerbType, SortedSet<Verb>> verbs = new();
|
||||
|
||||
if ((verbTypes & VerbType.Interaction) == VerbType.Interaction)
|
||||
{
|
||||
GetInteractionVerbsEvent getVerbEvent = new(user, target, force);
|
||||
GetInteractionVerbsEvent getVerbEvent = new(user, target, force);
|
||||
RaiseLocalEvent(target.Uid, getVerbEvent);
|
||||
verbs.Add(VerbType.Interaction, getVerbEvent.Verbs);
|
||||
}
|
||||
@@ -50,9 +55,12 @@ namespace Content.Shared.Verbs
|
||||
/// <remarks>
|
||||
/// This will try to call the action delegates and raise the local events for the given verb.
|
||||
/// </remarks>
|
||||
public void ExecuteVerb(Verb verb)
|
||||
public void ExecuteVerb(Verb verb, EntityUid user, EntityUid target, bool forced = false)
|
||||
{
|
||||
// first, lets log the verb. Just in case it ends up crashing the server or something.
|
||||
LogVerb(verb, user, target, forced);
|
||||
|
||||
// then invoke any relevant actions
|
||||
verb.Act?.Invoke();
|
||||
|
||||
// Maybe raise a local event
|
||||
@@ -64,5 +72,32 @@ namespace Content.Shared.Verbs
|
||||
RaiseLocalEvent(verb.ExecutionEventArgs);
|
||||
}
|
||||
}
|
||||
|
||||
public void LogVerb(Verb verb, EntityUid user, EntityUid target, bool forced)
|
||||
{
|
||||
// first get the held item. again.
|
||||
EntityUid? used = null;
|
||||
if (EntityManager.TryGetComponent(user, out SharedHandsComponent? hands))
|
||||
{
|
||||
hands.TryGetActiveHeldEntity(out var useEntityd);
|
||||
used = useEntityd?.Uid;
|
||||
if (used != null && EntityManager.TryGetComponent(used.Value, out HandVirtualItemComponent? pull))
|
||||
used = pull.BlockingEntity;
|
||||
}
|
||||
|
||||
// then prepare the basic log message body
|
||||
var verbText = $"{verb.Category?.Text} {verb.Text}".Trim();
|
||||
var logText = forced
|
||||
? $"was forced to execute the '{verbText}' verb targeting " // let's not frame people, eh?
|
||||
: $"executed '{verbText}' verb targeting ";
|
||||
|
||||
// then log with entity information
|
||||
if (used != null)
|
||||
_logSystem.Add(LogType.Verb, verb.Impact,
|
||||
$"{user} {logText} {target} while holding {used}");
|
||||
else
|
||||
_logSystem.Add(LogType.Verb, verb.Impact,
|
||||
$"{user} {logText} {target}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user