Discord +
Discord - Documentation -Copyright (C) 2024 bitpredator +ESX Ambulance Job is an plugin for ESX with features: -This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version. +- Adds death screen, with early respawn timer and bleed out timer +- Vehicle garages, revive menu and more for on duty EMS -This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details. +## Requirements + +`Required`: + +- [esx_skin](https://github.com/esx-framework/esx-legacy/tree/main/%5Bcore%5D/esx_skin) +- [esx_vehicleshop](https://github.com/esx-framework/esx_vehicleshop) -ATTENTION: -You are not authorized to change the name of the resource and the resources within it. +## Legal -If you want to contribute you can open a pull request. +### License -You are not authorized to sell this software (this is free project). +bpt_ambulancejob - ambulance script for fivem -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +Copyright (C) 2015-2024 bitpredator + +This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version. + +This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details. -You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. \ No newline at end of file +You should have received a copy Of the GNU General Public License along with this program. If Not, see http://www.gnu.org/licenses/. diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/bpt_ambulancejob.sql index 09c3d72b9..f1befdbeb 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/bpt_ambulancejob.sql +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/bpt_ambulancejob.sql @@ -1,26 +1,24 @@ -USE `es_extended`; - INSERT INTO `addon_account` (name, label, shared) VALUES - ('society_ambulance', 'Ambulance', 1) + ('society_ambulance', 'EMS', 1) ; INSERT INTO `addon_inventory` (name, label, shared) VALUES - ('society_ambulance', 'Ambulance', 1) + ('society_ambulance', 'EMS', 1) ; INSERT INTO `datastore` (name, label, shared) VALUES - ('society_ambulance', 'Ambulance', 1) + ('society_ambulance', 'EMS', 1) ; INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES - ('ambulance',0,'ambulance','Ambulancier',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), - ('ambulance',1,'doctor','Medecin',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), - ('ambulance',2,'chief_doctor','Medecin-chef',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), - ('ambulance',3,'boss','Chirurgien',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') + ('ambulance',0,'ambulance','Jr. EMT',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','EMT',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Sr. EMT',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','EMT Supervisor',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') ; INSERT INTO `jobs` (name, label) VALUES - ('ambulance','Ambulance') + ('ambulance','EMS') ; INSERT INTO `items` (name, label, weight) VALUES diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/deathcam.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/deathcam.lua new file mode 100644 index 000000000..b0ee3cf42 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/deathcam.lua @@ -0,0 +1,53 @@ +function GetShapeTestResultSync(shape) + local handle, hit, coords, normal, entity + repeat + handle, hit, coords, normal, entity = GetShapeTestResult(shape) + until handle ~= 1 or Wait() + return hit, coords, normal, entity +end + +local camera +local x = 0 +local y = 0 +local camera_radius = 5 +local zoom = Config.zoom +local playerPed + +function StartDeathCam() + camera = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", 0, 0, 0, 0, 0, 0, GetGameplayCamFov(), 1) + RenderScriptCams(true, true, 1000, true, false) + + playerPed = PlayerPedId() +end + +function EndDeathCam() + RenderScriptCams(0) + camera = DestroyCam(camera) +end + +function ProcessCamControls() + local playerCoords = GetEntityCoords(playerPed) + if camera_radius < zoom.max and IsDisabledControlPressed(0, 14) then + camera_radius += zoom.step + elseif camera_radius > zoom.min and IsDisabledControlPressed(0, 15) then + camera_radius -= zoom.step + end + + local coords = ProcessNewPosition(playerCoords) + SetCamCoord(camera, coords) + PointCamAtCoord(camera, playerCoords.x, playerCoords.y, playerCoords.z) +end + +function ProcessNewPosition(playerCoords) + x -= GetDisabledControlNormal(0, 1) + y -= GetDisabledControlNormal(0, 2) + if y < math.rad(15) then + y = math.rad(15) + elseif y > math.rad(90) then + y = math.rad(90) + end + local normal = vector3(math.sin(y) * math.cos(x), math.sin(y) * math.sin(x), math.cos(y)) + local pos = playerCoords + normal * camera_radius + local hit, coords = GetShapeTestResultSync(StartShapeTestLosProbe(playerCoords, pos, -1, playerPed)) + return (hit == 1 and playerCoords + normal * (#(playerCoords - coords) - 1)) or pos +end diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/job.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/job.lua index 9943b895b..66bd654b8 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/job.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/job.lua @@ -1,11 +1,17 @@ local CurrentAction, CurrentActionMsg, CurrentActionData, billing = nil, "", {}, {} local HasAlreadyEnteredMarker, LastHospital, LastPart, LastPartNum -local isBusy, deadPlayers, deadPlayerBlips, isOnDuty, vehicle = false, {}, {}, false, {} -local isInShopMenu = false +local isBusy, deadPlayers, deadPlayerBlips, isOnDuty = false, {}, {}, false +isInShopMenu = false + +RegisterNetEvent("esx:playerLoaded") +AddEventHandler("esx:playerLoaded", function(xPlayer) + ESX.PlayerData = xPlayer + ESX.PlayerLoaded = true +end) function OpenAmbulanceActionsMenu() local elements = { - { unselectable = true, icon = "fas fa-shirt", title = "Ambulance Actions" }, + { unselectable = true, icon = "fas fa-shirt", title = TranslateCap("ambulance") }, { icon = "fas fa-shirt", title = TranslateCap("cloakroom"), value = "cloakroom" }, } @@ -17,11 +23,11 @@ function OpenAmbulanceActionsMenu() } end - ESX.OpenContext("right", elements, function(_, element) + ESX.OpenContext("right", elements, function(menu, element) if element.value == "cloakroom" then OpenCloakroomMenu() elseif element.value == "boss_actions" then - TriggerEvent("bpt_society:openBossMenu", "ambulance", function(_, menu) + TriggerEvent("bpt_society:openBossMenu", "ambulance", function(data, menu) menu.close() end, { wash = false }) end @@ -34,7 +40,7 @@ function OpenMobileAmbulanceActionsMenu() { icon = "fas fa-ambulance", title = TranslateCap("ems_menu"), value = "citizen_interaction" }, } - ESX.OpenContext("right", elements, function(_, element) + ESX.OpenContext("right", elements, function(menu, element) if element.value == "citizen_interaction" then local elements2 = { { unselectable = true, icon = "fas fa-ambulance", title = element.title }, @@ -46,11 +52,10 @@ function OpenMobileAmbulanceActionsMenu() { icon = "fas fa-syringe", title = TranslateCap("billing"), value = "billing" }, } - ESX.OpenContext("right", elements2, function(_, element2) + ESX.OpenContext("right", elements2, function(menu2, element2) if isBusy then return end - local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer() if element2.value == "search" then @@ -122,7 +127,6 @@ function OpenMobileAmbulanceActionsMenu() end -- billing - if billing == "billing" then ESX.UI.Menu.Open("dialog", GetCurrentResourceName(), "billing", { title = TranslateCap("invoice_amount"), @@ -158,18 +162,19 @@ function revivePlayer(closestPlayer) local lib, anim = "mini@cpr@char_a@cpr_str", "cpr_pumpchest" ESX.ShowNotification(TranslateCap("revive_inprogress")) - for _ = 1, 15 do + for i = 1, 15 do Wait(900) ESX.Streaming.RequestAnimDict(lib, function() TaskPlayAnim(playerPed, lib, anim, 8.0, -8.0, -1, 0, 0.0, false, false, false) + RemoveAnimDict(lib) end) end TriggerServerEvent("bpt_ambulancejob:removeItem", "medikit") TriggerServerEvent("bpt_ambulancejob:revive", GetPlayerServerId(closestPlayer)) else - ESX.ShowNotification(TranslateCap("player_notTranslateCapnconscious")) + ESX.ShowNotification(TranslateCap("player_not_unconscious")) end else ESX.ShowNotification(TranslateCap("not_enough_medikit")) @@ -199,11 +204,11 @@ end -- Draw markers & Marker logic CreateThread(function() while true do - Wait(0) + local sleep = 1500 if ESX.PlayerData.job and ESX.PlayerData.job.name == "ambulance" then local playerCoords = GetEntityCoords(PlayerPedId()) - local letSleep, isInMarker, hasExited = true, false, false + local isInMarker, hasExited = false, false local currentHospital, currentPart, currentPartNum for hospitalNum, hospital in pairs(Config.Hospitals) do @@ -212,8 +217,8 @@ CreateThread(function() local distance = #(playerCoords - v) if distance < Config.DrawDistance then + sleep = 0 DrawMarker(Config.Marker.type, v, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Config.Marker.x, Config.Marker.y, Config.Marker.z, Config.Marker.r, Config.Marker.g, Config.Marker.b, Config.Marker.a, false, false, 2, Config.Marker.rotate, nil, nil, false) - letSleep = false if distance < Config.Marker.x then isInMarker, currentHospital, currentPart, currentPartNum = true, hospitalNum, "AmbulanceActions", k @@ -226,8 +231,8 @@ CreateThread(function() local distance = #(playerCoords - v.Spawner) if distance < Config.DrawDistance then + sleep = 0 DrawMarker(v.Marker.type, v.Spawner, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Marker.x, v.Marker.y, v.Marker.z, v.Marker.r, v.Marker.g, v.Marker.b, v.Marker.a, false, false, 2, v.Marker.rotate, nil, nil, false) - letSleep = false if distance < v.Marker.x then isInMarker, currentHospital, currentPart, currentPartNum = true, hospitalNum, "Vehicles", k @@ -240,14 +245,28 @@ CreateThread(function() local distance = #(playerCoords - v.Spawner) if distance < Config.DrawDistance then + sleep = 0 DrawMarker(v.Marker.type, v.Spawner, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Marker.x, v.Marker.y, v.Marker.z, v.Marker.r, v.Marker.g, v.Marker.b, v.Marker.a, false, false, 2, v.Marker.rotate, nil, nil, false) - letSleep = false if distance < v.Marker.x then isInMarker, currentHospital, currentPart, currentPartNum = true, hospitalNum, "Helicopters", k end end end + + -- Fast Travels (Prompt) + for k, v in ipairs(hospital.FastTravels) do + local distance = #(playerCoords - v.From) + + if distance < Config.DrawDistance then + sleep = 0 + DrawMarker(v.Marker.type, v.From, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Marker.x, v.Marker.y, v.Marker.z, v.Marker.r, v.Marker.g, v.Marker.b, v.Marker.a, false, false, 2, v.Marker.rotate, nil, nil, false) + + if distance < v.Marker.x then + isInMarker, currentHospital, currentPart, currentPartNum = true, hospitalNum, "FastTravels", k + end + end + end end -- Logic for exiting & entering markers @@ -266,41 +285,8 @@ CreateThread(function() HasAlreadyEnteredMarker = false TriggerEvent("bpt_ambulancejob:hasExitedMarker", LastHospital, LastPart, LastPartNum) end - - if letSleep then - Wait(500) - end - else - Wait(500) - end - end -end) - --- Fast travels -CreateThread(function() - while true do - Wait(0) - local playerCoords, letSleep = GetEntityCoords(PlayerPedId()), true - - for _, hospital in pairs(Config.Hospitals) do - -- Fast Travels - for _, v in ipairs(hospital.FastTravels) do - local distance = #(playerCoords - v.From) - - if distance < Config.DrawDistance then - DrawMarker(v.Marker.type, v.From, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Marker.x, v.Marker.y, v.Marker.z, v.Marker.r, v.Marker.g, v.Marker.b, v.Marker.a, false, false, 2, v.Marker.rotate, nil, nil, false) - letSleep = false - - if distance < v.Marker.x then - FastTravel(v.To.coords, v.To.heading) - end - end - end - end - - if letSleep then - Wait(500) end + Wait(sleep) end end) @@ -317,24 +303,32 @@ AddEventHandler("bpt_ambulancejob:hasEnteredMarker", function(hospital, part, pa CurrentAction = part CurrentActionMsg = TranslateCap("helicopter_prompt") CurrentActionData = { hospital = hospital, partNum = partNum } + elseif part == "FastTravels" then + local travelItem = Config.Hospitals[hospital][part][partNum] + + CurrentAction = part + CurrentActionMsg = travelItem.Prompt + CurrentActionData = { to = travelItem.To.coords, heading = travelItem.To.heading } end + + ESX.TextUI(CurrentActionMsg) end) -AddEventHandler("bpt_ambulancejob:hasExitedMarker", function() +AddEventHandler("bpt_ambulancejob:hasExitedMarker", function(hospital, part, partNum) if not isInShopMenu then ESX.CloseContext() end - + ESX.HideUI() CurrentAction = nil end) -- Key Controls CreateThread(function() while true do - Wait(0) + local sleep = 1500 if CurrentAction then - ESX.ShowHelpNotification(CurrentActionMsg) + sleep = 0 if IsControlJustReleased(0, 38) then if CurrentAction == "AmbulanceActions" then @@ -343,41 +337,60 @@ CreateThread(function() OpenVehicleSpawnerMenu("car", CurrentActionData.hospital, CurrentAction, CurrentActionData.partNum) elseif CurrentAction == "Helicopters" then OpenVehicleSpawnerMenu("helicopter", CurrentActionData.hospital, CurrentAction, CurrentActionData.partNum) + elseif CurrentAction == "FastTravels" then + FastTravel(CurrentActionData.to, CurrentActionData.heading) end CurrentAction = nil end - elseif ESX.PlayerData.job and ESX.PlayerData.job.name == "ambulance" and not isDead then - if IsControlJustReleased(0, 167) then - OpenMobileAmbulanceActionsMenu() + end + + local playerCoords, letSleep = GetEntityCoords(PlayerPedId()), true + + for hospitalNum, hospital in pairs(Config.Hospitals) do + -- Fast Travels + for k, v in ipairs(hospital.FastTravels) do + local distance = #(playerCoords - v.From) + + if distance < Config.DrawDistance then + sleep = 0 + DrawMarker(v.Marker.type, v.From, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Marker.x, v.Marker.y, v.Marker.z, v.Marker.r, v.Marker.g, v.Marker.b, v.Marker.a, false, false, 2, v.Marker.rotate, nil, nil, false) + + if distance < v.Marker.x then + FastTravel(v.To.coords, v.To.heading) + end + end end - else - Wait(500) end + Wait(sleep) end end) +RegisterCommand("ambulance", function(src) + if ESX.PlayerData.job and ESX.PlayerData.job.name == "ambulance" and not ESX.PlayerData.dead then + OpenMobileAmbulanceActionsMenu() + end +end) + +RegisterKeyMapping("ambulance", "Open Ambulance Actions Menu", "keyboard", "F6") + RegisterNetEvent("bpt_ambulancejob:putInVehicle") AddEventHandler("bpt_ambulancejob:putInVehicle", function() local playerPed = PlayerPedId() - local coords = GetEntityCoords(playerPed) - - if IsAnyVehicleNearPoint(coords, 5.0) then - vehicle = ESX.Game.GetClosestVehicle(coords) + local vehicle, distance = ESX.Game.GetClosestVehicle() - if DoesEntityExist(vehicle) then - local maxSeats, freeSeat = GetVehicleMaxNumberOfPassengers(vehicle) + if vehicle and distance < 5 then + local maxSeats, freeSeat = GetVehicleMaxNumberOfPassengers(vehicle) - for i = maxSeats - 1, 0, -1 do - if IsVehicleSeatFree(vehicle, i) then - freeSeat = i - break - end + for i = maxSeats - 1, 0, -1 do + if IsVehicleSeatFree(vehicle, i) then + freeSeat = i + break end + end - if freeSeat then - TaskWarpPedIntoVehicle(playerPed, vehicle, freeSeat) - end + if freeSeat then + TaskWarpPedIntoVehicle(playerPed, vehicle, freeSeat) end end end) @@ -389,9 +402,9 @@ function OpenCloakroomMenu() { icon = "fas fa-shirt", title = TranslateCap("ems_clothes_ems"), value = "ambulance_wear" }, } - ESX.OpenContext("right", elements, function(_, element) + ESX.OpenContext("right", elements, function(menu, element) if element.value == "citizen_wear" then - ESX.TriggerServerCallback("esx_skin:getPlayerSkin", function(skin) + ESX.TriggerServerCallback("esx_skin:getPlayerSkin", function(skin, jobSkin) TriggerEvent("skinchanger:loadSkin", skin) isOnDuty = false @@ -399,6 +412,10 @@ function OpenCloakroomMenu() RemoveBlip(v) deadPlayerBlips[playerId] = nil end + deadPlayers = {} + if Config.Debug then + print("[^2INFO^7] Off Duty") + end end) elseif element.value == "ambulance_wear" then ESX.TriggerServerCallback("esx_skin:getPlayerSkin", function(skin, jobSkin) @@ -409,12 +426,50 @@ function OpenCloakroomMenu() end isOnDuty = true - TriggerEvent("bpt_ambulancejob:setDeadPlayers", deadPlayers) + ESX.TriggerServerCallback("bpt_ambulancejob:getDeadPlayers", function(_deadPlayers) + TriggerEvent("bpt_ambulancejob:setDeadPlayers", _deadPlayers) + end) + if Config.Debug then + print("[^2INFO^7] Player Sex |^5" .. tostring(skin.sex) .. "^7") + print("[^2INFO^7] On Duty") + end end) end end) end +function OpenPharmacyMenu() + local elements = { + { unselectable = true, icon = "fas fa-pills", title = TranslateCap("pharmacy_menu_title") }, + } + + for k, v in pairs(Config.PharmacyItems) do + elements[#elements + 1] = { + icon = "fas fa-pills", + title = v.title, + item = v.item, + } + end + + ESX.OpenContext("right", elements, function(menu, element) + local elements2 = { + { unselectable = true, icon = "fas fa-pills", title = element.title }, + { title = "Amount", input = true, inputType = "number", inputMin = 1, inputMax = 100, inputPlaceholder = "Amount to buy.." }, + { icon = "fas fa-check-double", title = "Confirm", val = "confirm" }, + } + + ESX.OpenContext("right", elements2, function(menu2, element2) + local amount = menu2.eles[2].inputValue + if Config.Debug then + print("[^2INFO^7] Attempting to Give Item - ^5" .. tostring(element.item) .. "^7") + end + TriggerServerEvent("bpt_ambulancejob:giveItem", element.item, amount) + end, function(menu) + OpenPharmacyMenu() + end) + end) +end + RegisterNetEvent("bpt_ambulancejob:heal") AddEventHandler("bpt_ambulancejob:heal", function(healType, quiet) local playerPed = PlayerPedId() @@ -428,6 +483,9 @@ AddEventHandler("bpt_ambulancejob:heal", function(healType, quiet) SetEntityHealth(playerPed, maxHealth) end + if Config.Debug then + print("[^2INFO^7] Healing Player - ^5" .. tostring(healType) .. "^7") + end if not quiet then ESX.ShowNotification(TranslateCap("healed")) end @@ -435,8 +493,11 @@ end) RegisterNetEvent("esx:setJob") AddEventHandler("esx:setJob", function(job) - if isOnDuty and job ~= "ambulance" then + if isOnDuty and job.name ~= "ambulance" then for playerId, v in pairs(deadPlayerBlips) do + if Config.Debug then + print("[^2INFO^7] Removing dead blip - ^5" .. tostring(playerId) .. "^7") + end RemoveBlip(v) deadPlayerBlips[playerId] = nil end @@ -445,8 +506,30 @@ AddEventHandler("esx:setJob", function(job) end end) +RegisterNetEvent("bpt_ambulancejob:PlayerDead") +AddEventHandler("bpt_ambulancejob:PlayerDead", function(Player) + if Config.Debug then + print("[^2INFO^7] Player Dead | ^5" .. tostring(Player) .. "^7") + end + deadPlayers[Player] = "dead" +end) + +RegisterNetEvent("bpt_ambulancejob:PlayerNotDead") +AddEventHandler("bpt_ambulancejob:PlayerNotDead", function(Player) + if deadPlayerBlips[Player] then + RemoveBlip(deadPlayerBlips[Player]) + deadPlayerBlips[Player] = nil + end + if Config.Debug then + print("[^2INFO^7] Player Alive | ^5" .. tostring(Player) .. "^7") + end + deadPlayers[Player] = nil +end) + RegisterNetEvent("bpt_ambulancejob:setDeadPlayers") -AddEventHandler("bpt_ambulancejob:setDeadPlayers", function() +AddEventHandler("bpt_ambulancejob:setDeadPlayers", function(_deadPlayers) + deadPlayers = _deadPlayers + if isOnDuty then for playerId, v in pairs(deadPlayerBlips) do RemoveBlip(v) @@ -454,7 +537,13 @@ AddEventHandler("bpt_ambulancejob:setDeadPlayers", function() end for playerId, status in pairs(deadPlayers) do + if Config.Debug then + print("[^2INFO^7] Player Dead | ^5" .. tostring(playerId) .. "^7") + end if status == "distress" then + if Config.Debug then + print("[^2INFO^7] Creating Distress Blip for Player - ^5" .. tostring(playerId) .. "^7") + end local player = GetPlayerFromServerId(playerId) local playerPed = GetPlayerPed(player) local blip = AddBlipForEntity(playerPed) @@ -473,3 +562,28 @@ AddEventHandler("bpt_ambulancejob:setDeadPlayers", function() end end end) + +RegisterNetEvent("bpt_ambulancejob:PlayerDistressed") +AddEventHandler("bpt_ambulancejob:PlayerDistressed", function(playerId, playerCoords) + deadPlayers[playerId] = "distress" + + if isOnDuty then + if Config.Debug then + print("[^2INFO^7] Player Distress Recived - ID:^5" .. tostring(playerId) .. "^7") + end + ESX.ShowNotification(TranslateCap("unconscious_found"), "error", 10000) + deadPlayerBlips[playerId] = nil + + local blip = AddBlipForCoord(playerCoords.x, playerCoords.y, playerCoords.z) + SetBlipSprite(blip, Config.DistressBlip.Sprite) + SetBlipColour(blip, Config.DistressBlip.Color) + SetBlipScale(blip, Config.DistressBlip.Scale) + SetBlipFlashes(blip, true) + + BeginTextCommandSetBlipName("STRING") + AddTextComponentSubstringPlayerName(TranslateCap("blip_dead")) + EndTextCommandSetBlipName(blip) + + deadPlayerBlips[playerId] = blip + end +end) diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/main.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/main.lua index 23a52f45b..4edf87ea2 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/main.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/main.lua @@ -1,47 +1,34 @@ -local firstSpawn, PlayerLoaded = true, false - +local firstSpawn = true isDead, isSearched, medic = false, false, 0 -AddEventHandler("onClientMapStart", function() - exports.spawnmanager:spawnPlayer() - Wait(5000) - exports.spawnmanager:setAutoSpawn(false) -end) - -CreateThread(function() - ESX = exports["es_extended"]:getSharedObject() - while ESX.GetPlayerData().job == nil do - Wait(100) - end - PlayerLoaded = true - ESX.PlayerData = ESX.GetPlayerData() -end) - RegisterNetEvent("esx:playerLoaded") AddEventHandler("esx:playerLoaded", function(xPlayer) - ESX.PlayerData = xPlayer - PlayerLoaded = true + ESX.PlayerLoaded = true end) -RegisterNetEvent("esx:setJob") -AddEventHandler("esx:setJob", function(job) - ESX.PlayerData.job = job +RegisterNetEvent("esx:onPlayerLogout") +AddEventHandler("esx:onPlayerLogout", function() + ESX.PlayerLoaded = false + firstSpawn = true end) AddEventHandler("esx:onPlayerSpawn", function() isDead = false - + ClearTimecycleModifier() + SetPedMotionBlur(PlayerPedId(), false) + ClearExtraTimecycleModifier() + EndDeathCam() if firstSpawn then firstSpawn = false - if Config.AntiCombatLog then - while not PlayerLoaded do - Wait(5000) + if Config.SaveDeathStatus then + while not ESX.PlayerLoaded do + Wait(1000) end ESX.TriggerServerCallback("bpt_ambulancejob:getDeathStatus", function(shouldDie) if shouldDie then - Wait(10000) + Wait(1000) SetEntityHealth(PlayerPedId(), 0) end end) @@ -51,7 +38,7 @@ end) -- Create blips CreateThread(function() - for _, v in pairs(Config.Hospitals) do + for k, v in pairs(Config.Hospitals) do local blip = AddBlipForCoord(v.Blip.coords) SetBlipSprite(blip, v.Blip.sprite) @@ -65,38 +52,6 @@ CreateThread(function() end end) --- Disable most inputs when dead -CreateThread(function() - while true do - Wait(0) - - if isDead then - DisableAllControlActions(0) - EnableControlAction(0, 47, true) - EnableControlAction(0, 245, true) - EnableControlAction(0, 38, true) - else - Wait(500) - end - end -end) - -CreateThread(function() - while true do - Wait(0) - if isDead and isSearched then - local playerPed = PlayerPedId() - local ped = GetPlayerPed(GetPlayerFromServerId(medic)) - isSearched = false - - AttachEntityToEntity(playerPed, ped, 11816, 0.54, 0.54, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true) - Wait(1000) - DetachEntity(playerPed, true, false) - ClearPedTasksImmediately(playerPed) - end - end -end) - RegisterNetEvent("bpt_ambulancejob:clsearch") AddEventHandler("bpt_ambulancejob:clsearch", function(medicId) local playerPed = PlayerPedId() @@ -117,14 +72,19 @@ AddEventHandler("bpt_ambulancejob:clsearch", function(medicId) end) function OnPlayerDeath() - isDead = true ESX.CloseContext() + ClearTimecycleModifier() + SetTimecycleModifier("REDMIST_blend") + SetTimecycleModifierStrength(0.7) + SetExtraTimecycleModifier("fp_vig_red") + SetExtraTimecycleModifierStrength(1.0) + SetPedMotionBlur(PlayerPedId(), true) TriggerServerEvent("bpt_ambulancejob:setDeathStatus", true) - StartDeathTimer() + StartDeathCam() + isDead = true + StartDeathLoop() StartDistressSignal() - - StartScreenEffect("DeathFailOut", 0, false) end RegisterNetEvent("bpt_ambulancejob:useItem") @@ -137,6 +97,7 @@ AddEventHandler("bpt_ambulancejob:useItem", function(itemName) ESX.Streaming.RequestAnimDict(lib, function() TaskPlayAnim(playerPed, lib, anim, 8.0, -8.0, -1, 0, 0, false, false, false) + RemoveAnimDict(lib) Wait(500) while IsEntityPlayingAnim(playerPed, lib, anim, 3) do @@ -153,6 +114,7 @@ AddEventHandler("bpt_ambulancejob:useItem", function(itemName) ESX.Streaming.RequestAnimDict(lib, function() TaskPlayAnim(playerPed, lib, anim, 8.0, -8.0, -1, 0, 0, false, false, false) + RemoveAnimDict(lib) Wait(500) while IsEntityPlayingAnim(playerPed, lib, anim, 3) do @@ -166,6 +128,29 @@ AddEventHandler("bpt_ambulancejob:useItem", function(itemName) end end) +function StartDeathLoop() + CreateThread(function() + while isDead do + DisableAllControlActions(0) + EnableControlAction(0, 47, true) -- G + EnableControlAction(0, 245, true) -- T + EnableControlAction(0, 38, true) -- E + + ProcessCamControls() + if isSearched then + local playerPed = PlayerPedId() + local ped = GetPlayerPed(GetPlayerFromServerId(medic)) + isSearched = false + + AttachEntityToEntity(playerPed, ped, 11816, 0.54, 0.54, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true) + Wait(1000) + DetachEntity(playerPed, true, false) + ClearPedTasksImmediately(playerPed) + end + end + end) +end + function StartDistressSignal() CreateThread(function() local timer = Config.BleedoutTimer @@ -175,14 +160,12 @@ function StartDistressSignal() timer = timer - 30 SetTextFont(4) - SetTextScale(0.45, 0.45) - SetTextColour(185, 185, 185, 255) - SetTextDropshadow(0, 0, 0, 0, 255) - SetTextDropShadow() - SetTextOutline() + SetTextScale(0.5, 0.5) + SetTextColour(200, 50, 50, 255) + SetTextDropshadow(0.1, 3, 27, 27, 255) BeginTextCommandDisplayText("STRING") AddTextComponentSubstringPlayerName(TranslateCap("distress_send")) - EndTextCommandDisplayText(0.175, 0.805) + EndTextCommandDisplayText(0.446, 0.77) if IsControlJustReleased(0, 47) then SendDistressSignal() @@ -194,7 +177,7 @@ end function SendDistressSignal() local playerPed = PlayerPedId() - local _ = GetEntityCoords(playerPed) + local coords = GetEntityCoords(playerPed) ESX.ShowNotification(TranslateCap("distress_sent")) TriggerServerEvent("bpt_ambulancejob:onPlayerDistress") @@ -211,7 +194,7 @@ function DrawGenericTextThisFrame() end function secondsToClock(seconds) - local _ = tonumber(seconds) + local seconds, hours, mins, secs = tonumber(seconds), 0, 0, 0 if seconds <= 0 then return 0, 0 @@ -265,10 +248,9 @@ function StartDeathTimer() text = TranslateCap("respawn_available_in", secondsToClock(earlySpawnTimer)) DrawGenericTextThisFrame() - - SetTextEntry("STRING") - AddTextComponentString(text) - DrawText(0.5, 0.8) + BeginTextCommandDisplayText("STRING") + AddTextComponentSubstringPlayerName(text) + EndTextCommandDisplayText(0.5, 0.8) end -- bleedout timer @@ -279,14 +261,14 @@ function StartDeathTimer() if not Config.EarlyRespawnFine then text = text .. TranslateCap("respawn_bleedout_prompt") - if IsControlPressed(0, 38) and timeHeld > 60 then + if IsControlPressed(0, 38) and timeHeld > 120 then RemoveItemsAfterRPDeath() break end elseif Config.EarlyRespawnFine and canPayFine then text = text .. TranslateCap("respawn_bleedout_fine", ESX.Math.GroupDigits(Config.EarlyRespawnFineAmount)) - if IsControlPressed(0, 38) and timeHeld > 60 then + if IsControlPressed(0, 38) and timeHeld > 120 then TriggerServerEvent("bpt_ambulancejob:payFine") RemoveItemsAfterRPDeath() break @@ -294,16 +276,16 @@ function StartDeathTimer() end if IsControlPressed(0, 38) then - timeHeld = timeHeld + 1 + timeHeld += 1 else timeHeld = 0 end DrawGenericTextThisFrame() - SetTextEntry("STRING") - AddTextComponentString(text) - DrawText(0.5, 0.8) + BeginTextCommandDisplayText("STRING") + AddTextComponentSubstringPlayerName(text) + EndTextCommandDisplayText(0.5, 0.8) end if bleedoutTimer < 1 and isDead then @@ -312,44 +294,64 @@ function StartDeathTimer() end) end -function RemoveItemsAfterRPDeath() - TriggerServerEvent("bpt_ambulancejob:setDeathStatus", false) +function GetClosestRespawnPoint() + local plyCoords = GetEntityCoords(PlayerPedId()) + local closestDist, closestHospital - CreateThread(function() - DoScreenFadeOut(800) + for i = 1, #Config.RespawnPoints do + local dist = #(plyCoords - Config.RespawnPoints[i].coords) - while not IsScreenFadedOut() do - Wait(10) + if not closestDist or dist <= closestDist then + closestDist, closestHospital = dist, Config.RespawnPoints[i] end + end + + return closestHospital +end + +function RemoveItemsAfterRPDeath() + TriggerServerEvent("bpt_ambulancejob:setDeathStatus", false) + CreateThread(function() ESX.TriggerServerCallback("bpt_ambulancejob:removeItemsAfterRPDeath", function() - local formattedCoords = { - x = Config.RespawnPoint.coords.x, - y = Config.RespawnPoint.coords.y, - z = Config.RespawnPoint.coords.z, - } + local ClosestHospital = GetClosestRespawnPoint() ESX.SetPlayerData("loadout", {}) - RespawnPed(PlayerPedId(), formattedCoords, Config.RespawnPoint.heading) - StopScreenEffect("DeathFailOut") + DoScreenFadeOut(800) + RespawnPed(PlayerPedId(), ClosestHospital.coords, ClosestHospital.heading) + while not IsScreenFadedOut() do + Wait(0) + end DoScreenFadeIn(800) end) end) end function RespawnPed(ped, coords, heading) - SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z, false, false, false, true) + SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z, false, false, false) NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, heading, true, false) SetPlayerInvincible(ped, false) ClearPedBloodDamage(ped) + TriggerEvent("esx_basicneeds:resetStatus") TriggerServerEvent("esx:onPlayerSpawn") TriggerEvent("esx:onPlayerSpawn") TriggerEvent("playerSpawned") -- compatibility with old scripts, will be removed soon end -AddEventHandler("esx:onPlayerDeath", function() +RegisterNetEvent("esx_phone:loaded") +AddEventHandler("esx_phone:loaded", function(phoneNumber, contacts) + local specialContact = { + name = "Ambulance", + number = "ambulance", + base64Icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAABp5JREFUWIW1l21sFNcVhp/58npn195de23Ha4Mh2EASSvk0CPVHmmCEI0RCTQMBKVVooxYoalBVCVokICWFVFVEFeKoUdNECkZQIlAoFGMhIkrBQGxHwhAcChjbeLcsYHvNfsx+zNz+MBDWNrYhzSvdP+e+c973XM2cc0dihFi9Yo6vSzN/63dqcwPZcnEwS9PDmYoE4IxZIj+ciBb2mteLwlZdfji+dXtNU2AkeaXhCGteLZ/X/IS64/RoR5mh9tFVAaMiAldKQUGiRzFp1wXJPj/YkxblbfFLT/tjq9/f1XD0sQyse2li7pdP5tYeLXXMMGUojAiWKeOodE1gqpmNfN2PFeoF00T2uLGKfZzTwhzqbaEmeYWAQ0K1oKIlfPb7t+7M37aruXvEBlYvnV7xz2ec/2jNs9kKooKNjlksiXhJfLqf1PXOIU9M8fmw/XgRu523eTNyhhu6xLjbSeOFC6EX3t3V9PmwBla9Vv7K7u85d3bpqlwVcvHn7B8iVX+IFQoNKdwfstuFtWoFvwp9zj5XL7nRlPXyudjS9z+u35tmuH/lu6dl7+vSVXmDUcpbX+skP65BxOOPJA4gjDicOM2PciejeTwcsYek1hyl6me5nhNnmwPXBhjYuGC699OpzoaAO0PbYJSy5vgt4idOPrJwf6QuX2FO0oOtqIgj9pDU5dCWrMlyvXf86xsGgHyPeLos83Brns1WFXLxxgVBorHpW4vfQ6KhkbUtCot6srns1TLPjNVr7+1J0PepVc92H/Eagkb7IsTWd4ZMaN+yCXv5zLRY9GQ9xuYtQz4nfreWGdH9dNlkfnGq5/kdO88ekwGan1B3mDJsdMxCqv5w2Iq0khLs48vSllrsG/Y5pfojNugzScnQXKBVA8hrX51ddHq0o6wwIlgS8Y7obZdUZVjOYLC6e3glWkBBVHC2RJ+w/qezCuT/2sV6Q5VYpowjvnf/iBJJqvpYBgBS+w6wVB5DLEOiTZHWy36nNheg0jUBs3PoJnMfyuOdAECqrZ3K7KcACGQp89RAtlysCphqZhPtRzYlcPx+ExklJUiq0le5omCfOGFAYn3qFKS/fZAWS7a3Y2wa+GJOEy4US+B3aaPUYJamj4oI5LA/jWQBt5HIK5+JfXzZsJVpXi/ac8+mxWIXWzAG4Wb4g/jscNMp63I4U5FcKaVvsNyFALokSA47Kx8PVk83OabCHZsiqwAKEpjmfUJIkoh/R+L9oTpjluhRkGSPG4A7EkS+Y3HZk0OXYpIVNy01P5yItnptDsvtIwr0SunqoVP1GG1taTHn1CloXm9aLBEIEDl/IS2W6rg+qIFEYR7+OJTesqJqYa95/VKBNOHLjDBZ8sDS2998a0Bs/F//gvu5Z9NivadOc/U3676pEsizBIN1jCYlhClL+ELJDrkobNUBfBZqQfMN305HAgnIeYi4OnYMh7q/AsAXSdXK+eH41sykxd+TV/AsXvR/MeARAttD9pSqF9nDNfSEoDQsb5O31zQFprcaV244JPY7bqG6Xd9K3C3ALgbfk3NzqNE6CdplZrVFL27eWR+UASb6479ULfhD5AzOlSuGFTE6OohebElbcb8fhxA4xEPUgdTK19hiNKCZgknB+Ep44E44d82cxqPPOKctCGXzTmsBXbV1j1S5XQhyHq6NvnABPylu46A7QmVLpP7w9pNz4IEb0YyOrnmjb8bjB129fDBRkDVj2ojFbYBnCHHb7HL+OC7KQXeEsmAiNrnTqLy3d3+s/bvlVmxpgffM1fyM5cfsPZLuK+YHnvHELl8eUlwV4BXim0r6QV+4gD9Nlnjbfg1vJGktbI5UbN/TcGmAAYDG84Gry/MLLl/zKouO2Xukq/YkCyuWYV5owTIGjhVFCPL6J7kLOTcH89ereF1r4qOsm3gjSevl85El1Z98cfhB3qBN9+dLp1fUTco+0OrVMnNjFuv0chYbBYT2HcBoa+8TALyWQOt/ImPHoFS9SI3WyRajgdt2mbJgIlbREplfveuLf/XXemjXX7v46ZxzPlfd8YlZ01My5MUEVdIY5rueYopw4fQHkbv7/rZkTw6JwjyalBCHur9iD9cI2mU0UzD3P9H6yZ1G5dt7Gwe96w07dl5fXj7vYqH2XsNovdTI6KMrlsAXhRyz7/C7FBO/DubdVq4nBLPaohcnBeMr3/2k4fhQ+Uc8995YPq2wMzNjww2X+vwNt1p00ynrd2yKDJAVN628sBX1hZIdxXdStU9G5W2bd9YHR5L3f/CNmJeY9G8WAAAAAElFTkSuQmCC", + } + + TriggerEvent("esx_phone:addSpecialContact", specialContact.name, specialContact.number, specialContact.base64Icon) +end) + +AddEventHandler("esx:onPlayerDeath", function(data) OnPlayerDeath() end) @@ -365,15 +367,14 @@ AddEventHandler("bpt_ambulancejob:revive", function() Wait(50) end - local formattedCoords = { - x = ESX.Math.Round(coords.x, 1), - y = ESX.Math.Round(coords.y, 1), - z = ESX.Math.Round(coords.z, 1), - } + local formattedCoords = { x = ESX.Math.Round(coords.x, 1), y = ESX.Math.Round(coords.y, 1), z = ESX.Math.Round(coords.z, 1) } RespawnPed(playerPed, formattedCoords, 0.0) - - StopScreenEffect("DeathFailOut") + isDead = false + ClearTimecycleModifier() + SetPedMotionBlur(playerPed, false) + ClearExtraTimecycleModifier() + EndDeathCam() DoScreenFadeIn(800) end) diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/vehicle.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/vehicle.lua index 77c081023..c307c01ae 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/vehicle.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/client/vehicle.lua @@ -8,14 +8,15 @@ function OpenVehicleSpawnerMenu(type, hospital, part, partNum) { icon = "fas fa-car", title = TranslateCap("garage_storeitem"), action = "store_garage" }, { icon = "fas fa-car", title = TranslateCap("garage_buyitem"), action = "buy_vehicle" }, } - ESX.OpenContext("right", elements, function(_, element) + + ESX.OpenContext("right", elements, function(menu, element) if element.action == "buy_vehicle" then local shopElements = {} local authorizedVehicles = Config.AuthorizedVehicles[type][ESX.PlayerData.job.grade_name] local shopCoords = Config.Hospitals[hospital][part][partNum].InsideShop if #authorizedVehicles > 0 then - for _, vehicle in ipairs(authorizedVehicles) do + for k, vehicle in ipairs(authorizedVehicles) do if IsModelInCdimage(vehicle.model) then local vehicleLabel = GetLabelText(GetDisplayNameFromVehicleModel(vehicle.model)) @@ -48,18 +49,18 @@ function OpenVehicleSpawnerMenu(type, hospital, part, partNum) if #jobVehicles > 0 then local allVehicleProps = {} - for _, v in ipairs(jobVehicles) do + for k, v in ipairs(jobVehicles) do local props = json.decode(v.vehicle) if IsModelInCdimage(props.model) then local vehicleName = GetLabelText(GetDisplayNameFromVehicleModel(props.model)) local label = ('%s - %s: '):format(vehicleName, props.plate) - if v.stored then - label = label .. ('%s'):format(TranslateCap("garage_stored")) - else - label = label .. ('%s'):format(TranslateCap("garage_notstored")) - end + if v.stored == 1 or v.stored == true then + label = label .. ('%s'):format(TranslateCap('garage_stored')) + elseif v.stored == 0 or v.stored == false then + label = label .. ('%s'):format(TranslateCap('garage_notstored')) + end garage[#garage + 1] = { icon = "fas fa-car", @@ -74,7 +75,7 @@ function OpenVehicleSpawnerMenu(type, hospital, part, partNum) end if #garage > 0 then - ESX.OpenContext("right", garage, function(_, elementG) + ESX.OpenContext("right", garage, function(menuG, elementG) if elementG.stored == 1 then local foundSpawn, spawnPoint = GetAvailableVehicleSpawnPoint(hospital, part, partNum) @@ -84,6 +85,7 @@ function OpenVehicleSpawnerMenu(type, hospital, part, partNum) ESX.Game.SpawnVehicle(elementG.model, spawnPoint.coords, spawnPoint.heading, function(vehicle) local vehicleProps = allVehicleProps[elementG.plate] ESX.Game.SetVehicleProperties(vehicle, vehicleProps) + TriggerServerEvent("esx_vehicleshop:setJobVehicleState", elementG.plate, false) ESX.ShowNotification(TranslateCap("garage_released")) end) @@ -106,16 +108,17 @@ function OpenVehicleSpawnerMenu(type, hospital, part, partNum) end function StoreNearbyVehicle(playerCoords) - local vehicles, vehiclePlates = ESX.Game.GetVehiclesInArea(playerCoords, 30.0), {} - - if #vehicles > 0 then - for _, v in ipairs(vehicles) do - -- Make sure the vehicle we're saving is empty, or else it wont be deleted - if GetVehicleNumberOfPassengers(v) == 0 and IsVehicleSeatFree(v, -1) then - table.insert(vehiclePlates, { - vehicle = v, - plate = ESX.Math.Trim(GetVehicleNumberPlateText(v)), - }) + local vehicles, plates, index = ESX.Game.GetVehiclesInArea(playerCoords, 30.0), {}, {} + + if next(vehicles) then + for i = 1, #vehicles do + local vehicle = vehicles[i] + + -- Make sure the vehicle we're saving is empty, or else it won't be deleted + if GetVehicleNumberOfPassengers(vehicle) == 0 and IsVehicleSeatFree(vehicle, -1) then + local plate = ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)) + plates[#plates + 1] = plate + index[plate] = vehicle end end else @@ -123,23 +126,27 @@ function StoreNearbyVehicle(playerCoords) return end - ESX.TriggerServerCallback("bpt_ambulancejob:storeNearbyVehicle", function(storeSuccess, foundNum) - if storeSuccess then - local vehicleId = vehiclePlates[foundNum] + ESX.TriggerServerCallback("bpt_ambulancejob:storeNearbyVehicle", function(plate) + if plate then + local vehicleId = index[plate] local attempts = 0 - ESX.Game.DeleteVehicle(vehicleId.vehicle) - local isBusy = true - local drawLoadingText = {} + ESX.Game.DeleteVehicle(vehicleId) + isBusy = true CreateThread(function() + BeginTextCommandBusyspinnerOn("STRING") + AddTextComponentSubstringPlayerName(TranslateCap("garage_storing")) + EndTextCommandBusyspinnerOn(4) + while isBusy do - Wait(0) - drawLoadingText(TranslateCap("garage_storing"), 255, 255, 255, 255) + Wait(100) end + + BusyspinnerOff() end) -- Workaround for vehicle not deleting when other players are near it. - while DoesEntityExist(vehicleId.vehicle) do + while DoesEntityExist(vehicleId) do Wait(500) attempts = attempts + 1 @@ -150,9 +157,10 @@ function StoreNearbyVehicle(playerCoords) vehicles = ESX.Game.GetVehiclesInArea(playerCoords, 30.0) if #vehicles > 0 then - for _, v in ipairs(vehicles) do - if ESX.Math.Trim(GetVehicleNumberPlateText(v)) == vehicleId.plate then - ESX.Game.DeleteVehicle(v) + for i = 1, #vehicles do + local vehicle = vehicles[i] + if ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)) == plate then + ESX.Game.DeleteVehicle(vehicle) break end end @@ -164,7 +172,7 @@ function StoreNearbyVehicle(playerCoords) else ESX.ShowNotification(TranslateCap("garage_has_notstored")) end - end, vehiclePlates) + end, plates) end function GetAvailableVehicleSpawnPoint(hospital, part, partNum) @@ -189,18 +197,18 @@ end function OpenShopMenu(elements, restoreCoords, shopCoords) local playerPed = PlayerPedId() isInShopMenu = true - ESX.OpenContext("right", elements, function(_, element) + ESX.OpenContext("right", elements, function(menu, element) local elements2 = { { unselectable = true, icon = "fas fa-car", title = element.title }, { icon = "fas fa-eye", title = "View", value = "view" }, } - ESX.OpenContext("right", elements2, function(_, element2) + ESX.OpenContext("right", elements2, function(menu2, element2) if element2.value == "view" then DeleteSpawnedVehicles() WaitForVehicleToLoad(element.model) - ESX.Game.SpawnLocalVehicle(element.model, shopCoords, 0.0, function(vehicle) + ESX.Game.SpawnLocalVehicle(element.model, shopCoords.xyz, shopCoords.w, function(vehicle) table.insert(spawnedVehicles, vehicle) TaskWarpPedIntoVehicle(playerPed, vehicle, -1) FreezeEntityPosition(vehicle, true) @@ -217,7 +225,7 @@ function OpenShopMenu(elements, restoreCoords, shopCoords) { icon = "fas fa-eye", title = "Stop Viewing", value = "stop" }, } - ESX.OpenContext("right", elements3, function(_, element3) + ESX.OpenContext("right", elements3, function(menu3, element3) if element3.value == "stop" then isInShopMenu = false ESX.CloseContext() @@ -250,6 +258,15 @@ function OpenShopMenu(elements, restoreCoords, shopCoords) end end, props, element.type) end + end, function() + isInShopMenu = false + ESX.CloseContext() + + DeleteSpawnedVehicles() + FreezeEntityPosition(playerPed, false) + SetEntityVisible(playerPed, true) + + ESX.Game.Teleport(playerPed, restoreCoords) end) end end) @@ -258,14 +275,14 @@ end CreateThread(function() while true do - Wait(0) + sleep = 1500 if isInShopMenu then + sleep = 0 DisableControlAction(0, 75, true) -- Disable exit vehicle DisableControlAction(27, 75, true) -- Disable exit vehicle - else - Wait(500) end + Wait(sleep) end end) @@ -278,7 +295,7 @@ function DeleteSpawnedVehicles() end function WaitForVehicleToLoad(modelHash) - modelHash = (type(modelHash) == "number" and modelHash or GetHashKey(modelHash)) + modelHash = (type(modelHash) == "number" and modelHash or joaat(modelHash)) if not HasModelLoaded(modelHash) then RequestModel(modelHash) diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/config.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/config.lua index e0da362e4..82582a2e0 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/config.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/config.lua @@ -130,4 +130,4 @@ Config.AuthorizedVehicles = { { model = "frogger2", price = 10000 }, }, }, -} +} \ No newline at end of file diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/fxmanifest.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/fxmanifest.lua index 966f53b59..92201e1a2 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/fxmanifest.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/fxmanifest.lua @@ -1,28 +1,28 @@ -fx_version("adamant") +fx_version 'adamant' +game 'gta5' +description 'Provides a way for players to RP as paramedics (heal/revive players)' +version '1.0.1' +legacyversion '1.9.1' +lua54 'yes' -game("gta5") +shared_scripts { + '@es_extended/imports.lua', + '@es_extended/locale.lua', + 'locales/*.lua', + 'config.lua' +} -description("BPT Ambulance Job") +server_scripts { + '@oxmysql/lib/MySQL.lua', + 'server/*.lua' +} -version("1.0.1") +client_scripts { + 'client/*.lua' +} -shared_script("@es_extended/imports.lua") - -server_scripts({ - "@oxmysql/lib/MySQL.lua", - "@es_extended/locale.lua", - "locales/*.lua", - "config.lua", - "server/*.lua", -}) - -client_scripts({ - "@es_extended/locale.lua", - "locales/*.lua", - "config.lua", - "client/*.lua", -}) - -dependencies({ - "es_extended", -}) +dependencies { + 'es_extended', + 'esx_skin', + 'esx_vehicleshop' +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/cs.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/cs.lua new file mode 100644 index 000000000..df112d741 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/cs.lua @@ -0,0 +1,84 @@ +Locales["cs"] = { + -- Cloakroom + ["cloakroom"] = "šatna", + ["ems_clothes_civil"] = "civilní oblečení", + ["ems_clothes_ems"] = "zdravotnické oblečení", + -- Vehicles + ["ambulance"] = "ambulance", + ["helicopter_prompt"] = "press [E] to access the Helicopter Actions.", + ["garage_prompt"] = "press [E] to access the Vehicle Actions.", + ["garage_title"] = "vehicle Actions", + ["garage_stored"] = "stored", + ["garage_notstored"] = "not in garage", + ["garage_storing"] = "we're attempting to remove the vehicle, make sure no players are around it.", + ["garage_has_stored"] = "the vehicle has been stored in your garage", + ["garage_has_notstored"] = "no nearby owned vehicles were found", + ["garage_notavailable"] = "your vehicle is not stored in the garage.", + ["garage_blocked"] = "there's no available spawn points!", + ["garage_empty"] = "you don't have any vehicles in your garage.", + ["garage_released"] = "your vehicle has been released from the garage.", + ["garage_store_nearby"] = "there is no nearby vehicles.", + ["garage_storeditem"] = "open garage", + ["garage_storeitem"] = "store vehicle in garage", + ["garage_buyitem"] = "vehicle shop", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "vehicle Shop", + ["vehicleshop_confirm"] = "do you want to buy this vehicle?", + ["vehicleshop_bought"] = "you have bought %s for $%s", + ["vehicleshop_money"] = "you cannot afford that vehicle", + ["vehicleshop_awaiting_model"] = "the vehicle is currently DOWNLOADING & LOADING please wait", + ["confirm_no"] = "no", + ["confirm_yes"] = "yes", + -- Action Menu + ["revive_inprogress"] = "probíhá oživení!", + ["revive_complete"] = "oživili jste %s", + ["revive_complete_award"] = "oživili jste %s a dostali jste $%s!", + ["revive_fail_offline"] = "that player is no longer online", + ["heal_inprogress"] = "uzdravujete!", + ["heal_complete"] = "uzdravili jste %s", + ["no_players"] = "v okolí není žádný hráč!", + ["player_not_unconscious"] = "hráč není v bezvědomí!", + ["player_not_conscious"] = "hráč je v bezvědomí!", + -- Boss Menu + ["boss_actions"] = "akce šéfa", + -- Misc + ["invalid_amount"] = " ná částka", + ["actions_prompt"] = "press [E] access the Ambulance Actions.", + ["deposit_amount"] = "částka vkladu", + ["money_withdraw"] = "částka výběru", + ["fast_travel"] = "stiskněte [E] k rychlému odcestování.", + ["pharmacy_menu_title"] = "lékárna", + ["pharmacy_take"] = "vzít %s", + ["medikit"] = "lékarnička", + ["bandage"] = "obvaz", + ["max_item"] = "již nesete dostatek věcí.", + -- F6 Menu + ["ems_menu"] = "Zdravotnické menu", + ["ems_menu_title"] = "záchranka - Zdravotnické menu", + ["ems_menu_revive"] = "oživit hráče", + ["ems_menu_putincar"] = "naložit do vozidla", + ["ems_menu_small"] = "ošetřit malé zranění", + ["ems_menu_big"] = "ošetřit vážné zranění", + ["ems_menu_search"] = "pacient nebyl nalezen", + -- Phone + ["alert_ambulance"] = "zdravotnický poplach", + -- Death + ["respawn_available_in"] = "oživení dostupné za %s minut a %s sekund\n", + ["respawn_bleedout_in"] = "vykrvácíte za %s minut a %s sekund\n", + ["respawn_bleedout_prompt"] = "držte [E] pro respawn.", + ["respawn_now_fine"] = "držte [E] pro oživení za $%s", + ["respawn_bleedout_fine_msg"] = "zaplatili jste $%s za respawn.", + ["distress_send"] = "stiskněte [G] pro vyslání tísňového signálu", + ["distress_sent"] = "tísňový signál byl vyslán dostupným jednotkám!", + -- Revive + ["revive_help"] = "oživit hráče", + -- Item + ["used_medikit"] = "použili jste 1x lékarničku", + ["used_bandage"] = "použili jste 1x obvaz", + ["not_enough_medikit"] = "nemáte medikit.", + ["not_enough_bandage"] = "nemáte bandage.", + ["healed"] = "byli jste ošetřeni.", + -- Blips + ["blip_hospital"] = "nemocnice", + ["blip_dead"] = "unconscious player", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/de.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/de.lua new file mode 100644 index 000000000..a5440d61d --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/de.lua @@ -0,0 +1,85 @@ +Locales["de"] = { + -- Cloakroom + ["cloakroom"] = "Umkleide", + ["ems_clothes_civil"] = "Zivilklamotten", + ["ems_clothes_ems"] = "Rettungsdienst Uniform", + -- Vehicles + ["ambulance"] = "Rettungsdienst", + ["helicopter_prompt"] = "Drücke [E] um auf die Helikopter Aktionen zuzugreifen.", + ["garage_prompt"] = "Drücke [E] um auf die Fahrzeug Aktionen zuzugreifen.", + ["garage_title"] = "Fahrzeug Aktionen", + ["garage_stored"] = "Eingeparkt", + ["garage_notstored"] = "Nicht in der Garage", + ["garage_storing"] = "Das Fahrzeug wird eingeparkt! Passe auf das keine Person in der nähe ist.", + ["garage_has_stored"] = "Das Fahrzeug wurde eingeparkt", + ["garage_has_notstored"] = "Keine Fahrzeuge die dir gehören wurden in der Nähe gefunden!", + ["garage_notavailable"] = "Dein Fahrzeug ist in der Garage nicht eingeparkt.", + ["garage_blocked"] = "Es gibt keine verfügbaren ausparkpunkte", + ["garage_empty"] = "Du hast kein Fahrzeug in der Garage!", + ["garage_released"] = "Dein Fahrzeug wurde ausgeparkt.", + ["garage_store_nearby"] = "Es gibt keine Fahrzeuge in der nähe.", + ["garage_storeditem"] = "Garage Öffnen", + ["garage_storeitem"] = "Fahrzeug in der Garage Einparken", + ["garage_buyitem"] = "Fahrzeug Händler", + ["shop_item"] = "%s€", + ["vehicleshop_title"] = "Fahrzeug Händler", + ["vehicleshop_confirm"] = "Willst du dieses Fahrzeug kaufen?", + ["vehicleshop_bought"] = "Du kaufst %s für %s€", + ["vehicleshop_money"] = "Du kannst dir dieses Fahrzeug nicht leisten!", + ["vehicleshop_awaiting_model"] = "Das Fahrzeug Lädt... Warte bitte!", + ["confirm_no"] = "Nein", + ["confirm_yes"] = "Ja", + -- Action Menu + ["revive_inprogress"] = "Wiederbelebung wird durchgeführt!", + ["revive_complete"] = "Du belebst %s wieder", + ["revive_complete_award"] = "Du bekommst %s und verdienst %s€!", + ["revive_fail_offline"] = "Dieser Spieler ist nicht mehr Online!", + ["heal_inprogress"] = "Du heilst jemanden!", + ["heal_complete"] = "Du hast %s geheilt", + ["no_players"] = "Keine Person in der nähe!", + ["player_not_unconscious"] = "Dieser Spieler ist nicht bewusstlos!", + ["player_not_conscious"] = "Dieser Spieler ist nicht bei bewusstsein!", + -- Boss Menu + ["boss_actions"] = "Boss Aktionen", + -- Misc + ["invalid_amount"] = "Ungültige Anzahl", + ["actions_prompt"] = "Drücke [E] Um auf die Rettungsdienst Aktionen zuzugreifen!", + ["deposit_amount"] = "Anzahl einzahlen", + ["money_withdraw"] = "Anzahl auszahlen", + ["fast_travel"] = "Drücke [E] zum Schnellreisen.", + ["pharmacy_menu_title"] = "Apotheke", + ["pharmacy_take"] = 'Nehmen %s', + ["medikit"] = "Verbandskasten", + ["bandage"] = "Verband", + ["max_item"] = "Du trägst bereits genug.", + ["unconscious_found"] = "[LEITSTELLE]: Uns wurde eine Bewusstlose Person gemeldet", + -- F6 Menu + ["ems_menu"] = "Rettungsdienst Menü", + ["ems_menu_title"] = "Rettungsdienst - Menü", + ["ems_menu_revive"] = "Person wiederbeleben", + ["ems_menu_putincar"] = "In das Fahrzeug setzen", + ["ems_menu_small"] = "Kleine Wunden heilen", + ["ems_menu_big"] = "Starke Verletzungen behandeln", + ["ems_menu_search"] = "Patient nicht gefunden!", + -- Phone + ["alert_ambulance"] = "Rettungsdienst Alamieren", + -- Death + ["respawn_available_in"] = "Respawn verfügbar in %s Minuten und %s Sekunden", + ["respawn_bleedout_in"] = "Du blutest aus in %s Minuten und %s Sekunden", + ["respawn_bleedout_prompt"] = "Halte [E] zum respawnen", + ["respawn_bleedout_fine"] = "Halte [E] zum respawnen für %s€", + ["respawn_bleedout_fine_msg"] = "Du zahlst %s€ zum respawnen!", + ["distress_send"] = "Drücke [G] um den Rettungsdienst zu alamieren!", + ["distress_sent"] = "Notsignal wurde an alle verfügbaren einheiten gesendet!", + -- Revive + ["revive_help"] = "Person wiederbeleben", + -- Item + ["used_medikit"] = "Du nutzt 1x Verbandskasten", + ["used_bandage"] = "Du nutzt 1x Verband", + ["not_enough_medikit"] = "Du hast keinen Verbandskasten!", + ["not_enough_bandage"] = "Du hast keinen Verband!", + ["healed"] = "Du wurdest geheilt", + -- Blips + ["blip_hospital"] = "Krankenhaus", + ["blip_dead"] = "Sterbende Person", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/en.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/en.lua index e8fb85411..e03c839ac 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/en.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/en.lua @@ -1,85 +1,84 @@ Locales["en"] = { -- Cloakroom - ["cloakroom"] = "locker Room", - ["ems_clothes_civil"] = "civilian Clothes", + ["cloakroom"] = "Locker Room", + ["ems_clothes_civil"] = "Civilian Clothes", ["ems_clothes_ems"] = "EMS Clothes", -- Vehicles - ["ambulance"] = "ambulance", - ["helicopter_prompt"] = "press ~INPUT_CONTEXT~ to access the ~y~Helicopter Actions~s~.", - ["garage_prompt"] = "press ~INPUT_CONTEXT~ to access the ~y~Vehicle Actions~s~.", - ["garage_title"] = "vehicle Actions", - ["garage_stored"] = "stored", - ["garage_notstored"] = "not in garage", - ["garage_storing"] = "we're attempting to remove the vehicle, make sure no players are around it.", - ["garage_has_stored"] = "the vehicle has been stored in your garage", - ["garage_has_notstored"] = "no nearby owned vehicles were found", - ["garage_notavailable"] = "your vehicle is not stored in the garage.", - ["garage_blocked"] = "there's no available spawn points!", - ["garage_empty"] = "you dont have any vehicles in your garage.", - ["garage_released"] = "your vehicle has been released from the garage.", - ["garage_store_nearby"] = "there is no nearby vehicles.", - ["garage_storeditem"] = "open garage", - ["garage_storeitem"] = "store vehicle in garage", - ["garage_buyitem"] = "vehicle shop", + ["ambulance"] = "Ambulance", + ["helicopter_prompt"] = "Press [E] to access the Helicopter Actions.", + ["garage_prompt"] = "Press [E] to access the Vehicle Actions.", + ["garage_title"] = "Vehicle Actions", + ["garage_stored"] = "Stored", + ["garage_notstored"] = "Not in garage", + ["garage_storing"] = "We're attempting to remove the vehicle, make sure no players are around it.", + ["garage_has_stored"] = "The vehicle has been stored in your garage", + ["garage_has_notstored"] = "No nearby owned vehicles were found", + ["garage_notavailable"] = "Your vehicle is not stored in the garage.", + ["garage_blocked"] = "There's no available spawn points!", + ["garage_empty"] = "You don't have any vehicles in your garage.", + ["garage_released"] = "Your vehicle has been released from the garage.", + ["garage_store_nearby"] = "There is no nearby vehicles.", + ["garage_storeditem"] = "Open garage", + ["garage_storeitem"] = "Store vehicle in garage", + ["garage_buyitem"] = "Vehicle shop", ["shop_item"] = "$%s", - ["vehicleshop_title"] = "vehicle Shop", - ["vehicleshop_confirm"] = "do you want to buy this vehicle?", - ["vehicleshop_bought"] = "you have bought ~y~%s~s~ for ~g~$%s~s~", - ["vehicleshop_money"] = "you cannot afford that vehicle", - ["vehicleshop_awaiting_model"] = "the vehicle is currently ~g~DOWNLOADING & LOADING~s~ please wait", - ["confirm_no"] = "no", - ["confirm_yes"] = "yes", + ["vehicleshop_title"] = "Yehicle Shop", + ["vehicleshop_confirm"] = "Yo you want to buy this vehicle?", + ["vehicleshop_bought"] = "You have bought %s for $%s", + ["vehicleshop_money"] = "You cannot afford that vehicle", + ["vehicleshop_awaiting_model"] = "The vehicle is currently DOWNLOADING & LOADING please wait", + ["confirm_no"] = "No", + ["confirm_yes"] = "Yes", -- Action Menu - ["revive_inprogress"] = "a revive is in progress!", - ["revive_complete"] = "you have revived ~y~%s~s~", - ["revive_complete_award"] = "you have revived ~y~%s~s~ and earned ~g~$%s~s~!", - ["revive_fail_offline"] = "that player is no longer online", - ["heal_inprogress"] = "you are healing!", - ["heal_complete"] = "you have healed ~y~%s~s~", - ["no_players"] = "no players nearby", - ["player_not_unconscious"] = "that player is not unconscious!", - ["player_not_conscious"] = "that player is not conscious!", + ["revive_inprogress"] = "A revive is in progress!", + ["revive_complete"] = "You have revived %s", + ["revive_complete_award"] = "You have revived %s and earned $%s!", + ["revive_fail_offline"] = "That player is no longer online", + ["heal_inprogress"] = "You are healing!", + ["heal_complete"] = "You have healed %s", + ["no_players"] = "No players nearby", + ["player_not_unconscious"] = "That player is not unconscious!", + ["player_not_conscious"] = "That player is not conscious!", -- Boss Menu - ["boss_actions"] = "boss Actions", + ["boss_actions"] = "Boss Actions", -- Misc - ["invalid_amount"] = "~r~Invalid amount", - ["actions_prompt"] = "press ~INPUT_CONTEXT~ access the ~y~Ambulance Actions~s~.", - ["deposit_amount"] = "deposit Amount", - ["money_withdraw"] = "amount withdrawn", - ["fast_travel"] = "press ~INPUT_CONTEXT~ to fast travel.", - ["medikit"] = "medikit", - ["bandage"] = "bandage", + ["invalid_amount"] = "Invalid amount", + ["actions_prompt"] = "Press [E] access the Ambulance Actions.", + ["deposit_amount"] = "Deposit Amount", + ["money_withdraw"] = "Amount withdrawn", + ["fast_travel"] = "press [E] to fast travel.", + ["pharmacy_take"] = 'Take %s', + ["medikit"] = "Medikit", + ["bandage"] = "Bandage", ["max_item"] = "You are already carrying enough.", + ["unconscious_found"] = "[DISPATCH]: An Unconscious Person Has Been Reported", -- F6 Menu ["ems_menu"] = "EMS Menu", - ["ems_menu_title"] = "ambulance - EMS Menu", - ["ems_menu_revive"] = "revive Player", - ["ems_menu_putincar"] = "put in Vehicle", - ["ems_menu_small"] = "heal small wounds", - ["ems_menu_big"] = "treat serious injuries", - ["ems_menu_search"] = "patient not found", - -- billing - ["billing"] = "billing", - ["invoice_amount"] = "invoice amount", - ["no_players_near"] = "no players nearby", + ["ems_menu_title"] = "Ambulance - EMS Menu", + ["ems_menu_revive"] = "Revive Player", + ["ems_menu_putincar"] = "Put in Vehicle", + ["ems_menu_small"] = "Heal small wounds", + ["ems_menu_big"] = "Treat serious injuries", + ["ems_menu_search"] = "Patient not found", + -- Phone + ["alert_ambulance"] = "Alert Ambulance", -- Death - ["respawn_available_in"] = "respawn available in ~b~%s minutes %s seconds~s~", - ["respawn_bleedout_in"] = "you will bleed out in ~b~%s minutes %s seconds~s~\n", - ["respawn_bleedout_prompt"] = "hold [~b~E~s~] to respawn", - ["respawn_bleedout_fine"] = "hold [~b~E~s~] to respawn for ~g~$%s~s~", - ["respawn_bleedout_fine_msg"] = "you paid ~r~$%s~s~ to respawn.", - ["distress_send"] = "press [~b~G~s~] to send distress signal", - ["distress_sent"] = "distress signal has been sent to available units!", - ["combatlog_message"] = "you have been force-respawned because you've previously left the server when dead.", + ["respawn_available_in"] = "Respawn available in %s minutes %s seconds", + ["respawn_bleedout_in"] = "You will bleed out in %s minutes %s seconds\n", + ["respawn_bleedout_prompt"] = "Hold [E] to respawn", + ["respawn_bleedout_fine"] = "Hold [E] to respawn for $%s", + ["respawn_bleedout_fine_msg"] = "You paid $%s to respawn.", + ["distress_send"] = "Press [G] to send distress signal", + ["distress_sent"] = "Distress signal has been sent to available units!", -- Revive ["revive_help"] = "revive a player", -- Item - ["used_medikit"] = "You have used ~y~1x~s~ medikit", - ["used_bandage"] = "You have used ~y~1x~s~ bandage", - ["not_enough_medikit"] = "You do not have ~b~medikit~s~.", - ["not_enough_bandage"] = "You do not have ~b~bandage~s~.", - ["healed"] = "you have been treated.", + ["used_medikit"] = "You have used 1x medikit", + ["used_bandage"] = "You have used 1x bandage", + ["not_enough_medikit"] = "You do not have medikit.", + ["not_enough_bandage"] = "You do not have bandage.", + ["healed"] = "You have been treated.", -- Blips - ["blip_hospital"] = "hospital", - ["blip_dead"] = "unconscious player", + ["blip_hospital"] = "Hospital", + ["blip_dead"] = "Dying Player", } diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/es.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/es.lua new file mode 100644 index 000000000..f6449e553 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/es.lua @@ -0,0 +1,87 @@ +-- Traducción by https://github.com/ItsManueh + +Locales["es"] = { + -- Cloakroom + ["cloakroom"] = "Guardarropa", + ["ems_clothes_civil"] = "Camiseta", + ["ems_clothes_ems"] = "Equipo de ambulancia", + -- Vehicles + ["ambulance"] = "Ambulancia", + ["helicopter_prompt"] = "Presiona [E] para acceder al Acciones de helicópteros.", + ["garage_prompt"] = "Presiona [E] para acceder al Acciones de vehículos.", + ["garage_title"] = "Acciones de vehículos", + ["garage_stored"] = "Almacenado", + ["garage_notstored"] = "No en el garaje", + ["garage_storing"] = "Estamos intentando retirar el vehículo, asegúrese de que no haya jugadores a su alrededor.", + ["garage_has_stored"] = "El vehículo se ha guardado en su garaje", + ["garage_has_notstored"] = "No se encontraron vehículos de propiedad cercana", + ["garage_notavailable"] = "Su vehículo no está guardado en el garaje.", + ["garage_blocked"] = "¡No hay puntos de generación disponibles!", + ["garage_empty"] = "No tiene ningún vehículo en su garaje.", + ["garage_released"] = "Su vehículo ha sido sacado del garaje.", + ["garage_store_nearby"] = "No hay vehículos cercanos.", + ["garage_storeditem"] = "Garaje abierto", + ["garage_storeitem"] = "Almacenar vehículo en garaje", + ["garage_buyitem"] = "Tienda de vehículos", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "Tienda de vehículos", + ["vehicleshop_confirm"] = "¿Quieres comprar este vehículo?", + ["vehicleshop_bought"] = "Usted ha comprado %s para $%s", + ["vehicleshop_money"] = "No puedes pagar ese vehículo", + ["vehicleshop_awaiting_model"] = "El vehículo está actualmente DESCARGANDO & CARGANDO por favor espere.", + ["confirm_no"] = "No", + ["confirm_yes"] = "Si", + -- Action Menu + ["revive_inprogress"] = "Reanimación en curso", + ["revive_complete"] = "Has sido reanimado %s", + ["revive_complete_award"] = "Has sido reanimado %s, $%s", + ["revive_fail_offline"] = "Ese jugador ya no está en línea", + ["heal_inprogress"] = "!Te estas curando!", + ["heal_complete"] = "Te has curado %s", + ["no_players"] = "Ningún jugador cerca", + ["player_not_unconscious"] = "n'Estás inconsciente", + ["player_not_conscious"] = "¡Ese jugador no está consciente!", + -- Boss Menu + ["boss_actions"] = "Acciones del jefe", + -- Misc + ["invalid_amount"] = "Cantidad no válida", + ["actions_prompt"] = "Presiona [E] acceder al Acciones de ambulancia.", + ["deposit_amount"] = "Cantidad de fianza depositada", + ["money_withdraw"] = "Cantidad de fianza retirada", + ["fast_travel"] = "Presiona [E] para viajar rápido.", + ["pharmacy_menu_title"] = "Farmacia", + ["pharmacy_take"] = 'tomar %s', + ["medikit"] = "Kit médico", + ["bandage"] = "Vendas", + ["max_item"] = "Ya has ocupado el máximo número de items disponibles.", + -- F6 Menu + ["ems_menu"] = "ayuda ciudadana", + ["ems_menu_title"] = "ambulancia - Ayuda Ciudadana", + ["ems_menu_revive"] = "reanimar", + ["ems_menu_putincar"] = "meter en el vehículo", + ["ems_menu_small"] = "Curar pequeñas heridas", + ["ems_menu_big"] = "Tratar lesiones graves", + ["ems_menu_search"] = "Paciente no encontrado", + -- Phone + ["alert_ambulance"] = "Alerta de ambulancia", + -- Death + ["respawn_available_in"] = "Reaparición disponible en %s minutes %s seconds", + ["respawn_bleedout_in"] = "te desangrarás en %s minutes %s seconds\n", + ["respawn_bleedout_prompt"] = "Mantén [E] reaparecer", + ["respawn_bleedout_fine"] = "Mantén [E] para reaparecer $%s", + ["respawn_bleedout_fine_msg"] = "Tu pagaste $%s para reaparecer.", + ["distress_send"] = "Presiona [G] para enviar señal de socorro", + ["distress_sent"] = "Se ha enviado una señal de socorro a las unidades disponibles.", + + -- Revive + ["revive_help"] = "Revivir un jugador", + -- Item + ["used_medikit"] = "Has usado 1x Kit médico", + ["used_bandage"] = "Has usado 1x Vendas", + ["not_enough_medikit"] = "Usted no tiene kit médico.", + ["not_enough_bandage"] = "Usted no tiene vendas.", + ["healed"] = "Has sido tratado.", + -- Blips + ["blip_hospital"] = "Hospital", + ["blip_dead"] = "Jugador inconsciente", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/fi.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/fi.lua new file mode 100644 index 000000000..08c461bec --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/fi.lua @@ -0,0 +1,84 @@ +Locales["fi"] = { + -- Cloakroom + ["cloakroom"] = "Vaatelokero", + ["ems_clothes_civil"] = "Siviilikamppeet", + ["ems_clothes_ems"] = "Työkamppeet", + -- Vehicles + ["ambulance"] = "Ambulanssi", + ["helicopter_prompt"] = "Paina [E] päästäksesi helikopteritoimintoihin.", + ["garage_prompt"] = "Paina [E] päästäksesi ajoneuvotoimintoihin.", + ["garage_title"] = "Ajoneuvon toiminnot", + ["garage_stored"] = "Tallennettu", + ["garage_notstored"] = "Ei tallissa", + ["garage_storing"] = "Yritämme poistaa ajoneuvon, varmista, ettei sen lähellä ole pelaajia.", + ["garage_has_stored"] = "Ajoneuvoa on säilytetty tallissasi", + ["garage_has_notstored"] = "Lähistöltä ei löytynyt ajoneuvoja", + ["garage_notavailable"] = "Ajoneuvoasi ei säilytetä tallissa.", + ["garage_blocked"] = "Spawn-pisteitä ei ole saatavilla!", + ["garage_empty"] = "Sinulla ei ole ajoneuvoja tallissasi.", + ["garage_released"] = "Ajoneuvosi on vapautettu tallista.", + ["garage_store_nearby"] = "Lähellä ei ole ajoneuvoja.", + ["garage_storeditem"] = "Avaa talli", + ["garage_storeitem"] = "Säilytä ajoneuvoa tallissa", + ["garage_buyitem"] = "Ajoneuvokauppa", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "Ajoneuvokauppa", + ["vehicleshop_confirm"] = "Haluatko ostaa tämän ajoneuvon?", + ["vehicleshop_bought"] = "Olet ostanut %s hintaan $%s", + ["vehicleshop_money"] = "Sinulla ei ole varaa siihen autoon", + ["vehicleshop_awaiting_model"] = "Ajoneuvoa ladataan, odota", + ["confirm_no"] = "Ei", + ["confirm_yes"] = "Kyllä", + -- Action Menu + ["revive_inprogress"] = "Elvytys on menossa!", + ["revive_complete"] = "Sinä elvytit henkilön %s", + ["revive_complete_award"] = "Sinä elvytit henkilön %s ja tienasit $%s!", + ["revive_fail_offline"] = "Pelaaja ei ole enää online-tilassa", + ["heal_inprogress"] = "Elvytetään!", + ["heal_complete"] = "Sinä paransit henkilön %s", + ["no_players"] = "Ei pelaajia lähettyvillä", + ["player_not_unconscious"] = "Tämä pelaaja ei ole tajuton!", + ["player_not_conscious"] = "Tämä pelaaja ei ole tajuissaan!", + -- Boss Menu + ["boss_actions"] = "Pomovalikko", + -- Misc + ["invalid_amount"] = "Viallinen summa", + ["actions_prompt"] = "Paina [E] päästäksesi Ambulanssitoimintoihin.", + ["deposit_amount"] = "Talletettava summa", + ["money_withdraw"] = "Nostettava summa", + ["fast_travel"] = "Paina [E] liikkuaksesi nopeasti kerrosten välillä", + ["pharmacy_menu_title"] = "Lääkekaappi", + ["pharmacy_take"] = 'Ota %s', + ["medikit"] = "Ensiapupakkauksia", + ["bandage"] = "Sideharsoja", + ["max_item"] = "Sinulla on jo tarpeeksi mukana", + -- F6 Menu + ["ems_menu"] = "Ensihoito menu", + ["ems_menu_title"] = "Ensihoito - Siviilin kanssakäyminen", + ["ems_menu_revive"] = "Elvytä", + ["ems_menu_putincar"] = "Laita ajoneuvoon", + ["ems_menu_small"] = "Hoida pieniä haavoja", + ["ems_menu_big"] = "Hoida isoja haavoja", + ["ems_menu_search"] = "Potilasta ei löydy", + -- Phone + ["alert_ambulance"] = "Hälyytys Ensihoidolle", + -- Death + ["respawn_available_in"] = "Uudelleen syntyminen mahdolista %s minuutissa %s sekunnissa", + ["respawn_bleedout_in"] = "Vuodat kuiviin %s minuutissa %s sekunnissa\n", + ["respawn_bleedout_prompt"] = "Pidä [E] painettuna syntyäksesi uudelleen", + ["respawn_bleedout_fine"] = "Pidä [E] painettuna syntyäksesi uudelleen hintaan $%s", + ["respawn_bleedout_fine_msg"] = "Maksoit $%s uudelleensyntymisestä.", + ["distress_send"] = "Paina [G] lähettääksesi hätäsignaali", + ["distress_sent"] = "hätäviesti on lähetetty vapaille yksiköille!", + -- Revive + ["revive_help"] = "Elvytä pelaaja", + -- Item + ["used_medikit"] = "Sinä käytit ensiapupakkauksen", + ["used_bandage"] = "Sinä käytit sideharsoja", + ["not_enough_medikit"] = "Ei tarpeeksi ensiapupakkauksia.", + ["not_enough_bandage"] = "Ei tarpeeksi sideharsoja.", + ["healed"] = "SinuaT parannettiin", + -- Blips + ["blip_hospital"] = "Sairaala", + ["blip_dead"] = "Tajuton henkilö", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/fr.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/fr.lua new file mode 100644 index 000000000..5e5d907e1 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/fr.lua @@ -0,0 +1,85 @@ +Locales["fr"] = { + -- Cloakroom + ["cloakroom"] = "vestiaire", + ["ems_clothes_civil"] = "tenue Civil", + ["ems_clothes_ems"] = "tenue Ambulancier", + -- Vehicles + ["ambulance"] = "ambulance", + ["helicopter_prompt"] = "appuyez sur [E] pour accéder aux Actions de l'hélicoptère.", + ["garage_prompt"] = "appuyez sur [E] pour accéder aux Actions des véhciules.", + ["garage_title"] = "actions véhicules", + ["garage_stored"] = "rangé", + ["garage_notstored"] = "en dehors du garage", + ["garage_storing"] = "tentative de suppression du véhicule, assurez-vous que personne ne soit autour.", + ["garage_has_stored"] = "le véhicule a bien été rangé dans le garage", + ["garage_has_notstored"] = "aucun véhicule dans le garage", + ["garage_notavailable"] = "votre véhicule n'est pas rangé dans le garage.", + ["garage_blocked"] = "la sortie du garage est obstruée!", + ["garage_empty"] = "vous n'avez aucun véhicule dans le garage.", + ["garage_released"] = "votre véhicule a été sorti.", + ["garage_store_nearby"] = "aucun véhicule a proximité.", + ["garage_storeditem"] = "ouvrir le garage", + ["garage_storeitem"] = "ranger le véhicule", + ["garage_buyitem"] = "magasin véhicule", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "magasin véhicule", + ["vehicleshop_confirm"] = "voulez-vous acheter ce véhicule?", + ["vehicleshop_bought"] = "vous avez acheté %s pour $%s", + ["vehicleshop_money"] = "vous ne pouvez pas acheter ce véhicule", + ["vehicleshop_awaiting_model"] = "le véhicule est actuellement en PRÉPARATION veuillez patienter", + ["confirm_no"] = "non", + ["confirm_yes"] = "oui", + -- Action Menu + ["revive_inprogress"] = "réanimation en cours", + ["revive_complete"] = "vous avez réanimé %s", + ["revive_complete_award"] = "vous avez réanimé %s, $%s", + ["revive_fail_offline"] = "ce joueur n'est plus en ligne", + ["heal_inprogress"] = "vous soignez...", + ["heal_complete"] = "vous avez soigné %s", + ["no_players"] = "aucun joueur à proximité", + ["player_not_unconscious"] = "n'est pas inconscient", + ["player_not_conscious"] = "Cette personne est inconsciente!", + -- Boss Menu + ["boss_actions"] = "action Patron", + -- Misc + ["invalid_amount"] = "quantité invalide", + ["actions_prompt"] = "appuyez sur [E] accédez aux Actions d'Ambulance.", + ["deposit_amount"] = "montant du dépôt", + ["money_withdraw"] = "montant du retrait", + ["fast_travel"] = "appuyez sur [E] pour vous déplacer rapidement.", + ["pharmacy_menu_title"] = "Pharmacie", + ["pharmacy_take"] = 'prendre %s', + ["medikit"] = "kit de soin", + ["bandage"] = "bandage", + ["max_item"] = "vous en portez déjà assez sur vous.", + ["unconscious_found"] = "[DISPATCH]: Une personne inconsciente a été signalée", + -- F6 Menu + ["ems_menu"] = "interaction citoyen", + ["ems_menu_title"] = "ambulance - Interactions Citoyen", + ["ems_menu_revive"] = "réanimer", + ["ems_menu_putincar"] = "mettre dans véhicule", + ["ems_menu_small"] = "soigner petites blessures", + ["ems_menu_big"] = "soigner blessures graves", + ["ems_menu_search"] = "patient introuvable", + -- Phone + ["alert_ambulance"] = "alerte Ambulance", + -- Death + ["respawn_available_in"] = "réanimation possible dans %s minutes %s secondes", + ["respawn_bleedout_in"] = "vous allez souffrir d'une hémorragie dans %s minutes %s secondes\n", + ["respawn_bleedout_prompt"] = "maintenez [E] pour être réanimé", + ["respawn_bleedout_fine"] = "maintenez [E] pour être réanimé pour $%s", + ["respawn_bleedout_fine_msg"] = "vous avez payé $%s pour être réanimer.", + ["distress_send"] = "appuyez sur [G] pour envoyer un signal de détresse", + ["distress_sent"] = "un signal a été envoyé à toutes les unités disponibles!", + -- Revive + ["revive_help"] = "relancer un joueur", + -- Item + ["used_medikit"] = "vous avez utilisé 1x kit de soin", + ["used_bandage"] = "vous avez utilisé 1x bandage", + ["not_enough_medikit"] = "vous n'avez pas de kit de soin.", + ["not_enough_bandage"] = "vous n'avez pas de bandage.", + ["healed"] = "vous avez été soigné.", + -- Blips + ["blip_hospital"] = "hôpital", + ["blip_dead"] = "joueur inconscient", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/hu.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/hu.lua new file mode 100644 index 000000000..12a9d981d --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/hu.lua @@ -0,0 +1,84 @@ +Locales["hu"] = { + -- Öltöző + ["cloakroom"] = "Öltöző", + ["ems_clothes_civil"] = "Civil ruházat", + ["ems_clothes_ems"] = "Munkaruha", + -- Jármű + ["ambulance"] = "Mentőautó", + ["helicopter_prompt"] = "Nyomd meg az [E] gombot a helikopter listához.", + ["garage_prompt"] = "Nyomd meg az [E] gombot a kocsi listához.", + ["garage_title"] = "Autó funkciók", + ["garage_stored"] = "Garázsba", + ["garage_notstored"] = "Ismeretlen helyen", + ["garage_storing"] = "Próbáljuk betteni a kocsid a garázsodba, de előtte nézz körül, hogy biztos nincs melletted senki", + ["garage_has_stored"] = "Sikeresen tároltad a garázsba!", + ["garage_has_notstored"] = "Nincs a közeledben semmi!", + ["garage_notavailable"] = "Nem tárolhatod a garázsban!", + ["garage_blocked"] = "Valami gátolja a kocsi lehívását!", + ["garage_empty"] = "Nem teheted a garázsba!", + ["garage_released"] = "Sikeresen kivetted!", + ["garage_store_nearby"] = "Nincs a közeledben semmi!", + ["garage_storeditem"] = "Garázs megnyitása", + ["garage_storeitem"] = "Kocsi berakása a garázsba", + ["garage_buyitem"] = "Kocsi igénylés", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "Autókereskedés", + ["vehicleshop_confirm"] = "Megszeretnéd venni ezt a járművet?", + ["vehicleshop_bought"] = "Sikeresen igényeltél egy %s enért: ", + ["vehicleshop_money"] = "Ezt most nem tudod megtenni!", + ["vehicleshop_awaiting_model"] = "Betöltés..", + ["confirm_no"] = "Vissza", + ["confirm_yes"] = "Igényel", + -- Action Menu + ["revive_inprogress"] = "Elkezdted az újraélesztést!", + ["revive_complete"] = "Újraélesztetted: %s", + ["revive_complete_award"] = "Újraélesztetted: %s és kaptál: $%s!", + ["revive_fail_offline"] = "A játékos nem elérhető", + ["heal_inprogress"] = "Elkezdted a gyógyítást!", + ["heal_complete"] = "Meggyógyítottad: %s", + ["no_players"] = "Nincs a közeledben senki!", + ["player_not_unconscious"] = "A játékos öntudatánál van!", + ["player_not_conscious"] = "A játékos nincs öntudatánál!", + -- Boss Menu + ["boss_actions"] = "Boss menü", + -- Misc + ["invalid_amount"] = "Érvénytelen mennyiség", + ["actions_prompt"] = "Nyomd meg az [E] gombot a panel megnyitásához.", + ["deposit_amount"] = "Összeg betétele", + ["money_withdraw"] = "Összeg kivétele", + ["fast_travel"] = "Nyomd meg az [E] gombot a lift használatához", + ["pharmacy_menu_title"] = "Kellékek", + ["pharmacy_take"] = 'Kivétel: %s', + ["medikit"] = "Elsősegély készlet", + ["bandage"] = "Kötszer", + ["max_item"] = "Nem fér már el nálad!", + -- F6 Menu + ["ems_menu"] = "EMS menü", + ["ems_menu_title"] = "EMS Menu", + ["ems_menu_revive"] = "Újraélesztés", + ["ems_menu_putincar"] = "Jármübe rakás", + ["ems_menu_small"] = "Kis sebek meggyógyítása", + ["ems_menu_big"] = "Súlyos sérülések kezelése", + ["ems_menu_search"] = "Civil megkeresése", + -- Phone + ["alert_ambulance"] = "EMS értesités", + -- Death + ["respawn_available_in"] = "Újraéledés: %s perc %s másodperc múlva...", + ["respawn_bleedout_in"] = "Elfogsz vérezni %s perc %s másodperc múlva...\n", + ["respawn_bleedout_prompt"] = "Nyomd meg az [E] gombot az újraéledéshez", + ["respawn_bleedout_fine"] = "Újraéledéshez: [E]", + ["respawn_bleedout_fine_msg"] = "Ennyit fizettél, hogy újraéledj", + ["distress_send"] = "Nyomd meg a [G] gombot a segítségkéréshez", + ["distress_sent"] = "Egy civil értesítette az illetékes szervezetet!", + -- Revive + ["revive_help"] = "újraéleszteni egy játékos", + -- Item + ["used_medikit"] = "Elhasználtál 1x elsősegély dobozt.", + ["used_bandage"] = "Elhasználtál 1x kötszert.", + ["not_enough_medikit"] = "Nincs nálad: Defibrillátor.", + ["not_enough_bandage"] = "Nincs nálad: Kötszer.", + ["healed"] = "Meggyógyítottak!", + -- Blips + ["blip_hospital"] = "Kórház", + ["blip_dead"] = "Eszméletlen játékos", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/id.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/id.lua new file mode 100644 index 000000000..d5bf8c565 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/id.lua @@ -0,0 +1,85 @@ +Locales["id"] = { + -- Cloakroom + ["cloakroom"] = "Ruang Loker", + ["ems_clothes_civil"] = "Pakaian Warga Sipil", + ["ems_clothes_ems"] = "Pakaian EMS", + -- Vehicles + ["ambulance"] = "Ambulans", + ["helicopter_prompt"] = "Tekan [E] untuk mengakses Aksi Helikopter.", + ["garage_prompt"] = "Tekan [E] untuk mengakses Aksi Kendaraan.", + ["garage_title"] = "Aksi Kendaraan", + ["garage_stored"] = "Disimpan", + ["garage_notstored"] = "Tidak dalam garasi", + ["garage_storing"] = "Kami mencoba menghilangkan kendaraan, pastikan tidak ada player di sekitarnya.", + ["garage_has_stored"] = "Kendaraan telah tersimpan di garasi Anda", + ["garage_has_notstored"] = "Kendaraan yang dimiliki disekitar tidak ditemukan", + ["garage_notavailable"] = "Kendaraan Anda tidak tersimpan di dalam garasi.", + ["garage_blocked"] = "Tidak tersedia spawn points untuk kendaraan!", + ["garage_empty"] = "Anda tidak memiliki kendaraan apa pun di garasi Anda.", + ["garage_released"] = "Kendaraan Anda telah dikeluarkan dari garasi.", + ["garage_store_nearby"] = "Tidak ada kendaraan di sekitar.", + ["garage_storeditem"] = "Buka garasi", + ["garage_storeitem"] = "Simpan kendaraan dalam garasi", + ["garage_buyitem"] = "Toko kendaraan", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "Toko kendaraan", + ["vehicleshop_confirm"] = "Apakah Anda ingin membeli kendaraan ini?", + ["vehicleshop_bought"] = "Anda telah membeli %s seharga $%s", + ["vehicleshop_money"] = "Anda tidak dapat membeli kendaraan tersebut", + ["vehicleshop_awaiting_model"] = "Kendaraan sedang dalam proses DOWNLOADING & LOADING mohon tunggu", + ["confirm_no"] = "Tidak", + ["confirm_yes"] = "Ya", + -- Action Menu + ["revive_inprogress"] = "Penyadaran sedang dalam proses!", + ["revive_complete"] = "Anda telah disadarkan %s", + ["revive_complete_award"] = "Anda telah disembuhkan %s dan mendapat $%s!", + ["revive_fail_offline"] = "Player sudah tidak online", + ["heal_inprogress"] = "Anda sedang disembuhkan!", + ["heal_complete"] = "Anda telah disembuhkan %s", + ["no_players"] = "No players nearby", + ["player_not_unconscious"] = "Player tersebut masih sadar!", + ["player_not_conscious"] = "Player tersebut tidak sadar!", + -- Boss Menu + ["boss_actions"] = "Aksi Bos", + -- Misc + ["invalid_amount"] = "Jumlah salah", + ["actions_prompt"] = "Tekan [E] untuk mengakses aksi Ambulans.", + ["deposit_amount"] = "Jumlah Deposit", + ["money_withdraw"] = "Jumlah Penarikan", + ["fast_travel"] = "Tekan [E] untuk fast travel.", + ["pharmacy_menu_title"] = "Farmasi", + ["pharmacy_take"] = 'Ambil %s', + ["medikit"] = "Obat-obatan", + ["bandage"] = "Perban", + ["max_item"] = "Anda sudah cukup membawa.", + ["unconscious_found"] = "[DISPATCH]: Seorang Tidak Sadarkan Diri Telah Dilaporkan", + -- F6 Menu + ["ems_menu"] = "Menu EMS", + ["ems_menu_title"] = "Ambulans - Menu EMS", + ["ems_menu_revive"] = "Sadarkan Player", + ["ems_menu_putincar"] = "Masukkan dalam kendaraan", + ["ems_menu_small"] = "Atasi luka kecil", + ["ems_menu_big"] = "Atasi cedera serius", + ["ems_menu_search"] = "Pasien tidak ditemukan", + -- Phone + ["alert_ambulance"] = "Kabari Ambulans", + -- Death + ["respawn_available_in"] = "Respawn tersedia dalam %s menit %s detik", + ["respawn_bleedout_in"] = "Anda akan pendarahan dalam %s menit %s detik\n", + ["respawn_bleedout_prompt"] = "Tahan [E] untuk respawn", + ["respawn_bleedout_fine"] = "Tahan [E] untuk respawn dengan bayar $%s", + ["respawn_bleedout_fine_msg"] = "Anda membayar $%s untuk respawn.", + ["distress_send"] = "Tekan [G] untuk mengirim sinyal darurat", + ["distress_sent"] = "Sinyal darurat telah terkirim ke unit yang tersedia!", + -- Revive + ["revive_help"] = "sadarkan player", + -- Item + ["used_medikit"] = "Anda telah memakai 1x obat-obatan", + ["used_bandage"] = "Anda telah memakai 1x perban", + ["not_enough_medikit"] = "Anda tidak memiliki obat-obatan.", + ["not_enough_bandage"] = "Anda tidak memiliki perban.", + ["healed"] = "Anda telah dirawat.", + -- Blips + ["blip_hospital"] = "Rumah Sakit", + ["blip_dead"] = "Player Sekarat", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/it.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/it.lua index a3f462f48..46e25dba6 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/it.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/it.lua @@ -1,85 +1,89 @@ Locales["it"] = { - -- Cloakroom + -- Spogliatoio ["cloakroom"] = "Spogliatoio", - ["ems_clothes_civil"] = "Abiti civili", + ["ems_clothes_civil"] = "Vestiti Civili", ["ems_clothes_ems"] = "Vestiti EMS", - -- Vehicles + -- Veicoli ["ambulance"] = "Ambulanza", - ["helicopter_prompt"] = "Premi ~INPUT_CONTEXT~ per accedere al ~y~ menu elicottero~s~.", - ["garage_prompt"] = "Premi ~INPUT_CONTEXT~ per accedere al ~y~ menu veicoli~s~.", - ["garage_title"] = "Azioni del veicolo", - ["garage_stored"] = "Depositato", + ["helicopter_prompt"] = "Premi [E] per accedere al garage dell'Elicottero.", + ["garage_prompt"] = "Premi [E] per accedere al garage del Veicolo.", + ["garage_title"] = "Garage del Veicolo", + ["garage_stored"] = "In Garage", ["garage_notstored"] = "Non in garage", - ["garage_storing"] = "Stiamo tentando di rimuovere il veicolo, assicurati che non ci siano giocatori nelle vicinanze.", - ["garage_has_stored"] = "Il veicolo è stato depositato nel garage", - ["garage_has_notstored"] = "Non sono stati rinvenuti veicoli di proprietà nelle vicinanze", - ["garage_notavailable"] = "Il tuo veicolo non è nel garage.", + ["garage_storing"] = "Stiamo cercando di rimuovere il veicolo, assicurati che nessun giocatore sia intorno ad esso.", + ["garage_has_stored"] = "Il veicolo è stato messo in garage", + ["garage_has_notstored"] = "Nessun veicolo posseduto nelle vicinanze", + ["garage_notavailable"] = "Il tuo veicolo non è in garage.", ["garage_blocked"] = "Non ci sono punti di spawn disponibili!", ["garage_empty"] = "Non hai veicoli nel tuo garage.", - ["garage_released"] = "Il tuo veicolo è stato prelevato dal garage.", + ["garage_released"] = "Il tuo veicolo è stato rilasciato dal garage.", ["garage_store_nearby"] = "Non ci sono veicoli nelle vicinanze.", - ["garage_storeditem"] = "Apri il garage", - ["garage_storeitem"] = "Depositare il veicolo in garage", + ["garage_storeditem"] = "Apri garage", + ["garage_storeitem"] = "Metti veicolo in garage", ["garage_buyitem"] = "Negozio di veicoli", ["shop_item"] = "$%s", - ["vehicleshop_title"] = "Negozio di veicoli", - ["vehicleshop_confirm"] = "Vuoi comprare questo veicolo??", - ["vehicleshop_bought"] = "Hai comprato ~y~%s~s~ per ~g~$%s~s~", - ["vehicleshop_money"] = "Non puoi permetterti questo veicolo", - ["vehicleshop_awaiting_model"] = "Il veicolo è attualmente ~g~DOWNLOADING & LOADING~s~ attendi", + ["vehicleshop_title"] = "Negozio di Veicoli", + ["vehicleshop_confirm"] = "Vuoi comprare questo veicolo?", + ["vehicleshop_bought"] = "Hai comprato %s per $%s", + ["vehicleshop_money"] = "Non puoi permetterti quel veicolo", + ["vehicleshop_awaiting_model"] = "Il veicolo è attualmente in fase di DOWNLOAD & CARICAMENTO, attendi", ["confirm_no"] = "No", - ["confirm_yes"] = "Si", - -- Action Menu - ["revive_inprogress"] = "Rianimazione in corso!", - ["revive_complete"] = "Ti sei rianimato ~y~%s~s~", - ["revive_complete_award"] = "Ti sei rianimato ~y~%s~s~ e guadagnato ~g~$%s~s~!", - ["revive_fail_offline"] = "Il cittadino non è più in città", - ["heal_inprogress"] = "Stai guarendo!", - ["heal_complete"] = "Sei guarito ~y~%s~s~", - ["no_players"] = "Nessun cittadino nelle vicinanze", - ["player_not_unconscious"] = "Cittadino non incosciente!", - ["player_not_conscious"] = "Cittadino non cosciente!", - -- Boss Menu - ["boss_actions"] = "Menu Direttore", - -- Misc - ["invalid_amount"] = "~r~Importo non valido", - ["actions_prompt"] = "Premi ~INPUT_CONTEXT~ per accedere al ~y~ menu EMS~s~.", - ["deposit_amount"] = "Importo depositato", + ["confirm_yes"] = "Sì", + -- Menu Azioni + ["revive_inprogress"] = "È in corso un tentativo di rianimazione!", + ["revive_complete"] = "Hai rianimato %s", + ["revive_complete_award"] = "Hai rianimato %s e guadagnato $%s!", + ["revive_fail_offline"] = "Il giocatore non è più online", + ["heal_inprogress"] = "Stai curando!", + ["heal_complete"] = "Hai curato %s", + ["no_players"] = "Nessun giocatore nelle vicinanze", + ["player_not_unconscious"] = "Il giocatore non è incosciente!", + ["player_not_conscious"] = "Il giocatore non è cosciente!", + -- Menu Boss + ["boss_actions"] = "Azioni del Boss", + -- Varie + ["invalid_amount"] = "Importo non valido", + ["actions_prompt"] = "Premi [E] per accedere alle opzioni dell'Ambulanza.", + ["deposit_amount"] = "Importo del deposito", ["money_withdraw"] = "Importo ritirato", - ["fast_travel"] = "Premi ~INPUT_CONTEXT~ per viaggiare velocemente.", - ["medikit"] = "medikit", - ["bandage"] = "bandage", - ["max_item"] = "Ne stai già portando abbastanza.", - -- F6 Menu - ["ems_menu"] = "EMS Menu", - ["ems_menu_title"] = "Ambulanza - EMS Menu", - ["ems_menu_revive"] = "Rianima cittadino", - ["ems_menu_putincar"] = "Fai salire sul veicolo", - ["ems_menu_small"] = "Curare piccole ferite", - ["ems_menu_big"] = "Curare lesioni gravi", + ["fast_travel"] = "premi [E] per viaggiare velocemente.", + ["pharmacy_menu_title"] = "Farmacia", + ["pharmacy_take"] = 'Prendi %s', + ["medikit"] = "Medikit", + ["bandage"] = "Benda", + ["max_item"] = "Hai già abbastanza oggetti.", + ["unconscious_found"] = "[CENTRALINO]: È stata segnalata una persona priva di sensi", + -- Menu F6 + ["ems_menu"] = "Menu EMS", + ["ems_menu_title"] = "Ambulanza - Menu EMS", + ["ems_menu_revive"] = "Rianima Giocatore", + ["ems_menu_putincar"] = "Metti in Veicolo", + ["ems_menu_small"] = "Cura ferite leggere", + ["ems_menu_big"] = "Tratta ferite gravi", ["ems_menu_search"] = "Paziente non trovato", + -- Telefono + ["alert_ambulance"] = "Chiedi l'ambulanza", + -- Morte + ["respawn_available_in"] = "Puoi rinascere tra %s minuti %s secondi", + ["respawn_bleedout_in"] = "Sanguinerai a morte tra %s minuti %s secondi\n", + ["respawn_bleedout_prompt"] = "Tieni premuto [E] per rinascere", + ["respawn_bleedout_fine"] = "Tieni premuto [E] per rinascere per $%s", + ["respawn_bleedout_fine_msg"] = "Hai pagato $%s per rinascere.", + ["distress_send"] = "Premi [G] per inviare un segnale di emergenza", + ["distress_sent"] = "Il segnale di emergenza è stato inviato alle unità disponibili!", + -- Rianimazione + ["revive_help"] = "rianima un giocatore", + -- Oggetto + ["used_medikit"] = "Hai usato 1x medikit", + ["used_bandage"] = "Hai usato 1x benda", + ["not_enough_medikit"] = "Non hai il medikit.", + ["not_enough_bandage"] = "Non hai la benda.", + ["healed"] = "Sei stato curato.", + -- Blip + ["blip_hospital"] = "Ospedale", + ["blip_dead"] = "Giocatore morente", -- billing ["billing"] = "Fattura", ["invoice_amount"] = "Importo della fattura", ["no_players_near"] = "Nessun cittadino nelle vicinanze", - -- Death - ["respawn_available_in"] = "Rianimazione disponibile ~b~%s minuti %s secondi~s~", - ["respawn_bleedout_in"] = "Sanguinerai dentro ~b~%s minuti %s secondi~s~\n", - ["respawn_bleedout_prompt"] = "Premi [~b~E~s~] per rianimarti", - ["respawn_bleedout_fine"] = "Premi [~b~E~s~] per rianimarti ~g~$%s~s~", - ["respawn_bleedout_fine_msg"] = "Hai pagato ~r~$%s~s~ per rianimarti.", - ["distress_send"] = "Premi [~b~G~s~] per inviare un segnale di soccorso", - ["distress_sent"] = "Il segnale di soccorso è stato inviato alle unità disponibili!", - ["combatlog_message"] = "Sei stato rianimato forzatamente perché in precedenza hai lasciato la città mentre eri morto.", - -- Revive - ["revive_help"] = "Rianimare un cittadino", - -- Item - ["used_medikit"] = "Hai usato ~y~1x~s~ medikit", - ["used_bandage"] = "Hai usato ~y~1x~s~ bandage", - ["not_enough_medikit"] = "Non hai ~b~medikit~s~.", - ["not_enough_bandage"] = "Non hai ~b~bende~s~.", - ["healed"] = "Sei stato curato.", - -- Blips - ["blip_hospital"] = "Ospedale", - ["blip_dead"] = "Cittadino incosciente", } diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/nl.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/nl.lua new file mode 100644 index 000000000..9ea3c278d --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/nl.lua @@ -0,0 +1,85 @@ +Locales["nl"] = { + -- Cloakroom + ["cloakroom"] = "Kleedkamer", + ["ems_clothes_civil"] = "Burgerkleding", + ["ems_clothes_ems"] = "Ambulance Kleding", + -- Vehicles + ["ambulance"] = "Ambulance", + ["helicopter_prompt"] = "Druk op [E] om de Lifeliners te beheren.", + ["garage_prompt"] = "Druk op [E] om de Garage te openen.", + ["garage_title"] = "Garage", + ["garage_stored"] = "In Garage", + ["garage_notstored"] = "Niet In Garage", + ["garage_storing"] = "We proberen je voertuig op te bergen, zorg dat er niemand in de buurt is.", + ["garage_has_stored"] = "Je voertuig is in de garage gezet", + ["garage_has_notstored"] = "Er zijn geen voertuigen in de buurt gevonden die van jou zijn", + ["garage_notavailable"] = "Je voertuig staat niet in de garage.", + ["garage_blocked"] = "Er is geen spawnplek beschikbaar!", + ["garage_empty"] = "Er staat geen voertuig in je garage.", + ["garage_released"] = "Je voertuig is uit de garage gehaald.", + ["garage_store_nearby"] = "Er zijn geen voertuigen in de buurt.", + ["garage_storeditem"] = "Open garage", + ["garage_storeitem"] = "Zet voertuig in de garage", + ["garage_buyitem"] = "Voertuigwinkel", + ["shop_item"] = "€%s", + ["vehicleshop_title"] = "Voertuigwinkel", + ["vehicleshop_confirm"] = "Wil je dit voertuig kopen?", + ["vehicleshop_bought"] = "Je hebt een %s gekocht voor €%s", + ["vehicleshop_money"] = "Je kan dit voertuig niet betalen", + ["vehicleshop_awaiting_model"] = "Het voertuig is aan het DOWNLOADEN & LADEN, even geduld", + ["confirm_no"] = "Nee", + ["confirm_yes"] = "Ja", + -- Action Menu + ["revive_inprogress"] = "Reanimatie is in gang gezet!", + ["revive_complete"] = "Je hebt %s gereanimeerd", + ["revive_complete_award"] = "Je hebt %s gereanimeerd en €%s verdient!", + ["revive_fail_offline"] = "Deze speler is niet langer online", + ["heal_inprogress"] = "Je wordt genezen!", + ["heal_complete"] = "Je hebt %s genezen", + ["no_players"] = "Geen spelers in de buurt", + ["player_not_unconscious"] = "Deze persoon is niet bewusteloos!", + ["player_not_conscious"] = "Deze persoon is bewusteloos!", + -- Boss Menu + ["boss_actions"] = "Manager Acties", + -- Misc + ["invalid_amount"] = "ongeldig aantal", + ["actions_prompt"] = "Druk op [E] om de Ambulance Acties te bekijken.", + ["deposit_amount"] = "Bedrag om te storten", + ["money_withdraw"] = "Bedrag om op te nemen", + ["fast_travel"] = "Druk op [E] om snel te reizen.", + ["pharmacy_menu_title"] = "Apotheek", + ["unconscious_found"] = "[DISPATCH]: Er is een bewusteloos persoon gemeld.", + ["pharmacy_take"] = 'Pak %s', + ["medikit"] = "Spoedkoffer", + ["bandage"] = "Verbanddoos", + ["max_item"] = "Je kan dit niet dragen.", + -- F6 Menu + ["ems_menu"] = "Ambulance Menu", + ["ems_menu_title"] = "Ambulance - Menu", + ["ems_menu_revive"] = "Reanimeer speler", + ["ems_menu_putincar"] = "Zet in voertuig", + ["ems_menu_small"] = "Behandel kleine verwondingen", + ["ems_menu_big"] = "Behandel grote verwondingen", + ["ems_menu_search"] = "Patiënt niet gevonden", + -- Phone + ["alert_ambulance"] = "alert Ambulance", + -- Death + ["respawn_available_in"] = "Respawn beschikbaar in %s minuten en %s seconden", + ["respawn_bleedout_in"] = "Je zal doodbloeden in %s minuten %s seconden\n", + ["respawn_bleedout_prompt"] = "Houd [E] ingedrukt om te respawnen", + ["respawn_bleedout_fine"] = "Houd [E] ingedrukt om te respawnen voor €%s", + ["respawn_bleedout_fine_msg"] = "Je hebt €%s betaald om te respawnen.", + ["distress_send"] = "Druk op [G] om een noodsignaal te verzenden", + ["distress_sent"] = "Noodsignaal verzonden naar alle beschikbare eenheden!", + -- Revive + ["revive_help"] = "Revive een speler", + -- Item + ["used_medikit"] = "Je hebt 1 spoedkoffer gebruikt", + ["used_bandage"] = "Je hebt 1 verbandkoffer gebruikt", + ["not_enough_medikit"] = "Je hebt geen spoedkoffer bij.", + ["not_enough_bandage"] = "Je hebt geen verbandkoffer bij.", + ["healed"] = "Je bent behandeld.", + -- Blips + ["blip_hospital"] = "Ziekenhuis", + ["blip_dead"] = "Bewusteloze speler", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/pl.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/pl.lua new file mode 100644 index 000000000..606ba8c91 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/pl.lua @@ -0,0 +1,84 @@ +Locales["pl"] = { + -- Cloakroom + ["cloakroom"] = "szatnia", + ["ems_clothes_civil"] = "ubrania cywilne", + ["ems_clothes_ems"] = "ubrania EMS", + -- Vehicles + ["ambulance"] = "ambulance", + ["helicopter_prompt"] = "press [E] to access the Helicopter Actions.", + ["garage_prompt"] = "press [E] to access the Vehicle Actions.", + ["garage_title"] = "vehicle Actions", + ["garage_stored"] = "stored", + ["garage_notstored"] = "not in garage", + ["garage_storing"] = "we're attempting to remove the vehicle, make sure no players are around it.", + ["garage_has_stored"] = "the vehicle has been stored in your garage", + ["garage_has_notstored"] = "no nearby owned vehicles were found", + ["garage_notavailable"] = "your vehicle is not stored in the garage.", + ["garage_blocked"] = "there's no available spawn points!", + ["garage_empty"] = "you don't have any vehicles in your garage.", + ["garage_released"] = "your vehicle has been released from the garage.", + ["garage_store_nearby"] = "there is no nearby vehicles.", + ["garage_storeditem"] = "open garage", + ["garage_storeitem"] = "store vehicle in garage", + ["garage_buyitem"] = "vehicle shop", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "vehicle Shop", + ["vehicleshop_confirm"] = "do you want to buy this vehicle?", + ["vehicleshop_bought"] = "you have bought %s for $%s", + ["vehicleshop_money"] = "you cannot afford that vehicle", + ["vehicleshop_awaiting_model"] = "the vehicle is currently DOWNLOADING & LOADING please wait", + ["confirm_no"] = "no", + ["confirm_yes"] = "yes", + -- Action Menu + ["revive_inprogress"] = "trwa wskrzeszenie", + ["revive_complete"] = "zostałeś wskrzeszony %s", + ["revive_complete_award"] = "zostałeś wskrzeszony %s i zarobiono $%s!", + ["revive_fail_offline"] = "that player is no longer online", + ["heal_inprogress"] = "leczysz!", + ["heal_complete"] = "zostałeś uleczony %s", + ["no_players"] = "brak graczy w pobliżu", + ["player_not_unconscious"] = "ten gracz nie jest nieprzytomny!", + ["player_not_conscious"] = "ten gracz nie jest świadomy!", + -- Boss Menu + ["boss_actions"] = "akcje szefa", + -- Misc + ["invalid_amount"] = " widłowa kwota", + ["actions_prompt"] = "press [E] access the Ambulance Actions.", + ["deposit_amount"] = "kwota depozytu", + ["money_withdraw"] = "wycofana kwota", + ["fast_travel"] = "naciśnij na [E] do szybkiej podróży.", + ["pharmacy_menu_title"] = "apteka", + ["pharmacy_take"] = 'weź %s', + ["medikit"] = "apteczka", + ["bandage"] = "bandaż", + ["max_item"] = "już masz na sobie dość.", + -- F6 Menu + ["ems_menu"] = "menu EMS", + ["ems_menu_title"] = "eMS Menu - Ambulans", + ["ems_menu_revive"] = "ożyw gracza", + ["ems_menu_putincar"] = "umieścić w pojeździe", + ["ems_menu_small"] = "ulecz małe rany", + ["ems_menu_big"] = "ulecz poważne obrażenia", + ["ems_menu_search"] = "nie znaleziono pacjenta", + -- Phone + ["alert_ambulance"] = "wezwij ambulans", + -- Death + ["respawn_available_in"] = "respawn available in %s minutes %s seconds", + ["respawn_bleedout_in"] = "you will bleed out in %s minutes %s seconds\n", + ["respawn_bleedout_prompt"] = "hold [E] to respawn", + ["respawn_bleedout_fine"] = "hold [E] to respawn for $%s", + ["respawn_bleedout_fine_msg"] = "you paid $%s to respawn.", + ["distress_send"] = "press [G] to send distress signal", + ["distress_sent"] = "distress signal has been sent to available units!", + -- Revive + ["revive_help"] = "ożyw gracza", + -- Item + ["used_medikit"] = "użyłeś 1x apteczki", + ["used_bandage"] = "użyłeś 1x bandaża", + ["not_enough_medikit"] = "nie posiadasz apteczki.", + ["not_enough_bandage"] = "nie posiadasz bandaża.", + ["healed"] = "zostałeś potraktowany", + -- Blips + ["blip_hospital"] = "szpital", + ["blip_dead"] = "unconscious player", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sl.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sl.lua new file mode 100644 index 000000000..bfdc3454b --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sl.lua @@ -0,0 +1,85 @@ +Locales["sl"] = { + -- Garderoba + ["cloakroom"] = "Garderoba", + ["ems_clothes_civil"] = "Vaša Oblačila", + ["ems_clothes_ems"] = "Službena Oblačila", + -- Vozila + ["ambulance"] = "UKC", + ["helicopter_prompt"] = "Pritisni [E] Da odpreš garažo z Helikopterji.", + ["garage_prompt"] = "Pritisni [E] Da odpreš garažo z Vozili.", + ["garage_title"] = "Storitva Vozil", + ["garage_stored"] = "Pospravljeno", + ["garage_notstored"] = "Ni v garaži", + ["garage_storing"] = "Poskušamo odstraniti vozilo, poskrbimo, da v bližini ni nobenih igralcev.", + ["garage_has_stored"] = "Vozilo je bilo pospravljeno v vašo garažo.", + ["garage_has_notstored"] = "V bližini ni bilo najdenih lastnih vozil", + ["garage_notavailable"] = "Vaše vozilo ni bilo shranjeno v garaži.", + ["garage_blocked"] = "Tukaj ni nobenih prostih točk za spawn! Odmaknite stvar ki blokira točko!", + ["garage_empty"] = "Vi nimate nobenega vozila v garaži!", + ["garage_released"] = "Vaše vozilo je bilo izpuščeno iz garaže.", + ["garage_store_nearby"] = "Tukaj ni nobenih vozil!.", + ["garage_storeditem"] = "Odprite Garažo", + ["garage_storeitem"] = "Pospravite vozilo v Garažo", + ["garage_buyitem"] = "Trgovina Vozil", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "Trgovina Vozil", + ["vehicleshop_confirm"] = "Ali želite kupiti to vozilo?", + ["vehicleshop_bought"] = "Vi ste kupili %s za $%s", + ["vehicleshop_money"] = "Vi nemorate kupiti to vozilo!", + ["vehicleshop_awaiting_model"] = "Vozilo se NALAGA, prosimo počakajte!", + ["confirm_no"] = "Ne", + ["confirm_yes"] = "Da", + -- Menu za Opravljanje + ["revive_inprogress"] = "Oživljanje je v teku!", + ["revive_complete"] = "Bili ste oživljeni %s", + ["revive_complete_award"] = "Oživili ste %s in zaslužili $%s!", + ["revive_fail_offline"] = "Ta igralec ni več Aktiven!", + ["heal_inprogress"] = "Vi se povijate!", + ["heal_complete"] = "Bili ste Poviti %s", + ["no_players"] = "Ni meščana v vaši okolici!", + ["player_not_unconscious"] = "Ta igralec ni nezavesten!", + ["player_not_conscious"] = "Ta igralec ni pri zavesti!", + -- Šefov Menu + ["boss_actions"] = "Šefov Menu", + -- Dela + ["invalid_amount"] = "Neveljavna količina!", + ["actions_prompt"] = "Pritisnite [E] Da odprete UKC Menu.", + ["deposit_amount"] = "Položite Denar", + ["money_withdraw"] = "Dvignite Denar", + ["fast_travel"] = "Pritisnite [E] za hitro potovanje.", + ["pharmacy_menu_title"] = "Lekarna", + ["pharmacy_take"] = 'Vzemite %s', + ["medikit"] = "Prva Pomoč", + ["bandage"] = "Bandaža", + ["max_item"] = "Vi že nosite dovolj!.", + -- F6 Menu + ["ems_menu"] = "Reševalni Menu", + ["ems_menu_title"] = "UKC - REŠEVALNI MENU", + ["ems_menu_revive"] = "Oživite Osebo", + ["ems_menu_putincar"] = "Dajte v Vozilo", + ["ems_menu_small"] = "Pozdravite manjše poškodbe", + ["ems_menu_big"] = "Pozdravite velike poškodbe", + ["ems_menu_search"] = "Oeba, ni bila najdena", + -- Telefon + ["alert_ambulance"] = "Alarem UKC", + -- Smrti + ["respawn_available_in"] = "Ponovno rojenje na voljo čez %s minut %s sekund", + ["respawn_bleedout_in"] = "Izkrvaveli boste čez %s minut %s sekund\n", + ["respawn_bleedout_prompt"] = "Držite [E] da se ponovno rodite", + ["respawn_bleedout_fine"] = "Držite [E] da se ponovno rodite za $%s", + ["respawn_bleedout_fine_msg"] = "Vi ste plačali $%s za ponovno rojenje.", + ["distress_send"] = "Pritisnite [G] da pošljete nujni klic", + ["distress_sent"] = "Signal v sili je bil poslan razpoložljivim enotam!", + -- Oživljanje + ["revive_help"] = "Oživite osebo", + -- Stvari + ["used_medikit"] = "Vi ste uporabili 1x Prva Pomoč", + ["used_bandage"] = "Vi ste uprabili 1x Bandažo", + ["not_enough_medikit"] = "Vi nimate Prve Pomoči.", + ["not_enough_bandage"] = "Vi nimate Bandaž.", + ["healed"] = "Vi ste bili pozdravljeni.", + ["unconscious_found"] = "[DISPATCH]: Porocanje o nezavestni osebi", + -- Blipi + ["blip_hospital"] = "UKC", + ["blip_dead"] = "Umiranje Osebe", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sr.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sr.lua new file mode 100644 index 000000000..c05166366 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sr.lua @@ -0,0 +1,84 @@ +Locales["sr"] = { + -- Svlačionica + ["cloakroom"] = "Svlačionica", + ["ems_clothes_civil"] = "Civilna Odeća", + ["ems_clothes_ems"] = "Radna Odeća", + -- Vozila + ["ambulance"] = "Hitna Pomoć", + ["helicopter_prompt"] = "Pritisni [E] da pristupiš helikopterskim akcijama", + ["garage_prompt"] = "Pritisni [E] da pristupiš garaži", + ["garage_title"] = "Garaža", + ["garage_stored"] = "Parkirano", + ["garage_notstored"] = "Nije u garaži", + ["garage_storing"] = "Pokušavam da parkiram vozilo, budi siguran da nema nikoga oko vozila.", + ["garage_has_stored"] = "Vozilo je parkirano u garažu", + ["garage_has_notstored"] = "Nema vaših vozila u blizini", + ["garage_notavailable"] = "Vaše vozilo nije parkirano u garaži.", + ["garage_blocked"] = "Nema slobodnih parking mesta!", + ["garage_empty"] = "Nemaš vozila u garaži!", + ["garage_released"] = "Vozilo je izvađeno iz garaže", + ["garage_store_nearby"] = "Nema vozila u blizini.", + ["garage_storeditem"] = "Otvori garažu", + ["garage_storeitem"] = "Parkiraj vozilo u garažu", + ["garage_buyitem"] = "AutoSalon", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "AutoSalon", + ["vehicleshop_confirm"] = "Da li želiš da kupiš vozilo?", + ["vehicleshop_bought"] = "Kupili ste %s za $%s", + ["vehicleshop_money"] = "Nemate dovoljno novca za ovo vozilo.", + ["vehicleshop_awaiting_model"] = "Model vozila se učitava, molimo sačekajte.", + ["confirm_no"] = "Ne", + ["confirm_yes"] = "Da", + -- Action Menu + ["revive_inprogress"] = "Oživljavanje je u toku!", + ["revive_complete"] = "Oživeli ste %s", + ["revive_complete_award"] = "Oziveli ste %s i zaradili $%s!", + ["revive_fail_offline"] = "Osoba nije online!", + ["heal_inprogress"] = "Vi lečite!", + ["heal_complete"] = "Izlečili ste %s", + ["no_players"] = "Nema osobe u blizini!", + ["player_not_unconscious"] = "Osoba nije onesvešćena!", + ["player_not_conscious"] = "Osoba nije pri svesti!", + -- Boss Menu + ["boss_actions"] = "Boss Meni", + -- Misc + ["invalid_amount"] = "Nevažeći Iznos", + ["actions_prompt"] = "Pritisni [E] da otvoriš meni", + ["deposit_amount"] = "Iznos depozita", + ["money_withdraw"] = "Iznos podignut", + ["fast_travel"] = "Pritisni [E] za brzo putovanje.", + ["pharmacy_menu_title"] = "Apoteka", + ["pharmacy_take"] = 'Uzmi %s', + ["medikit"] = "Medikit", + ["bandage"] = "Zavoji", + ["max_item"] = "Već nosiš dovoljno", + -- F6 Menu + ["ems_menu"] = "EMS Meni", + ["ems_menu_title"] = "Hitna Pomoć - EMS Meni", + ["ems_menu_revive"] = "Oživi Osobu", + ["ems_menu_putincar"] = "Stavi u Vozilo", + ["ems_menu_small"] = "Izleči male rane", + ["ems_menu_big"] = "Leči ozbiljne povrede", + ["ems_menu_search"] = "Pacijent nije nađen", + -- Phone + ["alert_ambulance"] = "Pozovi Hitnu Pomoć", + -- Death + ["respawn_available_in"] = "Oživljavanje moguće za %s minuta %s sekundi", + ["respawn_bleedout_in"] = "Iskrvarićete za %s minuta %s sekundi\n", + ["respawn_bleedout_prompt"] = "Držite [E] da vas ožive", + ["respawn_bleedout_fine"] = "Držite [E] da vas ožive za $%s", + ["respawn_bleedout_fine_msg"] = "Platili ste $%s da vas izleče.", + ["distress_send"] = "Pritisni [G] da pozoveš Hitnu Pomoć", + ["distress_sent"] = "Signal je poslat svim aktivnim jedinicama EMS", + -- Revive + ["revive_help"] = "Oživi osobu", + -- Item + ["used_medikit"] = "Iskoristili ste 1x medikit", + ["used_bandage"] = "Iskoristili ste 1x zavoj", + ["not_enough_medikit"] = "Nemate medikit.", + ["not_enough_bandage"] = "Nemate zavoj.", + ["healed"] = "Vas leče.", + -- Blips + ["blip_hospital"] = "Bolnica", + ["blip_dead"] = "Povredjena Osoba", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sv.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sv.lua new file mode 100644 index 000000000..165532f18 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/sv.lua @@ -0,0 +1,85 @@ +Locales["sv"] = { + -- Cloakroom + ["cloakroom"] = "Omklädningsrum", + ["ems_clothes_civil"] = "Civila kläder", + ["ems_clothes_ems"] = "Arbetskläder", + -- Vehicles + ["ambulance"] = "Ambulans", + ["helicopter_prompt"] = "Tryck [E] för att öppna helikopter garaget.", + ["garage_prompt"] = "Tryck [E] för att öppna fordonsgaraget.", + ["garage_title"] = "Fordon", + ["garage_stored"] = "Parkerad", + ["garage_notstored"] = "Inte i garage", + ["garage_storing"] = "Vi försöker ta bort fordonet, se till så inga är nära fordonet.", + ["garage_has_stored"] = "Fordonet har parkerats", + ["garage_has_notstored"] = "Inga av dina ägda fordon i närheten har hittats.", + ["garage_notavailable"] = "Ditt fordon är inte parkerat i garaget.", + ["garage_blocked"] = "Något blockerar spawnen!", + ["garage_empty"] = "Du har inga fordon i garaget.", + ["garage_released"] = "Ditt fordon har tagits ut.", + ["garage_store_nearby"] = "Det är inga bilar i närheten.", + ["garage_storeditem"] = "Öppna garage", + ["garage_storeitem"] = "Parkera fordon", + ["garage_buyitem"] = "Butik", + ["shop_item"] = "%skr", + ["vehicleshop_title"] = "Butik", + ["vehicleshop_confirm"] = "Vill du köpa denna?", + ["vehicleshop_bought"] = "Du har köpt %s för %skr", + ["vehicleshop_money"] = "Du har inte råd", + ["vehicleshop_awaiting_model"] = "Fordonet LADDAS NER & LADDAR vänta tack!", + ["confirm_no"] = "Nej", + ["confirm_yes"] = "Ja", + -- Action Menu + ["revive_inprogress"] = "En återupplivning pågår!", + ["revive_complete"] = "Du har återupplivat %s", + ["revive_complete_award"] = "Du har återupplivat %s och tjänat %skr!", + ["revive_fail_offline"] = "Spelarwn är inte längre online", + ["heal_inprogress"] = "Du läker spelaren!", + ["heal_complete"] = "Du har läkit %s", + ["no_players"] = "Inga spelare i närheten", + ["player_not_unconscious"] = "Spelaren är inte medvetslös!", + ["player_not_conscious"] = "Spelaren är inte vid medvetande!", + -- Boss Menu + ["boss_actions"] = "Chefshandlingar", + -- Misc + ["invalid_amount"] = "Ogiltigt antal", + ["actions_prompt"] = "Tryck [E] för att öppna menyn.", + ["deposit_amount"] = "Sätt in summa", + ["money_withdraw"] = "Ta ut summa", + ["fast_travel"] = "Tryck [E] för att teleportera.", + ["pharmacy_menu_title"] = "Apotek", + ["pharmacy_take"] = 'Ta %s', + ["medikit"] = "Första hjälpen", + ["bandage"] = "Bandage", + ["max_item"] = "Du bär redan tillräckligt.", + ["unconscious_found"] = "[LARM]: En medvetslös person har larmats in", + -- F6 Menu + ["ems_menu"] = "Sjukvårdsmeny", + ["ems_menu_title"] = "Ambulans - Sjukvårdsmeny", + ["ems_menu_revive"] = "Återuppliva person", + ["ems_menu_putincar"] = "Sätt i fordon", + ["ems_menu_small"] = "Läk små skador", + ["ems_menu_big"] = "Läk större skador", + ["ems_menu_search"] = "Patient inte funnen", + -- Phone + ["alert_ambulance"] = "Meddela sjukvårdare", + -- Death + ["respawn_available_in"] = "Respawn tillgänglig om %s minuter %s sekunder", + ["respawn_bleedout_in"] = "Du kommer förblöda om %s minuter %s sekunder\n", + ["respawn_bleedout_prompt"] = "Håll in [E] för att respawna", + ["respawn_bleedout_fine"] = "Håll in [E] för att respawna för %skr", + ["respawn_bleedout_fine_msg"] = "Du betalade %skr för att respawna.", + ["distress_send"] = "Tryck [G] för att skicka nödsignal", + ["distress_sent"] = "Nödsignal har skickats till lediga enheter!", + -- Revive + ["revive_help"] = "Återuppliva en spelare", + -- Item + ["used_medikit"] = "Du har använt 1x första hjälpen", + ["used_bandage"] = "Du har använt 1x bandage", + ["not_enough_medikit"] = "Du har ingen första hjälpen.", + ["not_enough_bandage"] = "Du har ingen bandage bandage.", + ["healed"] = "Du har fått vård.", + -- Blips + ["blip_hospital"] = "Sjukhus", + ["blip_dead"] = "Döende spelare", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/zh-cn.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/zh-cn.lua new file mode 100644 index 000000000..c03dbc9f3 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/locales/zh-cn.lua @@ -0,0 +1,84 @@ +Locales["zh-cn"] = { + -- Cloakroom + ["cloakroom"] = "更衣室", + ["ems_clothes_civil"] = "换回便服", + ["ems_clothes_ems"] = "医护工服", + -- Vehicles + ["ambulance"] = "紧急救援", + ["helicopter_prompt"] = "键下 [E] 打开飞行载具选单.", + ["garage_prompt"] = "键下 [E] 打开载具选单.", + ["garage_title"] = "医护载具", + ["garage_stored"] = "已存放", + ["garage_notstored"] = "尚未于车库内", + ["garage_storing"] = "我们正在尝试存放车辆, 确保车辆上无其他市民!", + ["garage_has_stored"] = "车辆已存放于您的车库中!", + ["garage_has_notstored"] = "无法存放! 检索不到附近的自有车辆", + ["garage_notavailable"] = "尚未发现此车库有您的载具.", + ["garage_blocked"] = "当前可用的载具出库位置已全部占用! 请查看出库位置是否有遮挡物", + ["garage_empty"] = "尚未发现此车库有您的载具!", + ["garage_released"] = "车辆已出库! 请安全驾驶.", + ["garage_store_nearby"] = "尚未检索到附近的自有载具.", + ["garage_storeditem"] = "进入车库", + ["garage_storeitem"] = "存放载具", + ["garage_buyitem"] = "载具商店", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "载具商店", + ["vehicleshop_confirm"] = "确认购买当前选择车辆?", + ["vehicleshop_bought"] = "成功购买:%s, 支付价格:$%s", + ["vehicleshop_money"] = "暂无足够的资金/货币购买", + ["vehicleshop_awaiting_model"] = "车辆数据当前加载种 & 下载中,请耐心等待!", + ["confirm_no"] = "取消", + ["confirm_yes"] = "确认", + -- Action Menu + ["revive_inprogress"] = "紧急治疗中...!", + ["revive_complete"] = "成功治疗:%s", + ["revive_complete_award"] = "完成治疗 %s任务, 挣得薪酬:$%s!", + ["revive_fail_offline"] = "发生错误! 该市民已离线!", + ["heal_inprogress"] = "正在包扎!", + ["heal_complete"] = "你已经治愈了:%s", + ["no_players"] = "附近暂无其他市民", + ["player_not_unconscious"] = "市民一息尚存! 请勿错误操作", + ["player_not_conscious"] = "市民已失去意识! 请实施救援", + -- Boss Menu + ["boss_actions"] = "人事管理", + -- Misc + ["invalid_amount"] = "无效金额输入!", + ["actions_prompt"] = "键下 [E] 打开医护菜单.", + ["deposit_amount"] = "存放资金", + ["money_withdraw"] = "提取资金", + ["fast_travel"] = "键下 [E] 快捷移动.", + ["pharmacy_menu_title"] = "医院药房", + ["pharmacy_take"] = '拿取 %s', + ["medikit"] = "紧急治疗包", + ["bandage"] = "医用绷带", + ["max_item"] = "无法携带更多!", + -- F6 Menu + ["ems_menu"] = "紧急救援", + ["ems_menu_title"] = "紧急救援 - 医护选单", + ["ems_menu_revive"] = "紧急救治", + ["ems_menu_putincar"] = "放入车内", + ["ems_menu_small"] = "处理轻微伤口", + ["ems_menu_big"] = "处治严重创伤", + ["ems_menu_search"] = "找不到附近市民? 选择此处", + -- Phone + ["alert_ambulance"] = "救援警报", + -- Death + ["respawn_available_in"] = "强制重生功能将于:%s分%s秒内激活", + ["respawn_bleedout_in"] = "持续留血:%s分%s秒\n", + ["respawn_bleedout_prompt"] = "按住 [E] 获得重生", + ["respawn_bleedout_fine"] = "按住 [E] 支付 $%s 强制重生", + ["respawn_bleedout_fine_msg"] = "成功支付 $%s 用来强制重生", + ["distress_send"] = "键下 [G] 向医护发送救援信号", + ["distress_sent"] = "救援信号成功发送至医护人员!", + -- Revive + ["revive_help"] = "救治玩家", + -- Item + ["used_medikit"] = "您已成功使用一个医疗急救包!", + ["used_bandage"] = "您已成功使用一个止血绷带", + ["not_enough_medikit"] = "当前背包暂无医疗急救包.", + ["not_enough_bandage"] = "当前背包暂无止血绷带.", + ["healed"] = "您正在被治疗", + -- Blips + ["blip_hospital"] = "人民医院", + ["blip_dead"] = "失去意识的市民", +} diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/cs_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/cs_bpt_ambulancejob.sql new file mode 100644 index 000000000..8e46f2a15 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/cs_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Záchranka', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Záchranka', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Záchranka', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Zdravotník',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Doktor',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Primář',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Chirurg',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Záchranka') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Obvaz', 2), + ('medikit','Lékarnička', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/de_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/de_bpt_ambulancejob.sql new file mode 100644 index 000000000..c2b6b7636 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/de_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Rettungsdienst', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Rettungsdienst', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Rettungsdienst', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Jr. Sanitäter',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Sanitäter',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Arzt',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Rettungsdienst Chef',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Rettungsdienst') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Verband', 2), + ('medikit','Verbandskasten', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/fi_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/fi_bpt_ambulancejob.sql new file mode 100644 index 000000000..af43dfd55 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/fi_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Ensihoito', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Ensihoito', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Ensihoito', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Ensihoitaja',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Lääkäri',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Yli-lääkäri',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Kirurgi',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Ensihoito') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Sideharso', 2), + ('medikit','Ensiapupakkaus', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/fr_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/fr_bpt_ambulancejob.sql new file mode 100644 index 000000000..3783ca561 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/fr_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Ambulancier',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Médecin',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Médecin chef',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Chirurgien',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Ambulance') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Bandage', 2), + ('medikit','Kit de soins', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/it_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/it_bpt_ambulancejob.sql new file mode 100644 index 000000000..7a8594065 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/it_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'EMS', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'EMS', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'EMS', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Specializzando',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Dottore',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Primario',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Direttore Sanitario',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','EMS') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Bende', 2), + ('medikit','Kit medico', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/nl_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/nl_bpt_ambulancejob.sql new file mode 100644 index 000000000..ff2430f10 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/nl_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Verpleger',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Dokter',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Hoofdarts',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Baas',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Ambulance') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Verband', 2), + ('medikit','EHBO Kit', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/pl_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/pl_bpt_ambulancejob.sql new file mode 100644 index 000000000..a0d2ae3eb --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/pl_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Ambulance', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Pogotowie ratunkowe', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Ratownik',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Lekarz',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Chirurg',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Ordynator',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Pogotowie ratunkowe') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Bandaż', 2), + ('medikit','Defibrylator', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sc_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sc_bpt_ambulancejob.sql new file mode 100644 index 000000000..5c47d8fce --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sc_bpt_ambulancejob.sql @@ -0,0 +1,33 @@ + + +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', '人民医院', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', '人民医院', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', '人民医院', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','实习医生',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','紧急医疗',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','主治医师',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','医院院长',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','人民医院') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','医用绷带', 2), + ('medikit','紧急治疗包', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sl_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sl_bpt_ambulancejob.sql new file mode 100644 index 000000000..885098aa6 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sl_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'UKC', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'UKC', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'UKC', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Resevalec',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Zdravnik',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Pod Direktor',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Direktor',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Ambulance') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Bandage', 2), + ('medikit','Medikit', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sr_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sr_bpt_ambulancejob.sql new file mode 100644 index 000000000..84cdcbdc3 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sr_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Bolnica', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Bolnica', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Bolnica', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Medicinski tehničar',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','Doktor',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Zamenik direktora',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','Direktor',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Bolnica') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Bandaže', 2), + ('medikit','Prva Pomoć', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sv_bpt_ambulancejob.sql b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sv_bpt_ambulancejob.sql new file mode 100644 index 000000000..71f77a5ad --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/localization/sv_bpt_ambulancejob.sql @@ -0,0 +1,31 @@ +INSERT INTO `addon_account` (name, label, shared) VALUES + ('society_ambulance', 'Sjukvården', 1) +; + +INSERT INTO `addon_inventory` (name, label, shared) VALUES + ('society_ambulance', 'Sjukvården', 1) +; + +INSERT INTO `datastore` (name, label, shared) VALUES + ('society_ambulance', 'Sjukvården', 1) +; + +INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES + ('ambulance',0,'ambulance','Jr. EMT',20,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',1,'doctor','EMT',40,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',2,'chief_doctor','Sr. EMT',60,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}'), + ('ambulance',3,'boss','EMT Supervisor',80,'{\"tshirt_2\":0,\"hair_color_1\":5,\"glasses_2\":3,\"shoes\":9,\"torso_2\":3,\"hair_color_2\":0,\"pants_1\":24,\"glasses_1\":4,\"hair_1\":2,\"sex\":0,\"decals_2\":0,\"tshirt_1\":15,\"helmet_1\":8,\"helmet_2\":0,\"arms\":92,\"face\":19,\"decals_1\":60,\"torso_1\":13,\"hair_2\":0,\"skin\":34,\"pants_2\":5}','{\"tshirt_2\":3,\"decals_2\":0,\"glasses\":0,\"hair_1\":2,\"torso_1\":73,\"shoes\":1,\"hair_color_2\":0,\"glasses_1\":19,\"skin\":13,\"face\":6,\"pants_2\":5,\"tshirt_1\":75,\"pants_1\":37,\"helmet_1\":57,\"torso_2\":0,\"arms\":14,\"sex\":1,\"glasses_2\":0,\"decals_1\":0,\"hair_2\":0,\"helmet_2\":0,\"hair_color_1\":0}') +; + +INSERT INTO `jobs` (name, label) VALUES + ('ambulance','Sjukvården') +; + +INSERT INTO `items` (name, label, weight) VALUES + ('bandage','Bandage', 2), + ('medikit','Första hjälpen', 2) +; + +ALTER TABLE `users` + ADD `is_dead` TINYINT(1) NULL DEFAULT '0' +; diff --git a/server-data/resources/[bpt_addons]/bpt_ambulancejob/server/main.lua b/server-data/resources/[bpt_addons]/bpt_ambulancejob/server/main.lua index aa8afd49e..73e888276 100644 --- a/server-data/resources/[bpt_addons]/bpt_ambulancejob/server/main.lua +++ b/server-data/resources/[bpt_addons]/bpt_ambulancejob/server/main.lua @@ -1,327 +1,377 @@ -local playersHealing, deadPlayers = {}, {} - -ESX = exports["es_extended"]:getSharedObject() - -TriggerEvent("bpt_society:registerSociety", "ambulance", "Ambulance", "society_ambulance", "society_ambulance", "society_ambulance", { - type = "public", -}) - -RegisterNetEvent("bpt_ambulancejob:revive") -AddEventHandler("bpt_ambulancejob:revive", function(playerId) - local xPlayer = ESX.GetPlayerFromId(source) - - if xPlayer and xPlayer.job.name == "ambulance" then - local xTarget = ESX.GetPlayerFromId(playerId) - - if xTarget then - if deadPlayers[playerId] then - if Config.ReviveReward > 0 then - xPlayer.showNotification(TranslateCap("revive_complete_award", xTarget.name, Config.ReviveReward)) - xPlayer.addMoney(Config.ReviveReward, "Revive Reward") - xTarget.triggerEvent("bpt_ambulancejob:revive") - else - xPlayer.showNotification(TranslateCap("revive_complete", xTarget.name)) - xTarget.triggerEvent("bpt_ambulancejob:revive") - end - else - xPlayer.showNotification(TranslateCap("player_notTranslateCapnconscious")) - end - else - xPlayer.showNotification(TranslateCap("revive_fail_offline")) - end - end -end) - -RegisterNetEvent("esx:onPlayerDeath") -AddEventHandler("esx:onPlayerDeath", function() - deadPlayers[source] = "dead" - TriggerClientEvent("bpt_ambulancejob:setDeadPlayers", -1, deadPlayers) -end) - -RegisterServerEvent("bpt_ambulancejob:svsearch") -AddEventHandler("bpt_ambulancejob:svsearch", function() - TriggerClientEvent("bpt_ambulancejob:clsearch", -1, source) -end) - -RegisterNetEvent("bpt_ambulancejob:onPlayerDistress") -AddEventHandler("bpt_ambulancejob:onPlayerDistress", function() - if deadPlayers[source] then - deadPlayers[source] = "distress" - TriggerClientEvent("bpt_ambulancejob:setDeadPlayers", -1, deadPlayers) - end -end) - -RegisterNetEvent("esx:onPlayerSpawn") -AddEventHandler("esx:onPlayerSpawn", function() - if deadPlayers[source] then - deadPlayers[source] = nil - TriggerClientEvent("bpt_ambulancejob:setDeadPlayers", -1, deadPlayers) - end -end) - -AddEventHandler("esx:playerDropped", function(playerId) - if deadPlayers[playerId] then - deadPlayers[playerId] = nil - TriggerClientEvent("bpt_ambulancejob:setDeadPlayers", -1, deadPlayers) - end -end) - -RegisterNetEvent("bpt_ambulancejob:heal") -AddEventHandler("bpt_ambulancejob:heal", function(target, type) - local xPlayer = ESX.GetPlayerFromId(source) - - if xPlayer.job.name == "ambulance" then - TriggerClientEvent("bpt_ambulancejob:heal", target, type) - end -end) - -RegisterNetEvent("bpt_ambulancejob:putInVehicle") -AddEventHandler("bpt_ambulancejob:putInVehicle", function(target) - local xPlayer = ESX.GetPlayerFromId(source) - - if xPlayer.job.name == "ambulance" then - TriggerClientEvent("bpt_ambulancejob:putInVehicle", target) - end -end) - -ESX.RegisterServerCallback("bpt_ambulancejob:removeItemsAfterRPDeath", function(source, cb) - local xPlayer = ESX.GetPlayerFromId(source) - - if Config.RemoveCashAfterRPDeath then - if xPlayer.getMoney() > 0 then - xPlayer.removeMoney(xPlayer.getMoney(), "Death") - end - - if xPlayer.getAccount("black_money").money > 0 then - xPlayer.setAccountMoney("black_money", 0, "Death") - end - end - - if Config.RemoveItemsAfterRPDeath then - for i = 1, #xPlayer.inventory, 1 do - if xPlayer.inventory[i].count > 0 then - xPlayer.setInventoryItem(xPlayer.inventory[i].name, 0) - end - end - end - - local playerLoadout = {} - if Config.RemoveWeaponsAfterRPDeath then - for i = 1, #xPlayer.loadout, 1 do - xPlayer.removeWeapon(xPlayer.loadout[i].name) - end - else -- save weapons & restore em' since spawnmanager removes them - for i = 1, #xPlayer.loadout, 1 do - table.insert(playerLoadout, xPlayer.loadout[i]) - end - - -- give back wepaons after a couple of seconds - CreateThread(function() - Wait(5000) - for i = 1, #playerLoadout, 1 do - if playerLoadout[i].label ~= nil then - xPlayer.addWeapon(playerLoadout[i].name, playerLoadout[i].ammo) - end - end - end) - end - - cb() -end) - -if Config.EarlyRespawnFine then - ESX.RegisterServerCallback("bpt_ambulancejob:checkBalance", function(source, cb) - local xPlayer = ESX.GetPlayerFromId(source) - local bankBalance = xPlayer.getAccount("bank").money - - cb(bankBalance >= Config.EarlyRespawnFineAmount) - end) - - RegisterNetEvent("bpt_ambulancejob:payFine") - AddEventHandler("bpt_ambulancejob:payFine", function() - local xPlayer = ESX.GetPlayerFromId(source) - local fineAmount = Config.EarlyRespawnFineAmount - - xPlayer.showNotification(TranslateCap("respawn_bleedout_fine_msg", ESX.Math.GroupDigits(fineAmount))) - xPlayer.removeAccountMoney("bank", fineAmount, "Respawn Fine") - end) -end - -ESX.RegisterServerCallback("bpt_ambulancejob:getItemAmount", function(source, cb, item) - local xPlayer = ESX.GetPlayerFromId(source) - local quantity = xPlayer.getInventoryItem(item).count - - cb(quantity) -end) - -ESX.RegisterServerCallback("bpt_ambulancejob:buyJobVehicle", function(source, cb, vehicleProps, type) - local xPlayer = ESX.GetPlayerFromId(source) - local price = getPriceFromHash(vehicleProps.model, xPlayer.job.grade_name, type) - - -- vehicle model not found - if price == 0 then - cb(false) - else - if xPlayer.getMoney() >= price then - xPlayer.removeMoney(price, "Job Vehicle Purchase") - - MySQL.Async.execute("INSERT INTO owned_vehicles (owner, vehicle, plate, type, job, `stored`) VALUES (@owner, @vehicle, @plate, @type, @job, @stored)", { - ["@owner"] = xPlayer.identifier, - ["@vehicle"] = json.encode(vehicleProps), - ["@plate"] = vehicleProps.plate, - ["@type"] = type, - ["@job"] = xPlayer.job.name, - ["@stored"] = true, - }, function() - cb(true) - end) - else - cb(false) - end - end -end) - -ESX.RegisterServerCallback("bpt_ambulancejob:storeNearbyVehicle", function(source, cb, nearbyVehicles) - local xPlayer = ESX.GetPlayerFromId(source) - local foundPlate, foundNum - - for k, v in ipairs(nearbyVehicles) do - local result = MySQL.Sync.fetchAll("SELECT plate FROM owned_vehicles WHERE owner = @owner AND plate = @plate AND job = @job", { - ["@owner"] = xPlayer.identifier, - ["@plate"] = v.plate, - ["@job"] = xPlayer.job.name, - }) - - if result[1] then - foundPlate, foundNum = result[1].plate, k - break - end - end - - if not foundPlate then - cb(false) - else - MySQL.Async.execute("UPDATE owned_vehicles SET `stored` = true WHERE owner = @owner AND plate = @plate AND job = @job", { - ["@owner"] = xPlayer.identifier, - ["@plate"] = foundPlate, - ["@job"] = xPlayer.job.name, - }, function(rowsChanged) - if rowsChanged == 0 then - cb(false) - else - cb(true, foundNum) - end - end) - end -end) - -function getPriceFromHash(vehicleHash, jobGrade, type) - local vehicles = Config.AuthorizedVehicles[type][jobGrade] - - for _, v in ipairs(vehicles) do - if GetHashKey(v.model) == vehicleHash then - return v.price - end - end - - return 0 -end - -RegisterNetEvent("bpt_ambulancejob:removeItem") -AddEventHandler("bpt_ambulancejob:removeItem", function(item) - local xPlayer = ESX.GetPlayerFromId(source) - xPlayer.removeInventoryItem(item, 1) - - if item == "bandage" then - xPlayer.showNotification(TranslateCap("used_bandage")) - elseif item == "medikit" then - xPlayer.showNotification(TranslateCap("used_medikit")) - end -end) - -RegisterNetEvent("bpt_ambulancejob:giveItem") -AddEventHandler("bpt_ambulancejob:giveItem", function(itemName, amount) - local xPlayer = ESX.GetPlayerFromId(source) - - if xPlayer.job.name ~= "ambulance" then - print(('[bpt_ambulancejob] [^2INFO^7] "%s" attempted to spawn in an item!'):format(xPlayer.identifier)) - return - elseif itemName ~= "medikit" and itemName ~= "bandage" then - print(('[bpt_ambulancejob] [^2INFO^7] "%s" attempted to spawn in an item!'):format(xPlayer.identifier)) - return - end - - if xPlayer.canCarryItem(itemName, amount) then - xPlayer.addInventoryItem(itemName, amount) - else - xPlayer.showNotification(TranslateCap("max_item")) - end -end) - -ESX.RegisterCommand( - "revive", - "admin", - function(_, args) - args.playerId.triggerEvent("bpt_ambulancejob:revive") - end, - true, - { - help = TranslateCap("revive_help"), - validate = true, - arguments = { - { name = "playerId", help = "The player id", type = "player" }, - }, - } -) - -ESX.RegisterUsableItem("medikit", function(source) - if not playersHealing[source] then - local xPlayer = ESX.GetPlayerFromId(source) - xPlayer.removeInventoryItem("medikit", 1) - - playersHealing[source] = true - TriggerClientEvent("bpt_ambulancejob:useItem", source, "medikit") - - Wait(10000) - playersHealing[source] = nil - end -end) - -ESX.RegisterUsableItem("bandage", function(source) - if not playersHealing[source] then - local xPlayer = ESX.GetPlayerFromId(source) - xPlayer.removeInventoryItem("bandage", 1) - - playersHealing[source] = true - TriggerClientEvent("bpt_ambulancejob:useItem", source, "bandage") - - Wait(10000) - playersHealing[source] = nil - end -end) - -ESX.RegisterServerCallback("bpt_ambulancejob:getDeathStatus", function(source, cb) - local xPlayer = ESX.GetPlayerFromId(source) - - MySQL.Async.fetchScalar("SELECT is_dead FROM users WHERE identifier = @identifier", { - ["@identifier"] = xPlayer.identifier, - }, function(isDead) - if isDead then - print(('[bpt_ambulancejob] [^2INFO^7] "%s" attempted combat logging'):format(xPlayer.identifier)) - end - - cb(isDead) - end) -end) - -RegisterNetEvent("bpt_ambulancejob:setDeathStatus") -AddEventHandler("bpt_ambulancejob:setDeathStatus", function(isDead) - local xPlayer = ESX.GetPlayerFromId(source) - - if type(isDead) == "boolean" then - MySQL.Sync.execute("UPDATE users SET is_dead = @isDead WHERE identifier = @identifier", { - ["@identifier"] = xPlayer.identifier, - ["@isDead"] = isDead, - }) - end -end) +local playersHealing, deadPlayers = {}, {} + +if GetResourceState("esx_phone") ~= "missing" then + TriggerEvent("esx_phone:registerNumber", "ambulance", TranslateCap("alert_ambulance"), true, true) +end + +if GetResourceState("bpt_society") ~= "missing" then + TriggerEvent("bpt_society:registerSociety", "ambulance", "Ambulance", "society_ambulance", "society_ambulance", "society_ambulance", { type = "public" }) +end + +local function isDeadState(src, bool) + if not src or bool == nil then + return + end + + Player(src).state:set("isDead", bool, true) +end + +RegisterNetEvent("bpt_ambulancejob:revive") +AddEventHandler("bpt_ambulancejob:revive", function(playerId) + playerId = tonumber(playerId) + local xPlayer = source and ESX.GetPlayerFromId(source) + + if xPlayer and xPlayer.job.name == "ambulance" then + local xTarget = ESX.GetPlayerFromId(playerId) + if xTarget then + if deadPlayers[playerId] then + if Config.ReviveReward > 0 then + xPlayer.showNotification(TranslateCap("revive_complete_award", xTarget.name, Config.ReviveReward)) + xPlayer.addMoney(Config.ReviveReward, "Revive Reward") + xTarget.triggerEvent("bpt_ambulancejob:revive") + isDeadState(xTarget.source, false) + else + xPlayer.showNotification(TranslateCap("revive_complete", xTarget.name)) + xTarget.triggerEvent("bpt_ambulancejob:revive") + isDeadState(xTarget.source, false) + end + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + + for _, xPlayer in pairs(Ambulance) do + if xPlayer.job.name == "ambulance" then + xPlayer.triggerEvent("bpt_ambulancejob:PlayerNotDead", playerId) + end + end + deadPlayers[playerId] = nil + else + xPlayer.showNotification(TranslateCap("player_not_unconscious")) + end + else + xPlayer.showNotification(TranslateCap("revive_fail_offline")) + end + end +end) + +AddEventHandler("txAdmin:events:healedPlayer", function(eventData) + if GetInvokingResource() ~= "monitor" or type(eventData) ~= "table" or type(eventData.id) ~= "number" then + return + end + if deadPlayers[eventData.id] then + TriggerClientEvent("bpt_ambulancejob:revive", eventData.id) + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + + for _, xPlayer in pairs(Ambulance) do + if xPlayer.job.name == "ambulance" then + xPlayer.triggerEvent("bpt_ambulancejob:PlayerNotDead", eventData.id) + end + end + deadPlayers[eventData.id] = nil + end +end) + +RegisterNetEvent("esx:onPlayerDeath") +AddEventHandler("esx:onPlayerDeath", function(data) + local source = source + deadPlayers[source] = "dead" + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + isDeadState(source, true) + + for _, xPlayer in pairs(Ambulance) do + xPlayer.triggerEvent("bpt_ambulancejob:PlayerDead", source) + end +end) + +RegisterServerEvent("bpt_ambulancejob:svsearch") +AddEventHandler("bpt_ambulancejob:svsearch", function() + TriggerClientEvent("bpt_ambulancejob:clsearch", -1, source) +end) + +RegisterNetEvent("bpt_ambulancejob:onPlayerDistress") +AddEventHandler("bpt_ambulancejob:onPlayerDistress", function() + local source = source + local injuredPed = GetPlayerPed(source) + local injuredCoords = GetEntityCoords(injuredPed) + + if deadPlayers[source] then + deadPlayers[source] = "distress" + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + + for _, xPlayer in pairs(Ambulance) do + xPlayer.triggerEvent("bpt_ambulancejob:PlayerDistressed", source, injuredCoords) + end + end +end) + +RegisterNetEvent("esx:onPlayerSpawn") +AddEventHandler("esx:onPlayerSpawn", function() + local source = source + if deadPlayers[source] then + deadPlayers[source] = nil + isDeadState(source, false) + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + + for _, xPlayer in pairs(Ambulance) do + xPlayer.triggerEvent("bpt_ambulancejob:PlayerNotDead", source) + end + end +end) + +AddEventHandler("esx:playerDropped", function(playerId, reason) + if deadPlayers[playerId] then + deadPlayers[playerId] = nil + isDeadState(playerId, false) + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + + for _, xPlayer in pairs(Ambulance) do + if xPlayer.job.name == "ambulance" then + xPlayer.triggerEvent("bpt_ambulancejob:PlayerNotDead", playerId) + end + end + end +end) + +RegisterNetEvent("bpt_ambulancejob:heal") +AddEventHandler("bpt_ambulancejob:heal", function(target, type) + local xPlayer = ESX.GetPlayerFromId(source) + + if xPlayer.job.name == "ambulance" then + TriggerClientEvent("bpt_ambulancejob:heal", target, type) + end +end) + +RegisterNetEvent("bpt_ambulancejob:putInVehicle") +AddEventHandler("bpt_ambulancejob:putInVehicle", function(target) + local xPlayer = ESX.GetPlayerFromId(source) + + if xPlayer.job.name == "ambulance" then + TriggerClientEvent("bpt_ambulancejob:putInVehicle", target) + end +end) + +ESX.RegisterServerCallback("bpt_ambulancejob:removeItemsAfterRPDeath", function(source, cb) + local xPlayer = ESX.GetPlayerFromId(source) + + if Config.OxInventory and Config.RemoveItemsAfterRPDeath then + exports.ox_inventory:ClearInventory(xPlayer.source) + return cb() + end + + if Config.RemoveCashAfterRPDeath then + if xPlayer.getMoney() > 0 then + xPlayer.removeMoney(xPlayer.getMoney(), "Death") + end + + if xPlayer.getAccount("black_money").money > 0 then + xPlayer.setAccountMoney("black_money", 0, "Death") + end + end + + if Config.RemoveItemsAfterRPDeath then + for i = 1, #xPlayer.inventory, 1 do + if xPlayer.inventory[i].count > 0 then + xPlayer.setInventoryItem(xPlayer.inventory[i].name, 0) + end + end + end + + if Config.OxInventory then + return cb() + end + + local playerLoadout = {} + if Config.RemoveWeaponsAfterRPDeath then + for i = 1, #xPlayer.loadout, 1 do + xPlayer.removeWeapon(xPlayer.loadout[i].name) + end + else -- save weapons & restore em' since spawnmanager removes them + for i = 1, #xPlayer.loadout, 1 do + table.insert(playerLoadout, xPlayer.loadout[i]) + end + + -- give back wepaons after a couple of seconds + CreateThread(function() + Wait(5000) + for i = 1, #playerLoadout, 1 do + if playerLoadout[i].label ~= nil then + xPlayer.addWeapon(playerLoadout[i].name, playerLoadout[i].ammo) + end + end + end) + end + + cb() +end) + +if Config.EarlyRespawnFine then + ESX.RegisterServerCallback("bpt_ambulancejob:checkBalance", function(source, cb) + local xPlayer = ESX.GetPlayerFromId(source) + local bankBalance = xPlayer.getAccount("bank").money + + cb(bankBalance >= Config.EarlyRespawnFineAmount) + end) + + RegisterNetEvent("bpt_ambulancejob:payFine") + AddEventHandler("bpt_ambulancejob:payFine", function() + local xPlayer = ESX.GetPlayerFromId(source) + local fineAmount = Config.EarlyRespawnFineAmount + + xPlayer.showNotification(TranslateCap("respawn_bleedout_fine_msg", ESX.Math.GroupDigits(fineAmount))) + xPlayer.removeAccountMoney("bank", fineAmount, "Respawn Fine") + end) +end + +ESX.RegisterServerCallback("bpt_ambulancejob:getItemAmount", function(source, cb, item) + local xPlayer = ESX.GetPlayerFromId(source) + local quantity = xPlayer.getInventoryItem(item).count + + cb(quantity) +end) + +ESX.RegisterServerCallback("bpt_ambulancejob:buyJobVehicle", function(source, cb, vehicleProps, type) + local xPlayer = ESX.GetPlayerFromId(source) + local price = getPriceFromHash(vehicleProps.model, xPlayer.job.grade_name, type) + + -- vehicle model not found + if price == 0 then + cb(false) + else + if xPlayer.getMoney() >= price then + xPlayer.removeMoney(price, "Job Vehicle Purchase") + + MySQL.insert("INSERT INTO owned_vehicles (owner, vehicle, plate, type, job, `stored`) VALUES (?, ?, ?, ?, ?, ?)", { xPlayer.identifier, json.encode(vehicleProps), vehicleProps.plate, type, xPlayer.job.name, true }, function(rowsChanged) + cb(true) + end) + else + cb(false) + end + end +end) + +ESX.RegisterServerCallback("bpt_ambulancejob:storeNearbyVehicle", function(source, cb, plates) + local xPlayer = ESX.GetPlayerFromId(source) + + local plate = MySQL.scalar.await("SELECT plate FROM owned_vehicles WHERE owner = ? AND plate IN (?) AND job = ?", { xPlayer.identifier, plates, xPlayer.job.name }) + + if plate then + MySQL.update("UPDATE owned_vehicles SET `stored` = true WHERE owner = ? AND plate = ? AND job = ?", { xPlayer.identifier, plate, xPlayer.job.name }, function(rowsChanged) + if rowsChanged == 0 then + cb(false) + else + cb(plate) + end + end) + else + cb(false) + end +end) + +function getPriceFromHash(vehicleHash, jobGrade, type) + local vehicles = Config.AuthorizedVehicles[type][jobGrade] + + for i = 1, #vehicles do + local vehicle = vehicles[i] + if joaat(vehicle.model) == vehicleHash then + return vehicle.price + end + end + + return 0 +end + +RegisterNetEvent("bpt_ambulancejob:removeItem") +AddEventHandler("bpt_ambulancejob:removeItem", function(item) + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.removeInventoryItem(item, 1) + + if item == "bandage" then + xPlayer.showNotification(TranslateCap("used_bandage")) + elseif item == "medikit" then + xPlayer.showNotification(TranslateCap("used_medikit")) + end +end) + +RegisterNetEvent("bpt_ambulancejob:giveItem") +AddEventHandler("bpt_ambulancejob:giveItem", function(itemName, amount) + local xPlayer = ESX.GetPlayerFromId(source) + + if xPlayer.job.name ~= "ambulance" then + print(("[^2WARNING^7] Player ^5%s^7 Tried Giving Themselves -> ^5" .. itemName .. "^7!"):format(xPlayer.source)) + return + elseif itemName ~= "medikit" and itemName ~= "bandage" then + print(("[^2WARNING^7] Player ^5%s^7 Tried Giving Themselves -> ^5" .. itemName .. "^7!"):format(xPlayer.source)) + return + end + + if xPlayer.canCarryItem(itemName, amount) then + xPlayer.addInventoryItem(itemName, amount) + else + xPlayer.showNotification(TranslateCap("max_item")) + end +end) + +ESX.RegisterCommand("revive", "admin", function(xPlayer, args, showError) + args.playerId.triggerEvent("bpt_ambulancejob:revive") +end, true, { help = TranslateCap("revive_help"), validate = true, arguments = { + { name = "playerId", help = "The player id", type = "player" }, +} }) + +ESX.RegisterCommand("reviveall", "admin", function(xPlayer, args, showError) + TriggerClientEvent("bpt_ambulancejob:revive", -1) +end, false) + +ESX.RegisterUsableItem("medikit", function(source) + if not playersHealing[source] then + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.removeInventoryItem("medikit", 1) + + playersHealing[source] = true + TriggerClientEvent("bpt_ambulancejob:useItem", source, "medikit") + + Wait(10000) + playersHealing[source] = nil + end +end) + +ESX.RegisterUsableItem("bandage", function(source) + if not playersHealing[source] then + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.removeInventoryItem("bandage", 1) + + playersHealing[source] = true + TriggerClientEvent("bpt_ambulancejob:useItem", source, "bandage") + + Wait(10000) + playersHealing[source] = nil + end +end) + +ESX.RegisterServerCallback("bpt_ambulancejob:getDeadPlayers", function(source, cb) + local xPlayer = ESX.GetPlayerFromId(source) + if xPlayer.job.name == "ambulance" then + cb(deadPlayers) + end +end) + +ESX.RegisterServerCallback("bpt_ambulancejob:getDeathStatus", function(source, cb) + local xPlayer = ESX.GetPlayerFromId(source) + MySQL.scalar("SELECT is_dead FROM users WHERE identifier = ?", { xPlayer.identifier }, function(isDead) + cb(isDead) + end) +end) + +RegisterNetEvent("bpt_ambulancejob:setDeathStatus") +AddEventHandler("bpt_ambulancejob:setDeathStatus", function(isDead) + local xPlayer = ESX.GetPlayerFromId(source) + + if type(isDead) == "boolean" then + MySQL.update("UPDATE users SET is_dead = ? WHERE identifier = ?", { isDead, xPlayer.identifier }) + isDeadState(source, isDead) + + if not isDead then + local Ambulance = ESX.GetExtendedPlayers("job", "ambulance") + for _, xPlayer in pairs(Ambulance) do + xPlayer.triggerEvent("bpt_ambulancejob:PlayerNotDead", source) + end + end + end +end)