已过期 【插件编写】TShock服务器插件编写入门

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
咕咕咕咕咕(今天才码了几行字啊!)
讲代码太难了,有能力的还是自学吧!(鸽子声)
 

GGBingo

Lv3
LV
0
 
IP属地
山西省
2020/03/18
13
2
  • · 发布于未知
很好的一份弃坑,不是吗(斜眼笑)
 

iheart

Lv3
LV
0
 
IP属地
河南省
2020/07/27
6
7
勋章
2
  • · 发布于未知
[爱心][爱心][爱心]
 

azarticle

Lv2
LV
0
 
IP属地
未知
2020/08/09
2
0
  • · 发布于未知
请问大佬,可以用别的语言编写tr插件吗
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
VB(或者别的基于.Net的语言...)可能可以吧,但是目前圈内没有人尝试过
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
Pt2.基础插件编写
由于C#语言本身内容过于庞杂,所以将改为在教程中逐步渗透的方式进行教学
教程中的概念均可在本贴的C#教程电子书中找到说明
本章节包含以下内容:
  • 使用服务器API提供的事件
  • 使用TShockAPI提供的函数创建规范的指令
  • TShockAPI与TSAPI中实用函数的使用
正在更新,敬请期待
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
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观察效果​
 
最后编辑:

星辰晨星

Lv2
LV
0
 
IP属地
未知
2020/08/15
3
1
  • · 发布于未知
https://dl.bbstr.net/pdf/c83d1fd4b4299c89c219471b68ca8578.pdf
联系小太把C#的入土入门教学放到了论坛网盘里,后续教程的C#知识都在这里面了
你无需安装Windows SDK,主要学习的是语法与思想
可以尝试用ConsoleApp(控制台应用程序)项目复现书中的代码
建议:
  1. 完整阅读第一部分理解基本语法
  2. 如果你能掌握第二部分的内容,那么后续的学习将会很轻松
    面向对象的基础是必须掌握的
  3. 如果有能力可以学习第三部分,学习更多方便的可扩展类型
  4. 如果你天赋异禀,你可以尝试学习第四部分关于多线程的初步内容(虽然我们很少会用到)
可恶啊,我学的python丝毫没派上用场
 

XiaoHan

Lv2
LV
0
 
IP属地
未知
2020/08/27
4
0
  • · 发布于未知
 
最后编辑:

Megghy

Lv5
管理成员
版主
创意家
LV
0
 
IP属地
江苏省
2020/03/20
352
151
勋章
5
  • · 发布于未知
来点催更
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
别催了别催了,在更(咕)了
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
今天或许会少见地更新一发...
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
更了个寂寞.jpg
打着点滴还在更新教程的棱镜是鉴(×)
咕咕咕了一个月却只更了不到半层楼的棱镜是屑(√√√)
 

Megghy

Lv5
管理成员
版主
创意家
LV
0
 
IP属地
江苏省
2020/03/20
352
151
勋章
5
  • · 发布于未知
催更.jpg
 

Cool_Loong

Lv2
LV
0
 
IP属地
未知
2020/10/31
5
0
  • · 发布于未知
催更.jpg
 

NNOpe

Lv2
LV
0
 
IP属地
未知
2020/11/06
2
0
  • · 发布于未知
催更~
 

TheLastPrism

Lv6
管理成员
版主
创意家
LV
0
 
IP属地
湖北省
2019/10/25
1,027
341
勋章
5
  • · 发布于未知
禁止催更,爬!(恼)
 

Megghy

Lv5
管理成员
版主
创意家
LV
0
 
IP属地
江苏省
2020/03/20
352
151
勋章
5
  • · 发布于未知
催不动更了 [向导_困惑] 我也另外开了个教程坑, 位于我的blog, 目前进度刚跟上镜子这边(2021/3/25), 如果有hxd想要继续折腾插件开发可以在那边康康, 有什么问题也可以找我解答
 

* 这是一则由 Google AdSense 自动推荐的广告,与本站无关,不对其真实性与可靠性负责

顶部