-1

我需要使用字符串值作为表格,以便在玩家重新连接到游戏服务器时恢复玩家的点数。这个字符串值是他们的配置文件 ID,它永远不会改变,我需要将数据放入字符串值(杀戮、死亡、爆头)中,以便有效地恢复这些点。我在互联网上快速浏览了一下,但我没有找到太多,因为我不知道这个具体的东西实际上叫什么。为了使它更容易,这是我到目前为止所拥有的:

if (not Omega.Playertable) then
    Omega.Playertable = {}; 
    System.LogAlways("Set static record table on first connect");
end
local ID = g_gameRules.game:GetProfileId(player.id);
if (not Omega.Playertable.ID) then
    table.insert(Omega.Playertable, ID);
    Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Kills=0;
    Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Deaths=0;
    Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Headshots=0;
else
    local Kills=Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Kills;
    local Deaths=Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Deaths;
    local Headshots=Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Headshots;
    g_gameRules.game:SetSynchedEntityValue(playerId, 101, Kills);
    g_gameRules.game:SetSynchedEntityValue(playerId, 100, Deaths);
    g_gameRules.game:SetSynchedEntityValue(playerId, 102, Headshots);
end

如您所见,我尝试将他们的 ID 添加到表中并基于此添加信息。我无法让系统读取我之前设置的“ID”值,所以我尝试添加获取 ID 的代码,但它不起作用。每个玩家的 ID 都是唯一的,所以我不能为此使用简单的数字系统。

有人可以向我指出我在这里做错了什么吗?如果我设法解决问题,我将在这里回答我自己的问题,以便对其他用户有所帮助。

4

2 回答 2

1

在我看来,您使用了错误的表索引语法。

通过 Lua 中的变量值索引表是通过[]语法完成的。

此外,在 LuaFoo.bar中,两种格式的语法糖Foo["bar"]是可以互换的,但是.变体对可以使用的字符有限制。例如Foo["\n.*#%!"]是一个有效的表索引,但你当然不能这样写:Foo.\n.*#%!

table.insert(t, v)插入到表的数组部分v的末尾。这意味着如果你这样做

foo = {};
foo.X = "Some value";
table.insert(foo, "X");

这就是你得到的

{
  X   = "Some value"
  [1] = "X"
}

这意味着,如果我将其应用于您提供给我们的代码,您可能会想到:

if (not Omega.Playertable) then
    Omega.Playertable = {}; 
    System.LogAlways("Set static record table on first connect");
end
local ID = g_gameRules.game:GetProfileId(player.id);
if (not Omega.Playertable[ID]) then
    Omega.Playertable[ID] = {};
    Omega.Playertable[ID].Kills=0;
    Omega.Playertable[ID].Deaths=0;
    Omega.Playertable[ID].Headshots=0;
else
    local Kills = Omega.Playertable[ID].Kills;
    local Deaths = Omega.Playertable[ID].Deaths;
    local Headshots = Omega.Playertable[ID].Headshots;
    g_gameRules.game:SetSynchedEntityValue(playerId, 101, Kills);
    g_gameRules.game:SetSynchedEntityValue(playerId, 100, Deaths);
    g_gameRules.game:SetSynchedEntityValue(playerId, 102, Headshots);
end
于 2013-06-09T16:46:34.560 回答
1

尝试这个:

s="35638846.12.34.45"
id,kills,deaths,headshots=s:match("(.-)%.(.-)%.(.-)%.(.-)$")
print(id,kills,deaths,headshots)

但请注意,这些值是字符串。如果您将它们用作数字,请使用tonumber来转换它们。

于 2013-06-06T22:06:50.183 回答