Files
wnsrc/gamemodes/sandbox/entities/weapons/gmod_tool/stools/lvsturret.lua
lifestorm c6d9b6f580 Upload
2024-08-05 18:40:29 +03:00

155 lines
5.6 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
TOOL.Category = "LVS"
TOOL.Name = "#tool.lvsturret.name"
TOOL.Command = nil
TOOL.ConfigName = ""
cleanup.Register( "lvsturret" )
CreateConVar("sbox_maxlvsturret", 1, "FCVAR_NOTIFY")
TOOL.ClientConVar[ "delay" ] = "0.05"
TOOL.ClientConVar[ "damage" ] = "15"
TOOL.ClientConVar[ "speed" ] = "30000"
TOOL.ClientConVar[ "size" ] = "1"
TOOL.ClientConVar[ "spread" ] = "0"
TOOL.ClientConVar[ "penetration" ] = "10"
TOOL.ClientConVar[ "splashdamage" ] = "0"
TOOL.ClientConVar[ "splashradius" ] = "0"
TOOL.ClientConVar[ "tracer" ] = "lvs_tracer_orange"
TOOL.ClientConVar[ "splasheffect" ] = "lvs_bullet_impact"
if CLIENT then
language.Add( "tool.lvsturret.name", "Projectile Turret" )
language.Add( "tool.lvsturret.desc", "A Tool used to spawn Turrets" )
language.Add( "tool.lvsturret.0", "Left click to spawn or update a turret" )
language.Add( "tool.lvsturret.1", "Left click to spawn or update a turret" )
language.Add( "Cleanup_lvsturret", "[LVS] Projectile Turret" )
language.Add( "Cleaned_lvsturret", "Cleaned up all [LVS] Projectile Turrets" )
language.Add( "SBoxLimit_lvsturret", "You've reached the Projectile Turret limit!" )
end
function TOOL:LeftClick( trace )
if CLIENT then return true end
local ply = self:GetOwner()
if not istable( WireLib ) then
ply:PrintMessage( HUD_PRINTTALK, "[LVS]: WIREMOD REQUIRED" )
ply:SendLua( "gui.OpenURL( 'https://steamcommunity.com/sharedfiles/filedetails/?id=160250458' )")
end
if IsValid( trace.Entity ) and trace.Entity:GetClass():lower() == "lvs_turret" then
self:UpdateTurret( trace.Entity )
else
local turret = self:MakeTurret( ply, trace.HitPos + trace.HitNormal * 5 )
undo.Create("Turret")
undo.AddEntity( turret )
undo.SetPlayer( ply )
undo.Finish()
end
return true
end
function TOOL:RightClick( trace )
return false
end
if SERVER then
function TOOL:UpdateTurret( ent )
if not IsValid( ent ) then return end
ent:SetShootDelay( self:GetClientNumber( "delay" ) )
ent:SetDamage( math.Clamp( self:GetClientNumber( "damage" ), 0, 1000 ) )
ent:SetSpeed( math.Clamp( self:GetClientNumber( "speed" ), 10000, 100000 ) )
ent:SetSize( math.Clamp( self:GetClientNumber( "size" ), 0, 50 ) )
ent:SetSpread( math.Clamp( self:GetClientNumber( "spread" ), 0, 1 ) )
ent:SetPenetration( math.Clamp( self:GetClientNumber( "penetration" ), 0, 500 ) )
ent:SetSplashDamage( math.Clamp( self:GetClientNumber( "splashdamage" ), 0, 1000 ) )
ent:SetSplashDamageRadius( math.Clamp( self:GetClientNumber( "splashradius" ), 0, 750 ) )
ent:SetTracer( self:GetClientInfo( "tracer" ) )
ent:SetSplashDamageType( self:GetClientInfo( "splasheffect" ) )
end
function TOOL:MakeTurret( ply, Pos, Ang )
if not ply:CheckLimit( "lvsturret" ) then return NULL end
local turret = ents.Create( "lvs_turret" )
if not IsValid( turret ) then return NULL end
turret:SetPos( Pos )
turret:SetAngles( Angle(0,0,0) )
turret:Spawn()
turret.Attacker = ply
self:UpdateTurret( turret )
ply:AddCount( "lvsturret", turret )
ply:AddCleanup( "lvsturret", turret )
return turret
end
end
local ConVarsDefault = TOOL:BuildConVarList()
function TOOL.BuildCPanel( CPanel )
CPanel:AddControl( "ComboBox", { MenuButton = 1, Folder = "lvs_turrets", Options = { [ "#preset.default" ] = ConVarsDefault }, CVars = table.GetKeys( ConVarsDefault ) } )
CPanel:AddControl( "Header", { Text = "#tool.lvsturret.name", Description = "#tool.lvsturret.desc" } )
local TracerEffect = {Label = "Tracer Effect", MenuButton = 0, Options={}, CVars = {}}
local TracerOptions = {
["LaserBlue"] = "lvs_laser_blue",
["LaserRed"] = "lvs_laser_red",
["LaserGreen"] = "lvs_laser_green",
["TracerGreen"] = "lvs_tracer_green",
["TracerOrange"] = "lvs_tracer_orange",
["TracerWhite"] = "lvs_tracer_white",
["TracerYellow"] = "lvs_tracer_yellow",
["AutoCannon"] = "lvs_tracer_autocannon",
["Cannon"] = "lvs_tracer_cannon",
}
for id, name in pairs( TracerOptions ) do
if not file.Exists( "effects/"..name..".lua", "LUA" ) then continue end
TracerEffect["Options"][id] = { lvsturret_tracer = name }
end
CPanel:AddControl("ComboBox", TracerEffect )
CPanel:AddControl( "Slider", { Label = "Shoot Delay", Type = "Float", Min = 0, Max = 2.0, Command = "lvsturret_delay" } )
CPanel:AddControl( "Slider", { Label = "Damage", Type = "Float", Min = 0, Max = 1000, Command = "lvsturret_damage" } )
CPanel:AddControl( "Slider", { Label = "Bullet Speed", Type = "Float", Min = 10000, Max = 100000, Command = "lvsturret_speed" } )
CPanel:AddControl( "Slider", { Label = "Bullet Spread", Type = "Float", Min = 0, Max = 1, Command = "lvsturret_spread" } )
CPanel:AddControl( "Slider", { Label = "Hull Size", Type = "Float", Min = 0, Max = 50, Command = "lvsturret_size" } )
CPanel:AddControl( "Slider", { Label = "Armor Penetration (mm)", Type = "Float", Min = 0, Max = 500, Command = "lvsturret_penetration" } )
CPanel:AddControl( "Slider", { Label = "Splash Damage", Type = "Float", Min = 0, Max = 1000, Command = "lvsturret_splashdamage" } )
CPanel:AddControl( "Slider", { Label = "Splash Radius", Type = "Float", Min = 0, Max = 750, Command = "lvsturret_splashradius" } )
local SplashType = {Label = "Splash Type", MenuButton = 0, Options={}, CVars = {}}
SplashType["Options"][ "Shrapnel" ] = { lvsturret_splasheffect = "lvs_bullet_impact" }
SplashType["Options"][ "Explosive" ] = { lvsturret_splasheffect = "lvs_bullet_impact_explosive" }
CPanel:AddControl("ComboBox", SplashType )
end