Kill streak system

I want a system so everytime a player reaches a certain streak they get a special item, I have a streak script, but i can’t get it to work.

help would be appreciated.

Consider sharing the script to make helping easier.

stands = {}
CTF_mode = false

local plr = game.Players.LocalPlayer
local sss = game:GetService(“ServerStorage”)

function onHumanoidDied(humanoid, player)
local stats = player:findFirstChild(“leaderstats”)
if stats ~= nil then
local deaths = stats:findFirstChild(“Deaths”)
local spree = stats:findFirstChild(“KillStreak”)
deaths.Value = deaths.Value + 1
spree.Value = 0

  local killer = getKillerOfHumanoidIfStillInGame(humanoid)

  handleKillCount(humanoid, player)

end
end

function onPlayerRespawn(property, player)
– need to connect to new humanoid

if property == “Character” and player.Character ~= nil then
local humanoid = player.Character.Humanoid
local p = player
local h = humanoid
humanoid.Died:connect(function() onHumanoidDied(h, p) end )
end
end

function getKillerOfHumanoidIfStillInGame(humanoid)
– returns the player object that killed this humanoid
– returns nil if the killer is no longer in the game

– check for kill tag on humanoid - may be more than one - todo: deal with this
local tag = humanoid:findFirstChild(“creator”)

– find player with name on tag
if tag ~= nil then

  local killer = tag.Value
  if killer.Parent ~= nil then -- killer still in game
  	return killer
  end

end

return nil
end

function handleKillCount(humanoid, player)
local killer = getKillerOfHumanoidIfStillInGame(humanoid)
if killer ~= nil then
local stats = killer:findFirstChild(“leaderstats”)
if stats ~= nil then
local kills = stats:findFirstChild(“Kills”)
local spree = stats:findFirstChild(“KillStreak”)
if killer ~= player then
kills.Value = kills.Value + 1
spree.Value = spree.Value + 1
else
kills.Value = kills.Value - 1
end
end
end
end
end


function findAllFlagStands(root)
local c = root:children()
for i=1,#c do
if (c[i].className == “Model” or c[i].className == “Part”) then
findAllFlagStands(c[i])
end
if (c[i].className == “FlagStand”) then
table.insert(stands, c[i])
end
end
end

function hookUpListeners()
for i=1,#stands do
stands[i].FlagCaptured:connect(onCaptureScored)
end
end

function onPlayerEntered(newPlayer)

if CTF_mode == true then

  local stats = Instance.new("IntValue")
  stats.Name = "leaderstats"

  local captures = Instance.new("IntValue")
  captures.Name = "Captures"
  captures.Value = 0


  captures.Parent = stats

  
  

  while true do
  	if newPlayer.Character ~= nil then break end

wait(5)
end

  stats.Parent = newPlayer

else

  local stats = Instance.new("IntValue")
  stats.Name = "leaderstats"

  local kills = Instance.new("IntValue")
  kills.Name = "Kills"
  kills.Value = 0

  local deaths = Instance.new("IntValue")
  deaths.Name = "Deaths"
  deaths.Value = 0

  local spree = Instance.new("IntValue")
  spree.Name = "KillStreak"
  spree.Value = 0

  kills.Parent = stats
  deaths.Parent = stats
  spree.Parent = stats

  
  
  
  while true do
  	if newPlayer.Character ~= nil then break end
  	wait(5)
  end

  local humanoid = newPlayer.Character.Humanoid

  humanoid.Died:connect(function() onHumanoidDied(humanoid, newPlayer) end )

  -- start to listen for new humanoid
  newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end )


  stats.Parent = newPlayer

end

end

function onCaptureScored(player)

  local ls = player:findFirstChild("leaderstats")
  if ls == nil then return end
  local caps = ls:findFirstChild("Captures")
  if caps == nil then return end
  caps.Value = caps.Value + 1

end

findAllFlagStands(game.Workspace)
hookUpListeners()
if (#stands > 0) then CTF_mode = true end
game.Players.ChildAdded:connect(onPlayerEntered)

“deaths.Value = deaths.Value + 1”
You writing it in local script. Changes of values in leaderstats must be done in server script. You can create event and fire it if player died.
About other things idk

1 Like