Terraria 的默认设置允许玩家在服务器之间自由传输角色,包括从单人游戏或其他多人服务器带入的角色。为了解决这一安全问题,Terraria 引入了服务器端角色的概念,通过与兼容的服务器替代品合作实现。基本游戏支持服务器端角色,但不实现存储后端或同步系统。在启用时,游戏客户端不再将数据持久保存到磁盘,而是将许多方面(但不是全部)的本地数据委托给服务器。
在 TShock 中启用服务器端角色(SSC)后,它接管了玩家的库存管理。在此模式下,玩家获得由服务器所有者描述的起始库存,然后只在连接到服务器时保留该库存。当他们断开连接时,他们的原始角色数据仍然会在本地保存,确保他们不会丢失本地数据。
对于开发人员来说,TShock 的 SSC 实现应被视为参考实现。该系统可以实现比 TShock 所做的更多功能。
限制
在TShock 5(Terraria 1.4.4.x)中,负载配置具有一些注意事项。如果不小心处理,可能会导致数据丢失或损坏。如果玩家被de-buff、被控制、或已死亡,玩家的客户端将忽略装备配置同步数据包。TShock的Disable()
方法、webbing和其他de-buffs可能导致服务器和客户端之间的不同步。此外,如果玩家使用物品或以其他方式受到de-buff,他们也可能发生不同步。因此,我们强烈建议告诉玩家在更改装备配置时要小心,不要使用物品,以免发生数据丢失或损坏。
如果管理员使用Dimensions
或其他将多个服务器连接在一起的代理工具,在玩家登录并同步之前,这些代理在服务器切换窗口期间禁用或de-buff玩家,可能会遇到此问题
设置 SSC
要设置 SSC,只需在 tshock 配置文件夹中的 sscconfig.json
中将 Enabled
更改为 true
。
以下是一个示例配置文件:
{
"Settings": {
"Enabled": true,
"ServerSideCharacterSave": 5,
"LogonDiscardThreshold": 250,
"StartingHealth": 100,
"StartingMana": 20,
"StartingInventory": [
{
"netID": -15,
"prefix": 0,
"stack": 1
},
{
"netID": -13,
"prefix": 0,
"stack": 1
},
{
"netID": -16,
"prefix": 0,
"stack": 1
}
],
"WarnPlayersAboutBypassPermission": true
}
}
在此示例配置中,StartingInventory 清单描述了玩家加入时拥有的起始物品。在此示例中,它是青铜装备。您可以通过添加其他条目来自定义此清单。例如,更新后的配置文件在此块之后添加了 Zenith 作为新玩家的起始物品。
{
"Settings": {
"Enabled": true,
"ServerSideCharacterSave": 5,
"LogonDiscardThreshold": 250,
"StartingHealth": 100,
"StartingMana": 20,
"StartingInventory": [
{
"netID": -15,
"prefix": 0,
"stack": 1
},
{
"netID": -13,
"prefix": 0,
"stack": 1
},
{
"netID": -16,
"prefix": 0,
"stack": 1
},
{
"netID": 4956,
"prefix": 0,
"stack": 1
}
],
"WarnPlayersAboutBypassPermission": true
}
}
作为管理员玩:
如果您以管理员身份玩,请确保您属于 owner
组或类似的组。我们真的不建议以超级管理员身份玩。超级管理员和具有 tshock.ignore.ssc
权限的其他用户将不使用服务器端角色。这意味着他们将能够从其个人角色文件中带入物品,并且数据根本不会保存到服务器。
如果 TShock 玩家具有 tshock.ignore.ssc
,并且在配置文件中设置了 WarnPlayersAboutBypassPermission
为 true
,则在服务器控制台中,您将看到有关玩家未正确保存的警告。
上传数据
有时,您希望从加入服务器的玩家那里导入玩家数据。例如,如果您信任您的朋友不会带入非法物品,您可以将其数据导入系统。这可以通过使用 /uploadssc
命令来完成。
/overridessc
命令可用于从特定玩家上传SSC数据。这个命令的区别在于,/uploadssc
会上传他们加入时的数据,而/overridessc
只会将他们当前的状态保存到数据库中。