Lua从文件中读取字符串

我正在尝试制作一个系统,用于对游戏服务器的积分进行备份和还原,这样它就可以在没有任何损失的情况下安全地重新启动。

我已经编写了一个脚本来完成这个任务,实际的备份部分运行良好,但还原部分并没有起作用。

如果使用“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倍。 备份.CHK文件的示例内容:

该文件对服务器具有依赖性,每小时写入一次。请勿编辑。

    文件上次修改时间:2013117日
    该文件是服务器的自动备份系统生成的。

--------------------------

    时间:22:51
    我们:453445
    nk:454567
点赞
用户234175
用户234175

以下是可能导致问题的一些想法:

使用 (.-) 懒匹配,它匹配可能的最短模式--这可能包括一个空字符串。通常,您希望尽可能具体地设置模式,同时仍然匹配所需的可能输入。例如,对于 usnk 来说,(%d+) 看起来是一个合适的选择。

for line in source:lines() do 每次读取 _一行_。这意味着循环内不一定会设置所有变量。然而,从 local params 开始到下面的所有内容都使用那些变量,就好像它们已经被设置了一样。在我看来,该代码区块甚至不应该在循环中。

最后,您考虑过将备份文件保存为另一个 lua 文件吗?这样做意味着您可以让 lua 为您做一些繁重的工作,而且无需自己解析它。这也最小化了错误的风险。

2013-07-12 10:10:22