mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
155 lines
5.6 KiB
Lua
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
|