You’re passing parameters none, plr, badge which in order will receive example1, example2, nil thus “badge” will be nil
Server → client event firing doesn’t pass the initial parameter for the sending player, which may be why you were voiding the first parameter with “none”
You may also check that plr and badge are non-nil strings before printing?
Would string formatting with some default strings help? is plr a string for their name, or the player instance? Text = string.format("%s has earned the badge %s!", plr and plr or "A player", badge and badge or "A badge")
You’re only passing two values as arguments to the FireAllClients() call so only two values will be received on the listening side by the corresponding .OnClientEvent event.
game.ReplicatedStorage:WaitForChild("SendBadgeGivenEvent").OnClientEvent:Connect(function(plr, badge)
game.StarterGui:SetCore("ChatMakeSystemMessage", {
Text = string.format("%s has earned the badge %s!", plr and plr or "A player", badge and badge or "A badge"),
Color = Color3.fromRGB(54, 163, 163)
})
end)