So I know some games, make stuff say in the chat when you join, I'm pretty sure they don't use a custom chat. How did they do that? Or is it just a custom chat? I searched on the wiki, on YouTube, even looked for a question asked about it, but I couldn't find anything.
In terms of your original question, you want to use the SetCore function in StarterGui (see here) for an example of this. You will need to run the script in a LocalScript for it to work, and the message will only display on the player's screen for which the script is running.
Making a custom chat script is quite a different topic and it's not something I can explain into an answer to this question, but I suggest you check out this wiki article for more information. Sorry I can't explain this in an answer, but it is a very complicated topic and it is very technical.
If you want the server to "Chat" when the player joins and the player leaves, you would need to put this into a LocalScript inside StarterPlayerScript:
See comments in the code to get a better insight of how this script works!
If there are any typos, then please excuse me, I wrote this code here and now.
pcall(function() --Event that should fire when the player joins game.StarterGui:SetCore("ChatMakeSystemMessage", { Text = "[Server]: " ..game.Players.LocalPlayer.Name.. " has joined the game!"; Color = Color3.new(255, 255, 255); --The color of the text Font = Enum.Font.SourceSansBold; --The font of the text FontSize = Enum.FontSize.Size24; --The size of the text }) end) game.Players.ChildAdded:connect(function(player) --Event that fires when player joined if not pcall(function() --If the pcall() function was not called game.StarterGui:SetCore("ChatMakeSystemMessage", { --Gets the chat Text = "[Server]: " ..player.Name .. " has joined the game!"); --Sets the text Color = Color3.new(255,255,255); --Sets the color of the text Font = Enum.Font.SourceSansBold; --Sets the font of the text FontSize = Enum.FontZise.Size24; --Sets the size of the text }) end) then print("Error") --prints error if the pcall() function was not called end end) game.Players.ChildRemoved:connect(function(player) --Event that fires when player left if not pcall(function() --if the pcall() function was NOT called game.StarterGui:SetCore("ChatMakeSystemMessage", { --Gets the chat Text = "[Server]: " ..player.Name .. " has left the game!"); --Sets the text Color = Color3.new(255,255,255); --Sets the color of the text Font = Enum.Font.SourceSansBold; --Sets the font of the text FontSize = Enum.FontZise.Size24; --Sets the size of the text }) end) then print("Error") --prints error if the pcall() function was not called end end)
For more information, visit this link: http://wiki.roblox.com/index.php?title=API:Class/StarterGui/SetCore
If this helped you out, make sure you accept the answer!