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

我需要将字符串值用作表,以便在玩家重新连接到游戏服务器时为其恢复积分。 此字符串值是其个人资料ID,永远不会更改,我需要在字符串值内放置数据(杀敌数、死亡数、爆头数),以有效恢复这些点数。我在互联网上快速查看了一下,但我没有找到太多信息,因为我不知道这个特定的事物实际上被称为什么。 为了让事情变得更容易,以下是我到目前为止的所做的事情:

如果(未Omega.Playertable)则
    Omega.Playertable = {};
    System.LogAlways(“在首次连接时设置静态记录表”);
结束
本(ID = g_gameRules.game:GetProfileId(player.id);
如果(未Omega.Playertable.ID)则
    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;
否则
    本(Kills=Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Kills;
    死亡=Omega.Playertable.g_gameRules.game:GetProfileId(player.id).Deaths;
    爆头=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);
结束

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

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

点赞
用户107090
用户107090

尝试一下:

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

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

2013-06-06 22:06:50
用户1244588
用户1244588

看起来你正在使用错误的表索引语法。

在 Lua 中,使用变量值对表进行索引可以用 [] 语法。

此外,在 Lua 中,Foo.barFoo["bar"] 的 _结构性语法糖_,两种格式可以互换使用,但 . 变体有限制,即你不能在其中使用哪些字符。例如,Foo["\n.*#%!"] 是一个有效的表索引,但你肯定不能这样写:Foo.\n.*#%!

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

foo = {};
foo.X = "一些值";
table.insert(foo, "X");

你得到这个:

{
  X   = "一些值"
  [1] = "X"
}

这意味着,如果我将这个用于你给我们的代码,这大概是你想要的:

if (not Omega.Playertable) then
    Omega.Playertable = {};
    System.LogAlways("在第一次连接时设置静态记录表");
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-09 16:46:34