【教程】创建控制台命令事件

备注:在 官方DOC 文档中对于 Command 的文档说明较为简略。本篇目重点补充说明。


依赖库群:PluginAPI.dll + CommandSystem.Core.dll
开发平台:Visual Studio 2022
编程语言:CSharp 4.0

整体流程


订阅
创建 Command 内容
约定 Command 处理事件
主程序

示例代码:创建命令


[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 中提供了两种受益对象。分别为 RemoteAdminCOmmandHandlerGameConsoleCommandHandler
  • CommandAliases:前者为完整头指令,后者为扩展头指令。
    • 一般 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);
}
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值