housing und dj

This commit is contained in:
Nordi98 2025-06-09 23:54:46 +02:00
parent 112c7b1761
commit 10a5d168d4
731 changed files with 506993 additions and 0 deletions

View file

@ -0,0 +1,212 @@
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)