加里';s mod lua代码错误不工作(实体X,为零)

加里';s mod lua代码错误不工作(实体X,为零),lua,garrys-mod,Lua,Garrys Mod,我试图修复Garry的Mod插件,结果就是这样。我尝试了很长一段时间来修复它,但我不是Lua编码方面最好的:/。这个代码有什么问题?我得到这个错误: [ERROR] addons/garrys_bombs_5_base_528449144/lua/entities/gb5_shockwave_sound_lowsh.lua:80: bad argument #1 to 'SetPhysicsAttacker' (Entity expected, got nil) 1. SetPhysicsA

我试图修复Garry的Mod插件,结果就是这样。我尝试了很长一段时间来修复它,但我不是Lua编码方面最好的:/。这个代码有什么问题?我得到这个错误:

[ERROR] addons/garrys_bombs_5_base_528449144/lua/entities/gb5_shockwave_sound_lowsh.lua:80: bad argument #1 to 'SetPhysicsAttacker' (Entity expected, got nil)
  1. SetPhysicsAttacker - [C]:-1
   2. unknown - addons/garrys_bombs_5_base_528449144/lua/entities/gb5_shockwave_sound_lowsh.lua:80
代码相当长。我有每一个文件工作正常,但这个文件不工作

    AddCSLuaFile()

DEFINE_BASECLASS( "base_anim" )

if (SERVER) then
    util.AddNetworkString( "gb5_net_sound_lowsh" )
end

ENT.Spawnable                        =  false
ENT.AdminSpawnable                   =  false     

ENT.PrintName                        =  ""        
ENT.Author                           =  ""      
ENT.Contact                          =  ""      

ENT.GBOWNER                          =  nil            
ENT.MAX_RANGE                        = 0
ENT.SHOCKWAVE_INCREMENT              = 0
ENT.DELAY                            = 0
ENT.SOUND                            = ""

net.Receive( "gb5_net_sound_lowsh", function( len, pl )
    local sound = net.ReadString()
    LocalPlayer():EmitSound(sound)

end );

function ENT:Initialize()
     if (SERVER) then
         self.FILTER                           = {}
         self:SetModel("models/props_junk/watermelon01_chunk02c.mdl")
         self:SetSolid( SOLID_NONE )
         self:SetMoveType( MOVETYPE_NONE )
         self:SetUseType( ONOFF_USE ) 
         self.Bursts = 0
         self.CURRENTRANGE = 0
         self.GBOWNER = self:GetVar("GBOWNER")
         self.SOUND = self:GetVar("SOUND")


     end
end

function ENT:Think()        
     if (SERVER) then
     if not self:IsValid() then return end
     local pos = self:GetPos()
     self.CURRENTRANGE = self.CURRENTRANGE+(self.SHOCKWAVE_INCREMENT*10)
     if(GetConVar("gb5_realistic_sound"):GetInt() >= 1) then
         for k, v in pairs(ents.FindInSphere(pos,self.CURRENTRANGE)) do
             if v:IsPlayer() then
                 if not (table.HasValue(self.FILTER,v)) then
                    net.Start("gb5_net_sound_lowsh")
                        net.WriteString(self.SOUND)
                    net.Send(v)
                    v:SetNWString("sound", self.SOUND)
                    if self:GetVar("Shocktime") == nil then
                        self.shocktime = 1
                    else
                        self.shocktime = self:GetVar("Shocktime")
                    end
                    if GetConVar("gb5_sound_shake"):GetInt()== 1 then
                        util.ScreenShake( v:GetPos(), 5555, 555, self.shocktime, 500 )
                    end
                    table.insert(self.FILTER, v)

                 end
             end
         end
     else
        if self:GetVar("Shocktime") == nil then
            self.shocktime = 1
        else
            self.shocktime = self:GetVar("Shocktime")
        end
        local ent = ents.Create("gb5_shockwave_sound_instant")
        ent:SetPos( pos ) 
        ent:Spawn()
        ent:Activate()
        ent:SetPhysicsAttacker(ply)
        ent:SetVar("GBOWNER", self.GBOWNER)
        ent:SetVar("MAX_RANGE",50000)
        ent:SetVar("DELAY",0.01)
        ent:SetVar("Shocktime",self.shocktime)
        ent:SetVar("SOUND", self:GetVar("SOUND"))
        self:Remove()
     end
     self.Bursts = self.Bursts + 1
     if (self.CURRENTRANGE >= self.MAX_RANGE) then
         self:Remove()
     end
     self:NextThink(CurTime() + (self.DELAY*10))
     return true
     end
end
function ENT:OnRemove()
    if SERVER then
        if self.FILTER==nil then return end
        for k, v in pairs(self.FILTER) do
            if not v:IsValid() then return end
            v:SetNWBool("waiting", true)
        end
    end
end
function ENT:Draw()
     return false
end

有没有可能有人帮我修一下?甚至只是告诉我怎么了?我会很高兴的。如果需要,我可以发送所有文件。好。。。这不是我的插件,但我正在尝试修复一个现有的。有人也试图修好它,但他没有修好(实际上他把它弄坏了)

错误的含义

  • ENT:Think()
    函数中,您正在调用
    ENT:SetPhysicsAttacker(ply)
  • ply
    未在该函数中的任何位置定义,因此nil
    (实体预期为零)
如何解决此问题

如果没有玩家对此实体造成的伤害负责,请删除行
ent:SetPhysicsAttacker(ply)

否则,请在创建时使用将所有者分配给实体。
这将允许您在
Think
hook中使用

示例

hook.Add(“PlayerSay”、“SpawnEntity”、函数(ply、text)
如果string.lower(text)=“!spawnentity”,则
--创建您的实体
本地myEntity=ents.Create(“gb5_冲击波_声音_lowsh”)
myEntity:SetPos(ply:GetPos())
myEntity:SetAngles(ply:GetAngles())
myEntity:Spawn()
--将所有者设置为键入命令的播放机
myEntity:SetOwner(ply)
返回“”
结束
(完)
--在实体代码中
函数ENT:Think()
打印(“我的所有者是:“…tostring(self:GetOwner()))
-- ...
ent:SetPhysics攻击者(self:GetOwner())
结束

第80行是哪一行?看起来您缺少一个参数,或者您要传递的值为nil/null。放置一个断点,这样就不会调用该行,您可以检查您要传递的内容是否为实际和实体(而不是nil)。