ゲームサーバーのポイントをバックアップおよび復元するシステムを作成しようとしています。これにより、何も失うことなく安全に再起動できます。これを行うためのスクリプトを作成しましたが、実際のバックアップ部分は正常に機能しますが、復元部分は機能しません。
これは、'Backup(read)' が使用された場合に実行されるスクリプトです (Backup(write) は設計どおりに完全に機能します)。
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