如何在表格中使用字符串?

时间:2013-06-06 21:36:28

标签: string lua lua-table

我需要使用字符串值作为表,以便在重新连接到游戏服务器时将点恢复到播放器。 这个字符串值是他们的配置文件ID,它永远不会改变,我需要将数据放在字符串值(Kills,deaths,head shot)中,以便有效地恢复这些点。我已经快速浏览了互联网,但我找不到太多,因为我不知道具体的东西是什么。 为了方便起见,这是我到目前为止所做的:

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对每个玩家都是唯一的,所以我不能使用简单的数字系统。

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

2 个答案:

答案 0 :(得分:1)

试试这个:

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

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

答案 1 :(得分:1)

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

使用[]语法通过Lua中的变量值对表进行索引。

此外,在Lua Foo.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

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

{{1}}