我需要使用字符串值作为表,以便在重新连接到游戏服务器时将点恢复到播放器。 这个字符串值是他们的配置文件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对每个玩家都是唯一的,所以我不能使用简单的数字系统。
有人能指出我在这里做错了什么吗?如果我设法解决问题,我会在这里回答我自己的问题,以便它对其他用户有所帮助。
答案 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}}