All pastes #809855 Raw Edit

Stuff

public text v1 · immutable
·published 2007-12-09 09:11 UTC
rendered paste body

AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
include( 'shared.lua' )


function ENT:SpawnFunction( ply, tr )

	if ( !tr.Hit ) then return end
	
	local SpawnPos = tr.HitPos + tr.HitNormal * 16
	
	local ent = ents.Create( "sla_shell" )
	ent:SetPos( SpawnPos )
	ent:Spawn()
	ent:Activate()
	
	self.Spawner = ply

	return ent
end



/*---------------------------------------------------------
   Name: Initialize
---------------------------------------------------------*/
function ENT:Initialize(  )
	
	self.Entity:SetModel( "models/props/de_nuke/light_red2.mdl" )
	self.Entity:PhysicsInit( SOLID_VPHYSICS )
	self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
	self.Entity:SetSolid( SOLID_VPHYSICS )
	 
	local phys = self.Entity:GetPhysicsObject()
	
		  if (phys:IsValid()) then
			phys:Wake()
		  end

	self.Active = false
	self.Drop = false
	
	self.Smoke = ents.Create("env_smoketrail")
	self.Smoke:SetPos(self.Entity:GetPos())
	self.Smoke:SetParent(self.Entity)
	self.Smoke:SetKeyValue("self.Smokesprite","sprites/whitepuff.spr" )
	self.Smoke:SetKeyValue("spawnrate","25")
	self.Smoke:SetKeyValue("spawnradius","5" )
	self.Smoke:SetKeyValue("opacity","0.5" )
	self.Smoke:SetKeyValue("endsize","10" )
	self.Smoke:SetKeyValue("startcolor","100 100 100" )
	self.Smoke:SetKeyValue("endcolor","255 255 255" )
	self.Smoke:SetKeyValue("lifetime","1" )
	self.Smoke:Spawn()
end


/*---------------------------------------------------------
   Name: PhysicsCollide
---------------------------------------------------------*/
function ENT:PhysicsCollide()

end

/*---------------------------------------------------------
   Name: OnTakeDamage
---------------------------------------------------------*/
function ENT:OnTakeDamage( dmginfo )
	self.Entity:TakePhysicsDamage( dmginfo )
end


/*---------------------------------------------------------
   Name: Use
---------------------------------------------------------*/
function ENT:Use( activator )

end

function ENT:Detonate()
	self.explode = ents.Create("env_explosion")
	self.explode:SetPos(self.Entity:GetPos())
	self.explode:SetOwner(self.Entity:GetOwner())
	self.explode:SetKeyValue("iMagnitude", "200")
	self.explode:Spawn()
	self.explode:Fire("explode", "", 0)
	self.explode:Fire("kill", "", 0)
	
	local tr = util.QuickTrace(self.Entity:GetPos(), Vector(0,0,-4096), self.Entity)
	
	self.beamTarg = ents.Create("info_target")
	self.beamTarg:SetKeyValue("targetname", "NULL" .. beamTarg)
	self.beamTarg:SetPos(self.Entity:GetPos())
	self.beamTarg:Spawn()
	self.entBeam = ents.Create("env_laser")
	self.entBeam:SetPos(tr.HitPos)
	self.entBeam:SetKeyValue("renderamt", "255")
	self.entBeam:SetKeyValue( "rendercolor", "255 100 0")
	self.entBeam:SetKeyValue( "texture", "sprites/plasmabeam.spr")
	self.entBeam:SetKeyValue( "TextureScroll", "55")
	self.entBeam:SetKeyValue( "targetname", "laser" .. entBeam)
	self.entBeam:SetKeyValue( "parentname", "")
	self.entBeam:SetKeyValue( "damage", "5")
	self.entBeam:SetKeyValue( "spawnflags", "1 + 16 + 32")
	self.entBeam:SetKeyValue( "width", "15")
	self.entBeam:SetKeyValue( "dissolvetype", "1")
	self.entBeam:SetKeyValue( "LaserTarget", "NULL" .. beamTarg)
	self.entBeam:SetKeyValue( "TouchType", "1")
	self.entBeam:Spawn() 

	self.entBeam:Fire("kill", "", 2)
	self.beamTarg:Fire("kill", "", 2)
	
	self.effect = EffectData()
		self.effect:SetOrigin(tr.HitPos)
	util.Effect("thumperdust", self.effect)
	util.Effect("manhacksparks", self.effect)
	
	self.phys = ents.Create("env_physexplosion")
	self.phys:SetPos(tr.HitPos)
	self.phys:SetKeyValue("magnitude", "300")
	self.phys:SetKeyValue("radius", "250")
	self.phys:SetOwner(self.Entity:GetOwner())
	self.phys:SetPhysicsAttacker(self.Entity:GetOwner())
	self.phys:Spawn()
	self.phys:Fire("explode", "", 0)
	self.phys:Fire("kill", "", 0)
			
	self.pobj = self.Entity:GetPhysicsObject()
	self.pobj:EnableMotion(false)
	timer.Simple(3, function() self:DropIt() end)
end

function ENT:DropIt()
	self.pobj = self.Entity:GetPhysicsObject()
	self.pobj:EnableMotion(true)
	self.pobj:ApplyForceCenter(Vector(0,0,-1))
	
	self.Smoke:Fire("kill", "", 0)
	
	self.Drop = true
end

function ENT:SetLaunch( ply )
	self.Active = true
	self.Launcher = ply
	self:SetAngles(ply:GetAimVector())
end

function ENT:Explode()
	-- self.explode = ents.Create("env_explosion")
	-- explode:SetPos(self.Entity:GetPos())
	-- explode:SetOwner(self.Entity:GetOwner())
	-- explode:SetKeyValue("iMagnitude", "200")
	explode:Spawn()
	explode:Fire("explode", "", 0)
	explode:Fire("kill", "", 0)
	
	self.Drop = false
	self.Entity:Fire("kill", "", 0)
end

/*---------------------------------------------------------
   Name: Think
----------------------------------------------------------*/

function ENT:Think( )
	self.LastHeight = self.LastHeight or self:GetPos().z
	if self:GetPos().z < self.LastHeight then
		self:Detonate()
	end
	self.LastHeight = self:GetPos().z
	
	if self.Drop then
		local entC = ents.FindInSphere(self.Entity:GetPos(), 300)
		for k, v in pairs(entC) do
			if v and v:IsValid() then
				if v:IsPlayer() && v:IsNPC() then
					if self.Entity:IsOnGround() then
						self:Explode()
					end
				end
			end
		end
	end
end