I made a leaderboard script and after an hour of working on it, it doesn't work in test solo or ingame. Any suggestions, I'm personally thinking it's the cash part, if so is there any way to still have a money value in while having a functional leaderboard script?

--Script made by OpticUniversse
--Please do not take this part out if you are using the script!

function onPlayerEntered(newplayer)
	local stats = Instance.new("IntValue")
	stats.Name = "leaderstats"
	local kills = Instance.new("IntValue")
	kills.Name = "Kills" --pew pew dead man!
	kills.Value = 0 
	local deaths = Insance.new("IntValue")
	deaths.Name = "Deaths" --make obnoxious noise
	deaths.Value = 0
	local cash = Instance.new("IntValue") --Unsure
	cash.Name = "Cash"
	cash.Value = 20 --Start with 20 cash
	kills.Parent = stats
	deaths.Parent = stats
	cash.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)
	newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end)
	stats.Parent = newPlayer
end
function Send_DB_Event_Died(victim,killer)
	local killername = "no one"
	if killer ~= nil then killername = killer.Name end
	if shared["deaths"] ~= nil then
		shared["deaths"](victim, killer)
	end
end
function Send_DB_Event_Kill (killer, victim)
	if shared["kills"] ~= nil then
	shared["kills"](killer, victim)
	end
end
function onHumanoidDied(humanoid, player)
	local stats = player:findFirstChild("leaderstats")
	if stats ~= nil then
		local deaths = stats:findFirstChild("Deaths")
		deaths.Value = deaths.Value + 1
		local killer = getKillerOfHumanoidIfStillInGame(humanoid)
		Send_DB_Event_Died(player, killer)
		handleKillCount(humanoid, player)
	end
end
function onPlayerRespawn(property, player)
	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)
	local tag = humanoid:findFirstChild("creator")
	if tag ~= nil then
		local killer = tag.value
		if killer.Parent ~= nil then
			return killer --but walmart doesnt accept returns!
		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")
			if killer ~= player then
				kills.Value = kills.Value +1
				cash.Value = cash.Value +20
			else
				kills.Value = kills.Value -1
				cash.Value = cash.Value -20
			end
			Send_DB_Event_Kill(killer, player)
		end
	end
end
game.Players.ChildAdded:connect(onPlayerEntered)

Thanks.