Files
mmkrp_2026/gamemodes/sandbox/entities/entities/gmod_emitter.lua
2026-03-15 14:54:49 +03:00

402 lines
10 KiB
Lua

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
} )