Help me to finish this,please

I have some problems to make it shoot npcs and explosives… and it makes a lot of erros when the entity is destroyed… Here is the code… Launcher and stool…

Launcher

[lua]include( ‘shared.lua’ )
AddCSLuaFile(“shared.lua”)
AddCSLuaFile(“cl_init.lua”)

ENT.InitialHealth =500

//Spawned by player

function ENT:SpawnFunction( ply, tr )
if ( !tr.Hit ) then return end

local SpawnPos = tr.HitPos

local ent = ents.Create( “crox_antiair_launcher” )

ent:SetPos( SpawnPos + Vector(0,0,40) )
–ent:SetAngles(ply:EyeAngles())

–ent:SetOwner(ply)
ent:Spawn()
ent:Activate()
ent:DropToFloor()

ent:SetVar(“Team”,ply:Team())

Msg(“Turret spawned:” … ent … "
")

return ent
end

function ENT:Initialize()

if not (WireAddon == nil) then self.Inputs = Wire_CreateInputs(self.Entity, { “Activate” }) end

Msg("Turret init
")

self.Entity:SetNWInt(“pitch”, 20)
self.HasTarget = false
self.NextFire = 0

self.MaxRange = 2000
self.MinRange = 500

self.AttackPlayers = false
self.AttackOwner = false
self.AttackThrusters = false
self.AttackHoverballs = false
self.AttackNPCs = false
self.AttackExplosives = false

– Set our initial health
self:SetxHealth(self.InitialHealth)

self.Entity:SetModel( “models/props_borealis/bluebarrel001.mdl” )

self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:SetMoveType( MOVETYPE_NONE )

self.Entity:SetUseType(SIMPLE_USE)

self:SetEnabled(false)

local phys = self.Entity:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
end

–self.Entity:SetCollisionBounds( Vector( -60, -60, -60 ), Vector( 60, 60, 60 ) )

end

function ENT:TriggerInput(iname, value) --wire inputs
if (iname == “Activate”) then
if (value > 0) then
self:SetEnabled(true)
end
elseif (value <= 0) then
if self:SetEnabled(true) then
self:SetEnabled(false)
end
end
end

function ENT:SetxHealth(amt)
self.Entity:SetNetworkedInt(“health”,amt)
end

function ENT:GetxHealth()
return self:GetNetworkedInt(“health”,-1)
end

function ENT:OnTakeDamage(dmg)

local health=self:GetxHealth()
	self:SetxHealth(health-dmg:GetDamage())
	local health=self:GetxHealth()
	-- Is it dead yet?
	if health&lt;1 then
	self.Entity:Boom()
	self.Entity:Remove()
	end
end

function ENT:Boom()

-- Make an explosion effect
local effectdata = EffectData() 
	effectdata:SetOrigin( self.Entity:GetPos() ) 
util.Effect( "Explosion", effectdata, true, true )
util.BlastDamage( self.Entity, self.Entity, self.Entity:GetPos(), 150, 150)

end

–Turns and aims at target
function ENT:TakeAim(e)
local d = e:GetPos() - self.Entity:GetPos()
local a = d:Angle()

self.Entity:SetAngles(Angle(0,a.y,0))
self.Entity:SetNWInt("pitch",a.p)

end

function ENT:CanFire()
return CurTime() > self.NextFire
end

function ENT:CreateMissile(p,a)
m = ents.Create( “crox_antiair_heatseeker” )
m:SetPos( p )
m:SetAngles( a )
m:SetVar(“Target”,self.Target)
m:Spawn()
m:Activate()
end

function ENT:LaunchPrimary()

Msg("Fireing
")

self.Entity:EmitSound( Sound(“Weapon_RPG.Single”) )

local p1 = self.Entity:LocalToWorld(Vector(0,15,0))
local p2 = self.Entity:LocalToWorld(Vector(0,-15,0))

local d = self.Target:GetPos() - p1
local a = d:Normalize()

self:CreateMissile(p1 + (at),a)
self:CreateMissile(p2 + (a
t),a)

self.NextFire = CurTime() + 1.5
end

function ENT:LoseTarget()
self.Target = nil
self.HasTarget = false
end

function ENT:AquireTarget()
local entities=ents.FindInSphere(self.Entity:GetPos(),self.MaxRange)
for k,v in pairs(entities) do

local vec = v:GetPos()
local pAng= vec - self.Entity:LocalToWorld(Vector(0,0,50))

local pitch = pAng:Angle().p

if v:IsValid() && pitch &gt; 0 && self:isHostile(v) then
  self.Target = v
  self.HasTarget = true
  return
 end

end
end

–Entity Think Function
function ENT:Think()

if self.HasTarget then
if !self:isHostile(self.Target) then – Target has bein pacified?
self:LoseTarget()
self:AquireTarget()
return
end

if self.Target:IsValid() then
    self:TakeAim(self.Target)
    if self.Enabled && self:CanFire() then self:LaunchPrimary() end
end

else --No Target
self:AquireTarget()
end
end

function ENT:SetEnabled(v)
self.Enabled = v
if self.Enabled then self.Entity:SetColor(100,255,100,255) end
if !self.Enabled then self.Entity:SetColor(255,100,100,255) end
end

–Determin wether we should shoot at target
function ENT:isHostile(ent)
if !ent:IsValid() then return false end

trace={}
trace.start=self.Entity:GetPos()
trace.endpos=ent:GetPos()
trace.filter=self.Entity
traceRes=util.TraceLine(trace)

if traceRes.Entity ~= ent then --Only if we can actualy fit them directly or they will recive splash adamage
local d = traceRes.HitPos - ent:GetPos()
if d:Length() > 75 then return false end
end

if ent:GetClass() == “gmod_hoverball” && self.AttackHoverballs then
return true
end

if ent:GetClass() == “gmod_thruster” && self.AttackThrusters then
return true
end

if (ent:IsNPC() && ent:Health() > 0) and self.AttackNPCs then
return true
end

if ent:IsPlayer() && self.AttackPlayers then
if self:GetPlayer() == ent then return self.AttackOwner end
return false
end

if (ent:GetClass() == “drone” && ent:GetClass() == “staff_pulse” && ent:GetClass() == “staff_pulse_stationary” && ent:GetModel() == “models/\props_phx/amraam.mdl” && ent:GetModel() == “models/weapons/W_missile_launch.mdl” && ent:GetModel() == “models/props_phx/mk-82.mdl” && ent:GetModel() == “models/props_phx/ww2bomb.mdl” && ent:GetModel() == “models/props_phx/torpedo.mdl” && ent:GetModel() == “models/props_c17/canister01a.mdl” && self.AttackExplosives) then
return true
end

return false
end

–Enable/ Disable the turret
function ENT:Use( activator, caller )
if(activator ~= self:GetPlayer()) then return end
self:SetEnabled(!self.Enabled)
end
[/lua]

STOOL

[lua]
TOOL.Category = “Destruction”
TOOL.Name = “Anti Air Turrett”
TOOL.Command = nil
TOOL.ConfigName = “”

if ( CLIENT ) then
language.Add( “Tool_Launcher_Turret_name”, “Anti-Aircraft Turret” )
language.Add( “Tool_Launcher_Turret_desc”, “Used to shoot down thrusters and hover balls.” )
language.Add( “Tool_Launcher_Turret_0”, “Creates Turret” )
language.Add( “Tool_Launcher_Turret_1”, “” )

language.Add( "Launcher_TurretTool_attackowner", "Attack Owners stuff?" )
language.Add( "Launcher_TurretTool_attackplayers", "Shoot players aswell" )
language.Add( "Launcher_TurretTool_attacknpcs", "Attack Npcs?" )
language.Add( "Launcher_TurretTool_attackthrusters", "Attack Thrusters" )
language.Add( "Launcher_TurretTool_attackhoverballs", "Attack Hoverballs" )
language.Add( "Launcher_TurretTool_attackexplosives", "Attack Missiles,Bombs,Rockets,Drones ect" )

language.Add( "Launcher_TurretTool_enabled", "Start Enabled" )

language.Add( "Launcher_TurretTool_maxrange", "Maximum Range" )
language.Add( "Launcher_TurretTool_minrange", "Minimum Range" )

language.Add( "Undone_Launcher_Turret", "Undone Launcher" )

end

–TOOL.ClientConVar[ “force” ] = “1500”

TOOL.ClientConVar[ “attackowner” ] = “0”
TOOL.ClientConVar[ “attackplayers” ] = “0”
TOOL.ClientConVar[ “attackthrusters” ] = “0”
TOOL.ClientConVar[ “attackhoverballs” ] = “0”
TOOL.ClientConVar[ “attacknpcs” ] = “0”
TOOL.ClientConVar[ “attackexplosives” ] = “0”

TOOL.ClientConVar[ “enabled” ] = “0”

TOOL.ClientConVar[ “maxrange” ] = “3500”
TOOL.ClientConVar[ “minrange” ] = “500”

function TOOL:LeftClick( trace )
–`if !trace.HitWorld then return end

local ent = ents.Create( “crox_antiair_launcher” )
local ply = self:GetOwner()
ent:SetPos( trace.HitPos + Vector(0,0,40) )

ent:Spawn()
ent:Activate()
ent:DropToFloor()

ent:GetTable():SetPlayer( ply )
ent:SetVar(“MaxRange”,self:GetClientNumber(“maxrange”))
ent:SetVar(“MinRange”,self:GetClientNumber(“minrange”))

ent:SetVar(“AttackPlayers”, self:GetClientNumber(“attackplayers”) ~= 0)
ent:SetVar(“AttackOwner”, self:GetClientNumber(“attackowner”) ~= 0)
ent:SetVar(“AttackNpcs”, self:GetClientNumber(“attacknpcs”) ~= 0)
ent:SetVar(“AttackThrusters”, self:GetClientNumber(“attackthrusters”) ~= 0)
ent:SetVar(“AttackHoverballs”, self:GetClientNumber(“attackhoverballs”) ~= 0)
ent:SetVar(“AttackExplosives”, self:GetClientNumber(“attackexplosives”) ~= 0)

ent:GetTable():SetEnabled(self:GetClientNumber(“enabled”) ~= 0)

undo.Create(“Launcher Turret”)
undo.AddEntity( ent )
undo.SetPlayer( ply )
undo.Finish()

end

function TOOL.EntityTakeDamage(dmginfo)

end

function TOOL.BuildCPanel(panel)
panel:AddControl(“Header”, { Text = “#Tool_Launcher_Turret_name”, Description = “#Tool_Launcher_Turret_desc” })

panel:AddControl(“CheckBox”, {
Label = “Should the Turret shoot at its owners things”,
Command = “launcher_turret_attackowner”
})

panel:AddControl(“CheckBox”, {
Label = “Attack Players”,
Command = “launcher_turret_attackplayers”
})

panel:AddControl(“CheckBox”, {
Label = “Attack Npcs”,
Command = “launcher_turret_attacknpcs”
})

panel:AddControl(“CheckBox”, {
Label = “Attack Thrusters”,
Command = “launcher_turret_attackthrusters”
})

panel:AddControl(“CheckBox”, {
Label = “Attack Hoverballs”,
Command = “launcher_turret_attackhoverballs”
})

panel:AddControl(“CheckBox”, {
Label = “Attack Missiles,Bombs,Rockets,Drones ect”,
Command = “launcher_turret_attackexplosives”
})

panel:AddControl(“Slider”, {
Label = “Maximum Range”,
Type = “Float”,
Min = “0”,
Max = “10000”,
Command = “launcher_turret_maxrange”
})

panel:AddControl(“Slider”, {
Label = “Minimum range”,
Type = “Float”,
Min = “0”,
Max = “500”,
Command = “launcher_turret_minrange”
})

panel:AddControl(“CheckBox”, {
Label = “Start Enabled”,
Command = “launcher_turret_enabled”
})

end
[/lua]

Someone could help me to finish this?
This is a modification of the anti air turret by croixmeister stool who didn’t work anymore…
Thank you…


(User was banned for this post ("Undescriptive thread title" - mahalis))