TOOL.Category="Construction" TOOL.Name="#Shield" TOOL.Command=nil TOOL.ConfigName="" TOOL.ClientConVar['toggle'] = "0" TOOL.ClientConVar['size'] = "250" TOOL.ClientConVar['model'] = 'models/props_combine/breenglobe.mdl' TOOL.ClientConVar['alwayseffect'] = "0" cleanup.Register("shields") if ( CLIENT ) then language.Add( 'Tool_shield_name', 'Shielding STOOL' ) language.Add( 'Tool_shield_desc', 'Create a Shield' ) language.Add( 'Tool_shield_0', 'Select size, spawn and press button to toggle.' ) language.Add( 'Undone_shield', 'Shield Undone' ) language.Add( 'Cleanup_shields', 'Shield' ) language.Add( 'Cleaned_shields', 'Removed all shields.' ) language.Add( 'SBoxLimit_shields', 'Maximum Shields Reached' ) end function TOOL:LeftClick( trace ) if trace.Entity && (trace.Entity:IsPlayer() ) then return false end if(CLIENT) then return true end if(!SERVER) then return false end if ( !self:GetSWEP():CheckLimit( "shields" ) ) then return false end local ply = self:GetOwner() local Pos = trace.HitPos local Ang = trace.HitNormal:Angle() Ang.pitch = Ang.pitch + 90 local togglekey = self:GetClientNumber( 'toggle' ) local size = self:GetClientNumber( 'size' ) local model = self:GetClientInfo('model') local always = self:GetClientNumber('alwayseffect') == 1 ent2 = MakeShieldXTRAXTREMELOLOL( ply, Ang, Pos, togglekey,size,model,always) ent2:SetPos( trace.HitPos - trace.HitNormal * ent2:OBBMins().z) if ( trace.Entity:IsValid() ) then const = constraint.Weld( ent2, trace.Entity, 0, trace.PhysicsBone, 0, collision == 0, true ) nocollide = constraint.NoCollide( ent, trace.Entity, 0, trace.PhysicsBone ) trace.Entity:DeleteOnRemove( ent2 ) end undo.Create("shield") undo.AddEntity(ent2) undo.AddEntity(const) undo.SetPlayer( ply ) undo.Finish() ply:AddCleanup( "shields", ent2 ) ply:AddCleanup( "shields", const ) return true end if SERVER then CreateConVar('sbox_maxshields',1) function MakeShieldXTRAXTREMELOLOL( ply, Ang, Pos, togglekey,size,model,always) if ( !ply:CheckLimit( "shields" ) ) then return nil end local ent2 = ents.Create( 'p_propshield' ) if !ent2:IsValid() then return false end ent2:SetModel( model ) ent2:SetAngles(Ang) ent2:SetPos(Pos) ent2:SetKeyValue("size",size) ent2:Spawn() if always then ent2:SetNetworkedBool("alwayson",true) end ent2:SetVar('Owner',ply) numpad.OnUp(ply, togglekey, 'DoToggle', ent2) local rtable = { togglekey=togglekey, size=size } table.Merge(ent2:GetTable(), rtable ) ply:AddCount('shields', ent2) return ent2 end duplicator.RegisterEntityClass( "p_propshield", MakeShieldXTRAXTREMELOLOL, "Ang", "Pos", "togglekey","size","model" ) local function DoToggle( ply, ent) if (!ent:IsValid()) then return false end ent:Fire("toggle","",0) end numpad.Register("DoToggle",DoToggle) end function TOOL.BuildCPanel( cp ) cp:AddControl( 'Header', { Text = '#Tool_shield_name', Description = '#Tool_shield_desc' } ) cp:AddControl( "PropSelect", { Label = "Model", ConVar = "shield_model", Models = list.Get( "ShieldModels" ) } ) cp:AddControl( 'Slider', { Label = 'Size:', Type = "Float", Min = 100, Max = 1000, Command = 'shield_size' } ) cp:AddControl('Numpad', { ButtonSize = '22', Label = 'Toggle:', Command = 'shield_toggle', } ) cp:AddControl("Checkbox",{Label = "Always do radius effect (a bit slow)", Command = "shield_alwayseffect"}) end list.Set( "ShieldModels", "models/props_combine/breenglobe.mdl", {} ) list.Set( "ShieldModels", "models/props_junk/plasticbucket001a.mdl", {} ) list.Set( "ShieldModels", "models/props_junk/propane_tank001a.mdl", {} ) list.Set( "ShieldModels", "models/props_c17/FurnitureShelf001b.mdl", {} ) list.Set( "ShieldModels", "models/props_junk/PopCan01a.mdl", {} )