Output:
sub is not a valid member of Player
Hierarchy:
Workspace HoloScript (Script) CustomChatScript (LocalScript) Chatted (RemoteEvent)
I'll include all the code that I think you will need to help me solve this problem. Let me know if you need more. I apologize for all the reading.
In the past, I used the Roblox Chatted event to fire commands, but since some custom chat systems remove the Roblox chat bar, I had to make some changes. What I don't understand is why I'm getting this error, since I'm never giving an argument equal to Player.
Holo script:
local cmd = "start" local cmdNum = cmd:len() local customChat = true function onChat(msg) if msg:sub(1,cmdNum) == cmd then --This is the line that's causing the error --stuff end end game.Players.PlayerAdded:connect(function (player) repeat wait() until player.Character --Helps prevent glitching if isAdmin(player) then --Defined earlier; works fine. if customChat then script.Chatted.OnServerEvent:connect(onChat) local clone = script.CustomChatScript:Clone() clone.Parent = player:WaitForChild("PlayerGui") player.CharacterAdded:connect(function(chr) local clone = script.CustomChatScript:Clone() clone.Parent = player:WaitForChild("PlayerGui") end) else --Otherwise, player.Chatted:connect(onChat) end end end)
Here's the LocalScript named CustomChatScript, located in workspace.HoloScript:
local plr = game.Players.LocalPlayer repeat wait() until plr.Character local chr = plr.Character local mouse = plr:GetMouse() local startCommand = "/" local addToString = false local theString = "" game.StarterGui:SetCoreGuiEnabled("Chat", false) mouse.KeyUp:connect(function(key) if key == startCommand and not addToString then addToString = true chr:WaitForChild("Humanoid").WalkSpeed = 0 elseif key:byte() == 13 and addToString then --13 = "Enter" workspace:WaitForChild("HoloScript").Chatted:FireServer(theString)--See? I'm not feeding in a player... theString = "" addToString = false chr:WaitForChild("Humanoid").WalkSpeed = 16 elseif key:byte() ~= 13 and addToString then theString = theString..key end end)
The events OnServerEvent or OnServerInvoke both have the Player who triggered the event as the first parameter, always. The string that you passed to the event will be the second parameter.