Lua定位/表?
问题描述:
这应该是微不足道的一些,但我不明白这一点:■Lua定位/表?
if Message == "!kanebot" then
pos = {}
pObj = Get_GameObj(pID)
pos = Get_Position(pObj)
pos2:AssignX(pos2:GetX()+ 4*math.cos(Get_Facing(Get_GameObj(pID))*(math.pi/180)))
pos2:AssignY(pos2:GetY()+ 4*math.cos(Get_Facing(Get_GameObj(pID))*(math.pi/180)))
pos2:AssignZ(pos2:GetZ()+ .3)
reinf = Create_Object("Nod_Kane", pos)
Attach_Script_Once(reinf, "M01_Hunt_The_Player")
Attach_Script_Once(reinf, "M00_No_Falling_Damage_DME")
InputConsole("%s has bought a kanebot.", Get_Player_Name_By_ID(pID))
end
错误给出的是:尝试索引全球“POS2”(一个零值)
任何想法?
答
您将位置置入变量pos
,然后索引pos2
。 pos2
永远不会初始化,所以当您尝试索引它时(pos2:blah
),您会遇到有关尝试索引nil
的错误。
附注:pos = {}
这条线是完全多余的,因为你在两行之后覆盖了pos
。而且,这些变量中的大部分应该变为本地变量,这样既快又避免污染全局名称空间。
小重构知道也不关心你的代码和/或正在使用的API:
if Message == "!kanebot" then
local gameobj = Get_GameObj(pID)
local pos = Get_Position(gameobj)
pos:AssignX(pos:GetX()+ 4*math.cos(Get_Facing(getobj)*(math.pi/180)))
pos:AssignY(pos:GetY()+ 4*math.cos(Get_Facing(getobj)*(math.pi/180)))
pos:AssignZ(pos:GetZ()+ .3)
local reinf = Create_Object("Nod_Kane", pos)
Attach_Script_Once(reinf, "M01_Hunt_The_Player")
Attach_Script_Once(reinf, "M00_No_Falling_Damage_DME")
InputConsole("%s has bought a kanebot.", Get_Player_Name_By_ID(pID))
end
+0
谢谢,这是现货! :) – Talisman 2012-07-30 18:55:01
你会找到一个更好的答案,如果你问的叛徒论坛这个问题,因为谁建的插件的人你使用的LUA更有经验。此外,我怀疑任何人都不会明白你在谈论什么或者这些东西如何在这里工作,除了之前曾与Renegade FDS插件合作过的人。 – tcables 2012-07-30 18:04:18
另外Daniel还添加了Set_Facing和3个其他命令,这些命令可以让你做100x容易,而不是做4 * math.cos的东西。 (Lua plugin v5,还有一个用于泰伯利亚科技补丁。) – tcables 2012-07-30 18:10:25
他们都是有效的点,但是很少有人仍然使用lua并且可以为我提供指导。无论如何,Mud的回应如下,对我来说完美无缺。我并不介意不使用Set_Facing,因为这个面向是无关紧要的 - 我只是简单地清理掉已弃用的代码,以符合新的TT补丁标准。 – Talisman 2012-07-30 18:54:51