Replace VerbTypes with verb classes (#6525)

This commit is contained in:
Leon Friedrich
2022-02-10 15:30:59 +13:00
committed by GitHub
parent 0cd2c2fa9d
commit 1c9ffdc78c
60 changed files with 409 additions and 405 deletions

View File

@@ -1,12 +1,8 @@
using System;
using System.Linq;
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.Verbs;
using Robust.Shared.Console;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
namespace Content.Server.Verbs.Commands
{
@@ -68,28 +64,29 @@ namespace Content.Server.Verbs.Commands
}
var verbName = args[2].ToLowerInvariant();
var verbs = verbSystem.GetLocalVerbs(target, playerEntity.Value, VerbType.All, true);
var verbs = verbSystem.GetLocalVerbs(target, playerEntity.Value, Verb.VerbTypes, true);
if ((Enum.TryParse(typeof(VerbType), verbName, ignoreCase: true, out var vtype) &&
vtype is VerbType key) &&
verbs.TryGetValue(key, out var vset) &&
vset.Any())
// if the "verb name" is actually a verb-type, try run any verb of that type.
var verbType = Verb.VerbTypes.FirstOrDefault(x => x.Name == verbName);
if (verbType != null)
{
verbSystem.ExecuteVerb(vset.First(), playerEntity.Value, target, forced: true);
shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verbName), ("target", target), ("player", playerEntity)));
return;
var verb = verbs.FirstOrDefault(v => v.GetType() == verbType);
if (verb != null)
{
verbSystem.ExecuteVerb(verb, playerEntity.Value, target, forced: true);
shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verbName), ("target", target), ("player", playerEntity)));
return;
}
}
foreach (var (_, set) in verbs)
foreach (var verb in verbs)
{
foreach (var verb in set)
if (verb.Text.ToLowerInvariant() == verbName)
{
if (verb.Text.ToLowerInvariant() == verbName)
{
verbSystem.ExecuteVerb(verb, playerEntity.Value, target, forced: true);
shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verb.Text), ("target", target), ("player", playerEntity)));
return;
}
verbSystem.ExecuteVerb(verb, playerEntity.Value, target, forced: true);
shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verb.Text), ("target", target), ("player", playerEntity)));
return;
}
}

View File

@@ -1,10 +1,11 @@
using Content.Server.Administration;
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.Verbs;
using Robust.Shared.Console;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using System.Linq;
namespace Content.Server.Verbs.Commands
{
@@ -65,14 +66,11 @@ namespace Content.Server.Verbs.Commands
return;
}
var verbs = verbSystem.GetLocalVerbs(target, playerEntity.Value, VerbType.All, true);
var verbs = verbSystem.GetLocalVerbs(target, playerEntity.Value, Verb.VerbTypes);
foreach (var (type, set) in verbs)
foreach (var verb in verbs)
{
foreach (var verb in set)
{
shell.WriteLine(Loc.GetString("list-verbs-verb-listing", ("type", type), ("verb", verb.Text)));
}
shell.WriteLine(Loc.GetString("list-verbs-verb-listing", ("type", verb.GetType().Name), ("verb", verb.Text)));
}
}
}

View File

@@ -6,10 +6,8 @@ using Content.Shared.Database;
using Content.Shared.Hands.Components;
using Content.Shared.Verbs;
using Robust.Server.Player;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Log;
using Robust.Shared.Player;
using System.Linq;
namespace Content.Server.Verbs
{
@@ -49,8 +47,19 @@ namespace Content.Server.Verbs
var force = args.AdminRequest && eventArgs.SenderSession is IPlayerSession playerSession &&
_adminMgr.HasAdminFlag(playerSession, AdminFlags.Admin);
List<Type> verbTypes = new();
foreach (var key in args.VerbTypes)
{
var type = Verb.VerbTypes.FirstOrDefault(x => x.Name == key);
if (type != null)
verbTypes.Add(type);
else
Logger.Error($"Unknown verb type received: {key}");
}
var response =
new VerbsResponseEvent(args.EntityUid, GetLocalVerbs(args.EntityUid, attached, args.Type, force));
new VerbsResponseEvent(args.EntityUid, GetLocalVerbs(args.EntityUid, attached, verbTypes, force));
RaiseNetworkEvent(response, player.ConnectedClient);
}