1

これは一部の人にとっては些細なことですが、私にはわかりません:s

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

与えられたエラー: Attempt to index global 'pos2' (a nil value)

何か案は?

4

1 に答える 1

3

位置を変数posに入れて、インデックスを作成しpos2ます。 pos2は初期化されないため、インデックスを作成しようとすると(pos2:blah)、インデックスを作成しようとするとエラーが発生しますnil

補足:後で2行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
于 2012-07-30T18:03:11.897 に答える