Files
wnsrc/lua/weapons/gmod_tool/stools/resizer.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

108 lines
3.7 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 = "Poser"
TOOL.Name = "#Resizer"
TOOL.Command = nil
TOOL.ConfigName = ""
if (CLIENT) then
language.Add("Tool.resizer.name","Resizer")
language.Add("Tool.resizer.desc","Resizes props/ragdolls/NPCs")
language.Add("Tool.resizer.0","Click on an object to resize it. Right click to reset.")
CreateClientConVar( "resizer_xsize", "2", false, true )
CreateClientConVar( "resizer_ysize", "2", false, true )
CreateClientConVar( "resizer_zsize", "2", false, true )
CreateClientConVar( "resizer_xyzsize", "2", false, false )
CreateClientConVar( "resizer_allbones", "0", false, true )
local function _resizer_xyzcallback(cvar, prevValue, newValue)
RunConsoleCommand("resizer_xsize", newValue);
RunConsoleCommand("resizer_ysize", newValue);
RunConsoleCommand("resizer_zsize", newValue);
end
cvars.AddChangeCallback("resizer_xyzsize", _resizer_xyzcallback)
end --[[ if (CLIENT) then ]]--
local _resizer_double_fix = false
function TOOL:RightClick( trace )
if (trace.HitNonWorld && trace.Entity != nil && trace.Entity != 0) then
if (SERVER) then
//props | ragdolls | npcs
if (trace.Entity:GetClass() == "prop_physics" || trace.Entity:GetClass() == "prop_ragdoll" || trace.Entity:IsNPC()) then
for i=0, trace.Entity:GetBoneCount() do
trace.Entity:ManipulateBoneScale( i, Vector(1, 1, 1) )
end
end
end
return true
end
return false
end
function TOOL:LeftClick( trace )
if (trace.HitNonWorld && trace.Entity != nil && trace.Entity != 0) then
if (SERVER) then
local scale = Vector( tonumber( self:GetOwner():GetInfo("resizer_xsize")),
tonumber( self:GetOwner():GetInfo("resizer_ysize")),
tonumber( self:GetOwner():GetInfo("resizer_zsize")) )
//props
if (trace.Entity:GetClass() == "prop_physics") then
for i=0, trace.Entity:GetBoneCount() do
trace.Entity:ManipulateBoneScale( i, scale )
end
end
//ragdolls and npcs
if (trace.Entity:GetClass() == "prop_ragdoll" || trace.Entity:IsNPC()) then
if ( tonumber(self:GetOwner():GetInfo("resizer_allbones")) > 0 ) then
for i=0, trace.Entity:GetBoneCount() do
trace.Entity:ManipulateBoneScale( i, scale )
end
else
local Bone = trace.Entity:TranslatePhysBoneToBone( trace.PhysicsBone )
trace.Entity:ManipulateBoneScale( Bone, scale )
end
end
end
return true
end
return false
end
function TOOL.BuildCPanel( CPanel )
CPanel:AddControl( "Header", { Text = "Resizer", Description = "Does not resize the hitbox or shadow." } )
CPanel:AddControl( "ComboBox", {
Label = "#tool.presets",
MenuButton = 1,
Folder = "resizer",
Options = { Default = { resizer_xsize = '1', resizer_ysize='1', resizer_zsize='1', resizer_xyzsize='1'} },
CVars = { "resizer_xsize", "resizer_ysize", "resizer_zsize", "resizer_xyzsize"}
})
CPanel:AddControl( "Slider", { Label = "X size", Type = "Float", Command = "resizer_xsize", Min = "0.01", Max = "10" } )
CPanel:AddControl( "Slider", { Label = "Y size", Type = "Float", Command = "resizer_ysize", Min = "0.01", Max = "10" } )
CPanel:AddControl( "Slider", { Label = "Z size", Type = "Float", Command = "resizer_zsize", Min = "0.01", Max = "10" } )
CPanel:AddControl( "Slider", { Label = "XYZ", Type = "Float", Command = "resizer_xyzsize", Min = "0.01", Max = "10" } )
CPanel:AddControl( "Checkbox", { Label = "Resize all bones of ragdolls/NPCs at once", Command = "resizer_allbones" } )
end