AddCSLuaFile() DEFINE_BASECLASS( "base_gmodentity" ) ENT.PrintName = "Emitter" ENT.Editable = true function ENT:SetupDataTables() self:NetworkVar( "Bool", 1, "On", { KeyName = "on", Edit = { type = "Boolean", order = 1, title = "#entedit.enabled" } } ) self:NetworkVar( "Bool", 0, "Toggle", { KeyName = "tg", Edit = { type = "Boolean", order = 1, title = "#tool.emitter.toggle" } } ) self:NetworkVar( "Float", 0, "Delay", { KeyName = "dl", Edit = { type = "Float", order = 1, min = 0.01, max = 2, title = "#tool.emitter.delay" } } ) self:NetworkVar( "Float", 1, "Scale", { KeyName = "sc", Edit = { type = "Float", order = 1, min = 0, max = 6, title = "#tool.emitter.scale" } } ) self:NetworkVar( "String", 0, "Effect" ) end function ENT:Initialize() if ( SERVER ) then self:SetModel( "models/props_lab/tpplug.mdl" ) -- TODO: Find something better than this self:PhysicsInit( SOLID_VPHYSICS ) self:DrawShadow( false ) self:SetCollisionGroup( COLLISION_GROUP_WEAPON ) local phys = self:GetPhysicsObject() if ( IsValid( phys ) ) then phys:Wake() end end end function ENT:Draw( flags ) -- Don't draw if the player is holding Camera SWEP in their hands local ply = LocalPlayer() local wep = ply:GetActiveWeapon() if ( IsValid( wep ) ) then local weapon_name = wep:GetClass() if ( weapon_name == "gmod_camera" ) then return end end BaseClass.Draw( self, flags ) end function ENT:Think() if ( SERVER ) then return end BaseClass.Think( self ) if ( !self:GetOn() ) then return end self.Delay = self.Delay or 0 if ( self.Delay > CurTime() ) then return end self.Delay = CurTime() + self:GetDelay() -- -- Find our effect table -- local EffectTable = list.GetEntry( "EffectType", self:GetEffect() ) if ( !EffectTable ) then return end local Angle = self:GetAngles() EffectTable.func( self, self:GetPos() + Angle:Forward() * 12, Angle, self:GetScale() ) end --[[--------------------------------------------------------- Overridden because I want to show the name of the player that spawned it.. -----------------------------------------------------------]] function ENT:GetOverlayText() return self:GetPlayerName() end if ( SERVER ) then numpad.Register( "Emitter_On", function( ply, ent ) if ( !IsValid( ent ) ) then return end if ( ent:GetToggle() ) then ent:SetOn( !ent:GetOn() ) return end ent:SetOn( true ) end ) numpad.Register( "Emitter_Off", function( ply, ent ) if ( !IsValid( ent ) ) then return end if ( ent:GetToggle() ) then return end ent:SetOn( false ) end ) end game.AddParticles( "particles/gmod_effects.pcf" ) PrecacheParticleSystem( "generic_smoke" ) list.Set( "EffectType", "smoke", { print = "#effecttype.smoke", material = "gui/effects/smoke.png", func = function( ent, pos, angle, scale ) ParticleEffect( "generic_smoke", pos, angle, ent ) end } ) list.Set( "EffectType", "sparks", { print = "#effecttype.sparks", material = "gui/effects/sparks.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() * scale ) effectdata:SetMagnitude( scale / 2 ) effectdata:SetRadius( 8 - scale ) util.Effect( "Sparks", effectdata, true, true ) end } ) list.Set( "EffectType", "stunstickimpact", { print = "#effecttype.stunstick", material = "gui/effects/stunstickimpact.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() ) util.Effect( "stunstickimpact", effectdata, true, true ) end } ) list.Set( "EffectType", "manhacksparks", { print = "#effecttype.manhack", material = "gui/effects/manhacksparks.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() * scale ) util.Effect( "manhacksparks", effectdata, true, true ) end } ) list.Set( "EffectType", "bloodspray", { print = "#effecttype.blood", material = "gui/effects/bloodspray.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() * math.max( 3, scale ) / 3 ) effectdata:SetMagnitude( 1 ) effectdata:SetScale( scale + 9 ) effectdata:SetColor( 0 ) effectdata:SetFlags( 3 ) util.Effect( "bloodspray", effectdata, true, true ) end } ) list.Set( "EffectType", "striderblood", { print = "#effecttype.strider", material = "gui/effects/striderblood.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() * ( 6 - scale ) / 2 ) effectdata:SetScale( scale / 2 ) util.Effect( "StriderBlood", effectdata, true, true ) end } ) list.Set( "EffectType", "shells", { print = "#effecttype.pistol", material = "gui/effects/shells.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetAngles( angle ) util.Effect( "ShellEject", effectdata, true, true ) end } ) list.Set( "EffectType", "rifleshells", { print = "#effecttype.rifle", material = "gui/effects/rifleshells.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetAngles( angle ) util.Effect( "RifleShellEject", effectdata, true, true ) end } ) list.Set( "EffectType", "shotgunshells", { print = "#effecttype.shotgun", material = "gui/effects/shotgunshells.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetAngles( angle ) util.Effect( "ShotgunShellEject", effectdata, true, true ) end } ) list.Set( "EffectType", "cball_explode", { print = "#effecttype.cball_explode", material = "gui/effects/cball_explode.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) util.Effect( "cball_explode", effectdata, true, true ) end } ) list.Set( "EffectType", "cball_bounce", { print = "#effecttype.cball_bounce", material = "gui/effects/cball_bounce.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() * scale / 4 ) effectdata:SetRadius( scale * 2 ) util.Effect( "cball_bounce", effectdata, true, true ) end } ) list.Set( "EffectType", "thumperdust", { print = "#effecttype.thumperdust", material = "gui/effects/thumperdust.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetScale( scale * 24 ) util.Effect( "ThumperDust", effectdata, true, true ) end } ) list.Set( "EffectType", "ar2impact", { print = "#effecttype.ar2impact", material = "gui/effects/ar2impact.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetNormal( angle:Forward() ) util.Effect( "AR2Impact", effectdata, true, true ) end } ) list.Set( "EffectType", "ar2explosion", { print = "#effecttype.ar2explosion", material = "gui/effects/ar2explosion.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetRadius( scale * 4 ) effectdata:SetNormal( angle:Forward() ) util.Effect( "AR2Explosion", effectdata, true, true ) end } ) list.Set( "EffectType", "explosion", { print = "#effecttype.explosion", material = "gui/effects/explosion.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetFlags( 4 ) util.Effect( "explosion", effectdata, true, true ) end } ) list.Set( "EffectType", "helicoptermegabomb", { print = "#effecttype.helicoptermegabomb", material = "gui/effects/helicoptermegabomb.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) util.Effect( "helicoptermegabomb", effectdata, true, true ) end } ) list.Set( "EffectType", "underwaterexplosion", { print = "#effecttype.waterexplosion", material = "gui/effects/waterexplosion.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) util.Effect( "WaterSurfaceExplosion", effectdata, true, true ) end } ) list.Set( "EffectType", "watersplash", { print = "#effecttype.watersplash", material = "gui/effects/watersplash.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetScale( scale * 2 ) effectdata:SetFlags( 0 ) util.Effect( "WaterSplash", effectdata, true, true ) end } ) list.Set( "EffectType", "dirtywatersplash", { print = "#effecttype.dirtywatersplash", material = "gui/effects/dirtywatersplash.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) effectdata:SetScale( scale * 2 ) effectdata:SetFlags( 1 ) util.Effect( "WaterSplash", effectdata, true, true ) end } ) list.Set( "EffectType", "glassimpact", { print = "#effecttype.glassimpact", material = "gui/effects/glassimpact.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) util.Effect( "GlassImpact", effectdata, true, true ) end } ) list.Set( "EffectType", "bloodimpact", { print = "#effecttype.bloodimpact", material = "gui/effects/bloodimpact.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos ) util.Effect( "BloodImpact", effectdata, true, true ) end } ) list.Set( "EffectType", "muzzleeffect", { print = "#effecttype.muzzleeffect", material = "gui/effects/muzzleeffect.png", func = function( ent, pos, angle, scale ) local effectdata = EffectData() effectdata:SetOrigin( pos + angle:Forward() * 4 ) effectdata:SetAngles( angle ) effectdata:SetScale( scale ) util.Effect( "MuzzleEffect", effectdata, true, true ) end } )