• 欢迎!在发帖前请阅读每个板块置顶的版块须知。论坛 QQ 群:931748551
    鼓励大家多多发帖,这里有问必答。论坛左下角可切换明亮 / 黑暗模式哦。

TShock从零开始的使用教学 - 下

  • 查看 查看: 599
  • 最后更新 最后更新:
  • 上接:TShock从零开始的使用教学 - 上

    Pt.2-4.TShock插件的使用

    没啥用的前言:

    原本以为装插件这种事情应该是个TShock服主都会,
    但是现在发现还是有很多玩家不会的。
    而且我这个帖是要推广出去,必须完善
    所以今天简明地讲解一下安装插件的方法

    首先是简洁的步骤

    1. 下载插件
    2. 塞进文件夹
    3. 启动服务器
    4. 检查是否能正常使用

    Step1.获取插件

    目前棱镜/肝帝熙恩已知的靠谱的插件获取途径

    • 多名国人共同维护的插件库:https://github.com/Controllerdestiny/TShockPlugin
    • 新论坛,群友yuqing的,特点:全是中文介绍():https://trhub.cn/
    • 另一个新论坛,维护者活跃:https://tr.monika.love/
    • 老论坛,死而复生了,bbstr.net
    • tshock国内官方群聊,或者插件创作者群聊,这里只贴Tshock官方群聊:816771079
    • TShock官网,特点:不用看了,已经似了
    • Touhou汉化组,特点:基本都是汉化插件,量大,缺点:很散,没介绍(嗯?th汉化组吗,现在聊相关内容不多)
    • GitHub(不推荐非专业人士使用)(实际内容最多,建议大家多学习怎么使用)
    • discord,看不懂英文的别去了,在github的tshock介绍下能找到
    如果下载需要我教的话,那你可能不是正常人
    如何在github上下载已经在本教程开篇就讲述,不在赘述
    一般来说,你下载的插件至少包含:
    文件的后缀都是 .dll 的插件文件
    一个同名的.pdb文件,也建议安装上,一旦插件发生报错,这个文件可以更好的辅助开发者定位错误问题
    一般还会附带一个关于插件的介绍文件,包含该插件的功能,权限,指令

    注意事项

    • API版本是否适配(一般都是API2.1,适配PC的插件可能不适配PE)
    • 是否有前置插件(有前置插件的一般会直接标出)
    • 绝大多数插件是跨平台支持,只要能跑TS就能跑插件,但是部分有特殊说明的除外(比如曾经的map插件)
    大概就这些注意事项吧......
    那么,我们就以我们国内积极维护的插件库为例
    首先,点开链接:https://github.com/UnrealMultiple/TShockPlugin
    71955b54 3c17 46b3 8899 205c96280eca

    1726039686884

    1726039760407

    细心的同学就发现了,3个/4个文件为一组,插件本体就只有dll,md是介绍文件,可以用md查看器,或者直接拿记事本打开也可以
    只要里面的dll(和非必须的pdb)
    如果可以建议把pdb文件也一起放到插件文件夹,一旦该插件报错,相关的pdb文件可以将报错具体行数显示在后台报错信息中,方便开发者发现问题
    你在其他地方下载的插件也同理,要注意,有些插件(比如github上)是没有提供编译好的release的,这时候需要你自己进行编译,因为涉及到编程,如果遇到,建议需求相关tshock插件开发者寻求帮助(插件作者>其他开发者,优先找该插件开发者)
    好,这一步就愉快地结束了

    Step2.安装插件

    复制/移动dll(和非必须的pdb)文件(如果有前置插件请按要求安装)到TShock的......
    ServerPlugins文件夹,就是下面这个
    52

    回到TShock根目录,启动服务器

    Step3.测试插件

    这一步其实没什么好讲的,就按照作者发布帖的介绍检查插件的功能能不能用就行
    添加的指令可以通过“/help”找到,一般插件添加的指令都会在help的最后一页,
    在没有介绍文档的情况下
    如果你知道插件的指令,但是不知道插件的权限,可以使用/whynot(前提是安装了开服教程最上方要求安装的多功能插件),或者使用/find -command [命令内容] (需要安装插件:EssentialsPlus,上方示例的插件库内有),即可查看该命令权限
    如果又没文档,又不知道指令,可以自己看源码/反编译,或者寻求插件作者或者其他开发者的帮助,实在不行你来找我

    Step4.插件报错的解决

    哪下的去哪解决
    比如:github的issue,直接联系作者,群内发言需求其他开发者的帮助,论坛发帖
    由于棱镜太稳以至于搞不出什么报错(搞出来了也不会修)所以不更,有问题就按上面说的去解决
    现在面向各位服主开始征集插件报错信息~!(错误的,不征集)

    Pt.3-1.TShock的数据存储

    警告:本章开始内容会逐渐硬核,请做好心理准备
    建议(必须)准备的软件

    1. Notepad++(前面的教学都看了的话应该都装了)
    2. SQLiteExpert(需要激活码,但是网上到处都有)或者SQLiteStudio(肝帝熙恩用的这款,免费)
    3. dnSpy 6.1.3或lispy(反编译工具)
    4. Visual Studio 2019(可选)
    --------------------------------------------------正文--------------------------------------------------
    众所周知,TShock的数据存储形式是数据库.......
    什么?你不知道什么是数据库?
    建议百度,看不懂就对了
    通俗地讲(可能会被大佬追杀),就是一个“包”里装着若干个表格的形式
    想一下你Excel的样子就懂了
    通过查找,你应该大致就可以知道TShock的数据都存储在这个文件里啦!
    53

    右键。Notepad++打开试试(你怎么知道我没有,所以我用记事本打开)
    54

    (这你要是能全部看懂那你肯定不是个人)
    数据库文件有特殊的存储形式,自然不能用文本方式打开,
    所以,我们需要专门的数据库软件来打开它

    Step1.下载并安装SQLiteExpert或者SQLiteStudio

    如果你不会装软件,那么这个教学可能不再适合你阅读了
    免费版可以使用30天,但是这软件的激活码网上到处都是
    SQLiteStudio的话是完全免费

    Step2.打开tshock.sqlite

    打开SQLite Expert,或者在打开文件的方式种选中SQLite Expert,
    然后就可以看到tshock.sqlite的图形化形式啦!(我这里是SQLiteStudio)
    (什么?你还不知道tshock.sqlite在哪?赶紧给我去复习前面的知识!)
    55

    (缩略图,点击打开)

    显示的表名对应的内容相关指令
    Bans封禁的玩家列表/ban
    GroupList用户组列表/group
    ItemBans禁用的物品/itemban
    ProjectileBans禁用的弹幕/projban
    Regions领地/region
    RememberedPos开启“自动传送到退出时位置”时保存的玩家退出时坐标config.json内容
    TileBans禁用的物块/tileban
    tsCharacterSSC模式下,玩家的角色信息sscconfig.json内容等
    Users玩家注册的用户和管理员添加的用户/user
    Warps传送点/warp
    以上表格列出了所有TShock原版数据库中的表
    刚刚打开的数据库是一个新数据库,下面展示一个游玩了一段时间后的数据库

    56


    上图为封禁玩家信息表
    包含信息从左至右为:ID(数据库内部用),封禁类型(IP,玩家名也就是acc,玩家UUID),封禁理由,封禁用户,起始日期,结束日期
    57

    这是一个RPG服务器的组列表,揭示了一种RPG服的本质——通过用户组的分割实现等级(现在很多rgp都不用组了)
    包含信息从左至右为:ID(数据库内部用),组名,父组名,权限表,聊天颜色,聊天前缀,聊天后缀
    其他表我就懒得介绍了,自己琢磨
    58

    这是一个领地列表
    包含信息从左至右为:领地ID,左上角坐标(X和Y),宽度和高度,领地名(从代码获取,存储格式特殊),所在地图ID,拥有此领地的用户,
    是否被保护,共享的组,拥有者,Z值(优先级)

    然而,很诡异的一点是......
    还记不记得之前讲配置文件时的“数据库类型”?
    59

    ---是的,当数据库类型为MySQL时,上面的介绍依然适用
    以MySQL数据库类型启动服务器,可以实现很魔法的操作,例如多服同背包等
    这个是比较进阶的东西,建议自己去了解mysql的使用


    诶,这里我们就可以涉及到一个问题了,假如我的玩家一个周目打完了,我要进行重置,该怎么办?

    答案是:改地图不用多说,直接新建就好。
    接下来直接删除tshock.sqlite文件;或者编辑tshock.sqlite文件,有针对性的删除内容
    例如:我想保存所有的组,只删除用户数据,因为我给他们都分配好了权限,
    如果我直接删除tshock.sqlite文件,是不是包括组在内的所有文件全没了
    这时候,我们就可以单独对一个表进行操作,删除其中的一个表,或者擦除他的数据,又或者编辑表中的单独某条数据
    整个界面上,鼠标悬浮在上面可以看到相关按钮是干嘛的
    1720528231046

    右键表可以看到一堆操作,比如擦除就是擦除其中内容,但是不删除该表
    那么如果我们只重置玩家的数据,且玩家需要重新注册,需要改一些什么呢
    删除或擦除“user(玩家注册的用户和管理员添加的用户)
    删除或擦除tsCharacter(SSC模式下,玩家的角色信息)”

    Pt.3-2.TShock启动命令行参数

    TShock作为控制台程序.......
    哦,通俗一点说,就是在黑框里面跑的程序
    咳咳,不瞎扯了,简单讲就是你可以通过cmd来启动TShock,并附加一些神秘的参数
    云里雾里?没关系,看完这一篇教程你就会明白的
    首先,你需要掌握在TShock目录下运行cmd/powershell的方法
    进入你的TShock文件夹,点击“文件”,然后点击“打开Windows Powershell”
    60

    当然,在指定目录下启动cmd/powershell有很多途径,这里只是其中一种
    网上有很多相关的教程,可以自行拓展阅读
    现在你应该可以看到Windows Powershell的蓝色窗口了
    61

    其实上面这些不必要()


    注意这里的路径,应当和你的TerrariaServer.exe在同一目录
    由于棱镜习惯用cmd,所以这里我们键入start cmd,回车
    (肝帝熙恩:不是很懂为什么这么做,我觉得不如:
    62

    然后输入cmd,回车
    63

    64

    嗯,还是这个黑窗口看着舒服
    重点来了下一步,输入sudo rm -rf /*
    住手!这里不是Linux命令行!

    咳咳,开玩笑的,然后输入TShock.Server.exe
    就可以看到TShock在命令行中运行了

    下面这段来自原论坛@GUZZ07的用户,我进行了部分更改
    但是这有什么卵用吗?当然有
    也许你已经注意到了,ts附带了一个.....
    等等?我怎么没看见他附带了一个?但是我们可以自己写一个,先随意创建一个txt文件,把:
    代码:
    @echo off
    cls
    :start
    Terraria.Server.exe -config serverconfig.txt
    @echo.
    @echo Restarting server...
    @echo.
    goto start

    复制进去,保存,然后再把.txt后缀改成.bat就好了

    哦,有小可爱就要问了,linux怎么办?
    代码:
    #!/bin/bash
    while true; do
    ./TShock.Server -lang 7 -port 7777 -world "/home/container/hxx.wld"
    echo
    echo Restarting server...
    echo
    sleep 5
    done
    复制进去,保存,然后再把.txt后缀改成.sh就好了
    65

    这一坨东西我们来看下
    第一行的@echo off作用是隐藏下面一行的"cls"命令,它在windows的cmd里的作用是清空控制台输出
    就是把小黑框里的文字全部擦掉
    :start 则是个标记
    TShock.Server.exe看楼上,中间多了一个符号.)
    后面跟着的"-config serverconfig.txt"就是“命令行参数"
    三行@echo我们忽略掉
    看最后的goto start
    就是跳转到先前的start标机那里往下执行
    先打开它,然后是正常开服流程
    接下来我们输入off,看看会发生什么
    66


    看到最后的restarting server了没
    这就时一个作用了
    67


    又回到了一开始的时候
    接下来
    我们这样改一下那个"启动.bat"
    把Tshock.Server.exe哪一行改成这样:
    68

    把6666改成你的端口, "-world"后面那一长串改成你所使用的地图的所在路径
    改好后打开"启动.bat"
    诶,是不是出现了这种问题:
    69

    其实是编码的原因,你点击另存为:
    70

    71

    选择ANSI,保存且覆盖,就能正常运行了
    72


    就在你刚要输入端口选择地图的时候, 它直接就给你开始加载地图了
    这样就省事多了
    而且如果你输入off
    也会自动重启并选择端口和地图
    这样做还有一个用途, 如果某天你的服务器由于种种原因突然崩服了
    像这样
    73


    服务器就能自动重启,即使你不在
    有的人可能想问了,为什么他们这么做了却没有自动重启
    原因在这里: 关闭windows的报错窗口




    啊shit,上面这个大佬,又趁我去查资料的时候夹带私货(好好好)
    没办法了就接着上面那个夹带私货的沙雕讲吧
    刚刚去翻了源码,可用的命令行参数:
    -lang 语言设置(我只知道-lang 7是中文)
    注意:这只是把TerrariaServer.exe变成了中文,
    并不是把TShock变成了中文
    (?)

    -world <地图路径> 地图设置
    -players|maxplayers <数值>最大玩家设置
    -port <端口号>端口设置
    -forcepriority 进程优先级
    -pass|password <密码>密码设置
    -worldname <名称>世界名设置(会改变地图名称)
    -motd <文本>对应motd.txt(?)
    -banlist <路径>基于原版的封禁玩家列表
    -secure 是原版自带的简易反作弊,可以预防玩家刷出超量的水啊什么的,完全没必要开,因为TShock中有该功能的上位替代,可管理的方面更多且系统更完善
    -autocreate <大小> 自动创建新地图
    -autoshutdown “退出后自动关服”,也就是你在游戏里直接开服时才会用到的
    -noupnp 是否开启UPnP端口映射,虽然实际没有效果
    -experimental 启用高级设置(地图种子与材质包)(为什么会出现在这里)
    -cloudworld <路径>Steam启动时加载云存档
    -config <路径> 加载Terraria配置文件(?)
    -seed <种子> 随机数种子?地图种子?
    以上部分使用恋恋提供的正确答案替换了
    然后我这里有一份官方的文档,和我自己翻译的启动参数文档
    另:本贴下方出现大量复读机

    结帖感言(吐槽环节)

    算算时间,这篇教学已经有了快半年的历史
    ——然而半年的时间里其实我也没能讲多少东西
    很抱歉这样突然结帖(大概很多人觉得我还会更?)(烂尾丢人)
    但是我觉得,这篇帖子已经没什么可以讲的内容了
    明明觉得自己什么都讲了,但是一有人问又发现自己什么都没讲
    但是我认为,真正认真看完了这篇帖子的TShocker们,
    至少应该具备了初步的自学能力与探索能力
    我希望每一个新TShocker,都能具有自己解决问题的能力
    不要总是一遇到点问题就去问专业大佬
    在这半年里我深有体会——

    大佬的卖弱,不是别的目的,是为了逃开追问​

    无论一个专业人士的心态一开始有多好
    反反复复地遇到新人,问一个又一个弱智简单的问题
    有文档不去看,有公告不去看,有源码不去看(好吧,源码不指望大部分人会看)
    就只是伸手,完全不具有独立思考能力
    试问如果是你,你心态也应该爆炸了吧?
    是的,我的心态也已经爆炸了.......
    但是我知道也有一些新人,真正地成长了,
    深谙提问的智慧,明白摸索的意义
    我希望看过这篇帖子的萌新,能有所收获——
    或许不是技术上的,更重要的是心理和精神上的
    有些高科技的东西并没有那么神秘,只要尽力,也是能理解的
    有些很棘手的问题并不是那样难解,多多尝试,终究可以解决

    emmmm....就说这么多吧(感觉很中二的样子???)
    (其实就是我不想更了,毕竟快期末考试了)
    帖子已经经过净化处理

    肝帝熙恩:感谢棱镜为国内TShock社区的卓越贡献,老服主/开发者们总有一天会退休的,新服主/开发者也在不断地涌来,愿未来的玩家,服主,开发者们,都能为这个良好的社区增添一分色彩

    TShock服务器零基础游玩指南[教学帖番外]​

    前言:

    最近去很多大型服务器群走了一圈,发现貌似有很多玩家不太了解TShock服务器的特殊机制
    例如"为什么出生点的树砍不了"、“怎么不能动”“、”怎么不能移动NPC住房“
    实在看不下去了于是打算写这么个帖子扫盲吧
    嘛,如果你是一名服务器玩家,阅读这篇帖子将帮助你更好地在服务器中玩耍
    也算是给我之前烂尾的帖子整个番外(?)
    如果有玩家不会操作,你可以把这篇帖子的链接甩他脸上

    注意:

    本贴主要面向玩家与服务器管理员,TShock服主可以学习我的原教学贴

    Pt1-1.服务器强制开荒详解

    一般而言一进入服务器后角色立即石化的服务器是开启了SSC模式的
    当然石化也可能是因为你的背包里有超数量上限的物品,这里不予讨论

    1.什么是SSC

    SSC,俗称强制开荒,是TShock提供的有效反作弊手段之一,由服务端控制开启
    开启SSC模式时,玩家加入服务器会受到石化,无法游戏,需要玩家进行”注册“操作
    注意:即使玩家使用作弊手段取消了石化debuff,也无法正常进行游戏,所以管理员无需担心

    2.注册操作

    进入服务器后不会注册可是不少服主头疼的问题,纵然因此产生了
    机器人注册、Chameleon自动注册、AutoRegister自动注册依然会有玩家出现无法正常游戏的现象
    因此棱镜在这里将会尽可能详细地讲解整个注册的流程

    一、指令注册

    ——TShock原生的注册方式

    Step1.准备一个新的人物存档

    1. 角色名最好是字母、数字、下划线
      因为在某些开启SQL互联或机器人注册的服务器里中文用户名总是会导致奇怪的问题
    2. 为什么要创建一个新的人物存档?
      虽然SSC理论上来说完全在服务端,不会影响到本地存档
      但总是有可能服务器存档(后称SSC存档)覆盖本地存档导致存档丢失
      当然,如果你是我这种不在乎存档的人拿毕业号进也无所谓

    Step2.加入服务器并输入指令

    1./register <密码>
    其中<>不需要打,斜杠必须打,register和你的密码之间必须有空格
    密码长度需要在四位数以上(服务器配置的默认要求

    正确示范:
    /register 1023433 √---符合规范的指令
    错误示范:
    register<123> × ---没有空格,没有斜杠,带括号,密码长度少于4位
    此操作的含义:注册一个帐户,此帐户的名称就是你的人物名,全服唯一
    你的所有SSC角色信息都在这个帐户上,通过密码(或UUID)登陆

    2./login <密码>
    要求与上面相同,密码是你注册的密码
    此操作的含义:登入帐户
    此部分说明在我的TShock使用教学中也有提及

    二、基于Chameleon的自动注册

    ——基于插件与服务器密码数据包的自动注册
    与原生注册方式类似,但Chameleon插件将注册的步骤放到了输入服务器密码的位置
    Step1.按第一种注册方式中的步骤一准备存档
    Step2.直接加入服务器

    这时会要求输入服务器密码,请注意,在插件的支持下,输入密码的操作
    已经完全转换为注册操作,用户名即加入游戏时的玩家用户名,
    效果等价于使用register指令,register的密码就是你在密码框中输入的密码
    同样地,它也必须满足上一种方法第二步中的注册规范(密码位数等)

    判断标准:服务器的公告(QQ群等)中提示“服务器密码随意输入”之类的信息,就有可能是这种注册方式

  • 正在加载……