212 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| if Config.Framework ~= 'qb' then
 | |
|     return
 | |
| end
 | |
| 
 | |
| QBCore = exports['qb-core']:GetCoreObject()
 | |
| 
 | |
| userTable = 'players'          -- users
 | |
| identifierColumn = 'citizenid' -- identifier
 | |
| accountsColumn = 'money'
 | |
| 
 | |
| RegisterNetEvent('QBCore:Server:OnPlayerLoaded', function()
 | |
|     local src = source
 | |
|     Debug('Loaded player:', src)
 | |
|     CreateQuests(src)
 | |
| end)
 | |
| 
 | |
| CreateThread(function()
 | |
|     for k, v in pairs(QBCore.Functions.GetPlayers()) do
 | |
|         if v then
 | |
|             Debug('Loaded player:', v)
 | |
|             CreateQuests(v)
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| function RegisterServerCallback(name, cb)
 | |
|     QBCore.Functions.CreateCallback(name, cb)
 | |
| end
 | |
| 
 | |
| function RegisterUsableItem(name, cb)
 | |
|     QBCore.Functions.CreateUseableItem(name, cb)
 | |
| end
 | |
| 
 | |
| function GetPlayerFromId(source)
 | |
|     return QBCore.Functions.GetPlayer(source)
 | |
| end
 | |
| 
 | |
| function GetPlayerFromIdentifier(identifier)
 | |
|     return QBCore.Functions.GetPlayerByCitizenId(identifier)
 | |
| end
 | |
| 
 | |
| function AddMoneyToAccount(account, amount, isNotRent)
 | |
|     local source = GetPlayerSourceFromIdentifier(account)
 | |
|     if source then
 | |
|         AddAccountMoney(source, 'bank', amount)
 | |
|         if isNotRent then return end
 | |
|         TriggerClientEvent('qb-houses:sendTextMessage', source, Lang('HOUSING_NOTIFICATION_RENT_PAYMENT') .. amount, 'error')
 | |
|     else
 | |
|         local result = MySQL.Sync.fetchAll('SELECT ' .. accountsColumn .. ' FROM ' .. userTable .. ' WHERE ' .. identifierColumn .. ' = ?', { account })
 | |
|         if not result[1] then return print('Add Money Account : Not finded this account: ' .. account) end
 | |
|         local accounts = json.decode(result[1].money)
 | |
|         accounts.bank = accounts.bank + amount
 | |
|         MySQL.Sync.execute('UPDATE ' .. userTable .. ' SET ' .. accountsColumn .. ' = ? WHERE ' .. identifierColumn .. ' = ?', {
 | |
|             json.encode(accounts),
 | |
|             account
 | |
| 
 | |
|         })
 | |
|     end
 | |
| end
 | |
| 
 | |
| function PlayerIsAdmin(source)
 | |
|     return QBCore.Functions.HasPermission(source, 'god') or IsPlayerAceAllowed(source, 'command') or QBCore.Functions.HasPermission(source, 'admin')
 | |
| end
 | |
| 
 | |
| function GetJobName(source)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     if not player then return '' end
 | |
|     return player.PlayerData.job.name
 | |
| end
 | |
| 
 | |
| function GetCharacterName(source)
 | |
|     local player = GetPlayerFromId(source).PlayerData.charinfo
 | |
|     return player.firstname, player.lastname
 | |
| end
 | |
| 
 | |
| function GetAccountMoney(source, account)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     if account == 'money' then account = 'cash' end
 | |
|     if account == 'black_money' then account = 'crypto' end
 | |
|     return player.PlayerData.money[account]
 | |
| end
 | |
| 
 | |
| function AddAccountMoney(source, account, amount)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     if account == 'money' then account = 'cash' end
 | |
|     player.Functions.AddMoney(account, amount)
 | |
| end
 | |
| 
 | |
| function RemoveAccountMoney(source, account, amount)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     if account == 'money' then account = 'cash' end
 | |
|     player.Functions.RemoveMoney(account, amount)
 | |
| end
 | |
| 
 | |
| function RemoveItem(source, item, count)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     player.Functions.RemoveItem(item, count)
 | |
| end
 | |
| 
 | |
| function GetIdentifier(source)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     if not player then return false end
 | |
|     return player.PlayerData.citizenid
 | |
| end
 | |
| 
 | |
| function GetPlayerSourceFromIdentifier(identifier)
 | |
|     local player = GetPlayerFromIdentifier(identifier)
 | |
|     if not player then return false end
 | |
|     return player.PlayerData.source
 | |
| end
 | |
| 
 | |
| function GetPlayerSourceFromSource(source)
 | |
|     local player = GetPlayerFromId(source)
 | |
|     if not player then
 | |
|         return false
 | |
|     end
 | |
|     return player.PlayerData.source
 | |
| end
 | |
| 
 | |
| function GetCharacterFromIdentifier(identifier)
 | |
|     local result = MySQL.Sync.fetchAll('SELECT charinfo FROM `players` WHERE citizenid = ?', { identifier })
 | |
|     if not result[1] then
 | |
|         return '', ''
 | |
|     end
 | |
|     result = result[1]
 | |
|     result = json.decode(result.charinfo)
 | |
|     return result?.firstname, result?.lastname
 | |
| end
 | |
| 
 | |
| function RemoveMoneyFromAccount(account, amount, dontCheck)
 | |
|     local source = GetPlayerSourceFromIdentifier(account)
 | |
|     if source then
 | |
|         RemoveAccountMoney(source, 'bank', amount)
 | |
|         return true
 | |
|     else
 | |
|         local player = MySQL.Sync.fetchAll('SELECT ' .. accountsColumn .. ' FROM ' .. userTable .. ' WHERE ' .. identifierColumn .. ' = ?', { account })
 | |
|         if player[1] then
 | |
|             local accounts = json.decode(player[1].money)
 | |
|             if accounts.bank >= amount or dontCheck then
 | |
|                 accounts.bank = accounts.bank - amount
 | |
|                 MySQL.Sync.execute('UPDATE ' .. userTable .. ' SET ' .. accountsColumn .. ' = ? WHERE ' .. identifierColumn .. ' = ?', { json.encode(accounts), account })
 | |
|                 return true
 | |
|             end
 | |
|         end
 | |
|     end
 | |
|     return false
 | |
| end
 | |
| 
 | |
| function GetPlayerSQLDataFromIdentifier(identifier)
 | |
|     local result = MySQL.Sync.fetchAll('SELECT * FROM `players` WHERE citizenid = ? LIMIT 1', { identifier })
 | |
|     if result[1] then
 | |
|         return result[1]
 | |
|     end
 | |
|     return false
 | |
| end
 | |
| 
 | |
| function UpdateInside(src, insideId, bool)
 | |
|     local Player = GetPlayerFromId(src)
 | |
|     Player.Functions.SetMetaData('currentHouseId', bool and insideId or nil)
 | |
| end
 | |
| 
 | |
| RegisterServerCallback('qb-phone:server:MeosGetPlayerHouses', function(source, cb, input)
 | |
|     if input then
 | |
|         local search = escape_sqli(input)
 | |
|         local searchData = {}
 | |
|         local query = 'SELECT * FROM `' .. userTable .. '` WHERE `' .. identifierColumn .. '` = "' .. search .. '"'
 | |
|         -- Split on " " and check each var individual
 | |
|         local searchParameters = SplitStringToArray(search)
 | |
|         -- Construct query dynamicly for individual parm check
 | |
|         if #searchParameters > 1 then
 | |
|             query = query .. ' OR `firstname` LIKE "%' .. searchParameters[1] .. '%" OR `lastname` LIKE "%' .. searchParameters[1] .. '%"'
 | |
|             for i = 2, #searchParameters do
 | |
|                 query = query .. ' OR `firstname` LIKE "%' .. searchParameters[i] .. '%" OR `lastname` LIKE "%' .. searchParameters[i] .. '%"'
 | |
|             end
 | |
|         else
 | |
|             query = query .. ' OR `firstname` LIKE "%' .. search .. '%" OR `lastname` LIKE "%' .. search .. '%"'
 | |
|         end
 | |
|         local result = MySQL.Sync.fetchAll(query)
 | |
|         if result[1] then
 | |
|             local houses = MySQL.Sync.fetchAll('SELECT * FROM player_houses WHERE citizenid = ?',
 | |
|                 { result[1][identifierColumn] })
 | |
|             if houses[1] then
 | |
|                 for k, v in pairs(houses) do
 | |
|                     local charinfo = {
 | |
|                         firstname = result[1].firstname,
 | |
|                         lastname = result[1].lastname,
 | |
|                     }
 | |
|                     searchData[#searchData + 1] = {
 | |
|                         name = v.house,
 | |
|                         keyholders = v.keyholders,
 | |
|                         owner = v.citizenid,
 | |
|                         price = Config.Houses[v.house].price,
 | |
|                         label = Config.Houses[v.house].address,
 | |
|                         tier = Config.Houses[v.house].tier,
 | |
|                         garage = Config.Houses[v.house].garage,
 | |
|                         charinfo = charinfo,
 | |
|                         coords = {
 | |
|                             x = Config.Houses[v.house].coords.enter.x,
 | |
|                             y = Config.Houses[v.house].coords.enter.y,
 | |
|                             z = Config.Houses[v.house].coords.enter.z
 | |
|                         }
 | |
|                     }
 | |
|                 end
 | |
|                 cb(searchData)
 | |
|             end
 | |
|         else
 | |
|             cb(nil)
 | |
|         end
 | |
|     else
 | |
|         cb(nil)
 | |
|     end
 | |
| end)
 | 
