mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-16 21:46:03 +01:00
feat: user data for db & character fetching
This commit is contained in:
@@ -17,6 +17,7 @@ Config = {
|
||||
discordActionText2 = GetConvar("core:discordActionText2", "STORE"),
|
||||
discordActionLink2 = GetConvar("core:discordActionLink2", "https://andyyy.tebex.io/category/fivem-scripts"),
|
||||
characterIdentifier = GetConvar("core:characterIdentifier", "license"),
|
||||
selectIdentifiers = json.decode(GetConvar("core:selectIdentifiers", '["discord", "license", "license2", "fivem"]')),
|
||||
discordGuildId = GetConvar("core:discordGuildId", "false"),
|
||||
discordBotToken = GetConvar("core:discordBotToken", "false"),
|
||||
randomUnlockedVehicleChance = GetConvarInt("core:randomUnlockedVehicleChance", 30),
|
||||
@@ -66,6 +67,71 @@ AddEventHandler("playerJoining", function(oldId)
|
||||
lib.addPrincipal(("player.%s"):format(src), "group.admin")
|
||||
end
|
||||
|
||||
local identifiers = PlayersInfo[src] and PlayersInfo[src].identifiers or getIdentifierList(src)
|
||||
|
||||
local whereParts = {}
|
||||
local params = {}
|
||||
|
||||
for identifierType, identifier in pairs(identifiers) do
|
||||
local isSelected = false
|
||||
for i=1, #Config.selectIdentifiers do
|
||||
local selectedType = Config.selectIdentifiers[i]
|
||||
if identifierType == selectedType then
|
||||
isSelected = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if isSelected then
|
||||
local columnName = "id_" .. identifierType
|
||||
local cleanId = identifier:gsub("^[^:]*:", "")
|
||||
table.insert(whereParts, columnName .. " = ?")
|
||||
table.insert(params, cleanId)
|
||||
end
|
||||
end
|
||||
|
||||
local user = nil
|
||||
if #whereParts > 0 then
|
||||
local query = "SELECT user_id FROM nd_users WHERE " .. table.concat(whereParts, " OR ") .. " LIMIT 1"
|
||||
user = MySQL.query.await(query, params)
|
||||
end
|
||||
|
||||
if user and user[1] then
|
||||
PlayersInfo[src].userId = user[1].user_id
|
||||
|
||||
local updateParts = {}
|
||||
local updateParams = {}
|
||||
|
||||
for identifierType, identifier in pairs(identifiers) do
|
||||
local columnName = "id_" .. identifierType
|
||||
local cleanId = identifier:gsub("^[^:]*:", "")
|
||||
table.insert(updateParts, columnName .. " = ?")
|
||||
table.insert(updateParams, cleanId)
|
||||
end
|
||||
|
||||
if #updateParts > 0 then
|
||||
table.insert(updateParams, user[1].user_id)
|
||||
local updateQuery = "UPDATE nd_users SET " .. table.concat(updateParts, ", ") .. " WHERE user_id = ?"
|
||||
MySQL.update.await(updateQuery, updateParams)
|
||||
end
|
||||
else
|
||||
local columns = {}
|
||||
local values = {}
|
||||
local insertParams = {}
|
||||
|
||||
for identifierType, identifier in pairs(identifiers) do
|
||||
local columnName = "id_" .. identifierType
|
||||
local cleanId = identifier:gsub("^[^:]*:", "")
|
||||
table.insert(columns, columnName)
|
||||
table.insert(values, "?")
|
||||
table.insert(insertParams, cleanId)
|
||||
end
|
||||
|
||||
local insertQuery = "INSERT INTO nd_users (" .. table.concat(columns, ", ") .. ") VALUES (" .. table.concat(values, ", ") .. ")"
|
||||
local user_id = MySQL.insert.await(insertQuery, insertParams)
|
||||
PlayersInfo[src].userId = user_id
|
||||
end
|
||||
|
||||
if Config.multiCharacter then return end
|
||||
Wait(3000)
|
||||
|
||||
@@ -164,14 +230,6 @@ AddEventHandler("onResourceStop", function(name)
|
||||
end
|
||||
end)
|
||||
|
||||
MySQL.ready(function()
|
||||
Wait(100)
|
||||
NDCore.loadSQL({
|
||||
"database/characters.sql",
|
||||
"database/vehicles.sql"
|
||||
}, resourceName)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("ND:playerEliminated", function(info)
|
||||
local src = source
|
||||
local player = NDCore.getPlayer(src)
|
||||
@@ -188,3 +246,17 @@ RegisterNetEvent("ND:updateClothing", function(clothing)
|
||||
if not player or not clothing or type(clothing) ~= "table" then return end
|
||||
player.setMetadata("clothing", clothing)
|
||||
end)
|
||||
|
||||
MySQL.ready(function()
|
||||
Wait(100)
|
||||
NDCore.loadSQL({
|
||||
"database/users.sql",
|
||||
"database/characters.sql",
|
||||
"database/vehicles.sql",
|
||||
}, resourceName)
|
||||
end)
|
||||
|
||||
-- Hourly cron, purge soft-deleted characters older than 30 days.
|
||||
lib.cron.new("0 * * * *", function()
|
||||
MySQL.update.await("DELETE FROM nd_characters WHERE deleted_at IS NOT NULL AND deleted_at < DATE_SUB(NOW(), INTERVAL 30 DAY)")
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user