I know, but I said to check for output errors and you said there weren’t any. Could just be a mistake.
I am not. It’s a local script in the ScreenGui
I’m not really sure what you’re trying to do, but if that doesn’t work I suggest using a local script, and firing the client when a player joins. The script firing the client would be in serverscriptservice so it’s only 1 script ingame managing that type of thing.
Here’s an example of how it would look;
-- server script (goes in serverscriptservice) local GroupId = 7446763 local MinimumRank = 4 local Remote = game.ReplicatedStorage.ChattedRemote game.Players.PlayerAdded:Connect(function(Player) Player.Chatted:Connect(function(Message) if Player:GetRankInGroup(GroupId) >= MinimumRank then local Command = Player.PlayerGui.HandtoGui.Frame if Message == "!Handto" then Remote:FireClient(Player, Message) elseif Message == "!Close" then Remote:FireClient(Player, Message) end end end) end) -- LocalScript (where the previous script you used goes) local Remote = game.ReplicatedStorage:WaitForChild("ChattedRemote") local Player = game.Players.LocalPlayer local gui = Player.PlayerGui local HandToGui = gui:WaitForChild("HandToGui") local Command = HandToGui:WaitForChild("Frame") Remote.OnClientEvent:Connect(function(Message) if Message == "!Handto" then Command:TweenPosition(UDim2.new(0.5, 0,0.1, 0), 'Out', 'Bounce', 1, true) elseif Message == "!Close" then Command:TweenPosition(UDim2.new(0.5, 0,-1, 0), 'Out', 'Bounce', 1, true) end end)
Yea, use remote events. Or remove functions.
If you Are making a list of commands, I recommend you not to use the if statements to see if the player chatted a command, instead, create an empty list and store all the commands inside. Then, make the script to check the first part of the word in the message from the player, if it’s a valid command, use if statements and call that function. This idea is from alvinBlox’s tutorial about creating admin commands. Hope this helps!