Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Num = 0
- local Anchored = {}
- function GetMesh(Obj)
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("DataModelMesh") then
- return v
- end
- end
- end
- function GetCFrame(Obj)
- if Obj == nil then
- return
- end
- if Obj == Workspace then
- return CFrame.new(0,0,0)
- end
- if Obj:IsA("Model") then
- return Obj:GetModelCFrame()
- end
- if Obj:IsA("BasePart") then
- return Obj.CFrame
- end
- return
- end
- function GetSize(Obj)
- if Obj == nil then
- return
- end
- if Obj == Workspace then
- return Vector3.new(0,0,0)
- end
- if Obj:IsA("Model") then
- return Obj:GetModelSize()
- end
- if Obj:IsA("BasePart") then
- return Obj.Size
- end
- return
- end
- function SaveWelds(Obj,Welds,Scale)
- if Welds == nil then
- local Welds = {}
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("JointInstance") then
- Welds[#Welds+1] = {v,v.Part0,v.Part1,v.C0,v.C1,v.Parent}
- v.Parent = nil
- end
- SaveWelds(v,Welds,Scale)
- end
- return Welds
- else
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("JointInstance") then
- Welds[#Welds+1] = {v,v.Part0,v.Part1,v.C0,v.C1,v.Parent}
- v.Parent = nil
- end
- SaveWelds(v,Welds,Scale)
- end
- end
- end
- function GetMass(Obj)
- local Mass = 0
- if Obj:IsA("BasePart") then
- Mass = Mass+Obj:GetMass()
- end
- for i,v in pairs(Obj:GetChildren()) do
- Mass = Mass+GetMass(v)
- end
- return Mass
- end
- function SaveConnectedParts(Obj,Welds)
- if Welds == nil then
- local Welds = {}
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("BasePart") then
- for i2,v2 in pairs(v:GetConnectedParts()) do
- Welds[#Welds+1] = {Instance.new("Weld"),v,v2,v.CFrame:toObjectSpace(v2.CFrame),CFrame.new(0,0,0),v}
- end
- v:BreakJoints()
- end
- SaveConnectedParts(v,Welds)
- end
- return Welds
- else
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("BasePart") then
- for i2,v2 in pairs(v:GetConnectedParts()) do
- Welds[#Welds+1] = {Instance.new("Weld"),v,v2,v.CFrame:toObjectSpace(v2.CFrame),CFrame.new(0,0,0),v}
- end
- v:BreakJoints()
- end
- SaveConnectedParts(v,Welds)
- end
- end
- end
- function ResizeWelds(Welds,Scale)
- for i,v in pairs(Welds) do
- v[1].Parent = v[6]
- v[1].Part0 = v[2]
- v[1].Part1 = v[3]
- local Vec = v[4].p
- local Vec2 = v[5].p
- v[1].C0 = CFrame.new(Vec*Scale)*(v[4]-Vec)
- v[1].C1 = CFrame.new(Vec2*Scale)*(v[5]-Vec2)
- end
- end
- function AnchorParts(Obj)
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("BasePart") and v.Anchored == false then
- v.Anchored = true
- Anchored[v] = v
- end
- AnchorParts(v)
- end
- end
- function ResizeFunc(Obj,Scale,Welds,Center)
- Center = Center or CFrame.new(0,0,0)
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("BasePart") then
- --[[Num = Num+1
- if Num == 100 then
- wait(0.25)
- Num = 0
- end]]
- local Size = v.Size
- for i2,v2 in pairs(v:GetChildren()) do
- if v2.Name == "ScaleInserted" then
- Size = Size*v2.Scale
- v2:Destroy()
- elseif v2.Name:sub(1,14) == "ScaleInserted:" then
- local X,Y,Z;
- for Match in v2.Name:sub(15):gmatch("[^,%s]+") do
- if Y ~= nil then
- Z = tonumber(Match)
- elseif X ~= nil then
- Y = tonumber(Match)
- else
- X = tonumber(Match)
- end
- end
- Size = Vector3.new(X,Y,Z)
- v2:Destroy()
- end
- end
- pcall(function() v.FormFactor = "Custom" end)
- local CFr = v.CFrame
- local Want = Size*Scale
- v.Size = Want
- if v:IsA("VehicleSeat") then
- Seats[#Seats+1] = v
- end
- if v.Size ~= Want then
- local Name = ""
- for Match in v.Name:gmatch("[^%s]+") do
- Name = Name..Match
- end
- local CharMesh = nil
- for i,v in pairs(Obj:GetChildren()) do
- if v:IsA("CharacterMesh") and tostring(v.BodyPart):sub(15) == Name then
- CharMesh = v
- end
- end
- if CharMesh == nil then
- local Mesh = GetMesh(v)
- if Mesh == nil then
- local Mesh;
- if v:IsA("WedgePart") then
- Mesh = Instance.new("SpecialMesh",v)
- Mesh.MeshType = "Wedge"
- else
- local HasShape = pcall(function() return v.Shape end)
- if HasShape then
- if v.Shape == "Ball" then
- Mesh = Instance.new("SpecialMesh",v)
- Mesh.MeshType = "Sphere"
- elseif v.Shape == "Cylinder" then
- Mesh = Instance.new("SpecialMesh",v)
- Mesh.MeshType = "Cylinder"
- else
- Mesh = Instance.new("BlockMesh",v)
- end
- else
- Mesh = Instance.new("BlockMesh",v)
- end
- end
- Mesh.Scale = Want/v.Size
- Mesh.Name = "ScaleInserted"
- else
- if (Mesh.ClassName == "SpecialMesh" and Mesh.MeshType ~= Enum.MeshType.FileMesh) or Mesh.ClassName ~= "SpecialMesh" then
- Mesh.Scale = Want/v.Size*Mesh.Scale
- end
- end
- else
- local Mesh = Instance.new("SpecialMesh",v)
- Mesh.Name = "ScaleInserted:"..tostring(Want)
- Mesh.MeshType = "FileMesh"
- Mesh.MeshId = "rbxassetid://"..CharMesh.MeshId
- --Mesh.TextureId = CharMesh.BaseTextureId
- Mesh.Scale = Vector3.new(1,1,1)*Want.X/Scale
- end
- end
- v:BreakJoints()
- local Rel = Center:toObjectSpace(CFr)
- local New = CFrame.new(Rel.p*Scale)*(Rel-Rel.p)
- v.CFrame = Center*New
- v:BreakJoints()
- elseif v:IsA("DataModelMesh") then
- if v.ClassName == "SpecialMesh" then
- if v.MeshType == Enum.MeshType.FileMesh then
- v.Scale = v.Scale*Scale
- end
- else
- --v.Scale = v.Scale*Scale
- end
- end
- ResizeFunc(v,Scale,Welds,Center)
- end
- end
- function Resize(Obj,Scale,Break)
- local Welds = SaveWelds(Obj,nil,Scale)
- SaveConnectedParts(Obj,Welds)
- local Mass = GetMass(Obj)
- local Center = GetCFrame(Obj)
- if Center ~= nil and Workspace:FindFirstChild("Base") ~= nil then
- --Center = Center-Vector3.new(0,GetSize(Obj).Y/2,0)
- Center = CFrame.new(Center.X,Workspace.Base.Position.Y+Workspace.Base.Size.Y/2,Center.Z)*(Center-Center.p)
- end
- Seats = {}
- ResizeFunc(Obj,Scale,Welds,Center)
- ResizeWelds(Welds,Scale)
- local Mass2 = GetMass(Obj)
- for i,v in pairs(Seats) do
- v.Torque = Mass2*(v.Torque/Mass)
- v.TurnSpeed = v.TurnSpeed*Scale
- v.MaxSpeed = v.MaxSpeed*Scale
- end
- end
- game.Players.tyridge77.Chatted:connect(function(Msg)
- if Msg:sub(1,4) == ";ws " then
- local Name,Number = Msg:sub(5):match("(.+) ([%d%.e]+)")
- local Anchor = Msg:sub(5):match(".+ .+ (.+)") == nil
- if Name ~= nil and Num ~= nil and Workspace:FindFirstChild(Name) ~= nil and tonumber(Number) ~= nil then
- print("Scaling "..Workspace[Name]:GetFullName().." to "..tonumber(Number))
- --Num = 0
- Anchored = {}
- AnchorParts(Workspace[Name])
- Resize(Workspace[Name],tonumber(Number),true)
- Workspace[Name]:MakeJoints()
- if not Anchor then
- wait()
- for i,v in pairs(Anchored) do
- v.Velocity = Vector3.new(0,0,0)
- v.RotVelocity = Vector3.new(0,0,0)
- v.Anchored = false
- end
- end
- Anchored = {}
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement