110 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local QBCore = exports['qb-core']:GetCoreObject()
 | 
						|
 | 
						|
local activeCompetitions = {}
 | 
						|
 | 
						|
QBCore.Functions.CreateCallback('qb-shootingrange:getHighscores', function(source, cb)
 | 
						|
    local scores = json.decode(LoadResourceFile(GetCurrentResourceName(), "highscores.json") or "[]")
 | 
						|
    cb(scores)
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent('qb-shootingrange:saveScore', function(name, score)
 | 
						|
    local scores = json.decode(LoadResourceFile(GetCurrentResourceName(), "highscores.json") or "[]")
 | 
						|
    
 | 
						|
    local timestamp = os.date("%d.%m.%Y - %H:%M")
 | 
						|
    
 | 
						|
    table.insert(scores, {
 | 
						|
        name = name,
 | 
						|
        score = score,
 | 
						|
        timestamp = timestamp
 | 
						|
    })
 | 
						|
    
 | 
						|
    table.sort(scores, function(a, b) 
 | 
						|
        return tonumber(a.score) > tonumber(b.score) 
 | 
						|
    end)
 | 
						|
    
 | 
						|
    while #scores > Config.MaxHighscores do
 | 
						|
        table.remove(scores, #scores)
 | 
						|
    end
 | 
						|
    
 | 
						|
    SaveResourceFile(GetCurrentResourceName(), "highscores.json", json.encode(scores, {indent = true}), -1)
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("qb-shootingrange:sendInvite")
 | 
						|
AddEventHandler("qb-shootingrange:sendInvite", function(targetId)
 | 
						|
    local src = source
 | 
						|
    local inviterName = GetPlayerName(src)
 | 
						|
    
 | 
						|
    if not activeCompetitions[src] then
 | 
						|
        activeCompetitions[src] = {
 | 
						|
            host = src,
 | 
						|
            players = {},
 | 
						|
            scores = {}
 | 
						|
        }
 | 
						|
    end
 | 
						|
    
 | 
						|
    TriggerClientEvent("qb-shootingrange:receiveInvite", targetId, inviterName, src)
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("qb-shootingrange:acceptInvite")
 | 
						|
AddEventHandler("qb-shootingrange:acceptInvite", function(inviterId)
 | 
						|
    local src = source
 | 
						|
    local playerName = GetPlayerName(src)
 | 
						|
    
 | 
						|
    if activeCompetitions[inviterId] then
 | 
						|
        activeCompetitions[inviterId].players[src] = true
 | 
						|
        activeCompetitions[inviterId].scores[playerName] = 0
 | 
						|
        
 | 
						|
        TriggerClientEvent("qb-shootingrange:playerJoinedCompetition", inviterId, playerName)
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("qb-shootingrange:declineInvite")
 | 
						|
AddEventHandler("qb-shootingrange:declineInvite", function(inviterId)
 | 
						|
    local src = source
 | 
						|
    local playerName = GetPlayerName(src)
 | 
						|
    TriggerClientEvent("qb-shootingrange:inviteDeclined", inviterId, playerName)
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("qb-shootingrange:startCompetition")
 | 
						|
AddEventHandler("qb-shootingrange:startCompetition", function()
 | 
						|
    local src = source
 | 
						|
    
 | 
						|
    if activeCompetitions[src] then
 | 
						|
        for playerId, _ in pairs(activeCompetitions[src].players) do
 | 
						|
            TriggerClientEvent("qb-shootingrange:competitionStarted", playerId)
 | 
						|
        end
 | 
						|
        TriggerClientEvent("qb-shootingrange:competitionStarted", src)
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("qb-shootingrange:cancelCompetition")
 | 
						|
AddEventHandler("qb-shootingrange:cancelCompetition", function()
 | 
						|
    local src = source
 | 
						|
    
 | 
						|
    if activeCompetitions[src] then
 | 
						|
        for playerId, _ in pairs(activeCompetitions[src].players) do
 | 
						|
            TriggerClientEvent("qb-shootingrange:competitionCancelled", playerId)
 | 
						|
        end
 | 
						|
        activeCompetitions[src] = nil
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("qb-shootingrange:updateCompetitionScore")
 | 
						|
AddEventHandler("qb-shootingrange:updateCompetitionScore", function(score)
 | 
						|
    local src = source
 | 
						|
    local playerName = GetPlayerName(src)
 | 
						|
    
 | 
						|
    for _, competition in pairs(activeCompetitions) do
 | 
						|
        if competition.players[src] or competition.host == src then
 | 
						|
            competition.scores[playerName] = score
 | 
						|
            
 | 
						|
            for playerId, _ in pairs(competition.players) do
 | 
						|
                TriggerClientEvent("qb-shootingrange:updateCompetition", playerId, competition.scores)
 | 
						|
            end
 | 
						|
            TriggerClientEvent("qb-shootingrange:updateCompetition", competition.host, competition.scores)
 | 
						|
            break
 | 
						|
        end
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
 |