1
0
Fork 0
forked from Simnation/Main
Main/resources/[weapons]/[Scripts]/nordi_shootingrange/server.lua
2025-07-26 08:56:55 +02:00

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)