§ How to · with Picoo
How to make a Roblox killfeed (with AI)
By Sametcan Tasgiran, Founder & Developer·Published ·Updated
A Roblox killfeed needs four pieces: a record of who dealt the killing blow, a corner notification UI, kill streak escalation, and weapon and team icons. Ask Picoo for a killfeed and it writes them for your game; the build below is one example.
Example build: 3 files · 110 lines. Entries slide in, fade out and use team colors.
Kill detection from attributes
Listens for each player's Humanoid.Died and reads the LastDamage attributes your damage code sets on the victim's character just before a hit. Any weapon or hazard that sets them shows up in the feed.
Corner notification UI
Top-right stack of 5 most recent kills. New kills slide in from the right, push older ones down, auto-fade after 5 seconds.
Kill streak escalation
Tracks consecutive kills per player: 3 kills is 'Triple', 5 is 'Killing Spree', 10 is 'Rampage', each with its own label color. A player's streak resets when they die.
Weapon icons
The weapon appears between killer and victim ('PlayerA [sword] PlayerB'), read from the LastDamageWeapon attribute. A kill with no weapon set shows as 'fist'.
Team color coding
Killer and victim names are drawn in their team colors. Deaths with no killer, such as falling into the void, show the victim alone.
Headshot indicator
Your damage code sets LastDamageHeadshot to true on a headshot, and the feed marks that kill with a red dot.
Example output from a build like this
3 files in this example. Picoo writes this code for your prompt, so file names and sizes vary.
ServerScriptService/KillfeedServer.lua
Death detection, streak tracking, broadcast to clients
ReplicatedStorage/Remotes/KillfeedEvent
Server → all clients on kill
StarterGui/KillfeedUI.lua
Corner stack, slide-in, auto-fade, icon rendering
Sample output: ServerScriptService/KillfeedServer.lua
--!strict
-- ServerScriptService/KillfeedServer.lua (Picoo · excerpt)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local KillfeedEvent = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("KillfeedEvent")
local STREAK_TIERS = {
[3] = { label = "TRIPLE", color = Color3.fromRGB(255, 200, 0) },
[5] = { label = "KILLING SPREE", color = Color3.fromRGB(255, 120, 0) },
[10] = { label = "RAMPAGE", color = Color3.fromRGB(255, 0, 0) },
}
local streaks: { [Player]: number } = {}
local function onCharacter(player: Player, character: Model)
local humanoid = character:WaitForChild("Humanoid") :: Humanoid
humanoid.Died:Connect(function()
local src = character:GetAttribute("LastDamageSource")
local killerId = character:GetAttribute("LastDamageKillerId")
local weapon = character:GetAttribute("LastDamageWeapon") or "fist"
local headshot = character:GetAttribute("LastDamageHeadshot") == true
streaks[player] = nil -- reset victim's streak
local killer = killerId and Players:GetPlayerByUserId(killerId)
if killer and killer ~= player then
streaks[killer] = (streaks[killer] or 0) + 1
end
local streakInfo = killer and STREAK_TIERS[streaks[killer] or 0]
KillfeedEvent:FireAllClients({
killer = killer and killer.Name,
victim = player.Name,
weapon = weapon,
headshot = headshot,
streakLabel = streakInfo and streakInfo.label,
streakColor = streakInfo and streakInfo.color,
})
end)
end
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(c) onCharacter(player, c) end)
end)Building a Roblox killfeed
Killfeeds are deceptively important. They tell players who is winning, what is meta, and where the action is. A bad killfeed (laggy, unclear, missing data) makes a PvP game feel unresponsive. A good killfeed makes every kill feel like a celebration.
In this example the killfeed is three files. It reads four attributes from the victim's character: LastDamageSource, LastDamageKillerId, LastDamageWeapon and LastDamageHeadshot. Your damage code sets them just before it applies a hit, and KillfeedServer reads them when the Humanoid dies. If your weapons don't set them yet, ask Picoo to add them in the same prompt or a follow-up.
Kill streak escalation is the dopamine layer. Three consecutive kills = TRIPLE, five = KILLING SPREE, ten = RAMPAGE, each with its own color. The streak resets on death. The pattern comes from Halo and CS, and it works because players know the references and feel the achievement.
Weapon icons close the information gap. 'PlayerA killed PlayerB' tells you who but not how. 'PlayerA [sword] PlayerB' shows the weapon at a glance, which lets players spot meta weapons in real time. The weapon comes from the LastDamageWeapon attribute, so each weapon labels its own kills and there is no central list to maintain.
Team coloring and the headshot indicator are the polish details. Player names in their team color make spectating clear. The headshot dot rewards precision and makes those moments feel earned. Together, they turn the killfeed from forgotten chrome into a key engagement layer.
See more on the Luau generator, the AI Luau script writer, the 3D model generator and the game builder, read how Picoo compares with ChatGPT, or browse the full blog.
Frequently asked
How does the killfeed know what weapon was used?+
Your damage code (a sword, a gun, a trap) sets a LastDamageWeapon attribute on the victim's character before it applies damage, and KillfeedServer reads it when the Humanoid dies. If your weapons don't set it yet, ask Picoo to add it in the same prompt or a follow-up.
Can I customize the streak tier names?+
Yes. STREAK_TIERS is a table at the top of KillfeedServer. This example has 3 tiers; add or remove tiers and change labels and colors.
What about environment kills (lava, void, falling)?+
In this example, a death with no LastDamageKillerId is sent with no killer, so the entry shows the victim alone. To show 'Lava' or 'Void' in the killer's place, have the hazard set LastDamageSource and ask Picoo to pass it through to the UI.
Can I add team-colored names?+
Yes. Each name in the KillfeedEvent payload is a player's name, so KillfeedUI can look up that player's TeamColor and color the name with it. Mention teams in your prompt so the lookup is included.
How long do entries stay on screen?+
In this example, 5 seconds, set in KillfeedUI.lua. The stack holds the 5 most recent kills, and older ones are pushed out as new ones arrive.
Related Picoo prompts
Roblox combat system
3 scripts · 1,181 lines · one recipe call. Press Play and fight with M1, E, F, Q, R and Shift.
Roblox FPS
Example build: 14 files · 420 lines, three weapons (rifle, shotgun, pistol). The files and numbers you get follow your prompt.
Roblox respawn system
Example output: 4 files · 130 lines. Replaces Roblox default respawn with a controlled flow; the model writes the code for your request, so the files vary.