加里';s mod lua代码错误不工作(实体X,为零)
我试图修复Garry的Mod插件,结果就是这样。我尝试了很长一段时间来修复它,但我不是Lua编码方面最好的:/。这个代码有什么问题?我得到这个错误:加里';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
[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)
未在该函数中的任何位置定义,因此nilply
(实体预期为零)
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)。