New: Nitro Boost our Discord server and receive full donation perks here on the website! Join the Scripting Helpers Discord Server to learn more! You can also Support on Patreon as always.
Ad
Still have questions? Join our Discord server and get real time help.
Log in to vote
0

Kill and Assist wont count, but death counts on leaderboard. Help?

Asked by 11 months ago

KO is not registering as kill. Assist is not registering to leader board too. But death counts and works. Is there something I am missing?

local PlayerManager = {}

-- ROBLOX Services
local Players = game.Players
local PointsService = game:GetService("PointsService")

-- Game Services
local Configurations = require(game.ServerStorage.Configurations)
local Events = game.ReplicatedStorage.Events
local ResetMouseIcon = Events.ResetMouseIcon
local TeamManager = require(script.Parent.TeamManager)
local DisplayManager = require(script.Parent.DisplayManager)

-- Local Variables
local PlayersCanSpawn = false
local GameRunning = false
local HitArray = { }
local ScoreArray = { }

-- Local Functions
local function OnPlayerAdded(player)
    -- Setup leaderboard stats
    local leaderstats = Instance.new("Model", player)
    leaderstats.Name = "leaderstats"

    local KWA = Instance.new("StringValue", leaderstats)
    if Configurations.GRANT_ASSISTS then
        KWA.Name = "KO - WO - A"
        KWA.Value = "0 - 0 - 0"
    else
        KWA.Name = "KO - WO"
        KWA.Value = "0 - 0"
    end

    ScoreArray[player] = { 0, 0, 0 } -- KOs, WOs, Assists

    TeamManager:AssignPlayerToTeam(player)

    player.CharacterAdded:connect(function(character)
        character:WaitForChild("Humanoid").Died:connect(function()
            PlayerManager:PlayerDied(player)
            wait(Configurations.RESPAWN_TIME)
            if GameRunning then
                player:LoadCharacter()
            end
        end)
    end)

    if PlayersCanSpawn then
        player:LoadCharacter()
    else
        DisplayManager:StartIntermission(player)
    end
end

local function OnPlayerRemoving(player)
    TeamManager:RemovePlayer(player)
end

local function UpdatePlayerScore(player)
    local KOString = tostring(ScoreArray[player][1])
    local WOString = tostring(ScoreArray[player][2])
    local AssistString = tostring(ScoreArray[player][3])

    if not Configurations.GRANT_ASSISTS then
        if KOString:len() < WOString:len() then
            while KOString:len() < WOString:len() do
                KOString = " " .. KOString
            end
        else
            while WOString:len() < WOString:len() do
                WOString = WOString .. " "
            end
        end
        player.leaderstats["KO - WO"].Value = KOString .. " - " .. WOString
    else
        player.leaderstats["KO - WO - A"].Value = KOString .. " - " .. WOString .. " - " .. AssistString
    end
end

-- Functions
function PlayerManager:SetGameRunning(running)
    GameRunning = running
end

function PlayerManager:AllowPlayerSpawn(allow)
    PlayersCanSpawn = allow
end

function PlayerManager:ClearPlayerScores()
    for _, player in ipairs(Players:GetPlayers()) do
        local leaderstats = player:FindFirstChild("leaderstats")
        if leaderstats then
            local KWA
            if Configurations.GRANT_ASSISTS then
                KWA = leaderstats:FindFirstChild("KO - WO - A")
                if KWA then
                    KWA.Value = "0 - 0 - 0"
                end
            else
                KWA = leaderstats:FindFirstChild("KO - WO")
                if KWA then
                    KWA.Value = "0 - 0"
                end
            end
        end
    end
end

function PlayerManager:LoadPlayers()
    for _, player in pairs(Players:GetPlayers()) do
        player:LoadCharacter()
    end
end

function PlayerManager:DestroyPlayers()
    for _, player in pairs(Players:GetPlayers()) do
        player.Character:Destroy()
        for _, item in pairs(player.Backpack:GetChildren()) do
            item:Destroy()
        end
    end
    ResetMouseIcon:FireAllClients()
end

function PlayerManager:PlayerHit(hitPlayer, hittingPlayer)
    if hitPlayer == hittingPlayer then
        return
    end

    if not HitArray[hitPlayer] then
        HitArray[hitPlayer] = { }
    end

    for i = 1, #HitArray[hitPlayer] do
        if HitArray[hitPlayer][i]== hittingPlayer then
            return
        end
    end
    table.insert(HitArray[hitPlayer], hittingPlayer)
end

function PlayerManager:PlayerDied(player)
    if HitArray[player] then
        for i = #HitArray[player], 1, -1 do
            local hittingPlayer = HitArray[player][i]
            if hittingPlayer ~= player then
                if i == #HitArray[player] then
                    ScoreArray[hittingPlayer][1] = ScoreArray[hittingPlayer][1] + 1
                    TeamManager:AddTeamScore(hittingPlayer.TeamColor, 1)
                    spawn(function() pcall(function() PointsService:AwardPoints(hittingPlayer.userId, Configurations.PLAYER_POINTS_PER_KO) end) end)
                else
                    ScoreArray[hittingPlayer][3] = ScoreArray[hittingPlayer][3] + 1
                    spawn(function() pcall(function() PointsService:AwardPoints(hittingPlayer.userId, Configurations.PLAYER_POINTS_PER_ASSIST) end) end)
                end
                UpdatePlayerScore(hittingPlayer)
            end
        end
    end

    ScoreArray[player][2] = ScoreArray[player][2] + 1
    HitArray[player] = nil
    UpdatePlayerScore(player)
end

-- Event Bindings
Players.PlayerAdded:connect(OnPlayerAdded)
Players.PlayerRemoving:connect(OnPlayerRemoving)

return PlayerManager
0
It's a problem with the tool(s) you are using. Crvnberie 35 — 11mo
0
@Crvnborio what do you mean? Asher0606 36 — 11mo

Answer this question