Update main.lua

Added SonoranCAD integration as well as some improvements
This commit is contained in:
Andyyy7666
2022-02-26 01:45:27 +01:00
committed by GitHub
parent 554cbc15c1
commit fbec3aa961

View File

@@ -1,10 +1,34 @@
------------------------------------------------------------------------ -- For support join my discord: https://discord.gg/Z9Mxu72zZ6
------------------------------------------------------------------------
-- DO NOT EDIT IF YOU DON'T KNOW WHAT YOU'RE DOING -- if server_config.SonoranCAD_Enabled then
-- -- local function OnPlayerConnecting(name, setKickReason, deferrals)
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 -- local player = source
------------------------------------------------------------------------ local steamIdentifier
------------------------------------------------------------------------ local identifiers = GetPlayerIdentifiers(player)
deferrals.defer()
Citizen.Wait(0)
deferrals.update(string.format("Hello %s. Your Steam ID is being checked.", name))
for _, v in pairs(identifiers) do
if string.find(v, "steam") then
steamIdentifier = v
break
end
end
Citizen.Wait(0)
if not steamIdentifier then
deferrals.done("You are not connected to Steam.")
else
deferrals.done()
end
end
AddEventHandler("playerConnecting", OnPlayerConnecting)
end
expectedName = "ND_Core" -- This is the resource and is not suggested to be changed. expectedName = "ND_Core" -- This is the resource and is not suggested to be changed.
resource = GetCurrentResourceName() resource = GetCurrentResourceName()
@@ -40,6 +64,9 @@ PerformHttpRequest("https://raw.githubusercontent.com/Andyyy7666/ND_Framework/ma
end end
end) end)
-- onlinePlayers table.
onlinePlayers = {}
-- Get player identifier function (This will not change the identifier all the time) -- Get player identifier function (This will not change the identifier all the time)
function GetPlayerIdentifierFromType(type, source) -- Credits: xander1998, Post: https://forum.cfx.re/t/solved-is-there-a-better-way-to-get-lic-steam-and-ip-than-getplayeridentifiers/236243/2?u=andyyy7666 function GetPlayerIdentifierFromType(type, source) -- Credits: xander1998, Post: https://forum.cfx.re/t/solved-is-there-a-better-way-to-get-lic-steam-and-ip-than-getplayeridentifiers/236243/2?u=andyyy7666
local identifiers = {} local identifiers = {}
@@ -61,7 +88,7 @@ end
RegisterNetEvent("checkPerms") RegisterNetEvent("checkPerms")
AddEventHandler("checkPerms", function(role) AddEventHandler("checkPerms", function(role)
local player = source local player = source
local rolePermission = IsRolePresent(player, role) local rolePermission = IsRolePresent(player, role, config.departments)
TriggerClientEvent("permsChecked", player, role, rolePermission) TriggerClientEvent("permsChecked", player, role, rolePermission)
end) end)
@@ -76,16 +103,57 @@ end)
RegisterNetEvent("getCharacters") RegisterNetEvent("getCharacters")
AddEventHandler("getCharacters", function() AddEventHandler("getCharacters", function()
local player = source local player = source
local characters = {}
local department = "CIV"
if server_config.SonoranCAD_Enabled then
local steam = string.gsub(GetPlayerIdentifierFromType("steam", player), "steam:", "")
local info = {
["id"] = server_config.SonoranCAD_CommunityID,
["key"] = server_config.SonoranCAD_APIKey,
["type"] = "GET_CHARACTERS",
["data"] = {
{
["apiId"] = steam
}
}
}
PerformHttpRequest("https://api.sonorancad.com/civilian/get_characters", function(errorCode, resultData, resultHeaders)
for k, v in pairs(json.decode(resultData)) do
if v.sections[2].fields[6].value == "M" then
gender = "Male"
else
gender = "Female"
end
exports.oxmysql:query("SELECT cash, bank, twt FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), v.id}, function(result)
if result then
if result[1] and result[1].cash and result[1].bank then
cash = result[1].cash
bank = result[1].bank
twt = result[1].twt
else
cash = config.maxStartingCash
bank = config.maxStartingBank
twt = v.sections[2].fields[1].value .. " " .. v.sections[2].fields[2].value
exports.oxmysql:query("INSERT INTO characters (license, character_id, cash, bank, twt) VALUES (?, ?, ?, ?, ?)", {GetPlayerIdentifierFromType("license", player), v.id, cash, bank, twt})
end
characters[v.id] = {id = v.id, firstName = v.sections[2].fields[1].value, lastName = v.sections[2].fields[2].value, dob = v.sections[2].fields[4].value, gender = gender, twt = twt, department = "CIV", cash = cash, bank = bank}
TriggerClientEvent("returnCharacters", player, characters)
end
end)
end
end, "POST", json.encode(info))
else
exports.oxmysql:query("SELECT * FROM characters WHERE license = ?", {GetPlayerIdentifierFromType("license", player)}, function(result) exports.oxmysql:query("SELECT * FROM characters WHERE license = ?", {GetPlayerIdentifierFromType("license", player)}, function(result)
if result then if result then
characters = {}
for i = 1, #result do for i = 1, #result do
temp = result[i] temp = result[i]
table.insert(characters, {id = temp.character_id, firstName = temp.first_name, lastName = temp.last_name, dob = temp.dob, gender = temp.gender, twt = temp.twt, department = temp.department, cash = temp.cash, bank = temp.bank}) characters[temp.character_id] = {id = temp.character_id, firstName = temp.first_name, lastName = temp.last_name, dob = temp.dob, gender = temp.gender, twt = temp.twt, department = temp.department, cash = temp.cash, bank = temp.bank}
end end
TriggerClientEvent("returnCharacters", player, characters) TriggerClientEvent("returnCharacters", player, characters)
end end
end) end)
end
end) end)
-- Creating a new character and increasing the character id. -- Creating a new character and increasing the character id.
@@ -93,6 +161,42 @@ RegisterNetEvent("newCharacter")
AddEventHandler("newCharacter", function(newCharacter) AddEventHandler("newCharacter", function(newCharacter)
local player = source local player = source
local license = GetPlayerIdentifierFromType("license", player) local license = GetPlayerIdentifierFromType("license", player)
if server_config.SonoranCAD_Enabled then
local steam = string.gsub(GetPlayerIdentifierFromType("steam", player), "steam:", "")
if newCharacter.gender == "Male" then
newGender = "M"
else
newGender = "F"
end
local info = {
["id"] = server_config.SonoranCAD_CommunityID,
["key"] = server_config.SonoranCAD_APIKey,
["type"] = "NEW_CHARACTER",
["data"] = {
{
["user"] = steam,
["useDictionary"] = true,
["recordTypeId"] = 7,
["replaceValues"] = {
["first"] = newCharacter.firstName,
["last"] = newCharacter.lastName,
["dob"] = newCharacter.dateOfBirth,
["sex"] = newGender
}
}
}
}
PerformHttpRequest("https://api.sonorancad.com/civilian/new_character", function(errorCode, resultData, resultHeaders)
print("Returned error code: " .. tostring(errorCode))
print("Returned data: " .. tostring(resultData))
print("Returned result Headers: " .. tostring(resultHeaders))
end, "POST", json.encode(info))
TriggerClientEvent("refreshCharacters", player)
else
exports.oxmysql:query("SELECT character_id FROM characters WHERE license = ?", {GetPlayerIdentifierFromType("license", player)}, function(result) exports.oxmysql:query("SELECT character_id FROM characters WHERE license = ?", {GetPlayerIdentifierFromType("license", player)}, function(result)
if (result) and (config.characterLimit > #result) then if (result) and (config.characterLimit > #result) then
exports.oxmysql:query("SELECT MAX(character_id) AS nextID FROM characters WHERE license = ?", {license}, function(result) exports.oxmysql:query("SELECT MAX(character_id) AS nextID FROM characters WHERE license = ?", {license}, function(result)
@@ -110,7 +214,7 @@ AddEventHandler("newCharacter", function(newCharacter)
characters = {} characters = {}
for i = 1, #result do for i = 1, #result do
temp = result[i] temp = result[i]
table.insert(characters, {id = temp.character_id, firstName = temp.first_name, lastName = temp.last_name, dob = temp.dob, gender = temp.gender, twt = temp.twt, department = temp.department, cash = temp.cash, bank = temp.bank}) characters[temp.character_id] = {id = temp.character_id, firstName = temp.first_name, lastName = temp.last_name, dob = temp.dob, gender = temp.gender, twt = temp.twt, department = temp.department, cash = temp.cash, bank = temp.bank}
end end
TriggerClientEvent("returnCharacters", player, characters) TriggerClientEvent("returnCharacters", player, characters)
end end
@@ -121,22 +225,75 @@ AddEventHandler("newCharacter", function(newCharacter)
end) end)
end end
end) end)
end
end) end)
-- Delete character from database. -- Delete character from database.
RegisterNetEvent("delCharacter") RegisterNetEvent("delCharacter")
AddEventHandler("delCharacter", function(character_id) AddEventHandler("delCharacter", function(character_id)
local player = source local player = source
if server_config.SonoranCAD_Enabled then
local info = {
["id"] = server_config.SonoranCAD_CommunityID,
["key"] = server_config.SonoranCAD_APIKey,
["type"] = "REMOVE_CHARACTER",
["data"] = {
{
["id"] = character_id,
},
}
}
PerformHttpRequest("https://api.sonorancad.com/civilian/remove_character", function(errorCode, resultData, resultHeaders)
print("Returned error code: " .. tostring(errorCode))
print("Returned data: " .. tostring(resultData))
print("Returned result Headers: " .. tostring(resultHeaders))
end, "POST", json.encode(info))
exports.oxmysql:query("DELETE FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), character_id}) exports.oxmysql:query("DELETE FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), character_id})
else
exports.oxmysql:query("DELETE FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), character_id})
end
end) end)
-- Update the character info when edited. -- Update the character info when edited.
RegisterNetEvent("editCharacter") RegisterNetEvent("editCharacter")
AddEventHandler("editCharacter", function(newCharacter) AddEventHandler("editCharacter", function(newCharacter)
local player = source local player = source
if server_config.SonoranCAD_Enabled then
local steam = string.gsub(GetPlayerIdentifierFromType("steam", player), "steam:", "")
if newCharacter.gender == "Male" then
newGender = "M"
else
newGender = "F"
end
local info = {
["id"] = server_config.SonoranCAD_CommunityID,
["key"] = server_config.SonoranCAD_APIKey,
["type"] = "EDIT_CHARACTER",
["data"] = {
{
["user"] = steam,
["useDictionary"] = true,
["recordId"] = newCharacter.id,
["replaceValues"] = {
["first"] = newCharacter.firstName,
["last"] = newCharacter.lastName,
["dob"] = newCharacter.dateOfBirth,
["sex"] = newGender
}
}
}
}
PerformHttpRequest("https://api.sonorancad.com/civilian/edit_character", function(errorCode, resultData, resultHeaders)
print("Returned error code: " .. tostring(errorCode))
print("Returned data: " .. tostring(resultData))
print("Returned result Headers: " .. tostring(resultHeaders))
end, "POST", json.encode(info))
else
exports.oxmysql:query("UPDATE characters SET first_name = ?, last_name = ?, dob = ?, gender = ?, twt = ?, department = ? WHERE license = ? AND character_id = ?", {newCharacter.firstName, newCharacter.lastName, newCharacter.dateOfBirth, newCharacter.gender, newCharacter.twtName, newCharacter.department, GetPlayerIdentifierFromType("license", player), newCharacter.id}) exports.oxmysql:query("UPDATE characters SET first_name = ?, last_name = ?, dob = ?, gender = ?, twt = ?, department = ? WHERE license = ? AND character_id = ?", {newCharacter.firstName, newCharacter.lastName, newCharacter.dateOfBirth, newCharacter.gender, newCharacter.twtName, newCharacter.department, GetPlayerIdentifierFromType("license", player), newCharacter.id})
end
end) end)
if config.enableMoneySystem then
-- This is used to find out how much money the player has and use it in the client to show it on the ui. -- This is used to find out how much money the player has and use it in the client to show it on the ui.
RegisterNetEvent("getMoney") RegisterNetEvent("getMoney")
AddEventHandler("getMoney", function(characterid) AddEventHandler("getMoney", function(characterid)
@@ -152,32 +309,6 @@ AddEventHandler("getMoney", function(characterid)
end) end)
end) end)
-- onlinePlayers table.
onlinePlayers = {}
-- add a player to the table.
RegisterNetEvent("characterOnline")
AddEventHandler("characterOnline", function(id)
local player = source
local license = GetPlayerIdentifierFromType("license", player)
exports.oxmysql:query("SELECT * FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), id}, function(result)
if result then
local i = result[1]
onlinePlayers[player] = {
characterId = id,
firstName = i.first_name,
lastName = i.last_name,
dob = i.dob,
gender = i.gender,
twt = i.twt,
dept = i.department,
cash = i.cash,
bank = i.bank
}
end
end)
end)
-- paying command. -- paying command.
RegisterCommand(config.payCommand, function(source, args, raw) RegisterCommand(config.payCommand, function(source, args, raw)
local player = source local player = source
@@ -207,19 +338,11 @@ RegisterCommand(config.payCommand, function(source, args, raw)
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", target), onlinePlayers[target].characterId}) exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", target), onlinePlayers[target].characterId})
TriggerClientEvent("updateMoney", target) TriggerClientEvent("updateMoney", target)
exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", target), onlinePlayers[target].characterId}, function(result)
if result then
TriggerClientEvent("chat:addMessage", player, { TriggerClientEvent("chat:addMessage", player, {
color = {0, 255, 0}, color = {0, 255, 0},
args = {"Success", "You paid " .. result[1].first_name .. " " .. result[1].last_name .. " $" .. amount .. "."} args = {"Success", "You paid " .. onlinePlayers[target].firstName .. " " .. onlinePlayers[target].lastName .. " $" .. amount .. "."}
}) })
exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result) TriggerClientEvent("receiveBank", target, amount, onlinePlayers[player].firstName .. " " .. onlinePlayers[player].lastName, player)
if result then
TriggerClientEvent("receiveBank", target, amount, result[1].first_name .. " " .. result[1].last_name, player)
end
end)
end
end)
end end
end end
end) end)
@@ -248,19 +371,12 @@ RegisterCommand(config.giveCommand, function(source, args, raw)
exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", k), tonumber(v.characterId)}) exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", k), tonumber(v.characterId)})
TriggerClientEvent("updateMoney", k) TriggerClientEvent("updateMoney", k)
playerFound = true playerFound = true
exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", k), tonumber(v.characterId)}, function(result)
if result then
TriggerClientEvent("chat:addMessage", player, { TriggerClientEvent("chat:addMessage", player, {
color = {0, 255, 0}, color = {0, 255, 0},
args = {"Success", "You gave " .. result[1].first_name .. " " .. result[1].last_name .. " $" .. amount .. "."} args = {"Success", "You gave " .. onlinePlayers[k].firstName .. " " .. onlinePlayers[k].lastName .. " $" .. amount .. "."}
}) })
exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result) TriggerClientEvent("receiveCash", k, amount, onlinePlayers[player].firstName .. " " .. onlinePlayers[player].lastName, player)
if result then break
TriggerClientEvent("receiveCash", k, amount, result[1].first_name .. " " .. result[1].last_name, player)
end
end)
end
end)
end end
end end
if not playerFound then if not playerFound then
@@ -286,6 +402,81 @@ Citizen.CreateThread(function()
end end
end end
end) end)
end
-- add a player to the table.
RegisterNetEvent("characterOnline")
AddEventHandler("characterOnline", function(id)
local player = source
local license = GetPlayerIdentifierFromType("license", player)
if server_config.SonoranCAD_Enabled then
local steam = string.gsub(GetPlayerIdentifierFromType("steam", player), "steam:", "")
local info = {
["id"] = server_config.SonoranCAD_CommunityID,
["key"] = server_config.SonoranCAD_APIKey,
["type"] = "GET_CHARACTERS",
["data"] = {
{
["apiId"] = steam
}
}
}
PerformHttpRequest("https://api.sonorancad.com/civilian/get_characters", function(errorCode, resultData, resultHeaders)
for k, v in pairs(json.decode(resultData)) do
if v.sections[2].fields[6].value == "M" then
gender = "Male"
else
gender = "Female"
end
exports.oxmysql:query("SELECT cash, bank, twt FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), v.id}, function(result)
if result then
if result[1] and result[1].cash and result[1].bank then
cash = result[1].cash
bank = result[1].bank
twt = result[1].twt
else
cash = config.maxStartingCash
bank = config.maxStartingBank
twt = v.sections[2].fields[1].value .. " " .. v.sections[2].fields[2].value
exports.oxmysql:query("INSERT INTO characters (license, character_id, cash, bank, twt) VALUES (?, ?, ?, ?, ?)", {GetPlayerIdentifierFromType("license", player), v.id, cash, bank, twt})
end
if v.id == id then
onlinePlayers[player] = {
characterId = id,
firstName = v.sections[2].fields[1].value,
lastName = v.sections[2].fields[2].value,
dob = v.sections[2].fields[4].value,
gender = gender,
twt = twt,
dept = "CIV",
cash = cash,
bank = bank
}
end
end
end)
end
end, "POST", json.encode(info))
else
exports.oxmysql:query("SELECT * FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), id}, function(result)
if result then
local i = result[1]
onlinePlayers[player] = {
characterId = id,
firstName = i.first_name,
lastName = i.last_name,
dob = i.dob,
gender = i.gender,
twt = i.twt,
dept = i.department,
cash = i.cash,
bank = i.bank
}
end
end)
end
end)
-- Remove player from onlinePlayers table when they leave. -- Remove player from onlinePlayers table when they leave.
AddEventHandler("playerDropped", function(reason) AddEventHandler("playerDropped", function(reason)