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

Most Custom Decal Morph GUIs broken now. Fix?

A couple days ago, seemingly any custom decal morph GUI that worked were broken by an update. They still appear to work client-side, but any other player will not see one's decal, or even see their avatar turn invisible. A fix is possible, as places such as Universal RP had their scripts updated immediately. However, I haven't been able to figure how they did it. Maybe someone can help point it out?

local Player = game.Players.LocalPlayer
local Gui = script.Parent.Parent
local Image = Gui:FindFirstChild("morph_preview")
local Product = game:GetService("MarketplaceService"):GetProductInfo(362437609)
local User = Product.Creator.Name

repeat wait() until Player.Character
repeat wait() until Player.Character:FindFirstChild("Humanoid")

function morphPlayer()
if not Player.Character.Parent:FindFirstChild(Player.Name .. "'s Morph") and Player.Character:FindFirstChild("Torso") then
Morph = Instance.new("Part")
Morph.FormFactor = "Symmetric"
Morph.Size = Player.Character.Torso.Size
Morph.CanCollide = false
Morph.Position = Vector3.new(0,100,0)
Morph.Transparency = 1
Morph.Name = Player.Name .. "'s Morph"
Morph.Parent = game.Workspace

Mesh = Instance.new("BlockMesh")
Mesh.Parent = Morph
Mesh.Scale = Vector3.new(3,3,0.5)
Mesh.Name = "morph_mesh"

if not Gui:FindFirstChild("credits") then
	Gui:remove()
else
	if Gui.credits.Text ~= ("Morph GUI made by " .. User) then
		Gui:remove()
	end
end

--Mesh size
MeshSizeX = Gui:FindFirstChild("input_x").Text
MeshSizeY = Gui:FindFirstChild("input_y").Text
NumberX = tonumber(MeshSizeX)
NumberY = tonumber(MeshSizeY)
if MeshSizeX ~= "Input X" and MeshSizeY ~= "Input Y" then
if NumberX > 0 and NumberX <= 10 then
	Mesh.Scale = Vector3.new(NumberX,Mesh.Scale.Y,0.5)
elseif NumberX < 0 then
	Mesh.Scale = Vector3.new(1,Mesh.Scale.Y,0.5)
elseif NumberX > 10 then
	Mesh.Scale = Vector3.new(10,Mesh.Scale.Y,0.5)
end
if NumberY > 0 and NumberY <= 10 then
	Mesh.Scale = Vector3.new(Mesh.Scale.X,NumberY,0.5)
elseif NumberY <= 0 then
	Mesh.Scale = Vector3.new(Mesh.Scale.X,1,0.5)
elseif NumberY > 10 then
	Mesh.Scale = Vector3.new(Mesh.Scale.X,10,0.5)
end
Mesh.Offset = Vector3.new(0,Mesh.Scale.Y - 3,0)
else
Mesh.Scale = Vector3.new(3,3,0.5)
end



Decal1 = Instance.new("Decal")
Decal1.Parent = Morph
Decal1.Name = "front_image"
Decal1.Face = "Front"
Decal1.Texture = Image.Image

Decal2 = Instance.new("Decal")
Decal2.Parent = Morph
Decal2.Name = "back_image"
Decal2.Face = "Back"
Decal2.Texture = Image.Image

Weld = Instance.new("Weld")
Weld.Parent = Morph
Weld.Name = "player_weld"
Weld.Part0 = Player.Character.Torso
Weld.Part1 = Morph

--Hide player's character
BodyParts = Player.Character:GetChildren()
for i = 1,#BodyParts do
	if BodyParts[i]:IsA("Part") then
		BodyParts[i].Transparency = 1
		if BodyParts[i].Name == "Head" then
			BodyParts[i]:FindFirstChild("face").Transparency = 1
			if Player.Character:FindFirstChild("PlayerName") then
				BodyParts[i].Transparency = 1
			else
				BodyParts[i].Transparency = 0.95
			end
		end
	elseif BodyParts[i]:IsA("Hat") then
		BodyParts[i]:FindFirstChild("Handle").Transparency = 1
	elseif BodyParts[i].Name == "PlayerName" then
		NameChil = BodyParts[i]:GetChildren()
		for i = 1,#NameChil do
			if NameChil[i]:IsA("Model") then
				NameChil[i]:FindFirstChild("Head").Transparency = 0.95
			end
		end
	end
end

else


Decal1.Texture = Image.Image
Decal2.Texture = Image.Image

if not Gui:FindFirstChild("credits") then
	Gui:remove()
else
	if Gui.credits.Text ~= ("Morph GUI made by " .. User) then
		Gui:remove()
	end
end

--Mesh size
MeshSizeX = Gui:FindFirstChild("input_x").Text
MeshSizeY = Gui:FindFirstChild("input_y").Text
NumberX = tonumber(MeshSizeX)
NumberY = tonumber(MeshSizeY)
if MeshSizeX ~= "Input X" and MeshSizeY ~= "Input Y" then
if NumberX > 0 and NumberX <= 10 then
	Mesh.Scale = Vector3.new(NumberX,Mesh.Scale.Y,0.5)
elseif NumberX < 0 then
	Mesh.Scale = Vector3.new(1,Mesh.Scale.Y,0.5)
elseif NumberX > 10 then
	Mesh.Scale = Vector3.new(10,Mesh.Scale.Y,0.5)
end
if NumberY > 0 and NumberY <= 10 then
	Mesh.Scale = Vector3.new(Mesh.Scale.X,NumberY,0.5)
elseif NumberY <= 0 then
	Mesh.Scale = Vector3.new(Mesh.Scale.X,1,0.5)
elseif NumberY > 10 then
	Mesh.Scale = Vector3.new(Mesh.Scale.X,10,0.5)
end
Mesh.Offset = Vector3.new(0,Mesh.Scale.Y - 3,0)
else
Mesh.Scale = Vector3.new(3,3,0.5)
end

end

end

function PlayerDied(player)
	Morph = Player.Character.Parent:FindFirstChild(Player.Name .. "'s Morph")
	if Morph then
		Morph:remove()
	end
end

Player.Character.Humanoid.Died:connect(PlayerDied)
script.Parent.MouseButton1Down:connect(morphPlayer)

1 comment

0

ProcessReceipt is server-side only, and don't use :remove use :Destroy

2 answers

As it's in a Gui it won't accept a Decal it has to be an ImageLabel Also You Will have to change your image code to this:

ImageOne = ID
ImageTwo = ID
ImageThree = ID
ImageFour = ID

Location Of Image In Gui.ImageLabel.Image = ImageOne

If it's a Decal then you want the code to be like this

ImageOne = ID
ImageTwo = ID
ImageThree = ID
ImageFour = ID
Location Of Decal In Part.Decal.Texture = ImageOne

The reason it won't work on a part is because ROBLOX had an update where it says "Decal" Instead of "Image". Thank you for reading.

2 comments

0

The problem isn't with the GUI itself, but with its function. It's supposed to turn the player's avatar invisible and display a decal on their character based on the ID they put in. The player that does this will still see it working on their end, but no one else will see the change.

0

...Meanwhile the decal and invisibility should display for all players.

How to do that? How am I going to make my own custom morph GUI?

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