I have been trying all kinds of different code to get the leaderboard to compare the infamy from the killer to the guy that died.
but nothing I have tried is working.
right now I have 3 tabs.
kills, deaths, and infamy
when someone kills someone the program should compare the killers infamy with the one whom died and compare it to his own.
if the infamy.value is 0 it will add 100
if the infiny.value is less than the one who died it should take the infamy value from the one who died and times it by .5 and add that figure to the killers infamy.
but nothing is working. I cant figure out how to get the if statement to looking the other persons stats.
can someone help me please. this is the code that I am playing around with.
print("LinkedLeaderboard script version 5.00 loaded") stands = {} CTF_mode = false function onHumanoidDied(humanoid, player) local stats = player:findFirstChild("leaderstats") if stats ~= nil then local deaths = stats:findFirstChild("Deaths") deaths.Value = deaths.Value + 1 -- do short dance to try and find the killer 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 infamy = stats:findFirstChild ("Infamy") if killer ~= player then kills.Value = kills.Value + 1 local upgrade = player:findFirstChild("leaderstats") local increase = upgrade.stats:findFirstChild ("Infamy") if infamy.Value < increase or infamy.Value == 0 then infamy.Value = infamy.Value + 100 else infamy.Value = ((increase* .5)+ infamy.Value) end else kills.Value = kills.Value - 1 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 infamy = Instance.new("IntValue") infamy.Name = "Infamy" infamy.Value = 0 kills.Parent = stats deaths.Parent = stats infamy.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)
Line 15 is there for no reason.
line 43:
local killer = tag.Value if killer.Parent ~= nil then -- This checks if the Value "killer" no longer has a parent return killer end
killer
is NOT the Userdata of the killer. I am assuming it's just the name of the Killer. If you want to find the killer, you are going to have to find them:
for a, v in pairs(game.Players:GetPlayers()) do if v.Name == tag.Value then print("This is our killer") end end
Otherwise, good job with your formatting and naming. I can tell you are an experienced programmer.
Also, there is no way to customize the Roblox default leaderboard. You COULD make your own. I made one to suit my style, which I could give to you if you want.
Hope you get the desired outcome :)
EDIT
Line 187 game.Players.ChildAdded:connect(onPlayerEntered)
should be changed to game.Players.PlayerAdded:connect(onPlayerEntered)
On line 163, use newPlayer.CharacterAdded
to listen for when a player respawns
Remove lines 153-156 because they are unnecessary
Send me the latest version of your leaderboard after you fix it up the best you can