mirror of
https://github.com/qbcore-fivem/qb-core.git
synced 2026-08-28 17:01:16 +00:00
58b6762ab6
Add Joining Server Translations
259 lines
8.6 KiB
Lua
259 lines
8.6 KiB
Lua
-- Event Handler
|
|
|
|
AddEventHandler('chatMessage', function(source, _, message)
|
|
if string.sub(message, 1, 1) == '/' then
|
|
CancelEvent()
|
|
return
|
|
end
|
|
end)
|
|
|
|
AddEventHandler('playerDropped', function()
|
|
local src = source
|
|
if not QBCore.Players[src] then return end
|
|
local Player = QBCore.Players[src]
|
|
TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Dropped', 'red', '**' .. GetPlayerName(src) .. '** (' .. Player.PlayerData.license .. ') left..')
|
|
Player.Functions.Save()
|
|
QBCore.Player_Buckets[Player.PlayerData.license] = nil
|
|
QBCore.Players[src] = nil
|
|
end)
|
|
|
|
-- Player Connecting
|
|
|
|
local function onPlayerConnecting(name, setKickReason, deferrals)
|
|
local src = source
|
|
local license
|
|
local identifiers = GetPlayerIdentifiers(src)
|
|
deferrals.defer()
|
|
|
|
-- Mandatory wait
|
|
Wait(0)
|
|
|
|
if QBCore.Config.Server.Closed then
|
|
if not IsPlayerAceAllowed(src, 'qbadmin.join') then
|
|
deferrals.done(QBCore.Config.Server.ClosedReason)
|
|
end
|
|
end
|
|
|
|
deferrals.update(string.format(Lang:t('info.checking_ban'), name))
|
|
|
|
for _, v in pairs(identifiers) do
|
|
if string.find(v, 'license') then
|
|
license = v
|
|
break
|
|
end
|
|
end
|
|
|
|
-- Mandatory wait
|
|
Wait(2500)
|
|
|
|
deferrals.update(string.format(Lang:t('info.checking_whitelisted'), name))
|
|
|
|
local isBanned, Reason = QBCore.Functions.IsPlayerBanned(src)
|
|
local isLicenseAlreadyInUse = QBCore.Functions.IsLicenseInUse(license)
|
|
local isWhitelist, whitelisted = QBCore.Config.Server.Whitelist, QBCore.Functions.IsWhitelisted(src)
|
|
|
|
Wait(2500)
|
|
|
|
deferrals.update(Lang:t('info.join_server'), name))
|
|
|
|
if not license then
|
|
deferrals.done(Lang:t('error.no_valid_license'))
|
|
elseif isBanned then
|
|
deferrals.done(Reason)
|
|
elseif isLicenseAlreadyInUse and QBCore.Config.Server.CheckDuplicateLicense then
|
|
deferrals.done(Lang:t('error.duplicate_license'))
|
|
elseif isWhitelist and not whitelisted then
|
|
deferrals.done(Lang:t('error.not_whitelisted'))
|
|
else
|
|
deferrals.done()
|
|
if QBCore.Config.Server.UseConnectQueue then
|
|
Wait(1000)
|
|
TriggerEvent('connectqueue:playerConnect', name, setKickReason, deferrals)
|
|
end
|
|
end
|
|
-- Add any additional defferals you may need!
|
|
end
|
|
|
|
AddEventHandler('playerConnecting', onPlayerConnecting)
|
|
|
|
-- Open & Close Server (prevents players from joining)
|
|
|
|
RegisterNetEvent('QBCore:Server:CloseServer', function(reason)
|
|
local src = source
|
|
if QBCore.Functions.HasPermission(src, 'admin') then
|
|
reason = reason or 'No reason specified'
|
|
QBCore.Config.Server.Closed = true
|
|
QBCore.Config.Server.ClosedReason = reason
|
|
for k in pairs(QBCore.Players) do
|
|
if not QBCore.Functions.HasPermission(k, QBCore.Config.Server.WhitelistPermission) then
|
|
QBCore.Functions.Kick(k, reason, nil, nil)
|
|
end
|
|
end
|
|
else
|
|
QBCore.Functions.Kick(src, 'You don\'t have permissions for this..', nil, nil)
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Server:OpenServer', function()
|
|
local src = source
|
|
if QBCore.Functions.HasPermission(src, 'admin') then
|
|
QBCore.Config.Server.Closed = false
|
|
else
|
|
QBCore.Functions.Kick(src, 'You don\'t have permissions for this..', nil, nil)
|
|
end
|
|
end)
|
|
|
|
-- Callbacks
|
|
|
|
RegisterNetEvent('QBCore:Server:TriggerCallback', function(name, ...)
|
|
local src = source
|
|
QBCore.Functions.TriggerCallback(name, src, function(...)
|
|
TriggerClientEvent('QBCore:Client:TriggerCallback', src, name, ...)
|
|
end, ...)
|
|
end)
|
|
|
|
-- Player
|
|
|
|
RegisterNetEvent('QBCore:UpdatePlayer', function()
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
local newHunger = Player.PlayerData.metadata['hunger'] - QBCore.Config.Player.HungerRate
|
|
local newThirst = Player.PlayerData.metadata['thirst'] - QBCore.Config.Player.ThirstRate
|
|
if newHunger <= 0 then
|
|
newHunger = 0
|
|
end
|
|
if newThirst <= 0 then
|
|
newThirst = 0
|
|
end
|
|
Player.Functions.SetMetaData('thirst', newThirst)
|
|
Player.Functions.SetMetaData('hunger', newHunger)
|
|
TriggerClientEvent('hud:client:UpdateNeeds', src, newHunger, newThirst)
|
|
Player.Functions.Save()
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Server:SetMetaData', function(meta, data)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if meta == 'hunger' or meta == 'thirst' then
|
|
if data > 100 then
|
|
data = 100
|
|
end
|
|
end
|
|
if Player then
|
|
Player.Functions.SetMetaData(meta, data)
|
|
end
|
|
TriggerClientEvent('hud:client:UpdateNeeds', src, Player.PlayerData.metadata['hunger'], Player.PlayerData.metadata['thirst'])
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:ToggleDuty', function()
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
if Player.PlayerData.job.onduty then
|
|
Player.Functions.SetJobDuty(false)
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('info.off_duty'))
|
|
else
|
|
Player.Functions.SetJobDuty(true)
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('info.on_duty'))
|
|
end
|
|
TriggerClientEvent('QBCore:Client:SetDuty', src, Player.PlayerData.job.onduty)
|
|
end)
|
|
|
|
-- Items
|
|
|
|
RegisterNetEvent('QBCore:Server:UseItem', function(item)
|
|
local src = source
|
|
if not item or item.amount <= 0 or not QBCore.Functions.CanUseItem(item.name) then return end
|
|
QBCore.Functions.UseItem(src, item)
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Server:RemoveItem', function(itemName, amount, slot)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
Player.Functions.RemoveItem(itemName, amount, slot)
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Server:AddItem', function(itemName, amount, slot, info)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
Player.Functions.AddItem(itemName, amount, slot, info)
|
|
end)
|
|
|
|
-- Non-Chat Command Calling (ex: qb-adminmenu)
|
|
|
|
RegisterNetEvent('QBCore:CallCommand', function(command, args)
|
|
local src = source
|
|
if not QBCore.Commands.List[command] then return end
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
local hasPerm = QBCore.Functions.HasPermission(src, "command."..QBCore.Commands.List[command].name)
|
|
if hasPerm then
|
|
if QBCore.Commands.List[command].argsrequired and #QBCore.Commands.List[command].arguments ~= 0 and not args[#QBCore.Commands.List[command].arguments] then
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.missing_args2'), 'error')
|
|
else
|
|
QBCore.Commands.List[command].callback(src, args)
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.no_access'), 'error')
|
|
end
|
|
end)
|
|
|
|
-- Has Item Callback (can also use client function - QBCore.Functions.HasItem(item))
|
|
|
|
QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, amount)
|
|
local retval = false
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
if not Player then return cb(false) end
|
|
if type(items) == 'table' then
|
|
local count = 0
|
|
local finalcount = 0
|
|
for k, v in pairs(items) do
|
|
if type(k) == 'string' then
|
|
finalcount = 0
|
|
for i, _ in pairs(items) do finalcount += 1 end
|
|
local item = Player.Functions.GetItemByName(k)
|
|
if item then
|
|
if item.amount >= v then
|
|
count += 1
|
|
if count == finalcount then
|
|
retval = true
|
|
end
|
|
end
|
|
end
|
|
else
|
|
finalcount = #items
|
|
local item = Player.Functions.GetItemByName(v)
|
|
if item then
|
|
if amount then
|
|
if item.amount >= amount then
|
|
count += 1
|
|
if count == finalcount then
|
|
retval = true
|
|
end
|
|
end
|
|
else
|
|
count += 1
|
|
if count == finalcount then
|
|
retval = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
local item = Player.Functions.GetItemByName(items)
|
|
if not item then return cb(false) end
|
|
if amount then
|
|
if item.amount >= amount then
|
|
retval = true
|
|
end
|
|
else
|
|
retval = true
|
|
end
|
|
end
|
|
cb(retval)
|
|
end)
|