151 lines
6.7 KiB
Lua
151 lines
6.7 KiB
Lua
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
local availableJobs = Config.AvailableJobs
|
||
|
|
||
|
-- Exports
|
||
|
|
||
|
local function AddCityJob(jobName, toCH)
|
||
|
if availableJobs[jobName] then return false, 'already added' end
|
||
|
availableJobs[jobName] = {
|
||
|
['label'] = toCH.label,
|
||
|
['isManaged'] = toCH.isManaged
|
||
|
}
|
||
|
return true, 'success'
|
||
|
end
|
||
|
|
||
|
exports('AddCityJob', AddCityJob)
|
||
|
|
||
|
-- Functions
|
||
|
|
||
|
local function giveStarterItems()
|
||
|
local Player = QBCore.Functions.GetPlayer(source)
|
||
|
if not Player then return end
|
||
|
for _, v in pairs(QBCore.Shared.StarterItems) do
|
||
|
local info = {}
|
||
|
if v.item == 'id_card' then
|
||
|
info.citizenid = Player.PlayerData.citizenid
|
||
|
info.firstname = Player.PlayerData.charinfo.firstname
|
||
|
info.lastname = Player.PlayerData.charinfo.lastname
|
||
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
||
|
info.gender = Player.PlayerData.charinfo.gender
|
||
|
info.nationality = Player.PlayerData.charinfo.nationality
|
||
|
elseif v.item == 'driver_license' then
|
||
|
info.firstname = Player.PlayerData.charinfo.firstname
|
||
|
info.lastname = Player.PlayerData.charinfo.lastname
|
||
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
||
|
info.type = 'Class C Driver License'
|
||
|
end
|
||
|
Player.Functions.AddItem(v.item, 1, nil, info)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Callbacks
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-cityhall:server:receiveJobs', function(_, cb)
|
||
|
cb(availableJobs)
|
||
|
end)
|
||
|
|
||
|
-- Events
|
||
|
|
||
|
RegisterNetEvent('qb-cityhall:server:requestId', function(item, hall)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
if not Player then return end
|
||
|
local itemInfo = Config.Cityhalls[hall].licenses[item]
|
||
|
if not Player.Functions.RemoveMoney('cash', itemInfo.cost) then return TriggerClientEvent('QBCore:Notify', src, ('Du har ikke nok penge, du har brug for %s KR'):format(itemInfo.cost), 'error') end
|
||
|
local info = {}
|
||
|
if item == 'id_card' then
|
||
|
info.citizenid = Player.PlayerData.citizenid
|
||
|
info.firstname = Player.PlayerData.charinfo.firstname
|
||
|
info.lastname = Player.PlayerData.charinfo.lastname
|
||
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
||
|
info.gender = Player.PlayerData.charinfo.gender
|
||
|
info.nationality = Player.PlayerData.charinfo.nationality
|
||
|
elseif item == 'driver_license' then
|
||
|
info.firstname = Player.PlayerData.charinfo.firstname
|
||
|
info.lastname = Player.PlayerData.charinfo.lastname
|
||
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
||
|
info.type = 'Class C Driver License'
|
||
|
elseif item == 'weaponlicense' then
|
||
|
info.firstname = Player.PlayerData.charinfo.firstname
|
||
|
info.lastname = Player.PlayerData.charinfo.lastname
|
||
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
||
|
else
|
||
|
return false -- DropPlayer(src, 'Attempted exploit abuse')
|
||
|
end
|
||
|
if not Player.Functions.AddItem(item, 1, nil, info) then return end
|
||
|
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], 'add')
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-cityhall:server:sendDriverTest', function(instructors)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
if not Player then return end
|
||
|
for i = 1, #instructors do
|
||
|
local citizenid = instructors[i]
|
||
|
local SchoolPlayer = QBCore.Functions.GetPlayerByCitizenId(citizenid)
|
||
|
if SchoolPlayer then
|
||
|
TriggerClientEvent('qb-cityhall:client:sendDriverEmail', SchoolPlayer.PlayerData.source, Player.PlayerData.charinfo)
|
||
|
else
|
||
|
local mailData = {
|
||
|
sender = 'Borgerservice',
|
||
|
subject = 'Køretime anmodning',
|
||
|
message = 'Hej,<br><br>Vi har lige modtaget en besked om, at nogen gerne vil tage køretimer.<br>Hvis du er klar til at undervise, bedes du kontakte dem:<br>Navn: <strong>' .. Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname .. '<br />Phone Number: <strong>' .. Player.PlayerData.charinfo.phone .. '</strong><br><br>Kind regards,<br>Township Los Santos',
|
||
|
button = {}
|
||
|
}
|
||
|
exports['qb-phone']:sendNewMailToOffline(citizenid, mailData)
|
||
|
end
|
||
|
end
|
||
|
TriggerClientEvent('QBCore:Notify', src, 'En besked er blevet sendt til køreskolen - Du vil modtage en besked fra dem snarest.', 'success', 5000)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-cityhall:server:ApplyJob', function(job, cityhallCoords)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
if not Player then return end
|
||
|
local ped = GetPlayerPed(src)
|
||
|
local pedCoords = GetEntityCoords(ped)
|
||
|
|
||
|
local data = {
|
||
|
['src'] = src,
|
||
|
['job'] = job
|
||
|
}
|
||
|
if #(pedCoords - cityhallCoords) >= 20.0 or not availableJobs[job] then
|
||
|
return false -- DropPlayer(source, "Attempted exploit abuse")
|
||
|
end
|
||
|
local JobInfo = QBCore.Shared.Jobs[job]
|
||
|
Player.Functions.SetJob(data.job, 0)
|
||
|
TriggerClientEvent('QBCore:Notify', data.src, Lang:t('info.new_job', { job = JobInfo.label }))
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-cityhall:server:getIDs', giveStarterItems)
|
||
|
|
||
|
RegisterNetEvent('QBCore:Client:UpdateObject', function()
|
||
|
QBCore = exports['qb-core']:GetCoreObject()
|
||
|
end)
|
||
|
|
||
|
-- Commands
|
||
|
|
||
|
QBCore.Commands.Add('drivinglicense', 'Give a drivers license to someone', { { 'id', 'ID of a person' } }, true, function(source, args)
|
||
|
local Player = QBCore.Functions.GetPlayer(source)
|
||
|
local SearchedPlayer = QBCore.Functions.GetPlayer(tonumber(args[1]))
|
||
|
if SearchedPlayer then
|
||
|
if not SearchedPlayer.PlayerData.metadata['licences']['driver'] then
|
||
|
for i = 1, #Config.DrivingSchools do
|
||
|
for id = 1, #Config.DrivingSchools[i].instructors do
|
||
|
if Config.DrivingSchools[i].instructors[id] == Player.PlayerData.citizenid then
|
||
|
SearchedPlayer.PlayerData.metadata['licences']['driver'] = true
|
||
|
SearchedPlayer.Functions.SetMetaData('licences', SearchedPlayer.PlayerData.metadata['licences'])
|
||
|
TriggerClientEvent('QBCore:Notify', SearchedPlayer.PlayerData.source, 'Du har bestået! Hent dit kørekort hos borgerservice!', 'success', 5000)
|
||
|
TriggerClientEvent('QBCore:Notify', source, ('Spiller med ID %s har fået adgang til kørekort'):format(SearchedPlayer.PlayerData.source), 'success', 5000)
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', source, "Kan ikke give adgang til kørekort - Spilleren har allerede adgang", 'error')
|
||
|
end
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', source, 'Spiller ikke online', 'error')
|
||
|
end
|
||
|
end)
|