185 lines
5.7 KiB
Lua
185 lines
5.7 KiB
Lua
|
|
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)
|