So, I'm planning on using a custom chat Gui with the coreGui of Chat Disabled, Currently, I modified the Custom Chat Gui of UristMcSparks in the wiki http://wiki.roblox.com/index.php?title=Custom_chat_GUI by replacing the event of player.Chatted to a server event called SendMessage for filtering enabled. So i made a textbox that whenever you press /, it focuses and when you click enter and the focus is lost, it sends the message to the event. The code works, but whenever a player chats, the message appears x the amount of players, help? (NOTE FILTERING ENABLED IS ON) Server Script
local MAX_MESSAGES = 15 -- a dictionary between players and the list of messages they should see -- note the use of weak tables (http://wiki.roblox.com/index.php?title=Weak_tables) -- to save memory, so that message lists are kept only while the player is in game local messageData = {} -- function to store filtered message for each player and send update function storeMessage(sender, message) -- loop through all players in the game for _, player in pairs(game.Players:GetPlayers()) do -- filter message local filteredMessage = sender .. ": " .. message -- get table containing past messages local playerMessages = messageData[player] -- add new message to table table.insert(playerMessages, filteredMessage) -- check if table is full. If so, remove the oldest message if #playerMessages > MAX_MESSAGES then table.remove(playerMessages, 1) end -- send update to the player game.ReplicatedStorage.SendMessages:FireClient(player, playerMessages) end end -- bind function to when player joins the game game.Players.PlayerAdded:connect(function(player) -- setup table to hold messages for the player local playerMessages = {} messageData[player] = playerMessages -- bind function to player chat local event = game.ReplicatedStorage.SendMessage event.OnServerEvent:connect(function(player, message) storeMessage(player.Name, message) end) end)
GUI Local Script
local chatFrame = script.Parent.ChatFrame game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false) -- Bind function to update from server game.ReplicatedStorage.SendMessages.OnClientEvent:connect(function(messages) -- Clear all of the current messages chatFrame:ClearAllChildren() -- Create TextLabel for every message for i, message in pairs(messages) do local newLine = Instance.new("TextLabel", chatFrame) newLine.Text = message newLine.Size = UDim2.new(1,0,0,18) newLine.Position = UDim2.new(0,0,0,18*(i-1)) newLine.TextXAlignment = Enum.TextXAlignment.Left newLine.TextYAlignment = Enum.TextYAlignment.Center newLine.BackgroundTransparency = 1 newLine.BorderSizePixel = 0 newLine.FontSize = Enum.FontSize.Size18 newLine.Font = Enum.Font.SourceSans end end) local Mouse = game.Players.LocalPlayer:GetMouse() local TextBox = script.Parent.TextBox Mouse.KeyDown:connect(function(Key) if Key:lower() == "/" then TextBox:CaptureFocus() end end) TextBox.FocusLost:connect(function(enterPressed) if enterPressed then local Message = TextBox.Text local Event = game.ReplicatedStorage.SendMessage Event:FireServer(Message) Message = "" print(Message) end end)