gpt4 book ai didi

string - 文件中的 Lua 字符串

转载 作者:行者123 更新时间:2023-12-02 07:03:50 24 4
gpt4 key购买 nike

我正在尝试制作一个备份和恢复游戏服务器点的系统,以便它可以安全地重新启动而不会丢失任何东西。我制作了一个脚本来执行此操作,实际的备份部分工作正常,但恢复部分则不然。

这是使用“备份(读取)”时运行的脚本(备份(写入)按照设计的目的完美工作):

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

最佳答案

关于可能导致问题的原因的一些想法:

使用(.-)惰性匹配来匹配可能的最短模式——这可以包括空字符串。通常,您希望使模式尽可能具体,同时仍然匹配所需的可能输入。例如。看起来 (%d+) 适合 us ,而 nk 是合适的选择。

for line in source:lines() do 一次读取一行 行。这必然意味着并非所有变量都将在循环内设置。然而,从 local params 开始的所有内容都像它们一样使用这些变量。在我看来,这部分代码甚至不应该在循环中。

最后,您是否考虑过将备份文件另存为另一个 lua 文件?这样做意味着您可以让 lua 为您完成繁重的工作,而不必费心自己解析它。这也最大限度地降低了出错的风险。

关于string - 文件中的 Lua 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com