TShock插件:PlayerManager V1.3
這次加上了備份和恢復功能,應該配得上“玩家管理”這個名字了。除此之外還支持修改永久增強類屬性和釣魚任務次數(shù)。為了配合幾個腐竹大佬的“機器人”需求,還新增了兩個RESTAPI接口。文章的前半部分是介紹備份和恢復,后半部分再介紹其它的。
文件結構
先看3張圖:



tshock\PlayerManager\?,插件的工作目錄,相關的文件都會保存在這里。
tshock\PlayerManager\backups\?,自動備份的“.sqlite”文件會保存在這里,見圖2。
tshock\PlayerManager\[年月日-時分-秒]\?,執(zhí)行“/pm ea”指令后,會將全部玩家導出成“.plr”格式的存檔,并放進以日期命名的文件夾里面,見圖3。
圖1紅色部分為plr文件,這次做了個改動,導出單個玩家的plr存檔時,不會額外創(chuàng)建目錄,而是直接導出在插件的工作目錄下,如遇到重名情況,則會先對舊文件進行重命名,在圖1上能找到“hf.plr” 和 “hf_20221202-0105-30.plr”這兩個文件,前者是新導出的,后者是之前導出的。
圖1綠色部分為手動備份的文件,“.sqlite”格式的文件是數(shù)據(jù)庫文件,強制開荒的所有人物數(shù)據(jù)就保存在里面。
圖1藍色部分為自動備份相關,為了保存自動備份狀態(tài),這次引入了配置文件,配置文件內容如下:
Interval,備份間隔,填0表示關閉自動備份,填1表示每隔1(分鐘)備份一次。
KeepFor,保留時長,默認值是240(分鐘),即4個小時,填0表示不刪除自動備份的文件。
ShowSaveMessages,備份提示,填false表示不顯示,填true則會在命令行界面上顯示“[pm]SSC已備份”字樣。
指令匯總

/pm help 3,查看pm指令幫助的第3頁。不需要去背指令,很多指令都提供了“幫助”選項,對指令有疑問,只要在指令后面加上“ help”,執(zhí)行“/pm backup help”、“/pm recover help” 和 “/pm list help”可以查詢 備份/恢復/列表 這3個指令的用法。
/pm b [備注],b是backup的簡寫,直接執(zhí)行“/pm b”而不加備注時,會自動使用當前的日期進行備注,每次手動備份,備份點的序號都會加1,備份點就是數(shù)字,大于0的數(shù)字。

/pm r <玩家名>?<備份點>,r是recover的簡寫,例如要將玩家hf恢復至第1個備份點,則是執(zhí)行“/pm r hf 1”,第2個備份點,則是“/pm r hf 2”。

/pm list backup,列出可用的備份點。這里會對備份點進行排序,最近的排在前面。

/pm?list?<備份點>,列出備份點里的玩家列表。這里你會發(fā)現(xiàn) /pm list?指令有兩種用法,一個是列出文件,一個是列出文件里的玩家,也就是查看 文件列表和玩家列表。

/pm?b status,查看自動備份的狀態(tài)。

/pm?b <on/off>,開啟/關閉 自動備份,默認開啟時會將備份頻率改成2分鐘一次。如果自動備份是開啟狀態(tài),執(zhí)行“/pm b on”,則會提示已開啟過了,關閉指令也是如此。

/pm b interval <分鐘數(shù)>, 設置自動備份間隔,設置成0時會關閉自動備份。
/pm b keepfor <分鐘數(shù)>, 設置備份文件的期限。
/pm reload,?重載配置文件。目前配置項只有3個,其中2個是通過上面的幾個指令來調節(jié)和查看。

/pm?list ab,?列出自動備份的文件。其中ab是autobackup的縮寫,新備份的文件會靠前顯示。

/pm?list <日期.sqlite>,?列出“.sqlite”文件里的玩家列表。

/pm?r <玩家名> <日期.sqlite>,?將玩家恢復至自動備份的數(shù)據(jù)文件。

/pm b?keep?<日期.sqlite>,?保留一個自動備份文件。自動備份的文件會在一定時間后被刪除,可以通過這個指令將某個備份轉成備份點,這樣文件就不會因為過期而被刪除。而且下次還可以通過 “/pm r <玩家名> <備份點序號>”恢復玩家。

/pm list?plr,?列出plr文件,將列出工作目錄下的plr文件,這些plr文件可以做恢復玩家存檔用,注意為了避免沖突,“tshock\PlayerManager\[年月日-時分-秒]\”目錄下的plr文件不會被列出。

/pm r?<玩家名>?<xx.plr>,?恢復至plr文件。從數(shù)據(jù)庫(.sqlite)里恢復時,玩家名必須匹配,就是你沒法把張三恢復成李四,此時你可以把李四導出成plr,“/pm export 李四”,然后輸入 “/pm r 張三 李四.plr”,此時除了名字不同外,張三和李四的外觀、背包和屬性都是一樣的。除了整“真假美猴王”這種爛活外,也是可以導入一些好看的“捏人”以及大佬的裝備搭配。
當玩家在線時,還會導入plr里面的buff。由于SSC(強制開荒)未保存buff數(shù)據(jù),因此離線玩家無法導入buff。


/pm r <玩家名> <目標> [僅背包/僅皮膚/僅buff/僅屬性],??按選項進行恢復。無論是備份點、自動備份 還是 .plr文件,都支持按選項進行恢復,目前額外提供了4個單獨選項,這三個選項除輸入漢字外,還可以用1/2/3/4代替。

至此,插件的一點邏輯就顯現(xiàn),在 備份、恢復和列表這幾個指令里面有這樣的潛規(guī)則:
?1,2,3 是指備份點,文件是保存在pm插件的工作目錄下,文件名的格式為“序號_備注.sqlite”或“序號_日期.sqlite”。
日期.sqlite 是指自動備份的文件,是保存在pm插件工作目錄下的backups目錄下。
xx.plr 是指可用于恢復的plr文件,是保存在pm插件的工作目錄下,“tshock\PlayerManager\[年月日-時分-秒]\”目錄下的plr沒法用于恢復。
當然這幾個指令還有這幾條“潛規(guī)則”:
/pm list?0, 列出當前服務器的玩家列表。這里顯示的id就是數(shù)據(jù)庫里面“Users”表里面的“id”字段。列出玩家列表時,會額外顯示玩家的生命和魔力,能一定程度上啟動識別備份情況的作用。


/pm r <玩家名>?0,?將某個玩家恢復至初始狀態(tài)。想重置某個玩家,就執(zhí)行這個指令。如果只是想恢復到進服時的外觀,就執(zhí)行“/pm r <玩家名> 0 僅皮膚”。

我是分割線啊,你應該看得到



我是分割線啊,你一定看得到
開關 永久增強屬性
/pm enhance <玩家名>?<物品名稱>,開啟/關閉 永久增強屬性,例如那個叫hf的屑,總過不了火把神,又想要生態(tài)火把效果,則可以執(zhí)行 “/pm en hf 火把神徽章”,火把神徽章也可以用5043這個數(shù)字代替。這個指令,第一次執(zhí)行是開啟,如果已經是開啟狀態(tài),再次執(zhí)行就是關閉。

泰拉1.4.4就增加了8種永久增強屬性,還不知道又有啥,怎么獲得,趕緊去wiki上查一查吧。另外世界也有“永久增強”屬性,1.4.4還增加了兩種,由于是世界屬性,本插件就不處理了~

修改釣魚任務次數(shù)
/pm quest <玩家名>?<次數(shù)>,修改某個玩家的釣魚次數(shù),算是和魚店插件聯(lián)動了~~/doge

REST API
如果還你不知道REST API是什么,請去移步閱讀/實踐下這篇文章。

有編程經驗的同學,應該能很快上手,如果看不懂,就請忽略這個功能。
新增的 REST API?接口參見:https://gitee.com/hufang360/TShockPlayerManager/blob/master/RESTAPI.md
接口1:查看指定玩家,/pm/look?token={{token}}&name=hf
接口2:導出單個玩家,并返回文件所在目錄,/pm/export?token={{token}}&name=hf
這兩個接口主要是方便哪些使用“機器人”的服務器,能夠查詢和獲得玩家存檔,里面查詢到的結果基本都是一些數(shù)字,需要機器人請求到這個數(shù)據(jù)后,根據(jù)物品id進行展示查背包結果。到使用導出玩家接口時,開啟base64返回時,要額外將base64字符串轉成.plr存檔。
講得有點含糊,就這樣吧,有能力的腐竹自然看得懂,看不懂的也沒別要折騰這個。

關于開源
寫插件,主要是滿足自己的開服需要,之后才是考慮有更多腐竹可能跟我一樣有這個需要,就發(fā)出來,因為絕大多數(shù)tshock插件都是開源的,那我也開源一下,也希望tshock圈越來越好,越來越繁榮,退一步講回頭我退坑了,其它有編程能力也好拿去修改。
如果你使用插件的大部分代碼,請保留作者信息。插件是開源的,請不要拿去買。
個人不接受插件定制需求,有意思的想法可以私信給我,我覺得有意思,并且以我的能力能寫出來,我就回去寫。如果你覺得插件功能不錯,對你有幫助,也可以去愛發(fā)電給我充電。
開源地址:https://gitee.com/hufang360/TShockPlayerManager
下載地址:https://gitee.com/hufang360/TShockPlayerManager/releases/tag/v1.3
愛發(fā)電:https://afdian.net/a/hufang360