add gs
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
-- BodyPart v1.0.5
|
||||
-- See http://wiki.roblox.com/index.php?title=R15_Compatibility_Guide#Package_Parts for details on how body parts work with R15
|
||||
|
||||
local assetUrl, baseUrl, fileExtension, x, y, R6RigUrl = ...
|
||||
|
||||
pcall(function() game:GetService('ContentProvider'):SetBaseUrl(baseUrl) end)
|
||||
game:GetService('ScriptContext').ScriptsDisabled = true
|
||||
|
||||
local objects = game:GetObjects(assetUrl)
|
||||
local useR15 = false
|
||||
local useR15NewNames = false
|
||||
local bodyPartProportion = "Classic"
|
||||
|
||||
for _, object in pairs(objects) do
|
||||
if object:IsA("Folder") and (object.Name == "R15" or object.Name == "R15ArtistIntent") then
|
||||
useR15 = true
|
||||
|
||||
-- Check to see if there are native scale parts in this object
|
||||
local partScaleType = object:FindFirstChild("AvatarPartScaleType", true)
|
||||
if partScaleType then
|
||||
bodyPartProportion = partScaleType.Value
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local R15RigUrl = "http://www.roblox.com/asset/?id=516159357"
|
||||
for _, object in pairs(objects) do
|
||||
if object:IsA("Folder") and object.Name == "R15ArtistIntent" then
|
||||
useR15NewNames = true
|
||||
if bodyPartProportion == "Classic" then
|
||||
R15RigUrl = "http://www.roblox.com/asset/?id=1664543044"
|
||||
else
|
||||
R15RigUrl = "http://www.roblox.com/asset/?id=2337256345"
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local mannequin = nil
|
||||
if useR15 then
|
||||
mannequin = game:GetObjects(R15RigUrl)[1]
|
||||
else
|
||||
mannequin = game:GetObjects(R6RigUrl)[1]
|
||||
end
|
||||
|
||||
mannequin.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
|
||||
mannequin.Parent = workspace
|
||||
|
||||
--game:GetObjects(customUrl)[1].Parent = mannequin
|
||||
|
||||
function addFolderChildren(folder)
|
||||
for _, child in pairs(folder:GetChildren()) do
|
||||
local existingBodyPart = mannequin:FindFirstChild(child.Name)
|
||||
if existingBodyPart then
|
||||
existingBodyPart:Destroy()
|
||||
end
|
||||
child.Parent = mannequin
|
||||
end
|
||||
end
|
||||
|
||||
local r15FolderName = "R15"
|
||||
if (useR15 and useR15NewNames) then
|
||||
r15FolderName = "R15ArtistIntent"
|
||||
end
|
||||
|
||||
for _, object in pairs(objects) do
|
||||
if useR15 and object:IsA("Folder") and object.Name == r15FolderName then
|
||||
addFolderChildren(object)
|
||||
elseif not useR15 and object:IsA("Folder") and object.Name == "R6" then
|
||||
addFolderChildren(object)
|
||||
elseif not (object:IsA("Folder") and string.find(object.Name, "R15")) then -- There will now be MULTIPLE R15 Folders. Ignore the ones we didn't search for.
|
||||
object.Parent = mannequin
|
||||
end
|
||||
end
|
||||
|
||||
local function buildJoint(parentAttachment, partForJointAttachment)
|
||||
local jointName = parentAttachment.Name:gsub("RigAttachment", "")
|
||||
local motor = partForJointAttachment.Parent:FindFirstChild(jointName)
|
||||
if not motor then
|
||||
motor = Instance.new("Motor6D")
|
||||
end
|
||||
motor.Name = jointName
|
||||
|
||||
motor.Part0 = parentAttachment.Parent
|
||||
motor.Part1 = partForJointAttachment.Parent
|
||||
|
||||
motor.C0 = parentAttachment.CFrame
|
||||
motor.C1 = partForJointAttachment.CFrame
|
||||
|
||||
motor.Parent = partForJointAttachment.Parent
|
||||
end
|
||||
|
||||
-- Builds an R15 rig from the attachments in the parts
|
||||
function buildRigFromAttachments(currentPart, lastPart)
|
||||
local validSiblings = {}
|
||||
for _, sibling in pairs(currentPart.Parent:GetChildren()) do
|
||||
-- Don't find matching attachment in the current part being processed.
|
||||
-- Don't visit the last part visited again, this would cause an infinite loop.
|
||||
if sibling:IsA("BasePart") and sibling ~= currentPart and sibling ~= lastPart then
|
||||
table.insert(validSiblings, sibling)
|
||||
end
|
||||
end
|
||||
|
||||
local function processRigAttachment(attachment)
|
||||
for _, sibling in pairs(validSiblings) do
|
||||
local matchingAttachment = sibling:FindFirstChild(attachment.Name)
|
||||
if matchingAttachment then
|
||||
buildJoint(attachment, matchingAttachment)
|
||||
buildRigFromAttachments(matchingAttachment.Parent, currentPart)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _, object in pairs(currentPart:GetChildren()) do
|
||||
if object:IsA("Attachment") and string.find(object.Name, "RigAttachment") then
|
||||
processRigAttachment(object)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if useR15 then
|
||||
-- Build R15 rig
|
||||
local humanoidRootPart = mannequin:WaitForChild("HumanoidRootPart")
|
||||
humanoidRootPart.CFrame = CFrame.new(Vector3.new(0, 5, 0)) * CFrame.Angles(0, math.pi, 0)
|
||||
humanoidRootPart.Anchored = true
|
||||
buildRigFromAttachments(humanoidRootPart)
|
||||
local humanoid = mannequin:WaitForChild("Humanoid")
|
||||
if humanoid then
|
||||
local typeObject = humanoid:FindFirstChild("BodyTypeScale")
|
||||
|
||||
if typeObject == nil then
|
||||
typeObject = Instance.new("NumberValue")
|
||||
typeObject.Name = "BodyTypeScale"
|
||||
typeObject.Value = 0
|
||||
typeObject.Parent = humanoid
|
||||
end
|
||||
|
||||
local proportionObject = humanoid:FindFirstChild("BodyProportionScale")
|
||||
if proportionObject == nil then
|
||||
proportionObject = Instance.new("NumberValue")
|
||||
proportionObject.Name = "BodyProportionScale"
|
||||
proportionObject.Value = 0
|
||||
proportionObject.Parent = humanoid
|
||||
end
|
||||
|
||||
if bodyPartProportion == "ProportionsNormal" then
|
||||
typeObject.Value = 1
|
||||
proportionObject.Value = 0
|
||||
elseif bodyPartProportion == "ProportionsSlender" then
|
||||
typeObject.Value = 1
|
||||
proportionObject.Value = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return game:GetService("ThumbnailGenerator"):Click(fileExtension, x, y, --[[hideSky = ]] true)
|
||||
Reference in New Issue
Block a user