185 lines
5.7 KiB
Lua
Raw Normal View History

2025-04-07 01:41:12 +00:00
local sharedConfig = require 'config.shared'
---@alias source number
lib.callback.register('qbx_ambulancejob:server:getPlayerStatus', function(_, targetSrc)
return exports.qbx_medical:GetPlayerStatus(targetSrc)
end)
local function alertAmbulance(src, text)
local ped = GetPlayerPed(src)
local coords = GetEntityCoords(ped)
local players = exports.qbx_core:GetQBPlayers()
for _, v in pairs(players) do
if v.PlayerData.job.type == 'ems' and v.PlayerData.job.onduty then
TriggerClientEvent('hospital:client:ambulanceAlert', v.PlayerData.source, coords, text)
end
end
end
local function registerArmory()
for _, armory in pairs(sharedConfig.locations.armory) do
exports.ox_inventory:RegisterShop(armory.shopType, armory)
end
end
local function registerStashes()
for _, stash in pairs(sharedConfig.locations.stash) do
exports.ox_inventory:RegisterStash(stash.name, stash.label, stash.slots, stash.weight, stash.owner, stash.groups, stash.location)
end
end
RegisterNetEvent('hospital:server:ambulanceAlert', function(text)
if GetInvokingResource() then return end
local src = source
alertAmbulance(src, text or locale('info.civ_down'))
end)
RegisterNetEvent('hospital:server:emergencyAlert', function()
if GetInvokingResource() then return end
local src = source
local player = exports.qbx_core:GetPlayer(src)
alertAmbulance(src, locale('info.ems_down', player.PlayerData.charinfo.lastname))
end)
RegisterNetEvent('qbx_medical:server:onPlayerLaststand', function()
if GetInvokingResource() then return end
local src = source
alertAmbulance(src, locale('info.civ_down'))
end)
---@param playerId number
RegisterNetEvent('hospital:server:TreatWounds', function(playerId)
if GetInvokingResource() then return end
local src = source
local player = exports.qbx_core:GetPlayer(src)
local patient = exports.qbx_core:GetPlayer(playerId)
if player.PlayerData.job.type ~= 'ems' or not patient then return end
exports.ox_inventory:RemoveItem(src, 'bandage', 1)
TriggerClientEvent('hospital:client:HealInjuries', patient.PlayerData.source, 'full')
end)
---@param playerId number
RegisterNetEvent('hospital:server:RevivePlayer', function(playerId)
if GetInvokingResource() then return end
local player = exports.qbx_core:GetPlayer(source)
local patient = exports.qbx_core:GetPlayer(playerId)
if not patient then return end
exports.ox_inventory:RemoveItem(player.PlayerData.source, 'firstaid', 1)
TriggerClientEvent('qbx_medical:client:playerRevived', patient.PlayerData.source)
end)
---@param targetId number
RegisterNetEvent('hospital:server:UseFirstAid', function(targetId)
if GetInvokingResource() then return end
local src = source
local target = exports.qbx_core:GetPlayer(targetId)
if not target then return end
local canHelp = lib.callback.await('hospital:client:canHelp', targetId)
if not canHelp then
exports.qbx_core:Notify(src, locale('error.cant_help'), 'error')
return
end
TriggerClientEvent('hospital:client:HelpPerson', src, targetId)
end)
lib.callback.register('qbx_ambulancejob:server:getNumDoctors', function()
return exports.qbx_core:GetDutyCountType('ems')
end)
lib.addCommand('911e', {
help = locale('info.ems_report'),
params = {
{name = 'message', help = locale('info.message_sent'), type = 'longString', optional = true},
}
}, function(source, args)
local message = args.message or locale('info.civ_call')
local ped = GetPlayerPed(source)
local coords = GetEntityCoords(ped)
local players = exports.qbx_core:GetQBPlayers()
for _, v in pairs(players) do
if v.PlayerData.job.type == 'ems' and v.PlayerData.job.onduty then
TriggerClientEvent('hospital:client:ambulanceAlert', v.PlayerData.source, coords, message)
end
end
end)
---@param src number
---@param event string
local function triggerEventOnEmsPlayer(src, event)
local player = exports.qbx_core:GetPlayer(src)
if player.PlayerData.job.type ~= 'ems' then
exports.qbx_core:Notify(src, locale('error.not_ems'), 'error')
return
end
TriggerClientEvent(event, src)
end
lib.addCommand('status', {
help = locale('info.check_health'),
}, function(source)
triggerEventOnEmsPlayer(source, 'hospital:client:CheckStatus')
end)
lib.addCommand('heal', {
help = locale('info.heal_player'),
}, function(source)
triggerEventOnEmsPlayer(source, 'hospital:client:TreatWounds')
end)
lib.addCommand('revivep', {
help = locale('info.revive_player'),
}, function(source)
triggerEventOnEmsPlayer(source, 'hospital:client:RevivePlayer')
end)
-- Items
---@param src number
---@param item table
---@param event string
local function triggerItemEventOnPlayer(src, item, event)
local player = exports.qbx_core:GetPlayer(src)
if not player then return end
if exports.ox_inventory:Search(src, 'count', item.name) == 0 then return end
local removeItem = lib.callback.await(event, src)
if not removeItem then return end
exports.ox_inventory:RemoveItem(src, item.name, 1)
end
exports.qbx_core:CreateUseableItem('ifaks', function(source, item)
triggerItemEventOnPlayer(source, item, 'hospital:client:UseIfaks')
end)
exports.qbx_core:CreateUseableItem('bandage', function(source, item)
triggerItemEventOnPlayer(source, item, 'hospital:client:UseBandage')
end)
exports.qbx_core:CreateUseableItem('painkillers', function(source, item)
triggerItemEventOnPlayer(source, item, 'hospital:client:UsePainkillers')
end)
exports.qbx_core:CreateUseableItem('firstaid', function(source, item)
triggerItemEventOnPlayer(source, item, 'hospital:client:UseFirstAid')
end)
RegisterNetEvent('qbx_medical:server:playerDied', function()
if GetInvokingResource() then return end
local src = source
alertAmbulance(src, locale('info.civ_died'))
end)
AddEventHandler('onResourceStart', function(resource)
if resource ~= GetCurrentResourceName() then return end
registerArmory()
registerStashes()
end)