2012-07-30 31 views
1

這應該是微不足道的一些,但我不明白這一點:■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」(一個零值)

任何想法?

+0

你會找到一個更好的答案,如果你問的叛徒論壇這個問題,因爲誰建的插件的人你使用的LUA更有經驗。此外,我懷疑任何人都不會明白你在談論什麼或者這些東西如何在這裏工作,除了之前曾與Renegade FDS插件合作過的人。 – tcables 2012-07-30 18:04:18

+0

另外Daniel還添加了Set_Facing和3個其他命令,這些命令可以讓你做100x容易,而不是做4 * math.cos的東西。 (Lua plugin v5,還有一個用於泰伯利亞科技補丁。) – tcables 2012-07-30 18:10:25

+0

他們都是有效的點,但是很少有人仍然使用lua並且可以爲我提供指導。無論如何,Mud的迴應如下,對我來說完美無缺。我並不介意不使用Set_Facing,因爲這個面向是無關緊要的 - 我只是簡單地清理掉已棄用的代碼,以符合新的TT補丁標準。 – Talisman 2012-07-30 18:54:51

回答

3

您將位置置入變量pos,然後索引pos2pos2永遠不會初始化,所以當您嘗試索引它時(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