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)