80 lines
2.5 KiB
Lua
80 lines
2.5 KiB
Lua
WireToolSetup.setCategory( "Memory" )
|
|
WireToolSetup.open( "cd_ray", "CD Ray", "gmod_wire_cd_ray", nil, "CD Rays" )
|
|
|
|
if ( CLIENT ) then
|
|
language.Add( "Tool.wire_cd_ray.name", "CD Ray Tool (Wire)" )
|
|
language.Add( "Tool.wire_cd_ray.desc", "Spawns a CD Ray." )
|
|
language.Add( "WireCDRayTool_cd_ray", "CD Ray:" )
|
|
language.Add( "sboxlimit_wire_cd_rays", "You've hit CD Rays limit!" )
|
|
TOOL.Information = {
|
|
{ name = "left", text = "Create/Update " .. TOOL.Name },
|
|
{ name = "right", text = "Create CD lock (to keep CD in same spot)" },
|
|
}
|
|
end
|
|
|
|
WireToolSetup.BaseLang()
|
|
|
|
if (SERVER) then
|
|
CreateConVar('sbox_maxwire_cd_rays', 20)
|
|
CreateConVar('sbox_maxwire_cd_locks', 20)
|
|
end
|
|
|
|
TOOL.ClientConVar[ "model" ] = "models/jaanus/wiretool/wiretool_beamcaster.mdl"
|
|
TOOL.ClientConVar[ "lockmodel" ] = "models/venompapa/wirecdlock.mdl"
|
|
TOOL.ClientConVar[ "Range" ] = "64"
|
|
TOOL.ClientConVar[ "DefaultZero" ] = "0"
|
|
|
|
if SERVER then
|
|
function TOOL:GetConVars()
|
|
return self:GetClientNumber("Range"), self:GetClientNumber("DefaultZero") ~= 0
|
|
end
|
|
|
|
-- Uses default WireToolObj:MakeEnt's WireLib.MakeWireEnt function
|
|
end
|
|
|
|
|
|
function TOOL:RightClick(trace)
|
|
if (!trace.HitPos) then return false end
|
|
if (trace.Entity:IsPlayer()) then return false end
|
|
if ( CLIENT ) then return true end
|
|
|
|
local ply = self:GetOwner()
|
|
|
|
if ( trace.Entity:IsValid() && trace.Entity:GetClass() == "gmod_wire_cd_lock" ) then
|
|
return true
|
|
end
|
|
|
|
if ( !self:GetSWEP():CheckLimit( "wire_cd_locks" ) ) then return false end
|
|
|
|
local Ang = trace.HitNormal:Angle()
|
|
Ang.pitch = Ang.pitch + 90
|
|
|
|
local range = self:GetClientNumber("Range")
|
|
local defZero = (self:GetClientNumber("DefaultZero") ~= 0)
|
|
local model = self:GetClientInfo("lockmodel")
|
|
|
|
if not util.IsValidModel( model ) or not util.IsValidProp( model ) then return end
|
|
|
|
local wire_cd_lock = WireLib.MakeWireEnt(ply, {Class = "gmod_wire_cd_lock", Pos=trace.HitPos, Angle=Ang, Model=model})
|
|
|
|
local min = wire_cd_lock:OBBMins()
|
|
wire_cd_lock:SetPos( trace.HitPos - trace.HitNormal * min.z )
|
|
|
|
local const = WireLib.Weld(wire_cd_lock, trace.Entity, trace.PhysicsBone, true)
|
|
|
|
undo.Create("Wire Data CD Locky")
|
|
undo.AddEntity( wire_cd_lock )
|
|
undo.AddEntity( const )
|
|
undo.SetPlayer( ply )
|
|
undo.Finish()
|
|
|
|
ply:AddCleanup( "wire_cd_locks", wire_cd_lock )
|
|
ply:AddCleanup( "wire_cd_locks", const )
|
|
|
|
return true
|
|
end
|
|
|
|
function TOOL.BuildCPanel(panel)
|
|
WireDermaExts.ModelSelect(panel, "wire_cd_ray_Model", list.Get( "Wire_Laser_Tools_Models" ), 1)
|
|
panel:NumSlider("Range","wire_cd_ray_Range",1,512,2)
|
|
end
|