hello guys, i need some code help, this code makes a sphere and when it reaches max size it shrinks back down at a rapid rate then is supposed to delete itself, and damages any player within the sphere, and that's off too
[lua]
function ENT:Draw()
self.Entity:DrawModel()
render.SetColorMaterial()
render.SetMaterial(Material("models/effects/base"))
render.DrawSphere( self:GetPos(), self.size, 50, 50, Color( 0, 0, 0, 252 ) )
render.SetMaterial(Material("models/effects/portalfunnel_sheet"))
render.DrawSphere( self:GetPos(), self.size*1.1, 50, 50, Color( 0, 150, 150, 100 ) )
end
function ENT:Initialize()
self.active=0
self.size=0
self.Delay=0
PrecacheParticleSystem("flaregun_energyfield_red")
PrecacheParticleSystem("flaregun_energyfield_blue")
ParticleEffectAttach("flaregun_energyfield_red",PATTACH_ABSORIGIN_FOLLOW,self,0)
self:SetModel( "models/weapons/w_models/w_stickybomb2.mdl" )
self:PhysicsInit( SOLID_VPHYSICS ) -- Make us work with physics,
self:SetMoveType( MOVETYPE_VPHYSICS ) -- after all, gmod is a physics
self:SetSolid( SOLID_VPHYSICS )
local phys = self:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
phys:SetMass(1)
end
self.SoundName = Sound( "PS2/02345_car_loop.wav" )
self.Sound = CreateSound( self.Entity, self.SoundName )
self.Sound:PlayEx(400,200)
end
function ENT:Use( activator, caller )
return
end
function ENT:Think()
if (self.size<500 && self.active==0) then
self.size=self.size+1
end
if (self.size>=500 && self.active==0) then
self.active=self.active+1
end
if (self.Delay<=0 && self.active==1) then
self.size=self.size-5
end
if (self.size<=0) then
self.size=self.size*0
end
if (self.Delay==0 and self.active==1) then
self:Remove()
end
for k, v in pairs(ents.FindInSphere(self:GetPos(), self.size*4.5)) do
if( v:IsPlayer() or v:IsNPC()) then
local damage = 1
local attacker = self
local inflictor = self
v:TakeDamage( damage, attacker, inflictor )
end
end
end
[/lua]
Can you be more specific on what you need, or whats not working in this code?
I tried cleaning up the code and [del]I think I understand what the problem is, Delay currently does absolutely nothing, and this code doesn't reduce the size, it only increases, for 500 ticks/Think calls (could be a different length of time depending on server tickrate).[/del] I have no idea what is going on.
This is what I formatted the above code to look like to help with readability (and also fix Material being called every frame):
[lua]local basemat = Material("models/effects/base")
local portalmat = Material("models/effects/portalfunnel_sheet")
function ENT:Draw()
self.Entity:DrawModel()
render.SetColorMaterial()
render.SetMaterial(basemat)
render.DrawSphere( self:GetPos(), self.size, 50, 50, Color( 0, 0, 0, 252 ) )
render.SetMaterial(portalmat)
render.DrawSphere( self:GetPos(), self.size*1.1, 50, 50, Color( 0, 150, 150, 100 ) )
end
function ENT:Initialize()
self.active=0
self.size=0
self.Delay=0
PrecacheParticleSystem("flaregun_energyfield_red")
PrecacheParticleSystem("flaregun_energyfield_blue")
ParticleEffectAttach("flaregun_energyfield_red",PATTACH_ABSORIGIN_FOLLOW,self,0)
self:SetModel( "models/weapons/w_models/w_stickybomb2.mdl" )
self:PhysicsInit( SOLID_VPHYSICS ) -- Make us work with physics,
self:SetMoveType( MOVETYPE_VPHYSICS ) -- after all, gmod is a physics
self:SetSolid( SOLID_VPHYSICS )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetMass(1)
end
self.SoundName = Sound( "PS2/02345_car_loop.wav" )
self.Sound = CreateSound( self.Entity, self.SoundName )
self.Sound:PlayEx(400,200)
end
function ENT:Use( activator, caller )
return
end
function ENT:Think()
if (self.size<500 && self.active==0) then
self.size=self.size+1
end
if (self.size>=500 && self.active==0) then
self.active=self.active+1
end
if (self.Delay<=0 && self.active==1) then
self.size=self.size-5
end
if (self.size<=0) then
self.size=self.size*0
end
if (self.Delay==0 and self.active==1) then
self:Remove()
end
for k, v in pairs(ents.FindInSphere(self:GetPos(), self.size*4.5)) do
if v:IsPlayer() or v:IsNPC() then
local damage = 1
local attacker = self
local inflictor = self
v:TakeDamage( damage, attacker, inflictor )
end
end
end[/lua]
[editline]12th September 2016[/editline]
Dragula, what is Delay supposed to do? I am guessing this thing is supposed to grow to a set size, stay there a for a moment, then reduce size and remove?
I dont think delay does anything in this code, you should use timers to remove the entity and for loop like this for the size[CODE]for Size = 1, 34 do
print( Size )
end[/CODE]
[QUOTE=wh1t3rabbit;51036295]I tried cleaning up the code and [del]I think I understand what the problem is, Delay currently does absolutely nothing, and this code doesn't reduce the size, it only increases, for 500 ticks/Think calls (could be a different length of time depending on server tickrate).[/del] I have no idea what is going on.
This is what I formatted the above code to look like to help with readability (and also fix Material being called every frame):
[lua]local basemat = Material("models/effects/base")
local portalmat = Material("models/effects/portalfunnel_sheet")
function ENT:Draw()
self.Entity:DrawModel()
render.SetColorMaterial()
render.SetMaterial(basemat)
render.DrawSphere( self:GetPos(), self.size, 50, 50, Color( 0, 0, 0, 252 ) )
render.SetMaterial(portalmat)
render.DrawSphere( self:GetPos(), self.size*1.1, 50, 50, Color( 0, 150, 150, 100 ) )
end
function ENT:Initialize()
self.active=0
self.size=0
self.Delay=0
PrecacheParticleSystem("flaregun_energyfield_red")
PrecacheParticleSystem("flaregun_energyfield_blue")
ParticleEffectAttach("flaregun_energyfield_red",PATTACH_ABSORIGIN_FOLLOW,self,0)
self:SetModel( "models/weapons/w_models/w_stickybomb2.mdl" )
self:PhysicsInit( SOLID_VPHYSICS ) -- Make us work with physics,
self:SetMoveType( MOVETYPE_VPHYSICS ) -- after all, gmod is a physics
self:SetSolid( SOLID_VPHYSICS )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetMass(1)
end
self.SoundName = Sound( "PS2/02345_car_loop.wav" )
self.Sound = CreateSound( self.Entity, self.SoundName )
self.Sound:PlayEx(400,200)
end
function ENT:Use( activator, caller )
return
end
function ENT:Think()
if (self.size<500 && self.active==0) then
self.size=self.size+1
end
if (self.size>=500 && self.active==0) then
self.active=self.active+1
end
if (self.Delay<=0 && self.active==1) then
self.size=self.size-5
end
if (self.size<=0) then
self.size=self.size*0
end
if (self.Delay==0 and self.active==1) then
self:Remove()
end
for k, v in pairs(ents.FindInSphere(self:GetPos(), self.size*4.5)) do
if v:IsPlayer() or v:IsNPC() then
local damage = 1
local attacker = self
local inflictor = self
v:TakeDamage( damage, attacker, inflictor )
end
end
end[/lua]
[editline]12th September 2016[/editline]
Dragula, what is Delay supposed to do? I am guessing this thing is supposed to grow to a set size, stay there a for a moment, then reduce size and remove?[/QUOTE]
ok, currently delay was supposed to do just that, i had it set to 1 for debugging purposes, even then it did not work
[editline]11th September 2016[/editline]
[QUOTE=chikkenslayer;51035924]Can you be more specific on what you need, or whats not working in this code?[/QUOTE]
basically, i'm needind it to expand to a large size, stay at that size for about a second then shrink down to nothing then disappear, and anything within it gets damaged
[editline]11th September 2016[/editline]
Ok i think i figured something out, i think i have both of the same code in both the init AND cl_init, can you help me parse which goes where, please?
I've figured a small thing out, i've removed the materials and i can see the sphere i'm drawing, it's staying there even after the delay and size supposedly hit 0
Anything else you figured out? This is really cool btw!
Sorry, you need to Log In to post a reply to this thread.