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
ProcessReceipt is server-side only, and don't use :remove use :Destroy