mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
172 lines
5.3 KiB
Lua
172 lines
5.3 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 = "Render"
|
||
|
|
TOOL.Name = "#tool.trails.name"
|
||
|
|
|
||
|
|
TOOL.ClientConVar[ "r" ] = 255
|
||
|
|
TOOL.ClientConVar[ "g" ] = 255
|
||
|
|
TOOL.ClientConVar[ "b" ] = 255
|
||
|
|
TOOL.ClientConVar[ "a" ] = 255
|
||
|
|
|
||
|
|
TOOL.ClientConVar[ "length" ] = 5
|
||
|
|
TOOL.ClientConVar[ "startsize" ] = 32
|
||
|
|
TOOL.ClientConVar[ "endsize" ] = 0
|
||
|
|
|
||
|
|
TOOL.ClientConVar[ "material" ] = "trails/lol"
|
||
|
|
|
||
|
|
TOOL.Information = {
|
||
|
|
{ name = "left" },
|
||
|
|
{ name = "right" }
|
||
|
|
}
|
||
|
|
|
||
|
|
cleanup.Register( "trails" )
|
||
|
|
|
||
|
|
local function SetTrails( ply, ent, data )
|
||
|
|
|
||
|
|
if ( IsValid( ent.SToolTrail ) ) then
|
||
|
|
|
||
|
|
ent.SToolTrail:Remove()
|
||
|
|
ent.SToolTrail = nil
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
if ( !data ) then
|
||
|
|
|
||
|
|
duplicator.ClearEntityModifier( ent, "trail" )
|
||
|
|
return
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Just don't even bother with invisible trails
|
||
|
|
if ( data.StartSize <= 0 && data.EndSize <= 0 ) then return end
|
||
|
|
|
||
|
|
-- This is here to fix crash exploits
|
||
|
|
if ( !game.SinglePlayer() ) then
|
||
|
|
|
||
|
|
-- Lock down the trail material - only allow what the server allows
|
||
|
|
if ( !list.Contains( "trail_materials", data.Material ) ) then return end
|
||
|
|
|
||
|
|
-- Clamp sizes in multiplayer
|
||
|
|
data.Length = math.Clamp( data.Length, 0.1, 10 )
|
||
|
|
data.EndSize = math.Clamp( data.EndSize, 0, 128 )
|
||
|
|
data.StartSize = math.Clamp( data.StartSize, 0, 128 )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
data.StartSize = math.max( 0.0001, data.StartSize )
|
||
|
|
|
||
|
|
local trail_entity = util.SpriteTrail( ent, 0, data.Color, false, data.StartSize, data.EndSize, data.Length, 1 / ( ( data.StartSize + data.EndSize ) * 0.5 ), data.Material .. ".vmt" )
|
||
|
|
|
||
|
|
ent.SToolTrail = trail_entity
|
||
|
|
|
||
|
|
if ( IsValid( ply ) ) then
|
||
|
|
ply:AddCleanup( "trails", trail_entity )
|
||
|
|
end
|
||
|
|
|
||
|
|
duplicator.StoreEntityModifier( ent, "trail", data )
|
||
|
|
|
||
|
|
return trail_entity
|
||
|
|
|
||
|
|
end
|
||
|
|
if ( SERVER ) then
|
||
|
|
duplicator.RegisterEntityModifier( "trail", SetTrails )
|
||
|
|
end
|
||
|
|
|
||
|
|
function TOOL:LeftClick( trace )
|
||
|
|
|
||
|
|
if ( !IsValid( trace.Entity ) ) then return false end
|
||
|
|
if ( trace.Entity:IsPlayer() ) then return false end
|
||
|
|
if ( CLIENT ) then return true end
|
||
|
|
|
||
|
|
local r = math.Clamp( self:GetClientNumber( "r", 255 ), 0, 255 )
|
||
|
|
local g = math.Clamp( self:GetClientNumber( "g", 255 ), 0, 255 )
|
||
|
|
local b = math.Clamp( self:GetClientNumber( "b", 255 ), 0, 255 )
|
||
|
|
local a = math.Clamp( self:GetClientNumber( "a", 255 ), 0, 255 )
|
||
|
|
|
||
|
|
local length = self:GetClientNumber( "length", 5 )
|
||
|
|
local endsize = self:GetClientNumber( "endsize", 0 )
|
||
|
|
local startsize = self:GetClientNumber( "startsize", 32 )
|
||
|
|
local mat = self:GetClientInfo( "material" )
|
||
|
|
|
||
|
|
local trail = SetTrails( self:GetOwner(), trace.Entity, {
|
||
|
|
Color = Color( r, g, b, a ),
|
||
|
|
Length = length,
|
||
|
|
StartSize = startsize,
|
||
|
|
EndSize = endsize,
|
||
|
|
Material = mat
|
||
|
|
} )
|
||
|
|
|
||
|
|
if ( IsValid( trail ) ) then
|
||
|
|
undo.Create( "Trail" )
|
||
|
|
undo.AddEntity( trail )
|
||
|
|
undo.SetPlayer( self:GetOwner() )
|
||
|
|
undo.Finish()
|
||
|
|
end
|
||
|
|
|
||
|
|
return true
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function TOOL:RightClick( trace )
|
||
|
|
|
||
|
|
if ( !IsValid( trace.Entity ) ) then return false end
|
||
|
|
if ( trace.Entity:IsPlayer() ) then return false end
|
||
|
|
if ( CLIENT ) then return true end
|
||
|
|
|
||
|
|
SetTrails( self:GetOwner(), trace.Entity, nil )
|
||
|
|
return true
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Add default materials to list
|
||
|
|
-- Note: Addons can easily add to this list in their -- own file placed in autorun or something.
|
||
|
|
--
|
||
|
|
list.Set( "trail_materials", "#trail.plasma", "trails/plasma" )
|
||
|
|
list.Set( "trail_materials", "#trail.tube", "trails/tube" )
|
||
|
|
list.Set( "trail_materials", "#trail.electric", "trails/electric" )
|
||
|
|
list.Set( "trail_materials", "#trail.smoke", "trails/smoke" )
|
||
|
|
list.Set( "trail_materials", "#trail.laser", "trails/laser" )
|
||
|
|
list.Set( "trail_materials", "#trail.physbeam", "trails/physbeam" )
|
||
|
|
list.Set( "trail_materials", "#trail.love", "trails/love" )
|
||
|
|
list.Set( "trail_materials", "#trail.lol", "trails/lol" )
|
||
|
|
|
||
|
|
if ( IsMounted( "tf" ) ) then
|
||
|
|
list.Set( "trail_materials", "#trail.beam001_blu", "effects/beam001_blu" )
|
||
|
|
list.Set( "trail_materials", "#trail.beam001_red", "effects/beam001_red" )
|
||
|
|
list.Set( "trail_materials", "#trail.beam001_white", "effects/beam001_white" )
|
||
|
|
list.Set( "trail_materials", "#trail.arrowtrail_blu", "effects/arrowtrail_blu" )
|
||
|
|
list.Set( "trail_materials", "#trail.arrowtrail_red", "effects/arrowtrail_red" )
|
||
|
|
list.Set( "trail_materials", "#trail.repair_claw_trail_blue", "effects/repair_claw_trail_blue" )
|
||
|
|
list.Set( "trail_materials", "#trail.repair_claw_trail_red", "effects/repair_claw_trail_red" )
|
||
|
|
list.Set( "trail_materials", "#trail.australiumtrail_red", "effects/australiumtrail_red" )
|
||
|
|
list.Set( "trail_materials", "#trail.beam_generic01", "effects/beam_generic01" )
|
||
|
|
end
|
||
|
|
|
||
|
|
local ConVarsDefault = TOOL:BuildConVarList()
|
||
|
|
|
||
|
|
function TOOL.BuildCPanel( CPanel )
|
||
|
|
|
||
|
|
CPanel:AddControl( "Header", { Description = "#tool.trails.desc" } )
|
||
|
|
|
||
|
|
CPanel:AddControl( "ComboBox", { MenuButton = 1, Folder = "trails", Options = { [ "#preset.default" ] = ConVarsDefault }, CVars = table.GetKeys( ConVarsDefault ) } )
|
||
|
|
|
||
|
|
CPanel:AddControl( "Color", { Label = "#tool.trails.color", Red = "trails_r", Green = "trails_g", Blue = "trails_b", Alpha = "trails_a" } )
|
||
|
|
|
||
|
|
CPanel:NumSlider( "#tool.trails.length", "trails_length", 0, 10, 2 )
|
||
|
|
CPanel:NumSlider( "#tool.trails.startsize", "trails_startsize", 0, 128, 2 )
|
||
|
|
CPanel:NumSlider( "#tool.trails.endsize", "trails_endsize", 0, 128, 2 )
|
||
|
|
|
||
|
|
CPanel:MatSelect( "trails_material", list.Get( "trail_materials" ), true, 0.25, 0.25 )
|
||
|
|
|
||
|
|
end
|