• 泰拉瑞亚资源中心正式开放,若您要发布资源,请前往资源中心:https://www.bbstr.net/resources/,在资源中心的指定分类中发布资源同时也会自动发出帖子,同时您也可以自定义资源收费(目前仅支持硬币),并获得一定的硬币报酬,使用硬币购买的用户可以重复下载资源不收费,并且享受免费资源更新的特权哟~妈妈再也不怕我没有硬币花了~
    [必看]资源中心使用教程:https://www.bbstr.net/threads/852/

开发教程 【插件编写】TShock服务器插件编写入门

TheLastPrism

管理成员
版主
2019/10/25
703
221
110
武汉
Pt2.基础插件编写
由于C#语言本身内容过于庞杂,所以将改为在教程中逐步渗透的方式进行教学
教程中的概念均可在本贴的C#教程电子书中找到说明
本章节包含以下内容:
  • 使用服务器API提供的事件
  • 使用TShockAPI提供的函数创建规范的指令
  • TShockAPI与TSAPI中实用函数的使用
正在更新,敬请期待
 

TheLastPrism

管理成员
版主
2019/10/25
703
221
110
武汉
Pt.2-1.使用Hooks
在第一章的Hello world中,我们通过编写插件为服务器添加了一个自定义指令
但是众所周知,光靠指令是做不出鬼畜好玩的插件的
实现更多自定义的功能,你或许需要针对事件进行额外的处理
本章内容将向你展示使用ServerApi类提供的Hooks实现一个简单的聊天消息处理功能
本章使用的TShock版本:TShock 4.4 Pre 12 for Terraria 1.4.0.5
P.S. 由于棱镜已开学,这台电脑上没有安装Terraria,所以插件仅演示代码,暂时无法演示效果,请自行运行服务器进行验证
1.创建插件项目
预备章节中已经详细说明了创建插件项目的步骤,这里不再赘述​
本节demo将使用ServerChat事件,所以你的项目名可以是ServerChatHookTest
1597459937707.png
右键你的项目,新建文件夹,命名为References向其中添加你的三个引用文件​
然后添加引用,定位到项目路径中的References,添加对三个文件的引用​
重命名Class1.cs,将你的项目层次布置成图中的样子
以后我们都会使用这样的项目结构层次
2.编写代码
MainPlugin.cs中填充如图所示(你也可以在下面的代码栏中复制)的代码​
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Terraria;
using TerrariaApi.Server;

namespace ServerChatHookTest
{
    [ApiVersion(2,1)]
    public class MainPlugin : TerrariaPlugin
    {
        public MainPlugin(Main game) : base(game)
        {
        }

        public override string Name => "ServerChatHookTest";

        public override Version Version => new Version(0,1);

        public override string Author => "Test";

        public override string Description => "使用ServerChat事件";

        public override void Initialize()
        {

        }

        protected override void Dispose(bool disposing)
        {
            if(disposing)
            {

            }
            base.Dispose(disposing);
        }
    }
}
然后在Initialize方法中填充用于注册Hook的语句​
1600848187740.png
Tips:
或许你可能会疑惑为什么是Register(this,处理函数)而不使用+=这样的语法
别问我,我也不知道(逃)
你只需要知道ServerApi.Hooks里的Hook全部采取这样的语法就好了,this换成别的东西也会出问题
可以看到OnServerChat被划上了红线,这时将鼠标移动到OnServerChat上方,通过智能感知来生成方法​
(当然你也可以写好了方法再Register到ServerChat)​
1600848249160.png
Visual Studio为你自动实现了OnServerChat函数​
1600849595206.png
然后我们将throw new NotImplementedException();语句替换成我们自己的实现​
1600849769015.png
(是的,很简单,但是绝对是合适的栗子)​
下面是一个习惯问题,在Dispose函数中注销Hook
1600849889532.png
Tips:
其实Deregister的语句不写也不会对插件的运行造成影响,而且在TShock停止运行时所有Hook应该都会被自动注销
但是TerrariaPlugin类实现IDisposable接口,所以应当实现自己的Dispose函数​
本教程中的所有示例代码都会在Dispose中注销Hook,这是作为开发者的好习惯之一​
3.生成并部署你的插件
编写完毕所有代码后,通过菜单栏中的"生成"->"生成ServerChatHookTest"来编译你的插件​
1600850182195.png
如图,然后你就可以在插件目录中找到编译好的插件了(图中ServerChatHookTest.dll)​
1600850261949.png
随后你可以将插件复制到TShock的ServerPlugins目录中并运行TShock观察效果​
 
最后编辑:
2020/08/15
3
0
20
https://dl.bbstr.net/pdf/c83d1fd4b4299c89c219471b68ca8578.pdf
联系小太把C#的入土入门教学放到了论坛网盘里,后续教程的C#知识都在这里面了
你无需安装Windows SDK,主要学习的是语法与思想
可以尝试用ConsoleApp(控制台应用程序)项目复现书中的代码
建议:
  1. 完整阅读第一部分理解基本语法
  2. 如果你能掌握第二部分的内容,那么后续的学习将会很轻松
    面向对象的基础是必须掌握的
  3. 如果有能力可以学习第三部分,学习更多方便的可扩展类型
  4. 如果你天赋异禀,你可以尝试学习第四部分关于多线程的初步内容(虽然我们很少会用到)
可恶啊,我学的python丝毫没派上用场