开发教程 【缓更贴】TShock从零开始的使用教学

《夏日大作战》十周年同人绘征集活动

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
引语:
当你看到别人家的服务器,强制开荒,自带反作弊,甚至RPG系统时,你是否困扰与熊孩子的偷袭?
加入TShock服主的行列吧,无论是与一群好基友一起玩耍,还是对外开大型服务器,TShock都是值得掌握的技术
TShock,你,值得拥有!

前言:
· 鉴于目前TR圈内大多数来自贴吧的TShock教学都已经过气
而且目前网上存在的各类教学质量良莠不齐
所以棱镜打算抽出点时间来制作一个从零开始的TShock使用教学
· 本帖主要以技术普及为主,语言可能会比较沙雕通俗,如果有错误请dalao及时指出awa



需要准备些什么?
· 一台可以联网的电脑
· 建议使用Win10系统
· 安装好的TShock(没有的一会儿会补链接)
· 有一定英语&编程基础的玩家在学习时会更加轻松
· 一定得有的基础:计算机文件目录的基本认识、文件类型的基础了解(这个不懂的请赶紧去补补)

注意事项:
· 本教学使用的部分教学资源将来自tshock.co
所以可能会大量出现英语内容(这也是为什么要强调有英语基础的会学得更轻松的原因)
· 本教学使用的TShock版本为v4.3.24.0,原因是这个版本有一个完美汉化, 方便玩家理解(汉化有可能导致一些别的结果,例如...乱码?)

※本教学主要以教授TShock的使用为主,想要学习开服技术的可以在网上搜索其他教学
本教学会走PC/PE通用路线,PE指令会用特殊字体加以说明
但是由于PE没有汉化,而且英文版目前处于不成熟阶段,所以短期内不会加入PE内容

Pt.0-1:解压安装说明
· 下载本贴附件中的汉化版TShock,直接解压至自己知道的目录即可
注:请务必保留安装包下的最外层目录,防止引起混乱
现在你安装完毕的TShock应该是这个样纸...
1572660256597.png
呐,里面就是TShock的主体部分了
tshock内部主要包含以下几个文件:
--TerrariaServer.exe 这是服务器程序的主体,TShock从这里运行
--OTAPI.dll 这为服务器提供了部分Terraria环境
专业解释:(来自Github)
The Open Terraria API, known as OTAPI, is a unique low-level API for Terraria that exposes events and provides performance optimisations while supporting both client and server executables on all official platforms.
You can use this modification as a NuGet package to power your own project with minimal update downtime*, or you can build plugins for NyxStudios' Orion which uses OTAPI under the hood
机翻:
Open Terraria API(称为OTAPI)是Terraria的唯一低级API,它公开事件并提供性能优化,同时支持所有正式平台上的客户端和服务器可执行文件。
您可以将此修改作为NuGet软件包使用,以最小的更新停机时间为您自己的项目提供动力*,也可以为NyxStudios的Orion构建插件,该插件在后台使用OTAPI

这大概是以后进行TShock插件开发必备的引用文件了

--GeoIP.dat 这个我也不知道是干啥用的
--sqlite3.dll 这个是用于操作sqlite数据库文件用的东西
--Newtonsoft.Json.dll 这个是用来读取json的东西
--ServerPlugins文件夹 这是安装服务器扩展用的文件夹
 

附件

最后编辑:
  • 投币
反馈: 小太

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
Pt.1-1.初次运行你的服务器
前置知识预习:
指令:在TShock中表现为由指令前缀符号(如:/ .)引导的具有特殊效果的语句
例如/help会返回tshock的指令列表
一条指令的基本特征:
有一个名称(例如help),需要一个特定权限(有些也是不需要的)(后面会讲到),能够产生特定效果

超级管理员:TShock系统中象征最高权限的用户组(也是后面会讲到的内容)

用户:指TShock系统中为玩家创建的信息体
例如:玩家名称,密码,UUID等
说白了就是玩家在你服务器里的账号

组:指TShock系统中的用户组,一个用户组内有多个用户,且具有该组规定的特殊信息
打个通俗的比方,你学校里是不是有班干部班委之类的?
普通学生就像tshock里的default(默认)用户组,啥权限都没有,但是可以在班上生活
班委按照地位(课代表、副班长、班长)就像tshock里的admin(管理员)用户组,具有一定对其他学生的管理权力
老师很明显就是superadmin(超级管理员),掌握所有人的生杀大权

启动服务器:
现在,打开你的TShock文件夹,双击运行Terraria.exe
什么?你看不到.exe这个后缀?
请单击文件夹上方的查看,勾选“文件扩展名”(仅限Win10)
演示.gif
Win10以下版本请自行寻找教学,棱镜懒得跟你讲了
虽然要善用搜索引擎,但是这里棱镜还是手动帮你查到了教学
Win7开启文件后缀名显示
Win10的看上面Gif
运行之后你可以看到一个黑色窗口,这个窗口我们称之为TShock的服务器后台
看到下面的界面就说明能正常运行了(不能正常运行也不能怪我对吧)
@6`CV{`MS_3{XWSYIN6~$YP.png
看,这就是世界选择界面了,你可以通过输入序号来选择世界
输入“n”(话说这个汉化真是害人)可以创建新世界,不过这个建议在Terraria游戏内进行
输入“d”可以删除世界
现在不妨输入1选择第一个世界,然后出现这个
1572664963508.png
很通俗易懂吧,就是服务器最多允许多少名玩家加入,回车可以选择默认值8人
那么这里直接回车吧
1572664979249.png
端口选择,就是你的服务器侦听的端口
这个玩意影响到了你输入IP后的端口应该填什么
怎么说呢...这个不太好解释...直接回车就完了吧...
1572664996445.png
这个,一般都是默认回车就好了
1572665011450.png
表示进入你服务器需要的密码,具有一定防熊功能,一般在与自己的好基友玩耍时使用
很明显,到目前为止,你应该可以发现在启动服务器并选择世界之后可以一路回车按到底对吧...
好了,你现在应该会看见窗口里出现滚动文字
文字滚完了就说明成功开启服务器了
现在服务器运行成功的样子应该是这样:
1572665070610.png
注意:现在不要关闭窗口,请记住黄字中"/auth"后面的数字,最小化窗口
Terraria,启动!
(话说这个图片张数限制好讨厌啊...分帖发吧)
 
最后编辑:

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
[续上]
启动之后选择多人游戏,通过IP加入,选择游戏角色后来到这个界面
1572665236701.png
(下面打马赛克的是我去别的服务器的IP地址,就不暴露了好吧)
此处重点!
现在,在输入框内输入127.0.0.1,端口写7777,加入服务器
127.0.0.1是指向自己计算机的IP地址,所以在各种游戏平台上发现他人发127.0.0.1这种ip地址肯定都是错误的
好了,现在你成功进入了自己开启的服务器
1572665414060.png
呐,可以看到左下角的欢迎文本,后面我们还会学习如何修改这个欢迎文本‘
现在还记得之前的auth数字吗?
按下回车打开聊天框,输入/auth [你的auth码]
注意:每个服务器的auth码都是不同的,这里仅做示例
1572665548813.png
输入完了就是见证奇迹的时刻了1572665599760.png
(输入完了之后就会看到你死了)(wdnmd史莱姆)

可以看到黄字的说明信息
现在,你将接触到tshock的第一个重要指令
/user add <用户名> <密码> <用户组>
用途是将一个用户加入到指定的用户组
例如/user add 棱镜 1234567 superadmin
就可以获取永久超级管理员账户了
然后拥有了账户肯定要登录对吧?
现在你将接触到tshock的第二个重要指令
/login [用户名] <密码> -----通过指定的用户名登录
例如此处我们输入
/login 棱镜 1234567
1572665874098.png
1572665885566.png
出现了成功的绿色文字,说明你已经完成了TShock使用的第一步:获取永久超级管理员权限
再次输入/auth后,auth指令就失效了,同时弹出说明:
1572666027995.png
此时打开TShock目录下的TShock文件夹,可以看到多了很多东西
1572666081009.png
auth.lck的出现就说明auth被禁用了
获取了超级管理员之后可以做什么呢?
敬请期待下次更新
 
最后编辑:

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
等..等等...有个重要的东西要补充上...
现在你回到后台界面
1572666219486.png
在这里输入off来保存地图并关服,直接点击X会导致地图数据丢失!
1572666267106.png
同样出现保存数据的文字,文字滚动完毕后黑色窗口会自动关闭
(如果没有关闭请在出现“服务器已关闭”字样后自行点击X)
 

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
指令说明规范:
1.指令的标准形式:
"指令前缀符号"指令 <参数1/子命令> <参数2> <参数3> ……
例如:
/user add 棱镜 1234567 superadmin
"/" 就是指令前缀符号
user 就是指令
add可以称为“user指令的第一参数”或“user指令的一个子命令”
棱镜、1234567、superadmin都是参数
参数就是指令后第一个空格起的所有以空格为分割符号的一组数据
参数与参数(包括子命令)、参数与指令之间都要有空格分割,否则会视为一个参数
参数写在不同的位置会有不同的含义,例如“棱镜”是用户名,1234567是密码
如果写反了就会导致1234567是用户名,“棱镜”是密码
这一点是非常重要的
2.指令介绍的标准形式
参数前后的括号表示了该参数是否可省略,且括号都无需输入
例如:
/user add <账户名> <密码> <用户组>
这样的括号表示参数不可省略
一般来说,省略参数会使tshock用默认值来代替参数
也可能是同一个指令的不同含义,这个后面会介绍到
例如这样的指令
/login [用户名] <密码>
其中打方括号的部分是可省略的,而省略用户名参数表示用当前玩家的名称
作为密码登录,如果以当前玩家名为用户名的账号不存在,那么会导致错误
并向指令使用者发出提示
3.获取指令的默认帮助
一般来讲,指令都可以用/help <指令名称>来获取帮助
或者将“help”(不带引号)用作某指令的第一参数
这样会向指令使用者发送默认的(或作者填写的)指令帮助消息

此说明留作备忘,以后指令讲解也会按照这个来
 

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
Pt.1-2.【实用】强制开荒的基本实现
当你看着别人家的服务器进服石化,必须强行进行登录之后获取新的背包,你是否垂涎不已?
无论你是否垂涎不已,反正你现在就该看这个了

SSC,全拼Server Side Character,意为服务端角色存档模式
在此模式下,玩家的所有数据都将保存在服务端是tshock.sqlite中
SSC的第一个特征就是强制开荒,所谓强制开荒也只是SSC的一部分:初始化默认背包
SSC最强大的地方在于允许TShock服务端直接对玩家存档进行编辑,
这种编辑不仅包括背包数据,甚至包括位置、杀怪数、生命值等
一般来说,一个正常的开荒/生存服务器都会开启SSC模式
Step1.认识配置文件
现在,打开你的TShock目录,不要急着运行服务器,现在进入"tshock"文件夹,找到一个叫sscconfig.json的文件
这个就是强制开荒的基本配置文件了
通过对此文件的编辑,你可以实现几乎所有强制开荒的功能。
好了,现在你可以打开这个文件了
啥?不会打开Json?请自行上网寻找:Notepad++,这是一个很轻量级的代码编辑器,以后会经常用到
安装完成后右键文件你应该可以看到“Edit With Notepad++”选项了,点这个,你就会看到文件内容界面了
1572712912986.png
(我觉得除了登入后丢物间隔之外都挺好理解的)
如图,
启用状态是一个true/false值,当值为false,SSC禁用,当值为true,SSC启用
云存档保存间隔是服务端存档数据的保存间隔时间,以分钟为单位
初始生命值/魔法值:这个还需要我给你解释?只要不要填奇怪的数据就好了
初始物品这一项比较特别,可以看到一个与众不同的中括号对吧
这代表初始物品是“一组”物品,每个大括号内容又自成一个“物品”
之前在犹豫要不要写这个...想想还是写了吧...
有一定面向对象编程基础的可能会很容易理解这个东西,反正我讲一讲就完了对吧
一般来讲,大括号包裹的内容是一个完整的“对象”,什么是对象呢?
打个比方,你和我都是人,我们又拥有与众不同的特征与属性
比如我长得比你帅
比如我比你菜
对吧?那么在这个Json中你可以看到两种大括号
大括号中左侧由引号包裹的文本可以看做该对象的某个属性的特征
冒号左侧是属性,右侧为此属性的值

那么在这个json中有几种对象呢?
我们不妨认为拥有同种“属性列表”的对象是同一种对象,那么这里有几种对象?
没错,两种,一个是最外层的"配置文件"对象,这个对象在TShock程序中提供了SSC的基础信息
另一个是在中括号中的对象,等等,那个中括号是什么鬼?
中括号可以表示为“一组物品”,这个物品可以是值,可以是对象之类的任何东西
学过编程的很快会联想到数组对吧?
这个中括号不如看做一列房子,每当有“对象”要住进来就给他留个位置
然后下面的每个物品的中括号代表的就是“物品”对象
中间的逗号就是房间与房间之间的空地,必须得有!
但是最后一个房子肯定就不需要隔断了对吧?

好了,说了这么多,总结一下
1572714137534.png
Step2.配置文件的编辑
编辑绝对注意事项,重要到了用四种突出方式来说明:不要删除任何英文逗号/引号/括号!!!!
不要到时候出错了又来让我背锅,我会喷人的
(另外:打稿子的时候要插入链接,然后莫名其妙自己追踪过去了,然后我码了2个小时一千多字的稿子丢了)
(这个故事告诉我们在这种地方发帖一定要随时保存...
对了,棱镜自制的SSC配置编辑工具更新了
支持了本帖中提到的汉化版,详见本帖
解压编辑器,打开SSCMaker.exe,你可以看到粗陋的编辑界面
1572784660997.png
(真是简单而不失大气优雅的界面)
除了“登入后丢物间隔”,其他的输入框都与配置文件中的一一对应
那个东西我自己都不知道干啥用的
反正默认值就完了

一般来说,如果你不是制作留备以后使用,就勾选“是否启用”框
云存档保存间隔说白了就是备份存档间隔,以分钟为单位,必须为整数
初始生命、魔法不需要讲吧...只要不是那种1啊123之类的奇怪数值就行了
下面的添加物品界面很费了我一些心思
物品ID支持中文自动补齐
什么意思呢?大概效果就是这样
演示.gif
(完美解决了懒癌患者们不愿意查ID的问题)
(但是你连官方中文名也不记就不怪我了)
前缀ID也支持中文
注意,即使没有前缀也要手动选择为“无”

数量超过上限时,玩家在游戏内显示的物品也是超上限的
但是普通玩家拥有超过上限的物品会被TShock检测到并自动石化
所以还是不要太奇怪为好
选择完成后点击“将当前物品添加到背包”就会把这个物品放到右边的列表里了
但是点击按钮不会自动删除原有数据(也许下次更新会改?)
注意:现在已经更新了此功能,可以在上面的链接里找到1.0.0.2版本进行下载

所以记得自行清空
另外,你可以在右边的列表框里用鼠标拖动/Ctrl键/Shift键选定多个物品,按下右键即可删除
演示2.gif
输入完毕后,勾选“按照中文输出”,点击“生成json文件”即可
此时会出现提示框
演示3.gif
那么如何使用这个文件呢
然后回到SSCMaker.exe目录下的Saves文件夹,可以看到里面的文件了对吧?
你只需要把它重命名为sscconfig.json
然后复制到TShock安装目录的"tshock"文件夹下,覆盖原有sscconfig
copy.gif
Step3.运行服务器
现在,回到你的TShock目录,按照Pt.1-1方法运行服务器即可
复习:加入自己开的服务器应该怎么做?
多人游戏 -> 通过IP加入 -> 选择人物 -> IP输入127.0.0.1,端口和密码是你在服务端里设置好的
如果你发现以普通用户身份加入服务器时石化了,那么说明SSC成功开启了
1573055892132.png
(像个鲨雕,对吧)
(难道不像吗?)

丰富的(BB 代码):
要点来了:
注册指令:
/register <密码> ------允许一名普通玩家用<密码>中的密码注册用户
登录指令:
/login [用户名] [密码] --------以指定的密码与用户名登录,你登录超级管理员账号就是用的这个
注意,这个指令中的用户名和密码都是可以缺省的
如果缺省用户名,表示用玩家角色的名字当做用户名,再以指定密码登录
如果两个都缺省,就会视为“以UUID登录”,UUID是泰拉瑞亚每一个玩家角色随机的、唯一的全局识别代码
一般来讲,在不修改配置的情况下:
· 注册指令不能指定用户名
· 自动登录在没有更换玩家存档的情况下允许进服自动登录
· register创建的其实是user,后面会讲到
· login指令可以登录其他玩家或者超管添加的账户,只要你知道这些账户的密码...
演示5.gif
打指令要点:打字要快,姿势要帅
打字要准,回车要狠
什么?你到现在不知道在哪里打指令???
你玩过多人模式吗?没有??
好吧当我没问
进入服务器之后按下回车键就是了
1573055697445.png
登录完了之后就会看到自己的背包变成sscconfig里设置的背包了
确认完毕后,记得输入指令保存关服!

ok,截止至2019年11月7日,SSC基础设置基本讲解完毕
终于把之前丢的稿子补齐了,不容易啊

下期预告:用户、组与权限
是一些比较理论化不好实践
但是用好了会非常强大的东西


你还在等啥?等我给你留个彩蛋?
赶紧整理笔记完了复习实践啊!
没用的课后答疑QQ:718074968
(很多圈内dalao可能搜索之后对我说:“原来是你啊”)
(所以可以看出来我有多低调了)
 
最后编辑:

TheLastPrism

Lv2
冒险家
2019/10/25
52
3
40
武汉
我只是个潜水自学N久至今才搞懂一点点东西然后才知道有各种论坛然后才开始发帖的初中学生
(不断句)
 

1051991519

Lv2
冒险家
2019/10/30
3
0
20
然后添加权限的话别添加指令了,权限一般都是tshock.开头的,这个记住就行,命令和权限网上都有