mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-30 17:58:54 +00:00
Moved job-related functions to seperate file
This commit is contained in:
+2
-1
@@ -30,7 +30,8 @@ client_scripts {
|
||||
'locales/sv.lua',
|
||||
'locales/pl.lua',
|
||||
'config.lua',
|
||||
'client/main.lua'
|
||||
'client/main.lua',
|
||||
'client/job.lua'
|
||||
}
|
||||
|
||||
dependency 'es_extended'
|
||||
|
||||
+536
@@ -0,0 +1,536 @@
|
||||
local HasAlreadyEnteredMarker, LastZone, CurrentAction, CurrentActionMsg, CurrentActionData = nil, nil, nil, '', {}
|
||||
|
||||
function OpenAmbulanceActionsMenu()
|
||||
local elements = {
|
||||
{label = _U('cloakroom'), value = 'cloakroom'}
|
||||
}
|
||||
|
||||
if Config.EnablePlayerManagement and ESX.PlayerData.job.grade_name == 'boss' then
|
||||
table.insert(elements, {label = _U('boss_actions'), value = 'boss_actions'})
|
||||
end
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'ambulance_actions',
|
||||
{
|
||||
title = _U('ambulance'),
|
||||
align = 'top-left',
|
||||
elements = elements
|
||||
}, function(data, menu)
|
||||
if data.current.value == 'cloakroom' then
|
||||
OpenCloakroomMenu()
|
||||
elseif data.current.value == 'boss_actions' then
|
||||
TriggerEvent('esx_society:openBossMenu', 'ambulance', function(data, menu)
|
||||
menu.close()
|
||||
end, {wash = false})
|
||||
end
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
|
||||
CurrentAction = 'ambulance_actions_menu'
|
||||
CurrentActionMsg = _U('open_menu')
|
||||
CurrentActionData = {}
|
||||
end)
|
||||
end
|
||||
|
||||
function OpenMobileAmbulanceActionsMenu()
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'mobile_ambulance_actions',
|
||||
{
|
||||
title = _U('ambulance'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('ems_menu'), value = 'citizen_interaction'}
|
||||
}
|
||||
}, function(data, menu)
|
||||
if data.current.value == 'citizen_interaction' then
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'citizen_interaction',
|
||||
{
|
||||
title = _U('ems_menu_title'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('ems_menu_revive'), value = 'revive'},
|
||||
{label = _U('ems_menu_small'), value = 'small'},
|
||||
{label = _U('ems_menu_big'), value = 'big'},
|
||||
{label = _U('ems_menu_putincar'), value = 'put_in_vehicle'}
|
||||
}
|
||||
}, function(data, menu)
|
||||
if IsBusy then return end
|
||||
|
||||
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
|
||||
|
||||
if closestPlayer == -1 or closestDistance > 3.0 then
|
||||
ESX.ShowNotification(_U('no_players'))
|
||||
else
|
||||
|
||||
if data.current.value == 'revive' then
|
||||
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:getItemAmount', function(quantity)
|
||||
if quantity > 0 then
|
||||
local closestPlayerPed = GetPlayerPed(closestPlayer)
|
||||
|
||||
if IsPedDeadOrDying(closestPlayerPed, 1) then
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
IsBusy = true
|
||||
ESX.ShowNotification(_U('revive_inprogress'))
|
||||
TaskStartScenarioInPlace(playerPed, 'CODE_HUMAN_MEDIC_TEND_TO_DEAD', 0, true)
|
||||
Citizen.Wait(10000)
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
TriggerServerEvent('esx_ambulancejob:removeItem', 'medikit')
|
||||
TriggerServerEvent('esx_ambulancejob:revive', GetPlayerServerId(closestPlayer))
|
||||
IsBusy = false
|
||||
|
||||
-- Show revive award?
|
||||
if Config.ReviveReward > 0 then
|
||||
ESX.ShowNotification(_U('revive_complete_award', GetPlayerName(closestPlayer), Config.ReviveReward))
|
||||
else
|
||||
ESX.ShowNotification(_U('revive_complete', GetPlayerName(closestPlayer)))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('player_not_unconscious'))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('not_enough_medikit'))
|
||||
end
|
||||
end, 'medikit')
|
||||
|
||||
elseif data.current.value == 'small' then
|
||||
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:getItemAmount', function(quantity)
|
||||
if quantity > 0 then
|
||||
local closestPlayerPed = GetPlayerPed(closestPlayer)
|
||||
local health = GetEntityHealth(closestPlayerPed)
|
||||
|
||||
if health > 0 then
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
IsBusy = true
|
||||
ESX.ShowNotification(_U('heal_inprogress'))
|
||||
TaskStartScenarioInPlace(playerPed, 'CODE_HUMAN_MEDIC_TEND_TO_DEAD', 0, true)
|
||||
Citizen.Wait(10000)
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
TriggerServerEvent('esx_ambulancejob:removeItem', 'bandage')
|
||||
TriggerServerEvent('esx_ambulancejob:heal', GetPlayerServerId(closestPlayer), 'small')
|
||||
ESX.ShowNotification(_U('heal_complete', GetPlayerName(closestPlayer)))
|
||||
IsBusy = false
|
||||
else
|
||||
ESX.ShowNotification(_U('player_not_conscious'))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('not_enough_bandage'))
|
||||
end
|
||||
end, 'bandage')
|
||||
|
||||
elseif data.current.value == 'big' then
|
||||
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:getItemAmount', function(quantity)
|
||||
if quantity > 0 then
|
||||
local closestPlayerPed = GetPlayerPed(closestPlayer)
|
||||
local health = GetEntityHealth(closestPlayerPed)
|
||||
|
||||
if health > 0 then
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
IsBusy = true
|
||||
ESX.ShowNotification(_U('heal_inprogress'))
|
||||
TaskStartScenarioInPlace(playerPed, 'CODE_HUMAN_MEDIC_TEND_TO_DEAD', 0, true)
|
||||
Citizen.Wait(10000)
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
TriggerServerEvent('esx_ambulancejob:removeItem', 'medikit')
|
||||
TriggerServerEvent('esx_ambulancejob:heal', GetPlayerServerId(closestPlayer), 'big')
|
||||
ESX.ShowNotification(_U('heal_complete', GetPlayerName(closestPlayer)))
|
||||
IsBusy = false
|
||||
else
|
||||
ESX.ShowNotification(_U('player_not_conscious'))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('not_enough_medikit'))
|
||||
end
|
||||
end, 'medikit')
|
||||
|
||||
elseif data.current.value == 'put_in_vehicle' then
|
||||
TriggerServerEvent('esx_ambulancejob:putInVehicle', GetPlayerServerId(closestPlayer))
|
||||
end
|
||||
end
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
end)
|
||||
end
|
||||
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
AddEventHandler('esx_ambulancejob:hasEnteredMarker', function(zone)
|
||||
if zone == 'HospitalInteriorEntering1' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorInside1.Pos)
|
||||
elseif zone == 'HospitalInteriorExit1' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorOutside1.Pos)
|
||||
elseif zone == 'HospitalInteriorEntering2' then
|
||||
local heli = Config.HelicopterSpawner
|
||||
|
||||
if not IsAnyVehicleNearPoint(heli.SpawnPoint.x, heli.SpawnPoint.y, heli.SpawnPoint.z, 3.0) and ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'ambulance' then
|
||||
ESX.Game.SpawnVehicle('polmav', {
|
||||
x = heli.SpawnPoint.x,
|
||||
y = heli.SpawnPoint.y,
|
||||
z = heli.SpawnPoint.z
|
||||
}, heli.Heading, function(vehicle)
|
||||
SetVehicleModKit(vehicle, 0)
|
||||
SetVehicleLivery(vehicle, 1)
|
||||
end)
|
||||
end
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorInside2.Pos)
|
||||
elseif zone == 'HospitalInteriorExit2' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorOutside2.Pos)
|
||||
elseif zone == 'ParkingDoorGoOutInside' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.ParkingDoorGoOutOutside.Pos)
|
||||
elseif zone == 'ParkingDoorGoInOutside' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.ParkingDoorGoInInside.Pos)
|
||||
elseif zone == 'StairsGoTopBottom' then
|
||||
CurrentAction = 'fast_travel_goto_top'
|
||||
CurrentActionMsg = _U('fast_travel')
|
||||
CurrentActionData = {pos = Config.Zones.StairsGoTopTop.Pos}
|
||||
elseif zone == 'StairsGoBottomTop' then
|
||||
CurrentAction = 'fast_travel_goto_bottom'
|
||||
CurrentActionMsg = _U('fast_travel')
|
||||
CurrentActionData = {pos = Config.Zones.StairsGoBottomBottom.Pos}
|
||||
elseif zone == 'AmbulanceActions' then
|
||||
CurrentAction = 'ambulance_actions_menu'
|
||||
CurrentActionMsg = _U('open_menu')
|
||||
CurrentActionData = {}
|
||||
elseif zone == 'VehicleSpawner' then
|
||||
CurrentAction = 'vehicle_spawner_menu'
|
||||
CurrentActionMsg = _U('veh_spawn')
|
||||
CurrentActionData = {}
|
||||
elseif zone == 'Pharmacy' then
|
||||
CurrentAction = 'pharmacy'
|
||||
CurrentActionMsg = _U('open_pharmacy')
|
||||
CurrentActionData = {}
|
||||
elseif zone == 'VehicleDeleter' then
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) then
|
||||
local vehicle, distance = ESX.Game.GetClosestVehicle({
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
if distance ~= -1 and distance <= 1.0 then
|
||||
CurrentAction = 'delete_vehicle'
|
||||
CurrentActionMsg = _U('store_veh')
|
||||
CurrentActionData = {vehicle = vehicle}
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function FastTravel(pos)
|
||||
TeleportFadeEffect(PlayerPedId(), pos)
|
||||
end
|
||||
|
||||
AddEventHandler('esx_ambulancejob:hasExitedMarker', function(zone)
|
||||
ESX.UI.Menu.CloseAll()
|
||||
CurrentAction = nil
|
||||
end)
|
||||
|
||||
-- Create blips
|
||||
Citizen.CreateThread(function()
|
||||
local blip = AddBlipForCoord(Config.Blip.Pos.x, Config.Blip.Pos.y, Config.Blip.Pos.z)
|
||||
|
||||
SetBlipSprite(blip, Config.Blip.Sprite)
|
||||
SetBlipDisplay(blip, Config.Blip.Display)
|
||||
SetBlipScale(blip, Config.Blip.Scale)
|
||||
SetBlipColour(blip, Config.Blip.Colour)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentString(_U('hospital'))
|
||||
EndTextCommandSetBlipName(blip)
|
||||
end)
|
||||
|
||||
-- Display markers
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
|
||||
local coords = GetEntityCoords(PlayerPedId())
|
||||
for k,v in pairs(Config.Zones) do
|
||||
if(v.Type ~= -1 and GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.DrawDistance) then
|
||||
if ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'ambulance' then
|
||||
DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
elseif k ~= 'AmbulanceActions' and k ~= 'VehicleSpawner' and k ~= 'VehicleDeleter' and k ~= 'Pharmacy' and k ~= 'StairsGoTopBottom' and k ~= 'StairsGoBottomTop' then
|
||||
DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Activate menu when player is inside marker
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(10)
|
||||
|
||||
local coords = GetEntityCoords(PlayerPedId())
|
||||
local isInMarker = false
|
||||
local currentZone = nil
|
||||
|
||||
for k,v in pairs(Config.Zones) do
|
||||
if ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'ambulance' then
|
||||
if(GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.MarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentZone = k
|
||||
end
|
||||
elseif k ~= 'AmbulanceActions' and k ~= 'VehicleSpawner' and k ~= 'VehicleDeleter' and k ~= 'Pharmacy' and k ~= 'StairsGoTopBottom' and k ~= 'StairsGoBottomTop' then
|
||||
if(GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.MarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentZone = k
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if isInMarker and not hasAlreadyEnteredMarker then
|
||||
hasAlreadyEnteredMarker = true
|
||||
lastZone = currentZone
|
||||
TriggerEvent('esx_ambulancejob:hasEnteredMarker', currentZone)
|
||||
end
|
||||
|
||||
if not isInMarker and hasAlreadyEnteredMarker then
|
||||
hasAlreadyEnteredMarker = false
|
||||
TriggerEvent('esx_ambulancejob:hasExitedMarker', lastZone)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Key Controls
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(10)
|
||||
|
||||
if CurrentAction ~= nil then
|
||||
ESX.ShowHelpNotification(CurrentActionMsg)
|
||||
|
||||
if IsControlJustReleased(0, Keys['E']) and ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'ambulance' then
|
||||
|
||||
if CurrentAction == 'ambulance_actions_menu' then
|
||||
OpenAmbulanceActionsMenu()
|
||||
elseif CurrentAction == 'vehicle_spawner_menu' then
|
||||
OpenVehicleSpawnerMenu()
|
||||
elseif CurrentAction == 'pharmacy' then
|
||||
OpenPharmacyMenu()
|
||||
elseif CurrentAction == 'fast_travel_goto_top' or CurrentAction == 'fast_travel_goto_bottom' then
|
||||
FastTravel(CurrentActionData.pos)
|
||||
elseif CurrentAction == 'delete_vehicle' then
|
||||
if Config.EnableSocietyOwnedVehicles then
|
||||
local vehicleProps = ESX.Game.GetVehicleProperties(CurrentActionData.vehicle)
|
||||
TriggerServerEvent('esx_society:putVehicleInGarage', 'ambulance', vehicleProps)
|
||||
end
|
||||
ESX.Game.DeleteVehicle(CurrentActionData.vehicle)
|
||||
end
|
||||
|
||||
CurrentAction = nil
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if IsControlJustReleased(0, Keys['F6']) and ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'ambulance' and not IsDead then
|
||||
OpenMobileAmbulanceActionsMenu()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_ambulancejob:putInVehicle')
|
||||
AddEventHandler('esx_ambulancejob:putInVehicle', function()
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
|
||||
if IsAnyVehicleNearPoint(coords.x, coords.y, coords.z, 5.0) then
|
||||
local vehicle = GetClosestVehicle(coords.x, coords.y, coords.z, 5.0, 0, 71)
|
||||
|
||||
if DoesEntityExist(vehicle) then
|
||||
local maxSeats = GetVehicleMaxNumberOfPassengers(vehicle)
|
||||
local freeSeat = nil
|
||||
|
||||
for i=maxSeats - 1, 0, -1 do
|
||||
if IsVehicleSeatFree(vehicle, i) then
|
||||
freeSeat = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if freeSeat ~= nil then
|
||||
TaskWarpPedIntoVehicle(playerPed, vehicle, freeSeat)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
function OpenCloakroomMenu()
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'cloakroom',
|
||||
{
|
||||
title = _U('cloakroom'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('ems_clothes_civil'), value = 'citizen_wear'},
|
||||
{label = _U('ems_clothes_ems'), value = 'ambulance_wear'},
|
||||
}
|
||||
}, function(data, menu)
|
||||
if data.current.value == 'citizen_wear' then
|
||||
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin)
|
||||
TriggerEvent('skinchanger:loadSkin', skin)
|
||||
end)
|
||||
elseif data.current.value == 'ambulance_wear' then
|
||||
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin)
|
||||
if skin.sex == 0 then
|
||||
TriggerEvent('skinchanger:loadClothes', skin, jobSkin.skin_male)
|
||||
else
|
||||
TriggerEvent('skinchanger:loadClothes', skin, jobSkin.skin_female)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
menu.close()
|
||||
CurrentAction = 'ambulance_actions_menu'
|
||||
CurrentActionMsg = _U('open_menu')
|
||||
CurrentActionData = {}
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
end)
|
||||
end
|
||||
|
||||
function OpenVehicleSpawnerMenu()
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
if Config.EnableSocietyOwnedVehicles then
|
||||
|
||||
local elements = {}
|
||||
|
||||
ESX.TriggerServerCallback('esx_society:getVehiclesInGarage', function(vehicles)
|
||||
for i=1, #vehicles, 1 do
|
||||
table.insert(elements, {label = GetDisplayNameFromVehicleModel(vehicles[i].model) .. ' [' .. vehicles[i].plate .. ']', value = vehicles[i]})
|
||||
end
|
||||
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'vehicle_spawner',
|
||||
{
|
||||
title = _U('veh_menu'),
|
||||
align = 'top-left',
|
||||
elements = elements
|
||||
}, function(data, menu)
|
||||
menu.close()
|
||||
|
||||
local vehicleProps = data.current.value
|
||||
ESX.Game.SpawnVehicle(vehicleProps.model, Config.Zones.VehicleSpawnPoint.Pos, 270.0, function(vehicle)
|
||||
ESX.Game.SetVehicleProperties(vehicle, vehicleProps)
|
||||
local playerPed = PlayerPedId()
|
||||
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
|
||||
end)
|
||||
TriggerServerEvent('esx_society:removeVehicleFromGarage', 'ambulance', vehicleProps)
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
CurrentAction = 'vehicle_spawner_menu'
|
||||
CurrentActionMsg = _U('veh_spawn')
|
||||
CurrentActionData = {}
|
||||
end)
|
||||
end, 'ambulance')
|
||||
|
||||
else -- not society vehicles
|
||||
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'vehicle_spawner',
|
||||
{
|
||||
title = _U('veh_menu'),
|
||||
align = 'top-left',
|
||||
elements = Config.AuthorizedVehicles
|
||||
}, function(data, menu)
|
||||
menu.close()
|
||||
|
||||
ESX.Game.SpawnVehicle(data.current.model, Config.Zones.VehicleSpawnPoint.Pos, 230.0, function(vehicle)
|
||||
local playerPed = PlayerPedId()
|
||||
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
|
||||
end)
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
CurrentAction = 'vehicle_spawner_menu'
|
||||
CurrentActionMsg = _U('veh_spawn')
|
||||
CurrentActionData = {}
|
||||
end)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function OpenPharmacyMenu()
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'pharmacy',
|
||||
{
|
||||
title = _U('pharmacy_menu_title'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('pharmacy_take') .. ' ' .. _('medikit'), value = 'medikit'},
|
||||
{label = _U('pharmacy_take') .. ' ' .. _('bandage'), value = 'bandage'}
|
||||
}
|
||||
}, function(data, menu)
|
||||
TriggerServerEvent('esx_ambulancejob:giveItem', data.current.value)
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
CurrentAction = 'pharmacy'
|
||||
CurrentActionMsg = _U('open_pharmacy')
|
||||
CurrentActionData = {}
|
||||
end)
|
||||
end
|
||||
|
||||
function WarpPedInClosestVehicle(ped)
|
||||
local coords = GetEntityCoords(ped)
|
||||
|
||||
local vehicle, distance = ESX.Game.GetClosestVehicle({
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
if distance ~= -1 and distance <= 5.0 then
|
||||
local maxSeats = GetVehicleMaxNumberOfPassengers(vehicle)
|
||||
local freeSeat = nil
|
||||
|
||||
for i=maxSeats - 1, 0, -1 do
|
||||
if IsVehicleSeatFree(vehicle, i) then
|
||||
freeSeat = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if freeSeat ~= nil then
|
||||
TaskWarpPedIntoVehicle(ped, vehicle, freeSeat)
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('no_vehicles'))
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent('esx_ambulancejob:heal')
|
||||
AddEventHandler('esx_ambulancejob:heal', function(healType)
|
||||
local playerPed = PlayerPedId()
|
||||
local maxHealth = GetEntityMaxHealth(playerPed)
|
||||
|
||||
if healType == 'small' then
|
||||
local health = GetEntityHealth(playerPed)
|
||||
local newHealth = math.min(maxHealth , math.floor(health + maxHealth/8))
|
||||
SetEntityHealth(playerPed, newHealth)
|
||||
elseif healType == 'big' then
|
||||
SetEntityHealth(playerPed, maxHealth)
|
||||
end
|
||||
|
||||
ESX.ShowNotification(_U('healed'))
|
||||
end)
|
||||
+78
-699
@@ -1,4 +1,4 @@
|
||||
local Keys = {
|
||||
Keys = {
|
||||
["ESC"] = 322, ["F1"] = 288, ["F2"] = 289, ["F3"] = 170, ["F5"] = 166, ["F6"] = 167, ["F7"] = 168, ["F8"] = 169, ["F9"] = 56, ["F10"] = 57,
|
||||
["~"] = 243, ["1"] = 157, ["2"] = 158, ["3"] = 160, ["4"] = 164, ["5"] = 165, ["6"] = 159, ["7"] = 161, ["8"] = 162, ["9"] = 163, ["-"] = 84, ["="] = 83, ["BACKSPACE"] = 177,
|
||||
["TAB"] = 37, ["Q"] = 44, ["W"] = 32, ["E"] = 38, ["R"] = 45, ["T"] = 245, ["Y"] = 246, ["U"] = 303, ["P"] = 199, ["["] = 39, ["]"] = 40, ["ENTER"] = 18,
|
||||
@@ -10,17 +10,10 @@ local Keys = {
|
||||
["NENTER"] = 201, ["N4"] = 108, ["N5"] = 60, ["N6"] = 107, ["N+"] = 96, ["N-"] = 97, ["N7"] = 117, ["N8"] = 61, ["N9"] = 118
|
||||
}
|
||||
|
||||
local PlayerData = {}
|
||||
local FirstSpawn = true
|
||||
local IsDead = false
|
||||
local HasAlreadyEnteredMarker = false
|
||||
local LastZone = nil
|
||||
local CurrentAction = nil
|
||||
local CurrentActionMsg = ''
|
||||
local CurrentActionData = {}
|
||||
local IsBusy = false
|
||||
local FirstSpawn, IsBusy = true, false
|
||||
|
||||
ESX = nil
|
||||
IsDead = false
|
||||
ESX = nil
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while ESX == nil do
|
||||
@@ -28,43 +21,46 @@ Citizen.CreateThread(function()
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
|
||||
Citizen.Wait(5000)
|
||||
PlayerData = ESX.GetPlayerData()
|
||||
end)
|
||||
|
||||
function RespawnPed(ped, coords)
|
||||
SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z, false, false, false, true)
|
||||
NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, coords.heading, true, false)
|
||||
SetPlayerInvincible(ped, false)
|
||||
TriggerEvent('playerSpawned', coords.x, coords.y, coords.z, coords.heading)
|
||||
ClearPedBloodDamage(ped)
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
end
|
||||
|
||||
RegisterNetEvent('esx_ambulancejob:heal')
|
||||
AddEventHandler('esx_ambulancejob:heal', function(healType)
|
||||
local playerPed = PlayerPedId()
|
||||
local maxHealth = GetEntityMaxHealth(playerPed)
|
||||
|
||||
if healType == 'small' then
|
||||
local health = GetEntityHealth(playerPed)
|
||||
local newHealth = math.min(maxHealth , math.floor(health + maxHealth/8))
|
||||
SetEntityHealth(playerPed, newHealth)
|
||||
elseif healType == 'big' then
|
||||
SetEntityHealth(playerPed, maxHealth)
|
||||
while ESX.GetPlayerData().job == nil do
|
||||
Citizen.Wait(100)
|
||||
end
|
||||
|
||||
ESX.ShowNotification(_U('healed'))
|
||||
ESX.PlayerData = ESX.GetPlayerData()
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx:playerLoaded')
|
||||
AddEventHandler('esx:playerLoaded', function(xPlayer)
|
||||
ESX.PlayerData = xPlayer
|
||||
end)
|
||||
|
||||
function StartRespawnTimer()
|
||||
Citizen.SetTimeout(Config.RespawnDelayAfterRPDeath, function()
|
||||
if IsDead then
|
||||
RemoveItemsAfterRPDeath()
|
||||
end
|
||||
end)
|
||||
RegisterNetEvent('esx:setJob')
|
||||
AddEventHandler('esx:setJob', function(job)
|
||||
ESX.PlayerData.job = job
|
||||
end)
|
||||
|
||||
AddEventHandler('playerSpawned', function()
|
||||
IsDead = false
|
||||
|
||||
if FirstSpawn then
|
||||
TriggerServerEvent('esx_ambulancejob:firstSpawn')
|
||||
exports.spawnmanager:setAutoSpawn(false) -- disable respawn
|
||||
FirstSpawn = false
|
||||
end
|
||||
end)
|
||||
|
||||
function OnPlayerDeath()
|
||||
IsDead = true
|
||||
TriggerServerEvent('esx_ambulancejob:setDeathStatus', 1)
|
||||
|
||||
if Config.ShowDeathTimer == true then
|
||||
ShowDeathTimer()
|
||||
end
|
||||
|
||||
StartRespawnTimer()
|
||||
StartDistressSignal()
|
||||
|
||||
ClearPedTasksImmediately(PlayerPedId())
|
||||
StartScreenEffect('DeathFailOut', 0, false)
|
||||
end
|
||||
|
||||
function StartDistressSignal()
|
||||
@@ -202,29 +198,30 @@ end
|
||||
|
||||
function PayFine()
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:payFine', function()
|
||||
RemoveItemsAfterRPDeath()
|
||||
RemoveItemsAfterRPDeath()
|
||||
end)
|
||||
end
|
||||
|
||||
function OnPlayerDeath()
|
||||
IsDead = true
|
||||
TriggerServerEvent('esx_ambulancejob:setDeathStatus', 1)
|
||||
function RespawnPed(ped, coords)
|
||||
SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z, false, false, false, true)
|
||||
NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, coords.heading, true, false)
|
||||
SetPlayerInvincible(ped, false)
|
||||
TriggerEvent('playerSpawned', coords.x, coords.y, coords.z, coords.heading)
|
||||
ClearPedBloodDamage(ped)
|
||||
|
||||
if Config.ShowDeathTimer == true then
|
||||
ShowDeathTimer()
|
||||
end
|
||||
ESX.UI.Menu.CloseAll()
|
||||
end
|
||||
|
||||
StartRespawnTimer()
|
||||
StartDistressSignal()
|
||||
|
||||
ClearPedTasksImmediately(PlayerPedId())
|
||||
StartScreenEffect('DeathFailOut', 0, false)
|
||||
function StartRespawnTimer()
|
||||
Citizen.SetTimeout(Config.RespawnDelayAfterRPDeath, function()
|
||||
if IsDead then
|
||||
RemoveItemsAfterRPDeath()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function TeleportFadeEffect(entity, coords)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
|
||||
DoScreenFadeOut(800)
|
||||
|
||||
while not IsScreenFadedOut() do
|
||||
@@ -234,407 +231,18 @@ function TeleportFadeEffect(entity, coords)
|
||||
ESX.Game.Teleport(entity, coords, function()
|
||||
DoScreenFadeIn(800)
|
||||
end)
|
||||
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
function WarpPedInClosestVehicle(ped)
|
||||
|
||||
local coords = GetEntityCoords(ped)
|
||||
|
||||
local vehicle, distance = ESX.Game.GetClosestVehicle({
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
if distance ~= -1 and distance <= 5.0 then
|
||||
|
||||
local maxSeats = GetVehicleMaxNumberOfPassengers(vehicle)
|
||||
local freeSeat = nil
|
||||
|
||||
for i=maxSeats - 1, 0, -1 do
|
||||
if IsVehicleSeatFree(vehicle, i) then
|
||||
freeSeat = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if freeSeat ~= nil then
|
||||
TaskWarpPedIntoVehicle(ped, vehicle, freeSeat)
|
||||
end
|
||||
|
||||
else
|
||||
ESX.ShowNotification(_U('no_vehicles'))
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function OpenAmbulanceActionsMenu()
|
||||
|
||||
local elements = {
|
||||
{label = _U('cloakroom'), value = 'cloakroom'}
|
||||
}
|
||||
|
||||
if Config.EnablePlayerManagement and PlayerData.job.grade_name == 'boss' then
|
||||
table.insert(elements, {label = _U('boss_actions'), value = 'boss_actions'})
|
||||
end
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'ambulance_actions',
|
||||
{
|
||||
title = _U('ambulance'),
|
||||
align = 'top-left',
|
||||
elements = elements
|
||||
},
|
||||
function(data, menu)
|
||||
|
||||
if data.current.value == 'cloakroom' then
|
||||
OpenCloakroomMenu()
|
||||
end
|
||||
|
||||
if data.current.value == 'boss_actions' then
|
||||
TriggerEvent('esx_society:openBossMenu', 'ambulance', function(data, menu)
|
||||
menu.close()
|
||||
end, {wash = false})
|
||||
end
|
||||
|
||||
end,
|
||||
function(data, menu)
|
||||
|
||||
menu.close()
|
||||
|
||||
CurrentAction = 'ambulance_actions_menu'
|
||||
CurrentActionMsg = _U('open_menu')
|
||||
CurrentActionData = {}
|
||||
|
||||
end
|
||||
)
|
||||
|
||||
end
|
||||
|
||||
function OpenMobileAmbulanceActionsMenu()
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'mobile_ambulance_actions',
|
||||
{
|
||||
title = _U('ambulance'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('ems_menu'), value = 'citizen_interaction'},
|
||||
}
|
||||
}, function(data, menu)
|
||||
if data.current.value == 'citizen_interaction' then
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'citizen_interaction',
|
||||
{
|
||||
title = _U('ems_menu_title'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('ems_menu_revive'), value = 'revive'},
|
||||
{label = _U('ems_menu_small'), value = 'small'},
|
||||
{label = _U('ems_menu_big'), value = 'big'},
|
||||
{label = _U('ems_menu_putincar'), value = 'put_in_vehicle'},
|
||||
}
|
||||
}, function(data, menu)
|
||||
if IsBusy then return end
|
||||
if data.current.value == 'revive' then -- revive
|
||||
|
||||
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
|
||||
|
||||
if closestPlayer == -1 or closestDistance > 3.0 then
|
||||
ESX.ShowNotification(_U('no_players'))
|
||||
else
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:getItemAmount', function(qtty)
|
||||
if qtty > 0 then
|
||||
local closestPlayerPed = GetPlayerPed(closestPlayer)
|
||||
local health = GetEntityHealth(closestPlayerPed)
|
||||
|
||||
if health == 0 then
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
IsBusy = true
|
||||
ESX.ShowNotification(_U('revive_inprogress'))
|
||||
TaskStartScenarioInPlace(playerPed, 'CODE_HUMAN_MEDIC_TEND_TO_DEAD', 0, true)
|
||||
Citizen.Wait(10000)
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
TriggerServerEvent('esx_ambulancejob:removeItem', 'medikit')
|
||||
TriggerServerEvent('esx_ambulancejob:revive', GetPlayerServerId(closestPlayer))
|
||||
IsBusy = false
|
||||
|
||||
-- Show revive award?
|
||||
if Config.ReviveReward > 0 then
|
||||
ESX.ShowNotification(_U('revive_complete_award', GetPlayerName(closestPlayer), Config.ReviveReward))
|
||||
else
|
||||
ESX.ShowNotification(_U('revive_complete', GetPlayerName(closestPlayer)))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('player_not_unconscious'))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('not_enough_medikit'))
|
||||
end
|
||||
end, 'medikit')
|
||||
end
|
||||
elseif data.current.value == 'small' then
|
||||
|
||||
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
|
||||
if closestPlayer == -1 or closestDistance > 3.0 then
|
||||
ESX.ShowNotification(_U('no_players'))
|
||||
else
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:getItemAmount', function(qtty)
|
||||
if qtty > 0 then
|
||||
local closestPlayerPed = GetPlayerPed(closestPlayer)
|
||||
local health = GetEntityHealth(closestPlayerPed)
|
||||
|
||||
if health > 0 then
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
IsBusy = true
|
||||
ESX.ShowNotification(_U('heal_inprogress'))
|
||||
TaskStartScenarioInPlace(playerPed, 'CODE_HUMAN_MEDIC_TEND_TO_DEAD', 0, true)
|
||||
Citizen.Wait(10000)
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
TriggerServerEvent('esx_ambulancejob:removeItem', 'bandage')
|
||||
TriggerServerEvent('esx_ambulancejob:heal', GetPlayerServerId(closestPlayer), 'small')
|
||||
ESX.ShowNotification(_U('heal_complete', GetPlayerName(closestPlayer)))
|
||||
IsBusy = false
|
||||
else
|
||||
ESX.ShowNotification(_U('player_not_conscious'))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('not_enough_bandage'))
|
||||
end
|
||||
end, 'bandage')
|
||||
end
|
||||
elseif data.current.value == 'big' then
|
||||
|
||||
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
|
||||
if closestPlayer == -1 or closestDistance > 3.0 then
|
||||
ESX.ShowNotification(_U('no_players'))
|
||||
else
|
||||
ESX.TriggerServerCallback('esx_ambulancejob:getItemAmount', function(qtty)
|
||||
if qtty > 0 then
|
||||
local closestPlayerPed = GetPlayerPed(closestPlayer)
|
||||
local health = GetEntityHealth(closestPlayerPed)
|
||||
|
||||
if health > 0 then
|
||||
local playerPed = PlayerPedId()
|
||||
|
||||
IsBusy = true
|
||||
ESX.ShowNotification(_U('heal_inprogress'))
|
||||
TaskStartScenarioInPlace(playerPed, 'CODE_HUMAN_MEDIC_TEND_TO_DEAD', 0, true)
|
||||
Citizen.Wait(10000)
|
||||
ClearPedTasks(playerPed)
|
||||
|
||||
TriggerServerEvent('esx_ambulancejob:removeItem', 'medikit')
|
||||
TriggerServerEvent('esx_ambulancejob:heal', GetPlayerServerId(closestPlayer), 'big')
|
||||
ESX.ShowNotification(_U('heal_complete', GetPlayerName(closestPlayer)))
|
||||
IsBusy = false
|
||||
else
|
||||
ESX.ShowNotification(_U('player_not_conscious'))
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification(_U('not_enough_medikit'))
|
||||
end
|
||||
end, 'medikit')
|
||||
end
|
||||
elseif data.current.value == 'put_in_vehicle' then
|
||||
|
||||
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
|
||||
if closestPlayer == -1 or closestDistance > 3.0 then
|
||||
ESX.ShowNotification(_U('no_vehicles'))
|
||||
else
|
||||
menu.close()
|
||||
WarpPedInClosestVehicle(GetPlayerPed(closestPlayer))
|
||||
end
|
||||
end
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
end)
|
||||
end
|
||||
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
end)
|
||||
end
|
||||
|
||||
function OpenCloakroomMenu()
|
||||
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'cloakroom',
|
||||
{
|
||||
title = _U('cloakroom'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('ems_clothes_civil'), value = 'citizen_wear'},
|
||||
{label = _U('ems_clothes_ems'), value = 'ambulance_wear'},
|
||||
},
|
||||
},
|
||||
function(data, menu)
|
||||
|
||||
menu.close()
|
||||
|
||||
if data.current.value == 'citizen_wear' then
|
||||
|
||||
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin)
|
||||
TriggerEvent('skinchanger:loadSkin', skin)
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
if data.current.value == 'ambulance_wear' then
|
||||
|
||||
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin)
|
||||
|
||||
if skin.sex == 0 then
|
||||
TriggerEvent('skinchanger:loadClothes', skin, jobSkin.skin_male)
|
||||
else
|
||||
TriggerEvent('skinchanger:loadClothes', skin, jobSkin.skin_female)
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
CurrentAction = 'ambulance_actions_menu'
|
||||
CurrentActionMsg = _U('open_menu')
|
||||
CurrentActionData = {}
|
||||
|
||||
end,
|
||||
function(data, menu)
|
||||
menu.close()
|
||||
end
|
||||
)
|
||||
|
||||
end
|
||||
|
||||
function OpenVehicleSpawnerMenu()
|
||||
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
if Config.EnableSocietyOwnedVehicles then
|
||||
|
||||
local elements = {}
|
||||
|
||||
ESX.TriggerServerCallback('esx_society:getVehiclesInGarage', function(vehicles)
|
||||
|
||||
for i=1, #vehicles, 1 do
|
||||
table.insert(elements, {label = GetDisplayNameFromVehicleModel(vehicles[i].model) .. ' [' .. vehicles[i].plate .. ']', value = vehicles[i]})
|
||||
end
|
||||
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'vehicle_spawner',
|
||||
{
|
||||
title = _U('veh_menu'),
|
||||
align = 'top-left',
|
||||
elements = elements,
|
||||
}, function(data, menu)
|
||||
menu.close()
|
||||
|
||||
local vehicleProps = data.current.value
|
||||
ESX.Game.SpawnVehicle(vehicleProps.model, Config.Zones.VehicleSpawnPoint.Pos, 270.0, function(vehicle)
|
||||
ESX.Game.SetVehicleProperties(vehicle, vehicleProps)
|
||||
local playerPed = PlayerPedId()
|
||||
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
|
||||
end)
|
||||
TriggerServerEvent('esx_society:removeVehicleFromGarage', 'ambulance', vehicleProps)
|
||||
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
CurrentAction = 'vehicle_spawner_menu'
|
||||
CurrentActionMsg = _U('veh_spawn')
|
||||
CurrentActionData = {}
|
||||
end
|
||||
)
|
||||
end, 'ambulance')
|
||||
|
||||
else -- not society vehicles
|
||||
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'vehicle_spawner',
|
||||
{
|
||||
title = _U('veh_menu'),
|
||||
align = 'top-left',
|
||||
elements = Config.AuthorizedVehicles
|
||||
}, function(data, menu)
|
||||
menu.close()
|
||||
ESX.Game.SpawnVehicle(data.current.model, Config.Zones.VehicleSpawnPoint.Pos, 230.0, function(vehicle)
|
||||
local playerPed = PlayerPedId()
|
||||
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
|
||||
end)
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
CurrentAction = 'vehicle_spawner_menu'
|
||||
CurrentActionMsg = _U('veh_spawn')
|
||||
CurrentActionData = {}
|
||||
end
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function OpenPharmacyMenu()
|
||||
ESX.UI.Menu.CloseAll()
|
||||
|
||||
ESX.UI.Menu.Open(
|
||||
'default', GetCurrentResourceName(), 'pharmacy',
|
||||
{
|
||||
title = _U('pharmacy_menu_title'),
|
||||
align = 'top-left',
|
||||
elements = {
|
||||
{label = _U('pharmacy_take') .. ' ' .. _('medikit'), value = 'medikit'},
|
||||
{label = _U('pharmacy_take') .. ' ' .. _('bandage'), value = 'bandage'}
|
||||
},
|
||||
}, function(data, menu)
|
||||
TriggerServerEvent('esx_ambulancejob:giveItem', data.current.value)
|
||||
|
||||
end, function(data, menu)
|
||||
menu.close()
|
||||
CurrentAction = 'pharmacy'
|
||||
CurrentActionMsg = _U('open_pharmacy')
|
||||
CurrentActionData = {}
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
AddEventHandler('playerSpawned', function()
|
||||
IsDead = false
|
||||
|
||||
if FirstSpawn then
|
||||
TriggerServerEvent('esx_ambulancejob:firstSpawn')
|
||||
exports.spawnmanager:setAutoSpawn(false) -- disable respawn
|
||||
FirstSpawn = false
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx:playerLoaded')
|
||||
AddEventHandler('esx:playerLoaded', function(xPlayer)
|
||||
PlayerData = xPlayer
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx:setJob')
|
||||
AddEventHandler('esx:setJob', function(job)
|
||||
PlayerData.job = job
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_phone:loaded')
|
||||
AddEventHandler('esx_phone:loaded', function(phoneNumber, contacts)
|
||||
|
||||
local specialContact = {
|
||||
name = 'Ambulance',
|
||||
number = 'ambulance',
|
||||
base64Icon = 'data:image/png;base64,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'
|
||||
name = 'Ambulance',
|
||||
number = 'ambulance',
|
||||
base64Icon = 'data:image/png;base64,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'
|
||||
}
|
||||
|
||||
TriggerEvent('esx_phone:addSpecialContact', specialContact.name, specialContact.number, specialContact.base64Icon)
|
||||
|
||||
end)
|
||||
|
||||
AddEventHandler('esx:onPlayerDeath', function(reason)
|
||||
@@ -643,269 +251,40 @@ end)
|
||||
|
||||
RegisterNetEvent('esx_ambulancejob:revive')
|
||||
AddEventHandler('esx_ambulancejob:revive', function()
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
TriggerServerEvent('esx_ambulancejob:setDeathStatus', 0)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
DoScreenFadeOut(800)
|
||||
|
||||
DoScreenFadeOut(800)
|
||||
while not IsScreenFadedOut() do
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
|
||||
while not IsScreenFadedOut() do
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
ESX.SetPlayerData('lastPosition', {
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
ESX.SetPlayerData('lastPosition', {
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
TriggerServerEvent('esx:updateLastPosition', {
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
TriggerServerEvent('esx:updateLastPosition', {
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
RespawnPed(playerPed, {
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
StopScreenEffect('DeathFailOut')
|
||||
|
||||
DoScreenFadeIn(800)
|
||||
RespawnPed(playerPed, {
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
StopScreenEffect('DeathFailOut')
|
||||
DoScreenFadeIn(800)
|
||||
end)
|
||||
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_ambulancejob:hasEnteredMarker', function(zone)
|
||||
|
||||
if zone == 'HospitalInteriorEntering1' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorInside1.Pos)
|
||||
end
|
||||
|
||||
if zone == 'HospitalInteriorExit1' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorOutside1.Pos)
|
||||
end
|
||||
|
||||
if zone == 'HospitalInteriorEntering2' then
|
||||
local heli = Config.HelicopterSpawner
|
||||
|
||||
if not IsAnyVehicleNearPoint(heli.SpawnPoint.x, heli.SpawnPoint.y, heli.SpawnPoint.z, 3.0) and PlayerData.job ~= nil and PlayerData.job.name == 'ambulance' then
|
||||
ESX.Game.SpawnVehicle('polmav', {
|
||||
x = heli.SpawnPoint.x,
|
||||
y = heli.SpawnPoint.y,
|
||||
z = heli.SpawnPoint.z
|
||||
}, heli.Heading, function(vehicle)
|
||||
SetVehicleModKit(vehicle, 0)
|
||||
SetVehicleLivery(vehicle, 1)
|
||||
end)
|
||||
|
||||
end
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorInside2.Pos)
|
||||
end
|
||||
|
||||
if zone == 'HospitalInteriorExit2' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.HospitalInteriorOutside2.Pos)
|
||||
end
|
||||
|
||||
if zone == 'ParkingDoorGoOutInside' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.ParkingDoorGoOutOutside.Pos)
|
||||
end
|
||||
|
||||
if zone == 'ParkingDoorGoInOutside' then
|
||||
TeleportFadeEffect(PlayerPedId(), Config.Zones.ParkingDoorGoInInside.Pos)
|
||||
end
|
||||
|
||||
if zone == 'StairsGoTopBottom' then
|
||||
CurrentAction = 'fast_travel_goto_top'
|
||||
CurrentActionMsg = _U('fast_travel')
|
||||
CurrentActionData = {pos = Config.Zones.StairsGoTopTop.Pos}
|
||||
end
|
||||
|
||||
if zone == 'StairsGoBottomTop' then
|
||||
CurrentAction = 'fast_travel_goto_bottom'
|
||||
CurrentActionMsg = _U('fast_travel')
|
||||
CurrentActionData = {pos = Config.Zones.StairsGoBottomBottom.Pos}
|
||||
end
|
||||
|
||||
if zone == 'AmbulanceActions' then
|
||||
CurrentAction = 'ambulance_actions_menu'
|
||||
CurrentActionMsg = _U('open_menu')
|
||||
CurrentActionData = {}
|
||||
end
|
||||
|
||||
if zone == 'VehicleSpawner' then
|
||||
CurrentAction = 'vehicle_spawner_menu'
|
||||
CurrentActionMsg = _U('veh_spawn')
|
||||
CurrentActionData = {}
|
||||
end
|
||||
|
||||
if zone == 'Pharmacy' then
|
||||
CurrentAction = 'pharmacy'
|
||||
CurrentActionMsg = _U('open_pharmacy')
|
||||
CurrentActionData = {}
|
||||
end
|
||||
|
||||
if zone == 'VehicleDeleter' then
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local coords = GetEntityCoords(playerPed)
|
||||
|
||||
if IsPedInAnyVehicle(playerPed, false) then
|
||||
|
||||
local vehicle, distance = ESX.Game.GetClosestVehicle({
|
||||
x = coords.x,
|
||||
y = coords.y,
|
||||
z = coords.z
|
||||
})
|
||||
|
||||
if distance ~= -1 and distance <= 1.0 then
|
||||
|
||||
CurrentAction = 'delete_vehicle'
|
||||
CurrentActionMsg = _U('store_veh')
|
||||
CurrentActionData = {vehicle = vehicle}
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
function FastTravel(pos)
|
||||
TeleportFadeEffect(PlayerPedId(), pos)
|
||||
end
|
||||
|
||||
AddEventHandler('esx_ambulancejob:hasExitedMarker', function(zone)
|
||||
ESX.UI.Menu.CloseAll()
|
||||
CurrentAction = nil
|
||||
end)
|
||||
|
||||
-- Create blips
|
||||
Citizen.CreateThread(function()
|
||||
|
||||
local blip = AddBlipForCoord(Config.Blip.Pos.x, Config.Blip.Pos.y, Config.Blip.Pos.z)
|
||||
|
||||
SetBlipSprite(blip, Config.Blip.Sprite)
|
||||
SetBlipDisplay(blip, Config.Blip.Display)
|
||||
SetBlipScale(blip, Config.Blip.Scale)
|
||||
SetBlipColour(blip, Config.Blip.Colour)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentString(_U('hospital'))
|
||||
EndTextCommandSetBlipName(blip)
|
||||
|
||||
end)
|
||||
|
||||
-- Display markers
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
|
||||
local coords = GetEntityCoords(PlayerPedId())
|
||||
for k,v in pairs(Config.Zones) do
|
||||
if(v.Type ~= -1 and GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.DrawDistance) then
|
||||
if PlayerData.job ~= nil and PlayerData.job.name == 'ambulance' then
|
||||
DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
elseif k ~= 'AmbulanceActions' and k ~= 'VehicleSpawner' and k ~= 'VehicleDeleter' and k ~= 'Pharmacy' and k ~= 'StairsGoTopBottom' and k ~= 'StairsGoBottomTop' then
|
||||
DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, false, false, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Activate menu when player is inside marker
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(10)
|
||||
|
||||
local coords = GetEntityCoords(PlayerPedId())
|
||||
local isInMarker = false
|
||||
local currentZone = nil
|
||||
for k,v in pairs(Config.Zones) do
|
||||
if PlayerData.job ~= nil and PlayerData.job.name == 'ambulance' then
|
||||
if(GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.MarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentZone = k
|
||||
end
|
||||
elseif k ~= 'AmbulanceActions' and k ~= 'VehicleSpawner' and k ~= 'VehicleDeleter' and k ~= 'Pharmacy' and k ~= 'StairsGoTopBottom' and k ~= 'StairsGoBottomTop' then
|
||||
if(GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.MarkerSize.x) then
|
||||
isInMarker = true
|
||||
currentZone = k
|
||||
end
|
||||
end
|
||||
end
|
||||
if isInMarker and not hasAlreadyEnteredMarker then
|
||||
hasAlreadyEnteredMarker = true
|
||||
lastZone = currentZone
|
||||
TriggerEvent('esx_ambulancejob:hasEnteredMarker', currentZone)
|
||||
end
|
||||
|
||||
if not isInMarker and hasAlreadyEnteredMarker then
|
||||
hasAlreadyEnteredMarker = false
|
||||
TriggerEvent('esx_ambulancejob:hasExitedMarker', lastZone)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Key Controls
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
|
||||
Citizen.Wait(10)
|
||||
|
||||
if CurrentAction ~= nil then
|
||||
|
||||
SetTextComponentFormat('STRING')
|
||||
AddTextComponentString(CurrentActionMsg)
|
||||
DisplayHelpTextFromStringLabel(0, 0, 1, -1)
|
||||
|
||||
if IsControlJustReleased(0, Keys['E']) and PlayerData.job ~= nil and PlayerData.job.name == 'ambulance' then
|
||||
|
||||
if CurrentAction == 'ambulance_actions_menu' then
|
||||
OpenAmbulanceActionsMenu()
|
||||
end
|
||||
|
||||
if CurrentAction == 'vehicle_spawner_menu' then
|
||||
OpenVehicleSpawnerMenu()
|
||||
end
|
||||
|
||||
if CurrentAction == 'pharmacy' then
|
||||
OpenPharmacyMenu()
|
||||
end
|
||||
|
||||
if CurrentAction == 'fast_travel_goto_top' or CurrentAction == 'fast_travel_goto_bottom' then
|
||||
FastTravel(CurrentActionData.pos)
|
||||
end
|
||||
|
||||
if CurrentAction == 'delete_vehicle' then
|
||||
if Config.EnableSocietyOwnedVehicles then
|
||||
local vehicleProps = ESX.Game.GetVehicleProperties(CurrentActionData.vehicle)
|
||||
TriggerServerEvent('esx_society:putVehicleInGarage', 'ambulance', vehicleProps)
|
||||
end
|
||||
ESX.Game.DeleteVehicle(CurrentActionData.vehicle)
|
||||
end
|
||||
|
||||
CurrentAction = nil
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if IsControlJustReleased(0, Keys['F6']) and PlayerData.job ~= nil and PlayerData.job.name == 'ambulance' and not IsDead then
|
||||
OpenMobileAmbulanceActionsMenu()
|
||||
end
|
||||
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_ambulancejob:requestDeath')
|
||||
AddEventHandler('esx_ambulancejob:requestDeath', function()
|
||||
|
||||
+2
-2
@@ -11,9 +11,9 @@ Locales['sv'] = {
|
||||
['helicopter'] = 'helikopter',
|
||||
-- Action Menu
|
||||
['hospital'] = 'sjukhus',
|
||||
['revive_inprogress'] = 'återupplivning pågår . . .',
|
||||
['revive_inprogress'] = 'en återupplivning har börjats',
|
||||
['revive_complete'] = 'du har återupplivat ~y~%s~s~, bra jobbat!',
|
||||
['revive_complete_award'] = 'du har återupplivat ~y~%s~s~ och tjärnat ~g~%s SEK~s~ i processen, bra jobbat!',
|
||||
['revive_complete_award'] = 'du har återupplivat ~y~%s~s~ och tjärnat ~g~%s SEK~s~ för dina tjänster, bra jobbat!',
|
||||
['heal_inprogress'] = 'du behandlar patienten!',
|
||||
['heal_complete'] = 'du har behandlat ~y~%s~s~',
|
||||
['no_players'] = 'det finns inga spelare i närheten!',
|
||||
|
||||
+23
-20
@@ -16,6 +16,12 @@ AddEventHandler('esx_ambulancejob:heal', function(target, type)
|
||||
TriggerClientEvent('esx_ambulancejob:heal', target, type)
|
||||
end)
|
||||
|
||||
RegisterServerEvent('esx_ambulancejob:putInVehicle')
|
||||
AddEventHandler('esx_ambulancejob:putInVehicle', function(target)
|
||||
|
||||
TriggerClientEvent('esx_ambulancejob:putInVehicle', target)
|
||||
end)
|
||||
|
||||
TriggerEvent('esx_phone:registerNumber', 'ambulance', _U('alert_ambulance'), true, true)
|
||||
|
||||
TriggerEvent('esx_society:registerSociety', 'ambulance', 'Ambulance', 'society_ambulance', 'society_ambulance', 'society_ambulance', {type = 'public'})
|
||||
@@ -46,7 +52,7 @@ ESX.RegisterServerCallback('esx_ambulancejob:removeItemsAfterRPDeath', function(
|
||||
for i=1, #xPlayer.loadout, 1 do
|
||||
xPlayer.removeWeapon(xPlayer.loadout[i].name)
|
||||
end
|
||||
else -- save weapons & restore em' since
|
||||
else -- save weapons & restore em' since spawnmanager removes them
|
||||
for i=1, #xPlayer.loadout, 1 do
|
||||
table.insert(playerLoadout, xPlayer.loadout[i])
|
||||
end
|
||||
@@ -67,39 +73,35 @@ end)
|
||||
|
||||
if Config.EarlyRespawn and Config.EarlyRespawnFine then
|
||||
ESX.RegisterServerCallback('esx_ambulancejob:checkBalance', function(source, cb)
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
local bankBalance = xPlayer.getAccount('bank').money
|
||||
local finePayable = false
|
||||
|
||||
if bankBalance >= Config.EarlyRespawnFineAmount then
|
||||
finePayable = true
|
||||
else
|
||||
finePayable = false
|
||||
end
|
||||
|
||||
cb(finePayable)
|
||||
cb(bankBalance >= Config.EarlyRespawnFineAmount)
|
||||
end)
|
||||
|
||||
ESX.RegisterServerCallback('esx_ambulancejob:payFine', function(source, cb)
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('respawn_fine', Config.EarlyRespawnFineAmount))
|
||||
xPlayer.removeAccountMoney('bank', Config.EarlyRespawnFineAmount)
|
||||
|
||||
cb()
|
||||
end)
|
||||
end
|
||||
|
||||
ESX.RegisterServerCallback('esx_ambulancejob:getItemAmount', function(source, cb, item)
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
local qtty = xPlayer.getInventoryItem(item).count
|
||||
cb(qtty)
|
||||
local quantity = xPlayer.getInventoryItem(item).count
|
||||
|
||||
cb(quantity)
|
||||
end)
|
||||
|
||||
RegisterServerEvent('esx_ambulancejob:removeItem')
|
||||
AddEventHandler('esx_ambulancejob:removeItem', function(item)
|
||||
local _source = source
|
||||
local xPlayer = ESX.GetPlayerFromId(_source)
|
||||
|
||||
xPlayer.removeInventoryItem(item, 1)
|
||||
|
||||
if item == 'bandage' then
|
||||
TriggerClientEvent('esx:showNotification', _source, _U('used_bandage'))
|
||||
elseif item == 'medikit' then
|
||||
@@ -108,17 +110,18 @@ AddEventHandler('esx_ambulancejob:removeItem', function(item)
|
||||
end)
|
||||
|
||||
RegisterServerEvent('esx_ambulancejob:giveItem')
|
||||
AddEventHandler('esx_ambulancejob:giveItem', function(item)
|
||||
AddEventHandler('esx_ambulancejob:giveItem', function(itemName)
|
||||
local _source = source
|
||||
local xPlayer = ESX.GetPlayerFromId(_source)
|
||||
local limit = xPlayer.getInventoryItem(item).limit
|
||||
local delta = 1
|
||||
local qtty = xPlayer.getInventoryItem(item).count
|
||||
if limit ~= -1 then
|
||||
delta = limit - qtty
|
||||
local item = xPlayer.getInventoryItem(itemName)
|
||||
local count = 1
|
||||
|
||||
if item.limit ~= -1 then
|
||||
count = item.limit - item.count
|
||||
end
|
||||
if qtty < limit then
|
||||
xPlayer.addInventoryItem(item, delta)
|
||||
|
||||
if item.count < item.limit then
|
||||
xPlayer.addInventoryItem(itemName, count)
|
||||
else
|
||||
TriggerClientEvent('esx:showNotification', _source, _U('max_item'))
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user