The ‘FaceSelection’ object will be cloned in PlayerGui, so you cannot do this:
local FaceButton = game.StarterGui.FaceSelection.Frame.FaceButton -- Set to gui button
The script that’s currently running will be cloned into the object, so you can try:
local FaceButton = script.Parent.Parent (bla bla bla, consider the location of the script
From what im getting he wants a player to find buttons around a map that will pop up a gui that allows you to equip a new face and hes trying to use a script to enable another script in this process and im not sure whats inside of that script. i think that second script is what enables the gui though
Considering this, what I would suggest is to clone the Gui; put a script inside of a Part which takes the PLAYER GUI on the CLIENT SIDE and clones the Gui Object inside of the Player Gui folder (client-side). Once the player has donde everything with the gui, search the gui in the player gui (client-side) through :FindFirstChild() and delete the gui.
the guis in question are all already in PlayerGui and so its just a matter of enabling and disabling it. also i think cloning the gui is too complicated.
I suggested cloning it due to a memory issues, if he keeps it permanently inside of Player Gui when the player uses it only when touches a part, I’d do that. However, if the player will open THE SAME GUI OBJECT everytime, then yes, I suggest putting it in Starter Gui and NOT cloning it. If he takes the 2nd option, then just search the object with :FindFirstChild() inside of Player Gui, cause once the game runs, all objets inside of StarterGui gonna be cloned on client-side (Player Gui).