diff --git a/server/main.lua b/server/main.lua index d3fd6324..d946fee3 100644 --- a/server/main.lua +++ b/server/main.lua @@ -1,98 +1,100 @@ -local IdentifierTables = {} +if ESX.GetConfig().Kashacters then + local IdentifierTables = {} -function GetTables() - MySQL.ready(function () - MySQL.Async.fetchAll('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = @id AND TABLE_SCHEMA = @db', { ['@id'] = "owner", ["@db"] = Config.databaseName}, function(result) - if result then - --print(json.encode(result)) - for k, v in pairs(result) do - table.insert( IdentifierTables, {table = v.TABLE_NAME, column = "owner"}) - end - end - end) - MySQL.Async.fetchAll('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = @id AND TABLE_SCHEMA = @db', { ['@id'] = "identifier", ["@db"] = Config.databaseName}, function(result) - if result then + function GetTables() + MySQL.ready(function () + MySQL.Async.fetchAll('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = @id AND TABLE_SCHEMA = @db', { ['@id'] = "owner", ["@db"] = Config.databaseName}, function(result) + if result then --print(json.encode(result)) - for k, v in pairs(result) do - table.insert( IdentifierTables, {table = v.TABLE_NAME, column = "identifier"}) - end - end + for k, v in pairs(result) do + table.insert( IdentifierTables, {table = v.TABLE_NAME, column = "owner"}) + end + end + end) + MySQL.Async.fetchAll('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = @id AND TABLE_SCHEMA = @db', { ['@id'] = "identifier", ["@db"] = Config.databaseName}, function(result) + if result then + --print(json.encode(result)) + for k, v in pairs(result) do + table.insert( IdentifierTables, {table = v.TABLE_NAME, column = "identifier"}) + end + end + end) end) + end + + GetTables() + + RegisterServerEvent("kashactersS:SetupCharacters") + AddEventHandler('kashactersS:SetupCharacters', function() + local src = source + local Characters = GetPlayerCharacters(src) + TriggerClientEvent('kashactersC:SetupUI', src, Characters) end) -end -GetTables() - -RegisterServerEvent("kashactersS:SetupCharacters") -AddEventHandler('kashactersS:SetupCharacters', function() - local src = source - local Characters = GetPlayerCharacters(src) - TriggerClientEvent('kashactersC:SetupUI', src, Characters) -end) - -RegisterServerEvent("kashactersS:CharacterChosen") -AddEventHandler('kashactersS:CharacterChosen', function(charid, ischar) - local src = source - local isNew = true - if ischar then isNew = false end - local spawn = {} - if type(charid) == "number" and string.len(charid) == 1 and type(ischar) == "boolean" then - TriggerEvent('esx:onPlayerJoined', src, charid, isNew) - else - -- Trigger Ban Event here to ban individuals trying to use SQL Injections - end -end) - -RegisterServerEvent("kashactersS:DeleteCharacter") -AddEventHandler('kashactersS:DeleteCharacter', function(charid) - local src = source - if type(charid) == "number" and string.len(charid) == 1 then - DeleteCharacter(ESX.GetIdentifier(src), charid) - TriggerClientEvent("kashactersC:ReloadCharacters", src) - else - -- Trigger Ban Event here to ban individuals trying to use SQL Injections - end -end) - -function GetPlayerCharacters(source) - local Chars = MySQLAsyncExecute("SELECT * FROM `users` WHERE `identifier` LIKE 'char%:"..ESX.GetIdentifier(source).."'") - for i = 1, #Chars, 1 do - charJob = MySQLAsyncExecute("SELECT * FROM `jobs` WHERE `name` = '"..Chars[i].job.."'") - charJobgrade = MySQLAsyncExecute("SELECT * FROM `job_grades` WHERE `grade` = '"..Chars[i].job_grade.."' AND `job_name` = '"..Chars[i].job.."'") - local accounts = json.decode(Chars[i].accounts) - Chars[i].bank = accounts["bank"] - Chars[i].money = accounts["money"] - Chars[i].job = charJob[1].label - if charJob[1].label == "Unemployed" then - Chars[i].job_grade = "" + RegisterServerEvent("kashactersS:CharacterChosen") + AddEventHandler('kashactersS:CharacterChosen', function(charid, ischar) + local src = source + local isNew = true + if ischar then isNew = false end + local spawn = {} + if type(charid) == "number" and string.len(charid) == 1 and type(ischar) == "boolean" then + TriggerEvent('esx:onPlayerJoined', src, charid, isNew) else - Chars[i].job_grade = charJobgrade[1].label + -- Trigger Ban Event here to ban individuals trying to use SQL Injections end - if Chars[i].sex == "m" then - Chars[i].sex = "Male" + end) + + RegisterServerEvent("kashactersS:DeleteCharacter") + AddEventHandler('kashactersS:DeleteCharacter', function(charid) + local src = source + if type(charid) == "number" and string.len(charid) == 1 then + DeleteCharacter(ESX.GetIdentifier(src), charid) + TriggerClientEvent("kashactersC:ReloadCharacters", src) else - Chars[i].sex = "Female" + -- Trigger Ban Event here to ban individuals trying to use SQL Injections + end + end) + + function GetPlayerCharacters(source) + local Chars = MySQLAsyncExecute("SELECT * FROM `users` WHERE `identifier` LIKE 'char%:"..ESX.GetIdentifier(source).."'") + for i = 1, #Chars, 1 do + local charJob = ESX.Jobs[Chars[i].job] + local charGrade = charJob.grades[tostring(Chars[i].job_grade)] + local accounts = json.decode(Chars[i].accounts) + Chars[i].bank = accounts["bank"] + Chars[i].money = accounts["money"] + Chars[i].job = charJob.label + if charJob.label == "Unemployed" then + Chars[i].job_grade = "" + else + Chars[i].job_grade = charGrade.label + end + if Chars[i].sex == "m" then + Chars[i].sex = "Male" + else + Chars[i].sex = "Female" + end + end + return Chars + end + + function DeleteCharacter(identifier, charid) + local identifier = 'char'..charid..':'..identifier + for _, itable in pairs(IdentifierTables) do + MySQLAsyncExecute("DELETE FROM `"..itable.table.."` WHERE `"..itable.column.."` = '"..identifier.."'") end end - return Chars -end -function DeleteCharacter(identifier, charid) - local identifier = 'char'..charid..':'..identifier - for _, itable in pairs(IdentifierTables) do - MySQLAsyncExecute("DELETE FROM `"..itable.table.."` WHERE `"..itable.column.."` = '"..identifier.."'") + function MySQLAsyncExecute(query) + local IsBusy = true + local result = nil + MySQL.Async.fetchAll(query, {}, function(data) + result = data + IsBusy = false + end) + while IsBusy do + Citizen.Wait(0) + end + return result end end - -function MySQLAsyncExecute(query) - local IsBusy = true - local result = nil - MySQL.Async.fetchAll(query, {}, function(data) - result = data - IsBusy = false - end) - while IsBusy do - Citizen.Wait(0) - end - return result -end