备注:在 官方DOC 文档中对于 Command 的文档说明较为简略。本篇目重点补充说明。
依赖库群:PluginAPI.dll + CommandSystem.Core.dll
开发平台:Visual Studio 2022
编程语言:CSharp 4.0
整体流程
示例代码:创建命令
[CommandHandler(typeof(RemoteAdminCommandHandler))]
public class CustomEventCommand : ICommand, IUsageProvider
{
public string Command => "event";
public string[] Aliases { get; } = { "eve" };
public string Description => "[颜色]程序 green/blue/black";
public bool SanitizeResponse => true;
public string[] Usage { get; } = { "green/blue/black", "done" };
public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out string response)
{
bool isPlayer = sender is PlayerCommandSender;
if (!isPlayer)
{
response = "你必须以一名玩家身份发送该命令!";
return false;
}
response = "命令成功";
return true;
}
}
CommandHandler
: 特性约定该命令的受益对象- 在 PluginAPI.dll 中提供了两种受益对象。分别为
RemoteAdminCOmmandHandler
与GameConsoleCommandHandler
。
- 在 PluginAPI.dll 中提供了两种受益对象。分别为
Command
与Aliases
:前者为完整头指令,后者为扩展头指令。- 一般
Command
约定使用 BroadCast 的头指令,为实际使用方便允许Aliases
使用 BC\Say\Notice 等简写或关联内容作为触发条件。
- 一般
示例代码:约定命令事件
public class CustomEvent
{
string[] commandArray = { "event", "eve" };
[PluginEvent(ServerEventType.RemoteAdminCommandExecuted)]
public void OnRemoteCommandRun(RemoteAdminCommandExecutedEvent ev) {
string command = ev.Command.ToLower();
bool contains = Array.Exists(array, element => element == value);
if(!contains) return;
switch (ev.Arguments[0]) {
case "blue":
// 写入关于 Blue 次条目触发的事件
break;
case "green":
// 写入关于 Green 次条目触发的事件
break;
case "black":
// 写入关于 Black 次条目触发的事件
break;
}
}
}
PluginEvent
:特性关联服务器事件类型,约定RemoteAdminCommandExecutedEvent
事件为传递数据结构。
示例代码:订阅事件
在主程序入口中,如笔者的 CodeLoad
进行。
[PluginPriority(LoadPriority.Medium)]
public void Load()
{
EventManager.RegisterEvents<CustomEvent>(true);
}