Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Turn this into a click to morph script?

How would I go about turning this from a touch to morph into a click to morph script?

function onTouched(hit)
if hit.Parent:findFirstChild("Humanoid") ~= nil and hit.Parent:findFirstChild("RightArm1") == nil then
	local g = script.Parent.Parent.RightArm1:clone()
	g.Parent = hit.Parent
	local C = g:GetChildren()
	for i=1, #C do
		if C[i].className == "Part" or C[i].className == "UnionOperation" or C[i].className == "WedgePart" or C[i].className == "MeshPart" then
			local W = Instance.new("Weld")
			W.Part0 = g.Middle
			W.Part1 = C[i]
			local CJ = CFrame.new(g.Middle.Position)
			local C0 = g.Middle.CFrame:inverse()*CJ
			local C1 = C[i].CFrame:inverse()*CJ
			W.C0 = C0
			W.C1 = C1
			W.Parent = g.Middle
		end
			local Y = Instance.new("Weld")
			Y.Part0 = hit.Parent["RightUpperArm"]
			Y.Part1 = g.Middle
			Y.C0 = CFrame.new(0, 0, 0)
			Y.Parent = Y.Part0
	end

	local h = g:GetChildren()
	for i = 1, # h do
		if h[i].className == "Part" or C[i].className == "UnionOperation" or C[i].className == "WedgePart" or C[i].className == "MeshPart" then
			h[i].Anchored = false
			h[i].CanCollide = false
		end
	end
	
end

script.Parent.Touched:connect(onTouched)

1 answer

✓ Accepted answer

Just get the player mouse then put your morph function inside Button1Down function, like this :

local plr = game.Players.LocalPlayer
local mouse = plr:GetMouse()

function onClick()
if plr.Character:FindFirstChild("RightArm1") == nil then
    local g = script.Parent.Parent.RightArm1:Clone()
    g.Parent = plr.Character
    local C = g:GetChildren()
    for i=1, #C do
        if C[i].className == "Part" or C[i].className == "UnionOperation" or C[i].className == "WedgePart" or C[i].className == "MeshPart" then
            local W = Instance.new("Weld")
            W.Part0 = g.Middle
            W.Part1 = C[i]
            local CJ = CFrame.new(g.Middle.Position)
            local C0 = g.Middle.CFrame:inverse()*CJ
            local C1 = C[i].CFrame:inverse()*CJ
            W.C0 = C0
            W.C1 = C1
            W.Parent = g.Middle
        end
            local Y = Instance.new("Weld")
            Y.Part0 = plr.Character["RightUpperArm"]
            Y.Part1 = g.Middle
            Y.C0 = CFrame.new(0, 0, 0)
            Y.Parent = Y.Part0
    end

    local h = g:GetChildren()
    for i = 1, # h do
        if h[i].className == "Part" or C[i].className == "UnionOperation" or C[i].className == "WedgePart" or C[i].className == "MeshPart" then
            h[i].Anchored = false
            h[i].CanCollide = false
        end
    end

end

mouse.Button1Down:connect(onClick)

EDIT :

Before, you could detect if the part belong to a player, and if he had a right arm. Now, as we define the player at the beginning, you can just detect if the player has a right arm (we already know that he is a player so , it would be useless to check if he has a Humanoid)

Anyways, i just replaced each "hit" by "plr.Character" in your script

3 comments

0

Thank you, I'm not sure how to modify the rest but I appreciate the help to get me started

0

No problem. Before, you could detect if the part belong to a player, and if you can find his right arm. I edited my answer to help you more. I hope it will help you

0

Thanks a ton!

This discussion is preserved as it was. New answers, comments, and votes are closed.