Files
wnsrc/lua/weapons/gmod_tool/stools/unbreakable.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

161 lines
4.2 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
| 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/
--]]
/*******************
*
* Unbreakable STool
*
*
* Date : 28 janvier 2007 Date : 04 December 2013 - 16th June 2015
*
* Auteur : Chaussette Author : XxWestKillzXx + Gui + Sparky
*
*******************************************************************************/
if( SERVER ) then
// Comment this line if you don't want to send this stool to clients
AddCSLuaFile( "weapons/gmod_tool/stools/unbreakable.lua" )
local RemakeFilterDamage
local function MakeFilterDamage()
local FilterDamage = ents.Create( "filter_activator_name" )
FilterDamage:SetKeyValue( "TargetName", "FilterDamage" )
FilterDamage:SetKeyValue( "negated", "1" )
FilterDamage:Spawn()
FilterDamage:CallOnRemove( "RemakeFilter", function () timer.Simple(0, RemakeFilterDamage) end )
end
RemakeFilterDamage = function()
MakeFilterDamage()
for k, v in pairs(ents.GetAll()) do
if v:GetVar( "Unbreakable" ) then
Element:Fire ( "SetDamageFilter", "FilterDamage", 0 )
end
end
end
hook.Add( "InitPostEntity", "MakeFilterDamage", MakeFilterDamage )
local function MakeUnbreakable( Element, Value )
local Filter = ""
if( Value ) then Filter = "FilterDamage" end
if( Element && Element:IsValid() ) then
Element:SetVar( "Unbreakable", Value )
Element:Fire ( "SetDamageFilter", Filter, 0 )
duplicator.StoreEntityModifier( Element, "Unbreakable", {On = Value} )
end
end
function TOOL:Unbreakable( Element, Value )
MakeUnbreakable( Element, Value )
end
local function dupeUnbreakable( Player, Entity, Data )
if Data.On then
MakeUnbreakable( Entity, true )
end
end
duplicator.RegisterEntityModifier( "Unbreakable", dupeUnbreakable )
function TOOL:Run( Element, Value )
if( Element && Element:IsValid() && ( Element:GetVar( "Unbreakable" ) != Value )) then
self:Unbreakable( Element, Value )
if( Element.Constraints ) then
for x, Constraint in pairs( Element.Constraints ) do
for x = 1, 4, 1 do
if( Constraint[ "Ent" .. x ] ) then self:Run( Constraint[ "Ent" .. x ], Value ) end
end
end
end
end
end
end
TOOL.Category = "Constraints"
TOOL.Name = "Unbreakable"
TOOL.Command = nil
TOOL.ConfigName = ""
TOOL.ClientConVar[ "toggle" ] = "1"
if ( CLIENT ) then
language.Add( "tool.unbreakable.name", "Unbreakable" )
language.Add( "tool.unbreakable.desc", "Make a prop unbreakable" )
language.Add( "tool.unbreakable.0", "Left click to make a prop unbreakable. Right click to restore its previous settings" )
language.Add( "tool.unbreakable.toggle", "Extend To Constrained Objects" )
end
function TOOL:Action( Element, Value )
if( Element && Element:IsValid() ) then
if( CLIENT ) then return true end
if( self:GetClientNumber( "toggle" ) == 0 ) then
self:Unbreakable( Element, Value )
else
self:Run( Element, Value )
end
return true
end
return false
end
function TOOL:LeftClick( Target )
return self:Action( Target.Entity, true )
end
function TOOL:RightClick( Target )
return self:Action( Target.Entity, false )
end
function TOOL.BuildCPanel( Panel )
Panel:AddControl( "Header", { Text = "#tool.unbreakable.name", Description = "#tool.unbreakable.desc" } )
Panel:AddControl( "Checkbox", { Label = "#tool.unbreakable.toggle", Command = "unbreakable_toggle" } )
end