我試圖做一個備份和恢復遊戲服務器點的系統,因此它可以安全地重新啓動而不會丟失任何東西。 我已經做了一個腳本來做到這一點,實際備份部分工作正常,但恢復部分沒有。來自文件的Lua字符串
這是,如果「(讀)備份」用於運行腳本(備份(寫)完美的作品,因爲它是專門做):
if (source and read) then
System.LogAlways("[System] Restoring serverdata from file 'backup.CHK'");
for line in source:lines() do
Backup = {};
Backup.Date = (Date or line:match("File Last Modified: (.-)"));
Backup.Time = (Time or line:match("time: (.-)"));
US = tonumber((US or line:match("us: (.-)")));
NK = tonumber((NK or line:match("nk: (.-)")));
local params = {class = "Player";
position = {x = 1, y = 1, z = -1000};
Respawn = { bRespawn = 0; nTimer =0; bUnique = 1; };
bUsable = 0;
orientation = {0, 90, 135};
name = "BackupEntity"; };
local ent = System.SpawnEntity(params);
g_gameRules.game:SetTeam(1, ent.id);
g_gameRules.game:SetSynchedEntityValue(playerId, 100, (NK/3));
g_gameRules.game:SetTeam(2, ent.id);
g_gameRules.game:SetSynchedEntityValue(playerId, 100, (US/3));
System.RemoveEntity(params);
end
source:close();
return;
end
我不知道我是什麼做錯了,我看過的大多數網站都沒有那麼多幫助。問題是它沒有讀取文件中的任何值。
任何幫助將不勝感激:)。
編輯:
,我們有3分的分數的原因是因爲服務器通過3.如果我們沒有3分才乘所有得分,那麼比分將永遠是3每次恢復時間都要大一些。該backup.CHK文件的 示例內容:
The server is dependent on this file, and writes to it every hour. Please do not edit.
File Last Modified: 11/07/2013
This file was generated by the servers' autobackup system.
--------------------------
time: 22:51
us: 453445
nk: 454567
我假設你的意思是這是'備份(讀取)'的代碼(其中讀取是一個正確設置的變量,是真實的。你能發佈你的備份文件內容的樣本以及你期望的內容嗎?這個代碼看起來不像是我期望的那樣:) –
具體來說,你不需要在分配給它的'Backup'表中創建一個新的'Backup'表對於每一行,然後用缺省值填充,如果在該行沒有找到特定的值,則從文件中讀取'US'和'NK'將被全局修改。 –
請參閱已編輯的問題以獲取文件內容的示例系統需要獲取備份文件的時間和日期,以及美國和NK隊的得分,然後將得分給玩家,我們剛剛在服務器中產生t爲了恢復球隊的分數而進行的。 – cybermonkey