THE PROBLEM HAS BEEN FIXED
In local script line 9, you don't need to send the player to the server, just send the message. Connecting the remote event in the server will automatically return the client/player that fired the remote event.
kickplayer:FireServer("you got all the items on the shopping list!")
The reason why it wasn't working was because instead of message being the message you sent, it's the player.
This won't work
-- kickplayer:FireServer(player, "you got all the items on the shopping list!") kickplayer.OnServerEvent:Connect(function(player, message) if typeof(message) == "string" then print("it's a string") else print("it's not a string") -- this will print because you sent the player before the message in the remote event end end)
This will work
-- kickplayer:FireServer("you got all the items on the shopping list!") kickplayer.OnServerEvent:Connect(function(player, message) if typeof(message) == "string" then print("it's a string") -- this will print because you only sent the message and not the player else print("it's not a string") end end)
sorry for bad explanation T-T