Files
red-valley/cache/files/wasabi_police/resource.rpf

10964 lines
516 KiB
Plaintext
Raw Normal View History

2026-03-29 21:41:17 +03:00
RPF2!<00><00><00>gg<00><00><00><00>X <00>#<00>C <00>C4 <0C>h <0C>?G GMW (W fA<>8A<>q <00>y<00>5<00><00>5<00>q; q;<00><00>9`<00>9<00><00>><00><00>><00>8<00>8<00><00>< <00><<00><00>>`<00>><00>9d<00>9d<00><00><<00><<00>CHC<00><00>9<00><00>9<00>h;<00>h;<00><00>;<00>;<00><00>;P<00>;<00><00>5<00><00>5<00><00><00>g<00>g<00> <00><00><00><00><00>L"<00>L"/.fxapfxmanifest.luagameclientcl_customize.luaclient.luafunctions.luaradial.luaconfigurationconfig.lualocalescn.luacs.luada.luade.luaen.luaes.luafr.luahi.luait.luajp.luako.luanl.luapl.luapt.luatw.luauicssstyles.cssindex.htmljsscript.js
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
description 'Wasabi ESX/QBCore Police Job'
author 'wasabirobby'
version '1.10.8'
ui_page 'ui/index.html'
files { 'ui/*', 'ui/**/*' }
data_file 'DLC_ITYP_REQUEST' 'stream/tag.ytyp'
shared_scripts { '@wasabi_bridge/import.lua', 'game/configuration/config.lua', 'game/configuration/locales/*.lua' }
client_scripts { 'game/client/*.lua' }
server_scripts { '@oxmysql/lib/MySQL.lua', 'game/server/*.lua' }
dependencies { 'oxmysql', 'wasabi_bridge' }
provides { 'esx_policejob', 'qb-policejob' }
escrow_ignore {
'game/**/*.lua',
'game/configuration/locales/*.lua'
}
dependency '/assetpacks'-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not wsb then return print((Strings.no_wsb):format(GetCurrentResourceName())) end
local ESX = nil
if wsb.framework == 'esx' then ESX = exports['es_extended']:getSharedObject() end
----------------------------------------------------------------
-- Customize text ui, notifications, target and more with the --
-- "wasabi_bridge" dependency in the "customize" directory --
-- "wasabi_bridge/customize/cl_customize.lua" --
----------------------------------------------------------------
--Send to jail
RegisterNetEvent('wasabi_police:sendToJail', function()
if not wsb.hasGroup(Config.policeJobs) then return end
if deathCheck() or isCuffed then return end
local target, time
if Config.Jail.input or Config.Jail.BuiltInPrison.enabled then
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
return
else
local input = wsb.inputDialog(Strings.minutes_dialog, { Strings.minutes_dialog_field }, Config.UIColor)
if not input then return end
local input1 = tonumber(input[1])
if type(input1) ~= 'number' then return end
local quantity = math.floor(input1)
if quantity < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_amount, Strings.invalid_amount_desc, 'error')
return
else
target, time = GetPlayerServerId(player), quantity
end
end
end
if Config.Jail.BuiltInPrison.enabled and target and time then
TriggerServerEvent('wasabi_police:server:sendToJail', target, time)
else
if Config.Jail.jail == 'qb' then
TriggerServerEvent('wasabi_police:qbPrisonJail', target, time)
elseif Config.Jail.jail == 'rcore' then
exports['rcore_prison']:Jail(target, time)
elseif Config.Jail.jail == 'tk_jail' then
if wsb.framework == 'esx' then
exports.esx_tk_jail:jail(target, time)
elseif wsb.framework == 'qb' then
exports.qb_tk_jail:jail(target, time)
end
elseif Config.Jail.jail == 'hd_jail' then
TriggerServerEvent('HD_Jail:sendToJail', target, 'Prison', time, 'Sentenced', 'Police')
elseif Config.Jail.jail == 'myPrison' then
ExecuteCommand('jail')
elseif Config.Jail.jail == 'qalle-jail' then
TriggerServerEvent('esx-qalle-jail:jailPlayer', target, time, 'Sentenced')
elseif Config.Jail.jail == 'plouffe' then
exports.plouffe_jail:Set(target, time)
elseif Config.Jail.jail == 'mx' then
TriggerServerEvent('mx_jail:jailPlayer', target, time, target)
TriggerServerEvent('mx_jail:setTime', target, time)
elseif Config.Jail.jail == 'r_prison' then
exports.r_prison:JailPlayer(target, time)
elseif Config.Jail.jail == 'custom' then
-- Custom logic here?
end
end
end)
--Impound Vehicle
impoundSuccessful = function(vehicle)
if not DoesEntityExist(vehicle) then return end
SetEntityAsMissionEntity(vehicle, false, false)
if Config.AdvancedParking then
exports['AdvancedParking']:DeleteVehicleOnServer(vehicle, nil, nil)
else
DeleteVehicle(vehicle)
end
if not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.success, Strings.car_impounded_desc, 'success')
end
end
--Death check
deathCheck = function(serverId)
serverId = serverId or GetPlayerServerId(PlayerId())
local ped = GetPlayerPed(GetPlayerFromServerId(serverId)) or PlayerPedId()
return Player(serverId).state.dead
or IsPedFatallyInjured(ped)
or IsEntityPlayingAnim(ped, 'dead', 'dead_a', 3)
or IsEntityPlayingAnim(ped, 'mini@cpr@char_b@cpr_def', 'cpr_pumpchest_idle', 3)
end
-- Personal locker access
function OpenPersonalStash(station)
if not Config.Locations[station] or not Config.Locations[station].personalLocker then return end
if #(GetEntityCoords(PlayerPedId()) - Config.Locations[station].personalLocker.coords) > Config.Locations[station].personalLocker.range then return end
if not wsb.inventorySystem then return end
if not wsb.hasGroup(Config.policeJobs) then return end
local id = station .. '_' .. wsb.getIdentifier()
if wsb.awaitServerCallback('wasabi_police:registerStash', {
name = id,
slots = 30,
maxWeight = 50000,
station = station,
location = 'personalLocker'
}) then
wsb.inventory.openStash({
name = id,
maxWeight = 50000,
slots = 30
})
end
end
-- Evidence locker access
function OpenEvidenceLocker(station)
if not Config.Locations[station] or not Config.Locations[station].evidenceLocker then return end
if #(GetEntityCoords(PlayerPedId()) - Config.Locations[station].evidenceLocker.coords) > Config.Locations[station].evidenceLocker.range then return end
if not wsb.inventorySystem then return end
if not wsb.hasGroup(Config.policeJobs) then return end
local input = wsb.inputDialog(Strings.evidence_storage, { Strings.locker_number }, Config.UIColor)
if not input or not input[1] then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_entry, Strings.invalid_entry_desc, 'error')
return
end
input = tonumber(input[1])
if type(input) ~= 'number' then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_entry, Strings.invalid_entry_desc, 'error')
return
end
if input < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_entry, Strings.invalid_entry_desc, 'error')
return
end
input = math.floor(input)
local id = station .. '_evidence_' .. input
if wsb.awaitServerCallback('wasabi_police:registerStash', {
name = id,
slots = 100,
maxWeight = 500000,
station = station,
location = 'evidenceLocker'
}) then
wsb.inventory.openStash({
name = id,
maxWeight = 500000,
slots = 100
})
end
end
--Search player
searchPlayer = function(player)
if deathCheck() or isCuffed then return end
if not wsb.inventorySystem then
if GetResourceState('mf-inventory') == 'started' then
local identifier = wsb.awaitServerCallback('wasabi_police:getIdentifier', GetPlayerServerId(player))
exports['mf-inventory']:openOtherInventory(identifier)
elseif GetResourceState('inventory') == 'started' then --Chezza using inventory as their folder name
TriggerEvent('inventory:openPlayerInventory', GetPlayerServerId(player), true)
else
print('NO INVENTORY FOUND CONFIG YOUR INV IN CL_CUSTOMIZE.LUA')
end
else
wsb.inventory.openPlayerInventory(GetPlayerServerId(player))
end
end
exports('searchPlayer', searchPlayer)
DisableInventory = function(bool) -- Disable inventory when cuffed, enable when released
if wsb.inventorySystem ~= 'qs-inventory' then return end
exports['qs-inventory']:setInventoryDisabled(bool)
end
--Change clothes(Cloakroom)
AddEventHandler('wasabi_police:changeClothes', function(data)
local gender = wsb.getGender()
if not gender or gender == 0 or gender == 'm' then gender = 'male' end
if gender == 'f' or gender == 1 then gender = 'female' end
if data == 'civ_wear' then
RemoveClothingProps()
RequestCivilianOutfit()
return
end
if type(data) ~= 'table' then return end
SaveCivilianOutfit()
RemoveClothingProps()
if data[gender] and data[gender].clothing and next(data[gender].clothing) then
for _, clothing in pairs(data[gender].clothing) do
SetPedComponentVariation(wsb.cache.ped, clothing.component, clothing.drawable, clothing.texture, 0)
end
end
if data[gender] and data[gender].props and next(data[gender].props) then
for _, prop in pairs(data[gender].props) do
SetPedPropIndex(wsb.cache.ped, prop.component, prop.drawable, prop.texture, true)
end
end
end)
-- Billing event
AddEventHandler('wasabi_police:finePlayer', function()
if not wsb.hasGroup(Config.policeJobs) then return end
if deathCheck() or isCuffed then return end
local hasJob, _grade = wsb.getGroup()
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
local targetId = GetPlayerServerId(player)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
elseif Config.billingSystem == 'default' then
FineSuspect(targetId)
else
local jobLabel = wsb.playerData.job.label
if Config.billingSystem == 'okok' then
TriggerEvent('okokBilling:ToggleCreateInvoice')
else
local input = wsb.inputDialog(Strings.invoice_amount, { Strings.amount_invoice }, Config.UIColor)
if not input or not input[1] then return end
local input1 = tonumber(input[1])
if type(input1) ~= 'number' then return end
local amount = math.floor(input1)
if amount < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_entry, Strings.invalid_entry_desc, 'error')
elseif Config.billingSystem == 'pefcl' then
TriggerServerEvent('wasabi_police:billPlayer', targetId, wsb.playerData.job, amount)
elseif Config.billingSystem == 'qb' then
TriggerServerEvent('wasabi_police:qbBill', targetId, amount, wsb.playerData.job.name)
local gender = Strings.mr
if wsb.playerData.charinfo.gender == 1 then
gender = Strings.mrs
end
local charinfo = wsb.playerData.charinfo
TriggerServerEvent('wasabi_police:sendQBEmail', targetId, {
sender = wsb.playerData.job.label,
subject = Strings.debt_collection,
message = (Strings.db_email):format(gender, charinfo.lastname, amount),
button = {}
})
elseif Config.billingSystem == 'esx' then
TriggerServerEvent('esx_billing:sendBill', targetId, 'society_' .. hasJob, jobLabel, amount)
else
-- Replace this print with your billing system logic!
print('^0[^3WARNING^0] No proper billing system selected in configuration!')
end
end
end
end)
-- Job menu
openJobMenu = function()
local job, grade = wsb.hasGroup(Config.policeJobs)
if not job or not grade then return end
if not wsb.isOnDuty() then return end
if deathCheck() or isCuffed then return end
local jobLabel = Strings.police
local Options = {}
if Config.searchPlayers then
Options[#Options + 1] = {
title = Strings.search_player,
description = Strings.search_player_desc,
icon = 'magnifying-glass',
arrow = false,
event = 'wasabi_police:searchPlayer',
}
end
if Config.seizeCash.enabled then
Options[#Options + 1] = {
title = Strings.seize_cash_title,
description = Strings.seize_cash_label,
icon = 'fa-sack-dollar',
arrow = false,
event = 'wasabi_police:seizeCash',
}
end
Options[#Options + 1] = {
title = Strings.check_id,
description = Strings.check_id_desc,
icon = 'id-card',
arrow = true,
event = 'wasabi_police:checkId',
}
if Config?.GrantWeaponLicenses?.enabled and tonumber(grade or 0) >= Config.GrantWeaponLicenses.minGrade then
Options[#Options + 1] = {
title = Strings.grant_license,
description = Strings.grant_license_desc,
icon = 'id-card',
arrow = true,
event = 'wasabi_police:grantLicense',
}
end
if Config.Jail.enabled then
Options[#Options + 1] = {
title = Strings.jail_player,
description = Strings.jail_player_desc,
icon = 'lock',
arrow = false,
event = 'wasabi_police:sendToJail',
}
end
Options[#Options + 1] = {
title = Strings.handcuff_soft_player,
description = Strings.handcuff_soft_player_desc,
icon = 'hands-bound',
arrow = false,
args = { type = 'soft' },
event = 'wasabi_police:handcuffPlayer',
}
Options[#Options + 1] = {
title = Strings.handcuff_hard_player,
description = Strings.handcuff_hard_player_desc,
icon = 'hands-bound',
arrow = false,
args = { type = 'hard' },
event = 'wasabi_police:handcuffPlayer',
}
Options[#Options + 1] = {
title = Strings.escort_player,
description = Strings.escort_player_desc,
icon = 'hand-holding-hand',
arrow = false,
event = 'wasabi_police:escortPlayer',
}
if Config.GSR.enabled then
Options[#Options + 1] = {
title = Strings.gsr_test,
description = Strings.gsr_test_desc,
icon = 'gun',
arrow = false,
event = 'wasabi_police:gsrTest',
}
end
Options[#Options + 1] = {
title = Strings.put_in_vehicle,
description = Strings.put_in_vehicle_desc,
icon = 'arrow-right-to-bracket',
arrow = false,
event = 'wasabi_police:inVehiclePlayer',
}
Options[#Options + 1] = {
title = Strings.take_out_vehicle,
description = Strings.take_out_vehicle_desc,
icon = 'arrow-right-from-bracket',
arrow = false,
event = 'wasabi_police:outVehiclePlayer',
}
Options[#Options + 1] = {
title = Strings.vehicle_interactions,
description = Strings.vehicle_interactions_desc,
icon = 'car',
arrow = true,
event = 'wasabi_police:vehicleInteractions',
}
if Config.RadarPosts and Config.RadarPosts.enabled and Config.RadarPosts.jobs[job] and tonumber(grade or 0) >= Config.RadarPosts.jobs[job] then
Options[#Options + 1] = {
title = Strings.menu_radar_posts,
description = Strings.menu_radar_posts_desc,
icon = 'gauge-high',
arrow = true,
event = 'wasabi_police:radarPosts',
}
end
if Config.CCTVCameras and Config.CCTVCameras.enabled then
Options[#Options + 1] = {
title = Strings.menu_cctv_cameras,
description = Strings.menu_cctv_cameras_desc,
icon = 'video',
arrow = true,
event = 'wasabi_police:cctvCameras',
}
end
if Config.TrackingBracelet.enabled and Config.TrackingBracelet.jobs[job] and tonumber(grade or 0) >= Config.TrackingBracelet.jobs[job] then
Options[#Options + 1] = {
title = Strings.tracking_bracelet,
description = Strings.tracking_bracelet_desc,
icon = 'street-view',
arrow = false,
event = 'wasabi_police:trackPlayer',
}
Options[#Options + 1] = {
title = Strings.menu_tracking_bracelet,
description = Strings.menu_tracking_bracelet_desc,
icon = 'map-location-dot',
arrow = false,
event = 'wasabi_police:trackingBracelet',
}
end
Options[#Options + 1] = {
title = Strings.place_object,
description = Strings.place_object_desc,
icon = 'box',
arrow = true,
event = 'wasabi_police:placeObjects',
}
if Config.billingSystem then
Options[#Options + 1] = {
title = Strings.fines,
description = Strings.fines_desc,
icon = 'file-invoice',
arrow = false,
event = 'wasabi_police:finePlayer',
}
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_job_menu',
color = Config.UIColor,
title = jobLabel,
position = Config.MobileMenu.position,
options = Options
})
return
end
wsb.showContextMenu({
id = 'pd_job_menu',
color = Config.UIColor,
title = jobLabel,
options = Options
})
end
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not wsb then return print((Strings.no_wsb):format(GetCurrentResourceName())) end
playerLoaded, isDead, isBusy, disableKeys, cuffProp, isCuffed, inMenu, isRagdoll, cuffTimer, escorting, escorted, GSRData =
nil, nil, nil, nil, nil, nil, nil, nil, {}, {}, {}, {}
QBCore = nil
RadarPostProp, ClosestSpeedTrap, SpeedTraps, JailTime, InJail = nil, nil, {}, 0, false
CCTVCameras, TrackingPlayers = {}, {}
OnlinePoliceCount = 0
local oldJob = nil
if wsb.framework == 'qb' then QBCore = exports['qb-core']:GetCoreObject() end
RegisterNetEvent('wasabi_police:tackled', function(targetId)
getTackled(targetId)
end)
RegisterNetEvent('wasabi_police:tackle', function()
tacklePlayer()
end)
AddEventHandler('wasabi_bridge:onPlayerLogout', function()
if wsb.hasGroup(Config.policeJobs) and wsb.isOnDuty() then
TriggerServerEvent('wasabi_police:addPoliceCount', false)
end
end)
AddEventHandler('wasabi_bridge:onPlayerSpawn', function()
isDead = false
if escorted.active then
TriggerServerEvent('wasabi_police:escortPlayerStop', escorted.pdId, true)
escorted.active = nil
escorted.pdId = nil
end
if Config.UseRadialMenu then
DisableRadial(false)
end
end)
AddEventHandler('wasabi_bridge:onPlayerLogout', function()
InJail = false
SendNUIMessage({ action = 'jailCounter' })
end)
AddEventHandler('wasabi_bridge:onPlayerDeath', function()
-- isDead = true
if RadarPostProp and DoesEntityExist(RadarPostProp) then
DeleteEntity(RadarPostProp)
RadarPostProp = nil
end
if isCuffed and not Config.handcuff.cuffDeadPlayers then
uncuffed()
end
if escorting?.active then
escorting.active = nil
escorting.target = nil
end
if escorted?.active then
TriggerServerEvent('wasabi_police:escortPlayerStop', escorted.pdId, true)
escorted.active = nil
escorted.pdId = nil
end
if Config.UseRadialMenu then
DisableRadial(true)
end
end)
--PersistentCuff and update PoliceCount
RegisterNetEvent('wasabi_bridge:playerLoaded', function()
playerLoaded = true
PersistentCuffCheck()
CheckJailTime()
SpeedTraps = InitializeSpeedTraps()
CCTVCameras = InitializeCCTVCameras()
if wsb.hasGroup(Config.policeJobs) then
if wsb.isOnDuty() then
TriggerServerEvent('wasabi_police:addPoliceCount', true)
end
end
TriggerServerEvent('wasabi_police:getPoliceOnline')
end)
RegisterNetEvent('police:SetCopCount', function(count)
OnlinePoliceCount = count
end)
local function getPoliceOnline()
return OnlinePoliceCount
end
exports('getPoliceOnline', getPoliceOnline)
AddEventHandler('wasabi_police:searchPlayer', function()
if not wsb.hasGroup(Config.policeJobs) then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
else
searchPlayer(player)
end
end)
AddEventHandler('wasabi_police:grantLicense', function()
local job, grade = wsb.hasGroup(Config.policeJobs)
if not job or not grade then return end
if tonumber(grade) < Config.GrantWeaponLicenses.minGrade then
TriggerEvent('wasabi_bridge:notify', Strings.grade_too_low, Strings.grade_too_low_desc, 'error')
return
end
local coords = GetEntityCoords(wsb.cache.ped)
local closestPlayers = wsb.getNearbyPlayers(vector3(coords.x, coords.y, coords.z), 10.0)
local Options = {}
local playerList = {}
local nearbyPlayers
if #closestPlayers < 1 then goto continue end
for i = 1, #closestPlayers do
playerList[#playerList + 1] = {
id = GetPlayerServerId(closestPlayers[i])
}
end
nearbyPlayers = wsb.awaitServerCallback('wasabi_police:getPlayerData', playerList)
for _, v in pairs(nearbyPlayers) do
Options[#Options + 1] = {
icon = 'user',
title = v.name,
description = Strings.player_id .. ' ' .. v.id,
event = 'wasabi_police:weaponLicense',
args = { id = v.id }
}
end
::continue::
local selfName = (wsb.framework == 'qb') and
(wsb.playerData.charinfo.firstname .. ' ' .. wsb.playerData.charinfo.lastname) or
(wsb.playerData.firstName .. ' ' .. wsb.playerData.lastName)
Options[#Options + 1] = {
icon = 'user',
title = selfName .. ' (' .. Strings.license_self .. ')',
description = Strings.player_id .. ' ' .. wsb.cache.serverId,
event = 'wasabi_police:weaponLicense',
args = { id = wsb.cache.serverId }
}
wsb.showMenu({
id = 'grant_license_menu',
color = Config.UIColor,
title = Strings.select_player,
position = Config.GrantWeaponLicenses.menuPosition,
options = Options
})
end)
AddEventHandler('wasabi_police:spawnVehicle', function(data)
inMenu = false
local model = data.model
local category = Config.Locations[data.station].vehicles.options[data.grade][data.model].category
local spawnLoc = Config.Locations[data.station].vehicles.spawn[category]
if not IsModelInCdimage(GetHashKey(model)) then
print('Vehicle model not found: ' .. model)
else
local nearbyVehicles = wsb.getNearbyVehicles(vec3(spawnLoc.coords.x, spawnLoc.coords.y, spawnLoc.coords.z), 6.0,
true)
if #nearbyVehicles > 0 then
TriggerEvent('wasabi_bridge:notify', Strings.spawn_blocked, Strings.spawn_blocked_desc, 'error')
return
end
DoScreenFadeOut(800)
while not IsScreenFadedOut() do
Wait(100)
end
wsb.stream.model(model, 9000)
local vehicle = CreateVehicle(GetHashKey(model), spawnLoc.coords.x, spawnLoc.coords.y, spawnLoc.coords.z,
spawnLoc.heading, true, false)
TaskWarpPedIntoVehicle(wsb.cache.ped, vehicle, -1)
if Config.customCarlock then
model = GetEntityModel(vehicle)
local plate = GetVehicleNumberPlateText(vehicle)
wsb.giveCarKeys(plate, model, vehicle)
end
SetModelAsNoLongerNeeded(model)
DoScreenFadeIn(800)
end
end)
AddEventHandler('gameEventTriggered', function(event, data)
if event ~= 'CEventNetworkEntityDamage' then return end
local playerPed = wsb.cache.ped
local victim, victimDied = data[1], data[4]
if not IsPedAPlayer(victim) then return end
local player = PlayerId()
if victimDied then return end
if not IsPedAPlayer(victim) or NetworkGetPlayerIndexFromPed(victim) ~= player then return end
if escorting.active then
TriggerServerEvent('wasabi_police:releasePlayer', escorting.target)
escorting.active = nil
escorting.target = nil
end
end)
RegisterNetEvent('wasabi_police:trackPlayer', function()
local job, grade = wsb.hasGroup(Config.policeJobs)
if not job or not grade then return end
if not wsb.isOnDuty() then return end
if not Config.TrackingBracelet.jobs[job] or tonumber(grade or 0) < Config.TrackingBracelet.jobs[job] then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
return
end
TaskTurnPedToFaceEntity(wsb.cache.ped, GetPlayerPed(player), 2000)
player = GetPlayerServerId(player)
local state = Player(player).state.tracking
local label = state and Strings.stop_tracking or Strings.start_tracking
if not state then
local hasItem = wsb.awaitServerCallback('wasabi_police:itemCheck', Config.TrackingBracelet.item)
if Config.TrackingBracelet.item and not hasItem or hasItem < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.no_tracking_bracelet, Strings.no_tracking_bracelet_desc, 'error')
return
end
end
Wait(2000)
wsb.stream.animDict('anim@amb@clubhouse@tutorial@bkr_tut_ig3@')
TaskPlayAnim(wsb.cache.ped, 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@', 'machinic_loop_mechandplayer', 8.0, -8.0, -1, 1, 0, false, false, false)
if wsb.progressUI({
duration = 4000,
label = label,
position = 'bottom',
useWhileDead = false,
canCancel = true,
disable = {
car = true,
move = true,
}}, 'progressCircle') then
TriggerServerEvent('wasabi_police:addPlayerToTracking', player)
end
ClearPedTasks(wsb.cache.ped)
end)
RegisterNetEvent('wasabi_police:addTrackingProp', function()
AttachTrackingProp()
TriggerEvent('wasabi_bridge:notify', Strings.got_tracking_bracelet, Strings.got_tracking_bracelet_desc, 'success')
HandleTrackingProp()
end)
RegisterNetEvent('wasabi_police:removeTrackingProp', function()
if DoesEntityExist(TrackingBracelet) then
DeleteEntity(TrackingBracelet)
TrackingBracelet = nil
end
TriggerEvent('wasabi_bridge:notify', Strings.removed_tracking_bracelet, Strings.removed_tracking_bracelet_desc, 'success')
end)
local activeBlips = {}
RegisterNetEvent('wasabi_police:refreshTrackingData', function(data)
if not data or not next(data) then return end
for i = 1, #data do
local target = data[i]
if activeBlips[target.target] then
RemoveBlip(activeBlips[target.target])
activeBlips[target.target] = nil
end
activeBlips[target.target] = CreateBlip(target.coords, Config.TrackingBracelet.blip.sprite,
Config.TrackingBracelet.blip.color,
Config.TrackingBracelet.blip.label:format(target.name), Config.TrackingBracelet.blip.scale, false, nil, false)
end
end)
RegisterNetEvent('wasabi_police:removeTrackedPlayer', function(target)
if activeBlips[target] then
RemoveBlip(activeBlips[target])
activeBlips[target] = nil
end
end)
RegisterNetEvent('wasabi_police:arrested', function(pdId, type)
isBusy = true
local escaped
local pdPed = GetPlayerPed(GetPlayerFromServerId(pdId))
wsb.stream.animDict('mp_arrest_paired')
AttachEntityToEntity(wsb.cache.ped, pdPed, 11816, -0.1, 0.45, 0.0, 0.0, 0.0, 20.0, false, false, false, false, 20,
false)
TaskPlayAnim(wsb.cache.ped, 'mp_arrest_paired', 'crook_p2_back_left', 8.0, -8.0, 5500, 33, 0, false, false, false)
if Config.handcuff.skilledEscape.enabled then
if wsb.skillCheck({ difficulty = Config.handcuff.skilledEscape.difficulty, color = Config.UIColor and Config.UIColor or nil }) then
escaped = true
end
end
FreezeEntityPosition(pdPed, true)
Wait(2000)
DetachEntity(wsb.cache.ped, true, false)
FreezeEntityPosition(pdPed, false)
RemoveAnimDict('mp_arrest_paired')
if not escaped then
if IsPedInAnyVehicle(wsb.cache.ped, true) then TaskLeaveVehicle(wsb.cache.ped, wsb.cache.vehicle, 16) end
handcuffed(type)
end
isBusy = false
end)
RegisterNetEvent('wasabi_police:arrest', function()
isBusy = true
wsb.stream.animDict('mp_arrest_paired')
TaskPlayAnim(wsb.cache.ped, 'mp_arrest_paired', 'cop_p2_back_left', 8.0, -8.0, 3400, 33, 0, false, false, false)
Wait(3000)
isBusy = false
end)
local handCuffing = false
RegisterNetEvent('wasabi_police:handcuffPlayer', function(args)
if handCuffing then return end
handCuffing = true
local approved = IsTriggerApproved(GetInvokingResource())
local hasItem = true
if Config.handcuff?.cuffItem?.enabled and Config.handcuff?.cuffItem?.required then
hasItem = wsb.awaitServerCallback('wasabi_police:itemCheck', Config.handcuff.cuffItem.item)
if not approved then approved = (hasItem and hasItem > 0) end
end
if not approved then return end
if isCuffed then return end
if wsb.cache.vehicle then
handCuffing = false
TriggerEvent('wasabi_bridge:notify', Strings.in_vehicle, Strings.in_vehicle_desc, 'error')
return
end
local type = args?.type or args?.args?.type or Config.handcuff.defaultCuff or 'hard'
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if not player or GetVehiclePedIsIn(GetPlayerPed(player), false) ~= 0 then
handCuffing = false
local error_message, error_message_desc = (not player and Strings.no_nearby) or Strings.in_vehicle,
(not player and Strings.no_nearby_desc) or Strings.in_vehicle_desc
TriggerEvent('wasabi_bridge:notify', error_message, error_message_desc, 'error')
return
end
handcuffPlayer(GetPlayerServerId(player), type)
SetTimeout(7000, function()
handCuffing = false
end)
end)
RegisterNetEvent('wasabi_police:uncuffAnim', function(target)
local targetPed = GetPlayerPed(GetPlayerFromServerId(target))
local targetCoords = GetEntityCoords(targetPed)
if escorting?.active then
escorting.active = nil
escorting.target = nil
end
TaskTurnPedToFaceCoord(wsb.cache.ped, targetCoords.x, targetCoords.y, targetCoords.z, 2000)
Wait(2000)
TaskStartScenarioInPlace(wsb.cache.ped, 'PROP_HUMAN_PARKING_METER', 0, true)
Wait(2000)
ClearPedTasks(wsb.cache.ped)
end)
RegisterNetEvent('wasabi_police:lockpickHandcuffs', function()
if not Config.handcuff?.lockpicking?.enabled then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if not player then return end
local sId = GetPlayerServerId(player)
if not wsb.awaitServerCallback('wasabi_police:isCuffed', sId) then return end
local playerPed = GetPlayerPed(player)
local playerCoords = GetEntityCoords(playerPed)
TaskTurnPedToFaceCoord(wsb.cache.ped, playerCoords.x, playerCoords.y, playerCoords.z, 2000)
Wait(2000)
TaskStartScenarioInPlace(wsb.cache.ped, 'PROP_HUMAN_PARKING_METER', 0, true)
if wsb.skillCheck({ difficulty = Config.handcuff.lockpicking.difficulty, color = Config.UIColor and Config.UIColor or nil }) then
TriggerServerEvent('wasabi_police:lockpickHandcuffs', sId)
TriggerEvent('wasabi_bridge:notify', Strings.success, Strings.lockpick_handcuff_success, 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.failed, Strings.lockpick_handcuff_fail, 'error')
local random = math.random(1, 100)
if random <= Config.handcuff.lockpicking.breakChance then
TriggerServerEvent('wasabi_police:breakLockpick')
TriggerEvent('wasabi_bridge:notify', Strings.lockpick_broke, Strings.lockpick_broke_desc, 'error')
end
end
ClearPedTasks(wsb.cache.ped)
end)
RegisterNetEvent('wasabi_police:uncuff', function()
uncuffed()
end)
RegisterNetEvent('wasabi_police:stopEscorting', function(targetId)
if not escorting.active or escorting.target ~= targetId then return end
escorting.active = nil
escorting.target = nil
end)
AddEventHandler('wasabi_police:escortPlayer', function()
local approved = IsTriggerApproved(GetInvokingResource())
if not approved then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
else
escortPlayer(GetPlayerServerId(player))
end
end)
AddEventHandler('wasabi_police:lockpickVehicle', function()
local coords = GetEntityCoords(wsb.cache.ped)
local vehicle = wsb.getClosestVehicle(vec3(coords.x, coords.y, coords.z), 5.0, false)
if not vehicle or not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.vehicle_not_found, Strings.vehicle_not_found_desc, 'error')
else
local vehCoords = GetEntityCoords(vehicle)
local dist = #(vec3(coords.x, coords.y, coords.z) - vec3(vehCoords.x, vehCoords.y, vehCoords.z))
if dist < 2.5 then
lockpickVehicle(vehicle)
else
TriggerEvent('wasabi_bridge:notify', Strings.too_far, Strings.too_far_desc, 'error')
end
end
end)
AddEventHandler('wasabi_police:impoundVehicle', function()
local coords = GetEntityCoords(wsb.cache.ped)
local vehicle = wsb.getClosestVehicle(vec3(coords.x, coords.y, coords.z), 5.0, false)
if not vehicle or not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.vehicle_not_found, Strings.vehicle_not_found_desc, 'error')
else
local vehCoords = GetEntityCoords(vehicle)
local dist = #(vec3(coords.x, coords.y, coords.z) - vec3(vehCoords.x, vehCoords.y, vehCoords.z))
if dist < 2.5 then
impoundVehicle(vehicle)
else
TriggerEvent('wasabi_bridge:notify', Strings.too_far, Strings.too_far_desc, 'error')
end
end
end)
AddEventHandler('wasabi_police:vehicleInfo', function()
local coords = GetEntityCoords(wsb.cache.ped)
local vehicle = wsb.getClosestVehicle(vec3(coords.x, coords.y, coords.z), 5.0, false)
if not vehicle or not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.vehicle_not_found, Strings.vehicle_not_found_desc, 'error')
else
local vehCoords = GetEntityCoords(vehicle)
local dist = #(vec3(coords.x, coords.y, coords.z) - vec3(vehCoords.x, vehCoords.y, vehCoords.z))
if dist < 3.5 then
vehicleInfoMenu(vehicle)
else
TriggerEvent('wasabi_bridge:notify', Strings.too_far, Strings.too_far_desc, 'error')
end
end
end)
AddEventHandler('wasabi_police:openBossMenu', function()
if not wsb.hasGroup(Config.policeJobs) then return end
wsb.openBossMenu()
end)
AddEventHandler('wasabi_police:weaponLicense', function(data)
GiveWeaponLicense(data.args and data.args.id or data.id)
end)
RegisterNetEvent('wasabi_police:escortedPlayer', function(pdId)
if isCuffed or deathCheck(GetPlayerServerId(PlayerId())) then
escorted.active = not escorted.active
escorted.pdId = pdId
end
end)
RegisterNetEvent('wasabi_police:setEscort', function(targetId)
escorting.active = not escorting.active
escorting.target = targetId
end)
RegisterNetEvent('wasabi_police:seizeCash', function()
if not wsb.hasGroup(Config.policeJobs) then return end
local coords = GetEntityCoords(wsb.cache.ped)
local target = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 5.0, false)
if not target then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
else
TriggerServerEvent('wasabi_police:seizeCash', GetPlayerServerId(target))
end
end)
RegisterNetEvent('wasabi_police:putInVehicle', function()
if isCuffed or deathCheck(GetPlayerServerId(PlayerId())) then
if escorted.active then
escorted.active = nil
escorted.pdId = nil
Wait(1000)
end
local coords = GetEntityCoords(wsb.cache.ped)
local vehicle = wsb.getClosestVehicle(vec3(coords.x, coords.y, coords.z), 5.0, false)
if not vehicle or not DoesEntityExist(vehicle) then return end
local maxSeats, freeSeat = GetVehicleMaxNumberOfPassengers(vehicle)
for i = maxSeats - 1, 0, -1 do
if IsVehicleSeatFree(vehicle, i) then
freeSeat = i
break
end
end
if freeSeat then
-- FreezeEntityPosition(wsb.cache.ped, false)
TaskWarpPedIntoVehicle(wsb.cache.ped, vehicle, freeSeat)
FreezeEntityPosition(wsb.cache.ped, true)
end
end
end)
RegisterNetEvent('wasabi_police:takeFromVehicle', function(policeID)
if IsPedSittingInAnyVehicle(wsb.cache.ped) then
local vehicle = GetVehiclePedIsIn(wsb.cache.ped, false)
if deathCheck(GetPlayerServerId(PlayerId())) then
local pdPed = GetPlayerPed(GetPlayerFromServerId(policeID))
if not pdPed then goto continue end
local offsetCoords = GetOffsetFromEntityInWorldCoords(pdPed, 0.1, 0.0, 0.0)
FreezeEntityPosition(wsb.cache.ped, false)
SetEntityCoords(wsb.cache.ped, offsetCoords.x, offsetCoords.y, offsetCoords.z, false, false, false, false)
return
end
:: continue ::
TaskLeaveVehicle(wsb.cache.ped, vehicle, 64)
FreezeEntityPosition(wsb.cache.ped, false)
end
end)
AddEventHandler('wasabi_police:inVehiclePlayer', function()
local approved = IsTriggerApproved(GetInvokingResource())
if not approved then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(coords, 4.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
else
TriggerServerEvent('wasabi_police:inVehiclePlayer', GetPlayerServerId(player))
end
end)
AddEventHandler('wasabi_police:outVehiclePlayer', function()
local approved = IsTriggerApproved(GetInvokingResource())
if not approved then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(coords, 4.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
return
end
local vehicle = GetVehiclePedIsIn(wsb.cache.ped, false)
local speed = GetEntitySpeed(vehicle)
if speed > 0.1 then return end
if IsPedSittingInAnyVehicle(wsb.cache.ped) then return end -- to prevent someone in a vehicle to remove target player from the vehicle
TriggerServerEvent('wasabi_police:outVehiclePlayer', GetPlayerServerId(player))
end)
AddEventHandler('wasabi_police:vehicleInteractions', function()
vehicleInteractionMenu()
end)
AddEventHandler('wasabi_police:placeObjects', function()
placeObjectsMenu()
end)
AddEventHandler('wasabi_police:radarPosts', function()
RadarPostsMenu()
end)
AddEventHandler('wasabi_police:createRadarPost', function()
CreateRadarPost()
end)
AddEventHandler('wasabi_police:placeRadarPost', function(data)
PlaceRadarPost(data.prop)
end)
AddEventHandler('wasabi_police:manageRadarPost', function(data)
ManageRadarPost(data.id)
end)
AddEventHandler('wasabi_police:renameSpeedTrap', function(data)
RenameSpeedTrap(data.id)
end)
RegisterNetEvent('wasabi_police:updateSpeedTrapName', function(id, name)
UpdateSpeedTrapName(id, name)
end)
AddEventHandler('wasabi_police:cctvCameras', function()
CCTVMenu()
end)
AddEventHandler('wasabi_police:trackingBracelet', function()
TrackingBraceletMenu()
end)
AddEventHandler('wasabi_police:toggleTrackingBracelet', function(data)
TriggerServerEvent('wasabi_police:toggleTrackingBracelet', data.target)
end)
AddEventHandler('wasabi_police:createCCTVCamera', function()
CreateCCTVCamera()
end)
AddEventHandler('wasabi_police:placeCCTVCamera', function(data)
PlaceCCTVCamera(data.prop)
end)
AddEventHandler('wasabi_police:manageCCTVCamera', function(data)
ManageCCTVCamera(data.id)
end)
AddEventHandler('wasabi_police:renameCCTVCamera', function(data)
RenameCCTVCamera(data.id)
end)
RegisterNetEvent('wasabi_police:updateCCTVCameraName', function(id, name)
UpdateCCTVCameraName(id, name)
end)
AddEventHandler('wasabi_police:viewCCTVCamera', function(data)
ViewCCTVCamera(data.id)
end)
AddEventHandler('wasabi_police:spawnProp', function(index)
local prop = Config.Props[index]
local x, y, z = table.unpack(GetOffsetFromEntityInWorldCoords(wsb.cache.ped, 0.0, 2.0, 0.55))
local obj = CreateObjectNoOffset(prop.model, x, y, z, true, false, false)
SetEntityHeading(obj, GetEntityHeading(wsb.cache.ped))
PlaceObjectOnGroundProperly(obj)
if prop.freeze ~= false then
FreezeEntityPosition(obj, true)
end
end)
AddEventHandler('wasabi_police:licenseMenu', function(data)
if not wsb.hasGroup(Config.policeJobs) then return end
openLicenseMenu(data)
end)
AddEventHandler('wasabi_police:purchaseArmoury', function(data)
if not wsb.hasGroup(Config.policeJobs) then return end
local data = data
data.quantity = 1
if data.multiple then
local input = wsb.inputDialog(Strings.armoury_quantity_dialog, { Strings.quantity }, Config.UIColor)
if not input then return end
local input1 = tonumber(input[1])
if type(input1) ~= 'number' then return end
local quantity = math.floor(input1)
if quantity < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_amount, Strings.invalid_amount_desc, 'error')
else
data.quantity = quantity
end
end
local canPurchase = wsb.awaitServerCallback('wasabi_police:canPurchase', data)
if canPurchase then
TriggerEvent('wasabi_bridge:notify', Strings.success, Strings.successful_purchase_desc, 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.lacking_funds, Strings.lacking_funds_desc, 'error')
end
end)
AddEventHandler('wasabi_police:checkId', function(targetId)
if not wsb.hasGroup(Config.policeJobs) then return end
if targetId and type(targetId) == 'table' then targetId = nil end
if not targetId then
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(coords, 4.0, false)
if not player then
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
else
checkPlayerId(GetPlayerServerId(player))
end
else
checkPlayerId(targetId)
end
end)
AddEventHandler('wasabi_police:revokeLicense', function(data)
RevokeWeaponLicense(data.targetId, data.license)
TriggerEvent('wasabi_bridge:notify', Strings.license_revoked, Strings.license_revoked_desc, 'success')
Wait(420) -- lul
checkPlayerId(data.targetId)
end)
AddEventHandler('wasabi_police:manageId', function(data)
manageId(data)
end)
AddEventHandler('wasabi_police:gsrTest', function()
GSRTestNearbyPlayer()
end)
AddEventHandler('wasabi_police:toggleDuty', function(stationId)
local job, grade = wsb.hasGroup(Config.policeJobs)
if not job then
if wsb.framework == 'esx' then
local jobs = Config.policeJobs
if type(jobs) == 'table' then
for i = 1, #jobs do
job, grade = wsb.hasGroup('off' .. jobs[i])
if job then break end
end
else
job, grade = wsb.hasGroup('off' .. jobs)
end
end
end
if not job then return end
if wsb.framework == 'qb' then
wsb.playerData.job.onduty = not wsb.playerData.job.onduty
end
TriggerServerEvent('wasabi_police:svToggleDuty', stationId.args)
end)
CreateThread(function()
while true do
if isCuffed then
Wait(0)
DisablePlayerFiring(wsb.cache.playerId, true)
DisableControlAction(0, 140, true)
DisableControlAction(27, 75, true) -- Disable exit vehicle when Driving
DisableControlAction(0, 75, true)
DisableControlAction(0, 25, true)
DisableControlAction(0, 23, true)
DisableControlAction(0, 140, true)
DisableControlAction(0, 141, true)
DisableControlAction(0, 142, true)
if isCuffed == 'hard' then
for i = 30, 35 do
DisableControlAction(0, i, true)
end
end
else
Wait(1500)
end
end
end)
-- Arrested Loop
local deathByPass = Config.handcuff.cuffDeadPlayers
CreateThread(function()
while true do
local sleep = 1500
if isCuffed then
sleep = 0
local deathCheck = deathByPass and deathCheck(wsb.cache.serverId)
if not IsEntityPlayingAnim(wsb.cache.ped, 'mp_arresting', 'idle', 3) and not LocalPlayer.state.inTrunk and not deathCheck then
TaskPlayAnim(wsb.cache.ped, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0.0, false, false, false)
if not IsEntityPlayingAnim(wsb.cache.ped, 'mp_arresting', 'idle', 3) then
Wait(3000)
TaskPlayAnim(wsb.cache.ped, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0.0, false, false, false)
if not IsEntityPlayingAnim(wsb.cache.ped, 'mp_arresting', 'idle', 3) then
Wait(2000)
TaskPlayAnim(wsb.cache.ped, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0.0, false, false, false)
end
end
end
if LocalPlayer.state.inTrunk and IsEntityPlayingAnim(wsb.cache.ped, 'mp_arresting', 'idle', 3) then
ClearPedTasks(wsb.cache.ped)
end
if deathCheck then
if DoesEntityExist(cuffProp) then
SetEntityAsMissionEntity(cuffProp, true, true)
DetachEntity(cuffProp, false, false)
DeleteObject(cuffProp)
end
end
if not deathCheck and (not cuffProp or not DoesEntityExist(cuffProp)) then
wsb.stream.model('p_cs_cuffs_02_s', 7500)
local x, y, z = table.unpack(GetOffsetFromEntityInWorldCoords(wsb.cache.ped, 0.0, 3.0, 0.5))
cuffProp = CreateObjectNoOffset(`p_cs_cuffs_02_s`, x, y, z, true, false, false)
SetModelAsNoLongerNeeded(`p_cs_cuffs_02_s`)
AttachEntityToEntity(cuffProp, wsb.cache.ped, GetPedBoneIndex(wsb.cache.ped, 57005), 0.04, 0.06, 0.0,
-85.24, 4.2,
-106.6, true, true, false, true, 1, true)
end
elseif cuffProp then
if DoesEntityExist(cuffProp) then
SetEntityAsMissionEntity(cuffProp, true, true)
DetachEntity(cuffProp, false, false)
DeleteObject(cuffProp)
ClearPedTasks(wsb.cache.ped)
end
cuffProp = nil
end
if isRagdoll then
sleep = 0
SetPedToRagdoll(wsb.cache.ped, 1000, 1000, 0, false, false, false)
end
Wait(sleep)
end
end)
RegisterNetEvent('wasabi_police:releasePlayerFromEscort', function(pdID)
if pdID ~= escorted.pdId then return end
alrEscorted = false
escorted.active = nil
isBusy = nil
ClearPedTasks(wsb.cache.ped)
DetachEntity(wsb.cache.ped, true, false)
end)
-- Escorting loop
CreateThread(function()
local alrEscorting, textUI
while true do
local sleep = 1500
if escorting?.active then
sleep = 0
local targetPed = GetPlayerPed(GetPlayerFromServerId(escorting.target))
if not textUI then
wsb.showTextUI(Strings.stop_escorting_interact)
textUI = true
end
if DoesEntityExist(targetPed) and IsPedOnFoot(targetPed) and not deathCheck(escorting.target) then
if not alrEscorting then
wsb.stream.animDict('amb@code_human_wander_drinking_fat@beer@male@base')
TaskPlayAnim(wsb.cache.ped, 'amb@code_human_wander_drinking_fat@beer@male@base', 'static', 8.0, 1.0,
-1,
49, 0, false, false, false)
alrEscorting = true
RemoveAnimDict('amb@code_human_wander_drinking_fat@beer@male@base')
elseif alrEscorting and not IsEntityPlayingAnim(wsb.cache.ped, 'amb@code_human_wander_drinking_fat@beer@male@base', 'static', 3) then
wsb.stream.animDict('amb@code_human_wander_drinking_fat@beer@male@base')
TaskPlayAnim(wsb.cache.ped, 'amb@code_human_wander_drinking_fat@beer@male@base', 'static', 8.0, 1.0,
-1,
49, 0, false, false, false)
RemoveAnimDict('amb@code_human_wander_drinking_fat@beer@male@base')
else
sleep = 1500
end
elseif DoesEntityExist(targetPed) and deathCheck(escorting.target) then
if not alrEscorting then
wsb.stream.animDict('missfinale_c2mcs_1')
TaskPlayAnim(wsb.cache.ped, 'missfinale_c2mcs_1', 'fin_c2_mcs_1_camman', 8.0, -8.0, -1, 49, 0, false,
false, false)
RemoveAnimDict('missfinale_c2mcs_1')
alrEscorting = true
elseif alrEscorting and not IsEntityPlayingAnim(wsb.cache.ped, 'missfinale_c2mcs_1', 'fin_c2_mcs_1_camman', 3) then
wsb.stream.animDict('missfinale_c2mcs_1')
TaskPlayAnim(wsb.cache.ped, 'missfinale_c2mcs_1', 'fin_c2_mcs_1_camman', 8.0, -8.0, -1, 49, 0, false,
false, false)
RemoveAnimDict('missfinale_c2mcs_1')
end
else
alrEscorting = nil
escorting.active = nil
ClearPedTasks(wsb.cache.ped)
end
if IsPedArmed(wsb.cache.ped, 1) or IsPedArmed(wsb.cache.ped, 2) or IsPedArmed(wsb.cache.ped, 4) then
TriggerEvent('wasabi_bridge:notify', Strings.cant_wield, Strings.cant_wield_desc, 'error')
SetCurrentPedWeapon(wsb.cache.ped, `WEAPON_UNARMED`, false)
end
if IsControlJustReleased(0, 38) or IsDisabledControlJustReleased(0, 38) or IsPedRagdoll(wsb.cache.ped) then
alrEscorting = nil
escorting.active = nil
ClearPedTasks(wsb.cache.ped)
TriggerServerEvent('wasabi_police:releasePlayer', escorting.target)
end
sleep = 0
DisableControlAction(0, 22, true)
DisableControlAction(0, 23, true)
DisableControlAction(0, 25, true)
DisableControlAction(0, 140, true)
DisableControlAction(0, 141, true)
DisableControlAction(0, 142, true)
DisablePlayerFiring(PlayerId(), true)
elseif textUI then
wsb.hideTextUI()
textUI = false
elseif alrEscorting then
alrEscorting = nil
escorting.active = nil
ClearPedTasks(wsb.cache.ped)
else
sleep = 1500
end
Wait(sleep)
end
end)
-- Being escorted loop
CreateThread(function()
local alrEscorted
while true do
local sleep = 1500
local isDead = deathByPass and deathCheck(wsb.cache.serverId)
if escorted?.active and isCuffed and not isDead then
sleep = 0
local pdPed = GetPlayerPed(GetPlayerFromServerId(escorted.pdId))
if DoesEntityExist(pdPed) and IsPedOnFoot(pdPed) and not IsPedDeadOrDying(pdPed, true) then
if not alrEscorted then
AttachEntityToEntity(wsb.cache.ped, pdPed, 11816, 0.26, 0.48, 0.0, 0.0, 0.0, 0.0, false, false, false,
false, 2, true)
alrEscorted = true
isBusy = true
else
sleep = 500
end
if IsPedWalking(pdPed) then
if not IsEntityPlayingAnim(wsb.cache.ped, 'anim@move_m@prisoner_cuffed', 'walk', 3) then
wsb.stream.animDict('anim@move_m@prisoner_cuffed')
TaskPlayAnim(wsb.cache.ped, 'anim@move_m@prisoner_cuffed', 'walk', 8.0, -8, -1, 1, 0.0, false,
false,
false)
end
elseif IsPedRunning(pdPed) or IsPedSprinting(pdPed) then
if not IsEntityPlayingAnim(wsb.cache.ped, 'anim@move_m@trash', 'run', 3) then
wsb.stream.animDict('anim@move_m@trash')
TaskPlayAnim(wsb.cache.ped, 'anim@move_m@trash', 'run', 8.0, -8, -1, 1, 0.0, false, false, false)
end
elseif IsEntityPlayingAnim(wsb.cache.ped, 'anim@move_m@prisoner_cuffed', 'walk', 3) or IsEntityPlayingAnim(wsb.cache.ped, 'anim@move_m@trash', 'run', 3) then
StopAnimTask(wsb.cache.ped, 'anim@move_m@prisoner_cuffed', 'walk', -8.0)
StopAnimTask(wsb.cache.ped, 'anim@move_m@trash', 'run', -8.0)
end
else
alrEscorted = false
escorted.active = nil
isBusy = nil
DetachEntity(wsb.cache.ped, true, false)
end
elseif escorted?.active and deathCheck(GetPlayerServerId(PlayerId())) then
local pdPed = GetPlayerPed(GetPlayerFromServerId(escorted.pdId))
if not alrEscorted then
wsb.stream.animDict('nm')
ClearPedTasks(wsb.cache.ped)
AttachEntityToEntity(wsb.cache.ped, pdPed, 0, 0.33, 0.0, 0.70, -0.20, 0.0, 200.0, false, false, false,
false,
2, false)
TaskPlayAnim(wsb.cache.ped, 'nm', 'firemans_carry', 8.0, -8.0, -1, 33, 0, false, false, false)
RemoveAnimDict('nm')
alrEscorted = true
elseif alrEscorted and not IsEntityPlayingAnim(wsb.cache.ped, 'nm', 'firemans_carry', 3) then
wsb.stream.animDict('nm')
TaskPlayAnim(wsb.cache.ped, 'nm', 'firemans_carry', 8.0, -8.0, -1, 33, 0, false, false, false)
RemoveAnimDict('nm')
end
elseif alrEscorted then
alrEscorted = nil
isBusy = nil
DetachEntity(wsb.cache.ped, true, false)
if IsEntityPlayingAnim(wsb.cache.ped, 'anim@move_m@prisoner_cuffed', 'walk', 3) or
IsEntityPlayingAnim(wsb.cache.ped, 'anim@move_m@trash', 'run', 3) or
IsEntityPlayingAnim(wsb.cache.ped, 'nm', 'firemans_carry', 3) then
ClearPedTasks(wsb.cache.ped)
end
else
sleep = 1500
end
Wait(sleep)
end
end)
-- GSR thread
if Config.GSR.enabled then
local GSRLoopBreak, GSRLoopRunning, GSRTextUI = false, false, false
CreateThread(function()
while true do
local sleep = 1500
if IsPedArmed(wsb.cache.ped, 4) then
sleep = 0
if IsPedShooting(wsb.cache.ped) then
GSRData.positive = true
TriggerServerEvent('wasabi_police:setGSR', true)
if Config.GSR.autoClean then
GSRData.timer = Config.GSR.autoClean
if GSRLoopRunning then GSRLoopBreak = true end
CreateThread(function()
while GSRData?.positive do
if GSRLoopBreak then
GSRLoopRunning = false
GSRLoopBreak = false
break
end
GSRLoopRunning = true
Wait(1000)
if GSRData.timer == 0 then
GSRData.positive = nil
TriggerServerEvent('wasabi_police:setGSR', false)
else
GSRData.timer = GSRData.timer - 1
end
end
end)
end
end
elseif Config.GSR.cleanInWater and GSRData?.positive and IsEntityInWater(wsb.cache.ped) then
sleep = 0
if not GSRTextUI then
wsb.showTextUI(Strings.gsr_wash_ui)
GSRTextUI = true
end
if IsControlJustReleased(0, 38) then
wsb.hideTextUI()
if wsb.progressUI({
duration = Config.GSR.timeToClean,
position = 'bottom',
useWhileDead = false,
canCancel = true,
disable = {
car = true,
move = true,
},
anim = {
dict = 'missheist_agency3aig_23',
clip = 'urinal_sink_loop'
},
}, 'progressCircle') then
if GSRData?.positive then GSRData.positive = nil end
GSRLoopBreak = false
GSRLoopRunning = false
GSRTextUI = false
TriggerServerEvent('wasabi_police:setGSR', false)
TriggerEvent('wasabi_bridge:notify', Strings.hands_clean, Strings.hands_clean_desc, 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.cancelled, Strings.cancelled_desc, 'error')
GSRTextUI = false
end
end
elseif GSRTextUI then
wsb.hideTextUI()
GSRTextUI = false
end
Wait(sleep)
end
end)
end
if wsb.framework == 'qb' then
AddStateBagChangeHandler('isLoggedIn', '', function(_bagName, _key, value, _reserved, _replicated)
if value then
wsb.playerData = QBCore.Functions.GetPlayerData()
end
wsb.playerLoaded = value
end)
end
-- Main thread
CreateThread(function()
while not wsb.playerLoaded do Wait(500) end
oldJob = wsb.playerData.job
if Config.UseRadialMenu then
AddRadialItems()
end
if Config.useTarget then
local pdJobs = JobArrayToTarget(Config.policeJobs)
local options = {}
if Config.searchPlayers then
local id = #options + 1
options[id] = {
num = id,
event = 'wasabi_police:searchPlayer',
icon = 'fas fa-magnifying-glass',
label = Strings.search_player,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
end
if Config.seizeCash.enabled then
local id = #options + 1
options[id] = {
num = id,
event = 'wasabi_police:seizeCash',
icon = 'fas fa-sack-dollar',
label = Strings.seize_cash_title,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
end
options[#options + 1] = {
num = #options + 1,
event = 'wasabi_police:checkId',
icon = 'fas fa-id-card',
label = Strings.check_id,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
options[#options + 1] = {
num = #options + 1,
args = { type = 'hard' },
event = 'wasabi_police:handcuffPlayer',
icon = 'fas fa-bandage',
label = Strings.handcuff_hard_player,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
options[#options + 1] = {
num = #options + 1,
args = { type = 'soft' },
event = 'wasabi_police:handcuffPlayer',
icon = 'fas fa-bandage',
label = Strings.handcuff_soft_player,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
options[#options + 1] = {
num = #options + 1,
event = 'wasabi_police:escortPlayer',
icon = 'fas fa-hand-holding-hand',
label = Strings.escort_player,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
options[#options + 1] = {
num = #options + 1,
event = 'wasabi_police:inVehiclePlayer',
icon = 'fas fa-arrow-right-to-bracket',
label = Strings.put_in_vehicle,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
options[#options + 1] = {
num = #options + 1,
event = 'wasabi_police:outVehiclePlayer',
icon = 'fas fa-arrow-right-from-bracket',
label = Strings.take_out_vehicle,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
if Config.TrackingBracelet.enabled then
options[#options + 1] = {
num = #options + 1,
event = 'wasabi_police:trackPlayer',
icon = 'fas fa-map-pin',
label = Strings.tracking_bracelet,
canInteract = function()
if not wsb.isOnDuty() then return false end
return true
end,
job = pdJobs,
groups = pdJobs,
}
end
wsb.target.player({
distance = 2.0,
options = options
})
wsb.target.vehicle({
distance = 2.0,
options = {
{
num = 1,
event = 'wasabi_police:inVehiclePlayer',
icon = 'fas fa-arrow-right-to-bracket',
label = Strings.put_in_vehicle,
job = pdJobs,
groups = pdJobs,
canInteract = function()
if not wsb.isOnDuty() then return false end
return escorting and escorting.active and escorting.target and true or false
end
},
{
num = 2,
event = 'wasabi_police:outVehiclePlayer',
icon = 'fas fa-arrow-right-from-bracket',
label = Strings.take_out_vehicle,
job = pdJobs,
groups = pdJobs,
canInteract = function()
if not wsb.isOnDuty() then return false end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
return player and IsPedInAnyVehicle(GetPlayerPed(player), false) and true or false
end
},
}
})
end
for k, v in pairs(Config.Locations) do
if v.blip.enabled then
CreateBlip(v.blip.coords, v.blip.sprite, v.blip.color, v.blip.string, v.blip.scale, false, 'coords', true)
end
if v?.clockInAndOut?.enabled then
if v.clockInAndOut.target.enabled then
local jobLock = v.clockInAndOut.jobLock and { v.clockInAndOut.jobLock } or Config.policeJobs
if wsb.framework == 'esx' then
for i = 1, #jobLock do
jobLock[#jobLock + 1] = 'off' .. jobLock[i]
end
end
wsb.target.boxZone(k .. '_toggleduty', v.clockInAndOut.target.coords, v.clockInAndOut.target.width,
v.clockInAndOut.target.length, {
heading = v.clockInAndOut.target.heading,
minZ = v.clockInAndOut.target.minZ,
maxZ = v.clockInAndOut.target.maxZ,
job = JobArrayToTarget(jobLock),
options = {
{
event = 'wasabi_police:toggleDuty',
args = k,
icon = 'fa-solid fa-business-time',
label = v.clockInAndOut.target.label,
distance = v.clockInAndOut.target.distance or 2.0,
job = JobArrayToTarget(jobLock),
groups = JobArrayToTarget(jobLock)
}
}
})
else
CreateThread(function()
local textUI
local point = wsb.points.new({
coords = v.clockInAndOut.coords,
distance = v.clockInAndOut.distance,
job = v.clockInAndOut.jobLock or Config.policeJobs,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.clockInAndOut.distance) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(self.job)
if jobName then
hasJob = jobName
elseif wsb.framework == 'esx' then
local pJobs = {}
if type(self.job) == 'table' then
--replace the loop of self.job with new table
for _, v in ipairs(self.job) do
pJobs[#pJobs + 1] = 'off' .. v
end
else
pJobs[#pJobs + 1] = self.job
pJobs[#pJobs + 1] = 'off' .. self.job
end
jobName, jobGrade = wsb.hasGroup(pJobs)
if jobName then hasJob = jobName end
end
if hasJob then
if not textUI then
wsb.showTextUI(v.clockInAndOut.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
TriggerServerEvent('wasabi_police:svToggleDuty', k)
end
end
end,
onExit = function()
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
end)
end
end
if v.bossMenu.enabled then
if v.bossMenu?.target?.enabled then
local pJob, _pGrade = wsb.hasGroup(Config.policeJobs)
if v.bossMenu.jobLock and pJob then
if pJob ~= v.bossMenu.jobLock then pJob = nil end
end
if pJob then
wsb.target.boxZone(k .. '_pdboss', v.bossMenu.target.coords, v.bossMenu.target.width,
v.bossMenu.target.length, {
heading = v.bossMenu.target.heading,
minZ = v.bossMenu.target.minZ,
maxZ = v.bossMenu.target.maxZ,
job = pJob,
options = {
{
event = 'wasabi_police:openBossMenu',
icon = 'fa-solid fa-briefcase',
label = v.bossMenu.target.label,
distance = v.bossMenu.target.distance or 2.0,
job = pJob,
groups = pJob
}
}
})
end
else
CreateThread(function()
local textUI
local point = wsb.points.new({
coords = v.bossMenu.coords,
distance = v.bossMenu.distance,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.bossMenu.distance) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if v?.clockInAndOut?.enabled and wsb.framework == 'qb' then
if not wsb.isOnDuty() then hasJob = nil end
end
if hasJob then
if v.bossMenu.jobLock then
if hasJob == v.bossMenu.jobLock then
if not textUI then
wsb.showTextUI(v.bossMenu.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
wsb.openBossMenu(hasJob)
end
end
else
if not textUI then
wsb.showTextUI(v.bossMenu.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
wsb.openBossMenu(hasJob)
end
end
end
end,
onExit = function()
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
end)
end
end
if v.cloakroom.enabled then
CreateThread(function()
local textUI
local point = wsb.points.new({
coords = v.cloakroom.coords,
distance = v.cloakroom.range,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.cloakroom.range) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if v?.clockInAndOut?.enabled and wsb.framework == 'qb' then
if not wsb.isOnDuty() then hasJob = nil end
end
if hasJob and v.cloakroom.jobLock then
if hasJob == v.cloakroom.jobLock then
if not textUI then
wsb.showTextUI(v.cloakroom.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
openOutfits(k)
end
end
elseif hasJob and not v.cloakroom.jobLock then
if not textUI then
wsb.showTextUI(v.cloakroom.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
openOutfits(k)
end
end
end,
onExit = function()
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
end)
end
if v.personalLocker.enabled then
if v.personalLocker.target.enabled then
if wsb.framework == 'esx' then
for i = 1, #Config.policeJobs do
Config.policeJobs[#Config.policeJobs + 1] = 'off' .. Config.policeJobs[i]
end
end
wsb.target.boxZone(k .. '_personallocker', v.personalLocker.target.coords, v.personalLocker.target.width,
v.personalLocker.target.length, {
heading = v.personalLocker.target.heading,
minZ = v.personalLocker.target.minZ,
maxZ = v.personalLocker.target.maxZ,
job = JobArrayToTarget(Config.policeJobs),
options = {
{
event = 'wasabi_police:personalLocker',
icon = 'fa-solid fa-archive',
label = v.personalLocker.target.label,
distance = v.personalLocker.target.distance or 2.0,
job = JobArrayToTarget(Config.policeJobs),
groups = JobArrayToTarget(Config.policeJobs),
station = k
}
}
})
else
CreateThread(function()
local textUI
local point = wsb.points.new({
coords = v.personalLocker.coords,
distance = v.personalLocker.range,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.personalLocker.range) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if v?.clockInAndOut?.enabled and wsb.framework == 'qb' then
if not wsb.isOnDuty() then hasJob = nil end
end
if hasJob and v.personalLocker.jobLock then
if hasJob == v.personalLocker.jobLock then
if not textUI then
wsb.showTextUI(v.personalLocker.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
OpenPersonalStash(k)
end
end
elseif hasJob and not v.personalLocker.jobLock then
if not textUI then
wsb.showTextUI(v.personalLocker.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
OpenPersonalStash(k)
end
end
end,
onExit = function()
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
end)
end
end
if v.evidenceLocker and v.evidenceLocker.enabled then
if v.evidenceLocker.target.enabled then
if wsb.framework == 'esx' then
for i = 1, #Config.policeJobs do
Config.policeJobs[#Config.policeJobs + 1] = 'off' .. Config.policeJobs[i]
end
end
wsb.target.boxZone(k .. 'evidencelocker', v.evidenceLocker.target.coords, v.evidenceLocker.target.width,
v.evidenceLocker.target.length, {
heading = v.evidenceLocker.target.heading,
minZ = v.evidenceLocker.target.minZ,
maxZ = v.evidenceLocker.target.maxZ,
job = JobArrayToTarget(Config.policeJobs),
options = {
{
event = 'wasabi_police:evidenceLocker',
icon = 'fa-solid fa-archive',
label = v.evidenceLocker.target.label,
distance = v.evidenceLocker.target.distance or 2.0,
job = JobArrayToTarget(Config.policeJobs),
groups = JobArrayToTarget(Config.policeJobs),
station = k
}
}
})
else
CreateThread(function()
local textUI
local point = wsb.points.new({
coords = v.evidenceLocker.coords,
distance = v.evidenceLocker.range,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.evidenceLocker.range) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if v?.clockInAndOut?.enabled and wsb.framework == 'qb' then
if not wsb.isOnDuty() then hasJob = nil end
end
if hasJob and v.evidenceLocker.jobLock then
if hasJob == v.evidenceLocker.jobLock then
if not textUI then
wsb.showTextUI(v.evidenceLocker.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
OpenEvidenceLocker(k)
end
end
elseif hasJob and not v.evidenceLocker.jobLock then
if not textUI then
wsb.showTextUI(v.evidenceLocker.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
OpenEvidenceLocker(k)
end
end
end,
onExit = function()
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
end)
end
end
if v.armoury.enabled then
if v.armoury.target.enabled then
if wsb.framework == 'esx' then
for i = 1, #Config.policeJobs do
Config.policeJobs[#Config.policeJobs + 1] = 'off' .. Config.policeJobs[i]
end
end
wsb.target.boxZone(k .. '_armoury', v.armoury.target.coords, v.armoury.target.width,
v.armoury.target.length, {
heading = v.armoury.target.heading,
minZ = v.armoury.target.minZ,
maxZ = v.armoury.target.maxZ,
job = JobArrayToTarget(Config.policeJobs),
options = {
{
event = 'wasabi_police:armouryMenu',
icon = 'fa-solid fa-archive',
label = v.armoury.target.label,
distance = v.armoury.target.distance or 2.0,
job = JobArrayToTarget(Config.policeJobs),
groups = JobArrayToTarget(Config.policeJobs),
station = k,
}
}
})
else
CreateThread(function()
local ped
local textUI
local point = wsb.points.new({
coords = v.armoury.coords,
distance = 30,
onEnter = function(self)
if not ped and v.armoury.ped then
wsb.stream.animDict('mini@strip_club@idles@bouncer@base')
wsb.stream.model(v.armoury.ped, 7500)
ped = CreatePed(28, v.armoury.ped, v.armoury.coords.x, v.armoury.coords.y,
v.armoury.coords
.z,
v.armoury.heading, false, false)
FreezeEntityPosition(ped, true)
SetEntityInvincible(ped, true)
SetBlockingOfNonTemporaryEvents(ped, true)
TaskPlayAnim(ped, 'mini@strip_club@idles@bouncer@base', 'base', 8.0, 0.0, -1, 1, 0, false,
false,
false)
end
end,
nearby = function(self)
if self.currentDistance <= 2 then
if not textUI then
wsb.showTextUI(v.armoury.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
if not wsb.hasGroup(Config.policeJobs) then return end
textUI = nil
wsb.hideTextUI()
armouryMenu(k)
end
elseif self.currentDistance >= 2.2 and textUI then
wsb.hideTextUI()
textUI = nil
end
end,
onExit = function(self)
if textUI then
wsb.hideTextUI()
textUI = nil
end
if ped then
local model = GetEntityModel(ped)
SetModelAsNoLongerNeeded(model)
DeletePed(ped)
SetPedAsNoLongerNeeded(ped)
RemoveAnimDict('mini@strip_club@idles@bouncer@base')
ped = nil
end
end
})
end)
end
end
if v.vehicles.enabled then
CreateThread(function()
local zone = v.vehicles.zone
local textUI
local landPoint = wsb.points.new({
coords = zone.coords,
distance = zone.range,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.vehicles.zone.range) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if v.clockInAndOut.enabled and wsb.framework == 'qb' then
if not wsb.isOnDuty() then hasJob = nil end
end
if hasJob then
if v.vehicles.jobLock and hasJob ~= v.vehicles.jobLock then return end
if not inMenu and not IsPedInAnyVehicle(wsb.cache.ped, false) then
if not textUI then
wsb.showTextUI(zone.label)
textUI = true
end
if IsControlJustReleased(0, 38) then
textUI = nil
wsb.hideTextUI()
openVehicleMenu(k)
end
elseif not inMenu and IsPedInAnyVehicle(wsb.cache.ped, false) then
if not textUI then
textUI = true
wsb.showTextUI(zone.return_label)
end
if IsControlJustReleased(0, 38) then
textUI = nil
wsb.hideTextUI()
if DoesEntityExist(wsb.cache.vehicle) then
DoScreenFadeOut(800)
while not IsScreenFadedOut() do Wait(100) end
SetEntityAsMissionEntity(wsb.cache.vehicle, false, false)
if Config.customCarlock then
local plate = GetVehicleNumberPlateText(wsb.cache.vehicle)
local model = GetEntityModel(wsb.cache.vehicle)
wsb.removeCarKeys(plate, model, wsb.cache.vehicle)
end
if Config.AdvancedParking then
exports['AdvancedParking']:DeleteVehicle(wsb.cache.vehicle, false)
else
DeleteVehicle(wsb.cache.vehicle)
end
DoScreenFadeIn(800)
end
end
end
end
end,
onExit = function(self)
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
local airPoint = wsb.points.new({
coords = v.vehicles.spawn.air.coords,
distance = 10,
nearby = function(self)
if not self.isClosest or (self.currentDistance > v.clockInAndOut.distance) then return end
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if v.clockInAndOut.enabled and wsb.framework == 'qb' then
if not wsb.isOnDuty() then hasJob = nil end
end
if hasJob and IsPedInAnyVehicle(wsb.cache.ped, false) then
if not textUI then
textUI = true
wsb.showTextUI(zone.return_label)
end
if IsControlJustReleased(0, 38) then
textUI = nil
wsb.hideTextUI()
if DoesEntityExist(wsb.cache.vehicle) then
DoScreenFadeOut(800)
while not IsScreenFadedOut() do Wait(100) end
SetEntityAsMissionEntity(wsb.cache.vehicle, false, false)
if Config.customCarlock then
local plate = GetVehicleNumberPlateText(wsb.cache.vehicle)
local model = GetEntityModel(wsb.cache.vehicle)
wsb.removeCarKeys(plate, model, wsb.cache.vehicle)
end
if Config.AdvancedParking then
exports['AdvancedParking']:DeleteVehicle(wsb.cache.vehicle, false)
else
DeleteVehicle(wsb.cache.vehicle)
end
DoScreenFadeIn(800)
end
end
end
end,
onExit = function()
if textUI then
wsb.hideTextUI()
textUI = nil
end
end
})
end)
end
end
end)
local function adjustHeading(entity, degrees)
local currentHeading = GetEntityHeading(entity)
local newHeading = currentHeading + degrees
if newHeading >= 360 then
newHeading = newHeading - 360
elseif newHeading < 0 then
newHeading = newHeading + 360
end
SetEntityHeading(entity, newHeading)
end
-- Radar Post
if Config.RadarPosts and Config.RadarPosts.enabled then
CreateThread(function()
local textUI = false
local previousProp = nil
local setDistance = 1.5
while wsb.playerData?.job == nil do Wait(500) end
while true do
local sleep = 1500
if RadarPostProp then
sleep = 0
if previousProp and previousProp ~= RadarPostProp then
if DoesEntityExist(previousProp) then
SetEntityDrawOutline(previousProp, false)
setDistance = 1.5
DeleteEntity(previousProp)
end
previousProp = RadarPostProp
end
if not DoesEntityExist(RadarPostProp) then
RadarPostProp = nil
if textUI then
wsb.hideTextUI()
setDistance = 1.5
textUI = false
end
else
DisableControlAction(0, 45, true)
DisableControlAction(0, 140, true)
DisableControlAction(0, 177, true)
DisableControlAction(0, 200, true)
DisablePlayerFiring(PlayerId(), true)
if not textUI then
wsb.showTextUI(Strings.ui_radar_post_place)
SetEntityDrawOutline(RadarPostProp, true)
SetEntityDrawOutlineColor(3, 144, 252, 255)
textUI = true
end
local groundPosition = GetCoordsInFrontOfPed(setDistance)
SetEntityCoords(RadarPostProp, groundPosition.x, groundPosition.y, groundPosition.z, false, false,
false, false)
PlaceObjectOnGroundProperly(RadarPostProp)
if IsDisabledControlPressed(0, 45) then -- Rotate
adjustHeading(RadarPostProp, 10)
Wait(10)
end
if IsDisabledControlJustPressed(0, 177) then -- Cancel
SetPauseMenuActive(false)
SetEntityDrawOutline(RadarPostProp, false)
DeleteEntity(RadarPostProp)
RadarPostProp = nil
textUI = false
setDistance = 1.5
wsb.hideTextUI()
end
if IsControlPressed(0, 172) then -- Arrow Up
setDistance = setDistance + 0.1
if setDistance > 10 then setDistance = 10 end
end
if IsControlPressed(0, 173) then -- Arrow Down
setDistance = setDistance - 0.1
if setDistance < 1.5 then setDistance = 1.5 end
end
if IsControlJustPressed(0, 38) and RadarPostProp then
local objectCoords = GetEntityCoords(RadarPostProp)
local objHeading = GetEntityHeading(RadarPostProp)
local model = GetEntityModel(RadarPostProp)
local configIndex = 0
for i = 1, #Config.RadarPosts.options do
if model == Config.RadarPosts.options[i].prop or model == joaat(Config.RadarPosts.options[i].prop) then
configIndex = i
local input = wsb.inputDialog(Strings.new_speed_trap, { Strings.name, Strings
.speed_limit, Strings.detection_radius }, Config.UIColor)
if not input or #input < 3 then
TriggerEvent('wasabi_bridge:notify', Strings.incorrect_input,
Strings.incorrect_input_cancel,
'error')
goto continue
end
input[2] = tonumber(input[2])
input[3] = tonumber(input[3])
if not input[2] or input[2] < 5 then
TriggerEvent('wasabi_bridge:notify', Strings.incorrect_input,
Strings.incorrect_input_speed, 'error')
else
local created = wsb.awaitServerCallback('wasabi_police:addSpeedTrap', objectCoords,
objHeading,
configIndex, input)
if created then
TriggerEvent('wasabi_bridge:notify', Strings.radar_post,
Strings.radar_post_placed,
'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.radar_post,
Strings.radar_post_failed,
'error')
end
end
end
end
:: continue ::
SetEntityDrawOutline(RadarPostProp, false)
DeleteObject(RadarPostProp)
RadarPostProp = nil
textUI = false
setDistance = 1.5
wsb.hideTextUI()
end
end
elseif previousProp then
if DoesEntityExist(previousProp) then
SetEntityDrawOutline(previousProp, false)
DeleteEntity(previousProp)
end
previousProp = nil
end
Wait(sleep)
end
end)
end
-- CCTV Cameras
if Config.CCTVCameras and Config.CCTVCameras.enabled then
CreateThread(function()
local textUI = false
local previousProp = nil
while true do
local sleep = 1500
if CCTVCameraProp then
sleep = 0
if previousProp and previousProp ~= CCTVCameraProp then
if DoesEntityExist(previousProp) then
SetEntityDrawOutline(previousProp, false)
DeleteEntity(previousProp)
end
previousProp = CCTVCameraProp
end
if not DoesEntityExist(CCTVCameraProp) then
CCTVCameraProp = nil
if textUI then
wsb.hideTextUI()
textUI = false
end
else
DisableControlAction(0, 45, true)
DisableControlAction(0, 140, true)
DisableControlAction(0, 177, true)
DisableControlAction(0, 200, true)
DisablePlayerFiring(PlayerId(), true)
if not textUI then
wsb.showTextUI('E - Place \n Q - Rotate \n BACK - Cancel')
SetEntityDrawOutline(CCTVCameraProp, true)
SetEntityDrawOutlineColor(3, 144, 252, 255)
textUI = true
end
local flag = 511
local hit, entityHit, endCoords, distance, lastEntity, entityType
local playerCoords = GetEntityCoords(wsb.cache.ped)
hit, entityHit, endCoords = RayCastFromCam(flag, 4, 25)
distance = #(playerCoords - endCoords)
if entityHit ~= 0 and entityHit ~= lastEntity then
local success, result = pcall(GetEntityType, entityHit)
entityType = success and result or 0
end
if entityType == 0 then
local _flag = flag == 511 and 26 or 511
local _hit, _entityHit, _endCoords = RayCastFromCam(_flag, 4, 25)
local _distance = #(playerCoords - _endCoords)
if _distance < distance then
flag, hit, entityHit, endCoords, distance = _flag, _hit, _entityHit, _endCoords, _distance
if entityHit ~= 0 then
local success, result = pcall(GetEntityType, entityHit)
entityType = success and result or 0
end
end
end
SetEntityCoords(CCTVCameraProp, endCoords.x, endCoords.y, endCoords.z, false, false,
false, false)
if IsDisabledControlPressed(0, 44) then -- Rotate
adjustHeading(CCTVCameraProp, 5)
Wait(10)
end
if IsDisabledControlJustPressed(0, 177) then -- Cancel
SetPauseMenuActive(false)
SetEntityDrawOutline(CCTVCameraProp, false)
DeleteEntity(CCTVCameraProp)
CCTVCameraProp = nil
textUI = false
wsb.hideTextUI()
end
if IsControlJustPressed(0, 38) and CCTVCameraProp then
local objectCoords = GetEntityCoords(CCTVCameraProp)
local objHeading = GetEntityHeading(CCTVCameraProp)
local model = GetEntityModel(CCTVCameraProp)
local configIndex = 0
for i = 1, #Config.CCTVCameras.options do
if model == Config.CCTVCameras.options[i].prop or model == joaat(Config.CCTVCameras.options[i].prop) then
configIndex = i
local input = wsb.inputDialog(Strings.new_cctv, { Strings.name }, Config.UIColor)
if not input or not input[1] then
TriggerEvent('wasabi_bridge:notify', Strings.incorrect_input,
Strings.incorrect_input_cancel,
'error')
goto continue
end
local created = wsb.awaitServerCallback('wasabi_police:addccctvCamera', objectCoords,
objHeading,
configIndex, input)
if created then
TriggerEvent('wasabi_bridge:notify', Strings.cctv,
Strings.cctv_placed,
'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.cctv,
Strings.cctv_failed,
'error')
end
end
end
:: continue ::
SetEntityDrawOutline(CCTVCameraProp, false)
DeleteObject(CCTVCameraProp)
CCTVCameraProp = nil
textUI = false
wsb.hideTextUI()
end
end
elseif previousProp then
if DoesEntityExist(previousProp) then
SetEntityDrawOutline(previousProp, false)
DeleteEntity(previousProp)
end
previousProp = nil
end
Wait(sleep)
end
end)
end
function CameraThread()
CreateThread(function()
local count = 0
while CreatedCamera do
local sleep = 5
SetTimecycleModifier("scanline_cam_cheap")
SetTimecycleModifierStrength(1.5)
DisplayRadar(false)
DisableAllControlActions(0)
if Config.CCTVCameras and next(Config.CCTVCameras.EnabledKeys) then
for _, keys in pairs(Config.CCTVCameras.EnabledKeys) do
EnableControlAction(0, keys, true)
end
end
-- CLOSE CAMERAS
if IsControlJustPressed(1, 177) then
CloseCamera()
end
if LocalPlayer.state.dead then
CloseCamera()
end
-- CAMERA ROTATION CONTROLS
CameraRotation()
if CameraIndex and CameraIndex.destory then
CloseCamera()
end
count = count + sleep
if count > 1000 then
count = 0
SendNUIMessage({
action = 'updateCameraTime',
time = string.format("%02d:%02d", GetClockHours(), GetClockMinutes())
})
end
Wait(sleep)
end
end)
end
-- Prop placement loop
CreateThread(function()
while wsb.playerData?.job == nil do Wait(500) end
local movingProp = false
function isEntityProp(ent)
local model = GetEntityModel(ent)
for id, data in ipairs(Config.Props) do
if model == data.model then return true, id end
end
end
while true do
local wait = 2500
local hasJob
local jobName, jobGrade = wsb.hasGroup(Config.policeJobs)
if jobName then hasJob = jobName end
if wsb.framework == 'qb' then
while not wsb.playerLoaded do Wait(500) end
if not wsb.isOnDuty() then hasJob = nil end
end
local ped = wsb.cache.ped
local pcoords = GetEntityCoords(ped)
if hasJob and not IsPedInAnyVehicle(ped, false) then
if (not movingProp) then
local objPool = GetGamePool('CObject')
for i = 1, #objPool do
local ent = objPool[i]
local prop, index = isEntityProp(ent)
if (prop) then
local dist = #(GetEntityCoords(ent) - pcoords)
if dist < 1.75 then
wait = 0
ShowHelpNotification(Strings.prop_help_text)
if IsControlJustPressed(1, 51) then
RequestNetworkControl(ent)
movingProp = ent
local c, r = vec3(0.0, 1.0, -1.0), vec3(0.0, 0.0, 0.0)
AttachEntityToEntity(movingProp, ped, ped, c.x, c.y, c.z, r.x, r.y, r.z, false, false,
false, false, 2, true)
break
elseif IsControlJustPressed(1, 47) then
RequestNetworkControl(ent)
DeleteObject(ent)
break
end
end
end
end
else
wait = 0
ShowHelpNotification(Strings.prop_help_text2)
if IsControlJustPressed(1, 51) then
RequestNetworkControl(movingProp)
DetachEntity(movingProp, false, false)
PlaceObjectOnGroundProperly(movingProp)
FreezeEntityPosition(movingProp, true)
movingProp = false
end
end
end
Wait(wait)
end
end)
-- Spike strip functionality
if Config.spikeStripsEnabled then
CreateThread(function()
local spikes = `p_ld_stinger_s`
while true do
local sleep = 1500
local coords = GetEntityCoords(wsb.cache.ped)
if not IsPedInAnyVehicle(wsb.cache.ped, false) then
sleep = 1500
else
local obj = GetClosestObjectOfType(coords.x, coords.y, coords.z, 100.0, spikes, false, false, false)
if DoesEntityExist(obj) then
sleep = 0
local vehicle = GetVehiclePedIsIn(wsb.cache.ped, false)
local objCoords = GetEntityCoords(obj)
local dist = #(vec3(coords.x, coords.y, coords.z) - vec3(objCoords.x, objCoords.y, objCoords.z))
if dist < 3.0 then
for i = 0, 7 do
if not IsVehicleTyreBurst(vehicle, i, false) then
SetVehicleTyreBurst(vehicle, i, true, 1000)
end
end
sleep = 1500
end
end
end
Wait(sleep)
end
end)
end
if Config.tackle.enabled then
RegisterCommand('tacklePlayer', function()
attemptTackle()
end)
TriggerEvent('chat:removeSuggestion', '/tacklePlayer')
RegisterKeyMapping('tacklePlayer', Strings.key_map_tackle, 'keyboard', Config.tackle.hotkey)
end
if Config.handcuff.hotkey then
RegisterCommand('cuffPlayer', function()
if not wsb.hasGroup(Config.policeJobs) then return end
TriggerEvent('wasabi_police:handcuffPlayer')
end)
TriggerEvent('chat:removeSuggestion', '/cuffPlayer')
RegisterKeyMapping('cuffPlayer', Strings.key_map_cuff, 'keyboard', Config.handcuff.hotkey)
end
if Config.GSR.enabled and Config.GSR.command then
RegisterCommand(Config.GSR.command, function()
GSRTestNearbyPlayer()
end)
end
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() ~= resourceName or not wsb?.playerLoaded then return end
PersistentCuffCheck()
if Config.Jail.BuiltInPrison.enabled and Config.Jail.BuiltInPrison.persistentJail then
CheckJailTime()
end
if not Config.UseRadialMenu then return end
AddRadialItems()
end)
AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
DeleteAllSpeedTraps()
end)
AddEventHandler('wasabi_police:personalLocker', function(data)
OpenPersonalStash(data.station)
end)
AddEventHandler('wasabi_police:evidenceLocker', function(data)
OpenEvidenceLocker(data.station)
end)
AddEventHandler('wasabi_police:armouryMenu', function(data)
armouryMenu(data.station)
end)
RegisterNetEvent('wasabi_police:alertDialog', function(data)
data.color = Config.UIColor
wsb.alertDialog(data)
end)
RegisterNetEvent('wasabi_police:initSpeedTraps', function(traps)
SpeedTraps = traps
for i = 1, #SpeedTraps do
local trap = SpeedTraps[i]
trap.point = AddSpeedTrapPoint(trap, i)
if Config.RadarPosts.blip.enabled then
trap.coords = vec3(trap.coords.x, trap.coords.y, trap.coords.z)
trap.blip = CreateBlip(trap.coords, Config.RadarPosts.blip.sprite, Config.RadarPosts.blip.color,
Config.RadarPosts.blip.label, Config.RadarPosts.blip.scale, false, 'coords', Config.RadarPosts.blip
.short)
end
end
end)
RegisterNetEvent('wasabi_police:initCCTVCameras', function(cameras)
CCTVCameras = cameras
for i = 1, #CCTVCameras do
local camera = CCTVCameras[i]
camera.point = AddCCTVCameraPoint(camera, i)
if Config.CCTVCameras.blip.enabled then
camera.coords = vec3(camera.coords.x, camera.coords.y, camera.coords.z)
camera.blip = CreateBlip(camera.coords, Config.CCTVCameras.blip.sprite, Config.CCTVCameras.blip.color,
Config.CCTVCameras.blip.label, Config.CCTVCameras.blip.scale, false, 'coords', Config.CCTVCameras.blip
.short)
end
end
end)
RegisterNetEvent('wasabi_police:addNewSpeedTrap', function(speedTrap)
local tblKey = #SpeedTraps + 1
SpeedTraps[tblKey] = speedTrap
SpeedTraps[tblKey].point = AddSpeedTrapPoint(speedTrap, tblKey)
if Config.RadarPosts.blip.enabled then
SpeedTraps[tblKey].blip = CreateBlip(vec3(speedTrap.coords.x, speedTrap.coords.y, speedTrap.coords.z),
Config.RadarPosts.blip.sprite, Config.RadarPosts.blip.color,
Config.RadarPosts.blip.label, Config.RadarPosts.blip.scale, false, 'coords', Config.RadarPosts.blip.short)
end
end)
RegisterNetEvent('wasabi_police:removeSpeedTrap', function(id)
if type(id) == 'table' then
TriggerServerEvent('wasabi_police:removeSpeedTrap', id.id)
return
end
local newTraps = {}
for i = 1, #SpeedTraps do
if SpeedTraps[i].id == id then
if SpeedTraps[i].point then
SpeedTraps[i].point:remove()
end
if SpeedTraps[i].object then
DeleteEntity(SpeedTraps[i].object)
end
if SpeedTraps[i].blip then
RemoveBlip(SpeedTraps[i].blip)
end
else
newTraps[#newTraps + 1] = SpeedTraps[i]
end
end
SpeedTraps = newTraps
ClosestSpeedTrap = nil
end)
RegisterNetEvent('wasabi_police:repairCCTVCamera', function(data)
local camera = GetCCTVCameraById(data.id)
if not camera then return end
if not ClosestCCTVCamera or (CCTVCameras[ClosestCCTVCamera] and CCTVCameras[ClosestCCTVCamera].id ~= data.id) then
TriggerEvent('wasabi_bridge:notify', Strings.cctv, Strings.cctv_not_closest, 'info')
return
end
if not camera.destory then
TriggerEvent('wasabi_bridge:notify', Strings.cctv, Strings.cctv_not_broken, 'info')
return
end
if camera.object then
local maxHealth = GetEntityMaxHealth(camera.object)
SetEntityHealth(camera.object, maxHealth)
end
local repaired = wsb.awaitServerCallback('wasabi_police:repairCCTVCameraById', data.id)
if repaired then
TriggerEvent('wasabi_bridge:notify', Strings.cctv, Strings.cctv_repaired, 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.cctv, Strings.cctv_repair_failed, 'error')
end
end)
RegisterNetEvent('wasabi_police:updateCCTVCameraRepair', function(id, destroy)
local camera = GetCCTVCameraById(id)
if not camera then return end
camera.destory = destroy
end)
RegisterNetEvent('wasabi_police:addNewCCTVCamera', function(cctv)
local tblKey = #CCTVCameras + 1
CCTVCameras[tblKey] = cctv
CCTVCameras[tblKey].point = AddCCTVCameraPoint(cctv, tblKey)
if Config.CCTVCameras.blip.enabled then
CCTVCameras[tblKey].blip = CreateBlip(vec3(cctv.coords.x, cctv.coords.y, cctv.coords.z),
Config.CCTVCameras.blip.sprite, Config.CCTVCameras.blip.color,
Config.CCTVCameras.blip.label, Config.CCTVCameras.blip.scale, false, 'coords', Config.CCTVCameras.blip.short)
end
end)
RegisterNetEvent('wasabi_police:removeCCTVCamera', function(id)
if type(id) == 'table' then
TriggerServerEvent('wasabi_police:removeCCTVCamera', id.id)
return
end
local newCameras = {}
for i = 1, #CCTVCameras do
if CCTVCameras[i].id == id then
if CCTVCameras[i].point then
CCTVCameras[i].point:remove()
end
if CCTVCameras[i].object then
DeleteEntity(CCTVCameras[i].object)
end
if CCTVCameras[i].blip then
RemoveBlip(CCTVCameras[i].blip)
end
else
newCameras[#newCameras + 1] = CCTVCameras[i]
end
end
CCTVCameras = newCameras
ClosestCCTVCamera = nil
end)
--Update Cop Counter
RegisterNetEvent('wasabi_bridge:setJob', function(JobInfo)
if not oldJob then
oldJob = JobInfo
return
end
local function isInList(str, tbl)
for _, value in ipairs(tbl) do
if value == str then
return true
end
end
return false
end
if isInList(oldJob.name, Config.policeJobs) and not isInList(JobInfo.name, Config.policeJobs) then
TriggerServerEvent('wasabi_police:addPoliceCount', false)
oldJob = JobInfo
if Config.UseRadialMenu then
RemoveRadialItems()
end
return
end
if not isInList(oldJob.name, Config.policeJobs) and isInList(JobInfo.name, Config.policeJobs) then
if wsb.isOnDuty() then
TriggerServerEvent('wasabi_police:addPoliceCount', true)
end
oldJob = JobInfo
if Config.UseRadialMenu then
AddRadialItems()
end
return
end
if oldJob.name == JobInfo.name and isInList(JobInfo.name, Config.policeJobs) then
if not isInList(JobInfo.name, Config.policeJobs) then return end
if wsb.framework == 'qb' then
if oldJob.onduty == JobInfo.onduty then return end
if oldJob.onduty and not JobInfo.onduty then
TriggerServerEvent('wasabi_police:addPoliceCount', false)
if Config.UseRadialMenu then
RemoveRadialItems()
end
elseif not oldJob.onduty and JobInfo.onduty then
TriggerServerEvent('wasabi_police:addPoliceCount', true)
if Config.UseRadialMenu then
AddRadialItems()
end
end
end
end
oldJob = JobInfo
end)
RegisterCommand('pdJobMenu', function()
openJobMenu()
end, false)
AddEventHandler('wasabi_police:pdJobMenu', function()
openJobMenu()
end)
TriggerEvent('chat:removeSuggestion', '/pdJobMenu')
RegisterKeyMapping('pdJobMenu', Strings.key_map_job, 'keyboard', Config.jobMenu)
if Config.Jail.enabled and Config.Jail.jail == 'qb' then
RegisterNetEvent('wasabi_police:qbPrisonJail', function(time)
if isCuffed then uncuffed() end
if escorted and escorted.active then
local ped = PlayerPedId()
TriggerServerEvent('wasabi_police:escortPlayerStop', escorted.pdId, true)
escorted.active = nil
escorted.pdId = nil
DetachEntity(ped, true, false)
end
TriggerEvent('prison:client:Enter', time)
end)
end
function CheckJailTime()
if not Config.Jail.BuiltInPrison.persistentJail then return end
while not wsb?.playerLoaded or not wsb?.playerData do Wait(1000) end
JailTime = false
if wsb.framework == 'esx' then
JailTime = wsb.awaitServerCallback('wasabi_police:jailCheck')
elseif wsb.framework == 'qb' then
JailTime = wsb.playerData.metadata.injail or false
end
if JailTime ~= 0 then
TriggerServerEvent('wasabi_police:server:sendToJail', nil, JailTime)
end
end
local function inPrison(time)
InJail, JailTime = true, time
CreateThread(function()
while JailTime > 0 and InJail do
SendNUIMessage({
action = 'jailCounter',
header = Strings.jail_countdown_header,
sentence = Strings.jail_countdown_sentence:format(JailTime),
color = Config.JailUIColor
})
Wait(60000) -- 1 minute
if JailTime > 0 and InJail then
JailTime -= 1
if JailTime <= 0 then
JailTime = 0
SendNUIMessage({ action = 'jailCounter' })
TriggerEvent('wasabi_bridge:notify', Strings.jail_time_up, Strings.jail_time_up_desc, 'success')
end
TriggerServerEvent("wasabi_police:setJailStatus", JailTime)
end
end
end)
end
RegisterNetEvent('wasabi_police:jailPlayer', function(time)
DoScreenFadeOut(500)
while not IsScreenFadedOut() do
Wait(10)
end
local randomStartPosition = Config.Jail.BuiltInPrison.spawn[math.random(1, #Config.Jail.BuiltInPrison.spawn)]
SetEntityCoords(wsb.cache.ped, randomStartPosition.coords.x, randomStartPosition.coords.y,
randomStartPosition.coords.z - 0.9, false, false, false, false)
SetEntityHeading(wsb.cache.ped, randomStartPosition.coords.w)
Wait(500)
DoScreenFadeIn(500)
TriggerEvent('wasabi_police:changeClothes', Config.Jail.BuiltInPrison.jailOutfit)
inPrison(time)
end)
RegisterNetEvent('wasabi_police:releaseFromJail', function()
DoScreenFadeOut(500)
while not IsScreenFadedOut() do
Wait(10)
end
InJail = false
JailTime = 0
SetEntityCoords(wsb.cache.ped, Config.Jail.BuiltInPrison.release.x, Config.Jail.BuiltInPrison.release.y,
Config.Jail.BuiltInPrison.release.z - 0.9, false, false, false, false)
SetEntityHeading(wsb.cache.ped, Config.Jail.BuiltInPrison.release.w)
TriggerEvent('wasabi_police:changeClothes', 'civ_wear')
DoScreenFadeIn(500)
Wait(500)
end)
if wsb.framework == 'qb' then -- QBCore Compatibility
local checkIfDead = function(id)
local isDead = wsb.awaitServerCallback('wasabi_police:isPlayerDead', id)
return isDead
end
RegisterNetEvent('police:client:RobPlayer', function()
local ped = wsb.cache.ped
local coords = GetEntityCoords(ped)
local closestPlayer = wsb.getClosestPlayer(coords, 2.5, false)
if closestPlayer then
local targetPed = GetPlayerPed(closestPlayer)
local targetId = GetPlayerServerId(closestPlayer)
if IsEntityPlayingAnim(targetPed, 'missminuteman_1ig_2', 'handsup_base', 3) or IsEntityPlayingAnim(targetPed, 'mp_arresting', 'idle', 3) or checkIfDead(targetId) then
if wsb.progressUI({
duration = math.random(5000, 7000),
label = Strings.robbing_player,
position = 'bottom',
useWhileDead = false,
canCancel = true,
disable = {
car = true,
move = true,
combat = true,
},
anim = {
dict = 'random@shop_robbery',
clip = 'robbery_action_b'
},
}, 'progressCircle') then
wsb.inventory.openPlayerInventory(targetId)
else
TriggerEvent('wasabi_bridge:notify', Strings.cancelled_action, Strings.cancelled_action_desc, 'error')
end
end
else
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
end
end)
RegisterNetEvent('police:client:CuffPlayerSoft', function()
TriggerEvent('wasabi_police:handcuffPlayer')
end)
RegisterNetEvent('police:client:PutPlayerInVehicle', function()
TriggerEvent('wasabi_police:inVehiclePlayer')
end)
RegisterNetEvent('police:client:SetPlayerOutVehicle', function()
TriggerEvent('wasabi_police:outVehiclePlayer')
end)
RegisterNetEvent('police:client:EscortPlayer', function()
TriggerEvent('wasabi_police:escortPlayer')
end)
RegisterNetEvent('police:client:SearchPlayer', function()
TriggerEvent('wasabi_police:searchPlayer')
end)
-- QB-Radialmenu Object Spawn compatibility
if GetResourceState('qb-radialmenu') == 'started' then
local function SpawnProp(prop)
local x, y, z = table.unpack(GetOffsetFromEntityInWorldCoords(wsb.cache.ped, 0.0, 2.0, 0.55))
local obj = CreateObjectNoOffset(prop.model, x, y, z, true, false, false)
SetEntityHeading(obj, GetEntityHeading(wsb.cache.ped))
PlaceObjectOnGroundProperly(obj)
if prop.freeze ~= false then
FreezeEntityPosition(obj, true)
end
end
RegisterNetEvent('police:client:spawnCone', function()
SpawnProp(Config.Objects.cone)
end)
RegisterNetEvent('police:client:spawnBarrier', function()
SpawnProp(Config.Objects.barrier)
end)
RegisterNetEvent('police:client:spawnRoadSign', function()
SpawnProp(Config.Objects.roadsign)
end)
RegisterNetEvent('police:client:spawnTent', function()
SpawnProp(Config.Objects.tent)
end)
RegisterNetEvent('police:client:spawnLight', function()
SpawnProp(Config.Objects.light)
end)
RegisterNetEvent('police:client:SpawnSpikeStrip', function()
SpawnProp(Config.Objects.spikeStrip)
end)
end
end
if Config.billingSystem == 'qb' then
RegisterNetEvent('wasabi_police:sendQBEmail', function(data)
TriggerServerEvent('qb-phone:server:sendNewMail', data)
end)
end
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not wsb then return print((Strings.no_wsb):format(GetCurrentResourceName())) end
CreateBlip = function(output, sprite, color, text, scale, flash, type, short)
type = type or 'coords'
local blip
if type == 'coords' then
local x, y, z = table.unpack(output)
blip = AddBlipForCoord(x, y, z)
elseif type == 'entity' then
blip = AddBlipForEntity(output)
end
SetBlipSprite(blip, sprite)
SetBlipDisplay(blip, 4)
SetBlipScale(blip, scale)
SetBlipColour(blip, color)
SetBlipFlashes(blip, flash)
SetBlipAsShortRange(blip, short)
local blipStr = ('police_%s'):format(tostring(blip))
AddTextEntry(blipStr, text)
BeginTextCommandSetBlipName(blipStr)
EndTextCommandSetBlipName(blip)
return blip
end
local exportQBHandler = function(exportName, func)
AddEventHandler(('__cfx_export_qb-policejob_%s'):format(exportName), function(setCB)
setCB(func)
end)
end
local firstToUpper = function(str)
return (str:gsub('^%l', string.upper))
end
local addCommas = function(n)
return tostring(math.floor(n)):reverse():gsub('(%d%d%d)', '%1,')
:gsub(',(%-?)$', '%1'):reverse()
end
function RequestNetworkControl(entity)
NetworkRequestControlOfEntity(entity)
local timeout = 2000
while timeout > 0 and not NetworkHasControlOfEntity(entity) do
NetworkRequestControlOfEntity(entity)
Wait(100)
timeout = timeout - 100
end
SetEntityAsMissionEntity(entity, true, true)
timeout = 2000
while timeout > 0 and not IsEntityAMissionEntity(entity) do
SetEntityAsMissionEntity(entity, true, true)
Wait(100)
timeout = timeout - 100
end
return NetworkHasControlOfEntity(entity)
end
function GetCoordsInFrontOfPed(distance)
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local forward = GetEntityForwardVector(ped)
return coords + (forward * distance)
end
JobArrayToTarget = function(tb)
local data = {}
for i = 1, #tb do
data[tb[i]] = 0
end
return data
end
function PersistentCuffCheck()
if not Config.handcuff.persistentCuff then return end
while not wsb?.playerLoaded or not wsb?.playerData do Wait(1000) end
local isPlayerCuffed = false
if wsb.framework == 'esx' then
isPlayerCuffed = wsb.awaitServerCallback('wasabi_police:loadCuffCheck')
elseif wsb.framework == 'qb' then
isPlayerCuffed = wsb.playerData.metadata.ishandcuffed and true or false
if isPlayerCuffed then
isPlayerCuffed = isPlayerCuffed and not (wsb.playerData.metadata.isziptied and true or false) or false
end
end
if isPlayerCuffed then
while not DoesEntityExist(PlayerPedId()) do Wait(1000) end
handcuffed(Config.handcuff.defaultCuff)
TriggerEvent('wasabi_bridge:notify', Strings.cuffed_last_online, Strings.cuffed_last_online_desc, 'info')
end
end
function InitializeSpeedTraps()
local speedTraps = wsb.awaitServerCallback('wasabi_police:getSpeedTraps')
if not speedTraps or not next(speedTraps) then return {} end
for i = 1, #speedTraps do
local trap = speedTraps[i]
trap.point = AddSpeedTrapPoint(trap, i)
if Config.RadarPosts.blip.enabled then
trap.blip = CreateBlip(vec3(trap.coords.x, trap.coords.y, trap.coords.z), Config.RadarPosts.blip.sprite,
Config.RadarPosts.blip.color, Config.RadarPosts.blip.label, Config.RadarPosts.blip.scale, false, 'coords',
Config.RadarPosts.blip.short)
end
end
return speedTraps
end
function ConvertToRealSpeed(speed)
if Config.measurementSystem == 'kmh' then
return speed / 0.27778
else
return speed / 0.44704
end
end
RevokeWeaponLicense = function(id, license)
if not wsb.hasGroup(Config.policeJobs) then return end
return wsb.awaitServerCallback('wasabi_police:revokeLicense', id, license)
end
GiveWeaponLicense = function(id)
if not wsb.hasGroup(Config.policeJobs) then return end
local granted = wsb.awaitServerCallback('wasabi_police:grantLicense', id)
if granted then
TriggerEvent('wasabi_bridge:notify', Strings.license_granted, (Strings.license_granted_desc):format(granted, id))
else
TriggerEvent('wasabi_bridge:notify', Strings.failed, Strings.license_alr_granted)
end
end
GetVehicleInDirection = function()
local coords = GetEntityCoords(wsb.cache.ped)
local inDirection = GetOffsetFromEntityInWorldCoords(wsb.cache.ped, 0.0,
5.0,
0.0)
local rayHandle = StartExpensiveSynchronousShapeTestLosProbe(coords.x,
coords.y, coords.z, inDirection.x, inDirection.y, inDirection.z, 10, wsb.cache.ped, 0)
local numRayHandle, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle)
if hit == 1 and GetEntityType(entityHit) == 2 then
local entityCoords = GetEntityCoords(entityHit)
return entityHit, entityCoords
end
return nil
end
ShowHelpNotification = function(msg, thisFrame, beep, duration)
AddTextEntry('HelpNotification', msg)
if thisFrame then
DisplayHelpTextThisFrame('HelpNotification', false)
else
if beep == nil then beep = true end
BeginTextCommandDisplayHelp('HelpNotification')
EndTextCommandDisplayHelp(0, false, beep, duration or -1)
end
end
IsHandcuffed = function()
return isCuffed
end
exports('IsHandcuffed', IsHandcuffed)
exportQBHandler('IsHandcuffed', IsHandcuffed)
openOutfits = function(station)
if deathCheck() or isCuffed then return end
if Config.skinScript == 'qb' then
TriggerEvent('qb-clothing:client:openMenu')
else
local data = Config.Locations[station].cloakroom.uniforms
local Options = {
{
title = Strings.civilian_wear,
description = '',
arrow = false,
event = 'wasabi_police:changeClothes',
args = 'civ_wear'
}
}
for i = 1, #data do
if data[i].minGrade then
local _job, grade = wsb.hasGroup(Config.policeJobs)
if grade and grade >= data[i].minGrade then
Options[#Options + 1] = {
title = data[i].label,
description = '',
arrow = false,
event = 'wasabi_police:changeClothes',
args = { male = data[i].male, female = data[i].female }
}
end
else
Options[#Options + 1] = {
title = data[i].label,
description = '',
arrow = false,
event = 'wasabi_police:changeClothes',
args = { male = data[i].male, female = data[i].female }
}
end
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_cloakroom',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.cloakroom,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_cloakroom',
color = Config.UIColor,
title = Strings.cloakroom,
options = Options
})
end
end
end
exports('openOutfits', openOutfits)
-- Cloakroom Standalone
function RequestCivilianOutfit()
wsb.serverCallback('wasabi_police:requestCivilianOutfit', function(outfit)
if not outfit then return end
if outfit.clothing and next(outfit.clothing) then
for _, clothingData in pairs(outfit.clothing) do
SetPedComponentVariation(wsb.cache.ped, clothingData.component, clothingData.drawable,
clothingData.texture,
0)
end
end
if not outfit.props or not next(outfit.props) then return end
for _, propData in pairs(outfit.props) do
SetPedPropIndex(wsb.cache.ped, propData.component, propData.drawable, propData.texture, true)
end
end)
end
function SaveCivilianOutfit()
local civilianOutfit = { clothing = {}, props = {} }
for i = 0, 11 do
local drawable = GetPedDrawableVariation(wsb.cache.ped, i)
local texture = GetPedTextureVariation(wsb.cache.ped, i)
civilianOutfit.clothing[#civilianOutfit.clothing + 1] = {
component = i,
drawable = drawable,
texture = texture
}
end
for i = 0, 7 do
local drawable = GetPedPropIndex(wsb.cache.ped, i)
local texture = GetPedPropTextureIndex(wsb.cache.ped, i)
civilianOutfit.props[#civilianOutfit.props + 1] = {
component = i,
drawable = drawable,
texture = texture
}
end
TriggerServerEvent('wasabi_police:saveOutfit', civilianOutfit)
end
function FineSuspect(targetId)
if not next(Config.billingData.fines) then return end
local fineData = {}
for id, fine in ipairs(Config.billingData.fines) do
fineData[#fineData + 1] = { label = fine.label, value = id }
end
local inputData = {
{ type = 'input', label = Strings.description_invoice, description = Strings.description_invoice_desc, required = false, min = 4, max = 50 },
{ type = 'multi-select', label = Strings.tickets_invoice, options = fineData, description = Strings.tickets_invoice_desc, required = true, searchable = true, clearable = true }
}
local input = wsb.inputDialog(Strings.fine_id_invoice .. ' ' .. targetId, inputData, Config.UIColor)
if not input then return end
if not input[1] or not input[2] then return end
local fineAmount, label = 0, '**' .. Strings.description_invoice .. '** \n' .. input[1]
label = label .. ' \n\n**' .. Strings.offenses_invoice .. '** \n '
for _, selectedFine in ipairs(input[2]) do
selectedFine = tonumber(selectedFine)
fineAmount = fineAmount + Config.billingData.fines[selectedFine].amount
label = label .. '- ' .. Config.billingData.fines[selectedFine].label .. ' \n'
end
label = label .. ' \n\n**' .. Strings.invoice_amount .. '** \n' .. Strings.currency .. addCommas(fineAmount)
TriggerServerEvent('wasabi_police:fineSuspect', targetId, fineAmount, label)
end
function RemoveClothingProps()
SetPedPropIndex(wsb.cache.ped, 0, -1, 0, true)
for i = 0, 11 do
ClearPedProp(wsb.cache.ped, i)
end
for i = 0, 7 do
ClearPedProp(wsb.cache.ped, i)
end
end
escortPlayer = function(targetId)
if deathCheck() or isCuffed then return end
local targetCuffed = wsb.awaitServerCallback('wasabi_police:isCuffed', targetId)
local deathCheck = deathCheck(targetId)
if IsPedInAnyVehicle(GetPlayerPed(GetPlayerFromServerId(targetId)), false) then
TriggerEvent('wasabi_bridge:notify', Strings.player_in_vehicle, Strings.player_in_vehicle_desc, 'error')
return
end
if targetCuffed or deathCheck then
TriggerServerEvent('wasabi_police:escortPlayer', targetId)
return
end
TriggerEvent('wasabi_bridge:notify', Strings.not_restrained, Strings.not_restrained_desc, 'error')
end
exports('escortPlayer', escortPlayer)
handcuffPlayer = function(targetId, type)
if deathCheck() or isCuffed then return end
local cId = GetPlayerFromServerId(targetId)
if not Config.handcuff.cuffDeadPlayers and deathCheck(targetId) then
TriggerEvent('wasabi_bridge:notify', Strings.unconcious, Strings.unconcious_desc, 'error')
elseif GetVehiclePedIsIn(GetPlayerPed(targetId), false) ~= 0 then
TriggerEvent('wasabi_bridge:notify', Strings.in_vehicle, Strings.in_vehicle_desc, 'error')
else
TriggerServerEvent('wasabi_police:handcuffPlayer', targetId, type)
end
end
local startCuffTimer = function()
if Config.handcuff.timer and cuffTimer.active then
wsb.clearTimeout(cuffTimer.timer)
end
cuffTimer.active = true
cuffTimer.timer = wsb.setTimeout(Config.handcuff.timer, function()
TriggerEvent('wasabi_police:uncuff')
end)
end
handcuffed = function(type)
type = type or 'hard'
isCuffed = type
DisableInventory(true)
if Config.UseRadialMenu then
DisableRadial(true)
end
TriggerServerEvent('wasabi_police:setCuff', type)
SetEnableHandcuffs(wsb.cache.ped, true)
-- SetEnableBoundAnkles(wsb.cache.ped, true)
SetCurrentPedWeapon(wsb.cache.ped, `WEAPON_UNARMED`, true)
SetPedCanPlayGestureAnims(wsb.cache.ped, false)
-- FreezeEntityPosition(wsb.cache.ped, true)
wsb.stream.animDict('mp_arresting')
TaskPlayAnim(wsb.cache.ped, 'mp_arresting', 'idle', 8.0, -8, 3000, 49, 0, false, false, false)
Wait(3000)
--[[ if type == 'soft' then
FreezeEntityPosition(wsb.cache.ped, false)
end]]
if Config.handcuff.timer then
if cuffTimer.active then
wsb.clearTimeout(cuffTimer.timer)
cuffTimer = {}
end
startCuffTimer()
end
end
uncuffed = function()
if not isCuffed then return end
DisableInventory(false)
isCuffed = false
if escorted?.active then
escorted.active = nil
end
TriggerServerEvent('wasabi_police:setCuff', false)
SetEnableHandcuffs(wsb.cache.ped, false)
DisablePlayerFiring(wsb.cache.ped, false)
SetPedCanPlayGestureAnims(wsb.cache.ped, true)
-- FreezeEntityPosition(wsb.cache.ped, false)
if Config.UseRadialMenu then
DisableRadial(false)
end
if Config.handcuff.timer and cuffTimer.active then
wsb.clearTimeout(cuffTimer.timer)
cuffTimer = {}
end
Wait(250) -- Only in fivem ;)
ClearPedTasks(wsb.cache.ped)
ClearPedSecondaryTask(wsb.cache.ped)
if cuffProp and DoesEntityExist(cuffProp) then
SetEntityAsMissionEntity(cuffProp, true, true)
DetachEntity(cuffProp, false, false)
DeleteObject(cuffProp)
cuffProp = nil
end
end
manageId = function(data)
if deathCheck() or isCuffed then return end
local targetId, license = data.targetId, data.license
local Options = {
{
title = Strings.go_back,
description = '',
icon = '',
arrow = false,
event = 'wasabi_police:checkId',
args = targetId
},
{
title = Strings.revoke_license,
description = '',
icon = '',
arrow = false,
event = 'wasabi_police:revokeLicense',
args = { targetId = targetId, license = license.type }
},
}
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_manage_id',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = (license.label or firstToUpper(tostring(license.type))),
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_manage_id',
color = Config.UIColor,
title = (license.label or firstToUpper(tostring(license.type))),
options = Options
})
end
end
openLicenseMenu = function(data)
if deathCheck() or isCuffed then return end
local targetId, licenses = data.targetId, data.licenses
local Options = {
{
title = Strings.go_back,
description = '',
icon = '',
arrow = false,
event = 'wasabi_police:checkId',
args = targetId
}
}
for i = 1, #licenses do
Options[#Options + 1] = {
title = (licenses[i].label or firstToUpper(tostring(licenses[i].type))),
description = '',
icon = '',
arrow = true,
event = 'wasabi_police:manageId',
args = { targetId = targetId, license = licenses[i] }
}
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_license_check',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.licenses,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_license_check',
color = Config.UIColor,
title = Strings.licenses,
options = Options
})
end
end
checkPlayerId = function(targetId)
if deathCheck() or isCuffed then return end
local data = wsb.awaitServerCallback('wasabi_police:checkPlayerId', targetId)
local Options = {
{
title = Strings.go_back,
description = '',
icon = '',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.name,
description = data.name,
icon = 'id-badge',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.job,
description = data.job,
icon = 'briefcase',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.job_position,
description = data.position,
icon = 'briefcase',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.dob,
description = data.dob,
icon = 'cake-candles',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.sex,
description = data.sex,
icon = 'venus-mars',
arrow = false,
event = 'wasabi_police:pdJobMenu',
}
}
if data.drunk then
Options[#Options + 1] = {
title = Strings.bac,
description = data.drunk,
icon = 'champagne-glasses',
arrow = false,
event = 'wasabi_police:pdJobMenu',
}
end
if not data.licenses or #data.licenses < 1 then
Options[#Options + 1] = {
title = Strings.licenses,
description = Strings.no_licenses,
icon = 'id-card',
arrow = true,
event = 'wasabi_police:pdJobMenu',
}
else
Options[#Options + 1] = {
title = Strings.licenses,
description = Strings.total_licenses .. ' ' .. #data.licenses,
icon = 'id-card',
arrow = true,
event = 'wasabi_police:licenseMenu',
args = { licenses = data.licenses, targetId = targetId }
}
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_id_check',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.id_result_menu,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_id_check',
color = Config.UIColor,
title = Strings.id_result_menu,
options = Options
})
end
end
vehicleInfoMenu = function(vehicle)
if deathCheck() or isCuffed then return end
if not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.vehicle_not_found, Strings.vehicle_not_found_desc, 'error')
else
local plate = GetVehicleNumberPlateText(vehicle)
plate = wsb.trim(plate)
local ownerData = wsb.awaitServerCallback('wasabi_police:getVehicleOwner', plate)
local Options = {
{
title = Strings.go_back,
description = '',
arrow = false,
event = 'wasabi_police:vehicleInteractions',
},
{
title = Strings.plate,
description = plate,
arrow = false,
event = 'wasabi_police:pdJobMenu',
}
}
if ownerData then
Options[#Options + 1] = {
title = Strings.owner,
description = ownerData,
arrow = false,
event = 'wasabi_police:pdJobMenu',
}
else
Options[#Options + 1] = {
title = Strings.possibly_stolen,
description = Strings.possibly_stolen_desc,
arrow = false,
event = 'wasabi_police:pdJobMenu',
}
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_veh_info_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.vehicle_interactions,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_veh_info_menu',
color = Config.UIColor,
title = Strings.vehicle_interactions,
options = Options
})
end
end
end
lockpickVehicle = function(vehicle)
if deathCheck() or isCuffed then return end
if not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.vehicle_not_found, Strings.vehicle_not_found_desc, 'error')
else
local playerCoords = GetEntityCoords(wsb.cache.ped)
local targetCoords = GetEntityCoords(vehicle)
local dist = #(playerCoords - targetCoords)
if dist < 2.5 then
TaskTurnPedToFaceCoord(wsb.cache.ped, targetCoords.x, targetCoords.y, targetCoords.z, 2000)
Wait(2000)
if wsb.progressUI({
duration = 7500,
position = 'bottom',
label = Strings.lockpick_progress,
useWhileDead = false,
canCancel = true,
disable = {
car = true,
},
anim = {
scenario = 'PROP_HUMAN_PARKING_METER',
},
}, 'progressCircle') then
SetVehicleDoorsLocked(vehicle, 1)
SetVehicleDoorsLockedForAllPlayers(vehicle, false)
TriggerEvent('wasabi_bridge:notify', Strings.lockpicked, Strings.lockpicked_desc, 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.cancelled, Strings.cancelled_desc, 'error')
end
else
TriggerEvent('wasabi_bridge:notify', Strings.too_far, Strings.too_far_desc, 'error')
end
end
end
impoundVehicle = function(vehicle)
if deathCheck() or isCuffed then return end
if not DoesEntityExist(vehicle) then
TriggerEvent('wasabi_bridge:notify', Strings.vehicle_not_found, Strings.vehicle_not_found_desc, 'error')
else
local playerCoords = GetEntityCoords(wsb.cache.ped)
local targetCoords = GetEntityCoords(vehicle)
local dist = #(playerCoords - targetCoords)
if dist < 2.5 then
local driver = GetPedInVehicleSeat(vehicle, -1)
if driver == 0 then
SetVehicleDoorsLocked(vehicle, 2)
SetVehicleDoorsLockedForAllPlayers(vehicle, true)
TaskTurnPedToFaceCoord(wsb.cache.ped, targetCoords.x, targetCoords.y, targetCoords.z, 2000)
Wait(2000)
if wsb.progressUI({
duration = 7500,
position = 'bottom',
label = Strings.impounding_progress,
useWhileDead = false,
canCancel = true,
disable = {
car = true,
},
anim = {
scenario = 'PROP_HUMAN_PARKING_METER',
},
}, 'progressCircle') then
impoundSuccessful(vehicle)
else
TriggerEvent('wasabi_bridge:notify', Strings.cancelled, Strings.cancelled_desc, 'error')
end
else
TriggerEvent('wasabi_bridge:notify', Strings.driver_in_car, Strings.driver_in_car_desc, 'error')
end
else
TriggerEvent('wasabi_bridge:notify', Strings.too_far, Strings.too_far_desc, 'error')
end
end
end
vehicleInteractionMenu = function()
if deathCheck() or isCuffed then return end
local Options = {
{
title = Strings.go_back,
description = '',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.vehicle_information,
description = Strings.vehicle_information_desc,
icon = 'magnifying-glass',
arrow = false,
event = 'wasabi_police:vehicleInfo',
},
{
title = Strings.lockpick_vehicle,
description = Strings.locakpick_vehicle_desc,
icon = 'lock-open',
arrow = false,
event = 'wasabi_police:lockpickVehicle',
},
{
title = Strings.impound_vehicle,
description = Strings.impound_vehicle_desc,
icon = 'reply',
arrow = false,
event = 'wasabi_police:impoundVehicle',
},
}
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_veh_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.vehicle_interactions,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_veh_menu',
color = Config.UIColor,
title = Strings.vehicle_interactions,
options = Options
})
end
end
function GetSpeedTrapById(id)
for i = 1, #SpeedTraps do
if SpeedTraps[i].id == id then
return SpeedTraps[i]
end
end
return nil
end
function UpdateSpeedTrapName(id, name)
for i = 1, #SpeedTraps do
if SpeedTraps[i].id == id then
SpeedTraps[i].name = name
return
end
end
end
function RenameSpeedTrap(id)
local job, grade = wsb.getGroup()
if not Config.RadarPosts.jobs[job] or grade < Config.RadarPosts.jobs[job] then return end
local radarPost = GetSpeedTrapById(id)
if not radarPost then return end
local newName = wsb.inputDialog((Strings.speed_trap_rename):format(radarPost.name or Strings.speed_trap),
{ Strings.new_name }, Config.UIColor)
if not newName or not newName[1] or newName[1] == '' or #newName[1] < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_entry, Strings.invalid_entry_desc, 'error')
return
end
local success = wsb.awaitServerCallback('wasabi_police:renameSpeedTrap', id, newName[1])
if success then
TriggerEvent('wasabi_bridge:notify', Strings.success,
(Strings.speed_trap_renamed):format(radarPost.name, newName[1]), 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.failed, Strings.speed_trap_rename_failed, 'error')
end
end
function ManageRadarPost(id)
local job, grade = wsb.getGroup()
if not Config.RadarPosts.jobs[job] or grade < Config.RadarPosts.jobs[job] then return end
local radarPost = GetSpeedTrapById(id)
if not radarPost then return end
local radarName = radarPost.name or Strings.speed_trap
local Options = {
{
title = Strings.go_back,
description = '',
icon = 'chevron-left',
arrow = false,
event = 'wasabi_police:radarPosts',
},
{
title = Strings.manage_trap_rename,
description = Strings.manage_trap_rename_desc,
icon = 'pen-to-square',
arrow = false,
event = 'wasabi_police:renameSpeedTrap',
args = { id = id }
},
{
title = Strings.manage_trap_delete,
description = Strings.manage_trap_delete_desc,
icon = 'trash',
arrow = false,
event = 'wasabi_police:removeSpeedTrap',
args = { id = id }
},
}
local menu = 'showContextMenu'
if Config.MobileMenu.enabled then menu = 'showMenu' end
wsb[menu]({
id = 'manage_radar_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = radarName,
options = Options
})
end
function RadarPostsMenu()
if deathCheck() or isCuffed then return end
local job, grade = wsb.getGroup()
if not Config.RadarPosts.jobs[job] or grade < Config.RadarPosts.jobs[job] then return end
local Options = {
{
title = Strings.go_back,
description = '',
icon = 'chevron-left',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
{
title = Strings.menu_trap_create,
description = Strings.menu_trap_create_desc,
icon = 'plus',
arrow = false,
event = 'wasabi_police:createRadarPost',
},
}
if ClosestSpeedTrap and SpeedTraps[ClosestSpeedTrap] and SpeedTraps[ClosestSpeedTrap].id then
Options[#Options + 1] = {
title = Strings.menu_trap_manage,
description = Strings.menu_trap_manage_desc,
icon = 'pen-to-square',
arrow = false,
event = 'wasabi_police:manageRadarPost',
args = { id = SpeedTraps[ClosestSpeedTrap].id }
}
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_radar_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = 'Speed Trap Menu',
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_radar_menu',
color = Config.UIColor,
title = 'Speed Trap Menu',
options = Options
})
end
end
function CreateRadarPost()
if deathCheck() or isCuffed then return end
local job, grade = wsb.getGroup()
if not Config.RadarPosts.jobs[job] or grade < Config.RadarPosts.jobs[job] then return end
local options = {}
for i = 1, #Config.RadarPosts.options do
options[#options + 1] = {
title = Config.RadarPosts.options[i].label,
description = '',
icon = 'camera',
arrow = false,
event = 'wasabi_police:placeRadarPost',
args = { prop = Config.RadarPosts.options[i].prop }
}
end
local menu = Config.MobileMenu.enabled and 'showMenu' or 'showContextMenu'
wsb[menu]({
id = 'pd_radar_post_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.menu_select_trap,
options = options
})
end
function PlaceRadarPost(prop)
wsb.stream.model(prop)
local coords = GetEntityCoords(wsb.cache.ped)
local obj = CreateObject(joaat(prop), coords.x, coords.y, coords.z, false, false, false)
SetEntityCollision(obj, false, true)
PlaceObjectOnGroundProperly(obj)
SetEntityAsMissionEntity(obj, true, true)
RadarPostProp = obj
end
function CCTVMenu()
if deathCheck() or isCuffed then return end
local job, grade = wsb.getGroup()
if not Config.CCTVCameras.jobs[job] then return end
local options = {}
options[#options + 1] = {
title = Strings.go_back,
description = '',
icon = 'chevron-left',
arrow = false,
event = 'wasabi_police:pdJobMenu',
}
if tonumber(grade or 0) >= Config.CCTVCameras.jobs[job] then
options[#options + 1] = {
title = Strings.menu_cctv_create,
description = Strings.menu_cctv_create_desc,
icon = 'plus',
arrow = false,
event = 'wasabi_police:createCCTVCamera',
}
end
if #CCTVCameras > 0 then
for i = 1, #CCTVCameras do
if CCTVCameras[i].id then
options[#options + 1] = {
title = CCTVCameras[i].name or Strings.cctv_camera,
description = '',
icon = 'camera',
arrow = true,
event = 'wasabi_police:manageCCTVCamera',
args = { id = CCTVCameras[i].id }
}
end
end
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_cctv_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = 'CCTV Camera Menu',
options = options
})
return
else
wsb.showContextMenu({
id = 'pd_cctv_menu',
color = Config.UIColor,
title = 'CCTV Camera Menu',
options = options
})
end
end
function TrackingBraceletMenu()
if deathCheck() or isCuffed then return end
if not wsb.hasGroup(Config.policeJobs) then return end
TrackingPlayers = wsb.awaitServerCallback('wasabi_police:getTrackingBracelets')
if not TrackingPlayers or not next(TrackingPlayers) then
TriggerEvent('wasabi_bridge:notify', Strings.no_bracelets, Strings.no_bracelets_desc, 'error')
return
end
local options = {
{
title = Strings.go_back,
icon = 'chevron-left',
description = '',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
}
for _, trackingData in pairs(TrackingPlayers) do
options[#options + 1] = {
title = Strings.optn_tracking_bracelet_title:format(trackingData.name),
description = Strings.optn_tracking_bracelet_desc:format(trackingData.sourceName),
icon = 'user',
arrow = true,
event = 'wasabi_police:toggleTrackingBracelet',
args = trackingData
}
end
local menu = Config.MobileMenu.enabled and 'showMenu' or 'showContextMenu'
wsb[menu]({
id = 'pd_tracking_bracelet_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.menu_tracking_bracelet,
options = options
})
end
function AttachTrackingProp()
wsb.stream.model(`tag`)
local x, y, z = table.unpack(GetOffsetFromEntityInWorldCoords(wsb.cache.ped, 0.0, 3.0, 0.5))
TrackingBracelet = CreateObjectNoOffset(`tag`, x, y, z, true, false, false)
AttachEntityToEntity(TrackingBracelet, wsb.cache.ped, 15, 0.33606937269201, 0.025398326730096, 0.0012138579926551, 13.588062284908, -77.631353092725, -20.009694671156, true, true, false, true, 1, true)
SetModelAsNoLongerNeeded(`tag`)
end
function HandleTrackingProp()
CreateThread(function()
while TrackingBracelet do
if not IsEntityAttachedToEntity(TrackingBracelet, wsb.cache.ped) then
DeleteEntity(TrackingBracelet)
AttachTrackingProp()
end
Wait(10000)
end
if DoesEntityExist(TrackingBracelet) then
DeleteEntity(TrackingBracelet)
end
end)
end
function CreateCCTVCamera()
if deathCheck() or isCuffed then return end
local job, grade = wsb.getGroup()
if not Config.CCTVCameras.jobs[job] or grade < Config.CCTVCameras.jobs[job] then return end
local options = {}
for i = 1, #Config.CCTVCameras.options do
options[#options + 1] = {
title = Config.CCTVCameras.options[i].label,
description = '',
icon = 'camera',
arrow = false,
event = 'wasabi_police:placeCCTVCamera',
args = { prop = Config.CCTVCameras.options[i].prop }
}
end
local menu = Config.MobileMenu.enabled and 'showMenu' or 'showContextMenu'
wsb[menu]({
id = 'pd_cctv_post_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.menu_select_cctv,
options = options
})
end
function PlaceCCTVCamera(prop)
wsb.stream.model(prop)
local coords = GetEntityCoords(wsb.cache.ped)
local obj = CreateObject(joaat(prop), coords.x, coords.y, coords.z, false, false, false)
SetEntityCollision(obj, false, true)
PlaceObjectOnGroundProperly(obj)
SetEntityAsMissionEntity(obj, true, true)
CCTVCameraProp = obj
end
local glm_sincos, glm_rad = require 'glm'.sincos, require 'glm'.rad
local function getForwardVector()
local sin, cos = glm_sincos(glm_rad(GetFinalRenderedCamRot(2)))
return vec3(-sin.z * math.abs(cos.x), cos.z * math.abs(cos.x), sin.x)
end
function RayCastFromCam(flags, ignore, distance)
local coords = GetFinalRenderedCamCoord()
local destination = coords + getForwardVector() * (distance or 10)
local handle = StartShapeTestLosProbe(coords.x, coords.y, coords.z, destination.x, destination.y,
destination.z, flags or 511, wsb.cache.ped, ignore or 4)
while true do
Wait(0)
local retval, hit, endCoords, surfaceNormal, material, entityHit = GetShapeTestResultIncludingMaterial(handle)
if retval ~= 1 then
return hit, entityHit, endCoords, surfaceNormal, material
end
end
end
function ManageCCTVCamera(id)
local job, grade = wsb.getGroup()
if not Config.CCTVCameras.jobs[job] then return end
local cctvCamera = GetCCTVCameraById(id)
if not cctvCamera then return end
local cctvName = cctvCamera.name or Strings.cctv_camera
local Options = {}
Options[#Options + 1] = {
title = Strings.go_back,
description = '',
icon = 'chevron-left',
arrow = false,
event = 'wasabi_police:cctvCameras',
}
Options[#Options + 1] = {
title = Strings.manage_cctv_view,
description = Strings.manage_cctv_view_desc,
icon = 'eye',
disabled = cctvCamera.destory,
arrow = false,
event = 'wasabi_police:viewCCTVCamera',
args = { id = id }
}
if tonumber(grade or 0) >= Config.CCTVCameras.jobs[job] then
Options[#Options + 1] = {
title = Strings.manage_cctv_rename,
description = Strings.manage_cctv_rename_desc,
icon = 'pen-to-square',
arrow = false,
event = 'wasabi_police:renameCCTVCamera',
args = { id = id }
}
Options[#Options + 1] = {
title = Strings.manage_cctv_delete,
description = Strings.manage_cctv_delete_desc,
icon = 'trash',
arrow = false,
event = 'wasabi_police:removeCCTVCamera',
args = { id = id }
}
end
if Config.CCTVCameras.destoryable then
Options[#Options + 1] = {
title = Strings.manage_cctv_repair,
description = Strings.manage_cctv_repair_desc,
icon = 'wrench',
disabled = not cctvCamera.destory,
arrow = false,
event = 'wasabi_police:repairCCTVCamera',
args = { id = id }
}
end
local menu = Config.MobileMenu.enabled and 'showMenu' or 'showContextMenu'
wsb[menu]({
id = 'manage_cctv_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = cctvName,
options = Options
})
end
function GetCCTVCameraById(id)
for i = 1, #CCTVCameras do
if CCTVCameras[i].id == id then
return CCTVCameras[i]
end
end
return nil
end
function RenameCCTVCamera(id)
local job, grade = wsb.getGroup()
if not Config.CCTVCameras.jobs[job] or grade < Config.CCTVCameras.jobs[job] then return end
local cctvCamera = GetCCTVCameraById(id)
if not cctvCamera then return end
local newName = wsb.inputDialog((Strings.manage_cctv_rename):format(cctvCamera.name or Strings.cctv_camera),
{ Strings.new_name }, Config.UIColor)
if not newName or not newName[1] or newName[1] == '' or #newName[1] < 1 then
TriggerEvent('wasabi_bridge:notify', Strings.invalid_entry, Strings.invalid_entry_desc, 'error')
return
end
local success = wsb.awaitServerCallback('wasabi_police:renameCCTVCamera', id, newName[1])
if success then
TriggerEvent('wasabi_bridge:notify', Strings.success,
(Strings.cctv_renamed):format(cctvCamera.name, newName[1]), 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.failed, Strings.cctv_rename_failed, 'error')
end
end
function UpdateCCTVCameraName(id, name)
for i = 1, #CCTVCameras do
if CCTVCameras[i].id == id then
CCTVCameras[i].name = name
return
end
end
end
function CameraRotation()
local getCameraRot = GetCamRot(CreatedCamera, 2)
if IsControlPressed(0, 32) then
if getCameraRot.x <= 0.0 then
SetCamRot(CreatedCamera, getCameraRot.x + 0.7, 0.0,
getCameraRot.z, 2)
end
end
if IsControlPressed(0, 8) then
if getCameraRot.x >= -50.0 then
SetCamRot(CreatedCamera, getCameraRot.x - 0.7, 0.0,
getCameraRot.z, 2)
end
end
if IsControlPressed(0, 34) then SetCamRot(CreatedCamera, getCameraRot.x, 0.0, getCameraRot.z + 0.7, 2) end
if IsControlPressed(0, 9) then SetCamRot(CreatedCamera, getCameraRot.x, 0.0, getCameraRot.z - 0.7, 2) end
end
function CreateCamera(coords)
if CreatedCamera then DestroyCam(CreatedCamera, 0) end
local cam = CreateCam("DEFAULT_SCRIPTED_CAMERA", 1)
SetCamCoord(cam, coords.x, coords.y, coords.z)
SetCamRot(cam, 0.0, 0.0, 0.0, 2)
RenderScriptCams(1, 0, 0, 1, 1)
CreatedCamera = cam
if wsb.targetSystem and Config.useTarget then
wsb.target.disable(cam and true)
end
CameraThread()
end
function IsPlayerInsideCamera()
return CreatedCamera and true or false
end
exports('IsPlayerInsideCamera', IsPlayerInsideCamera)
function ViewCCTVCamera(id)
local job, grade = wsb.getGroup()
if not Config.CCTVCameras.jobs[job] then return end
local cctvCamera = GetCCTVCameraById(id)
if not cctvCamera then return end
if cctvCamera.destroy then
TriggerEvent('wasabi_bridge:notify', Strings.cctv_destroyed, Strings.cctv_destroyed_desc, 'error')
return
end
DoScreenFadeOut(250)
while not IsScreenFadedOut() do Wait(0) end
SendNUIMessage({
action = "showCamera",
time = string.format("%02d:%02d", GetClockHours(), GetClockMinutes()),
name =
cctvCamera.name or Strings.cctv_camera
})
SetFocusArea(cctvCamera.coords.x, cctvCamera.coords.y, cctvCamera.coords.z, cctvCamera.coords.x, cctvCamera.coords.y, cctvCamera.coords.z)
CameraIndex = cctvCamera
CreateCamera(cctvCamera.coords)
DoScreenFadeIn(250)
local PlayerPed = PlayerPedId()
if CameraIndex then FreezeEntityPosition(PlayerPed, true) end
TaskStartScenarioInPlace(wsb.cache.ped, "WORLD_HUMAN_STAND_IMPATIENT", 0, true)
end
function CloseCamera()
DoScreenFadeOut(250)
while not IsScreenFadedOut() do Wait(0) end
if CreatedCamera then
DestroyCam(CreatedCamera, 0)
end
RenderScriptCams(false, false, 1, true, true)
CreatedCamera = nil
CameraIndex = nil
ClearTimecycleModifier("scanline_cam_cheap")
SetFocusEntity(PlayerPedId())
SendNUIMessage({ action = "disableCameraOverlay" })
DisplayRadar(true)
if wsb.targetSystem and Config.useTarget then
wsb.target.disable(false)
end
DoScreenFadeIn(250)
FreezeEntityPosition(PlayerPedId(), false)
ClearPedTasksImmediately(wsb.cache.ped)
end
function InitializeCCTVCameras()
local cctvCameras = wsb.awaitServerCallback('wasabi_police:getCCTVCameras')
if not cctvCameras or not next(cctvCameras) then return {} end
for i = 1, #cctvCameras do
local camera = cctvCameras[i]
camera.point = AddCCTVCameraPoint(camera, i)
if Config.CCTVCameras.blip.enabled then
camera.blip = CreateBlip(vec3(camera.coords.x, camera.coords.y, camera.coords.z),
Config.CCTVCameras.blip.sprite,
Config.CCTVCameras.blip.color, Config.CCTVCameras.blip.label, Config.CCTVCameras.blip.scale, false,
'coords',
Config.CCTVCameras.blip.short)
end
end
return cctvCameras
end
placeObjectsMenu = function()
if deathCheck() or isCuffed then return end
if not wsb.hasGroup(Config.policeJobs) then return end
local job, grade = wsb.getGroup()
local Options = {
{
title = Strings.go_back,
icon = 'chevron-left',
description = '',
arrow = false,
event = 'wasabi_police:pdJobMenu',
},
}
for i = 1, #Config.Props do
local data = Config.Props[i]
local add = true
if (data.groups) then
local rank = data.groups[job]
if not (rank and grade >= rank) then
add = false
end
end
if (add) then
data.arrow = false
data.icon = 'cart-flatbed'
data.event = 'wasabi_police:spawnProp'
data.args = i
Options[#Options + 1] = data
end
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_object_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.vehicle_interactions,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_object_menu',
color = Config.UIColor,
title = Strings.vehicle_interactions,
options = Options
})
end
end
armouryMenu = function(station)
if deathCheck() or isCuffed then return end
local data = Config.Locations[station].armoury
local job, grade = wsb.getGroup()
if not data.weapons or not data.weapons[grade] then
TriggerEvent('wasabi_bridge:notify', Strings.no_permission, Strings.no_access_desc, 'error')
return
end
local allow = false
local aData
if data.jobLock then
if data.jobLock == job then
allow = true
end
else
allow = true
end
if not allow then
TriggerEvent('wasabi_bridge:notify', Strings.no_permission, Strings.no_access_desc, 'error')
return
end
if wsb.inventorySystem then
local identifier = station .. '_armoryweapons' .. grade
wsb.inventory.openShop({
identifier = identifier,
name = Strings.armoury_menu,
})
return
end
if grade > #data.weapons then
aData = data.weapons[#data.weapons]
elseif not data.weapons[grade] then
print('[wasabi_police] : ARMORY NOT SET UP PROPERLY FOR GRADE: ' .. grade)
else
aData = data.weapons[grade]
end
local Options = {}
if #aData == 0 then --Backward compatibility
for k, v in pairs(aData) do
if wsb.inventorySystem then
Options[#Options + 1] = {
name = k,
price = v.price or 0,
}
else
Options[#Options + 1] = {
title = v.label,
description = '',
arrow = false,
event = 'wasabi_police:purchaseArmoury',
args = { id = station, grade = grade, itemId = k, multiple = v.multiple or false }
}
if v.price then
Options[#Options].description = Strings.currency .. addCommas(v.price)
end
end
end
else
for i = 1, #aData do
local v = aData[i]
if wsb.inventorySystem then
Options[#Options + 1] = {
name = v.name,
price = v.price or 0,
}
else
Options[#Options + 1] = {
title = v.label,
description = '',
arrow = false,
event = 'wasabi_police:purchaseArmoury',
args = { id = station, grade = grade, itemId = v.name, multiple = v.multiple or false }
}
if v.price then
Options[#Options].description = Strings.currency .. addCommas(v.price)
end
end
end
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_armoury',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.armoury_menu,
options = Options
})
else
wsb.showContextMenu({
id = 'pd_armoury',
color = Config.UIColor,
title = Strings.armoury_menu,
options = Options
})
end
end
openVehicleMenu = function(station)
if deathCheck() or isCuffed then return end
if not wsb.hasGroup(Config.policeJobs) then return end
local data, grade
local job, level = wsb.getGroup()
if level > #Config.Locations[station].vehicles.options then
grade = #Config.Locations[station].vehicles.options
data = Config.Locations[station].vehicles.options[#Config.Locations[station].vehicles.options]
elseif not Config.Locations[station].vehicles.options[level] then
print('[wasabi_police] : Police garage not set up properly for job grade: ' .. level)
return
else
grade = level
data = Config.Locations[station].vehicles.options[level]
end
local Options = {}
for k, v in pairs(data) do
if v.category == 'land' then
Options[#Options + 1] = {
title = v.label,
description = '',
icon = 'car',
arrow = true,
event = 'wasabi_police:spawnVehicle',
args = { station = station, model = k, grade = grade }
}
elseif v.category == 'air' then
Options[#Options + 1] = {
title = v.label,
description = '',
icon = 'helicopter',
arrow = true,
event = 'wasabi_police:spawnVehicle',
args = { station = station, model = k, grade = grade, category = v.category }
}
end
end
if Config.MobileMenu.enabled then
wsb.showMenu({
id = 'pd_garage_menu',
color = Config.UIColor,
position = Config.MobileMenu.position,
title = Strings.police_garage,
options = Options
})
return
else
wsb.showContextMenu({
id = 'pd_garage_menu',
color = Config.UIColor,
title = Strings.police_garage,
options = Options
})
end
end
local lastTackle = 0
attemptTackle = function()
if deathCheck() or isCuffed then return end
if not IsPedSprinting(wsb.cache.ped) then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if player and not isBusy and not IsPedInAnyVehicle(wsb.cache.ped, false) and not IsPedInAnyVehicle(GetPlayerPed(player), false) and GetGameTimer() - lastTackle > 7 * 1000 then
if Config.tackle.policeOnly then
if wsb.hasGroup(Config.policeJobs) then
lastTackle = GetGameTimer()
TriggerServerEvent('wasabi_police:attemptTackle', GetPlayerServerId(player))
end
else
lastTackle = GetGameTimer()
TriggerServerEvent('wasabi_police:attemptTackle', GetPlayerServerId(player))
end
end
end
getTackled = function(targetId)
isBusy = true
local target = GetPlayerPed(GetPlayerFromServerId(targetId))
wsb.stream.animDict('missmic2ig_11')
AttachEntityToEntity(wsb.cache.ped, target, 11816, 0.25, 0.5, 0.0, 0.5, 0.5, 180.0, false, false, false, false, 2,
false)
TaskPlayAnim(wsb.cache.ped, 'missmic2ig_11', 'mic_2_ig_11_intro_p_one', 8.0, -8.0, 3000, 0, 0, false, false, false)
Wait(3000)
DetachEntity(wsb.cache.ped, true, false)
SetPedToRagdoll(wsb.cache.ped, 1000, 1000, 0, false, false, false)
isRagdoll = true
Wait(3000)
isRagdoll = false
isBusy = false
RemoveAnimDict('missmic2ig_11')
end
tacklePlayer = function()
isBusy = true
wsb.stream.animDict('missmic2ig_11')
TaskPlayAnim(wsb.cache.ped, 'missmic2ig_11', 'mic_2_ig_11_intro_goon', 8.0, -8.0, 3000, 0, 0, false, false, false)
Wait(3000)
isBusy = false
RemoveAnimDict('missmic2ig_11')
end
GSRTestNearbyPlayer = function()
if deathCheck() or isCuffed then return end
if not wsb.hasGroup(Config.policeJobs) then return end
local coords = GetEntityCoords(wsb.cache.ped)
local player = wsb.getClosestPlayer(vec3(coords.x, coords.y, coords.z), 2.0, false)
if player and not isBusy then
local serverId = GetPlayerServerId(player)
local result = wsb.awaitServerCallback('wasabi_police:gsrTest', serverId)
if result then
TriggerEvent('wasabi_bridge:notify', Strings.positive, Strings.positive_gsr_desc, 'success')
else
TriggerEvent('wasabi_bridge:notify', Strings.negative, Strings.negative_gsr_desc, 'error')
end
else
TriggerEvent('wasabi_bridge:notify', Strings.no_nearby, Strings.no_nearby_desc, 'error')
end
end
function GetClosestDeadPlayerServerID(coords, maxDistance)
local players = GetActivePlayers()
local closestDeadPlayer = nil
if not players or not next(players) then return nil end
for i = 1, #players do
if players[i] ~= PlayerId() then
local serverID = GetPlayerServerId(players[i])
local playerCoords = GetEntityCoords(GetPlayerPed(players[i]))
local distance = #(vec3(playerCoords.x, playerCoords.y, playerCoords.z) - vec3(coords.x, coords.y, coords.z))
if distance <= maxDistance and not closestDeadPlayer and deathCheck(serverID) then
closestDeadPlayer = serverID
elseif distance <= maxDistance and closestDeadPlayer and deathCheck(serverID) then
local closestPlayerCoords = GetEntityCoords(GetPlayerPed(GetPlayerFromServerId(closestDeadPlayer)))
local closestDistance = #(vec3(closestPlayerCoords.x, closestPlayerCoords.y, closestPlayerCoords.z) - vec3(coords.x, coords.y, coords.z))
if distance < closestDistance then
closestDeadPlayer = serverID
end
end
end
end
return closestDeadPlayer
end
function PlayAnimation(dict, anim, duration, heading, flags)
local ped = PlayerPedId()
ClearPedTasks(ped)
if not heading then
TaskPlayAnim(ped, dict, anim, 8.0, -8.0, duration or -1, flags or 33, 0, false, false, false)
else
local coords = GetEntityCoords(ped)
TaskPlayAnimAdvanced(ped, dict, anim, coords.x, coords.y, coords.z, 0.0, 0.0, heading, 2.0, 2.0, duration,
flags or 33, 0.0, false, false)
end
end
IsResourceAllowed = function(res)
if not res then
return false
elseif res:lower() == GetCurrentResourceName():lower() then
return true
end
res = res:lower()
for k, data in pairs(Config.AllowedResources) do
if res == data:lower() then
return true
end
end
return false
end
function IsTriggerApproved(resource)
local approved = false
if wsb.hasGroup(Config.policeJobs) then approved = true end
if next(Config.AllowedJobs) then
if wsb.hasGroup(Config.AllowedJobs) then approved = true end
end
if next(Config.AllowedResources) then
if IsResourceAllowed(resource) then approved = true end
end
return approved
end
-- Speed Traps
function DeleteAllSpeedTraps()
for i = 1, #SpeedTraps do
if SpeedTraps[i].object then
DeleteEntity(SpeedTraps[i].object)
SpeedTraps[i].object = nil
end
if SpeedTraps[i].blip then
RemoveBlip(SpeedTraps[i].blip)
SpeedTraps[i].blip = nil
end
if SpeedTraps[i].point then
SpeedTraps[i].point:remove()
SpeedTraps[i].point = nil
end
end
end
local function cameraFlash()
PlaySoundFrontend(-1, "Camera_Shoot", "Phone_SoundSet_Default", true)
if Config.RadarPosts.disableCameraFlash then return end
SendNUIMessage({ action = 'cameraFlash' })
end
local speedTrapCooldown = GetGameTimer()
local speedTrapCurrentIndex = 0
local function triggerSpeedTrap(index, speed)
if speedTrapCurrentIndex == index and GetGameTimer() - speedTrapCooldown < 5000 then return end
speedTrapCurrentIndex = index
speedTrapCooldown = GetGameTimer()
cameraFlash()
TriggerServerEvent('wasabi_police:triggerSpeedTrap', SpeedTraps[index].id, speed)
end
local function findProperSpeedTrapFine(speedLimit, speed)
local overSpeed = speed - speedLimit
local fines = Config.RadarPosts.thresholds
local speedOver = 0
local currentFine = 0
for speeding, fine in pairs(fines) do
if speeding < overSpeed then
if speeding > speedOver then
speedOver = speeding
currentFine = fine
end
end
end
if speedOver == 0 then return false end
return currentFine, speedOver
end
function AddSpeedTrapPoint(speedTrap, index)
return wsb.points.new({
coords = vec3(speedTrap.coords.x, speedTrap.coords.y, speedTrap.coords.z),
heading = speedTrap.heading,
id = speedTrap.id,
index = index,
speedLimit = speedTrap.speedLimit,
detectionRadius = speedTrap.detectionRadius or Config.RadarPosts.detectionRadius,
distance = 50.0,
onEnter = function(self)
if not SpeedTraps[index].object or not DoesEntityExist(SpeedTraps[index].object) then
wsb.stream.model(SpeedTraps[index].prop, 7500)
SpeedTraps[index].object = CreateObject(SpeedTraps[index].prop, speedTrap.coords.x, speedTrap.coords.y,
speedTrap.coords.z, false, false, false)
SetEntityHeading(SpeedTraps[index].object, speedTrap.heading)
PlaceObjectOnGroundProperly(SpeedTraps[index].object)
FreezeEntityPosition(SpeedTraps[index].object, true)
SetModelAsNoLongerNeeded(SpeedTraps[index].prop)
end
end,
nearby = function(self)
local coords = GetEntityCoords(wsb.cache.ped)
local dist = #(coords - self.coords)
if dist > self.detectionRadius then return end
if dist < 5.0 then
if not ClosestSpeedTrap then
ClosestSpeedTrap = self.index
elseif ClosestSpeedTrap ~= self.index and SpeedTraps[ClosestSpeedTrap] and #(self.coords - coords) < #(SpeedTraps[ClosestSpeedTrap].coords - coords) then
ClosestSpeedTrap = self.index
end
elseif dist > 5.0 and ClosestSpeedTrap == self.index then
ClosestSpeedTrap = nil
end
if not wsb.cache.vehicle or wsb.cache.seat ~= -1 then return end
local vehSpeed = ConvertToRealSpeed(GetEntitySpeed(wsb.cache.vehicle))
if vehSpeed and vehSpeed > self.speedLimit and findProperSpeedTrapFine(self.speedLimit, vehSpeed) then
if Config.RadarPosts.whitelistJobs and next(Config.RadarPosts.whitelistJobs) then
if wsb.hasGroup(Config.policeJobs) or wsb.hasGroup(Config.RadarPosts.whitelistJobs) then return end
end
triggerSpeedTrap(index, vehSpeed)
end
end,
onExit = function(self)
if SpeedTraps[index].object then
DeleteEntity(SpeedTraps[index].object)
SpeedTraps[index].object = nil
end
end
})
end
local GetEntityHealth, SetEntityHealth, GetEntityCoords = GetEntityHealth, SetEntityHealth, GetEntityCoords
function AddCCTVCameraPoint(cctv, index)
return wsb.points.new({
coords = vec3(cctv.coords.x, cctv.coords.y, cctv.coords.z),
heading = cctv.heading,
id = cctv.id,
index = index,
distance = 50.0,
onEnter = function(self)
if not CCTVCameras[index].object or not DoesEntityExist(CCTVCameras[index].object) then
wsb.stream.model(CCTVCameras[index].prop, 7500)
CCTVCameras[index].object = CreateObject(CCTVCameras[index].prop, cctv.coords.x, cctv.coords.y,
cctv.coords.z, false, false, false)
SetEntityHeading(CCTVCameras[index].object, cctv.heading)
FreezeEntityPosition(CCTVCameras[index].object, true)
SetModelAsNoLongerNeeded(CCTVCameras[index].prop)
end
end,
nearby = function(self)
if Config.CCTVCameras.destoryable then
if CCTVCameras and CCTVCameras[self.index] and CCTVCameras[self.index].object and not CCTVCameras[self.index].destory then
local maxHealth, currentHealth = GetEntityMaxHealth(CCTVCameras[self.index].object),
GetEntityHealth(CCTVCameras[self.index].object)
if currentHealth < 750 then
if not CCTVCameras[self.index].destory then
TriggerServerEvent('wasabi_police:destroyCCTVCamera', CCTVCameras[self.index].id)
SetEntityHealth(CCTVCameras[self.index].object, maxHealth)
end
end
end
end
local coords = GetEntityCoords(wsb.cache.ped)
local dist = #(coords - self.coords)
if dist > 25.0 then return end
if dist < 10.0 then
if not ClosestCCTVCamera then
ClosestCCTVCamera = self.index
elseif ClosestCCTVCamera ~= self.index and CCTVCameras[ClosestCCTVCamera] and #(self.coords - coords) < #(CCTVCameras[ClosestCCTVCamera].coords - coords) then
ClosestCCTVCamera = self.index
end
elseif dist > 10.0 and ClosestCCTVCamera == self.index then
ClosestCCTVCamera = nil
end
end,
onExit = function(self)
if CCTVCameras[index].object then
DeleteEntity(CCTVCameras[index].object)
CCTVCameras[index].object = nil
end
end
})
end
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not wsb then return print((Strings.no_wsb):format(GetCurrentResourceName())) end
if not Config.UseRadialMenu then return end
function AddRadialItems()
Wait(100) -- Don't remove this, for some reason it's needed during job changes
if wsb.hasGroup(Config.policeJobs) then
if wsb.isOnDuty() then
exports.ox_lib:addRadialItem({
{
id = 'pd_general',
label = 'Police',
icon = 'shield-halved',
menu = 'police_menu'
},
})
end
end
end
function RemoveRadialItems()
exports.ox_lib:removeRadialItem('pd_general')
end
function DisableRadial(state)
exports.ox_lib:disableRadial(state)
end
exports.ox_lib:registerRadial({ -- Police menu
id = 'police_menu',
items = {
{
label = 'Handcuff',
icon = 'handcuffs',
onSelect = function()
TriggerEvent('wasabi_police:handcuffPlayer')
end
},
{
label = 'Escort',
icon = 'people-pulling',
onSelect = function()
TriggerEvent('wasabi_police:escortPlayer')
end
},
{
label = 'Search',
icon = 'search',
onSelect = function()
TriggerEvent('wasabi_police:searchPlayer')
end
},
{
label = 'Check ID',
icon = 'id-card',
onSelect = function()
TriggerEvent('wasabi_police:checkId')
end
},
{
label = 'Vehicle',
icon = 'car',
menu = 'police_menu_vehicle'
},
}
})
exports.ox_lib:registerRadial({ -- Police vehicle menu
id = 'police_menu_vehicle',
items = {
{
label = 'Info',
icon = 'circle-info',
onSelect = function()
TriggerEvent('wasabi_police:vehicleInfo')
end
},
{
label = 'Lockpick',
icon = 'key',
onSelect = function()
TriggerEvent('wasabi_police:lockpickVehicle')
end
},
{
label = 'Impound',
icon = 'trailer',
onSelect = function()
TriggerEvent('wasabi_police:impoundVehicle')
end
},
{
label = 'Seat',
icon = 'door-closed',
onSelect = function()
TriggerEvent('wasabi_police:inVehiclePlayer')
end
},
{
label = 'Unseat',
icon = 'door-open',
onSelect = function()
TriggerEvent('wasabi_police:outVehiclePlayer')
end
},
}
})
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
local seconds, minutes = 1000, 60000
Config = {}
-------------------------------------------------------------------
-- TO MODIFY NOTIFICATIONS TO YOUR OWN CUSTOM NOTIFICATIONS:-------
-------------- Navigate to wasabi_bridge/customize/ ---------------
-------------------------------------------------------------------
Config.CheckForUpdates = true -- Check for updates? Who would not want to know updates!?
-- Language Options are
-- 'en' (English)
-- 'fr' (French)
-- 'cn' (Chinese Simplified)
-- 'tw' (Chinese Traditional)
-- 'de' (German)
-- 'it' (Italian)
-- 'jp' (Japanese)
-- 'ko' (Korean)
-- 'pl' (Polish)
-- 'pt' (Portuguese)
-- 'es' (Spanish)
-- 'hi' (Hindi)
-- 'nl' (Dutch)
-- 'da' (Danish)
-- 'cs' (Czech)
-- If you would like us to add a language, join our discord and create a ticket!
-- All locale strings can be found in /game/configuration/locales/
Config.Language = 'en'
Config.UIColor = '#0390fc' -- Can be 'red', 'blue', or a hex '#FF0000'
Config.JailUIColor = '#0390fc' -- Can be 'red', 'blue', or a hex '#FF0000'
Config.jobMenu = 'F6' -- Default job menu key
Config.useTarget = true -- Enable target for police functions (Supports ox_target / qb-target)
Config.MobileMenu = { -- THIS WILL USE A REGULAR MENU RATHER THAN A CONTEXT STYLE MENU!
enabled = true, -- Use a mobile menu rather than context? (Use arrow keys to navigate menu rather than mouse)
position =
'bottom-right' -- Choose where menu is positioned. Options : 'top-left' or 'top-right' or 'bottom-left' or 'bottom-right'
}
Config.UseRadialMenu = false -- Enable use of radial menu built in to ox_lib? (REQUIRES OX_LIB - Editable in client/radial.lua)
Config.customCarlock = false -- If you use wasabi_carlock OR qb-carlock set to true(Add your own carlock system in wasabi_bridge/customize/client/carlock.lua)
Config.billingSystem =
'default' -- Current options: false (Disabled) / 'default' (For built-in System)/'esx' (For esx_billing) / 'qb' (QBCore) / 'okok' (For okokBilling) (Easy to add more/fully customize in client/cl_customize.lua)
--ONLY IF USING 'default' BILLING SYSTEM
Config.billingData = {
chargeAccount = 'bank', --Cash or bank (The default method to charge player)
-- Credit police society for fines?
-- (If true, fines will be credited to whichever police job sent the fine)
-- (If false, fines will be deducted from the player but credited to no where)
-- (Set to string of specific account if you wish for a singular account to receive all fine recoveries)
creditSociety = true,
fines = { --Fine presets
{ label = 'Attempt Robbery of Shop', amount = 1200 },
{ label = 'Attempt Robbery of Bank', amount = 2400 },
{ label = 'On-Duty Crime', amount = 10000 },
{ label = 'Driving On Off-Road', amount = 2200 },
{ label = 'Anti Gravity', amount = 4200 },
}
}
Config.OldQBManagement = false -- If you use older qb-management(Unrelated to ESX)
Config.AdvancedParking = false -- Delete vehicles with their exports(Script named advanced parking)
Config.Jail = {
enabled = true, -- Enable jail feature?
input = true, -- Enable input? Some needs it
jail = 'rcore', -- Current options: 'qb' (For qb-prison) / 'r_prison' (For r_scripts prison: https://r-scripts.tebex.io/) / 'rcore' (For rcore-prison) / 'tk_jail' (For tk_jail) / 'hd_jail' (For hd_jail) / 'myPrison' (For myPrison) / 'qalle-jail' (For qalle-jail) / 'plouffe ' (For Plouffe Jail) / 'mx' (For mxJail) / 'custom' (For custom)
BuiltInPrison = {
enabled = true, -- Enable built-in prison system?
persistentJail = true, -- Persistent jail? (If false, jail will be reset on reload)
coords = vec3(1845.0, 2585.0, 45.0), -- Coords of prison
spawn = {
{ coords = vec4(1745.77, 2489.61, 50.41, 212.01) },
{ coords = vec4(1751.86, 2492.73, 50.44, 213.77) },
{ coords = vec4(1760.82, 2498.14, 50.42, 208.26) },
{ coords = vec4(1754.85, 2494.59, 45.82, 212.49) },
{ coords = vec4(1748.84, 2491.35, 45.80, 203.43) }
},
release = vec4(1845.0, 2585.0, 45.0, 0.0), -- Coords of released
jailOutfit = {
male = { -- Male variation
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 5, texture = 2 }, -- Torso
{ component = 8, drawable = 15, texture = 0 }, -- Shirt
{ component = 4, drawable = 6, texture = 1 }, -- Pants
{ component = 6, drawable = 16, texture = 7 }, -- Shoes
{ component = 3, drawable = 5, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
},
female = {
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 4, texture = 0 }, -- Torso
{ component = 8, drawable = 15, texture = 0 }, -- Shirt
{ component = 4, drawable = 25, texture = 0 }, -- Pants
{ component = 6, drawable = 16, texture = 4 }, -- Shoes
{ component = 3, drawable = 4, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
}
},
},
}
-- NOTE: If using qb-prison, you must make one small change to qb-prison.
-- SEE https://docs.wasabiscripts.com/scripts/wasabi_police/customizations#qb-prison-integration
Config.searchPlayers = false -- Allow police jobs to search players for items (Must have inventory in bridge or one already supported in cl_customize.lua - or add your own!)
Config.weaponsAsItems = true -- (If you're unsure leave as true!)This is typically for older ESX and inventories that still use weapons as weapons and not items
Config.spikeStripsEnabled = true -- Enable functionality of spike strips (Disable if you use difference script for spike strips)
--[[ These resources can trigger:
wasabi_police:handcuffPlayer
wasabi_police:escortPlayer
wasabi_police:inVehiclePlayer
wasabi_police:outVehiclePlayer
]]
Config.AllowedResources = {
'qb-core',
'qb-radialmenu', -- For civilians to be able to use radial menu features(Already had compatibility without edit)
}
Config.AllowedJobs = { -- THIS HAS NOTHING TO DO with Config.policeJobs, only with triggering events above
--'bloods'
}
Config.GrantWeaponLicenses = {
enabled = true, -- If you want police to have option to grant/revoke weapons licenses
license_name = 'weapon', -- Name of license
minGrade = 0, -- Min grade to use this function
menuPosition =
'bottom-right' -- Choose where menu of player select is positioned. Options : 'top-left' or 'top-right' or 'bottom-left' or 'bottom-right'
}
Config.CCTVCameras = { -- CCTV Cameras
enabled = true, -- Enable CCTV Cameras?
jobLock = 'police', -- Job lock? or access to all police jobs by using false
saveToDatabase = true, -- Save CCTV data to database? (If false, data will be stored in server memory/reset on server restarts)
jobs = { -- Jobs & minimum ranks that can add/modify/delete CCTV Cameras
-- Must be in Config.policeJobs as well
police = 0, -- Job 'police' with minimum rank 0
-- sheriff = 2, -- Job 'sheriff' with minimum rank 2
},
destoryable = true, -- Can players destroy CCTV Cameras?
blip = {
enabled = true, -- Enable blips for CCTV Cameras?
label = 'CCTV Camera', -- Blip label
sprite = 604, -- Blip sprite
color = 5, -- Blip color
scale = 0.5, -- Blip scale
short = false, -- Short range blip?
},
EnabledKeys = { --Enabled keys while in camera view
--W A S D BackSpace
32, 34, 8, 9, 177
},
options = {
{
label = 'CCTV Camera #1', -- Label of CCTV Camera
prop = 'prop_cctv_cam_01a', -- Prop name
},
{
label = 'CCTV Camera #2',
prop = 'prop_cctv_cam_01b',
},
{
label = 'CCTV Camera #3',
prop = 'prop_cctv_cam_06a',
},
{
label = 'CCTV Camera #4',
prop = 'prop_cctv_cam_05a',
},
},
locations = { -- Locations of CCTV Cameras
enabled = true, -- Enable locations of CCTV Cameras?
data = {
{
name = 'Shop (Innocence Blvd)', -- Label of CCTV Camera
prop = 'prop_cctv_cam_06a', -- Prop name
coords = vector3(23.8389778137207, -1348.9283447265626, 31.53925323486328), --coords":{"x":23.8389778137207,"y":-1348.9283447265626,"z":31.53925323486328}
heading = 119.99991607666016, --heading
},
{
name = 'Shop (Inseno Road)',
prop = 'prop_cctv_cam_06a',
coords = vector3(-3037.25, 584.399169921875, 9.89759731292724),
heading = 224.99984741210938,
},
{
name = 'Shop (Barbareno Road)',
prop = 'prop_cctv_cam_06a',
coords = vector3(-3240.68603515625, 999.1280517578125, 14.87293338775634),
heading = 199.9998016357422,
},
{
name = 'Shop (Great Ocean Highway)',
prop = 'prop_cctv_cam_06a',
coords = vector3(1726.5582275390626, 6414.02783203125, 37.07946395874023),
heading = 94.99994659423828,
},
{
name = 'Shop (Grape Seed Main Street)',
prop = 'prop_cctv_cam_06a',
coords = vector3(1706.2977294921876, 4926.40576171875, 44.10588836669922),
heading = 239.99984741210938,
},
{
name = 'Shop (Alhambra Drive)',
prop = 'prop_cctv_cam_06a',
coords = vector3(1960.42431640625, 3738.34716796875, 34.38598251342773),
heading = 149.9998321533203,
},
{
name = 'Shop (Route 68)',
prop = 'prop_cctv_cam_06a',
coords = vector3(549.0037841796875, 2672.68896484375, 43.89537048339844),
heading = 304.99969482421877,
},
{
name = 'Shop (Senora Freeway)',
prop = 'prop_cctv_cam_06a',
coords = vector3(2679.138671875, 3278.020263671875, 57.58337097167969),
heading = 179.999755859375,
},
{
name = 'Shop (Palomino Freeway)',
prop = 'prop_cctv_cam_06a',
coords = vector3(2558.8310546875, 380.1410827636719, 110.66519927978516),
heading = 209.9998016357422,
},
{
name = 'Shop (Clinton Avenue)',
prop = 'prop_cctv_cam_06a',
coords = vector3(371.39739990234377, 324.99755859375, 105.60862731933594),
heading = 104.99993133544922,
},
{
name = 'Shop (North Rockford Drive)',
prop = 'prop_cctv_cam_06a',
coords = vector3(-1827.2593994140626, 793.8814086914063, 140.25299072265626),
heading = 44.99998092651367,
},
{
name = 'Shop (Grove Street)',
prop = 'prop_cctv_cam_06a',
coords = vector3(-47.95944213867187, -1750.7666015625, 31.46323776245117),
heading = 324.99945068359377,
},
{
name = 'Shop (Ginger Street)',
prop = 'prop_cctv_cam_06a',
coords = vector3(-711.623779296875, -908.9114379882813, 21.25783157348632),
heading = 0.0,
},
{
name = 'Shop (Mirror Park Blvd)',
prop = 'prop_cctv_cam_06a',
coords = vector3(1158.4505615234376, -319.10296630859377, 71.24732971191406),
heading = 14.99969005584716,
},
}
}
}
Config.RadarPosts = { -- Radar posts for speed detection
enabled = true, -- Enable radar posts (Shows option in job menu for approved jobs)?
saveToDatabase = true, -- Save radar data to database? (If false, data will be stored in server memory/reset on server restarts)
disableCameraFlash = false, -- Disable camera flash effect when player is caught speeding?
measurement = 'mph', -- Measurement of speed (Options: 'mph' / 'kmh')
jobs = { -- Jobs & minimum ranks that can add/modify/delete radar posts
-- Must be in Config.policeJobs as well
police = 0, -- Job 'police' with minimum rank 0
sheriff = 2, -- Job 'sheriff' with minimum rank 2
},
whitelistJobs = { -- Jobs that do not get fined for speeding
-- Do not worry about jobs from Config.policeJobs, they are automatically whitelisted
'ambulance',
},
chargeAccount = 'bank', -- Cash or bank (The default method to charge player
allowNegativeBalance = false, -- Allow players to go into negative balance? (If false, player must have enough money to pay fine)
-- Credit police society for fines?
-- (If true, fines will be credited to whichever police job placed the radar post that detected speeding)
-- (If false, fines will be deducted from the speeder but credited to no where)
-- (Set to string of specific account if you wish for a singular account to receive all fine recoveries)
creditSociety = true,
detectionRadius = 5, -- Radius within which the radar detects speeders
thresholds = { -- Speed thresholds for fines
[5] = 50, -- 5 over = $50 fine
[10] = 100, -- 10 over = $100 fine
[20] = 500, -- 20 over = $500 fine
[30] = 1000, -- 30 over = $1000 fine
[40] = 2000, -- 40 over = $2000 fine
[50] = 5000, -- 50 over = $5000 fine
},
blip = {
enabled = false, -- Enable blips for radar posts?
label = 'Radar Post', -- Blip label
sprite = 184, -- Blip sprite
color = 5, -- Blip color
scale = 0.5, -- Blip scale
short = false, -- Short range blip?
},
options = {
{
label = 'Radar Post #1', -- Label of radar post
prop = 'prop_cctv_pole_01a', -- Prop name
},
{
label = 'Radar Post #2',
prop = 'prop_cctv_pole_02',
},
{
label = 'Radar Post #3',
prop = 'prop_cctv_pole_03',
},
{
label = 'Radar Post #4',
prop = 'prop_cctv_pole_04',
},
}
}
Config.GSR = { -- Gunshot residue settings
enabled = false, -- Enabled?
cleanInWater = true, -- Can clean GSR while in water?
timeToClean = 5 * seconds, -- How long to clean GSR in water if enabled
autoClean = 600, -- (IN SECONDS)How long before residue clears itself? Set to false if undesired to auto clean GSR
command = 'gsr' -- Command for testing for GSR? Set to false if undesired
}
Config.tackle = {
enabled = true, -- Enable tackle?
policeOnly = true, -- Police jobs only use tackle?
hotkey = 'G' -- What key to press while sprinting to start tackle of target
}
Config.seizeCash = { -- ONLY FOR QBCORE WITHOUT CASH AS ITEM
enabled = false, -- Enabled?
item = 'moneybag' -- Item to add after seizedCash
}
Config.handcuff = { -- Config in regards to cuffing
defaultCuff = 'hard', -- Default cuff type (Options: 'soft' / 'hard') Changing this will be the default hotkey cuff type
persistentCuff = true, -- Verify player's cuffed status during login (Install '_EXTRA_ESX_INSTALL/ESX_PERSISTENT_CUFF.sql' if using ESX)
timer = 20 * minutes, -- Time before player is automatically unrestrained(Set to false if not desired)
hotkey = 'J', -- What key to press to handcuff people(Set to false for no hotkey)
cuffDeadPlayers = false, -- Allow cuffing dead players?
skilledEscape = {
enabled = true, -- Allow criminal to simulate resisting by giving them a chance to break free from cuffs via skill check
difficulty = { 'easy', 'easy', 'easy' } -- Options: 'easy' / 'medium' / 'hard' (Can be stringed along as they are in config)
},
cuffItem = { -- Have handcuffs as usable item? (ITEM NAME MUST BE IN ITEMS / YOU MUST ADD YOURSELF)
enabled = false, -- Enable a handcuff usable item?? Must be in items table/database with name defined below
required = true, -- Requires handcuff item to be in inventory when any handcuff function is used
item = 'handcuffs' -- Item name (DONT FORGET to make sure its in your items)
},
lockpicking = { -- Lockpicking someone else out of handcuffs
enabled = false, -- Enable handcuffs to be able to be lockpicked off(MUST HAVE LOCKPICK ITEM IN ITEMS)
item = 'bobby_pin',
breakChance = 50, -- Chance of lockpick breaking if failed (Set to 100 for 100% or 0 for never breaking)
difficulty = { 'easy', 'easy', 'easy' } -- Options: 'easy' / 'medium' / 'hard' (Can be stringed along as they are in config)
}
}
Config.TrackingBracelet = { -- Tracking Bracelet
enabled = true, -- Enable tracking bracelet?
jobLock = 'police', -- Job lock? or access to all police jobs by using false
jobs = { -- Jobs & minimum ranks that can add/modify/delete CCTV Cameras
-- Must be in Config.policeJobs as well
police = 0, -- Job 'police' with minimum rank 0
-- sheriff = 2, -- Job 'sheriff' with minimum rank 2
},
blip = {
enabled = true, -- Enable blips for tracking bracelets?
label = 'Tracking: %s', -- Blip label
sprite = 304, -- Blip sprite
color = 5, -- Blip color
scale = 0.5, -- Blip scale
},
item = 'tracking_bracelet', -- Item required to use tracking bracelet
timer = 20 * minutes, -- Time before player is automatically untracked(Set to false if not desired)
}
Config.policeJobs = { -- Police jobs
'police',
-- 'sheriff'
}
Config.GPSBlips = { -- wasabi_gps required, get it free: https://wasabiscripts.com/product/7093977
enabled = false, -- Enabled?
jobs = { --- wasabi_gps job registration
['police'] = {
-- item = 'gps', -- optional item required to use gps
subscribers = { --- who can see these blips?
'police',
-- 'sheriff'
},
blipSettings = { --- what does the blip look like?
color = 3, -- blue
scale = 0.75,
short = false,
category = 7
}
},
-- ['sheriff'] = {
-- subscribers = { 'sheriff', 'police' }, --- who can see these blips?
-- blipSettings = {
-- color = 17, -- Orange
-- scale = 1.0,
-- short = false,
-- category = 7
-- }
-- },
}
}
Config.Objects = { -- compatibility for the object spawner in qb-radialmenu
cone = { model = `prop_roadcone02a`, freeze = false },
barrier = { model = `prop_barrier_work06a`, freeze = true },
roadsign = { model = `prop_snow_sign_road_06g`, freeze = true },
tent = { model = `prop_gazebo_03`, freeze = true },
light = { model = `prop_worklight_03b`, freeze = true },
spikeStrip = { model = `p_ld_stinger_s`, freeze = true }
}
Config.Props = { -- What props are avaliable in the "Place Objects" section of the job menu
{
title = 'Barrier', -- Label
description = '', -- Description (optional)
model = `prop_barrier_work05`, -- Prop name within `
freeze = true, -- Make prop unmovable
groups = { -- ['job_name'] = min_rank
['police'] = 0,
-- ['sheriff'] = 0,
}
},
{
title = 'Barricade',
description = '',
model = `prop_mp_barrier_01`,
freeze = true, -- Make prop unmovable
groups = {
['police'] = 0,
-- ['sheriff'] = 0,
}
},
{
title = 'Traffic Cones',
description = '',
model = `prop_roadcone02a`,
freeze = false, -- Make prop unmovable
groups = {
['police'] = 0,
-- ['sheriff'] = 0,
}
},
{
title = 'Spike Strip',
description = '',
model = `p_ld_stinger_s`,
freeze = true, -- Make prop unmovable
groups = {
['police'] = 0,
-- ['sheriff'] = 0,
}
},
}
Config.Locations = {
LSPD = {
blip = {
enabled = true,
coords = vec3(464.57, -992.0, 30.69),
sprite = 60,
color = 29,
scale = 1.0,
string = 'Mission Row PD'
},
clockInAndOut = {
enabled = true, -- Enable clocking in and out at a set location? (If using ESX you must have a off duty job for each e.x. offpolice for police offsheriff for sheriff AND have grades for each pd grade - QBCORE REQUIRES NOTHING)
jobLock = 'police', -- This must be set to which job will be utilizing (ESX MUST HAVE OFF DUTY JOB / GRADES FOR THIS - ex. offpolice or offsheriff)
coords = vec3(464.87, -977.37, 30.69), -- Location of where to go on and off duty(If not using target)
label = '[E] - Go On/Off Duty', -- Text to display(If not using target)
distance = 3.0, -- Distance to display text UI(If not using target)
target = {
enabled = false, -- If enabled, the location and distance above will be obsolete
label = 'Go On/Off Duty',
coords = vec3(464.87, -977.37, 30.69),
heading = 91.06,
distance = 2.5,
width = 2.0,
length = 1.0,
minZ = 30.69 - 0.9,
maxZ = 30.69 + 0.9
}
},
bossMenu = {
enabled = true, -- Enable boss menu?
jobLock = 'police', -- Lock to specific police job? Set to false if not desired
coords = vec3(460.64, -985.64, 30.73), -- Location of boss menu (If not using target)
label = '[E] - Access Boss Menu', -- Text UI label string (If not using target)
distance = 3.0, -- Distance to allow access/prompt with text UI (If not using target)
target = {
enabled = false, -- If enabled, the location and distance above will be obsolete
label = 'Access Boss Menu',
coords = vec3(460.64, -985.64, 30.73),
heading = 269.85,
distance = 2.0,
width = 2.0,
length = 1.0,
minZ = 30.73 - 0.9,
maxZ = 30.73 + 0.9
}
},
armoury = {
enabled = true, -- Set to false if you don't want to use
coords = vec3(480.32, -996.67, 30.69 - 0.9), -- Coords of armoury
heading = 86.95, -- Heading of armoury NPC
ped = 's_f_y_cop_01', -- Ped model or false for no ped
label = '[E] - Access Armoury', -- String of text ui
target = {
enabled = false, -- If enabled, the location and distance above will be obsolete
label = 'Access Armoury',
coords = vec3(480.32, -996.67, 30.69 - 0.9),
heading = 24.95,
distance = 4.0,
width = 2.0,
length = 1.0,
minZ = 30.73 - 0.9,
maxZ = 30.73 + 0.9
},
jobLock = 'police', -- Allow only one of Config.policeJob listings / Set to false if allow all Config.policeJobs
weapons = {
[0] = { -- Grade number will be the name of each table(this would be grade 0)
{ name = 'WEAPON_PISTOL', label = 'Pistol', multiple = false, price = 75 }, -- Set price to false if undesired
{ name = 'WEAPON_NIGHTSTICK', label = 'Night Stick', multiple = false, price = 50 },
-- { name = 'ammo-9' , label = '9mm Ammo', multiple = true, price = 10 }, -- Set multiple to true if you want ability to purchase more than one at a time
-- { name = 'armour', label = 'Bulletproof Vest', multiple = false, price = 100 }, -- Example
},
[1] = { -- This would be grade 1
{ name = 'WEAPON_COMBATPISTOL', label = 'Combat Pistol', multiple = false, price = 150 },
{ name = 'WEAPON_NIGHTSTICK', label = 'Night Stick', multiple = false, price = 50 },
-- { name = 'ammo-9', label = '9mm Ammo', multiple = true, price = 10 }, -- Example
-- { name = 'armour', label = 'Bulletproof Vest', multiple = false, price = 100 }, -- Example
},
[2] = { -- This would be grade 2
{ name = 'WEAPON_COMBATPISTOL', label = 'Combat Pistol', multiple = false, price = 150 },
{ name = 'WEAPON_NIGHTSTICK', label = 'Night Stick', multiple = false, price = 50 },
{ name = 'WEAPON_ASSAULTRIFLE', label = 'Assault Rifle', multiple = false, price = 1100 },
-- { name = 'ammo-9', label = '9mm Ammo', multiple = true, price = 10 }, -- Set multiple to true if you want ability to purchase more than one at a time
-- { name = ammo-rifle, label = '5.56 Ammo', multiple = true, price = 20 }, -- Example
-- { name = 'armour', label = 'Bulletproof Vest', multiple = false, price = 100 }, -- Example
},
[3] = { -- This would be grade 3
{ name = 'WEAPON_COMBATPISTOL', label = 'Combat Pistol', multiple = false, price = 150 },
{ name = 'WEAPON_NIGHTSTICK', label = 'Night Stick', multiple = false, price = 50 },
{ name = 'WEAPON_ASSAULTRIFLE', label = 'Assault Rifle', multiple = false, price = 1100 },
-- { name = 'ammo-9', label = '9mm Ammo', multiple = true, price = 10 }, -- Set multiple to true if you want ability to purchase more than one at a time
-- { name = ammo-rifle, label = '5.56 Ammo', multiple = true, price = 20 }, -- Example
-- { name = 'armour', label = 'Bulletproof Vest', multiple = false, price = 100 }, -- Example
},
}
},
cloakroom = {
enabled = true, -- WILL NOT SHOW IN QBCORE INSTEAD USE QB-CLOTHING CONFIG! Set to false if you don't want to use (Compatible with esx_skin & wasabi fivem-appearance fork)
jobLock = 'police', -- Allow only one of Config.policeJob listings / Set to false if allow all Config.policeJobs
coords = vec3(462.36, -999.62, 30.69), -- Coords of cloakroom
label = '[E] - Change Clothes', -- String of text ui of cloakroom
range = 2.0, -- Range away from coords you can use.
uniforms = { -- Uniform choices
[1] = { -- Order it will display
label = 'Patrol', -- Name of outfit that will display in menu
minGrade = 0, -- Min grade level that can access? Set to 0 or false for everyone to use
male = { -- Male variation
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 5, texture = 2 }, -- Torso
{ component = 8, drawable = 15, texture = 0 }, -- Shirt
{ component = 4, drawable = 6, texture = 1 }, -- Pants
{ component = 6, drawable = 16, texture = 7 }, -- Shoes
{ component = 3, drawable = 5, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
},
female = {
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 4, texture = 0 }, -- Torso
{ component = 8, drawable = 15, texture = 0 }, -- Shirt
{ component = 4, drawable = 25, texture = 0 }, -- Pants
{ component = 6, drawable = 16, texture = 4 }, -- Shoes
{ component = 3, drawable = 4, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
}
},
[2] = { -- Order it will display
label = 'Chief', -- Name of outfit that will display in menu
minGrade = 0, -- Min grade level that can access? Set to 0 or false for everyone to use
male = { -- Male variation
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 15, texture = 0 }, -- Torso
{ component = 8, drawable = 58, texture = 0 }, -- Shirt
{ component = 4, drawable = 35, texture = 0 }, -- Pants
{ component = 6, drawable = 24, texture = 0 }, -- Shoes
{ component = 3, drawable = 15, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
},
female = {
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 4, texture = 0 }, -- Torso
{ component = 8, drawable = 15, texture = 0 }, -- Shirt
{ component = 4, drawable = 25, texture = 0 }, -- Pants
{ component = 6, drawable = 16, texture = 4 }, -- Shoes
{ component = 3, drawable = 4, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
}
},
[3] = { -- Order it will display
label = 'Chief', -- Name of outfit that will display in menu
minGrade = 0, -- Min grade level that can access? Set to 0 or false for everyone to use
male = { -- Male variation
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 15, texture = 0 }, -- Torso
{ component = 8, drawable = 58, texture = 0 }, -- Shirt
{ component = 4, drawable = 35, texture = 0 }, -- Pants
{ component = 6, drawable = 24, texture = 0 }, -- Shoes
{ component = 3, drawable = 15, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
},
female = {
clothing = {
-- Components / 0: Face 1: Mask 2: Hair 3: Torso 4: Leg 5: Parachute / bag 6: Shoes 7: Accessory 8: Undershirt 9: Kevlar 10: Badge 11: Torso 2
-- https://docs.fivem.net/natives/?_0xD4F7B05C
{ component = 11, drawable = 4, texture = 0 }, -- Torso
{ component = 8, drawable = 15, texture = 0 }, -- Shirt
{ component = 4, drawable = 25, texture = 0 }, -- Pants
{ component = 6, drawable = 16, texture = 4 }, -- Shoes
{ component = 3, drawable = 4, texture = 0 }, -- Arms
},
props = {
-- Components / 0: Hats 1: Glasses 2: Ears 6: Watches 7: Bracelets
-- https://docs.fivem.net/natives/?_0x93376B65A266EB5F
-- { component = 0, drawable = 0, texture = 0 }, -- Hats
}
}
},
}
},
-- Personal Locker. Supports inventories: ox_inventory, qb-inventory, and qs-inventory
-- Custom inventories can easily be added in wasabi_bridge/inventories/
personalLocker = {
enabled = false, -- Enable personal locker for this station?
jobLock = 'police', -- Job lock?
coords = vec3(462.64, -995.88, 30.69), -- Area to prompt personal locker
range = 2.0, -- Range it will prompt from coords above
label = '[E] - Access Personal Locker',
target = {
enabled = false, -- If enabled, the location above will be obsolete
label = 'Access Personal Locker',
coords = vec3(462.64, -995.88, 30.69),
heading = 354.94,
distance = 2.5,
width = 2.0,
length = 1.0,
minZ = 30.69 - 0.9,
maxZ = 30.69 + 0.9
}
},
evidenceLocker = {
enabled = false, -- Enable evidence locker for this station?
jobLock = 'police', -- Job lock?
coords = vec3(472.5, -991.21, 26.27), -- Area to prompt personal locker
range = 2.0, -- Range it will prompt from coords above
label = '[E] - Access Evidence Locker',
target = {
enabled = false, -- If enabled, the location above will be obsolete
label = 'Access Evidence Locker',
coords = vec3(472.5, -991.21, 26.27),
heading = 266.23,
distance = 2.5,
width = 2.0,
length = 1.0,
minZ = 26.27 - 0.9,
maxZ = 26.27 + 0.9
}
},
vehicles = { -- Vehicle Garage
enabled = true, -- Enable? False if you have you're own way for medics to obtain vehicles.
jobLock = 'police', -- Job lock? or access to all police jobs by using false
zone = {
coords = vec3(463.69, -1019.72, 28.1), -- Area to prompt vehicle garage
range = 5.5, -- Range it will prompt from coords above
label = '[E] - Access Garage',
return_label = '[E] - Return Vehicle'
},
spawn = {
land = {
coords = vec3(449.37, -1025.46, 28.59), -- Coords of where land vehicle spawn/return
heading = 3.68
},
air = {
coords = vec3(449.29, -981.76, 43.69), -- Coords of where air vehicles spawn/return
heading = 0.01
}
},
options = {
[0] = { -- Job grade as table name
['police'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser',
category = 'land', -- Options are 'land' and 'air'
},
['police2'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser #2',
category = 'land', -- Options are 'land' and 'air'
},
['polmav'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Maverick',
category = 'air', -- Options are 'land' and 'air'
},
},
[1] = { -- Job grade as table name
['police'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser',
category = 'land', -- Options are 'land' and 'air'
},
['police2'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser #2',
category = 'land', -- Options are 'land' and 'air'
},
['polmav'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Maverick',
category = 'air', -- Options are 'land' and 'air'
},
},
[2] = { -- Job grade as table name
['police'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser',
category = 'land', -- Options are 'land' and 'air'
},
['police2'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser #2',
category = 'land', -- Options are 'land' and 'air'
},
['polmav'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Maverick',
category = 'air', -- Options are 'land' and 'air'
},
},
[3] = { -- Job grade as table name
['police'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser',
category = 'land', -- Options are 'land' and 'air'
},
['police2'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Police Cruiser #2',
category = 'land', -- Options are 'land' and 'air'
},
['polmav'] = { -- Car/Helicopter/Vehicle Spawn Code/Model Name
label = 'Maverick',
category = 'air', -- Options are 'land' and 'air'
},
},
}
}
},
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'cn' end
if Config.Language ~= 'cn' then return end
Strings = {
jail_countdown_header = '你在监狱中',
jail_countdown_sentence = '%s 个月剩余',
jail_time_up = '刑期已满',
jail_time_up_desc = '你已服满刑期。',
no_society_account = '未找到社会账户,请检查您的配置!',
officer = '警官',
not_authorized = '未授权',
not_authorized_desc = '您没有使用此功能的权限!',
not_on_duty = '未值班',
not_on_duty_desc = '您目前不在值班中!',
gps_enabled = 'GPS 已启用',
gps_enabled_desc = '您已启用 GPS',
gps_disabled = 'GPS 已禁用',
gps_disabled_desc = '您已禁用 GPS',
new_speed_trap = '新测速器',
speed_limit = '速度限制',
detection_radius = '探测半径',
incorrect_input = '输入错误',
incorrect_input_cancel = '取消了先前的输入。',
incorrect_input_speed = '请输入有效的速度限制。',
radar_post = '雷达站',
ui_radar_post_place = 'E - 放置哨所 \n R - 旋转 \n BACK - 取消 \n UP/DOWN - 距离',
radar_post_placed = '雷达站已成功放置。',
radar_post_failed = '放置雷达站失败。',
speed_trap_rename = '重命名%s',
speed_trap = '测速器',
new_name = '新名称',
speed_trap_renamed = '您已成功将%s重命名为%s。',
speed_trap_rename_failed = '重命名雷达站失败!',
manage_trap_rename = '重命名雷达站',
manage_trap_rename_desc = '编辑此雷达站的名称',
manage_trap_delete = '移除雷达站',
manage_trap_delete_desc = '移除此雷达站',
menu_trap_create = '创建雷达站',
menu_trap_create_desc = '在您当前位置附近创建一个雷达站',
menu_trap_manage = '管理雷达站',
menu_trap_manage_desc = '管理最近的雷达站。',
menu_select_trap = '选择雷达站',
menu_radar_posts = '雷达哨所',
menu_radar_posts_desc = '部署/移除雷达哨所。',
warning_speedtrap_table = '^0[^1警告^0] 测速器数据库表未自动构建!',
menu_cctv_cameras = 'CCTV 摄像机',
menu_cctv_cameras_desc = '部署/移除 CCTV 摄像机',
menu_cctv_create = '创建 CCTV 摄像机',
menu_cctv_create_desc = '在您当前位置附近创建 CCTV 摄像机',
menu_select_cctv = '选择 CCTV 摄像机',
menu_cctv_manage = '管理 CCTV 摄像机',
menu_cctv_manage_desc = '管理最近的 CCTV 摄像机',
new_cctv = '新 CCTV 摄像机',
manage_cctv_rename = '重命名 CCTV 摄像机',
manage_cctv_rename_desc = '编辑此 CCTV 摄像机的名称',
cctv_renamed = '您已成功将 %s 重命名为 %s。',
cctv_rename_failed = '您未能重命名 CCTV 摄像机!',
manage_cctv_delete = '移除 CCTV 摄像机',
manage_cctv_delete_desc = '移除此 CCTV 摄像机',
manage_cctv_view = '查看 CCTV 摄像机',
manage_cctv_view_desc = '查看当前 CCTV 摄像机',
cctv = 'CCTV 摄像机',
cctv_placed = '已成功放置 CCTV 摄像机。',
cctv_failed = '放置 CCTV 摄像机失败。',
manage_cctv_repair = '修复 CCTV 摄像机',
manage_cctv_repair_desc = '修复此 CCTV 摄像机',
cctv_repaired = 'CCTV 摄像机已修复。',
cctv_repair_failed = '修复 CCTV 失败摄像机。',
warning_cctv_table = '^0[^1WARNING^0] CCTV 数据库表未自动构建!',
cctv_repairing = '正在修复 CCTV 摄像机。。',
cctv_not_broken = 'CCTV 摄像机未损坏',
cctv_destroyed = 'CCTV 摄像机已损坏',
cctv_destroyed_desc = '您已损坏 CCTV 摄像机',
cctv_not_closest = '不是最近的 CCTV 摄像机',
cctv_remove_error = '错误',
cctv_remove_error_desc = "您无法移除此 CCTV 摄像机",
menu_tracking_bracelet = '查看追踪手环',
menu_tracking_bracelet_desc = '查看城市中所有的追踪手环',
tracking_bracelet = '追踪手环',
tracking_bracelet_desc = '为附近的嫌疑人添加或移除追踪手环',
no_bracelets = '没有手环',
no_bracelets_desc = '城市中没有追踪手环。',
optn_tracking_bracelet_title = '嫌疑人: %s',
optn_tracking_bracelet_desc = '追踪手环添加者: %s',
tracking_bracelet_toggle_failed = '切换追踪手环失败!',
tracking_bracelet_toggle = '追踪手环切换',
tracking_bracelet_toggled_desc = '你已切换 %s 的追踪手环',
tracking_bracelet_toggle_failed_desc = '你未能切换 %s 的追踪手环',
got_tracking_bracelet = '追踪手环已添加',
got_tracking_bracelet_desc = '你获得了一个追踪手环',
start_tracking = '添加追踪手环',
stop_tracking = '移除追踪手环',
removed_tracking_bracelet = '追踪手环已移除',
removed_tracking_bracelet_desc = '追踪手环已被移除',
no_tracking_bracelet = '没有追踪手环',
no_tracking_bracelet_desc = '你没有追踪手环',
license_self = '自己',
grade_too_low = '等级太低',
grade_too_low_desc = '您的等级太低,无法执行此操作!',
invoice_amount = '发票金额',
amount_invoice = '金额',
reason_invoice = '原因',
description_invoice = '描述',
description_invoice_desc = '罚款备注',
tickets_invoice = '罚单',
tickets_invoice_desc = '选择罚款',
gov_billing = '政府债务追缴',
fine_id_invoice = '罚单ID',
offenses_invoice = '违法行为',
ticket_received = '您收到了来自%s的罚单',
speedtrap_fine = '测速器罚款',
speedtrap_fine_desc = '您因超速%s%s被罚款%s%s',
evidence_storage = '证据存储',
locker_number = '储物柜编号',
cuffed_last_online = '之前被手铐铐住',
cuffed_last_online_desc = '您上次在城市时被手铐铐住了。',
player_in_vehicle = '嫌疑人在车内',
player_in_vehicle_desc = '在执行此操作前,请将嫌疑人从车辆中移出!',
suspect_died_escort = '嫌疑人死亡',
suspect_died_escort_desc = '嫌疑人在护送过程中死亡,您丢下了他。',
stop_escorting_interact = '[E] - 停止护送',
cant_wield = '无法装备',
cant_wield_desc = '您目前无法使用此物品!',
jailed_player = '嫌疑人已入狱',
jailed_player_desc = '您已将%s监禁了%s个月。',
gps_active = 'GPS已激活',
gps_active_desc = '玩家%s激活了他们的GPS',
gps_deactive = 'GPS已停用',
gps_deactive_desc = '玩家%s停用了他们的GPS',
no_wsb = '^0[^3警告^0] wasabi_bridge没有在框架之后和资源之前启动%s',
currency = '¥',
success = '成功',
go_back = '返回',
cloakroom = '更衣室',
civilian_wear = '便服',
armoury_quantity_dialog = '订购数量',
quantity = '数量',
invalid_amount = '无效金额',
invalid_amount_desc = '请输入有效金额',
successful_purchase_desc = '您已成功从军械库订购武器',
lacking_funds = '资金不足',
lacking_funds_desc = '您银行账户中的资金不足,无法购买此物品',
no_permission = '无权限',
no_access_desc = '您无权访问此内容!',
key_map_cuff = '给玩家戴上手铐',
key_map_tackle = '奔跑中摔倒玩家',
key_map_job = '打开工作菜单',
no_nearby = '附近无人',
no_nearby_desc = '附近似乎没有人',
invalid_entry = '无效输入',
invalid_entry_desc = '请输入有效的条目。',
fines = '罚款',
fines_desc = '给附近的玩家开罚单',
search_player = '搜查嫌疑人',
search_player_desc = '搜查附近的嫌疑人',
jail_player = '监禁嫌疑人',
jail_player_desc = '监禁附近的嫌疑人',
minutes_dialog = '刑期',
minutes_dialog_field = '月',
escort_player = '护送嫌疑人',
escort_player_desc = '护送附近的嫌疑人',
handcuff_hard_player = '硬性手铐嫌疑人',
handcuff_hard_player_desc = '给附近的嫌疑人戴上硬性手铐',
handcuff_soft_player = '软性手铐嫌疑人',
handcuff_soft_player_desc = '给附近的嫌疑人戴上软性手铐',
put_in_vehicle = '放入车辆',
put_in_vehicle_desc = '将附近的嫌疑人放入车辆中',
check_id = '检查身份证',
check_id_desc = '检查附近嫌疑人的身份证。',
id_result_menu = '身份证结果',
name = '姓名',
job = '工作',
job_position = '职位',
dob = '出生日期',
sex = '性别',
bac = '血液酒精浓度',
licenses = '许可证',
total_licenses = '总许可证:',
no_licenses = '无许可证',
revoke_license = '吊销许可证',
license_revoked = '许可证已吊销',
license_revoked_desc = '您已成功吊销了许可证',
armoury_menu = '军械库菜单',
take_out_vehicle = '从车内移出',
take_out_vehicle_desc = '将嫌疑人从车辆中移出',
not_restrained = '目标未受约束',
not_restrained_desc = '您必须先约束犯罪嫌疑人,然后再护送他',
vehicle_not_found = '未找到车辆',
vehicle_not_found_desc = '附近未找到车辆',
unconcious = '人失去意识',
unconcious_desc = '此人似乎失去意识',
police_garage = '车库',
police = '警察',
plate = '车牌号',
owner = '车主',
possibly_stolen = '警告!',
possibly_stolen_desc = '车辆可能被盗',
vehicle_interactions = '车辆交互',
vehicle_interactions_desc = '检查附近的车辆',
vehicle_information = '车辆信息',
vehicle_information_desc = '有关附近车辆的信息',
lockpick_vehicle = '撬锁车辆',
locakpick_vehicle_desc = '强制进入附近的车辆',
lockpick_progress = '正在撬锁车辆 . . .',
too_far = '距离太远',
too_far_desc = '目标车辆距离太远',
lockpicked = '成功解锁',
lockpicked_desc = '您已成功解锁目标车辆',
cancelled = '已取消',
cancelled_desc = '您取消了最后一个操作',
impound_vehicle = '扣押车辆',
impound_vehicle_desc = '扣押附近的车辆',
impounding_progress = '正在扣押车辆 . . .',
driver_in_car = '司机在车内',
driver_in_car_desc = '在扣押车辆前,请先将司机移出!',
car_impounded_desc = '车辆已扣押',
place_object = '放置物体',
place_object_desc = '将物体放置在地上。',
prop_help_text = '按~INPUT_CONTEXT~移动物体。\n按~INPUT_DETONATE~删除物体。',
prop_help_text2 = '按~INPUT_CONTEXT~放置物体。',
seize_cash_title = '没收现金',
seize_cash = '现金被没收',
seize_cash_desc = '警方(%s)没收了您的现金',
seize_cash_label = '没收嫌疑人的现金',
seize_cash_failed = '没收失败',
seize_cash_failed_desc = '嫌疑人没有现金',
fine_sent = '罚单已发送',
fine_sent_desc = '您已成功发送罚单,金额为$%s',
fine_received = '罚单已收到',
fine_received_desc = '您已收到罚单,金额为$%s',
fine_nomoney = '罚单失败',
fine_nomoney_desc = '嫌疑人没有足够的钱支付罚单(罚单金额:$%s',
male = '男',
female = '女',
mr = '先生',
mrs = '女士',
debt_collection = '债务追缴',
db_email =
'尊敬的%s%s,<br /><br />中央司法收款局CJCA收取了您从警方收到的罚款。<br />从您的账户中扣除了<strong>$%s</strong>。<br /><br />此致,<br />Wasabi先生',
spawn_blocked = '车库被阻塞',
spawn_blocked_desc = '您的车辆无法开出,因为它被阻塞了!',
positive = '阳性',
positive_gsr_desc = '嫌疑人测试为阳性,有枪击残留物!',
negative = '阴性',
negative_gsr_desc = '嫌疑人测试为阴性,没有枪击残留物!',
gsr_test = '枪击残留物测试',
gsr_test_desc = '测试附近嫌疑人的枪击残留物',
hands_clean = '已清洗',
hands_clean_desc = '您已成功清洗手上的枪击残留物!',
gsr_wash_ui = '[E] - 洗手',
on_duty = '上班中',
on_duty_desc = '您现在上班了!',
off_duty = '下班中',
off_duty_desc = '您现在下班了!',
robbing_player = '抢劫受害者中...',
cancelled_action = '行动取消',
cancelled_action_desc = '您的上一个行动已取消!',
no_cuffs = '没有手铐',
no_cuffs_desc = '您的口袋里没有手铐!',
failed = '失败',
lockpick_handcuff_success = '您已成功撬开手铐!',
lockpick_handcuff_fail = '撬开手铐失败!',
lockpick_broke = '撬锁器弯曲',
lockpick_broke_desc = '您的撬锁器弯曲了!',
grant_license = '发放武器许可证',
grant_license_desc = '向附近的人发放武器许可证',
player_id = '玩家ID',
select_player = '选择人员',
license_granted = '许可证已发放',
license_granted_desc = '您已向%s%s发放了武器许可证',
license_alr_granted = '此人已经有许可证了!',
weapon_license = '武器许可证',
weapon_license_desc = '您刚刚获得了武器许可证。',
in_vehicle = '在车内',
in_vehicle_desc = '您不能在车内逮捕嫌疑人!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'cs' end
if Config.Language ~= 'cs' then return end
Strings = {
jail_countdown_header = 'JSTE VE VĚZENÍ',
jail_countdown_sentence = '%s měsíců zbývá',
jail_time_up = 'Čas ve vězení vypršel',
jail_time_up_desc = 'Odpykal jste si svůj čas ve vězení.',
no_society_account = 'Žádný účet společnosti nebyl nalezen - zkontrolujte svou konfiguraci!',
officer = 'Úředník',
not_authorized = 'Není oprávněno',
not_authorized_desc = 'Nemáte oprávnění to používat!',
not_on_duty = 'Není na službě',
not_on_duty_desc = 'Nyní nejste na službě!',
gps_enabled = 'GPS je povoleno',
gps_enabled_desc = 'GPS bylo povoleno',
gps_disabled = 'GPS je zakázáno',
gps_disabled_desc = 'GPS bylo zakázáno',
new_speed_trap = 'Nová rychlostní past',
speed_limit = 'Rychlostní limit',
detection_radius = 'Detekční rozsah',
incorrect_input = 'Nesprávný vstup',
incorrect_input_cancel = 'Předchozí vstup zrušen.',
incorrect_input_speed = 'Prosím, zadejte platný rychlostní limit.',
radar_post = 'Radarový sloup',
ui_radar_post_place = 'E - Umístit stanoviště \n R - Otočit \n BACK - Zrušit \n UP/DOWN - Vzdálenost',
radar_post_placed = 'Radarový sloup úspěšně umístěn.',
radar_post_failed = 'Nepodařilo se umístit radarový sloup.',
speed_trap_rename = 'Přejmenovat %s',
speed_trap = 'Rychlostní past',
new_name = 'Nové jméno',
speed_trap_renamed = 'Úspěšně jste přejmenovali %s na %s.',
speed_trap_rename_failed = 'Přejmenování radarového sloupu se nezdařilo!',
manage_trap_rename = 'Přejmenovat radarový sloup',
manage_trap_rename_desc = 'Upravit jméno tohoto radarového sloupu',
manage_trap_delete = 'Odstranit radarový sloup',
manage_trap_delete_desc = 'Odstranit tento radarový sloup',
menu_trap_create = 'Vytvořit radarový sloup',
menu_trap_create_desc = 'Vytvořit radarový sloup poblíž vaší aktuální polohy',
menu_trap_manage = 'Spravovat radarový sloup',
menu_trap_manage_desc = 'Spravovat nejbližší radarový sloup.',
menu_select_trap = 'Vybrat radarový sloup',
menu_radar_posts = 'Radarové stanoviště',
menu_radar_posts_desc = 'Nasadit/Odstranit radarové stanoviště.',
warning_speedtrap_table = '^0[^1VAROVÁNÍ^0] Tabulka databáze rychlostních pastí nebyla automaticky vytvořena!',
menu_cctv_cameras = 'CCTV kamery',
menu_cctv_cameras_desc = 'Nasadit/Odstranit CCTV kamery',
menu_cctv_create = 'Vytvořit CCTV kameru',
menu_cctv_create_desc = 'Vytvořte CCTV kameru poblíž vaší aktuální polohy',
menu_select_cctv = 'Vybrat CCTV kameru',
menu_cctv_manage = 'Správa CCTV kamery',
menu_cctv_manage_desc = 'Spravovat nejbližší CCTV kameru',
new_cctv = 'Nová CCTV kamera',
manage_cctv_rename = 'Přejmenovat kameru CCTV',
manage_cctv_rename_desc = 'Upravit název této CCTV kamery',
cctv_renamed = 'Úspěšně jste přejmenovali %s na %s.',
cctv_rename_failed = 'Nezdařilo se vám přejmenovat CCTV kameru!',
manage_cctv_delete = 'Odstranit CCTV kameru',
manage_cctv_delete_desc = 'Odstranit tuto CCTV kameru',
manage_cctv_view = 'Zobrazit kameru CCTV',
manage_cctv_view_desc = 'Zobrazit aktuální CCTV kameru',
cctv = 'CCTV kamera',
cctv_placed = 'CCTV kamera byla úspěšně umístěna.',
cctv_failed = 'Nepodařilo se umístit CCTV kameru.',
manage_cctv_repair = 'Opravit CCTV kameru',
manage_cctv_repair_desc = 'Opravit tuto CCTV kameru',
cctv_repaired = 'CCTV kamera byla opravena.',
cctv_repair_failed = 'Nepodařilo se opravit CCTV kameru.',
warning_cctv_table = '^0[^1WARNING^0] CCTV databázová tabulka se nevytvořila automaticky!',
cctv_repairing = 'Oprava CCTV kamery. . .',
cctv_not_broken = 'CCTV kamera není rozbitá',
cctv_destroyed = 'CCTV kamera zničena',
cctv_destroyed_desc = 'Zničili jste CCTV kameru',
cctv_not_closest = 'Není nejbližší CCTV kamera',
cctv_remove_error = 'Chyba',
cctv_remove_error_desc = "Nemůžete odstranit tuto CCTV kameru",
menu_tracking_bracelet = 'Zobrazit sledovací náramky',
menu_tracking_bracelet_desc = 'Zobrazit všechny sledovací náramky ve městě',
tracking_bracelet = 'Sledovací náramek',
tracking_bracelet_desc = 'Přidejte nebo odeberte sledovací náramek od blízkého podezřelého',
no_bracelets = 'Žádné náramky',
no_bracelets_desc = 'Ve městě nejsou žádné sledovací náramky.',
optn_tracking_bracelet_title = 'Podezřelý: %s',
optn_tracking_bracelet_desc = 'Sledovací náramek přidán: %s',
tracking_bracelet_toggle_failed = 'Nepodařilo se přepnout sledovací náramek!',
tracking_bracelet_toggle = 'Sledovací náramek přepnut',
tracking_bracelet_toggled_desc = 'Přepnul(a) jsi sledovací náramek pro %s',
tracking_bracelet_toggle_failed_desc = 'Nepodařilo se přepnout sledovací náramek pro %s',
got_tracking_bracelet = 'Sledovací náramek přidán',
got_tracking_bracelet_desc = 'Získal(a) jsi sledovací náramek',
start_tracking = 'Přidávání sledovacího náramku',
stop_tracking = 'Odebrání sledovacího náramku',
removed_tracking_bracelet = 'Sledovací náramek odebrán',
removed_tracking_bracelet_desc = 'Sledovací náramek byl odebrán',
no_tracking_bracelet = 'Žádný sledovací náramek',
no_tracking_bracelet_desc = 'Nemáš sledovací náramek',
license_self = 'Sám',
grade_too_low = 'Příliš nízká hodnost',
grade_too_low_desc = 'Vaše hodnost je příliš nízká pro tuto akci!',
invoice_amount = 'Částka faktury',
amount_invoice = 'Částka',
reason_invoice = 'Důvod',
description_invoice = 'Popis',
description_invoice_desc = 'Poznámky k pokutě',
tickets_invoice = 'Pokuty',
tickets_invoice_desc = 'Vybrat pokuty',
gov_billing = 'Vládní výběr dluhů',
fine_id_invoice = 'ID pokuty',
offenses_invoice = 'Přestupky',
ticket_received = 'Obdrželi jste pokutu od %s',
speedtrap_fine = 'Pokuta za rychlostní past',
speedtrap_fine_desc = 'Byli jste pokutováni částkou %s%s za překročení limitu o %s%s na kameře!',
evidence_storage = 'Sklad důkazů',
locker_number = 'Číslo skříňky',
cuffed_last_online = 'Dříve spoutaný',
cuffed_last_online_desc = 'Když jste byli naposledy ve městě, byli jste spoutáni.',
player_in_vehicle = 'Podezřelý ve vozidle',
player_in_vehicle_desc = 'Před provedením této akce vyjměte podezřelého z vozidla!',
suspect_died_escort = 'Podezřelý zemřel',
suspect_died_escort_desc = 'Podezřelý zemřel během eskorty a upustil jste ho.',
stop_escorting_interact = '[E] - Zastavit eskortu',
cant_wield = 'Nelze vybavit',
cant_wield_desc = 'V tuto chvíli to nemůžete použít!',
jailed_player = 'Podezřelý uvězněn',
jailed_player_desc = 'Uvěznili jste %s na %s měsíců.',
gps_active = 'GPS aktivováno',
gps_active_desc = 'Hráč %s aktivoval své GPS',
gps_deactive = 'GPS deaktivováno',
gps_deactive_desc = 'Hráč %s deaktivoval své GPS',
no_wsb = '^0[^3VAROVÁNÍ^0] wasabi_bridge nebyl spuštěn PO frameworku a/nebo PŘED zdrojem: %s',
currency = 'Kč',
success = 'Úspěch',
go_back = 'Zpět',
cloakroom = 'Šatna',
civilian_wear = 'Civilní oblečení',
armoury_quantity_dialog = 'Množství k objednání',
quantity = 'Množství',
invalid_amount = 'Neplatná částka',
invalid_amount_desc = 'Prosím, zadejte platnou částku',
successful_purchase_desc = 'Úspěšně jste si objednali zbraně ze zbrojnice',
lacking_funds = 'Nedostatek prostředků',
lacking_funds_desc = 'Nemáte dostatek prostředků na účtu pro tento nákup',
no_permission = 'Bez povolení',
no_access_desc = 'Nemáte oprávnění k přístupu k tomuto!',
key_map_cuff = 'Spoutat hráče',
key_map_tackle = 'Srazit hráče při sprintu',
key_map_job = 'Otevřít pracovní menu',
no_nearby = 'Nikdo nalezen',
no_nearby_desc = 'Zdá se, že nikdo není poblíž',
invalid_entry = 'Neplatný vstup',
invalid_entry_desc = 'Zadejte prosím platný vstup.',
fines = 'Pokuty',
fines_desc = 'Udělit pokutu hráči poblíž',
search_player = 'Prohledat podezřelého',
search_player_desc = 'Prohledat podezřelého poblíž',
jail_player = 'Uvést podezřelého do vězení',
jail_player_desc = 'Uvést podezřelého poblíž do vězení',
minutes_dialog = 'Rozsudek',
minutes_dialog_field = 'Měsíce',
escort_player = 'Eskortovat podezřelého',
escort_player_desc = 'Eskortovat podezřelého poblíž',
handcuff_hard_player = 'Spoutat podezřelého (tvrdě)',
handcuff_hard_player_desc = 'Spoutat podezřelého poblíž (tvrdě)',
handcuff_soft_player = 'Spoutat podezřelého (měkce)',
handcuff_soft_player_desc = 'Spoutat podezřelého poblíž (měkce)',
put_in_vehicle = 'Umístit do vozidla',
put_in_vehicle_desc = 'Umístit podezřelého poblíž do vozidla',
check_id = 'Zkontrolovat identifikaci',
check_id_desc = 'Zkontrolovat ID podezřelého poblíž.',
id_result_menu = 'Výsledky identifikace',
name = 'Jméno',
job = 'Práce',
job_position = 'Pozice',
dob = 'Datum narození',
sex = 'Pohlaví',
bac = 'BAC',
licenses = 'Licence',
total_licenses = 'Celkem licencí:',
no_licenses = 'Žádné licence',
revoke_license = 'Odebrat licenci',
license_revoked = 'Licence odebrána',
license_revoked_desc = 'Úspěšně jste odebrali licenci',
armoury_menu = 'Menu zbrojnice',
take_out_vehicle = 'Vyjmout z vozidla',
take_out_vehicle_desc = 'Vyjmout podezřelého z vozidla',
not_restrained = 'Cíl není spoután',
not_restrained_desc = 'Musíte zločince spoutat před eskortováním',
vehicle_not_found = 'Vozidlo nenalezeno',
vehicle_not_found_desc = 'V okolí nebylo nalezeno žádné vozidlo',
unconcious = 'Osoba v bezvědomí',
unconcious_desc = 'Osoba vypadá, že je v bezvědomí',
police_garage = 'Garáž',
police = 'Policie',
plate = 'SPZ',
owner = 'Majitel',
possibly_stolen = 'Pozor!',
possibly_stolen_desc = 'Vozidlo je možná kradené',
vehicle_interactions = 'Interakce s vozidlem',
vehicle_interactions_desc = 'Prohlédnout vozidlo poblíž',
vehicle_information = 'Informace o vozidle',
vehicle_information_desc = 'Informace o vozidle poblíž',
lockpick_vehicle = 'Vyháčkovat vozidlo',
locakpick_vehicle_desc = 'Vynucený přístup k vozidlu poblíž',
lockpick_progress = 'Vyháčkování vozidla . . .',
too_far = 'Příliš daleko',
too_far_desc = 'Cílové vozidlo je příliš daleko',
lockpicked = 'Úspěšně odemčeno',
lockpicked_desc = 'Úspěšně jste odemkli cílové vozidlo',
cancelled = 'Zrušeno',
cancelled_desc = 'Poslední akce byla zrušena',
impound_vehicle = 'Odtáhnout vozidlo',
impound_vehicle_desc = 'Odtáhnout vozidlo poblíž',
impounding_progress = 'Odtahování vozidla . . .',
driver_in_car = 'Řidič ve vozidle',
driver_in_car_desc = 'Před odtažením vyjměte řidiče z vozidla!',
car_impounded_desc = 'Vozidlo bylo odtaženo',
place_object = 'Umístit předměty',
place_object_desc = 'Umístit předměty na podlahu.',
prop_help_text =
'Stiskněte ~INPUT_CONTEXT~ pro přesun předmětu.\nStiskněte ~INPUT_DETONATE~ pro odstranění předmětu.',
prop_help_text2 = 'Stiskněte ~INPUT_CONTEXT~ pro umístění předmětu.',
seize_cash_title = 'Zabavit peníze',
seize_cash = 'Peníze zabaveny',
seize_cash_desc = 'Policie(%s) zabavila vaše peníze',
seize_cash_label = 'Zabavené peníze podezřelého',
seize_cash_failed = 'Zabavení se nezdařilo',
seize_cash_failed_desc = 'Podezřelý nemá žádné peníze',
fine_sent = 'Pokuty odeslány',
fine_sent_desc = 'Úspěšně jste odeslali pokutu ve výši $%s!',
fine_received = 'Pokuta přijata',
fine_received_desc = 'Obdrželi jste pokutu ve výši $%s',
fine_nomoney = 'Pokuta neúspěšná',
fine_nomoney_desc = 'Podezřelý nemá dostatek peněz na zaplacení pokuty (Výše pokuty: $%s)',
male = 'Muž',
female = 'Žena',
mr = 'Pan',
mrs = 'Paní',
debt_collection = 'Vymáhání dluhů',
db_email =
'Vážený %s %s,<br /><br />Centrální soudní inkasní agentura (CJCA) vybrala pokuty, které jste obdrželi od policie.<br />Z vašeho účtu byla odečtena částka <strong>$%s</strong>.<br /><br />S pozdravem,<br />Pan Wasabi',
spawn_blocked = 'Garáž zablokována',
spawn_blocked_desc = 'Nemůžete vytáhnout své vozidlo, protože je zablokováno!',
positive = 'Pozitivní',
positive_gsr_desc = 'Podezřelý testoval POZITIVNÍ na střelný prach!',
negative = 'Negativní',
negative_gsr_desc = 'Podezřelý testoval NEGATIVNÍ na střelný prach!',
gsr_test = 'Test na střelný prach',
gsr_test_desc = 'Otestujte podezřelého poblíž na střelný prach',
hands_clean = 'Čisté ruce',
hands_clean_desc = 'Úspěšně jste si umyli ruce od střelného prachu!',
gsr_wash_ui = '[E] - Umyjte si ruce',
on_duty = 'Ve službě',
on_duty_desc = 'Nyní jste ve službě!',
off_duty = 'Mimo službu',
off_duty_desc = 'Nyní jste mimo službu!',
robbing_player = 'Loupí oběť...',
cancelled_action = 'Akce zrušena',
cancelled_action_desc = 'Vaše poslední akce byla zrušena!',
no_cuffs = 'Žádná pouta',
no_cuffs_desc = 'Nemáte žádná pouta v kapsách!',
failed = 'Neúspěšný',
lockpick_handcuff_success = 'Úspěšně jste odemkli pouta!',
lockpick_handcuff_fail = 'Neúspěšný pokus o odemknutí pout!',
lockpick_broke = 'Zlomený zámek',
lockpick_broke_desc = 'Váš zámek se zlomil!',
grant_license = 'Vydat zbrojní průkaz',
grant_license_desc = 'Vydat zbrojní průkaz osobě poblíž',
player_id = 'ID hráče:',
select_player = 'Vybrat osobu',
license_granted = 'Licence udělena',
license_granted_desc = 'Vydali jste zbrojní průkaz %s (%s)',
license_alr_granted = 'Tato osoba již má licenci!',
weapon_license = 'Zbrojní průkaz',
weapon_license_desc = 'Právě vám byl vydán zbrojní průkaz.',
in_vehicle = 'Ve vozidle',
in_vehicle_desc = 'Nemůžete zatknout podezřelého, když je ve vozidle!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'da' end
if Config.Language ~= 'da' then return end
Strings = {
jail_countdown_header = 'DU ER I FÆNGSEL',
jail_countdown_sentence = '%s måneder tilbage',
jail_time_up = 'Fængselstid udløbet',
jail_time_up_desc = 'Du har udstået din straf i fængslet.',
no_society_account = 'Ingen samfundskonto fundet - tjek din konfiguration!',
officer = 'Officer',
not_authorized = 'Ikke autoriseret',
not_authorized_desc = 'Du har ikke tilladelse til at bruge dette!',
not_on_duty = 'Ikke på vagt',
not_on_duty_desc = 'Du er ikke på vagt!',
gps_enabled = 'GPS Aktiveret',
gps_enabled_desc = 'Du har aktiveret din GPS',
gps_disabled = 'GPS Deaktiveret',
gps_disabled_desc = 'Du har deaktiveret din GPS',
new_speed_trap = 'Ny Fartfælde',
speed_limit = 'Fartgrænse',
detection_radius = 'Detektionsradius',
incorrect_input = 'Forkert Indtastning',
incorrect_input_cancel = 'Forrige indtastning annulleret.',
incorrect_input_speed = 'Indtast venligst en gyldig fartgrænse.',
radar_post = 'Radarpost',
ui_radar_post_place = 'E - Placer post \n R - Drej \n BACK - Annuller \n UP/DOWN - Afstand',
radar_post_placed = 'Radarpost succesfuldt placeret.',
radar_post_failed = 'Fejl ved placering af radarpost.',
speed_trap_rename = 'Omdøb %s',
speed_trap = 'Fartfælde',
new_name = 'Nyt Navn',
speed_trap_renamed = 'Du har succesfuldt omdøbt %s til %s.',
speed_trap_rename_failed = 'Fejl ved omdøbning af radarpost!',
manage_trap_rename = 'Omdøb Radarpost',
manage_trap_rename_desc = 'Rediger navnet på denne radarpost',
manage_trap_delete = 'Fjern Radarpost',
manage_trap_delete_desc = 'Fjern denne radarpost',
menu_trap_create = 'Opret Radarpost',
menu_trap_create_desc = 'Opret en radarpost nær din nuværende placering',
menu_trap_manage = 'Administrer Radarpost',
menu_trap_manage_desc = 'Administrer den nærmeste radarpost.',
menu_select_trap = 'Vælg Radarpost',
menu_radar_posts = 'Radarpunkter',
menu_radar_posts_desc = 'Udsend/Fjern radarpunkter.',
warning_speedtrap_table = '^0[^1ADVARSEL^0] Fartfælde-databasetabellen blev ikke automatisk oprettet!',
menu_cctv_cameras = 'CCTV-kameraer',
menu_cctv_cameras_desc = 'Installer/fjern CCTV-kameraer',
menu_cctv_create = 'Opret CCTV-kamera',
menu_cctv_create_desc = 'Opret et CCTV-kamera nær din nuværende placering',
menu_select_cctv = 'Vælg CCTV-kamera',
menu_cctv_manage = 'Administrer CCTV-kamera',
menu_cctv_manage_desc = 'Administrer det nærmeste CCTV-kamera',
new_cctv = 'Nyt CCTV-kamera',
manage_cctv_rename = 'Omdøb CCTV-kamera',
manage_cctv_rename_desc = 'Rediger navnet på dette CCTV-kamera',
cctv_renamed = 'Du har omdøbt %s til %s.',
cctv_rename_failed = 'Du har undladt at omdøbe CCTV-kamera!',
manage_cctv_delete = 'Fjern CCTV-kamera',
manage_cctv_delete_desc = 'Fjern dette CCTV-kamera',
manage_cctv_view = 'Se CCTV-kamera',
manage_cctv_view_desc = 'Se det aktuelle CCTV-kamera',
cctv = 'CCTV-kamera',
cctv_placed = 'CCTV-kamera er blevet placeret.',
cctv_failed = 'Kunne ikke placere CCTV-kamera.',
manage_cctv_repair = 'Reparer CCTV-kamera',
manage_cctv_repair_desc = 'Reparer dette CCTV-kamera',
cctv_repaired = 'CCTV-kamera er blevet repareret.',
cctv_repair_failed = 'Kunne ikke reparere CCTV-kamera.',
warning_cctv_table = '^0[^1ADVARSEL^0] CCTV-databasetabellen blev ikke automatisk bygget!',
cctv_repairing = 'Reparerer CCTV-kamera. . .',
cctv_not_broken = 'CCTV-kamera er ikke ødelagt',
cctv_destroyed = 'CCTV-kamera ødelagt',
cctv_destroyed_desc = 'Du har ødelagt CCTV-kameraet',
cctv_not_closest = 'Ikke nærmeste CCTV-kamera',
cctv_remove_error = 'Fejl',
cctv_remove_error_desc = "Du kan ikke fjerne dette CCTV-kamera",
menu_tracking_bracelet = 'Vis Sporingsarmbånd',
menu_tracking_bracelet_desc = 'Vis alle sporingsarmbånd i byen',
tracking_bracelet = 'Sporingsarmbånd',
tracking_bracelet_desc = 'Tilføj eller fjern et sporingsarmbånd fra en nærliggende mistænkt',
no_bracelets = 'Ingen Armbånd',
no_bracelets_desc = 'Der er ingen sporingsarmbånd i byen.',
optn_tracking_bracelet_title = 'Mistænkt: %s',
optn_tracking_bracelet_desc = 'Sporingsarmbånd Tilføjet Af: %s',
tracking_bracelet_toggle_failed = 'Kunne ikke skifte sporingsarmbånd!',
tracking_bracelet_toggle = 'Sporingsarmbånd Skiftet',
tracking_bracelet_toggled_desc = 'Du har skiftet sporingsarmbånd for %s',
tracking_bracelet_toggle_failed_desc = 'Du kunne ikke skifte sporingsarmbånd for %s',
got_tracking_bracelet = 'Sporingsarmbånd Tilføjet',
got_tracking_bracelet_desc = 'Du har fået et sporingsarmbånd',
start_tracking = 'Tilføjer Sporingsarmbånd',
stop_tracking = 'Fjerner Sporingsarmbånd',
removed_tracking_bracelet = 'Sporingsarmbånd Fjerne',
removed_tracking_bracelet_desc = 'Sporingsarmbåndet er blevet fjernet',
no_tracking_bracelet = 'Ingen Sporingsarmbånd',
no_tracking_bracelet_desc = 'Du har ikke et sporingsarmbånd',
license_self = 'Selv',
grade_too_low = 'For Lav Rang',
grade_too_low_desc = 'Din rang er for lav til denne handling!',
invoice_amount = 'Faktura Beløb',
amount_invoice = 'Beløb',
reason_invoice = 'Årsag',
description_invoice = 'Beskrivelse',
description_invoice_desc = 'Noter til Bøde',
tickets_invoice = 'Bøder',
tickets_invoice_desc = 'Vælg Bøder',
gov_billing = 'Statens Opkrævning',
fine_id_invoice = 'Bøde ID',
offenses_invoice = 'Overtrædelser',
ticket_received = 'Du har modtaget en bøde fra %s',
speedtrap_fine = 'Fartfælde Bøde',
speedtrap_fine_desc = 'Du er blevet bødet med %s%s for at overskride grænsen med %s%s fanget på kamera!',
evidence_storage = 'Bevislager',
locker_number = 'Skabsnummer',
cuffed_last_online = 'Tidligere Håndjern',
cuffed_last_online_desc = 'Du havde håndjern på, da du sidst var i byen.',
player_in_vehicle = 'Mistænkt i Køretøj',
player_in_vehicle_desc = 'Fjern den mistænkte fra køretøjet før du gør dette!',
suspect_died_escort = 'Mistænkt Døde',
suspect_died_escort_desc = 'Den mistænkte døde under eskortering og du tabte dem.',
stop_escorting_interact = '[E] - Stop Eskortering',
cant_wield = 'Kan Ikke Udstyre',
cant_wield_desc = 'Du kan ikke bruge dette lige nu!',
jailed_player = 'Mistænkt Fængslet',
jailed_player_desc = 'Du har fængslet %s i %s måneder.',
gps_active = 'GPS Aktiveret',
gps_active_desc = 'Spiller %s har aktiveret deres GPS',
gps_deactive = 'GPS Deaktiveret',
gps_deactive_desc = 'Spiller %s har deaktiveret deres GPS',
no_wsb = '^0[^3ADVARSEL^0] wasabi_bridge blev IKKE startet EFTER frameworket og/eller FØR ressourcen: %s',
currency = 'kr',
success = 'Succes',
go_back = 'Tilbage',
cloakroom = 'Omklædningsrum',
civilian_wear = 'Civil Beklædning',
armoury_quantity_dialog = 'Antal at Bestille',
quantity = 'Antal',
invalid_amount = 'Ugyldigt Beløb',
invalid_amount_desc = 'Indtast venligst et gyldigt beløb',
successful_purchase_desc = 'Du har succesfuldt bestilt dine våben fra våbenkammeret',
lacking_funds = 'Mangel på Midler',
lacking_funds_desc = 'Du har ikke nok penge på banken til dette køb',
no_permission = 'Ingen Tilladelse',
no_access_desc = 'Du har ikke tilladelse til at få adgang til dette!',
key_map_cuff = 'Håndjern på Spiller',
key_map_tackle = 'Tackl spiller under løb',
key_map_job = 'Åbn Jobmenu',
no_nearby = 'Ingen Fundet',
no_nearby_desc = 'Der ser ikke ud til at være nogen i nærheden',
invalid_entry = 'Ugyldig Indtastning',
invalid_entry_desc = 'Indtast venligst en gyldig indtastning.',
fines = 'Bøder',
fines_desc = 'Giv en bøde til en nærliggende spiller',
search_player = 'Ransag Mistænkt',
search_player_desc = 'Ransag en nærliggende mistænkt',
jail_player = 'Fængsel Mistænkt',
jail_player_desc = 'Fængsel en nærliggende mistænkt',
minutes_dialog = 'Dom',
minutes_dialog_field = 'Måneder',
escort_player = 'Eskortér Mistænkt',
escort_player_desc = 'Eskortér en nærliggende mistænkt',
handcuff_hard_player = 'Håndjern på Mistænkt (hårdt)',
handcuff_hard_player_desc = 'Håndjern på en nærliggende mistænkt (hårdt)',
handcuff_soft_player = 'Håndjern på Mistænkt (blødt)',
handcuff_soft_player_desc = 'Håndjern på en nærliggende mistænkt (blødt)',
put_in_vehicle = 'Sæt i Køretøj',
put_in_vehicle_desc = 'Sæt en nærliggende mistænkt i køretøjet',
check_id = 'Tjek Identifikation',
check_id_desc = 'Tjek ID på en nærliggende mistænkt.',
id_result_menu = 'Identifikationsresultater',
name = 'Navn',
job = 'Job',
job_position = 'Position',
dob = 'Fødselsdato',
sex = 'Køn',
bac = 'BAC',
licenses = 'Licenser',
total_licenses = 'Samlede Licenser:',
no_licenses = 'Ingen Licenser',
revoke_license = 'Inddrag Licens',
license_revoked = 'Licens Inddraget',
license_revoked_desc = 'Du har succesfuldt inddraget licensen',
armoury_menu = 'Våbenkammermenu',
take_out_vehicle = 'Tag Ud af Køretøj',
take_out_vehicle_desc = 'Fjern mistænkt fra køretøj',
not_restrained = 'Mål Ikke Fastholdt',
not_restrained_desc = 'Du skal fastholde den kriminelle før eskortering',
vehicle_not_found = 'Intet Køretøj Fundet',
vehicle_not_found_desc = 'Der blev ikke fundet noget køretøj i nærheden',
unconcious = 'Bevidstløs Person',
unconcious_desc = 'Personen ser ud til at være bevidstløs',
police_garage = 'Garage',
police = 'Politi',
plate = 'Nummerplade',
owner = 'Ejer',
possibly_stolen = 'Advarsel!',
possibly_stolen_desc = 'Køretøj Muligvis Stjålet',
vehicle_interactions = 'Køretøjsinteraktioner',
vehicle_interactions_desc = 'Inspicer nærliggende køretøj',
vehicle_information = 'Køretøjsinformation',
vehicle_information_desc = 'Information om nærliggende køretøj',
lockpick_vehicle = 'Dirk Køretøj',
locakpick_vehicle_desc = 'Tving adgang til nærliggende køretøj',
lockpick_progress = 'Dirker Køretøj . . .',
too_far = 'For Langt Væk',
too_far_desc = 'Målkøretøjet er for langt væk',
lockpicked = 'Succesfuldt Låst Op',
lockpicked_desc = 'Du har succesfuldt låst målkøretøjet op',
cancelled = 'Annulleret',
cancelled_desc = 'Du annullerede din sidste handling',
impound_vehicle = 'Pantsæt Køretøj',
impound_vehicle_desc = 'Pantsæt nærliggende køretøj',
impounding_progress = 'Pantsætter Køretøj . . .',
driver_in_car = 'Chauffør i Køretøj',
driver_in_car_desc = 'Fjern chaufføren fra køretøjet før pantsætning!',
car_impounded_desc = 'Køretøj er blevet pantsat',
place_object = 'Placer Genstande',
place_object_desc = 'Placer genstande på gulvet.',
prop_help_text =
'Tryk på ~INPUT_CONTEXT~ for at flytte genstanden.\nTryk på ~INPUT_DETONATE~ for at slette genstanden.',
prop_help_text2 = 'Tryk på ~INPUT_CONTEXT~ for at placere genstanden.',
seize_cash_title = 'Beslaglæg Kontanter',
seize_cash = 'Kontanter Beslaglagt',
seize_cash_desc = 'Politiet(%s) har beslaglagt dine kontanter',
seize_cash_label = 'Mistænkts kontanter beslaglagt',
seize_cash_failed = 'Beslaglæggelse Fejlede',
seize_cash_failed_desc = 'Mistænkte har ingen kontanter',
fine_sent = 'Bøder Sendt',
fine_sent_desc = 'Du har succesfuldt sendt en bøde på $%s!',
fine_received = 'Bøde Modtaget',
fine_received_desc = 'Du har modtaget en bøde på $%s',
fine_nomoney = 'Bøde Mislykkedes',
fine_nomoney_desc = 'Mistænkte har ikke nok penge til at betale bøden (Bødetotal: $%s)',
male = 'Mand',
female = 'Kvinde',
mr = 'Hr.',
mrs = 'Fru.',
debt_collection = 'Gældsinddrivelse',
db_email =
'Kære %s %s,<br /><br />Central Retlig Inddrivelse (CJCA) har indkrævet de bøder, du modtog fra politiet.<br />Der er blevet trukket <strong>$%s</strong> fra din konto.<br /><br />Med venlig hilsen,<br />Hr. Wasabi',
spawn_blocked = 'Garage Blokeret',
spawn_blocked_desc = 'Du kan ikke tage dit køretøj ud, fordi det er blokeret!',
positive = 'Positiv',
positive_gsr_desc = 'Mistænkte testede POSITIV for krudtrester!',
negative = 'Negativ',
negative_gsr_desc = 'Mistænkte testede NEGATIV for krudtrester!',
gsr_test = 'Krudtrester Test',
gsr_test_desc = 'Test en nærliggende mistænkt for krudtrester',
hands_clean = 'Rene Hænder',
hands_clean_desc = 'Du har succesfuldt renset dine hænder for krudtrester!',
gsr_wash_ui = '[E] - Vask Hænder',
on_duty = 'På Vagt',
on_duty_desc = 'Du er nu på vagt!',
off_duty = 'Off Duty',
off_duty_desc = 'Du er nu off duty!',
robbing_player = 'Røver Offer...',
cancelled_action = 'Handling Annulleret',
cancelled_action_desc = 'Din sidste handling blev annulleret!',
no_cuffs = 'Ingen Håndjern',
no_cuffs_desc = 'Du har ingen håndjern i dine lommer!',
failed = 'Mislykkedes',
lockpick_handcuff_success = 'Du har succesfuldt åbnet håndjernene!',
lockpick_handcuff_fail = 'Fejl ved åbning af håndjern!',
lockpick_broke = 'Dirk Knækket',
lockpick_broke_desc = 'Din dirk er knækket!',
grant_license = 'Udsted Våbentilladelse',
grant_license_desc = 'Udsted en våbentilladelse til en nærliggende person',
player_id = 'Spiller ID:',
select_player = 'Vælg Person',
license_granted = 'Tilladelse Givet',
license_granted_desc = 'Du har udstedt en våbentilladelse til %s (%s)',
license_alr_granted = 'Denne person har allerede en tilladelse!',
weapon_license = 'Våbentilladelse',
weapon_license_desc = 'Du har lige modtaget en våbentilladelse.',
in_vehicle = 'I Køretøj',
in_vehicle_desc = 'Du kan ikke arrestere mistænkte, mens de er i køretøjet!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'de' end
if Config.Language ~= 'de' then return end
Strings = {
jail_countdown_header = 'SIE SIND IM GEFÄNGNIS',
jail_countdown_sentence = '%s Monate verbleibend',
jail_time_up = 'Gefängniszeit abgelaufen',
jail_time_up_desc = 'Sie haben Ihre Zeit im Gefängnis abgesessen.',
no_society_account = 'Kein Gesellschaftskonto gefunden - überprüfen Sie Ihre Konfiguration!',
officer = 'Beamter',
not_authorized = 'Nicht autorisiert',
not_authorized_desc = 'Sie sind nicht berechtigt, dies zu verwenden!',
not_on_duty = 'Nicht im Dienst',
not_on_duty_desc = 'Sie sind nicht im Dienst!',
gps_enabled = 'GPS aktiviert',
gps_enabled_desc = 'Sie haben Ihr GPS aktiviert',
gps_disabled = 'GPS deaktiviert',
gps_disabled_desc = 'Sie haben Ihr GPS deaktiviert',
new_speed_trap = 'Neues Geschwindigkeitsradar',
speed_limit = 'Geschwindigkeitsbegrenzung',
detection_radius = 'Erkennungsradius',
incorrect_input = 'Falsche Eingabe',
incorrect_input_cancel = 'Vorherige Eingabe abgebrochen.',
incorrect_input_speed = 'Bitte geben Sie eine gültige Geschwindigkeitsbegrenzung ein.',
radar_post = 'Radarpfosten',
ui_radar_post_place = 'E - Posten platzieren \n R - Drehen \n BACK - Abbrechen \n UP/DOWN - Entfernung',
radar_post_placed = 'Radarpfosten erfolgreich platziert.',
radar_post_failed = 'Radarpfosten konnte nicht platziert werden.',
speed_trap_rename = '%s umbenennen',
speed_trap = 'Geschwindigkeitsradar',
new_name = 'Neuer Name',
speed_trap_renamed = 'Sie haben %s erfolgreich in %s umbenannt.',
speed_trap_rename_failed = 'Radarpfosten konnte nicht umbenannt werden!',
manage_trap_rename = 'Radarpfosten umbenennen',
manage_trap_rename_desc = 'Den Namen dieses Radarpfostens bearbeiten',
manage_trap_delete = 'Radarpfosten entfernen',
manage_trap_delete_desc = 'Diesen Radarpfosten entfernen',
menu_trap_create = 'Radarpfosten erstellen',
menu_trap_create_desc = 'Einen Radarpfosten in Ihrer Nähe erstellen',
menu_trap_manage = 'Radarpfosten verwalten',
menu_trap_manage_desc = 'Den nächsten Radarpfosten verwalten.',
menu_select_trap = 'Radarpfosten auswählen',
menu_radar_posts = 'Radarstationen',
menu_radar_posts_desc = 'Radarstationen einsetzen/entfernen.',
warning_speedtrap_table =
'^0[^1WARNUNG^0] Die Geschwindigkeitsradar-Datenbanktabelle wurde nicht automatisch erstellt!',
menu_cctv_cameras = 'CCTV-Kameras',
menu_cctv_cameras_desc = 'CCTV-Kameras bereitstellen/entfernen',
menu_cctv_create = 'CCTV-Kamera erstellen',
menu_cctv_create_desc = 'CCTV-Kamera in der Nähe Ihres aktuellen Standorts erstellen',
menu_select_cctv = 'CCTV-Kamera auswählen',
menu_cctv_manage = 'CCTV-Kamera verwalten',
menu_cctv_manage_desc = 'Nächstgelegene CCTV-Kamera verwalten',
new_cctv = 'Neue CCTV-Kamera',
manu_cctv_rename = 'CCTV-Kamera umbenennen',
manu_cctv_rename_desc = 'Name dieser CCTV-Kamera bearbeiten',
cctv_renamed = 'Sie haben %s erfolgreich in %s umbenannt.',
cctv_rename_failed = 'Das Umbenennen der CCTV-Kamera ist fehlgeschlagen!',
manage_cctv_delete = 'CCTV-Kamera entfernen',
manage_cctv_delete_desc = 'Diese CCTV-Kamera entfernen',
manage_cctv_view = 'CCTV-Kamera anzeigen',
manage_cctv_view_desc = 'Aktuelle CCTV-Kamera anzeigen',
cctv = 'CCTV-Kamera',
cctv_placed = 'CCTV-Kamera wurde erfolgreich platziert.',
cctv_failed = 'CCTV-Kamera konnte nicht platziert werden.',
manage_cctv_repair = 'CCTV-Kamera reparieren',
manage_cctv_repair_desc = 'Diese CCTV-Kamera reparieren',
cctv_repaired = 'CCTV-Kamera wurde repariert.',
cctv_repair_failed = 'CCTV-Kamera konnte nicht repariert werden.',
warning_cctv_table = '^0[^1WARNING^0] CCTV-Datenbanktabelle wurde nicht automatisch erstellt!',
cctv_repairing = 'CCTV-Kamera wird repariert. . .',
cctv_not_broken = 'CCTV-Kamera nicht kaputt',
cctv_destroyed = 'CCTV-Kamera zerstört',
cctv_destroyed_desc = 'Sie haben die CCTV-Kamera zerstört',
cctv_not_closest = 'Nicht die nächstgelegene CCTV-Kamera',
cctv_remove_error = 'Fehler',
cctv_remove_error_desc = "Sie können diese CCTV-Kamera nicht entfernen",
menu_tracking_bracelet = 'Verfolgungsarmbänder anzeigen',
menu_tracking_bracelet_desc = 'Zeige alle Verfolgungsarmbänder in der Stadt an',
tracking_bracelet = 'Verfolgungsarmband',
tracking_bracelet_desc = 'Füge einem nahegelegenen Verdächtigen ein Verfolgungsarmband hinzu oder entferne es',
no_bracelets = 'Keine Armbänder',
no_bracelets_desc = 'Es gibt keine Verfolgungsarmbänder in der Stadt.',
optn_tracking_bracelet_title = 'Verdächtiger: %s',
optn_tracking_bracelet_desc = 'Verfolgungsarmband hinzugefügt von: %s',
tracking_bracelet_toggle_failed = 'Verfolgungsarmband konnte nicht umgeschaltet werden!',
tracking_bracelet_toggle = 'Verfolgungsarmband umgeschaltet',
tracking_bracelet_toggled_desc = 'Du hast das Verfolgungsarmband für %s umgeschaltet',
tracking_bracelet_toggle_failed_desc = 'Du hast das Verfolgungsarmband für %s nicht umschalten können',
got_tracking_bracelet = 'Verfolgungsarmband hinzugefügt',
got_tracking_bracelet_desc = 'Du hast ein Verfolgungsarmband erhalten',
start_tracking = 'Verfolgungsarmband hinzufügen',
stop_tracking = 'Verfolgungsarmband entfernen',
removed_tracking_bracelet = 'Verfolgungsarmband entfernt',
removed_tracking_bracelet_desc = 'Das Verfolgungsarmband wurde entfernt',
no_tracking_bracelet = 'Kein Verfolgungsarmband',
no_tracking_bracelet_desc = 'Du hast kein Verfolgungsarmband',
license_self = 'Selbst',
grade_too_low = 'Rang zu niedrig',
grade_too_low_desc = 'Ihr Rang ist zu niedrig für diese Aktion!',
invoice_amount = 'Rechnungsbetrag',
amount_invoice = 'Betrag',
reason_invoice = 'Grund',
description_invoice = 'Beschreibung',
description_invoice_desc = 'Notizen für die Strafe',
tickets_invoice = 'Tickets',
tickets_invoice_desc = 'Strafen auswählen',
gov_billing = 'Staatliche Inkasso',
fine_id_invoice = 'Straf-ID',
offenses_invoice = 'Vergehen',
ticket_received = 'Sie haben ein Ticket von %s erhalten',
speedtrap_fine = 'Geschwindigkeitsradar-Strafe',
speedtrap_fine_desc =
'Sie wurden mit %s%s für eine Geschwindigkeitsüberschreitung von %s%s über dem Limit auf Kamera geblitzt!',
evidence_storage = 'Beweislager',
locker_number = 'Schließfachnummer',
cuffed_last_online = 'Zuletzt gefesselt',
cuffed_last_online_desc = 'Sie wurden gefesselt, als Sie das letzte Mal in der Stadt waren.',
player_in_vehicle = 'Verdächtiger im Fahrzeug',
player_in_vehicle_desc = 'Entfernen Sie den Verdächtigen aus dem Fahrzeug, bevor Sie dies tun!',
suspect_died_escort = 'Verdächtiger gestorben',
suspect_died_escort_desc = 'Der Verdächtige starb während des Transports und Sie haben ihn fallen lassen.',
stop_escorting_interact = '[E] - Transport stoppen',
cant_wield = 'Kann nicht ausrüsten',
cant_wield_desc = 'Sie können dies momentan nicht benutzen!',
jailed_player = 'Verdächtiger eingesperrt',
jailed_player_desc = 'Sie haben %s für %s Monate eingesperrt.',
gps_active = 'GPS aktiviert',
gps_active_desc = 'Spieler %s hat sein GPS aktiviert',
gps_deactive = 'GPS deaktiviert',
gps_deactive_desc = 'Spieler %s hat sein GPS deaktiviert',
no_wsb = '^0[^3WARNUNG^0] wasabi_bridge wurde NICHT nach dem Framework und/oder VOR der Ressource gestartet: %s',
currency = '€',
success = 'Erfolg',
go_back = 'Zurück',
cloakroom = 'Garderobe',
civilian_wear = 'Zivile Kleidung',
armoury_quantity_dialog = 'Bestellmenge',
quantity = 'Menge',
invalid_amount = 'Ungültiger Betrag',
invalid_amount_desc = 'Bitte geben Sie einen gültigen Betrag ein',
successful_purchase_desc = 'Sie haben Ihre Waffen erfolgreich aus dem Waffenkammer bestellt',
lacking_funds = 'Unzureichende Mittel',
lacking_funds_desc = 'Sie haben nicht genug Geld auf Ihrem Bankkonto für diesen Kauf',
no_permission = 'Keine Berechtigung',
no_access_desc = 'Sie sind nicht berechtigt, darauf zuzugreifen!',
key_map_cuff = 'Spieler fesseln',
key_map_tackle = 'Spieler beim Sprinten tackeln',
key_map_job = 'Job-Menü öffnen',
no_nearby = 'Niemand gefunden',
no_nearby_desc = 'Es scheint niemand in der Nähe zu sein',
invalid_entry = 'Ungültiger Eintrag',
invalid_entry_desc = 'Bitte geben Sie einen gültigen Eintrag ein.',
fines = 'Strafen',
fines_desc = 'Einem nahegelegenen Spieler eine Strafe erteilen',
search_player = 'Verdächtigen durchsuchen',
search_player_desc = 'Einen nahegelegenen Verdächtigen durchsuchen',
jail_player = 'Verdächtigen einsperren',
jail_player_desc = 'Einen nahegelegenen Verdächtigen einsperren',
minutes_dialog = 'Strafzeit',
minutes_dialog_field = 'Monate',
escort_player = 'Verdächtigen transportieren',
escort_player_desc = 'Einen nahegelegenen Verdächtigen transportieren',
handcuff_hard_player = 'Verdächtigen hart fesseln',
handcuff_hard_player_desc = 'Einen nahegelegenen Verdächtigen hart fesseln',
handcuff_soft_player = 'Verdächtigen sanft fesseln',
handcuff_soft_player_desc = 'Einen nahegelegenen Verdächtigen sanft fesseln',
put_in_vehicle = 'In Fahrzeug setzen',
put_in_vehicle_desc = 'Nahegelegenen Verdächtigen ins Fahrzeug setzen',
check_id = 'Identität überprüfen',
check_id_desc = 'Den Ausweis eines nahegelegenen Verdächtigen überprüfen.',
id_result_menu = 'Identitätsergebnisse',
name = 'Name',
job = 'Beruf',
job_position = 'Position',
dob = 'Geburtsdatum',
sex = 'Geschlecht',
bac = 'Blutalkoholgehalt',
licenses = 'Lizenzen',
total_licenses = 'Gesamtlizenzen:',
no_licenses = 'Keine Lizenzen',
revoke_license = 'Lizenz entziehen',
license_revoked = 'Lizenz entzogen',
license_revoked_desc = 'Sie haben die Lizenz erfolgreich entzogen',
armoury_menu = 'Waffenkammer-Menü',
take_out_vehicle = 'Aus Fahrzeug entfernen',
take_out_vehicle_desc = 'Verdächtigen aus dem Fahrzeug entfernen',
not_restrained = 'Ziel nicht gefesselt',
not_restrained_desc = 'Sie müssen den Kriminellen erst fesseln, bevor Sie ihn transportieren',
vehicle_not_found = 'Fahrzeug nicht gefunden',
vehicle_not_found_desc = 'Kein Fahrzeug in der Nähe gefunden',
unconcious = 'Person bewusstlos',
unconcious_desc = 'Die Person scheint bewusstlos zu sein',
police_garage = 'Garage',
police = 'Polizei',
plate = 'Kennzeichen',
owner = 'Besitzer',
possibly_stolen = 'Achtung!',
possibly_stolen_desc = 'Fahrzeug möglicherweise gestohlen',
vehicle_interactions = 'Fahrzeug-Interaktionen',
vehicle_interactions_desc = 'Nahegelegenes Fahrzeug untersuchen',
vehicle_information = 'Fahrzeuginformationen',
vehicle_information_desc = 'Informationen über das nahegelegene Fahrzeug',
lockpick_vehicle = 'Fahrzeug aufbrechen',
locakpick_vehicle_desc = 'Zugang zu nahegelegenem Fahrzeug erzwingen',
lockpick_progress = 'Fahrzeug aufbrechen . . .',
too_far = 'Zu weit entfernt',
too_far_desc = 'Das Ziel-Fahrzeug ist zu weit entfernt',
lockpicked = 'Erfolgreich aufgebrochen',
lockpicked_desc = 'Sie haben das Ziel-Fahrzeug erfolgreich aufgebrochen',
cancelled = 'Abgebrochen',
cancelled_desc = 'Sie haben Ihre letzte Aktion abgebrochen',
impound_vehicle = 'Fahrzeug beschlagnahmen',
impound_vehicle_desc = 'Nahegelegenes Fahrzeug beschlagnahmen',
impounding_progress = 'Fahrzeug beschlagnahmen . . .',
driver_in_car = 'Fahrer im Fahrzeug',
driver_in_car_desc = 'Entfernen Sie den Fahrer aus dem Fahrzeug, bevor Sie es beschlagnahmen!',
car_impounded_desc = 'Fahrzeug wurde beschlagnahmt',
place_object = 'Objekte platzieren',
place_object_desc = 'Objekte auf den Boden stellen.',
prop_help_text =
'Drücken Sie ~INPUT_CONTEXT~, um das Objekt zu bewegen.\nDrücken Sie ~INPUT_DETONATE~, um das Objekt zu löschen.',
prop_help_text2 = 'Drücken Sie ~INPUT_CONTEXT~, um das Objekt zu platzieren.',
seize_cash_title = 'Bargeld beschlagnahmen',
seize_cash = 'Bargeld beschlagnahmt',
seize_cash_desc = 'Polizei(%s) hat Ihr Bargeld beschlagnahmt',
seize_cash_label = 'Bargeld des Verdächtigen beschlagnahmt',
seize_cash_failed = 'Beschlagnahme fehlgeschlagen',
seize_cash_failed_desc = 'Verdächtiger hat kein Bargeld',
fine_sent = 'Strafen gesendet',
fine_sent_desc = 'Sie haben erfolgreich eine Strafe in Höhe von $%s gesendet!',
fine_received = 'Strafe erhalten',
fine_received_desc = 'Sie haben eine Strafe in Höhe von $%s erhalten',
fine_nomoney = 'Strafe fehlgeschlagen',
fine_nomoney_desc = 'Verdächtiger hat nicht genug Geld, um die Strafe zu zahlen (Strafbetrag: $%s)',
male = 'Männlich',
female = 'Weiblich',
mr = 'Herr',
mrs = 'Frau',
debt_collection = 'Schuldeneintreibung',
db_email =
'Sehr geehrter Herr/Frau %s %s,<br /><br />Die Zentrale Justizinkassobehörde (CJCA) hat die von Ihnen erhaltenen Polizeistrafen eingezogen.<br />Ein Betrag von <strong>$%s</strong> wurde von Ihrem Konto abgezogen.<br /><br />Mit freundlichen Grüßen,<br />Herr Wasabi',
spawn_blocked = 'Garage blockiert',
spawn_blocked_desc = 'Ihr Fahrzeug kann nicht herausgeholt werden, weil es blockiert ist!',
positive = 'Positiv',
positive_gsr_desc = 'Der Verdächtige wurde positiv auf Schussrückstände getestet!',
negative = 'Negativ',
negative_gsr_desc = 'Der Verdächtige wurde negativ auf Schussrückstände getestet!',
gsr_test = 'GSR-Test',
gsr_test_desc = 'Nahegelegenen Verdächtigen auf Schussrückstände testen',
hands_clean = 'Gereinigt',
hands_clean_desc = 'Sie haben Ihre Hände erfolgreich von Schussrückständen gereinigt!',
gsr_wash_ui = '[E] - Hände waschen',
on_duty = 'Im Dienst',
on_duty_desc = 'Sie sind jetzt im Dienst!',
off_duty = 'Außer Dienst',
off_duty_desc = 'Sie sind jetzt außer Dienst!',
robbing_player = 'Opfer ausrauben...',
cancelled_action = 'Aktion abgebrochen',
cancelled_action_desc = 'Ihre letzte Aktion wurde abgebrochen!',
no_cuffs = 'Keine Handschellen',
no_cuffs_desc = 'Sie haben keine Handschellen in Ihrer Tasche!',
failed = 'Fehlgeschlagen',
lockpick_handcuff_success = 'Sie haben die Handschellen erfolgreich aufgebrochen!',
lockpick_handcuff_fail = 'Aufbrechen der Handschellen fehlgeschlagen!',
lockpick_broke = 'Dietrich verbogen',
lockpick_broke_desc = 'Ihr Dietrich ist verbogen!',
grant_license = 'Waffenlizenz ausstellen',
grant_license_desc = 'Einer nahegelegenen Person eine Waffenlizenz ausstellen',
player_id = 'Spieler-ID:',
select_player = 'Person auswählen',
license_granted = 'Lizenz erteilt',
license_granted_desc = 'Sie haben %s (%s) erfolgreich eine Waffenlizenz erteilt',
license_alr_granted = 'Diese Person hat bereits eine Lizenz!',
weapon_license = 'Waffenlizenz',
weapon_license_desc = 'Ihnen wurde gerade eine Waffenlizenz erteilt.',
in_vehicle = 'Im Fahrzeug',
in_vehicle_desc = 'Sie können den Verdächtigen nicht im Fahrzeug verhaften!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'en' end
if Config.Language ~= 'en' then return end
Strings = {
jail_countdown_header = 'YOU ARE IN JAIL',
jail_countdown_sentence = '%s Months Left',
jail_time_up = 'Jail Time Up',
jail_time_up_desc = 'You served your time in jail.',
no_society_account = '^0[^WARNING^0] No society account found for %s - check your configuration!',
officer = 'Officer',
not_authorized = 'Not Authorized',
not_authorized_desc = 'You are not authorized to use this!',
not_on_duty = 'Not On Duty',
not_on_duty_desc = 'You are not on duty!',
gps_enabled = 'GPS Enabled',
gps_enabled_desc = 'You have enabled your GPS',
gps_disabled = 'GPS Disabled',
gps_disabled_desc = 'You have disabled your GPS',
new_speed_trap = 'New Speed Trap',
speed_limit = 'Speed Limit',
detection_radius = 'Detection Radius',
incorrect_input = 'Incorrect Input',
incorrect_input_cancel = 'Cancelled previous input.',
incorrect_input_speed = 'Please enter a valid speed limit.',
radar_post = 'Radar Post',
ui_radar_post_place = 'E - Place Post \n R - Rotate \n BACK - Cancel \n UP/DOWN - Distance',
radar_post_placed = 'Radar post has successfully been placed.',
radar_post_failed = 'Failed to place radar post.',
speed_trap_rename = 'Rename %s',
speed_trap = 'Speed Trap',
new_name = 'New Name',
speed_trap_renamed = 'You have successfully renamed %s to %s.',
speed_trap_rename_failed = 'You have failed to rename radar post!',
manage_trap_rename = 'Rename Radar Post',
manage_trap_rename_desc = 'Edit the name of this radar post',
manage_trap_delete = 'Remove Radar Post',
manage_trap_delete_desc = 'Remove this radar post',
menu_trap_create = 'Create Radar Post',
menu_trap_create_desc = 'Create a radar post near your current location',
menu_trap_manage = 'Manage Radar Post',
menu_trap_manage_desc = 'Manage the closest radar post.',
menu_select_trap = 'Select Radar Post',
menu_radar_posts = 'Radar Posts',
menu_radar_posts_desc = 'Deploy/Remove radar posts.',
warning_speedtrap_table = '^0[^1WARNING^0] Speed trap database table did not auto-build!',
menu_cctv_cameras = 'CCTV Cameras',
menu_cctv_cameras_desc = 'Deploy/Remove CCTV Cameras',
menu_cctv_create = 'Create CCTV Camera',
menu_cctv_create_desc = 'Create a CCTV Camera near your current location',
menu_select_cctv = 'Select CCTV Camera',
menu_cctv_manage = 'Manage CCTV Camera',
menu_cctv_manage_desc = 'Manage the closest CCTV Camera',
new_cctv = 'New CCTV Camera',
manage_cctv_rename = 'Rename CCTV Camera',
manage_cctv_rename_desc = 'Edit the name of this CCTV Camera',
cctv_renamed = 'You have successfully renamed %s to %s.',
cctv_rename_failed = 'You have failed to rename CCTV Camera!',
manage_cctv_delete = 'Remove CCTV Camera',
manage_cctv_delete_desc = 'Remove this CCTV Camera',
manage_cctv_view = 'View CCTV Camera',
manage_cctv_view_desc = 'View the current CCTV Camera',
cctv = 'CCTV Camera',
cctv_placed = 'CCTV Camera has successfully been placed.',
cctv_failed = 'Failed to place CCTV Camera.',
manage_cctv_repair = 'Repair CCTV Camera',
manage_cctv_repair_desc = 'Repair this CCTV Camera',
cctv_repaired = 'CCTV Camera has been repaired.',
cctv_repair_failed = 'Failed to repair CCTV Camera.',
warning_cctv_table = '^0[^1WARNING^0] CCTV database table did not auto-build!',
cctv_repairing = 'Repairing CCTV Camera. . .',
cctv_not_broken = 'CCTV Camera Not Broken',
cctv_destroyed = 'CCTV Camera Destroyed',
cctv_destroyed_desc = 'You have destroyed the CCTV Camera',
cctv_not_closest = 'Not Closest CCTV Camera',
cctv_remove_error = 'Error',
cctv_remove_error_desc = "You cann't remove this CCTV Camera",
menu_tracking_bracelet = 'View Tracking Bracelets',
menu_tracking_bracelet_desc = 'View all tracking bracelets in the city',
tracking_bracelet = 'Tracking Bracelet',
tracking_bracelet_desc = 'Add or remove a tracking bracelet from a nearby suspect',
no_bracelets = 'No Bracelets',
no_bracelets_desc = 'There are no tracking bracelets in the city.',
optn_tracking_bracelet_title = 'Suspect: %s',
optn_tracking_bracelet_desc = 'Tracking Bracelet Added by: %s',
tracking_bracelet_toggle_failed = 'Failed to toggle tracking bracelet!',
tracking_bracelet_toggle = 'Tracking Bracelet Toggled',
tracking_bracelet_toggled_desc = 'You have toggled the tracking bracelet for %s',
tracking_bracelet_toggle_failed_desc = 'You have failed to toggle the tracking bracelet for %s',
got_tracking_bracelet = 'Tracking Bracelet Added',
got_tracking_bracelet_desc = 'You got a tracking bracelet',
start_tracking = 'adding Tracking Bracelet',
stop_tracking = 'removing Tracking Bracelet',
removed_tracking_bracelet = 'Tracking Bracelet Removed',
removed_tracking_bracelet_desc = 'Tracking Bracelet has been removed',
no_tracking_bracelet = 'No Tracking Bracelet',
no_tracking_bracelet_desc = 'You do not have a tracking bracelet',
license_self = 'Self',
grade_too_low = 'Grade too Low',
grade_too_low_desc = 'Your grade is too low for this action!',
invoice_amount = 'Invoice Amount',
amount_invoice = 'Amount',
reason_invoice = 'Reason',
description_invoice = 'Description',
description_invoice_desc = 'Notes for Fine',
tickets_invoice = 'Tickets',
tickets_invoice_desc = 'Select Fines',
gov_billing = 'Government Debt Collection',
fine_id_invoice = 'Fine ID',
offenses_invoice = 'Offenses',
ticket_received = 'You got a ticket from %s',
speedtrap_fine = 'Speed Trap Fine',
speedtrap_fine_desc = 'You have been fined %s%s for speeding %s%s over the limit on camera!',
evidence_storage = 'Evidence Storage',
locker_number = 'Locker Number',
cuffed_last_online = 'Previously Handcuffed',
cuffed_last_online_desc = 'You were handcuffed when you were last in the city.',
player_in_vehicle = 'Suspect In Vehicle',
player_in_vehicle_desc = 'Remove the suspect from the vehicle before doing this!',
suspect_died_escort = 'Suspect Died',
suspect_died_escort_desc = 'The suspect died while escorting and you dropped them.',
stop_escorting_interact = '[E] - Stop Escorting',
cant_wield = 'Cannot Equip',
cant_wield_desc = 'You cannot use this at this time!',
jailed_player = 'Jailed Suspect',
jailed_player_desc = 'You have jailed %s for %s months.',
gps_active = 'GPS Activated',
gps_active_desc = 'Player %s activated their GPS',
gps_deactive = 'GPS Deactivated',
gps_deactive_desc = 'Player %s deactivated their GPS',
no_wsb = '^0[^3WARNING^0] wasabi_bridge was NOT started AFTER framework and/or BEFORE resource: %s',
currency = '$',
success = 'Success',
go_back = 'Go Back',
cloakroom = 'Cloakroom',
civilian_wear = 'Civilian Wear',
armoury_quantity_dialog = 'Quantity To Order',
quantity = 'Quantity',
invalid_amount = 'Invalid Amount',
invalid_amount_desc = 'Please enter a valid amount',
successful_purchase_desc = 'You have successfully ordered your weapons from the armoury',
lacking_funds = 'Lacking Funds',
lacking_funds_desc = 'You are lacking funds in the bank for this purchase',
no_permission = 'No Permission',
no_access_desc = 'You do not have authorization to access this!',
key_map_cuff = 'Handcuff Player',
key_map_tackle = 'Tackle player while sprinting',
key_map_job = 'Open Job Menu',
no_nearby = 'No One Found',
no_nearby_desc = 'There appears to be no one around',
invalid_entry = 'Invalid Entry',
invalid_entry_desc = 'Please enter a valid entry.',
fines = 'Fines',
fines_desc = 'Issue a nearby player a fine',
search_player = 'Search Suspect',
search_player_desc = 'Search a nearby suspect',
jail_player = 'Jail Suspect',
jail_player_desc = 'Jail a nearby suspect',
minutes_dialog = 'Sentencing',
minutes_dialog_field = 'Months',
escort_player = 'Escort Suspect',
escort_player_desc = 'Escort a nearby suspect',
handcuff_hard_player = 'Handcuff Suspect (hard)',
handcuff_hard_player_desc = 'Handcuff a nearby suspect (hard)',
handcuff_soft_player = 'Handcuff Suspect (soft)',
handcuff_soft_player_desc = 'Handcuff a nearby suspect (soft)',
put_in_vehicle = 'Place In Vehicle',
put_in_vehicle_desc = 'Place nearby suspect in vehicle',
check_id = 'Check Identification',
check_id_desc = 'Check nearby suspect\'s I.D.',
id_result_menu = 'Identification Results',
name = 'Name',
job = 'Job',
job_position = 'Position',
dob = 'Date Of Birth',
sex = 'Gender',
bac = 'BAC',
licenses = 'Licenses',
total_licenses = 'Total Licenses:',
no_licenses = 'No Licenses',
revoke_license = 'Revoke License',
license_revoked = 'License Revoked',
license_revoked_desc = 'You have successfully revoked license',
armoury_menu = 'Armory Menu',
take_out_vehicle = 'Remove From Vehicle',
take_out_vehicle_desc = 'Remove suspect from vehicle',
not_restrained = 'Target Unrestrained',
not_restrained_desc = 'You must restrain the criminal before escorting them',
vehicle_not_found = 'No Vehicle Found',
vehicle_not_found_desc = 'No vehicle found nearby',
unconcious = 'Person Unconcious',
unconcious_desc = 'Person appears unconcious',
police_garage = 'Garage',
police = 'Police',
plate = 'Plate Number',
owner = 'Owner',
possibly_stolen = 'Caution!',
possibly_stolen_desc = 'Vehicle Possibly Stolen',
vehicle_interactions = 'Vehicle Interactions',
vehicle_interactions_desc = 'Inspect nearby vehicle',
vehicle_information = 'Vehicle Information',
vehicle_information_desc = 'Information on nearby vehicle',
lockpick_vehicle = 'Lockpick Vehicle',
locakpick_vehicle_desc = 'Force access to nearby vehicle',
lockpick_progress = 'Lockpicking Vehicle . . .',
too_far = 'Too Far Away',
too_far_desc = 'The target vehicle is too far away',
lockpicked = 'Successfully Unlocked',
lockpicked_desc = 'You have successfully unlocked the target vehicle',
cancelled = 'Cancelled',
cancelled_desc = 'You cancelled your last action',
impound_vehicle = 'Impound Vehicle',
impound_vehicle_desc = 'Impound Nearby Vehicle',
impounding_progress = 'Impounding Vehicle . . .',
driver_in_car = 'Driver In Vehicle',
driver_in_car_desc = 'Remove driver from vehicle prior to impounding!',
car_impounded_desc = 'Vehicle has been impounded',
place_object = 'Place Objects',
place_object_desc = 'Place objects on the floor.',
prop_help_text = 'Press ~INPUT_CONTEXT~ to move the object.\nPress ~INPUT_DETONATE~ to delete the object.',
prop_help_text2 = 'Press ~INPUT_CONTEXT~ to place the object.',
seize_cash_title = 'Seize Cash',
seize_cash = 'Cash Seized',
seize_cash_desc = 'Police(%s) has seized your cash',
seize_cash_label = "Confiscated suspect's cash",
seize_cash_failed = 'Seize Failed',
seize_cash_failed_desc = 'Suspect does not have any cash',
fine_sent = 'Fines Sent',
fine_sent_desc = 'You have successfully sent fine for $%s!',
fine_received = 'Fine Received',
fine_received_desc = 'You have received a fine for $%s',
fine_nomoney = 'Failed to Fine',
fine_nomoney_desc = 'Suspect doesnt have enough money to pay fine (FineAmount: $%s)',
male = 'Male',
female = 'Female',
mr = 'Mr.',
mrs = 'Mrs.',
debt_collection = 'Debt Collection',
db_email =
'Dear %s %s, <br /><br />The Central Judicial Collection Agency (CJCA) charged the fines you received from the police.<br />There is <strong>$%s</strong> withdrawn from your account.<br /><br />Kind regards,<br />Mr. Wasabi',
spawn_blocked = 'Garage Blocked',
spawn_blocked_desc = 'You can not pull your vehicle out because it is blocked!',
positive = 'Positive',
positive_gsr_desc = 'The suspect has tested POSITIVE for gunshot residue!',
negative = 'Negative',
negative_gsr_desc = 'The suspect has tested NEGATIVE for gunshot residue!',
gsr_test = 'GSR Test',
gsr_test_desc = 'Test a nearby suspect for gunshot residue',
hands_clean = 'Cleaned',
hands_clean_desc = 'You have successfully cleaned your hands of gunshot residue!',
gsr_wash_ui = '[E] - Wash Hands',
on_duty = 'On Duty',
on_duty_desc = 'You have just switched to on duty!',
off_duty = 'Off Duty',
off_duty_desc = 'You have just switched to off duty!',
robbing_player = 'Robbing Victim. . .',
cancelled_action = 'Cancelled Action',
cancelled_action_desc = 'You\'re last action was cancelled!',
no_cuffs = 'No Handcuffs',
no_cuffs_desc = 'You do not have any handcuffs in your pockets!',
failed = 'Failed',
lockpick_handcuff_success = 'You have successfully lockpicked the handcuffs!',
lockpick_handcuff_fail = 'You failed to lockpick the handcuffs!',
lockpick_broke = 'Lockpick Bent',
lockpick_broke_desc = 'Your lockpick has bent!',
grant_license = 'Issue Weapon License',
grant_license_desc = 'Issue a weapons license to a nearby person',
player_id = 'Player ID:',
select_player = 'Select Person',
license_granted = 'License Awarded',
license_granted_desc = 'You awarded a weapons license to %s (%s)',
license_alr_granted = 'This person already has a license!',
weapon_license = 'Weapon License',
weapon_license_desc = 'You were just awarded your weapons license.',
in_vehicle = 'In Vehicle',
in_vehicle_desc = 'You can not arrest the suspect while in a vehicle!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'es' end
if Config.Language ~= 'es' then return end
Strings = {
jail_countdown_header = 'ESTÁS EN LA CÁRCEL',
jail_countdown_sentence = 'Quedan %s meses',
jail_time_up = 'Tiempo de cárcel cumplido',
jail_time_up_desc = 'Has cumplido tu tiempo en la cárcel.',
no_society_account = 'No se encontró cuenta de sociedad para %s - verifica tu configuración!',
officer = 'Oficial',
not_authorized = 'No Autorizado',
not_authorized_desc = 'No estás autorizado para usar esto!',
not_on_duty = 'No de Servicio',
not_on_duty_desc = 'No estás de servicio!',
gps_enabled = 'GPS Habilitado',
gps_enabled_desc = 'Has habilitado tu GPS',
gps_disabled = 'GPS Deshabilitado',
gps_disabled_desc = 'Has deshabilitado tu GPS',
new_speed_trap = 'Nuevo Radar de Velocidad',
speed_limit = 'Límite de Velocidad',
detection_radius = 'Radio de detección',
incorrect_input = 'Entrada Incorrecta',
incorrect_input_cancel = 'Entrada anterior cancelada.',
incorrect_input_speed = 'Por favor, ingrese un límite de velocidad válido.',
radar_post = 'Puesto de Radar',
ui_radar_post_place = 'E - Colocar puesto \n R - Girar \n BACK - Cancelar \n UP/DOWN - Distancia',
radar_post_placed = 'Puesto de radar colocado con éxito.',
radar_post_failed = 'Error al colocar el puesto de radar.',
speed_trap_rename = 'Renombrar %s',
speed_trap = 'Radar de Velocidad',
new_name = 'Nuevo Nombre',
speed_trap_renamed = 'Has renombrado con éxito %s a %s.',
speed_trap_rename_failed = 'Error al renombrar el puesto de radar.',
manage_trap_rename = 'Renombrar Puesto de Radar',
manage_trap_rename_desc = 'Editar el nombre de este puesto de radar',
manage_trap_delete = 'Eliminar Puesto de Radar',
manage_trap_delete_desc = 'Eliminar este puesto de radar',
menu_trap_create = 'Crear Puesto de Radar',
menu_trap_create_desc = 'Crear un puesto de radar cerca de tu ubicación actual',
menu_trap_manage = 'Administrar Puesto de Radar',
menu_trap_manage_desc = 'Administrar el puesto de radar más cercano.',
menu_select_trap = 'Seleccionar Puesto de Radar',
menu_radar_posts = 'Puestos de radar',
menu_radar_posts_desc = 'Desplegar/Quitar puestos de radar.',
warning_speedtrap_table =
'^0[^1ADVERTENCIA^0] ¡La tabla de la base de datos del radar de velocidad no se creó automáticamente!',
menu_cctv_cameras = 'Cámaras CCTV',
menu_cctv_cameras_desc = 'Implementar/Eliminar cámaras CCTV',
menu_cctv_create = 'Crear cámara CCTV',
menu_cctv_create_desc = 'Crear una cámara CCTV cerca de su ubicación actual',
menu_select_cctv = 'Seleccionar cámara CCTV',
menu_cctv_manage = 'Administrar cámara CCTV',
menu_cctv_manage_desc = 'Administrar la cámara CCTV más cercana',
new_cctv = 'Nueva cámara CCTV',
manage_cctv_rename = 'Cambiar el nombre de la cámara CCTV',
manage_cctv_rename_desc = 'Editar el nombre de esta cámara CCTV',
cctv_renamed = 'Ha cambiado el nombre de %s a %s',
cctv_rename_failed = 'No ha podido cambiar el nombre de la cámara CCTV',
manage_cctv_delete = 'Quitar cámara CCTV',
manage_cctv_delete_desc = 'Quitar esta cámara CCTV',
manage_cctv_view = 'Ver cámara CCTV',
manage_cctv_view_desc = 'Ver la cámara CCTV actual',
cctv = 'Cámara CCTV',
cctv_placed = 'La cámara CCTV se ha colocado correctamente.',
cctv_failed = 'No se pudo colocar la cámara CCTV.',
manage_cctv_repair = 'Reparar cámara CCTV',
manage_cctv_repair_desc = 'Reparar esta cámara CCTV',
cctv_repaired = 'La cámara CCTV se ha reparado.',
cctv_repair_failed = 'No se pudo reparar la cámara CCTV.',
Warning_cctv_table = '^0[^1WARNING^0] ¡La tabla de la base de datos CCTV no se creó automáticamente!',
cctv_repairing = 'Reparando cámara CCTV...',
cctv_not_broken = 'La cámara CCTV no está rota',
cctv_destroyed = 'La cámara CCTV está destruida',
cctv_destroyed_desc = 'Has destruido la cámara CCTV',
cctv_not_closest = 'No es la cámara CCTV más cercana',
cctv_remove_error = 'Error',
cctv_remove_error_desc = "No puedes quitar esta cámara CCTV",
menu_tracking_bracelet = 'Ver Brazaletes de Rastreo',
menu_tracking_bracelet_desc = 'Ver todos los brazaletes de rastreo en la ciudad',
tracking_bracelet = 'Brazalete de Rastreo',
tracking_bracelet_desc = 'Agregar o quitar un brazalete de rastreo a un sospechoso cercano',
no_bracelets = 'Sin Brazaletes',
no_bracelets_desc = 'No hay brazaletes de rastreo en la ciudad.',
optn_tracking_bracelet_title = 'Sospechoso: %s',
optn_tracking_bracelet_desc = 'Brazalete de rastreo agregado por: %s',
tracking_bracelet_toggle_failed = '¡Error al cambiar el brazalete de rastreo!',
tracking_bracelet_toggle = 'Brazalete de Rastreo Cambiado',
tracking_bracelet_toggled_desc = 'Has cambiado el brazalete de rastreo de %s',
tracking_bracelet_toggle_failed_desc = 'No pudiste cambiar el brazalete de rastreo de %s',
got_tracking_bracelet = 'Brazalete de Rastreo Agregado',
got_tracking_bracelet_desc = 'Recibiste un brazalete de rastreo',
start_tracking = 'Añadiendo Brazalete de Rastreo',
stop_tracking = 'Eliminando Brazalete de Rastreo',
removed_tracking_bracelet = 'Brazalete de Rastreo Eliminado',
removed_tracking_bracelet_desc = 'El brazalete de rastreo ha sido eliminado',
no_tracking_bracelet = 'Sin Brazalete de Rastreo',
no_tracking_bracelet_desc = 'No tienes un brazalete de rastreo',
license_self = 'Uno Mismo',
grade_too_low = 'Grado Demasiado Bajo',
grade_too_low_desc = '¡Tu grado es demasiado bajo para esta acción!',
invoice_amount = 'Monto de la Factura',
amount_invoice = 'Cantidad',
reason_invoice = 'Razón',
description_invoice = 'Descripción',
description_invoice_desc = 'Notas para la Multa',
tickets_invoice = 'Multas',
tickets_invoice_desc = 'Seleccionar Multas',
gov_billing = 'Cobro de Deudas del Gobierno',
fine_id_invoice = 'ID de Multa',
offenses_invoice = 'Ofensas',
ticket_received = 'Has recibido una multa de %s',
speedtrap_fine = 'Multa de Radar de Velocidad',
speedtrap_fine_desc = '¡Has sido multado con %s%s por exceder el límite en %s%s capturado por la cámara!',
evidence_storage = 'Almacenamiento de Evidencias',
locker_number = 'Número de Casillero',
cuffed_last_online = 'Esposado Anteriormente',
cuffed_last_online_desc = 'Estabas esposado la última vez que estuviste en la ciudad.',
player_in_vehicle = 'Sospechoso en el Vehículo',
player_in_vehicle_desc = '¡Saca al sospechoso del vehículo antes de hacer esto!',
suspect_died_escort = 'Sospechoso Muerto',
suspect_died_escort_desc = 'El sospechoso murió mientras lo escoltabas y lo dejaste caer.',
stop_escorting_interact = '[E] - Detener Escolta',
cant_wield = 'No se Puede Equipar',
cant_wield_desc = '¡No puedes usar esto en este momento!',
jailed_player = 'Sospechoso Encarcelado',
jailed_player_desc = 'Has encarcelado a %s por %s meses.',
gps_active = 'GPS Activado',
gps_active_desc = 'El jugador %s activó su GPS',
gps_deactive = 'GPS Desactivado',
gps_deactive_desc = 'El jugador %s desactivó su GPS',
no_wsb = '^0[^3ADVERTENCIA^0] wasabi_bridge NO se inició DESPUÉS del framework y/o ANTES del recurso: %s',
currency = '€',
success = 'Éxito',
go_back = 'Regresar',
cloakroom = 'Vestuario',
civilian_wear = 'Ropa de Civil',
armoury_quantity_dialog = 'Cantidad a Pedir',
quantity = 'Cantidad',
invalid_amount = 'Cantidad Inválida',
invalid_amount_desc = 'Por favor, ingrese una cantidad válida',
successful_purchase_desc = 'Has pedido con éxito tus armas del arsenal',
lacking_funds = 'Fondos Insuficientes',
lacking_funds_desc = 'No tienes suficientes fondos en el banco para esta compra',
no_permission = 'Sin Permiso',
no_access_desc = '¡No tienes autorización para acceder a esto!',
key_map_cuff = 'Esposar Jugador',
key_map_tackle = 'Derribar jugador mientras corres',
key_map_job = 'Abrir Menú de Trabajo',
no_nearby = 'Nadie Encontrado',
no_nearby_desc = 'Parece que no hay nadie cerca',
invalid_entry = 'Entrada Inválida',
invalid_entry_desc = 'Por favor, ingrese una entrada válida.',
fines = 'Multas',
fines_desc = 'Emitir una multa a un jugador cercano',
search_player = 'Registrar Sospechoso',
search_player_desc = 'Registrar a un sospechoso cercano',
jail_player = 'Encarcelar Sospechoso',
jail_player_desc = 'Encarcelar a un sospechoso cercano',
minutes_dialog = 'Sentencia',
minutes_dialog_field = 'Meses',
escort_player = 'Escoltar Sospechoso',
escort_player_desc = 'Escoltar a un sospechoso cercano',
handcuff_hard_player = 'Esposar Duro al Sospechoso',
handcuff_hard_player_desc = 'Esposar duro a un sospechoso cercano',
handcuff_soft_player = 'Esposar Suave al Sospechoso',
handcuff_soft_player_desc = 'Esposar suave a un sospechoso cercano',
put_in_vehicle = 'Poner en el Vehículo',
put_in_vehicle_desc = 'Poner al sospechoso cercano en el vehículo',
check_id = 'Verificar Identidad',
check_id_desc = 'Verificar la identidad del sospechoso cercano.',
id_result_menu = 'Resultados de Identificación',
name = 'Nombre',
job = 'Trabajo',
job_position = 'Posición',
dob = 'Fecha de Nacimiento',
sex = 'Sexo',
bac = 'BAC',
licenses = 'Licencias',
total_licenses = 'Total de Licencias:',
no_licenses = 'Sin Licencias',
revoke_license = 'Revocar Licencia',
license_revoked = 'Licencia Revocada',
license_revoked_desc = 'Has revocado la licencia con éxito',
armoury_menu = 'Menú del Arsenal',
take_out_vehicle = 'Sacar del Vehículo',
take_out_vehicle_desc = 'Sacar al sospechoso del vehículo',
not_restrained = 'Objetivo No Restringido',
not_restrained_desc = 'Debes restringir al criminal antes de escoltarlo',
vehicle_not_found = 'Vehículo No Encontrado',
vehicle_not_found_desc = 'No se encontró ningún vehículo cercano',
unconcious = 'Persona Inconsciente',
unconcious_desc = 'La persona parece estar inconsciente',
police_garage = 'Garaje',
police = 'Policía',
plate = 'Número de Placa',
owner = 'Propietario',
possibly_stolen = '¡Precaución!',
possibly_stolen_desc = 'Vehículo posiblemente robado',
vehicle_interactions = 'Interacciones con el Vehículo',
vehicle_interactions_desc = 'Inspeccionar vehículo cercano',
vehicle_information = 'Información del Vehículo',
vehicle_information_desc = 'Información sobre el vehículo cercano',
lockpick_vehicle = 'Forzar Cierre del Vehículo',
locakpick_vehicle_desc = 'Forzar acceso al vehículo cercano',
lockpick_progress = 'Forzando Cierre del Vehículo . . .',
too_far = 'Demasiado Lejos',
too_far_desc = 'El vehículo objetivo está demasiado lejos',
lockpicked = 'Desbloqueado con Éxito',
lockpicked_desc = 'Has desbloqueado con éxito el vehículo objetivo',
cancelled = 'Cancelado',
cancelled_desc = 'Has cancelado tu última acción',
impound_vehicle = 'Confiscar Vehículo',
impound_vehicle_desc = 'Confiscar vehículo cercano',
impounding_progress = 'Confiscando Vehículo . . .',
driver_in_car = 'Conductor en el Vehículo',
driver_in_car_desc = '¡Saca al conductor del vehículo antes de confiscarlo!',
car_impounded_desc = 'El vehículo ha sido confiscado',
place_object = 'Colocar Objetos',
place_object_desc = 'Colocar objetos en el suelo.',
prop_help_text = 'Presiona ~INPUT_CONTEXT~ para mover el objeto.\nPresiona ~INPUT_DETONATE~ para eliminar el objeto.',
prop_help_text2 = 'Presiona ~INPUT_CONTEXT~ para colocar el objeto.',
seize_cash_title = 'Confiscar Dinero',
seize_cash = 'Dinero Confiscado',
seize_cash_desc = 'La policía(%s) ha confiscado tu dinero',
seize_cash_label = 'Dinero del sospechoso confiscado',
seize_cash_failed = 'Confiscación Fallida',
seize_cash_failed_desc = 'El sospechoso no tiene dinero',
fine_sent = 'Multas Enviadas',
fine_sent_desc = 'Has enviado con éxito una multa de $%s!',
fine_received = 'Multa Recibida',
fine_received_desc = 'Has recibido una multa de $%s',
fine_nomoney = 'Error al Multar',
fine_nomoney_desc = 'El sospechoso no tiene suficiente dinero para pagar la multa (Monto de la Multa: $%s)',
male = 'Masculino',
female = 'Femenino',
mr = 'Sr.',
mrs = 'Sra.',
debt_collection = 'Cobranza de Deudas',
db_email =
'Estimado %s %s, <br /><br />La Agencia Central de Cobranza Judicial (CJCA) ha cobrado las multas que recibió de la policía.<br />Se ha retirado de su cuenta la cantidad de <strong>$%s</strong>.<br /><br />Saludos cordiales,<br />Sr. Wasabi',
spawn_blocked = 'Garaje Bloqueado',
spawn_blocked_desc = '¡No puedes sacar tu vehículo porque está bloqueado!',
positive = 'Positivo',
positive_gsr_desc = '¡El sospechoso dio positivo en residuos de pólvora!',
negative = 'Negativo',
negative_gsr_desc = '¡El sospechoso dio negativo en residuos de pólvora!',
gsr_test = 'Prueba de Residuos de Pólvora',
gsr_test_desc = 'Probar a un sospechoso cercano en busca de residuos de pólvora',
hands_clean = 'Manos Limpias',
hands_clean_desc = '¡Has limpiado con éxito tus manos de residuos de pólvora!',
gsr_wash_ui = '[E] - Lavar Manos',
on_duty = 'En Servicio',
on_duty_desc = '¡Ahora estás en servicio!',
off_duty = 'Fuera de Servicio',
off_duty_desc = '¡Ahora estás fuera de servicio!',
robbing_player = 'Robando a la Víctima...',
cancelled_action = 'Acción Cancelada',
cancelled_action_desc = '¡Tu última acción fue cancelada!',
no_cuffs = 'Sin Esposas',
no_cuffs_desc = '¡No tienes esposas en tus bolsillos!',
failed = 'Fallido',
lockpick_handcuff_success = '¡Has forzado con éxito las esposas!',
lockpick_handcuff_fail = 'Error al forzar las esposas!',
lockpick_broke = 'Ganzúa Doblada',
lockpick_broke_desc = '¡Tu ganzúa se dobló!',
grant_license = 'Emitir Licencia de Armas',
grant_license_desc = 'Emitir una licencia de armas a una persona cercana',
player_id = 'ID del Jugador:',
select_player = 'Seleccionar Persona',
license_granted = 'Licencia Emitida',
license_granted_desc = 'Has emitido una licencia de armas a %s (%s)',
license_alr_granted = '¡Esta persona ya tiene una licencia!',
weapon_license = 'Licencia de Armas',
weapon_license_desc = 'Acabas de recibir una licencia de armas.',
in_vehicle = 'En el Vehículo',
in_vehicle_desc = '¡No puedes arrestar al sospechoso mientras está en el vehículo!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'fr' end
if Config.Language ~= 'fr' then return end
Strings = {
jail_countdown_header = 'VOUS ÊTES EN PRISON',
jail_countdown_sentence = '%s mois restants',
jail_time_up = 'Temps de prison terminé',
jail_time_up_desc = 'Vous avez purgé votre peine en prison.',
no_society_account = 'Aucun compte de société trouvé pour %s - vérifiez votre configuration!',
officer = 'Officier',
not_authorized = 'Non autorisé',
not_authorized_desc = 'Vous n\'êtes pas autorisé à utiliser cela !',
not_on_duty = 'Pas de service',
not_on_duty_desc = 'Vous n\'êtes pas de service !',
gps_enabled = 'GPS activé',
gps_enabled_desc = 'Vous avez activé votre GPS',
gps_disabled = 'GPS désactivé',
gps_disabled_desc = 'Vous avez désactivé votre GPS',
new_speed_trap = 'Nouveau Radar',
speed_limit = 'Limite de Vitesse',
detection_radius = 'Rayon de détection',
incorrect_input = 'Entrée Incorrecte',
incorrect_input_cancel = 'Entrée précédente annulée.',
incorrect_input_speed = 'Veuillez entrer une limite de vitesse valide.',
radar_post = 'Poste Radar',
ui_radar_post_place = 'E - Placer le poste \n R - Tourner \n BACK - Annuler \n UP/DOWN - Distance',
radar_post_placed = 'Le poste radar a été placé avec succès.',
radar_post_failed = 'Échec du placement du poste radar.',
speed_trap_rename = 'Renommer %s',
speed_trap = 'Radar',
new_name = 'Nouveau Nom',
speed_trap_renamed = 'Vous avez renommé %s en %s avec succès.',
speed_trap_rename_failed = 'Échec du renommage du poste radar !',
manage_trap_rename = 'Renommer Poste Radar',
manage_trap_rename_desc = 'Modifier le nom de ce poste radar',
manage_trap_delete = 'Supprimer Poste Radar',
manage_trap_delete_desc = 'Supprimer ce poste radar',
menu_trap_create = 'Créer Poste Radar',
menu_trap_create_desc = 'Créer un poste radar près de votre position actuelle',
menu_trap_manage = 'Gérer Poste Radar',
menu_trap_manage_desc = 'Gérer le poste radar le plus proche.',
menu_select_trap = 'Sélectionner Poste Radar',
menu_radar_posts = 'Postes radar',
menu_radar_posts_desc = 'Déployer/Retirer les postes radar.',
warning_speedtrap_table =
'^0[^1ATTENTION^0] La table de base de données des radars n\'a pas été générée automatiquement !',
menu_cctv_cameras = 'Caméras de vidéosurveillance',
menu_cctv_cameras_desc = 'Déployer/supprimer des caméras de vidéosurveillance',
menu_cctv_create = 'Créer une caméra de vidéosurveillance',
menu_cctv_create_desc = 'Créer une caméra de vidéosurveillance à proximité de votre emplacement actuel',
menu_select_cctv = 'Sélectionner une caméra de vidéosurveillance',
menu_cctv_manage = 'Gérer la caméra de vidéosurveillance',
menu_cctv_manage_desc = 'Gérer la caméra de vidéosurveillance la plus proche',
new_cctv = 'Nouvelle caméra de vidéosurveillance',
manage_cctv_rename = 'Renommer la caméra de vidéosurveillance',
manage_cctv_rename_desc = 'Modifier le nom de cette caméra de vidéosurveillance',
cctv_renamed = 'Vous avez renommé avec succès %s en %s.',
cctv_rename_failed = 'Vous avez échoué pour renommer la caméra de vidéosurveillance !',
manage_cctv_delete = 'Supprimer la caméra de vidéosurveillance',
manage_cctv_delete_desc = 'Supprimer cette caméra de vidéosurveillance',
manage_cctv_view = 'Afficher la caméra de vidéosurveillance',
manage_cctv_view_desc = 'Afficher la caméra de vidéosurveillance actuelle',
cctv = 'Caméra de vidéosurveillance',
cctv_placed = 'La caméra de vidéosurveillance a été placée avec succès.',
cctv_failed = 'Échec du placement de la caméra de vidéosurveillance.',
manage_cctv_repair = 'Réparer la caméra de vidéosurveillance',
manage_cctv_repair_desc = 'Réparer cette caméra de vidéosurveillance',
cctv_repaired = 'La caméra de vidéosurveillance a été réparée.',
cctv_repair_failed = 'Échec de la réparation de la caméra de vidéosurveillance.',
warning_cctv_table = '^0[^1WARNING^0] La table de base de données CCTV n\'a pas été créée automatiquement !',
cctv_repairing = 'Réparation de la caméra CCTV. . .',
cctv_not_broken = 'Caméra CCTV non cassée',
cctv_destroyed = 'Caméra CCTV détruite',
cctv_destroyed_desc = 'Vous avez détruit la caméra CCTV',
cctv_not_closest = 'Pas la caméra CCTV la plus proche',
cctv_remove_error = 'Erreur',
cctv_remove_error_desc = "Vous ne pouvez pas supprimer cette caméra CCTV",
menu_tracking_bracelet = 'Voir les Bracelets de Suivi',
menu_tracking_bracelet_desc = 'Voir tous les bracelets de suivi dans la ville',
tracking_bracelet = 'Bracelet de Suivi',
tracking_bracelet_desc = 'Ajouter ou retirer un bracelet de suivi à un suspect proche',
no_bracelets = 'Pas de Bracelets',
no_bracelets_desc = 'Il n\'y a pas de bracelets de suivi dans la ville.',
optn_tracking_bracelet_title = 'Suspect : %s',
optn_tracking_bracelet_desc = 'Bracelet de suivi ajouté par : %s',
tracking_bracelet_toggle_failed = 'Échec du changement du bracelet de suivi !',
tracking_bracelet_toggle = 'Bracelet de Suivi Modifié',
tracking_bracelet_toggled_desc = 'Vous avez modifié le bracelet de suivi pour %s',
tracking_bracelet_toggle_failed_desc = 'Vous avez échoué à modifier le bracelet de suivi pour %s',
got_tracking_bracelet = 'Bracelet de Suivi Ajouté',
got_tracking_bracelet_desc = 'Vous avez reçu un bracelet de suivi',
start_tracking = 'Ajout du Bracelet de Suivi',
stop_tracking = 'Retrait du Bracelet de Suivi',
removed_tracking_bracelet = 'Bracelet de Suivi Retiré',
removed_tracking_bracelet_desc = 'Le bracelet de suivi a été retiré',
no_tracking_bracelet = 'Pas de Bracelet de Suivi',
no_tracking_bracelet_desc = 'Vous n\'avez pas de bracelet de suivi',
license_self = 'Soi-même',
grade_too_low = 'Grade Trop Bas',
grade_too_low_desc = 'Votre grade est trop bas pour cette action !',
invoice_amount = 'Montant de la Facture',
amount_invoice = 'Montant',
reason_invoice = 'Raison',
description_invoice = 'Description',
description_invoice_desc = 'Notes pour Amende',
tickets_invoice = 'Amendes',
tickets_invoice_desc = 'Sélectionner les Amendes',
gov_billing = 'Recouvrement de Dettes Gouvernementales',
fine_id_invoice = 'ID de l\'Amende',
offenses_invoice = 'Infractions',
ticket_received = 'Vous avez reçu une amende de %s',
speedtrap_fine = 'Amende de Radar',
speedtrap_fine_desc =
'Vous avez été amendé de %s%s pour excès de vitesse de %s%s au-dessus de la limite sur la caméra !',
evidence_storage = 'Stockage de Preuves',
locker_number = 'Numéro de Casier',
cuffed_last_online = 'Menotté Précédemment',
cuffed_last_online_desc = 'Vous étiez menotté lors de votre dernière visite en ville.',
player_in_vehicle = 'Suspect Dans le Véhicule',
player_in_vehicle_desc = 'Retirez le suspect du véhicule avant de faire cela !',
suspect_died_escort = 'Suspect Décédé',
suspect_died_escort_desc = 'Le suspect est décédé pendant l\'escorte et vous l\'avez laissé tomber.',
stop_escorting_interact = '[E] - Arrêter l\'Escorte',
cant_wield = 'Impossible d\'Équiper',
cant_wield_desc = 'Vous ne pouvez pas utiliser ceci pour le moment !',
jailed_player = 'Suspect Emprisonné',
jailed_player_desc = 'Vous avez emprisonné %s pour %s mois.',
gps_active = 'GPS Activé',
gps_active_desc = 'Le joueur %s a activé son GPS',
gps_deactive = 'GPS Désactivé',
gps_deactive_desc = 'Le joueur %s a désactivé son GPS',
no_wsb = '^0[^3ATTENTION^0] wasabi_bridge n\'a PAS été démarré APRÈS le framework et/ou AVANT la ressource : %s',
currency = '$',
success = 'Succès',
go_back = 'Retourner',
cloakroom = 'Vestiaire',
civilian_wear = 'Tenue Civile',
armoury_quantity_dialog = 'Quantité à Commander',
quantity = 'Quantité',
invalid_amount = 'Montant Invalide',
invalid_amount_desc = 'Veuillez entrer un montant valide',
successful_purchase_desc = 'Vous avez commandé vos armes de l\'armurerie avec succès',
lacking_funds = 'Fonds Insuffisants',
lacking_funds_desc = 'Vous n\'avez pas assez de fonds dans la banque pour cet achat',
no_permission = 'Pas d\'Autorisation',
no_access_desc = 'Vous n\'êtes pas autorisé à accéder à cela !',
key_map_cuff = 'Menotter le Joueur',
key_map_tackle = 'Plaquer le joueur en courant',
key_map_job = 'Ouvrir le Menu de Travail',
no_nearby = 'Personne Trouvée',
no_nearby_desc = 'Il ne semble y avoir personne autour',
invalid_entry = 'Entrée Invalide',
invalid_entry_desc = 'Veuillez entrer une entrée valide.',
fines = 'Amendes',
fines_desc = 'Distribuer une amende à un joueur proche',
search_player = 'Fouiller le Suspect',
search_player_desc = 'Fouiller un suspect proche',
jail_player = 'Emprisonner le Suspect',
jail_player_desc = 'Emprisonner un suspect proche',
minutes_dialog = 'Condamnation',
minutes_dialog_field = 'Mois',
escort_player = 'Escorte le Suspect',
escort_player_desc = 'Escorte un suspect proche',
handcuff_hard_player = 'Menotter le Suspect (dur)',
handcuff_hard_player_desc = 'Menotter un suspect proche (dur)',
handcuff_soft_player = 'Menotter le Suspect (doux)',
handcuff_soft_player_desc = 'Menotter un suspect proche (doux)',
put_in_vehicle = 'Placer dans le Véhicule',
put_in_vehicle_desc = 'Placer un suspect proche dans le véhicule',
check_id = 'Vérifier l\'Identification',
check_id_desc = 'Vérifier l\'ID du suspect proche',
id_result_menu = 'Résultats d\'Identification',
name = 'Nom',
job = 'Emploi',
job_position = 'Poste',
dob = 'Date de Naissance',
sex = 'Sexe',
bac = 'BAC',
licenses = 'Permis',
total_licenses = 'Total Permis :',
no_licenses = 'Pas de Permis',
revoke_license = 'Révoquer Permis',
license_revoked = 'Permis Révoqué',
license_revoked_desc = 'Vous avez révoqué le permis avec succès',
armoury_menu = 'Menu de l\'Armurerie',
take_out_vehicle = 'Sortir du Véhicule',
take_out_vehicle_desc = 'Sortir le suspect du véhicule',
not_restrained = 'Cible Non Restrained',
not_restrained_desc = 'Vous devez restrain le criminel avant de l\'escorter',
vehicle_not_found = 'Aucun Véhicule Trouvé',
vehicle_not_found_desc = 'Aucun véhicule trouvé à proximité',
unconcious = 'Personne Inconsciente',
unconcious_desc = 'La personne semble inconsciente',
police_garage = 'Garage',
police = 'Police',
plate = 'Numéro de Plaque',
owner = 'Propriétaire',
possibly_stolen = 'Attention !',
possibly_stolen_desc = 'Véhicule Possiblement Volé',
vehicle_interactions = 'Interactions Véhicule',
vehicle_interactions_desc = 'Inspecter le véhicule proche',
vehicle_information = 'Informations Véhicule',
vehicle_information_desc = 'Informations sur le véhicule proche',
lockpick_vehicle = 'Crocheter le Véhicule',
locakpick_vehicle_desc = 'Forcer l\'accès au véhicule proche',
lockpick_progress = 'Crochetage du Véhicule . . .',
too_far = 'Trop Loin',
too_far_desc = 'Le véhicule cible est trop loin',
lockpicked = 'Déverrouillé avec Succès',
lockpicked_desc = 'Vous avez déverrouillé le véhicule cible avec succès',
cancelled = 'Annulé',
cancelled_desc = 'Vous avez annulé votre dernière action',
impound_vehicle = 'Mise en Fourrière du Véhicule',
impound_vehicle_desc = 'Mise en fourrière du véhicule proche',
impounding_progress = 'Mise en Fourrière du Véhicule . . .',
driver_in_car = 'Conducteur Dans le Véhicule',
driver_in_car_desc = 'Retirer le conducteur du véhicule avant la mise en fourrière !',
car_impounded_desc = 'Véhicule mis en fourrière',
place_object = 'Placer des Objets',
place_object_desc = 'Placer des objets sur le sol.',
prop_help_text =
'Appuyez sur ~INPUT_CONTEXT~ pour déplacer l\'objet.\nAppuyez sur ~INPUT_DETONATE~ pour supprimer l\'objet.',
prop_help_text2 = 'Appuyez sur ~INPUT_CONTEXT~ pour placer l\'objet.',
seize_cash_title = 'Saisir de l\'Argent',
seize_cash = 'Argent Saisi',
seize_cash_desc = 'La police (%s) a saisi votre argent',
seize_cash_label = 'Argent du suspect confisqué',
seize_cash_failed = 'Saisie Échouée',
seize_cash_failed_desc = 'Le suspect n\'a pas d\'argent',
fine_sent = 'Amendes Envoyées',
fine_sent_desc = 'Vous avez envoyé une amende de $%s avec succès !',
fine_received = 'Amende Reçue',
fine_received_desc = 'Vous avez reçu une amende de $%s',
fine_nomoney = 'Échec de l\'Amende',
fine_nomoney_desc = 'Le suspect n\'a pas assez d\'argent pour payer l\'amende (Montant de l\'amende : $%s)',
male = 'Homme',
female = 'Femme',
mr = 'M.',
mrs = 'Mme',
debt_collection = 'Recouvrement de Dettes',
db_email =
'Cher %s %s, <br /><br />L\'Agence Centrale de Recouvrement Judiciaire (CJCA) a facturé les amendes que vous avez reçues de la police.<br />Un montant de <strong>$%s</strong> a été retiré de votre compte.<br /><br />Cordialement,<br />M. Wasabi',
spawn_blocked = 'Garage Bloqué',
spawn_blocked_desc = 'Vous ne pouvez pas sortir votre véhicule car il est bloqué !',
positive = 'Positif',
positive_gsr_desc = 'Le suspect a été testé POSITIF pour résidus de tir !',
negative = 'Négatif',
negative_gsr_desc = 'Le suspect a été testé NÉGATIF pour résidus de tir !',
gsr_test = 'Test GSR',
gsr_test_desc = 'Tester un suspect proche pour résidus de tir',
hands_clean = 'Nettoyé',
hands_clean_desc = 'Vous avez nettoyé vos mains des résidus de tir avec succès !',
gsr_wash_ui = '[E] - Se Laver les Mains',
on_duty = 'En Service',
on_duty_desc = 'Vous êtes maintenant en service !',
off_duty = 'Hors Service',
off_duty_desc = 'Vous êtes maintenant hors service !',
robbing_player = 'Vol du Victime. . .',
cancelled_action = 'Action Annulée',
cancelled_action_desc = 'Votre dernière action a été annulée !',
no_cuffs = 'Pas de Menottes',
no_cuffs_desc = 'Vous n\'avez pas de menottes dans vos poches !',
failed = 'Échec',
lockpick_handcuff_success = 'Vous avez crocheter les menottes avec succès !',
lockpick_handcuff_fail = 'Échec du crochetage des menottes !',
lockpick_broke = 'Crochet Tordu',
lockpick_broke_desc = 'Votre crochet s\'est tordu !',
grant_license = 'Délivrer Permis d\'Arme',
grant_license_desc = 'Délivrer un permis d\'arme à une personne proche',
player_id = 'ID du Joueur :',
select_player = 'Sélectionner Personne',
license_granted = 'Permis Accordé',
license_granted_desc = 'Vous avez accordé un permis d\'arme à %s (%s)',
license_alr_granted = 'Cette personne a déjà un permis !',
weapon_license = 'Permis d\'Arme',
weapon_license_desc = 'Vous avez reçu votre permis d\'arme.',
in_vehicle = 'Dans le Véhicule',
in_vehicle_desc = 'Vous ne pouvez pas arrêter le suspect dans un véhicule !',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'hi' end
if Config.Language ~= 'hi' then return end
Strings = {
jail_countdown_header = 'आप जेल में हैं',
jail_countdown_sentence = '%s महीने शेष',
jail_time_up = 'जेल का समय समाप्त',
jail_time_up_desc = 'आपने जेल में अपना समय पूरा कर लिया है।',
no_society_account = 'कोई समाज खाता नहीं मिला - अपनी सेटिंग्स जांचें!',
officer = 'अधिकारी',
not_authorized = 'अधिकृत नहीं',
not_authorized_desc = 'आपका इसका उपयोग करने का अधिकार नहीं है!',
not_on_duty = 'ड्यूटी पर नहीं',
not_on_duty_desc = 'आप ड्यूटी पर नहीं हैं!',
gps_enabled = 'GPS सक्षम',
gps_enabled_desc = 'आपने अपना GPS सक्षम कर दिया है',
gps_disabled = 'GPS अक्षम',
gps_disabled_desc = 'आपने अपना GPS अक्षम कर दिया है',
new_speed_trap = 'नई स्पीड ट्रैप',
speed_limit = 'गति सीमा',
detection_radius = 'पता लगाने की त्रिज्या',
incorrect_input = 'गलत इनपुट',
incorrect_input_cancel = 'पिछला इनपुट रद्द किया गया।',
incorrect_input_speed = 'कृपया एक वैध गति सीमा दर्ज करें।',
radar_post = 'रडार पोस्ट',
ui_radar_post_place = 'E - पोस्ट रखें \n R - घुमाएं \n BACK - रद्द करें \n UP/DOWN - दूरी',
radar_post_placed = 'रडार पोस्ट सफलतापूर्वक स्थापित किया गया।',
radar_post_failed = 'रडार पोस्ट स्थापित करने में विफल।',
speed_trap_rename = '%s का नाम बदलें',
speed_trap = 'स्पीड ट्रैप',
new_name = 'नया नाम',
speed_trap_renamed = 'आपने %s को सफलतापूर्वक %s में बदल दिया है।',
speed_trap_rename_failed = 'रडार पोस्ट का नाम बदलने में विफल!',
manage_trap_rename = 'रडार पोस्ट का नाम बदलें',
manage_trap_rename_desc = 'इस रडार पोस्ट का नाम संपादित करें',
manage_trap_delete = 'रडार पोस्ट निकालें',
manage_trap_delete_desc = 'इस रडार पोस्ट को निकालें',
menu_trap_create = 'रडार पोस्ट बनाएं',
menu_trap_create_desc = 'अपने वर्तमान स्थान के पास एक रडार पोस्ट बनाएं',
menu_trap_manage = 'रडार पोस्ट प्रबंधित करें',
menu_trap_manage_desc = 'सबसे निकटतम रडार पोस्ट प्रबंधित करें।',
menu_select_trap = 'रडार पोस्ट चुनें',
menu_radar_posts = 'रडार पोस्ट',
menu_radar_posts_desc = 'रडार पोस्ट तैनात/हटाएं।',
warning_speedtrap_table = '^0[^1चेतावनी^0] स्पीड ट्रैप डेटाबेस तालिका स्वचालित रूप से नहीं बनी!',
menu_cctv_cameras = 'CCTV कैमरे',
menu_cctv_cameras_desc = 'CCTV कैमरे लगाएँ/हटाएँ',
menu_cctv_create = 'CCTV कैमरा बनाएँ',
menu_cctv_create_desc = 'अपने वर्तमान स्थान के पास एक CCTV कैमरा बनाएँ',
menu_select_cctv = 'CCTV कैमरा चुनें',
menu_cctv_manage = 'CCTV कैमरा प्रबंधित करें',
menu_cctv_manage_desc = 'निकटतम CCTV कैमरा प्रबंधित करें',
new_cctv = 'नया CCTV कैमरा',
manage_cctv_rename = 'CCTV कैमरे का नाम बदलें',
manage_cctv_rename_desc = 'इस CCTV कैमरे का नाम संपादित करें',
cctv_renamed = 'आपने %s का नाम सफलतापूर्वक बदलकर %s कर दिया है।',
cctv_rename_failed = 'आप CCTV कैमरे का नाम बदलने में विफल रहे हैं!',
manage_cctv_delete = 'सीसीटीवी कैमरा हटाएँ',
manage_cctv_delete_desc = 'इस सीसीटीवी कैमरे को हटाएँ',
manage_cctv_view = 'सीसीटीवी कैमरा देखें',
manage_cctv_view_desc = 'वर्तमान सीसीटीवी कैमरा देखें',
cctv = 'सीसीटीवी कैमरा',
cctv_placed = 'सीसीटीवी कैमरा सफलतापूर्वक लगाया गया है।',
cctv_failed = 'सीसीटीवी कैमरा लगाने में विफल रहा।',
manage_cctv_repair = 'सीसीटीवी कैमरा ठीक करें',
manage_cctv_repair_desc = 'इस सीसीटीवी कैमरे की मरम्मत करें',
cctv_repaired = 'सीसीटीवी कैमरा ठीक कर दिया गया है।',
cctv_repair_failed = 'सीसीटीवी कैमरा ठीक करने में विफल रहा।',
warning_cctv_table = '^0[^1WARNING^0] सीसीटीवी डेटाबेस टेबल अपने आप नहीं बनी!',
cctv_repairing = 'सीसीटीवी कैमरा रिपेयर किया जा रहा है. . .',
cctv_not_broken = 'सीसीटीवी कैमरा नहीं टूटा है',
cctv_destroyed = 'सीसीटीवी कैमरा नष्ट हो गया',
cctv_destroyed_desc = 'आपने सीसीटीवी कैमरा नष्ट कर दिया है',
cctv_not_closest = 'सबसे नज़दीकी सीसीटीवी कैमरा नहीं है',
cctv_remove_error = 'त्रुटि',
cctv_remove_error_desc = "आप इस सीसीटीवी कैमरे को हटा नहीं सकते",
menu_tracking_bracelet = 'ट्रैकिंग ब्रेसेलेट देखें',
menu_tracking_bracelet_desc = 'शहर में सभी ट्रैकिंग ब्रेसेलेट देखें',
tracking_bracelet = 'ट्रैकिंग ब्रेसेलेट',
tracking_bracelet_desc = 'पास के संदिग्ध से ट्रैकिंग ब्रेसेलेट जोड़ें या हटाएं',
no_bracelets = 'कोई ब्रेसेलेट नहीं',
no_bracelets_desc = 'शहर में कोई ट्रैकिंग ब्रेसेलेट नहीं हैं।',
optn_tracking_bracelet_title = 'संदिग्ध: %s',
optn_tracking_bracelet_desc = 'ट्रैकिंग ब्रेसेलेट जोड़ा गया: %s',
tracking_bracelet_toggle_failed = 'ट्रैकिंग ब्रेसेलेट बदलने में विफल!',
tracking_bracelet_toggle = 'ट्रैकिंग ब्रेसेलेट बदला गया',
tracking_bracelet_toggled_desc = 'आपने %s के लिए ट्रैकिंग ब्रेसेलेट बदला',
tracking_bracelet_toggle_failed_desc = 'आप %s के लिए ट्रैकिंग ब्रेसेलेट बदलने में विफल रहे',
got_tracking_bracelet = 'ट्रैकिंग ब्रेसेलेट जोड़ा गया',
got_tracking_bracelet_desc = 'आपको ट्रैकिंग ब्रेसेलेट मिला',
start_tracking = 'ट्रैकिंग ब्रेसेलेट जोड़ना',
stop_tracking = 'ट्रैकिंग ब्रेसेलेट हटाना',
removed_tracking_bracelet = 'ट्रैकिंग ब्रेसेलेट हटा दिया गया',
removed_tracking_bracelet_desc = 'ट्रैकिंग ब्रेसेलेट हटा दिया गया',
no_tracking_bracelet = 'कोई ट्रैकिंग ब्रेसेलेट नहीं',
no_tracking_bracelet_desc = 'आपके पास कोई ट्रैकिंग ब्रेसेलेट नहीं है',
license_self = 'स्वयं',
grade_too_low = 'ग्रेड बहुत कम है',
grade_too_low_desc = 'इस क्रिया के लिए आपका ग्रेड बहुत कम है!',
invoice_amount = 'चालान राशि',
amount_invoice = 'राशि',
reason_invoice = 'कारण',
description_invoice = 'विवरण',
description_invoice_desc = 'जुर्माना के लिए नोट्स',
tickets_invoice = 'टिकट',
tickets_invoice_desc = 'जुर्माना चुनें',
gov_billing = 'सरकारी ऋण वसूली',
fine_id_invoice = 'जुर्माना आईडी',
offenses_invoice = 'अपराध',
ticket_received = 'आपको %s से एक टिकट मिला है',
speedtrap_fine = 'स्पीड ट्रैप जुर्माना',
speedtrap_fine_desc = 'कैमरे पर %s%s की गति सीमा %s%s से अधिक होने के कारण आपको जुर्माना लगाया गया है!',
evidence_storage = 'प्रमाण भंडारण',
locker_number = 'लॉकर नंबर',
cuffed_last_online = 'पहले हथकड़ी लगे थे',
cuffed_last_online_desc = 'जब आप आखिरी बार शहर में थे तो आपको हथकड़ी लगी हुई थी।',
player_in_vehicle = 'संदिग्ध वाहन में है',
player_in_vehicle_desc = 'यह करने से पहले संदिग्ध को वाहन से बाहर निकालें!',
suspect_died_escort = 'संदिग्ध की मृत्यु हो गई',
suspect_died_escort_desc = 'एस्कॉर्टिंग के दौरान संदिग्ध की मृत्यु हो गई और आपने उन्हें गिरा दिया।',
stop_escorting_interact = '[E] - एस्कॉर्टिंग रोकें',
cant_wield = 'सज्जित नहीं कर सकते',
cant_wield_desc = 'आप इस समय इसका उपयोग नहीं कर सकते!',
jailed_player = 'संदिग्ध को जेल में डाला गया',
jailed_player_desc = 'आपने %s को %s महीनों के लिए जेल में डाल दिया है।',
gps_active = 'जीपीएस सक्रिय',
gps_active_desc = 'खिलाड़ी %s ने अपना जीपीएस सक्रिय कर दिया है',
gps_deactive = 'जीपीएस निष्क्रिय',
gps_deactive_desc = 'खिलाड़ी %s ने अपना जीपीएस निष्क्रिय कर दिया है',
no_wsb = '^0[^3चेतावनी^0] wasabi_bridge फ्रेमवर्क के बाद और/या संसाधन से पहले शुरू नहीं हुआ: %s',
currency = '₹',
success = 'सफलता',
go_back = 'वापस जाएं',
cloakroom = 'चेंजिंग रूम',
civilian_wear = 'सिविल कपड़े',
armoury_quantity_dialog = 'ऑर्डर की मात्रा',
quantity = 'मात्रा',
invalid_amount = 'अमान्य राशि',
invalid_amount_desc = 'कृपया एक वैध राशि दर्ज करें',
successful_purchase_desc = 'आपने सफलतापूर्वक अपने हथियार आर्मरी से ऑर्डर कर लिए हैं',
lacking_funds = 'अपर्याप्त धनराशि',
lacking_funds_desc = 'इस खरीद के लिए आपके बैंक में धनराशि नहीं है',
no_permission = 'अनुमति नहीं है',
no_access_desc = 'आपके पास इसे एक्सेस करने की अनुमति नहीं है!',
key_map_cuff = 'खिलाड़ी को हथकड़ी लगाएं',
key_map_tackle = 'दौड़ते समय खिलाड़ी को गिराएं',
key_map_job = 'जॉब मेनू खोलें',
no_nearby = 'कोई नहीं मिला',
no_nearby_desc = 'आसपास कोई नहीं दिख रहा है',
invalid_entry = 'अवैध प्रविष्टि',
invalid_entry_desc = 'कृपया एक वैध प्रविष्टि दर्ज करें।',
fines = 'जुर्माना',
fines_desc = 'आसपास के खिलाड़ी को जुर्माना दें',
search_player = 'संदिग्ध की तलाशी लें',
search_player_desc = 'आसपास के संदिग्ध की तलाशी लें',
jail_player = 'संदिग्ध को जेल में डालें',
jail_player_desc = 'आसपास के संदिग्ध को जेल में डालें',
minutes_dialog = 'सजा',
minutes_dialog_field = 'महीने',
escort_player = 'संदिग्ध को एस्कॉर्ट करें',
escort_player_desc = 'आसपास के संदिग्ध को एस्कॉर्ट करें',
handcuff_hard_player = 'संदिग्ध को कठोरता से हथकड़ी लगाएं',
handcuff_hard_player_desc = 'आसपास के संदिग्ध को कठोरता से हथकड़ी लगाएं',
handcuff_soft_player = 'संदिग्ध को नरमी से हथकड़ी लगाएं',
handcuff_soft_player_desc = 'आसपास के संदिग्ध को नरमी से हथकड़ी लगाएं',
put_in_vehicle = 'वाहन में डालें',
put_in_vehicle_desc = 'आसपास के संदिग्ध को वाहन में डालें',
check_id = 'पहचान जांचें',
check_id_desc = 'आसपास के संदिग्ध की पहचान जांचें।',
id_result_menu = 'पहचान परिणाम',
name = 'नाम',
job = 'काम',
job_position = 'पद',
dob = 'जन्म तिथि',
sex = 'लिंग',
bac = 'बीएसी',
licenses = 'लाइसेंस',
total_licenses = 'कुल लाइसेंस:',
no_licenses = 'कोई लाइसेंस नहीं',
revoke_license = 'लाइसेंस रद्द करें',
license_revoked = 'लाइसेंस रद्द किया गया',
license_revoked_desc = 'आपने सफलतापूर्वक लाइसेंस रद्द किया',
armoury_menu = 'आर्मरी मेनू',
take_out_vehicle = 'वाहन से बाहर निकालें',
take_out_vehicle_desc = 'संदिग्ध को वाहन से बाहर निकालें',
not_restrained = 'लक्ष्य असंयमित है',
not_restrained_desc = 'आपको अपराधी को एस्कॉर्ट करने से पहले संयमित करना होगा',
vehicle_not_found = 'कोई वाहन नहीं मिला',
vehicle_not_found_desc = 'आसपास कोई वाहन नहीं मिला',
unconcious = 'व्यक्ति बेहोश है',
unconcious_desc = 'व्यक्ति बेहोश लग रहा है',
police_garage = 'गेराज',
police = 'पुलिस',
plate = 'प्लेट नंबर',
owner = 'मालिक',
possibly_stolen = 'सावधान!',
possibly_stolen_desc = 'वाहन संभवतः चोरी का है',
vehicle_interactions = 'वाहन इंटरैक्शन',
vehicle_interactions_desc = 'आसपास के वाहन का निरीक्षण करें',
vehicle_information = 'वाहन जानकारी',
vehicle_information_desc = 'आसपास के वाहन की जानकारी',
lockpick_vehicle = 'वाहन का लॉकपिक करें',
locakpick_vehicle_desc = 'आसपास के वाहन तक जबरन पहुंच प्राप्त करें',
lockpick_progress = 'वाहन का लॉकपिक हो रहा है . . .',
too_far = 'बहुत दूर है',
too_far_desc = 'लक्ष्य वाहन बहुत दूर है',
lockpicked = 'सफलतापूर्वक अनलॉक किया गया',
lockpicked_desc = 'आपने लक्ष्य वाहन को सफलतापूर्वक अनलॉक किया है',
cancelled = 'रद्द किया गया',
cancelled_desc = 'आपकी अंतिम क्रिया रद्द कर दी गई है',
impound_vehicle = 'वाहन को ज़ब्त करें',
impound_vehicle_desc = 'आसपास के वाहन को ज़ब्त करें',
impounding_progress = 'वाहन को ज़ब्त किया जा रहा है . . .',
driver_in_car = 'ड्राइवर वाहन में है',
driver_in_car_desc = 'वाहन को ज़ब्त करने से पहले ड्राइवर को हटा दें!',
car_impounded_desc = 'वाहन को ज़ब्त किया गया है',
place_object = 'वस्तुएं रखें',
place_object_desc = 'वस्तुओं को फर्श पर रखें।',
prop_help_text =
'वस्तु को स्थानांतरित करने के लिए ~INPUT_CONTEXT~ दबाएं।\nवस्तु को हटाने के लिए ~INPUT_DETONATE~ दबाएं।',
prop_help_text2 = 'वस्तु को रखने के लिए ~INPUT_CONTEXT~ दबाएं।',
seize_cash_title = 'नकद ज़ब्त करें',
seize_cash = 'नकद ज़ब्त किया गया',
seize_cash_desc = 'पुलिस(%s) ने आपका नकद ज़ब्त किया है',
seize_cash_label = 'संदिग्ध का नकद ज़ब्त किया गया',
seize_cash_failed = 'ज़ब्ती विफल',
seize_cash_failed_desc = 'संदिग्ध के पास नकद नहीं है',
fine_sent = 'जुर्माना भेजा गया',
fine_sent_desc = 'आपने सफलतापूर्वक $%s का जुर्माना भेजा है!',
fine_received = 'जुर्माना प्राप्त हुआ',
fine_received_desc = 'आपको $%s का जुर्माना मिला है',
fine_nomoney = 'जुर्माना विफल',
fine_nomoney_desc = 'संदिग्ध के पास जुर्माना भुगतान करने के लिए पर्याप्त पैसे नहीं हैं (जुर्माना राशि: $%s)',
male = 'पुरुष',
female = 'महिला',
mr = 'श्री',
mrs = 'श्रीमती',
debt_collection = 'ऋण संग्रह',
db_email =
'प्रिय %s %s,<br /><br />केंद्रीय न्यायिक संग्रह एजेंसी (CJCA) ने पुलिस से प्राप्त जुर्माना वसूल लिया है।<br />आपके खाते से <strong>$%s</strong> की राशि निकाली गई है।<br /><br />सादर,<br />श्री वसाबी',
spawn_blocked = 'गेराज अवरुद्ध है',
spawn_blocked_desc = 'आप अपना वाहन बाहर नहीं निकाल सकते क्योंकि यह अवरुद्ध है!',
positive = 'सकारात्मक',
positive_gsr_desc = 'संदिग्ध के गनशॉट अवशेषों के लिए सकारात्मक परीक्षण किया गया है!',
negative = 'नकारात्मक',
negative_gsr_desc = 'संदिग्ध के गनशॉट अवशेषों के लिए नकारात्मक परीक्षण किया गया है!',
gsr_test = 'जीएसआर परीक्षण',
gsr_test_desc = 'आसपास के संदिग्ध के गनशॉट अवशेषों का परीक्षण करें',
hands_clean = 'साफ़',
hands_clean_desc = 'आपने अपने हाथों को गनशॉट अवशेषों से सफलतापूर्वक साफ़ किया है!',
gsr_wash_ui = '[E] - हाथ धोएं',
on_duty = 'ड्यूटी पर',
on_duty_desc = 'आप अब ड्यूटी पर हैं!',
off_duty = 'ड्यूटी से बाहर',
off_duty_desc = 'आप अब ड्यूटी से बाहर हैं!',
robbing_player = 'पीड़ित को लूट रहे हैं...',
cancelled_action = 'क्रिया रद्द की गई',
cancelled_action_desc = 'आपकी अंतिम क्रिया रद्द कर दी गई है!',
no_cuffs = 'हथकड़ी नहीं है',
no_cuffs_desc = 'आपकी जेब में कोई हथकड़ी नहीं है!',
failed = 'विफल',
lockpick_handcuff_success = 'आपने सफलतापूर्वक हथकड़ी खोल दी है!',
lockpick_handcuff_fail = 'हथकड़ी खोलने में विफल!',
lockpick_broke = 'लॉकपिक मुड़ा',
lockpick_broke_desc = 'आपका लॉकपिक मुड़ गया है!',
grant_license = 'हथियार लाइसेंस जारी करें',
grant_license_desc = 'पास के व्यक्ति को हथियार लाइसेंस जारी करें',
player_id = 'खिलाड़ी आईडी:',
select_player = 'व्यक्ति का चयन करें',
license_granted = 'लाइसेंस जारी किया गया',
license_granted_desc = 'आपने %s (%s) को हथियार लाइसेंस जारी किया है',
license_alr_granted = 'इस व्यक्ति के पास पहले से ही एक लाइसेंस है!',
weapon_license = 'हथियार लाइसेंस',
weapon_license_desc = 'आपको अभी-अभी एक हथियार लाइसेंस जारी किया गया है।',
in_vehicle = 'वाहन में है',
in_vehicle_desc = 'आप वाहन में रहते हुए संदिग्ध को गिरफ्तार नहीं कर सकते!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'it' end
if Config.Language ~= 'it' then return end
Strings = {
jail_countdown_header = 'SEI IN PRIGIONE',
jail_countdown_sentence = 'Mancano %s mesi',
jail_time_up = 'Tempo di prigione terminato',
jail_time_up_desc = 'Hai scontato il tuo tempo in prigione.',
no_society_account = 'Nessun account di società trovato per %s - controlla la tua configurazione!',
officer = 'Ufficiale',
not_authorized = 'Non Autorizzato',
not_authorized_desc = 'Non sei autorizzato a utilizzare questo!',
not_on_duty = 'Non in servizio',
not_on_duty_desc = 'Non sei in servizio!',
gps_enabled = 'GPS Abilitato',
gps_enabled_desc = 'Hai abilitato il tuo GPS',
gps_disabled = 'GPS Disabilitato',
gps_disabled_desc = 'Hai disabilitato il tuo GPS',
new_speed_trap = 'Nuovo Autovelox',
speed_limit = 'Limite di Velocità',
detection_radius = 'Raggio di rilevamento',
incorrect_input = 'Input Errato',
incorrect_input_cancel = 'Input precedente annullato.',
incorrect_input_speed = 'Inserisci un limite di velocità valido.',
radar_post = 'Postazione Radar',
ui_radar_post_place = 'E - Posiziona postazione \n R - Ruota \n BACK - Annulla \n UP/DOWN - Distanza',
radar_post_placed = 'Postazione radar posizionata con successo.',
radar_post_failed = 'Posizionamento della postazione radar fallito.',
speed_trap_rename = 'Rinomina %s',
speed_trap = 'Autovelox',
new_name = 'Nuovo Nome',
speed_trap_renamed = 'Hai rinominato con successo %s in %s.',
speed_trap_rename_failed = 'Rinomina della postazione radar fallita!',
manage_trap_rename = 'Rinomina Postazione Radar',
manage_trap_rename_desc = 'Modifica il nome di questa postazione radar',
manage_trap_delete = 'Rimuovi Postazione Radar',
manage_trap_delete_desc = 'Rimuovi questa postazione radar',
menu_trap_create = 'Crea Postazione Radar',
menu_trap_create_desc = 'Crea una postazione radar vicino alla tua posizione attuale',
menu_trap_manage = 'Gestisci Postazione Radar',
menu_trap_manage_desc = 'Gestisci la postazione radar più vicina.',
menu_select_trap = 'Seleziona Postazione Radar',
menu_radar_posts = 'Postazioni radar',
menu_radar_posts_desc = 'Dispiegare/Rimuovere postazioni radar.',
warning_speedtrap_table =
'^0[^1ATTENZIONE^0] La tabella del database degli autovelox non è stata creata automaticamente!',
menu_cctv_cameras = 'Telecamere CCTV',
menu_cctv_cameras_desc = 'Distribuisci/Rimuovi telecamere CCTV',
menu_cctv_create = 'Crea telecamera CCTV',
menu_cctv_create_desc = 'Crea una telecamera CCTV vicino alla tua posizione attuale',
menu_select_cctv = 'Seleziona telecamera CCTV',
menu_cctv_manage = 'Gestisci telecamera CCTV',
menu_cctv_manage_desc = 'Gestisci la telecamera CCTV più vicina',
new_cctv = 'Nuova telecamera CCTV',
manage_cctv_rename = 'Rinomina telecamera CCTV',
manage_cctv_rename_desc = 'Modifica il nome di questa telecamera CCTV',
cctv_renamed = 'Hai rinominato con successo %s in %s.',
cctv_rename_failed = 'Non sei riuscito a rinominare Telecamera CCTV!',
manage_cctv_delete = 'Rimuovi Telecamera CCTV',
manage_cctv_delete_desc = 'Rimuovi questa Telecamera CCTV',
manage_cctv_view = 'Visualizza Telecamera CCTV',
manage_cctv_view_desc = 'Visualizza la Telecamera CCTV corrente',
cctv = 'Telecamera CCTV',
cctv_placed = 'La Telecamera CCTV è stata posizionata correttamente.',
cctv_failed = 'Impossibile posizionare la Telecamera CCTV.',
manage_cctv_repair = 'Ripara Telecamera CCTV',
manage_cctv_repair_desc = 'Ripara questa Telecamera CCTV',
cctv_repaired = 'La Telecamera CCTV è stata riparata.',
cctv_repair_failed = 'Impossibile riparare la Telecamera CCTV.',
warning_cctv_table = '^0[^1WARNING^0] database CCTV la tabella non si è auto-costruita!',
cctv_repairing = 'Riparazione telecamera CCTV...',
cctv_not_broken = 'Telecamera CCTV non rotta',
cctv_destroyed = 'Telecamera CCTV distrutta',
cctv_destroyed_desc = 'Hai distrutto la telecamera CCTV',
cctv_not_closest = 'Telecamera CCTV non più vicina',
cctv_remove_error = 'Errore',
cctv_remove_error_desc = "Non puoi rimuovere questa telecamera CCTV",
menu_tracking_bracelet = 'Visualizza Braccialetti di Tracciamento',
menu_tracking_bracelet_desc = 'Visualizza tutti i braccialetti di tracciamento in città',
tracking_bracelet = 'Braccialetto di Tracciamento',
tracking_bracelet_desc = 'Aggiungi o rimuovi un braccialetto di tracciamento da un sospetto nelle vicinanze',
no_bracelets = 'Nessun Braccialetto',
no_bracelets_desc = 'Non ci sono braccialetti di tracciamento in città.',
optn_tracking_bracelet_title = 'Sospetto: %s',
optn_tracking_bracelet_desc = 'Braccialetto di tracciamento aggiunto da: %s',
tracking_bracelet_toggle_failed = 'Impossibile cambiare il braccialetto di tracciamento!',
tracking_bracelet_toggle = 'Braccialetto di Tracciamento Modificato',
tracking_bracelet_toggled_desc = 'Hai modificato il braccialetto di tracciamento per %s',
tracking_bracelet_toggle_failed_desc = 'Non sei riuscito a cambiare il braccialetto di tracciamento per %s',
got_tracking_bracelet = 'Braccialetto di Tracciamento Aggiunto',
got_tracking_bracelet_desc = 'Hai ricevuto un braccialetto di tracciamento',
start_tracking = 'Aggiungendo Braccialetto di Tracciamento',
stop_tracking = 'Rimuovendo Braccialetto di Tracciamento',
removed_tracking_bracelet = 'Braccialetto di Tracciamento Rimosso',
removed_tracking_bracelet_desc = 'Il braccialetto di tracciamento è stato rimosso',
no_tracking_bracelet = 'Nessun Braccialetto di Tracciamento',
no_tracking_bracelet_desc = 'Non hai un braccialetto di tracciamento',
license_self = 'Sé Stesso',
grade_too_low = 'Grado Troppo Basso',
grade_too_low_desc = 'Il tuo grado è troppo basso per questa azione!',
invoice_amount = 'Importo della Fattura',
amount_invoice = 'Importo',
reason_invoice = 'Motivo',
description_invoice = 'Descrizione',
description_invoice_desc = 'Note per la Multa',
tickets_invoice = 'Multe',
tickets_invoice_desc = 'Seleziona Multe',
gov_billing = 'Recupero Crediti Governativi',
fine_id_invoice = 'ID Multa',
offenses_invoice = 'Reati',
ticket_received = 'Hai ricevuto una multa da %s',
speedtrap_fine = 'Multa Autovelox',
speedtrap_fine_desc = 'Sei stato multato di %s%s per aver superato il limite di velocità di %s%s sulla fotocamera!',
evidence_storage = 'Deposito Prove',
locker_number = 'Numero Armadietto',
cuffed_last_online = 'Precedentemente Ammanettato',
cuffed_last_online_desc = 'Eri ammanettato l\'ultima volta che eri in città.',
player_in_vehicle = 'Sospetto nel Veicolo',
player_in_vehicle_desc = 'Rimuovi il sospetto dal veicolo prima di fare questo!',
suspect_died_escort = 'Sospetto Deceduto',
suspect_died_escort_desc = 'Il sospetto è morto durante il trasporto e lo hai lasciato cadere.',
stop_escorting_interact = '[E] - Interrompi Trasporto',
cant_wield = 'Non Può Essere Equipaggiato',
cant_wield_desc = 'Non puoi usare questo in questo momento!',
jailed_player = 'Sospetto Imprigionato',
jailed_player_desc = 'Hai imprigionato %s per %s mesi.',
gps_active = 'GPS Attivato',
gps_active_desc = 'Il giocatore %s ha attivato il proprio GPS',
gps_deactive = 'GPS Disattivato',
gps_deactive_desc = 'Il giocatore %s ha disattivato il proprio GPS',
no_wsb = '^0[^3ATTENZIONE^0] wasabi_bridge NON è stato avviato DOPO il framework e/o PRIMA della risorsa: %s',
currency = '€',
success = 'Successo',
go_back = 'Torna Indietro',
cloakroom = 'Spogliatoio',
civilian_wear = 'Abbigliamento Civile',
armoury_quantity_dialog = 'Quantità da Ordinare',
quantity = 'Quantità',
invalid_amount = 'Importo Non Valido',
invalid_amount_desc = 'Inserisci un importo valido',
successful_purchase_desc = 'Hai ordinato con successo le tue armi dall\'armeria',
lacking_funds = 'Fondi Insufficienti',
lacking_funds_desc = 'Non hai abbastanza fondi in banca per questo acquisto',
no_permission = 'Nessun Permesso',
no_access_desc = 'Non sei autorizzato ad accedere a questo!',
key_map_cuff = 'Ammanetta il Giocatore',
key_map_tackle = 'Placca il giocatore durante la corsa',
key_map_job = 'Apri il Menu Lavoro',
no_nearby = 'Nessuno Trovato',
no_nearby_desc = 'Non sembra esserci nessuno nei paraggi',
invalid_entry = 'Voce Non Valida',
invalid_entry_desc = 'Inserisci una voce valida.',
fines = 'Multe',
fines_desc = 'Emetti una multa a un giocatore vicino',
search_player = 'Perquisisci Sospetto',
search_player_desc = 'Perquisisci un sospetto vicino',
jail_player = 'Incarcera Sospetto',
jail_player_desc = 'Incarcera un sospetto vicino',
minutes_dialog = 'Condanna',
minutes_dialog_field = 'Mesi',
escort_player = 'Trasporta Sospetto',
escort_player_desc = 'Trasporta un sospetto vicino',
handcuff_hard_player = 'Ammanetta Duramente il Sospetto',
handcuff_hard_player_desc = 'Ammanetta duramente un sospetto vicino',
handcuff_soft_player = 'Ammanetta Morbidamente il Sospetto',
handcuff_soft_player_desc = 'Ammanetta morbidamente un sospetto vicino',
put_in_vehicle = 'Metti nel Veicolo',
put_in_vehicle_desc = 'Metti un sospetto vicino nel veicolo',
check_id = 'Controlla Identità',
check_id_desc = 'Controlla l\'ID di un sospetto vicino.',
id_result_menu = 'Risultati Identità',
name = 'Nome',
job = 'Lavoro',
job_position = 'Posizione',
dob = 'Data di Nascita',
sex = 'Sesso',
bac = 'Tasso Alcolemico',
licenses = 'Licenze',
total_licenses = 'Totale Licenze:',
no_licenses = 'Nessuna Licenza',
revoke_license = 'Revoca Licenza',
license_revoked = 'Licenza Revocata',
license_revoked_desc = 'Hai revocato con successo la licenza',
armoury_menu = 'Menu Armeria',
take_out_vehicle = 'Rimuovi dal Veicolo',
take_out_vehicle_desc = 'Rimuovi il sospetto dal veicolo',
not_restrained = 'Bersaglio Non Restrainato',
not_restrained_desc = 'Devi prima restrain il criminale prima di trasportarlo',
vehicle_not_found = 'Veicolo Non Trovato',
vehicle_not_found_desc = 'Nessun veicolo trovato nelle vicinanze',
unconcious = 'Persona Inconscia',
unconcious_desc = 'La persona sembra incosciente',
police_garage = 'Garage',
police = 'Polizia',
plate = 'Numero di Targa',
owner = 'Proprietario',
possibly_stolen = 'Attenzione!',
possibly_stolen_desc = 'Veicolo Possibilmente Rubato',
vehicle_interactions = 'Interazioni Veicolo',
vehicle_interactions_desc = 'Ispeziona il veicolo vicino',
vehicle_information = 'Informazioni Veicolo',
vehicle_information_desc = 'Informazioni sul veicolo vicino',
lockpick_vehicle = 'Scasso Veicolo',
locakpick_vehicle_desc = 'Forza l\'accesso al veicolo vicino',
lockpick_progress = 'Scassinando Veicolo . . .',
too_far = 'Troppo Lontano',
too_far_desc = 'Il veicolo bersaglio è troppo lontano',
lockpicked = 'Sbloccato con Successo',
lockpicked_desc = 'Hai sbloccato con successo il veicolo bersaglio',
cancelled = 'Annullato',
cancelled_desc = 'Hai annullato la tua ultima azione',
impound_vehicle = 'Sequestra Veicolo',
impound_vehicle_desc = 'Sequestra veicolo vicino',
impounding_progress = 'Sequestrando Veicolo . . .',
driver_in_car = 'Conducente nel Veicolo',
driver_in_car_desc = 'Rimuovi il conducente dal veicolo prima di sequestrarlo!',
car_impounded_desc = 'Veicolo sequestrato',
place_object = 'Posiziona Oggetti',
place_object_desc = 'Posiziona oggetti sul pavimento.',
prop_help_text = 'Premi ~INPUT_CONTEXT~ per muovere l\'oggetto.\nPremi ~INPUT_DETONATE~ per eliminare l\'oggetto.',
prop_help_text2 = 'Premi ~INPUT_CONTEXT~ per posizionare l\'oggetto.',
seize_cash_title = 'Sequestra Contanti',
seize_cash = 'Contanti Sequestrati',
seize_cash_desc = 'La polizia(%s) ha sequestrato i tuoi contanti',
seize_cash_label = 'Contanti del sospetto sequestrati',
seize_cash_failed = 'Sequestro Fallito',
seize_cash_failed_desc = 'Il sospetto non ha contanti',
fine_sent = 'Multe Inviate',
fine_sent_desc = 'Hai inviato con successo una multa di $%s!',
fine_received = 'Multa Ricevuta',
fine_received_desc = 'Hai ricevuto una multa di $%s',
fine_nomoney = 'Multa Fallita',
fine_nomoney_desc = 'Il sospetto non ha abbastanza soldi per pagare la multa (Importo multa: $%s)',
male = 'Maschio',
female = 'Femmina',
mr = 'Sig.',
mrs = 'Sig.ra',
debt_collection = 'Recupero Crediti',
db_email =
'Gentile %s %s,<br /><br />L\'Agenzia Centrale di Recupero Giudiziario (CJCA) ha addebitato le multe che hai ricevuto dalla polizia.<br />È stato prelevato dal tuo conto un importo di <strong>$%s</strong>.<br /><br />Cordiali saluti,<br />Sig. Wasabi',
spawn_blocked = 'Garage Bloccato',
spawn_blocked_desc = 'Non puoi tirare fuori il tuo veicolo perché è bloccato!',
positive = 'Positivo',
positive_gsr_desc = 'Il sospetto è risultato POSITIVO alla polvere da sparo!',
negative = 'Negativo',
negative_gsr_desc = 'Il sospetto è risultato NEGATIVO alla polvere da sparo!',
gsr_test = 'Test Polvere da Sparo',
gsr_test_desc = 'Testa un sospetto vicino per la polvere da sparo',
hands_clean = 'Pulito',
hands_clean_desc = 'Hai pulito con successo le tue mani dalla polvere da sparo!',
gsr_wash_ui = '[E] - Lava le Mani',
on_duty = 'In Servizio',
on_duty_desc = 'Sei ora in servizio!',
off_duty = 'Fuori Servizio',
off_duty_desc = 'Sei ora fuori servizio!',
robbing_player = 'Rapinando la Vittima...',
cancelled_action = 'Azione Annullata',
cancelled_action_desc = 'La tua ultima azione è stata annullata!',
no_cuffs = 'Niente Manette',
no_cuffs_desc = 'Non hai manette nelle tue tasche!',
failed = 'Fallito',
lockpick_handcuff_success = 'Hai scassinato con successo le manette!',
lockpick_handcuff_fail = 'Scassinamento delle manette fallito!',
lockpick_broke = 'Grimaldello Piega',
lockpick_broke_desc = 'Il tuo grimaldello si è piegato!',
grant_license = 'Rilascia Licenza Armi',
grant_license_desc = 'Rilascia una licenza armi a una persona vicina',
player_id = 'ID Giocatore:',
select_player = 'Seleziona Persona',
license_granted = 'Licenza Rilasciata',
license_granted_desc = 'Hai rilasciato una licenza armi a %s (%s)',
license_alr_granted = 'Questa persona ha già una licenza!',
weapon_license = 'Licenza Armi',
weapon_license_desc = 'Ti è stata appena rilasciata una licenza armi.',
in_vehicle = 'Nel Veicolo',
in_vehicle_desc = 'Non puoi arrestare il sospetto mentre è nel veicolo!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'jp' end
if Config.Language ~= 'jp' then return end
Strings = {
jail_countdown_header = 'あなたは刑務所にいます',
jail_countdown_sentence = '残り%sヶ月',
jail_time_up = '刑期が終了しました',
jail_time_up_desc = '刑期を全て服役しました。',
no_society_account = '%s の社会アカウントが見つかりません - 設定を確認してください!',
officer = '警官',
not_authorized = '権限なし',
not_authorized_desc = 'これを使用する権限がありません!',
not_on_duty = '勤務中ではない',
not_on_duty_desc = '現在勤務中ではありません!',
gps_enabled = 'GPS が有効',
gps_enabled_desc = 'GPS を有効にしました',
gps_disabled = 'GPS が無効',
gps_disabled_desc = 'GPS を無効にしました',
new_speed_trap = '新しいスピードトラップ',
speed_limit = '速度制限',
detection_radius = '検知半径',
incorrect_input = '入力が間違っています',
incorrect_input_cancel = '前の入力をキャンセルしました。',
incorrect_input_speed = '有効な速度制限を入力してください。',
radar_post = 'レーダーポスト',
ui_radar_post_place = 'E - ポストを設置 \n R - 回転 \n BACK - キャンセル \n UP/DOWN - 距離',
radar_post_placed = 'レーダーポストが正常に配置されました。',
radar_post_failed = 'レーダーポストの配置に失敗しました。',
speed_trap_rename = '%s の名前を変更',
speed_trap = 'スピードトラップ',
new_name = '新しい名前',
speed_trap_renamed = '%s を %s に正常に名前を変更しました。',
speed_trap_rename_failed = 'レーダーポストの名前変更に失敗しました!',
manage_trap_rename = 'レーダーポストの名前を変更',
manage_trap_rename_desc = 'このレーダーポストの名前を編集',
manage_trap_delete = 'レーダーポストを削除',
manage_trap_delete_desc = 'このレーダーポストを削除',
menu_trap_create = 'レーダーポストを作成',
menu_trap_create_desc = '現在の位置の近くにレーダーポストを作成',
menu_trap_manage = 'レーダーポストを管理',
menu_trap_manage_desc = '最寄りのレーダーポストを管理。',
menu_select_trap = 'レーダーポストを選択',
menu_radar_posts = 'レーダーポスト',
menu_radar_posts_desc = 'レーダーポストを展開/削除。',
warning_speedtrap_table = '^0[^1警告^0] スピードトラップデータベーステーブルが自動生成されませんでした!',
menu_cctv_cameras = 'CCTV カメラ',
menu_cctv_cameras_desc = 'CCTV カメラの配置/削除',
menu_cctv_create = 'CCTV カメラの作成',
menu_cctv_create_desc = '現在地の近くに CCTV カメラを作成する',
menu_select_cctv = 'CCTV カメラを選択',
menu_cctv_manage = 'CCTV カメラの管理',
menu_cctv_manage_desc = '最も近い CCTV カメラを管理する',
new_cctv = '新しい CCTV カメラ',
manage_cctv_rename = 'CCTV カメラの名前を変更する',
manage_cctv_rename_desc = 'この CCTV カメラの名前を編集する',
cctv_renamed = '%s の名前を %s に変更しました。',
cctv_rename_failed = 'CCTV の名前を変更できませんでしたカメラ!',
manage_cctv_delete = 'CCTV カメラを削除',
manage_cctv_delete_desc = 'この CCTV カメラを削除',
manage_cctv_view = 'CCTV カメラを表示',
manage_cctv_view_desc = '現在の CCTV カメラを表示',
cctv = 'CCTV カメラ',
cctv_placed = 'CCTV カメラが正常に配置されました。',
cctv_failed = 'CCTV カメラの配置に失敗しました。',
manage_cctv_repair = 'CCTV カメラを修復',
manage_cctv_repair_desc = 'この CCTV カメラを修復',
cctv_repaired = 'CCTV カメラが修復されました。',
cctv_repair_failed = 'CCTV カメラの修復に失敗しました。',
warning_cctv_table = '^0[^1WARNING^0] CCTV データベース テーブルが自動構築されませんでした!',
cctv_repairing = 'CCTV カメラを修復しています。 . .',
cctv_not_broken = 'CCTV カメラは壊れていません',
cctv_destroyed = 'CCTV カメラが破壊されました',
cctv_destroyed_desc = 'CCTV カメラを破壊しました',
cctv_not_closest = '最も近い CCTV カメラではありません',
cctv_remove_error = 'エラー',
cctv_remove_error_desc = "この CCTV カメラを削除することはできません",
menu_tracking_bracelet = '追跡ブレスレットを見る',
menu_tracking_bracelet_desc = '街にあるすべての追跡ブレスレットを見る',
tracking_bracelet = '追跡ブレスレット',
tracking_bracelet_desc = '近くの容疑者に追跡ブレスレットを追加または削除する',
no_bracelets = 'ブレスレットなし',
no_bracelets_desc = '街に追跡ブレスレットはありません。',
optn_tracking_bracelet_title = '容疑者: %s',
optn_tracking_bracelet_desc = '追跡ブレスレット追加者: %s',
tracking_bracelet_toggle_failed = '追跡ブレスレットの切り替えに失敗しました!',
tracking_bracelet_toggle = '追跡ブレスレットが切り替わりました',
tracking_bracelet_toggled_desc = '%sの追跡ブレスレットを切り替えました',
tracking_bracelet_toggle_failed_desc = '%sの追跡ブレスレットの切り替えに失敗しました',
got_tracking_bracelet = '追跡ブレスレットが追加されました',
got_tracking_bracelet_desc = '追跡ブレスレットを手に入れました',
start_tracking = '追跡ブレスレットの追加',
stop_tracking = '追跡ブレスレットの削除',
removed_tracking_bracelet = '追跡ブレスレットが削除されました',
removed_tracking_bracelet_desc = '追跡ブレスレットが削除されました',
no_tracking_bracelet = '追跡ブレスレットなし',
no_tracking_bracelet_desc = 'あなたは追跡ブレスレットを持っていません',
license_self = '自分',
grade_too_low = 'ランクが低すぎます',
grade_too_low_desc = 'この操作を行うためのランクが低すぎます!',
invoice_amount = '請求額',
amount_invoice = '金額',
reason_invoice = '理由',
description_invoice = '説明',
description_invoice_desc = '罰金のメモ',
tickets_invoice = 'チケット',
tickets_invoice_desc = '罰金を選択',
gov_billing = '政府の債務回収',
fine_id_invoice = '罰金ID',
offenses_invoice = '違反',
ticket_received = 'あなたは %s から罰金を受け取りました',
speedtrap_fine = 'スピードトラップ罰金',
speedtrap_fine_desc = 'カメラで速度制限を %s%s 超過したため、%s%s の罰金が科されました!',
evidence_storage = '証拠保管',
locker_number = 'ロッカー番号',
cuffed_last_online = '以前に手錠をかけられた',
cuffed_last_online_desc = '最後に街にいたときに手錠をかけられていました。',
player_in_vehicle = '容疑者が車内にいます',
player_in_vehicle_desc = 'これを行う前に容疑者を車から降ろしてください!',
suspect_died_escort = '容疑者が死亡しました',
suspect_died_escort_desc = '護送中に容疑者が死亡し、彼を落としました。',
stop_escorting_interact = '[E] - 護送を停止',
cant_wield = '装備できません',
cant_wield_desc = '今はこれを使用できません!',
jailed_player = '容疑者が投獄されました',
jailed_player_desc = '%s を %s ヶ月間投獄しました。',
gps_active = 'GPSが有効化されました',
gps_active_desc = 'プレイヤー %s がGPSを有効にしました',
gps_deactive = 'GPSが無効化されました',
gps_deactive_desc = 'プレイヤー %s がGPSを無効にしました',
no_wsb = '^0[^3警告^0] wasabi_bridge はフレームワークの後およびリソースの前に起動されませんでした:%s',
currency = '¥',
success = '成功',
go_back = '戻る',
cloakroom = '更衣室',
civilian_wear = '私服',
armoury_quantity_dialog = '注文数量',
quantity = '数量',
invalid_amount = '無効な金額',
invalid_amount_desc = '有効な金額を入力してください',
successful_purchase_desc = '武器庫からの武器の注文に成功しました',
lacking_funds = '資金不足',
lacking_funds_desc = 'この購入のための銀行口座の資金が不足しています',
no_permission = '許可がありません',
no_access_desc = 'これにアクセスする権限がありません!',
key_map_cuff = 'プレイヤーに手錠をかける',
key_map_tackle = '走っているときにプレイヤーをタックルする',
key_map_job = '仕事メニューを開く',
no_nearby = '周囲に誰もいません',
no_nearby_desc = '周囲に誰もいないようです',
invalid_entry = '無効な入力',
invalid_entry_desc = '有効な入力をしてください。',
fines = '罰金',
fines_desc = '近くのプレイヤーに罰金を科す',
search_player = '容疑者を検索',
search_player_desc = '近くの容疑者を検索',
jail_player = '容疑者を投獄',
jail_player_desc = '近くの容疑者を投獄',
minutes_dialog = '判決',
minutes_dialog_field = 'ヶ月',
escort_player = '容疑者を護送',
escort_player_desc = '近くの容疑者を護送',
handcuff_hard_player = '容疑者に手錠をかける(強く)',
handcuff_hard_player_desc = '近くの容疑者に手錠をかける(強く)',
handcuff_soft_player = '容疑者に手錠をかける(柔らかく)',
handcuff_soft_player_desc = '近くの容疑者に手錠をかける(柔らかく)',
put_in_vehicle = '車に乗せる',
put_in_vehicle_desc = '近くの容疑者を車に乗せる',
check_id = 'IDを確認する',
check_id_desc = '近くの容疑者のIDを確認する。',
id_result_menu = 'ID結果',
name = '名前',
job = '職業',
job_position = 'ポジション',
dob = '生年月日',
sex = '性別',
bac = '血中アルコール濃度',
licenses = 'ライセンス',
total_licenses = '合計ライセンス:',
no_licenses = 'ライセンスなし',
revoke_license = 'ライセンスを取り消す',
license_revoked = 'ライセンスが取り消されました',
license_revoked_desc = 'ライセンスの取り消しに成功しました',
armoury_menu = '武器庫メニュー',
take_out_vehicle = '車から降ろす',
take_out_vehicle_desc = '容疑者を車から降ろす',
not_restrained = 'ターゲットは拘束されていません',
not_restrained_desc = '犯罪者を護送する前に拘束する必要があります',
vehicle_not_found = '車両が見つかりません',
vehicle_not_found_desc = '近くに車両が見つかりませんでした',
unconcious = '人が意識を失っています',
unconcious_desc = '人が意識を失っているようです',
police_garage = 'ガレージ',
police = '警察',
plate = 'ナンバープレート番号',
owner = '所有者',
possibly_stolen = '注意!',
possibly_stolen_desc = '車両が盗まれている可能性があります',
vehicle_interactions = '車両の相互作用',
vehicle_interactions_desc = '近くの車両を検査',
vehicle_information = '車両情報',
vehicle_information_desc = '近くの車両に関する情報',
lockpick_vehicle = '車両をピッキング',
locakpick_vehicle_desc = '近くの車両に強制的にアクセスする',
lockpick_progress = '車両をピッキング中 . . .',
too_far = '遠すぎます',
too_far_desc = 'ターゲット車両が遠すぎます',
lockpicked = '正常に解除されました',
lockpicked_desc = 'ターゲット車両のロックを正常に解除しました',
cancelled = 'キャンセルされました',
cancelled_desc = '最後のアクションをキャンセルしました',
impound_vehicle = '車両を押収する',
impound_vehicle_desc = '近くの車両を押収する',
impounding_progress = '車両を押収中 . . .',
driver_in_car = '運転手が車内にいます',
driver_in_car_desc = '車両を押収する前に運転手を降ろしてください!',
car_impounded_desc = '車両が押収されました',
place_object = '物を置く',
place_object_desc = '物を地面に置く。',
prop_help_text = 'オブジェクトを移動するには ~INPUT_CONTEXT~ を押します。\nオブジェクトを削除するには ~INPUT_DETONATE~ を押します。',
prop_help_text2 = 'オブジェクトを配置するには ~INPUT_CONTEXT~ を押します。',
seize_cash_title = '現金を押収',
seize_cash = '現金が押収されました',
seize_cash_desc = '警察(%sがあなたの現金を押収しました',
seize_cash_label = '容疑者の現金を押収',
seize_cash_failed = '押収失敗',
seize_cash_failed_desc = '容疑者に現金がありません',
fine_sent = '罰金が送られました',
fine_sent_desc = '罰金として $%s を送ることに成功しました!',
fine_received = '罰金を受け取りました',
fine_received_desc = 'あなたは $%s の罰金を受け取りました',
fine_nomoney = '罰金失敗',
fine_nomoney_desc = '容疑者には罰金を支払うための十分なお金がありません(罰金額:$%s',
male = '男性',
female = '女性',
mr = 'さん',
mrs = 'さん',
debt_collection = '債務回収',
db_email =
'親愛なる%s %s、<br /><br />中央司法債権回収機関CJCAは、警察から受け取った罰金を回収しました。<br />お客様のアカウントから<strong>$%s</strong>が引き落とされました。<br /><br />よろしくお願いします。<br />ワサビさん',
spawn_blocked = 'ガレージがブロックされています',
spawn_blocked_desc = '車両がブロックされているため、車を出せません!',
positive = '陽性',
positive_gsr_desc = '容疑者は火薬残渣のテストで陽性でした!',
negative = '陰性',
negative_gsr_desc = '容疑者は火薬残渣のテストで陰性でした!',
gsr_test = '火薬残渣テスト',
gsr_test_desc = '近くの容疑者を火薬残渣のテスト',
hands_clean = '清潔',
hands_clean_desc = '手の火薬残渣を正常に洗い流しました!',
gsr_wash_ui = '[E] - 手を洗う',
on_duty = '勤務中',
on_duty_desc = '勤務を開始しました!',
off_duty = '勤務終了',
off_duty_desc = '勤務を終了しました!',
robbing_player = '被害者を強盗中...',
cancelled_action = 'アクションがキャンセルされました',
cancelled_action_desc = '最後のアクションがキャンセルされました!',
no_cuffs = '手錠がありません',
no_cuffs_desc = 'ポケットに手錠がありません!',
failed = '失敗',
lockpick_handcuff_success = '手錠をピッキングして成功しました!',
lockpick_handcuff_fail = '手錠のピッキングに失敗しました!',
lockpick_broke = 'ピッキングツールが曲がった',
lockpick_broke_desc = 'ピッキングツールが曲がりました!',
grant_license = '武器のライセンスを発行',
grant_license_desc = '近くの人物に武器のライセンスを発行',
player_id = 'プレイヤーID',
select_player = '人物を選択',
license_granted = 'ライセンス発行',
license_granted_desc = '%s%sに武器のライセンスを発行しました',
license_alr_granted = 'この人物にはすでにライセンスがあります!',
weapon_license = '武器のライセンス',
weapon_license_desc = 'あなたに武器のライセンスが発行されました。',
in_vehicle = '車内にいます',
in_vehicle_desc = '車内にいる容疑者を逮捕することはできません!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'ko' end
if Config.Language ~= 'ko' then return end
Strings = {
jail_countdown_header = '당신은 감옥에 있습니다',
jail_countdown_sentence = '%s 개월 남음',
jail_time_up = '복역 기간 종료',
jail_time_up_desc = '감옥에서의 기간을 모두 복역했습니다.',
no_society_account = '%s의 사회 계좌를 찾을 수 없습니다 - 설정을 확인하세요!',
officer = '경찰관',
not_authorized = '권한 없음',
not_authorized_desc = '이 기능을 사용할 권한이 없습니다!',
not_on_duty = '근무 중 아님',
not_on_duty_desc = '현재 근무 중이 아닙니다!',
gps_enabled = 'GPS 활성화됨',
gps_enabled_desc = 'GPS를 활성화했습니다',
gps_disabled = 'GPS 비활성화됨',
gps_disabled_desc = 'GPS를 비활성화했습니다',
new_speed_trap = '새 속도 함정',
speed_limit = '속도 제한',
detection_radius = '탐지 반경',
incorrect_input = '잘못된 입력',
incorrect_input_cancel = '이전 입력 취소됨.',
incorrect_input_speed = '유효한 속도 제한을 입력하세요.',
radar_post = '레이더 포스트',
ui_radar_post_place = 'E - 포스트 배치 \n R - 회전 \n BACK - 취소 \n UP/DOWN - 거리',
radar_post_placed = '레이더 포스트가 성공적으로 배치되었습니다.',
radar_post_failed = '레이더 포스트 배치 실패.',
speed_trap_rename = '%s 이름 변경',
speed_trap = '속도 함정',
new_name = '새 이름',
speed_trap_renamed = '%s를 %s로 성공적으로 이름을 변경했습니다.',
speed_trap_rename_failed = '레이더 포스트 이름 변경 실패!',
manage_trap_rename = '레이더 포스트 이름 변경',
manage_trap_rename_desc = '이 레이더 포스트의 이름을 수정',
manage_trap_delete = '레이더 포스트 제거',
manage_trap_delete_desc = '이 레이더 포스트 제거',
menu_trap_create = '레이더 포스트 생성',
menu_trap_create_desc = '현재 위치 근처에 레이더 포스트 생성',
menu_trap_manage = '레이더 포스트 관리',
menu_trap_manage_desc = '가장 가까운 레이더 포스트 관리.',
menu_select_trap = '레이더 포스트 선택',
menu_radar_posts = '레이더 포스트',
menu_radar_posts_desc = '레이더 포스트 배치/제거.',
warning_speedtrap_table = '^0[^1경고^0] 속도 함정 데이터베이스 테이블이 자동으로 생성되지 않았습니다!',
menu_cctv_cameras = 'CCTV 카메라',
menu_cctv_cameras_desc = 'CCTV 카메라 배포/제거',
menu_cctv_create = 'CCTV 카메라 만들기',
menu_cctv_create_desc = '현재 위치 근처에 CCTV 카메라 만들기',
menu_select_cctv = 'CCTV 카메라 선택',
menu_cctv_manage = 'CCTV 카메라 관리',
menu_cctv_manage_desc = '가장 가까운 CCTV 카메라 관리',
new_cctv = '새 CCTV 카메라',
manage_cctv_rename = 'CCTV 카메라 이름 변경',
manage_cctv_rename_desc = '이 CCTV 카메라 이름 편집',
cctv_renamed = '%s의 이름을 %s로 성공적으로 변경했습니다.',
cctv_rename_failed = 'CCTV 카메라 이름을 변경하지 못했습니다!',
manage_cctv_delete = 'CCTV 제거 카메라',
manage_cctv_delete_desc = '이 CCTV 카메라 제거',
manage_cctv_view = 'CCTV 카메라 보기',
manage_cctv_view_desc = '현재 CCTV 카메라 보기',
cctv = 'CCTV 카메라',
cctv_placed = 'CCTV 카메라가 성공적으로 배치되었습니다.',
cctv_failed = 'CCTV 카메라를 배치하는 데 실패했습니다.',
manage_cctv_repair = 'CCTV 카메라 수리',
manage_cctv_repair_desc = '이 CCTV 카메라 수리',
cctv_repaired = 'CCTV 카메라가 수리되었습니다.',
cctv_repair_failed = 'CCTV 카메라 수리에 실패했습니다.',
warning_cctv_table = '^0[^1WARNING^0] CCTV 데이터베이스 테이블이 자동으로 빌드되지 않았습니다!',
cctv_repairing = 'CCTV 카메라 수리. . .',
cctv_not_broken = 'CCTV 카메라가 고장나지 않았습니다',
cctv_destroyed = 'CCTV 카메라가 파괴되었습니다',
cctv_destroyed_desc = 'CCTV 카메라를 파괴했습니다',
cctv_not_closest = '가장 가까운 CCTV 카메라가 아닙니다',
cctv_remove_error = '오류',
cctv_remove_error_desc = "이 CCTV 카메라를 제거할 수 없습니다",
license_self = '자신',
grade_too_low = '등급이 너무 낮습니다',
grade_too_low_desc = '이 작업을 수행하기 위한 등급이 너무 낮습니다!',
invoice_amount = '청구 금액',
amount_invoice = '금액',
reason_invoice = '이유',
description_invoice = '설명',
description_invoice_desc = '벌금 메모',
tickets_invoice = '티켓',
tickets_invoice_desc = '벌금 선택',
gov_billing = '정부 채권 추심',
fine_id_invoice = '벌금 ID',
offenses_invoice = '위반 사항',
ticket_received = '%s로부터 벌금을 받았습니다',
speedtrap_fine = '속도 함정 벌금',
speedtrap_fine_desc = '카메라에 속도 제한을 %s%s 초과하여 %s%s 벌금을 부과 받았습니다!',
evidence_storage = '증거 보관소',
locker_number = '사물함 번호',
cuffed_last_online = '이전에 수갑을 찼습니다',
cuffed_last_online_desc = '마지막으로 도시에서 수갑을 찼습니다.',
player_in_vehicle = '용의자가 차량에 있습니다',
player_in_vehicle_desc = '이 작업을 수행하기 전에 용의자를 차량에서 내리세요!',
suspect_died_escort = '용의자가 사망했습니다',
suspect_died_escort_desc = '호송 중 용의자가 사망하여 놓쳤습니다.',
stop_escorting_interact = '[E] - 호송 중지',
cant_wield = '장비할 수 없습니다',
cant_wield_desc = '현재 이 항목을 사용할 수 없습니다!',
jailed_player = '용의자가 수감되었습니다',
jailed_player_desc = '%s를 %s개월 동안 수감했습니다.',
gps_active = 'GPS 활성화됨',
gps_active_desc = '플레이어 %s가 GPS를 활성화했습니다',
gps_deactive = 'GPS 비활성화됨',
gps_deactive_desc = '플레이어 %s가 GPS를 비활성화했습니다',
no_wsb = '^0[^3경고^0] wasabi_bridge는 프레임워크 이후 및 리소스 이전에 시작되지 않았습니다: %s',
currency = '₩',
success = '성공',
go_back = '돌아가기',
cloakroom = '탈의실',
civilian_wear = '민간복',
armoury_quantity_dialog = '주문 수량',
quantity = '수량',
invalid_amount = '잘못된 금액',
invalid_amount_desc = '유효한 금액을 입력하세요',
successful_purchase_desc = '무기고에서 무기를 성공적으로 주문했습니다',
lacking_funds = '자금 부족',
lacking_funds_desc = '이 구매를 위한 은행 자금이 부족합니다',
no_permission = '권한 없음',
no_access_desc = '이 항목에 접근할 권한이 없습니다!',
key_map_cuff = '플레이어 수갑 채우기',
key_map_tackle = '달리면서 플레이어 태클하기',
key_map_job = '작업 메뉴 열기',
no_nearby = '근처에 아무도 없습니다',
no_nearby_desc = '근처에 아무도 없는 것 같습니다',
invalid_entry = '잘못된 입력',
invalid_entry_desc = '유효한 입력을 입력하세요.',
fines = '벌금',
fines_desc = '근처의 플레이어에게 벌금 부과',
search_player = '용의자 수색',
search_player_desc = '근처의 용의자를 수색',
jail_player = '용의자 수감',
jail_player_desc = '근처의 용의자를 수감',
minutes_dialog = '형량',
minutes_dialog_field = '개월',
escort_player = '용의자 호송',
escort_player_desc = '근처의 용의자 호송',
handcuff_hard_player = '용의자에게 강하게 수갑 채우기',
handcuff_hard_player_desc = '근처의 용의자에게 강하게 수갑 채우기',
handcuff_soft_player = '용의자에게 부드럽게 수갑 채우기',
handcuff_soft_player_desc = '근처의 용의자에게 부드럽게 수갑 채우기',
put_in_vehicle = '차량에 태우기',
put_in_vehicle_desc = '근처의 용의자를 차량에 태우기',
check_id = '신분 확인',
check_id_desc = '근처의 용의자의 신분을 확인.',
id_result_menu = '신분 확인 결과',
name = '이름',
job = '직업',
job_position = '직책',
dob = '생년월일',
sex = '성별',
bac = '혈중 알코올 농도',
licenses = '면허증',
total_licenses = '총 면허증:',
no_licenses = '면허증 없음',
revoke_license = '면허증 취소',
license_revoked = '면허증 취소됨',
license_revoked_desc = '면허증을 성공적으로 취소했습니다',
armoury_menu = '무기고 메뉴',
take_out_vehicle = '차량에서 내리기',
take_out_vehicle_desc = '용의자를 차량에서 내리기',
not_restrained = '타겟이 구속되지 않았습니다',
not_restrained_desc = '범죄자를 호송하기 전에 구속해야 합니다',
vehicle_not_found = '차량을 찾을 수 없습니다',
vehicle_not_found_desc = '근처에 차량이 없습니다',
unconcious = '사람이 의식을 잃었습니다',
unconcious_desc = '사람이 의식을 잃은 것 같습니다',
police_garage = '차고',
police = '경찰',
plate = '차량 번호판',
owner = '소유자',
possibly_stolen = '주의!',
possibly_stolen_desc = '차량이 도난당했을 가능성이 있습니다',
vehicle_interactions = '차량 상호작용',
vehicle_interactions_desc = '근처의 차량을 검사',
vehicle_information = '차량 정보',
vehicle_information_desc = '근처 차량에 대한 정보',
lockpick_vehicle = '차량 잠금 해제',
locakpick_vehicle_desc = '근처 차량에 강제로 접근',
lockpick_progress = '차량 잠금 해제 중 . . .',
too_far = '너무 멀리 있음',
too_far_desc = '대상 차량이 너무 멀리 있습니다',
lockpicked = '성공적으로 잠금 해제됨',
lockpicked_desc = '대상 차량을 성공적으로 잠금 해제했습니다',
cancelled = '취소됨',
cancelled_desc = '마지막 작업이 취소되었습니다',
impound_vehicle = '차량 압수',
impound_vehicle_desc = '근처 차량 압수',
impounding_progress = '차량 압수 중 . . .',
driver_in_car = '운전자가 차량에 있습니다',
driver_in_car_desc = '차량을 압수하기 전에 운전자를 내리세요!',
car_impounded_desc = '차량이 압수되었습니다',
place_object = '객체 배치',
place_object_desc = '객체를 바닥에 놓기.',
prop_help_text = '객체를 이동하려면 ~INPUT_CONTEXT~ 를 누르세요.\n객체를 삭제하려면 ~INPUT_DETONATE~ 를 누르세요.',
prop_help_text2 = '객체를 배치하려면 ~INPUT_CONTEXT~ 를 누르세요.',
seize_cash_title = '현금 압수',
seize_cash = '현금 압수됨',
seize_cash_desc = '경찰(%s)이 당신의 현금을 압수했습니다',
seize_cash_label = '용의자의 현금 압수',
seize_cash_failed = '압수 실패',
seize_cash_failed_desc = '용의자에게 현금이 없습니다',
fine_sent = '벌금이 부과되었습니다',
fine_sent_desc = '벌금으로 $%s 를 성공적으로 부과했습니다!',
fine_received = '벌금을 받았습니다',
fine_received_desc = '$%s 의 벌금을 받았습니다',
fine_nomoney = '벌금 부과 실패',
fine_nomoney_desc = '용의자에게 벌금을 지불할 충분한 돈이 없습니다 (벌금액: $%s)',
male = '남성',
female = '여성',
mr = '님',
mrs = '님',
debt_collection = '채권 추심',
db_email =
'친애하는 %s %s 님,<br /><br />중앙 사법 채권 추심 기관(CJCA)이 당신이 경찰로부터 받은 벌금을 징수했습니다.<br />계좌에서 <strong>$%s</strong>가 인출되었습니다.<br /><br />감사합니다,<br />와사비님',
spawn_blocked = '차고가 차단되었습니다',
spawn_blocked_desc = '차량이 차단되어 있어 차량을 꺼낼 수 없습니다!',
positive = '양성',
positive_gsr_desc = '용의자가 총기 잔여물 검사에서 양성 반응을 보였습니다!',
negative = '음성',
negative_gsr_desc = '용의자가 총기 잔여물 검사에서 음성 반응을 보였습니다!',
gsr_test = '총기 잔여물 검사',
gsr_test_desc = '근처 용의자의 총기 잔여물 검사',
hands_clean = '손 깨끗함',
hands_clean_desc = '손의 총기 잔여물을 성공적으로 씻었습니다!',
gsr_wash_ui = '[E] - 손 씻기',
on_duty = '근무 중',
on_duty_desc = '지금 근무 중입니다!',
off_duty = '비번',
off_duty_desc = '지금 비번입니다!',
robbing_player = '피해자를 강도 중...',
cancelled_action = '작업이 취소되었습니다',
cancelled_action_desc = '마지막 작업이 취소되었습니다!',
no_cuffs = '수갑이 없습니다',
no_cuffs_desc = '주머니에 수갑이 없습니다!',
failed = '실패',
lockpick_handcuff_success = '수갑을 성공적으로 풀었습니다!',
lockpick_handcuff_fail = '수갑을 푸는 데 실패했습니다!',
lockpick_broke = '잠금 해제 도구가 휘었습니다',
lockpick_broke_desc = '잠금 해제 도구가 휘었습니다!',
grant_license = '무기 면허 발급',
grant_license_desc = '근처 사람에게 무기 면허 발급',
player_id = '플레이어 ID:',
select_player = '사람 선택',
license_granted = '면허 발급됨',
license_granted_desc = '%s (%s)에게 무기 면허를 발급했습니다',
license_alr_granted = '이 사람은 이미 면허가 있습니다!',
weapon_license = '무기 면허',
weapon_license_desc = '당신에게 무기 면허가 발급되었습니다.',
in_vehicle = '차량에 있음',
in_vehicle_desc = '차량에 있는 용의자를 체포할 수 없습니다!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'nl' end
if Config.Language ~= 'nl' then return end
Strings = {
jail_countdown_header = 'JE BENT IN DE GEVANGENIS',
jail_countdown_sentence = '%s maanden resterend',
jail_time_up = 'Gevangenistijd voorbij',
jail_time_up_desc = 'Je hebt je tijd in de gevangenis uitgezeten.',
no_society_account = 'Geen maatschappijaccount gevonden voor %s - controleer je configuratie!',
officer = 'Officier',
not_authorized = 'Niet Geautoriseerd',
not_authorized_desc = 'Je bent niet gemachtigd om dit te gebruiken!',
not_on_duty = 'Niet op Dienst',
not_on_duty_desc = 'Je bent niet op dienst!',
gps_enabled = 'GPS Ingeschakeld',
gps_enabled_desc = 'Je hebt je GPS ingeschakeld',
gps_disabled = 'GPS Uitgeschakeld',
gps_disabled_desc = 'Je hebt je GPS uitgeschakeld',
new_speed_trap = 'Nieuwe Snelheidscontrole',
speed_limit = 'Snelheidslimiet',
detection_radius = 'Detectiestraal',
incorrect_input = 'Onjuiste invoer',
incorrect_input_cancel = 'Vorige invoer geannuleerd.',
incorrect_input_speed = 'Voer een geldige snelheidslimiet in.',
radar_post = 'Radarpunt',
ui_radar_post_place = 'E - Plaats post \n R - Draaien \n BACK - Annuleren \n UP/DOWN - Afstand',
radar_post_placed = 'Radarpunt succesvol geplaatst.',
radar_post_failed = 'Kan radarpunt niet plaatsen.',
speed_trap_rename = 'Hernoem %s',
speed_trap = 'Snelheidscontrole',
new_name = 'Nieuwe naam',
speed_trap_renamed = 'Je hebt %s succesvol hernoemd naar %s.',
speed_trap_rename_failed = 'Hernoemen van radarpunt mislukt!',
manage_trap_rename = 'Hernoem Radarpunt',
manage_trap_rename_desc = 'Bewerk de naam van dit radarpunt',
manage_trap_delete = 'Verwijder Radarpunt',
manage_trap_delete_desc = 'Verwijder dit radarpunt',
menu_trap_create = 'Maak Radarpunt',
menu_trap_create_desc = 'Maak een radarpunt in de buurt van je huidige locatie',
menu_trap_manage = 'Beheer Radarpunt',
menu_trap_manage_desc = 'Beheer het dichtstbijzijnde radarpunt.',
menu_select_trap = 'Selecteer Radarpunt',
menu_radar_posts = 'Radarpunten',
menu_radar_posts_desc = 'Radarpunten inzetten/verwijderen.',
warning_speedtrap_table = '^0[^1WAARSCHUWING^0] Snelheidscontrole databasetabel werd niet automatisch aangemaakt!',
menu_cctv_cameras = "CCTV-camera's",
menu_cctv_cameras_desc = "CCTV-camera's implementeren/verwijderen",
menu_cctv_create = 'CCTV-camera maken',
menu_cctv_create_desc = 'Een CCTV-camera maken in de buurt van uw huidige locatie',
menu_select_cctv = 'CCTV-camera selecteren',
menu_cctv_manage = 'CCTV-camera beheren',
menu_cctv_manage_desc = 'De dichtstbijzijnde CCTV-camera beheren',
new_cctv = 'Nieuwe CCTV-camera',
manage_cctv_rename = 'CCTV-camera hernoemen',
manage_cctv_rename_desc = 'De naam van deze CCTV-camera bewerken',
cctv_renamed = 'U hebt %s succesvol hernoemd naar %s.',
cctv_rename_failed = 'U bent er niet in geslaagd de naam van de CCTV-camera te wijzigen!',
manage_cctv_delete = 'Verwijderen CCTV-camera',
manage_cctv_delete_desc = 'Deze CCTV-camera verwijderen',
manage_cctv_view = 'Bekijk CCTV-camera',
manage_cctv_view_desc = 'Bekijk de huidige CCTV-camera',
cctv = 'CCTV-camera',
cctv_placed = 'CCTV-camera is succesvol geplaatst.',
cctv_failed = 'CCTV-camera plaatsen mislukt.',
manage_cctv_repair = 'CCTV-camera repareren',
manage_cctv_repair_desc = 'Deze CCTV-camera repareren',
cctv_repaired = 'CCTV-camera is gerepareerd.',
cctv_repair_failed = 'CCTV-camera repareren mislukt.',
warning_cctv_table = '^0[^1WARNING^0] CCTV-databasetabel is niet automatisch opgebouwd!',
cctv_repairing = 'CCTV-camera repareren. . .',
cctv_not_broken = 'CCTV-camera niet kapot',
cctv_destroyed = 'CCTV-camera kapot',
cctv_destroyed_desc = 'U hebt de CCTV-camera kapotgemaakt',
cctv_not_closest = 'Niet de dichtstbijzijnde CCTV-camera',
cctv_remove_error = 'Fout',
cctv_remove_error_desc = 'U kunt deze CCTV-camera niet verwijderen',
menu_tracking_bracelet = 'Bekijk Volgarmbanden',
menu_tracking_bracelet_desc = 'Bekijk alle volgarmbanden in de stad',
tracking_bracelet = 'Volgarmband',
tracking_bracelet_desc = 'Voeg een volgarmband toe of verwijder deze bij een nabije verdachte',
no_bracelets = 'Geen Armbanden',
no_bracelets_desc = 'Er zijn geen volgarmbanden in de stad.',
optn_tracking_bracelet_title = 'Verdachte: %s',
optn_tracking_bracelet_desc = 'Volgarmband toegevoegd door: %s',
tracking_bracelet_toggle_failed = 'Kon volgarmband niet schakelen!',
tracking_bracelet_toggle = 'Volgarmband geschakeld',
tracking_bracelet_toggled_desc = 'Je hebt de volgarmband voor %s geschakeld',
tracking_bracelet_toggle_failed_desc = 'Je bent niet in staat de volgarmband voor %s te schakelen',
got_tracking_bracelet = 'Volgarmband toegevoegd',
got_tracking_bracelet_desc = 'Je hebt een volgarmband gekregen',
start_tracking = 'Volgarmband toevoegen',
stop_tracking = 'Volgarmband verwijderen',
removed_tracking_bracelet = 'Volgarmband verwijderd',
removed_tracking_bracelet_desc = 'De volgarmband is verwijderd',
no_tracking_bracelet = 'Geen volgarmband',
no_tracking_bracelet_desc = 'Je hebt geen volgarmband',
license_self = 'Zelf',
grade_too_low = 'Te lage rang',
grade_too_low_desc = 'Je rang is te laag voor deze actie!',
invoice_amount = 'Factuurbedrag',
amount_invoice = 'Bedrag',
reason_invoice = 'Reden',
description_invoice = 'Beschrijving',
description_invoice_desc = 'Notities voor boete',
tickets_invoice = 'Boetes',
tickets_invoice_desc = 'Selecteer Boetes',
gov_billing = 'Overheidsincasso',
fine_id_invoice = 'Boete ID',
offenses_invoice = 'Overtredingen',
ticket_received = 'Je hebt een boete ontvangen van %s',
speedtrap_fine = 'Snelheidscontrole boete',
speedtrap_fine_desc = 'Je hebt een boete van %s%s gekregen voor het overschrijden van de limiet met %s%s op camera!',
evidence_storage = 'Bewijsopslag',
locker_number = 'Lockernummer',
cuffed_last_online = 'Eerder Geboeid',
cuffed_last_online_desc = 'Je was geboeid toen je de laatste keer in de stad was.',
player_in_vehicle = 'Verdachte in Voertuig',
player_in_vehicle_desc = 'Verwijder de verdachte uit het voertuig voordat je dit doet!',
suspect_died_escort = 'Verdachte Gestorven',
suspect_died_escort_desc = 'De verdachte stierf tijdens het escorteren en je liet hem vallen.',
stop_escorting_interact = '[E] - Stop met Escorteren',
cant_wield = 'Kan niet uitrusten',
cant_wield_desc = 'Je kunt dit momenteel niet gebruiken!',
jailed_player = 'Verdachte Gevangen',
jailed_player_desc = 'Je hebt %s voor %s maanden gevangen gezet.',
gps_active = 'GPS Geactiveerd',
gps_active_desc = 'Speler %s heeft zijn GPS geactiveerd',
gps_deactive = 'GPS Gedeactiveerd',
gps_deactive_desc = 'Speler %s heeft zijn GPS gedeactiveerd',
no_wsb = '^0[^3WAARSCHUWING^0] wasabi_bridge werd NIET gestart NA het framework en/of VOOR de resource: %s',
currency = '€',
success = 'Succes',
go_back = 'Ga Terug',
cloakroom = 'Kleedkamer',
civilian_wear = 'Burgerkleding',
armoury_quantity_dialog = 'Hoeveelheid te Bestellen',
quantity = 'Hoeveelheid',
invalid_amount = 'Ongeldig Bedrag',
invalid_amount_desc = 'Voer een geldig bedrag in',
successful_purchase_desc = 'Je hebt je wapens succesvol besteld bij de wapenkamer',
lacking_funds = 'Onvoldoende Fondsen',
lacking_funds_desc = 'Je hebt niet genoeg geld op je bankrekening voor deze aankoop',
no_permission = 'Geen Toestemming',
no_access_desc = 'Je hebt geen toestemming om dit te openen!',
key_map_cuff = 'Geboeide Speler',
key_map_tackle = 'Tackle speler tijdens het rennen',
key_map_job = 'Open Job Menu',
no_nearby = 'Niemand Gevonden',
no_nearby_desc = 'Het lijkt erop dat er niemand in de buurt is',
invalid_entry = 'Ongeldige Invoer',
invalid_entry_desc = 'Voer een geldige invoer in.',
fines = 'Boetes',
fines_desc = 'Geef een boete aan een nabijgelegen speler',
search_player = 'Doorzoek Verdachte',
search_player_desc = 'Doorzoek een nabijgelegen verdachte',
jail_player = 'Gevangen Verdachte',
jail_player_desc = 'Gevangen een nabijgelegen verdachte',
minutes_dialog = 'Veroordeling',
minutes_dialog_field = 'Maanden',
escort_player = 'Escort Verdachte',
escort_player_desc = 'Escort een nabijgelegen verdachte',
handcuff_hard_player = 'Hard Geboeide Verdachte',
handcuff_hard_player_desc = 'Hard geboeide een nabijgelegen verdachte',
handcuff_soft_player = 'Zacht Geboeide Verdachte',
handcuff_soft_player_desc = 'Zacht geboeide een nabijgelegen verdachte',
put_in_vehicle = 'In Voertuig Plaatsen',
put_in_vehicle_desc = 'Plaats nabijgelegen verdachte in voertuig',
check_id = 'Controleer Identiteit',
check_id_desc = 'Controleer de identiteit van een nabijgelegen verdachte.',
id_result_menu = 'Identiteitsresultaten',
name = 'Naam',
job = 'Baan',
job_position = 'Positie',
dob = 'Geboortedatum',
sex = 'Geslacht',
bac = 'BAC',
licenses = 'Licenties',
total_licenses = 'Totaal Licenties:',
no_licenses = 'Geen Licenties',
revoke_license = 'Licentie Intrekken',
license_revoked = 'Licentie Ingetrokken',
license_revoked_desc = 'Je hebt de licentie succesvol ingetrokken',
armoury_menu = 'Wapenkamer Menu',
take_out_vehicle = 'Uit Voertuig Verwijderen',
take_out_vehicle_desc = 'Verwijder verdachte uit voertuig',
not_restrained = 'Doel Niet Geboeid',
not_restrained_desc = 'Je moet de crimineel boeien voordat je hem kunt escorteren',
vehicle_not_found = 'Geen Voertuig Gevonden',
vehicle_not_found_desc = 'Er is geen voertuig in de buurt gevonden',
unconcious = 'Bewusteloos Persoon',
unconcious_desc = 'De persoon lijkt bewusteloos te zijn',
police_garage = 'Garage',
police = 'Politie',
plate = 'Kenteken',
owner = 'Eigenaar',
possibly_stolen = 'Waarschuwing!',
possibly_stolen_desc = 'Voertuig Mogelijk Gestolen',
vehicle_interactions = 'Voertuiginteracties',
vehicle_interactions_desc = 'Inspecteer nabijgelegen voertuig',
vehicle_information = 'Voertuiginformatie',
vehicle_information_desc = 'Informatie over nabijgelegen voertuig',
lockpick_vehicle = 'Voertuig Openbreken',
locakpick_vehicle_desc = 'Forceer toegang tot nabijgelegen voertuig',
lockpick_progress = 'Voertuig Openbreken . . .',
too_far = 'Te Ver Weg',
too_far_desc = 'Het doelvoertuig is te ver weg',
lockpicked = 'Succesvol Ontgrendeld',
lockpicked_desc = 'Je hebt het doelvoertuig succesvol ontgrendeld',
cancelled = 'Geannuleerd',
cancelled_desc = 'Je hebt je laatste actie geannuleerd',
impound_vehicle = 'Voertuig Inbeslagname',
impound_vehicle_desc = 'Inbeslagname nabijgelegen voertuig',
impounding_progress = 'Voertuig Inbeslagname . . .',
driver_in_car = 'Bestuurder in het Voertuig',
driver_in_car_desc = 'Verwijder de bestuurder uit het voertuig voordat je het inbeslagneemt!',
car_impounded_desc = 'Voertuig is in beslag genomen',
place_object = 'Plaats Objecten',
place_object_desc = 'Plaats objecten op de grond.',
prop_help_text =
'Druk op ~INPUT_CONTEXT~ om het object te verplaatsen.\nDruk op ~INPUT_DETONATE~ om het object te verwijderen.',
prop_help_text2 = 'Druk op ~INPUT_CONTEXT~ om het object te plaatsen.',
seize_cash_title = 'Inbeslagname Contant Geld',
seize_cash = 'Contant Geld Inbeslaggenomen',
seize_cash_desc = 'De politie(%s) heeft je contant geld in beslag genomen',
seize_cash_label = 'Contant geld van verdachte in beslag genomen',
seize_cash_failed = 'Inbeslagname Mislukt',
seize_cash_failed_desc = 'Verdachte heeft geen contant geld',
fine_sent = 'Boetes Verzonden',
fine_sent_desc = 'Je hebt succesvol een boete van $%s verzonden!',
fine_received = 'Boete Ontvangen',
fine_received_desc = 'Je hebt een boete van $%s ontvangen',
fine_nomoney = 'Boete Mislukt',
fine_nomoney_desc = 'Verdachte heeft niet genoeg geld om de boete te betalen (Boetebedrag: $%s)',
male = 'Man',
female = 'Vrouw',
mr = 'Dhr.',
mrs = 'Mevr.',
debt_collection = 'Schuldbeslag',
db_email =
'Beste %s %s,<br /><br />Het Centraal Justitieel Incassobureau (CJCA) heeft de boetes die je van de politie hebt ontvangen geïncasseerd.<br />Een bedrag van <strong>$%s</strong> is van je rekening afgeschreven.<br /><br />Met vriendelijke groet,<br />Dhr. Wasabi',
spawn_blocked = 'Garage Geblokkeerd',
spawn_blocked_desc = 'Je kunt je voertuig niet uit de garage halen omdat het geblokkeerd is!',
positive = 'Positief',
positive_gsr_desc = 'De verdachte testte POSITIEF op kruitresten!',
negative = 'Negatief',
negative_gsr_desc = 'De verdachte testte NEGATIEF op kruitresten!',
gsr_test = 'Kruitresten Test',
gsr_test_desc = 'Test een nabijgelegen verdachte op kruitresten',
hands_clean = 'Schoongemaakt',
hands_clean_desc = 'Je hebt je handen succesvol schoongeboend van kruitresten!',
gsr_wash_ui = '[E] - Handen Wassen',
on_duty = 'In Dienst',
on_duty_desc = 'Je bent nu in dienst!',
off_duty = 'Vrij',
off_duty_desc = 'Je bent nu vrij!',
robbing_player = 'Slachtoffer Beroven...',
cancelled_action = 'Actie Geannuleerd',
cancelled_action_desc = 'Je laatste actie is geannuleerd!',
no_cuffs = 'Geen Handboeien',
no_cuffs_desc = 'Je hebt geen handboeien in je zakken!',
failed = 'Mislukt',
lockpick_handcuff_success = 'Je hebt succesvol de handboeien geopend!',
lockpick_handcuff_fail = 'Handboeien openen mislukt!',
lockpick_broke = 'Lockpick Gebroken',
lockpick_broke_desc = 'Je lockpick is gebroken!',
grant_license = 'Wapenvergunning Uitgeven',
grant_license_desc = 'Geef een wapenvergunning aan een nabijgelegen persoon',
player_id = 'Speler ID:',
select_player = 'Selecteer Persoon',
license_granted = 'Vergunning Verleend',
license_granted_desc = 'Je hebt een wapenvergunning verleend aan %s (%s)',
license_alr_granted = 'Deze persoon heeft al een vergunning!',
weapon_license = 'Wapenvergunning',
weapon_license_desc = 'Je hebt zojuist een wapenvergunning ontvangen.',
in_vehicle = 'In Voertuig',
in_vehicle_desc = 'Je kunt de verdachte niet arresteren terwijl hij in het voertuig zit!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'pl' end
if Config.Language ~= 'pl' then return end
Strings = {
jail_countdown_header = 'JESTEŚ W WIĘZIENIU',
jail_countdown_sentence = 'Pozostało %s miesięcy',
jail_time_up = 'Kara więzienia zakończona',
jail_time_up_desc = 'Odsiedziałeś swój czas w więzieniu.',
no_society_account = 'Nie znaleziono konta społeczeństwa dla %s - sprawdź swoją konfigurację!',
officer = 'Oficer',
not_authorized = 'Nieautoryzowany',
not_authorized_desc = 'Nie masz uprawnień do korzystania z tego!',
not_on_duty = 'Nie na służbie',
not_on_duty_desc = 'Nie jesteś na służbie!',
gps_enabled = 'GPS Włączony',
gps_enabled_desc = 'Włączyłeś GPS',
gps_disabled = 'GPS Wyłączony',
gps_disabled_desc = 'Wyłączyłeś GPS',
new_speed_trap = 'Nowa pułapka prędkości',
speed_limit = 'Ograniczenie prędkości',
detection_radius = 'Promień detekcji',
incorrect_input = 'Niepoprawne dane wejściowe',
incorrect_input_cancel = 'Anulowano poprzednie dane wejściowe.',
incorrect_input_speed = 'Proszę wprowadzić poprawne ograniczenie prędkości.',
radar_post = 'Radar',
ui_radar_post_place = 'E - Umieść post \n R - Obróć \n BACK - Anuluj \n UP/DOWN - Odległość',
radar_post_placed = 'Radar został pomyślnie umieszczony.',
radar_post_failed = 'Nie udało się umieścić radaru.',
speed_trap_rename = 'Zmień nazwę %s',
speed_trap = 'Pułapka prędkości',
new_name = 'Nowa nazwa',
speed_trap_renamed = 'Pomyślnie zmieniłeś nazwę %s na %s.',
speed_trap_rename_failed = 'Nie udało się zmienić nazwy radaru!',
manage_trap_rename = 'Zmień nazwę radaru',
manage_trap_rename_desc = 'Edytuj nazwę tego radaru',
manage_trap_delete = 'Usuń radar',
manage_trap_delete_desc = 'Usuń ten radar',
menu_trap_create = 'Utwórz radar',
menu_trap_create_desc = 'Utwórz radar w pobliżu swojej bieżącej lokalizacji',
menu_trap_manage = 'Zarządzaj radarem',
menu_trap_manage_desc = 'Zarządzaj najbliższym radarem.',
menu_select_trap = 'Wybierz radar',
menu_radar_posts = 'Posty radarowe',
menu_radar_posts_desc = 'Rozmieść/Usuń posty radarowe.',
warning_speedtrap_table =
'^0[^1OSTRZEŻENIE^0] Tabela bazy danych pułapek prędkości nie została automatycznie utworzona!',
menu_cctv_cameras = 'Kamery CCTV',
menu_cctv_cameras_desc = 'Wdrażanie/usuwanie kamer CCTV',
menu_cctv_create = 'Utwórz kamerę CCTV',
menu_cctv_create_desc = 'Utwórz kamerę CCTV w pobliżu swojej bieżącej lokalizacji',
menu_select_cctv = 'Wybierz kamerę CCTV',
menu_cctv_manage = 'Zarządzaj kamerą CCTV',
menu_cctv_manage_desc = 'Zarządzaj najbliższą kamerą CCTV',
new_cctv = 'Nowa kamera CCTV',
manage_cctv_rename = 'Zmień nazwę kamery CCTV',
manage_cctv_rename_desc = 'Edytuj nazwę tej kamery CCTV',
cctv_renamed = 'Pomyślnie zmieniłeś nazwę %s na %s.',
cctv_rename_failed = 'Nie udało się zmienić nazwy kamery CCTV!',
manage_cctv_delete = 'Usuń kamerę CCTV',
manage_cctv_delete_desc = 'Usuń tę kamerę CCTV',
manage_cctv_view = 'Wyświetl kamerę CCTV',
manage_cctv_view_desc = 'Wyświetl bieżącą kamerę CCTV',
cctv = 'Kamera CCTV',
cctv_placed = 'Kamera CCTV została pomyślnie umieszczona.',
cctv_failed = 'Nie udało się umieścić kamery CCTV.',
manage_cctv_repair = 'Napraw kamerę CCTV',
manage_cctv_repair_desc = 'Napraw tę kamerę CCTV',
cctv_repaired = 'Kamera CCTV została naprawiona.',
cctv_repair_failed = 'Nie udało się naprawić kamery CCTV.',
warning_cctv_table = '^0[^1WARNING^0] Tabela bazy danych CCTV nie została automatycznie utworzona!',
cctv_repairing = 'Naprawianie kamery CCTV. . .',
cctv_not_broken = 'Kamera CCTV nie jest uszkodzona',
cctv_destroyed = 'Kamera CCTV została zniszczona',
cctv_destroyed_desc = 'Zniszczyłeś kamerę CCTV',
cctv_not_closest = 'Nie jest to najbliższa kamera CCTV',
cctv_remove_error = 'Błąd',
cctv_remove_error_desc = "Nie możesz usunąć tej kamery CCTV",
menu_tracking_bracelet = 'Pokaż Bransoletki Śledzenia',
menu_tracking_bracelet_desc = 'Pokaż wszystkie bransoletki śledzenia w mieście',
tracking_bracelet = 'Bransoletka Śledzenia',
tracking_bracelet_desc = 'Dodaj lub usuń bransoletkę śledzenia z pobliskiego podejrzanego',
no_bracelets = 'Brak Bransoletek',
no_bracelets_desc = 'W mieście nie ma bransoletek śledzenia.',
optn_tracking_bracelet_title = 'Podejrzany: %s',
optn_tracking_bracelet_desc = 'Bransoletka śledzenia dodana przez: %s',
tracking_bracelet_toggle_failed = 'Nie udało się przełączyć bransoletki śledzenia!',
tracking_bracelet_toggle = 'Bransoletka śledzenia przełączona',
tracking_bracelet_toggled_desc = 'Przełączyłeś bransoletkę śledzenia dla %s',
tracking_bracelet_toggle_failed_desc = 'Nie udało się przełączyć bransoletki śledzenia dla %s',
got_tracking_bracelet = 'Bransoletka śledzenia dodana',
got_tracking_bracelet_desc = 'Otrzymałeś bransoletkę śledzenia',
start_tracking = 'Dodawanie bransoletki śledzenia',
stop_tracking = 'Usuwanie bransoletki śledzenia',
removed_tracking_bracelet = 'Bransoletka śledzenia usunięta',
removed_tracking_bracelet_desc = 'Bransoletka śledzenia została usunięta',
no_tracking_bracelet = 'Brak bransoletki śledzenia',
no_tracking_bracelet_desc = 'Nie masz bransoletki śledzenia',
license_self = 'Siebie',
grade_too_low = 'Zbyt niski stopień',
grade_too_low_desc = 'Twój stopień jest zbyt niski, aby wykonać tę czynność!',
invoice_amount = 'Kwota faktury',
amount_invoice = 'Kwota',
reason_invoice = 'Powód',
description_invoice = 'Opis',
description_invoice_desc = 'Notatki do mandatu',
tickets_invoice = 'Mandaty',
tickets_invoice_desc = 'Wybierz mandaty',
gov_billing = 'Rządowe ściąganie długów',
fine_id_invoice = 'ID mandatu',
offenses_invoice = 'Wykroczenia',
ticket_received = 'Otrzymałeś mandat od %s',
speedtrap_fine = 'Mandat za przekroczenie prędkości',
speedtrap_fine_desc = 'Zostałeś ukarany grzywną w wysokości %s%s za przekroczenie prędkości o %s%s na kamerze!',
evidence_storage = 'Magazyn dowodów',
locker_number = 'Numer szafki',
cuffed_last_online = 'Poprzednio skuty kajdankami',
cuffed_last_online_desc = 'Byłeś skuty kajdankami podczas ostatniego pobytu w mieście.',
player_in_vehicle = 'Podejrzany w pojeździe',
player_in_vehicle_desc = 'Przed wykonaniem tej czynności usuń podejrzanego z pojazdu!',
suspect_died_escort = 'Podejrzany zmarł',
suspect_died_escort_desc = 'Podejrzany zmarł podczas eskortowania i upuściłeś go.',
stop_escorting_interact = '[E] - Zatrzymaj eskortę',
cant_wield = 'Nie można wyposażyć',
cant_wield_desc = 'Nie możesz tego teraz użyć!',
jailed_player = 'Podejrzany uwięziony',
jailed_player_desc = 'Uwięziłeś %s na %s miesięcy.',
gps_active = 'GPS aktywowany',
gps_active_desc = 'Gracz %s aktywował swój GPS',
gps_deactive = 'GPS dezaktywowany',
gps_deactive_desc = 'Gracz %s dezaktywował swój GPS',
no_wsb = '^0[^3OSTRZEŻENIE^0] wasabi_bridge NIE został uruchomiony PO frameworku i/lub PRZED zasobem: %s',
currency = 'zł',
success = 'Sukces',
go_back = 'Wróć',
cloakroom = 'Szatnia',
civilian_wear = 'Strój cywilny',
armoury_quantity_dialog = 'Ilość do zamówienia',
quantity = 'Ilość',
invalid_amount = 'Nieprawidłowa kwota',
invalid_amount_desc = 'Proszę wprowadzić prawidłową kwotę',
successful_purchase_desc = 'Pomyślnie zamówiłeś broń z zbrojowni',
lacking_funds = 'Brak środków',
lacking_funds_desc = 'Brakuje ci środków na koncie bankowym na ten zakup',
no_permission = 'Brak uprawnień',
no_access_desc = 'Nie masz uprawnień do dostępu do tego!',
key_map_cuff = 'Skuj gracza kajdankami',
key_map_tackle = 'Powal gracza podczas sprintu',
key_map_job = 'Otwórz menu pracy',
no_nearby = 'Nikogo nie znaleziono',
no_nearby_desc = 'W pobliżu nikogo nie ma',
invalid_entry = 'Nieprawidłowe dane',
invalid_entry_desc = 'Proszę wprowadzić prawidłowe dane.',
fines = 'Mandaty',
fines_desc = 'Nałóż mandat na pobliskiego gracza',
search_player = 'Przeszukaj podejrzanego',
search_player_desc = 'Przeszukaj pobliskiego podejrzanego',
jail_player = 'Uwięź podejrzanego',
jail_player_desc = 'Uwięź pobliskiego podejrzanego',
minutes_dialog = 'Wymiar kary',
minutes_dialog_field = 'Miesięcy',
escort_player = 'Eskortuj podejrzanego',
escort_player_desc = 'Eskortuj pobliskiego podejrzanego',
handcuff_hard_player = 'Skuj podejrzanego (mocno)',
handcuff_hard_player_desc = 'Skuj pobliskiego podejrzanego (mocno)',
handcuff_soft_player = 'Skuj podejrzanego (łagodnie)',
handcuff_soft_player_desc = 'Skuj pobliskiego podejrzanego (łagodnie)',
put_in_vehicle = 'Wsadź do pojazdu',
put_in_vehicle_desc = 'Wsadź pobliskiego podejrzanego do pojazdu',
check_id = 'Sprawdź tożsamość',
check_id_desc = 'Sprawdź ID pobliskiego podejrzanego.',
id_result_menu = 'Wyniki identyfikacji',
name = 'Imię',
job = 'Praca',
job_position = 'Stanowisko',
dob = 'Data urodzenia',
sex = 'Płeć',
bac = 'BAC',
licenses = 'Licencje',
total_licenses = 'Całkowita liczba licencji:',
no_licenses = 'Brak licencji',
revoke_license = 'Cofnij licencję',
license_revoked = 'Licencja cofnięta',
license_revoked_desc = 'Pomyślnie cofnąłeś licencję',
armoury_menu = 'Menu zbrojowni',
take_out_vehicle = 'Wyciągnij z pojazdu',
take_out_vehicle_desc = 'Wyciągnij podejrzanego z pojazdu',
not_restrained = 'Cel nie jest skrępowany',
not_restrained_desc = 'Musisz skrępować przestępcę przed eskortowaniem go',
vehicle_not_found = 'Nie znaleziono pojazdu',
vehicle_not_found_desc = 'W pobliżu nie znaleziono pojazdu',
unconcious = 'Osoba nieprzytomna',
unconcious_desc = 'Osoba wydaje się być nieprzytomna',
police_garage = 'Garaż',
police = 'Policja',
plate = 'Numer rejestracyjny',
owner = 'Właściciel',
possibly_stolen = 'Ostrzeżenie!',
possibly_stolen_desc = 'Pojazd może być skradziony',
vehicle_interactions = 'Interakcje z pojazdem',
vehicle_interactions_desc = 'Sprawdź pobliski pojazd',
vehicle_information = 'Informacje o pojeździe',
vehicle_information_desc = 'Informacje o pobliskim pojeździe',
lockpick_vehicle = 'Wytrych pojazdu',
locakpick_vehicle_desc = 'Wymuś dostęp do pobliskiego pojazdu',
lockpick_progress = 'Wytrychowanie pojazdu . . .',
too_far = 'Za daleko',
too_far_desc = 'Pojazd docelowy jest za daleko',
lockpicked = 'Pomyślnie odblokowano',
lockpicked_desc = 'Pomyślnie odblokowałeś pojazd docelowy',
cancelled = 'Anulowano',
cancelled_desc = 'Anulowano ostatnią czynność',
impound_vehicle = 'Odholuj pojazd',
impound_vehicle_desc = 'Odholuj pobliski pojazd',
impounding_progress = 'Odholowywanie pojazdu . . .',
driver_in_car = 'Kierowca w pojeździe',
driver_in_car_desc = 'Przed odholowaniem usuń kierowcę z pojazdu!',
car_impounded_desc = 'Pojazd został odholowany',
place_object = 'Umieść obiekt',
place_object_desc = 'Umieść obiekt na podłodze.',
prop_help_text = 'Naciśnij ~INPUT_CONTEXT~ aby przesunąć obiekt.\nNaciśnij ~INPUT_DETONATE~ aby usunąć obiekt.',
prop_help_text2 = 'Naciśnij ~INPUT_CONTEXT~ aby umieścić obiekt.',
seize_cash_title = 'Zajmij gotówkę',
seize_cash = 'Gotówka zajęta',
seize_cash_desc = 'Policja(%s) zajęła twoją gotówkę',
seize_cash_label = 'Gotówka podejrzanego zajęta',
seize_cash_failed = 'Zajęcie nie powiodło się',
seize_cash_failed_desc = 'Podejrzany nie ma gotówki',
fine_sent = 'Mandaty wysłane',
fine_sent_desc = 'Pomyślnie wysłałeś mandat na kwotę $%s!',
fine_received = 'Mandat otrzymany',
fine_received_desc = 'Otrzymałeś mandat na kwotę $%s',
fine_nomoney = 'Mandat nie powiódł się',
fine_nomoney_desc = 'Podejrzany nie ma wystarczającej ilości pieniędzy na zapłacenie mandatu (Kwota mandatu: $%s)',
male = 'Mężczyzna',
female = 'Kobieta',
mr = 'Pan',
mrs = 'Pani',
debt_collection = 'Ściąganie długów',
db_email =
'Drogi %s %s, <br /><br />Centralna Agencja Windykacyjna (CJCA) pobrała mandaty otrzymane od policji.<br />Z twojego konta pobrano <strong>$%s</strong>.<br /><br />Z poważaniem,<br />Pan Wasabi',
spawn_blocked = 'Garaż zablokowany',
spawn_blocked_desc = 'Nie możesz wyciągnąć swojego pojazdu, ponieważ jest zablokowany!',
positive = 'Pozytywny',
positive_gsr_desc = 'Podejrzany ma pozytywny wynik na obecność pozostałości po wystrzale!',
negative = 'Negatywny',
negative_gsr_desc = 'Podejrzany ma negatywny wynik na obecność pozostałości po wystrzale!',
gsr_test = 'Test GSR',
gsr_test_desc = 'Przetestuj pobliskiego podejrzanego na obecność pozostałości po wystrzale',
hands_clean = 'Ręce czyste',
hands_clean_desc = 'Pomyślnie oczyściłeś ręce z pozostałości po wystrzale!',
gsr_wash_ui = '[E] - Umyj ręce',
on_duty = 'Na służbie',
on_duty_desc = 'Jesteś teraz na służbie!',
off_duty = 'Po służbie',
off_duty_desc = 'Jesteś teraz po służbie!',
robbing_player = 'Okrywanie ofiary...',
cancelled_action = 'Anulowana akcja',
cancelled_action_desc = 'Twoja ostatnia akcja została anulowana!',
no_cuffs = 'Brak kajdanek',
no_cuffs_desc = 'Nie masz kajdanek w kieszeniach!',
failed = 'Niepowodzenie',
lockpick_handcuff_success = 'Pomyślnie otworzyłeś kajdanki!',
lockpick_handcuff_fail = 'Nie udało się otworzyć kajdanek!',
lockpick_broke = 'Wytrych zgięty',
lockpick_broke_desc = 'Twój wytrych się zgiął!',
grant_license = 'Wydaj licencję na broń',
grant_license_desc = 'Wydaj licencję na broń pobliskiej osobie',
player_id = 'ID gracza:',
select_player = 'Wybierz osobę',
license_granted = 'Licencja przyznana',
license_granted_desc = 'Przyznałeś licencję na broń %s (%s)',
license_alr_granted = 'Ta osoba już ma licencję!',
weapon_license = 'Licencja na broń',
weapon_license_desc = 'Właśnie otrzymałeś licencję na broń.',
in_vehicle = 'W pojeździe',
in_vehicle_desc = 'Nie możesz aresztować podejrzanego będąc w pojeździe!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'pt' end
if Config.Language ~= 'pt' then return end
Strings = {
jail_countdown_header = 'VOCÊ ESTÁ NA PRISÃO',
jail_countdown_sentence = '%s meses restantes',
jail_time_up = 'Tempo de prisão concluído',
jail_time_up_desc = 'Você cumpriu seu tempo na prisão.',
no_society_account = 'Nenhuma conta de sociedade encontrada para %s - verifique sua configuração!',
officer = 'Oficial',
not_authorized = 'Não Autorizado',
not_authorized_desc = 'Você não está autorizado a usar isso!',
not_on_duty = 'Não em serviço',
not_on_duty_desc = 'Você não está em serviço!',
gps_enabled = 'GPS Ativado',
gps_enabled_desc = 'Você ativou o GPS',
gps_disabled = 'GPS Desativado',
gps_disabled_desc = 'Você desativou o GPS',
new_speed_trap = 'Novo Radar',
speed_limit = 'Limite de Velocidade',
detection_radius = 'Raio de detecção',
incorrect_input = 'Entrada Incorreta',
incorrect_input_cancel = 'Entrada anterior cancelada.',
incorrect_input_speed = 'Por favor, insira um limite de velocidade válido.',
radar_post = 'Poste de Radar',
ui_radar_post_place = 'E - Colocar posto \n R - Girar \n BACK - Cancelar \n UP/DOWN - Distância',
radar_post_placed = 'Poste de radar colocado com sucesso.',
radar_post_failed = 'Falha ao colocar o poste de radar.',
speed_trap_rename = 'Renomear %s',
speed_trap = 'Radar',
new_name = 'Novo Nome',
speed_trap_renamed = 'Você renomeou com sucesso %s para %s.',
speed_trap_rename_failed = 'Falha ao renomear o poste de radar!',
manage_trap_rename = 'Renomear Poste de Radar',
manage_trap_rename_desc = 'Editar o nome deste poste de radar',
manage_trap_delete = 'Remover Poste de Radar',
manage_trap_delete_desc = 'Remover este poste de radar',
menu_trap_create = 'Criar Poste de Radar',
menu_trap_create_desc = 'Criar um poste de radar próximo à sua localização atual',
menu_trap_manage = 'Gerenciar Poste de Radar',
menu_trap_manage_desc = 'Gerenciar o poste de radar mais próximo.',
menu_select_trap = 'Selecionar Poste de Radar',
menu_radar_posts = 'Postos de radar',
menu_radar_posts_desc = 'Implantar/Remover postos de radar.',
warning_speedtrap_table = '^0[^1AVISO^0] A tabela de banco de dados do radar não foi criada automaticamente!',
menu_cctv_cameras = 'Câmeras de CFTV',
menu_cctv_cameras_desc = 'Implementar/Remover Câmeras de CFTV',
menu_cctv_create = 'Criar Câmera de CFTV',
menu_cctv_create_desc = 'Criar uma Câmera de CFTV perto de sua localização atual',
menu_select_cctv = 'Selecionar Câmera de CFTV',
menu_cctv_manage = 'Gerenciar Câmera de CFTV',
menu_cctv_manage_desc = 'Gerenciar a Câmera de CFTV mais próxima',
new_cctv = 'Nova Câmera de CFTV',
manage_cctv_rename = 'Renomear Câmera de CFTV',
manage_cctv_rename_desc = 'Editar o nome desta Câmera de CFTV',
cctv_renamed = 'Você renomeou %s para %s com sucesso.',
cctv_rename_failed = 'Você falhou ao renomear a Câmera de CFTV!',
manage_cctv_delete = 'Remover Câmera CCTV',
manage_cctv_delete_desc = 'Remover esta Câmera CCTV',
manage_cctv_view = 'Ver Câmera CCTV',
manage_cctv_view_desc = 'Ver a Câmera CCTV atual',
cctv = 'Câmera CCTV',
cctv_placed = 'A Câmera CCTV foi colocada com sucesso.',
cctv_failed = 'Falha ao colocar Câmera CCTV.',
manage_cctv_repair = 'Reparar Câmera CCTV',
manage_cctv_repair_desc = 'Reparar esta Câmera CCTV',
cctv_repaired = 'A Câmera CCTV foi reparada.',
cctv_repair_failed = 'Falha ao reparar Câmera CCTV.',
warning_cctv_table = '^0[^1WARNING^0] A tabela do banco de dados CCTV não foi construída automaticamente!',
cctv_repairing = 'Reparando Câmera CCTV...',
cctv_not_broken = 'Câmera CCTV Não Quebrada',
cctv_destroyed = 'Câmera CCTV Destruída',
cctv_destroyed_desc = 'Você destruiu a Câmera CCTV',
cctv_not_closest = 'Câmera CCTV Não Mais Próxima',
cctv_remove_error = 'Erro',
cctv_remove_error_desc = "Você não pode remover esta Câmera CCTV",
menu_tracking_bracelet = 'Ver Braceletes de Rastreamento',
menu_tracking_bracelet_desc = 'Ver todos os braceletes de rastreamento na cidade',
tracking_bracelet = 'Bracelete de Rastreamento',
tracking_bracelet_desc = 'Adicionar ou remover um bracelete de rastreamento de um suspeito próximo',
no_bracelets = 'Sem Braceletes',
no_bracelets_desc = 'Não há braceletes de rastreamento na cidade.',
optn_tracking_bracelet_title = 'Suspeito: %s',
optn_tracking_bracelet_desc = 'Bracelete de rastreamento adicionado por: %s',
tracking_bracelet_toggle_failed = 'Falha ao alternar o bracelete de rastreamento!',
tracking_bracelet_toggle = 'Bracelete de Rastreamento Alternado',
tracking_bracelet_toggled_desc = 'Você alternou o bracelete de rastreamento de %s',
tracking_bracelet_toggle_failed_desc = 'Você falhou ao alternar o bracelete de rastreamento de %s',
got_tracking_bracelet = 'Bracelete de Rastreamento Adicionado',
got_tracking_bracelet_desc = 'Você obteve um bracelete de rastreamento',
start_tracking = 'Adicionando Bracelete de Rastreamento',
stop_tracking = 'Removendo Bracelete de Rastreamento',
removed_tracking_bracelet = 'Bracelete de Rastreamento Removido',
removed_tracking_bracelet_desc = 'O bracelete de rastreamento foi removido',
no_tracking_bracelet = 'Sem Bracelete de Rastreamento',
no_tracking_bracelet_desc = 'Você não tem um bracelete de rastreamento',
license_self = 'Próprio',
grade_too_low = 'Grau Muito Baixo',
grade_too_low_desc = 'Seu grau é muito baixo para esta ação!',
invoice_amount = 'Valor da Fatura',
amount_invoice = 'Quantidade',
reason_invoice = 'Razão',
description_invoice = 'Descrição',
description_invoice_desc = 'Notas para Multa',
tickets_invoice = 'Multas',
tickets_invoice_desc = 'Selecionar Multas',
gov_billing = 'Cobrança de Dívidas Governamentais',
fine_id_invoice = 'ID da Multa',
offenses_invoice = 'Ofensas',
ticket_received = 'Você recebeu uma multa de %s',
speedtrap_fine = 'Multa de Radar',
speedtrap_fine_desc = 'Você foi multado em %s%s por exceder o limite em %s%s capturado pela câmera!',
evidence_storage = 'Armazenamento de Evidências',
locker_number = 'Número do Armário',
cuffed_last_online = 'Algemado Anteriormente',
cuffed_last_online_desc = 'Você estava algemado da última vez que estava na cidade.',
player_in_vehicle = 'Suspeito no Veículo',
player_in_vehicle_desc = 'Remova o suspeito do veículo antes de fazer isso!',
suspect_died_escort = 'Suspeito Morreu',
suspect_died_escort_desc = 'O suspeito morreu enquanto estava sendo escoltado e você o deixou cair.',
stop_escorting_interact = '[E] - Parar Escolta',
cant_wield = 'Não Pode Equipar',
cant_wield_desc = 'Você não pode usar isso no momento!',
jailed_player = 'Suspeito Preso',
jailed_player_desc = 'Você prendeu %s por %s meses.',
gps_active = 'GPS Ativado',
gps_active_desc = 'Jogador %s ativou seu GPS',
gps_deactive = 'GPS Desativado',
gps_deactive_desc = 'Jogador %s desativou seu GPS',
no_wsb = '^0[^3AVISO^0] wasabi_bridge NÃO foi iniciado DEPOIS do framework e/ou ANTES do recurso: %s',
currency = '€',
success = 'Sucesso',
go_back = 'Voltar',
cloakroom = 'Vestiário',
civilian_wear = 'Roupa Civil',
armoury_quantity_dialog = 'Quantidade a Pedir',
quantity = 'Quantidade',
invalid_amount = 'Quantidade Inválida',
invalid_amount_desc = 'Por favor, insira uma quantidade válida',
successful_purchase_desc = 'Você encomendou com sucesso suas armas do arsenal',
lacking_funds = 'Fundos Insuficientes',
lacking_funds_desc = 'Você não tem fundos suficientes no banco para esta compra',
no_permission = 'Sem Permissão',
no_access_desc = 'Você não tem autorização para acessar isso!',
key_map_cuff = 'Algemar Jogador',
key_map_tackle = 'Derrubar jogador enquanto corre',
key_map_job = 'Abrir Menu de Trabalho',
no_nearby = 'Ninguém Encontrado',
no_nearby_desc = 'Parece que não há ninguém por perto',
invalid_entry = 'Entrada Inválida',
invalid_entry_desc = 'Por favor, insira uma entrada válida.',
fines = 'Multas',
fines_desc = 'Emitir uma multa para um jogador próximo',
search_player = 'Revistar Suspeito',
search_player_desc = 'Revistar um suspeito próximo',
jail_player = 'Prender Suspeito',
jail_player_desc = 'Prender um suspeito próximo',
minutes_dialog = 'Sentença',
minutes_dialog_field = 'Meses',
escort_player = 'Escoltar Suspeito',
escort_player_desc = 'Escoltar um suspeito próximo',
handcuff_hard_player = 'Algemar Suspeito (duro)',
handcuff_hard_player_desc = 'Algemar um suspeito próximo (duro)',
handcuff_soft_player = 'Algemar Suspeito (suave)',
handcuff_soft_player_desc = 'Algemar um suspeito próximo (suave)',
put_in_vehicle = 'Colocar no Veículo',
put_in_vehicle_desc = 'Colocar suspeito próximo no veículo',
check_id = 'Verificar Identidade',
check_id_desc = 'Verificar a identidade do suspeito próximo.',
id_result_menu = 'Resultados da Identificação',
name = 'Nome',
job = 'Trabalho',
job_position = 'Posição',
dob = 'Data de Nascimento',
sex = 'Sexo',
bac = 'BAC',
licenses = 'Licenças',
total_licenses = 'Total de Licenças:',
no_licenses = 'Sem Licenças',
revoke_license = 'Revogar Licença',
license_revoked = 'Licença Revogada',
license_revoked_desc = 'Você revogou a licença com sucesso',
armoury_menu = 'Menu do Arsenal',
take_out_vehicle = 'Remover do Veículo',
take_out_vehicle_desc = 'Remover suspeito do veículo',
not_restrained = 'Alvo Não Restrito',
not_restrained_desc = 'Você deve restringir o criminoso antes de escoltá-lo',
vehicle_not_found = 'Nenhum Veículo Encontrado',
vehicle_not_found_desc = 'Nenhum veículo encontrado por perto',
unconcious = 'Pessoa Inconsciente',
unconcious_desc = 'A pessoa parece estar inconsciente',
police_garage = 'Garagem',
police = 'Polícia',
plate = 'Número da Placa',
owner = 'Proprietário',
possibly_stolen = 'Atenção!',
possibly_stolen_desc = 'Veículo Possivelmente Roubado',
vehicle_interactions = 'Interações com o Veículo',
vehicle_interactions_desc = 'Inspecionar veículo próximo',
vehicle_information = 'Informações do Veículo',
vehicle_information_desc = 'Informações sobre o veículo próximo',
lockpick_vehicle = 'Arrombar Veículo',
locakpick_vehicle_desc = 'Forçar acesso ao veículo próximo',
lockpick_progress = 'Arrombando Veículo . . .',
too_far = 'Muito Longe',
too_far_desc = 'O veículo alvo está muito longe',
lockpicked = 'Desbloqueado com Sucesso',
lockpicked_desc = 'Você desbloqueou com sucesso o veículo alvo',
cancelled = 'Cancelado',
cancelled_desc = 'Você cancelou sua última ação',
impound_vehicle = 'Recolher Veículo',
impound_vehicle_desc = 'Recolher veículo próximo',
impounding_progress = 'Recolhendo Veículo . . .',
driver_in_car = 'Motorista no Veículo',
driver_in_car_desc = 'Remova o motorista do veículo antes de recolhê-lo!',
car_impounded_desc = 'Veículo foi recolhido',
place_object = 'Colocar Objetos',
place_object_desc = 'Colocar objetos no chão.',
prop_help_text = 'Pressione ~INPUT_CONTEXT~ para mover o objeto.\nPressione ~INPUT_DETONATE~ para deletar o objeto.',
prop_help_text2 = 'Pressione ~INPUT_CONTEXT~ para colocar o objeto.',
seize_cash_title = 'Apreender Dinheiro',
seize_cash = 'Dinheiro Apreendido',
seize_cash_desc = 'A polícia(%s) apreendeu seu dinheiro',
seize_cash_label = 'Dinheiro do suspeito apreendido',
seize_cash_failed = 'Apreensão Falhou',
seize_cash_failed_desc = 'O suspeito não tem dinheiro',
fine_sent = 'Multas Enviadas',
fine_sent_desc = 'Você enviou com sucesso uma multa de $%s!',
fine_received = 'Multa Recebida',
fine_received_desc = 'Você recebeu uma multa de $%s',
fine_nomoney = 'Falha ao Multar',
fine_nomoney_desc = 'O suspeito não tem dinheiro suficiente para pagar a multa (Valor da Multa: $%s)',
male = 'Masculino',
female = 'Feminino',
mr = 'Sr.',
mrs = 'Sra.',
debt_collection = 'Cobrança de Dívidas',
db_email =
'Prezado %s %s, <br /><br />A Agência Central de Cobrança Judicial (CJCA) cobrou as multas que você recebeu da polícia.<br />Um valor de <strong>$%s</strong> foi retirado da sua conta.<br /><br />Atenciosamente,<br />Sr. Wasabi',
spawn_blocked = 'Garagem Bloqueada',
spawn_blocked_desc = 'Você não pode retirar seu veículo porque está bloqueado!',
positive = 'Positivo',
positive_gsr_desc = 'O suspeito testou POSITIVO para resíduos de pólvora!',
negative = 'Negativo',
negative_gsr_desc = 'O suspeito testou NEGATIVO para resíduos de pólvora!',
gsr_test = 'Teste de Resíduos de Pólvora',
gsr_test_desc = 'Testar um suspeito próximo para resíduos de pólvora',
hands_clean = 'Limpo',
hands_clean_desc = 'Você limpou com sucesso suas mãos dos resíduos de pólvora!',
gsr_wash_ui = '[E] - Lavar as Mãos',
on_duty = 'Em Serviço',
on_duty_desc = 'Você está agora em serviço!',
off_duty = 'Fora de Serviço',
off_duty_desc = 'Você está agora fora de serviço!',
robbing_player = 'Roubando Vítima...',
cancelled_action = 'Ação Cancelada',
cancelled_action_desc = 'Sua última ação foi cancelada!',
no_cuffs = 'Sem Algemas',
no_cuffs_desc = 'Você não tem algemas no bolso!',
failed = 'Falhou',
lockpick_handcuff_success = 'Você conseguiu abrir as algemas!',
lockpick_handcuff_fail = 'Falha ao abrir as algemas!',
lockpick_broke = 'Lockpick Quebrou',
lockpick_broke_desc = 'Seu lockpick quebrou!',
grant_license = 'Emitir Licença de Armas',
grant_license_desc = 'Emitir uma licença de armas para uma pessoa próxima',
player_id = 'ID do Jogador:',
select_player = 'Selecionar Pessoa',
license_granted = 'Licença Emitida',
license_granted_desc = 'Você emitiu uma licença de armas para %s (%s)',
license_alr_granted = 'Esta pessoa já tem uma licença!',
weapon_license = 'Licença de Armas',
weapon_license_desc = 'Você acabou de receber uma licença de armas.',
in_vehicle = 'No Veículo',
in_vehicle_desc = 'Você não pode prender o suspeito enquanto está no veículo!',
}
-----------------For support, scripts, and more----------------
--------------- https://discord.gg/wasabiscripts -------------
---------------------------------------------------------------
if not Config.Language then Config.Language = 'tw' end
if Config.Language ~= 'tw' then return end
Strings = {
jail_countdown_header = '你在監獄中',
jail_countdown_sentence = '%s 個月剩餘',
jail_time_up = '刑期已滿',
jail_time_up_desc = '你已服滿刑期。',
no_society_account = '未找到社會賬戶,請檢查您的配置!',
officer = '警官',
not_authorized = '未授權',
not_authorized_desc = '您沒有使用此功能的權限!',
not_on_duty = '不在值班',
not_on_duty_desc = '您目前不在值班中!',
gps_enabled = 'GPS 已啟用',
gps_enabled_desc = '您已啟用 GPS',
gps_disabled = 'GPS 已禁用',
gps_disabled_desc = '您已禁用 GPS',
new_speed_trap = '新測速器',
speed_limit = '速度限制',
detection_radius = '偵測半徑',
incorrect_input = '輸入錯誤',
incorrect_input_cancel = '取消了先前的輸入。',
incorrect_input_speed = '請輸入有效的速度限制。',
radar_post = '雷達站',
ui_radar_post_place = 'E - 放置哨所 \n R - 旋轉 \n BACK - 取消 \n UP/DOWN - 距離',
radar_post_placed = '雷達站已成功放置。',
radar_post_failed = '放置雷達站失敗。',
speed_trap_rename = '重命名%s',
speed_trap = '測速器',
new_name = '新名稱',
speed_trap_renamed = '您已成功將%s重命名為%s。',
speed_trap_rename_failed = '重命名雷達站失敗!',
manage_trap_rename = '重命名雷達站',
manage_trap_rename_desc = '編輯此雷達站的名稱',
manage_trap_delete = '移除雷達站',
manage_trap_delete_desc = '移除此雷達站',
menu_trap_create = '創建雷達站',
menu_trap_create_desc = '在您當前位置附近創建一個雷達站',
menu_trap_manage = '管理雷達站',
menu_trap_manage_desc = '管理最近的雷達站。',
menu_select_trap = '選擇雷達站',
menu_radar_posts = '雷達哨所',
menu_radar_posts_desc = '部署/移除雷達哨所。',
warning_speedtrap_table = '^0[^1警告^0] 測速器資料庫表未自動構建!',
menu_cctv_cameras = 'CCTV Mfoninitwa mfiri',
menu_cctv_cameras_desc = 'Fa/Yi CCTV Kamera ahorow',
menu_cctv_create = 'Yɛ CCTV Kamera',
menu_cctv_create_desc = 'Yɛ CCTV Kamera a ɛbɛn wo mprempren beae',
menu_select_cctv = 'Paw CCTV Kamera',
menu_cctv_manage = 'Hwɛ CCTV Kamera so',
menu_cctv_manage_desc = 'Hwɛ CCTV Kamera a ɛbɛn no so',
new_cctv = 'CCTV Kamera Foforo',
manage_cctv_rename = 'Sesa CCTV Kamera no din',
manage_cctv_rename_desc = 'Sesa CCTV Kamera yi din',
cctv_renamed = 'Woatumi asesa %s din ayɛ no %s.',
cctv_rename_failed = 'Woantumi ansesa CCTV Kamera din!',
manage_cctv_delete = 'Yi CCTV Kamera no fi hɔ',
manage_cctv_delete_desc = 'Yi CCTV Kamera yi',
manage_cctv_view = 'Hwɛ CCTV Kamera',
manage_cctv_view_desc = 'Hwɛ CCTV Kamera a ɛwɔ hɔ mprempren',
cctv = 'CCTV Mfoninitwa afiri',
cctv_placed = 'Wɔde CCTV Kamera no asi hɔ yiye.',
cctv_failed = 'Wantumi amfa CCTV Kamera no nsi hɔ.',
manage_cctv_repair = 'Siesie CCTV Kamera',
manage_cctv_repair_desc = 'Siesie CCTV Kamera yi',
cctv_repaired = 'Wɔasiesie CCTV Kamera.',
cctv_repair_failed = 'Wantumi ansiesie CCTV Kamera.',
warning_cctv_table = '^0[^1KƆBƆ^0] CCTV database pon no antumi ankyekye ne ho!',
cctv_repairing = 'Wɔresiesie CCTV Kamera.' ,
cctv_not_broken = 'CCTV Kamera no Nsɛe',
cctv_destroyed = 'CCTV Kamera a Wɔasɛe no',
cctv_destroyed_desc = 'Woasɛe CCTV Kamera no',
cctv_not_closest = 'Ɛnyɛ CCTV Kamera a Ɛbɛn Sen Biara',
cctv_remove_error = 'Mfomso',
cctv_remove_error_desc = "Wo ntumi nyi CCTV Kamera yi mfi hɔ",
menu_tracking_bracelet = '查看追蹤手環',
menu_tracking_bracelet_desc = '查看城市中的所有追蹤手環',
tracking_bracelet = '追蹤手環',
tracking_bracelet_desc = '為附近的嫌疑人添加或移除追蹤手環',
no_bracelets = '沒有手環',
no_bracelets_desc = '城市中沒有追蹤手環。',
optn_tracking_bracelet_title = '嫌疑人: %s',
optn_tracking_bracelet_desc = '追蹤手環由 %s 添加',
tracking_bracelet_toggle_failed = '無法切換追蹤手環!',
tracking_bracelet_toggle = '追蹤手環切換',
tracking_bracelet_toggled_desc = '你已切換 %s 的追蹤手環',
tracking_bracelet_toggle_failed_desc = '你未能切換 %s 的追蹤手環',
got_tracking_bracelet = '追蹤手環已添加',
got_tracking_bracelet_desc = '你獲得了一個追蹤手環',
start_tracking = '添加追蹤手環',
stop_tracking = '移除追蹤手環',
removed_tracking_bracelet = '追蹤手環已移除',
removed_tracking_bracelet_desc = '追蹤手環已被移除',
no_tracking_bracelet = '沒有追蹤手環',
no_tracking_bracelet_desc = '你沒有追蹤手環',
license_self = '自己',
grade_too_low = '等級太低',
grade_too_low_desc = '您的等級太低,無法執行此操作!',
invoice_amount = '發票金額',
amount_invoice = '金額',
reason_invoice = '原因',
description_invoice = '描述',
description_invoice_desc = '罰款備註',
tickets_invoice = '罰單',
tickets_invoice_desc = '選擇罰款',
gov_billing = '政府債務追繳',
fine_id_invoice = '罰單ID',
offenses_invoice = '違法行為',
ticket_received = '您收到了來自%s的罰單',
speedtrap_fine = '測速器罰款',
speedtrap_fine_desc = '您因超速%s%s被罰款%s%s',
evidence_storage = '證據存儲',
locker_number = '儲物櫃編號',
cuffed_last_online = '之前被手銬銬住',
cuffed_last_online_desc = '您上次在城市時被手銬銬住了。',
player_in_vehicle = '嫌疑人在車內',
player_in_vehicle_desc = '在執行此操作前,請將嫌疑人從車輛中移出!',
suspect_died_escort = '嫌疑人死亡',
suspect_died_escort_desc = '嫌疑人在護送過程中死亡,您丟下了他。',
stop_escorting_interact = '[E] - 停止護送',
cant_wield = '無法裝備',
cant_wield_desc = '您目前無法使用此物品!',
jailed_player = '嫌疑人已入獄',
jailed_player_desc = '您已將%s監禁了%s個月。',
gps_active = 'GPS已激活',
gps_active_desc = '玩家%s激活了他們的GPS',
gps_deactive = 'GPS已停用',
gps_deactive_desc = '玩家%s停用了他們的GPS',
no_wsb = '^0[^3警告^0] wasabi_bridge沒有在框架之後和資源之前啟動%s',
currency = '¥',
success = '成功',
go_back = '返回',
cloakroom = '更衣室',
civilian_wear = '便服',
armoury_quantity_dialog = '訂購數量',
quantity = '數量',
invalid_amount = '無效金額',
invalid_amount_desc = '請輸入有效金額',
successful_purchase_desc = '您已成功從軍械庫訂購武器',
lacking_funds = '資金不足',
lacking_funds_desc = '您銀行賬戶中的資金不足,無法購買此物品',
no_permission = '無許可',
no_access_desc = '您無權訪問此內容!',
key_map_cuff = '給玩家戴上手銬',
key_map_tackle = '奔跑中摔倒玩家',
key_map_job = '打開工作菜單',
no_nearby = '附近無人',
no_nearby_desc = '附近似乎沒有人',
invalid_entry = '無效輸入',
invalid_entry_desc = '請輸入有效的條目。',
fines = '罰款',
fines_desc = '給附近的玩家開罰單',
search_player = '搜查嫌疑人',
search_player_desc = '搜查附近的嫌疑人',
jail_player = '監禁嫌疑人',
jail_player_desc = '監禁附近的嫌疑人',
minutes_dialog = '刑期',
minutes_dialog_field = '月',
escort_player = '護送嫌疑人',
escort_player_desc = '護送附近的嫌疑人',
handcuff_hard_player = '硬性手銬嫌疑人',
handcuff_hard_player_desc = '給附近的嫌疑人戴上硬性手銬',
handcuff_soft_player = '軟性手銬嫌疑人',
handcuff_soft_player_desc = '給附近的嫌疑人戴上軟性手銬',
put_in_vehicle = '放入車輛',
put_in_vehicle_desc = '將附近的嫌疑人放入車輛中',
check_id = '檢查身份證',
check_id_desc = '檢查附近嫌疑人的身份證。',
id_result_menu = '身份證結果',
name = '姓名',
job = '工作',
job_position = '職位',
dob = '出生日期',
sex = '性別',
bac = '血液酒精濃度',
licenses = '許可證',
total_licenses = '總許可證:',
no_licenses = '無許可證',
revoke_license = '吊銷許可證',
license_revoked = '許可證已吊銷',
license_revoked_desc = '您已成功吊銷了許可證',
armoury_menu = '軍械庫菜單',
take_out_vehicle = '從車內移出',
take_out_vehicle_desc = '將嫌疑人從車輛中移出',
not_restrained = '目標未受約束',
not_restrained_desc = '您必須先約束犯罪嫌疑人,然後再護送他',
vehicle_not_found = '未找到車輛',
vehicle_not_found_desc = '附近未找到車輛',
unconcious = '人失去意識',
unconcious_desc = '此人似乎失去意識',
police_garage = '車庫',
police = '警察',
plate = '車牌號',
owner = '車主',
possibly_stolen = '警告!',
possibly_stolen_desc = '車輛可能被盜',
vehicle_interactions = '車輛交互',
vehicle_interactions_desc = '檢查附近的車輛',
vehicle_information = '車輛信息',
vehicle_information_desc = '有關附近車輛的信息',
lockpick_vehicle = '撬鎖車輛',
locakpick_vehicle_desc = '強制進入附近的車輛',
lockpick_progress = '正在撬鎖車輛 . . .',
too_far = '距離太遠',
too_far_desc = '目標車輛距離太遠',
lockpicked = '成功解鎖',
lockpicked_desc = '您已成功解鎖目標車輛',
cancelled = '已取消',
cancelled_desc = '您取消了最後一個操作',
impound_vehicle = '扣押車輛',
impound_vehicle_desc = '扣押附近的車輛',
impounding_progress = '正在扣押車輛 . . .',
driver_in_car = '司機在車內',
driver_in_car_desc = '在扣押車輛前,請先將司機移出!',
car_impounded_desc = '車輛已扣押',
place_object = '放置物體',
place_object_desc = '將物體放置在地上。',
prop_help_text = '按~INPUT_CONTEXT~移動物體。\n按~INPUT_DETONATE~刪除物體。',
prop_help_text2 = '按~INPUT_CONTEXT~放置物體。',
seize_cash_title = '沒收現金',
seize_cash = '現金被沒收',
seize_cash_desc = '警方(%s)沒收了您的現金',
seize_cash_label = '沒收嫌疑人的現金',
seize_cash_failed = '沒收失敗',
seize_cash_failed_desc = '嫌疑人沒有現金',
fine_sent = '罰單已發送',
fine_sent_desc = '您已成功發送罰單,金額為$%s',
fine_received = '罰單已收到',
fine_received_desc = '您已收到罰單,金額為$%s',
fine_nomoney = '罰單失敗',
fine_nomoney_desc = '嫌疑人沒有足夠的錢支付罰單(罰單金額:$%s',
male = '男',
female = '女',
mr = '先生',
mrs = '女士',
debt_collection = '債務追繳',
db_email =
'尊敬的%s%s,<br /><br />中央司法收款局CJCA收取了您從警方收到的罰款。<br />從您的賬戶中扣除了<strong>$%s</strong>。<br /><br />此致,<br />Wasabi先生',
spawn_blocked = '車庫被阻塞',
spawn_blocked_desc = '您的車輛無法開出,因為它被阻塞了!',
positive = '陽性',
positive_gsr_desc = '嫌疑人測試為陽性,有槍擊殘留物!',
negative = '陰性',
negative_gsr_desc = '嫌疑人測試為陰性,沒有槍擊殘留物!',
gsr_test = '槍擊殘留物測試',
gsr_test_desc = '測試附近嫌疑人的槍擊殘留物',
hands_clean = '已清洗',
hands_clean_desc = '您已成功清洗手上的槍擊殘留物!',
gsr_wash_ui = '[E] - 洗手',
on_duty = '上班中',
on_duty_desc = '您現在上班了!',
off_duty = '下班中',
off_duty_desc = '您現在下班了!',
robbing_player = '搶劫受害者中...',
cancelled_action = '行動取消',
cancelled_action_desc = '您的上一個行動已取消!',
no_cuffs = '沒有手銬',
no_cuffs_desc = '您的口袋裡沒有手銬!',
failed = '失敗',
lockpick_handcuff_success = '您已成功撬開手銬!',
lockpick_handcuff_fail = '撬開手銬失敗!',
lockpick_broke = '撬鎖器彎曲',
lockpick_broke_desc = '您的撬鎖器彎曲了!',
grant_license = '發放武器許可證',
grant_license_desc = '向附近的人發放武器許可證',
player_id = '玩家ID',
select_player = '選擇人員',
license_granted = '許可證已發放',
license_granted_desc = '您已向%s%s發放了武器許可證',
license_alr_granted = '此人已經有許可證了!',
weapon_license = '武器許可證',
weapon_license_desc = '您剛剛獲得了武器許可證。',
in_vehicle = '在車內',
in_vehicle_desc = '您不能在車內逮捕嫌疑人!',
}
:root {
--camera-overlay-font: 'Orbitron', sans-serif;
}
body,
html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
font-style: normal;
overflow: hidden;
font-family: "Poppins", sans-serif;
font-style: normal;
display: block;
}
.camera-flash {
width: 100%;
height: 100%;
background: white;
display: none;
opacity: 0;
pointer-events: none;
transition: opacity 0.5s ease-out;
}
.camera-overlay {
position: relative;
width: 100%;
height: 100%;
border: none;
/* background-color: rgba(0, 0, 0, 0.1); Transparent look */
overflow: hidden;
display: none;
pointer-events: none;
}
/* Safe zone for text alignment - Padding from the edges */
.safe-zone {
position: absolute;
top: 20px;
left: 20px;
right: 20px;
bottom: 20px;
pointer-events: none;
/* Make sure it's just for layout and doesn't block interactions */
}
/* Header with REC and Channel info inside the safe zone */
.overlay-header {
display: flex;
width: 100%;
padding: 20px;
font-size: 18px;
justify-content: space-between;
color: #ffffff;
font-family: var(--camera-overlay-font);
}
.rec-indicator {
color: red;
font-weight: bold;
}
.rec-dot {
animation: blink 1s infinite;
}
@keyframes blink {
20% {
opacity: 0;
}
}
/* Crosshair in the middle - PLUS STYLE */
.crosshair {
position: absolute;
top: 50%;
left: 50%;
width: 20px;
height: 20px;
background: transparent;
}
.crosshair::before,
.crosshair::after {
content: '';
position: absolute;
background: white;
}
.crosshair::before {
width: 2px;
height: 100%;
top: 0;
left: 50%;
transform: translateX(-50%);
}
.crosshair::after {
height: 2px;
width: 100%;
top: 50%;
left: 0;
transform: translateY(-50%);
}
.overlay-footer {
position: absolute;
bottom: 0;
width: 100%;
display: flex;
justify-content: space-between;
padding: 20px;
font-family: var(--camera-overlay-font);
}
.cam-info {
display: flex;
width: 100%;
justify-content: flex-end;
margin-right: 30px;
margin-bottom: 2px;
padding: 5px;
}
.camera-info-text {
display: block;
color: white;
text-transform: uppercase;
margin-top: 10px;
margin-right: 10px;
padding: 5px;
}
.time-display {
padding: 5px;
margin-top: 10px;
margin-right: 10px;
padding: 5px;
color: white;
font-weight: bold;
}
/* Borders with Safe Zone */
.camera-overlay::before,
.camera-overlay::after {
content: '';
position: absolute;
border: 2px solid rgba(255, 255, 255, 0.5);
}
/* Safe zone for top-left and bottom-right corners */
.camera-overlay::before {
top: 20px;
left: 20px;
width: 40px;
height: 40px;
border-right: none;
border-bottom: none;
}
.camera-overlay::after {
bottom: 20px;
right: 20px;
width: 40px;
height: 40px;
border-left: none;
border-top: none;
}
/* Safe zone for optional top-right and bottom-left corners */
.camera-overlay .border-corner {
position: absolute;
}
.camera-overlay .border-corner.top-right {
top: 20px;
right: 20px;
width: 40px;
height: 40px;
border-left: none;
border-bottom: none;
}
.camera-overlay .border-corner.bottom-left {
bottom: 20px;
left: 20px;
width: 40px;
height: 40px;
border-right: none;
border-top: none;
}
/* Place the REC and time displays inside the safe zone */
.rec-indicator,
.time-display,
.channel-display {
margin-top: 10px;
margin-left: 10px;
padding: 5px;
pointer-events: none;
transition: opacity 0.5s ease-out;
}
.jail-counter {
color: #fff;
display: none;
flex-direction: column;
justify-content: center;
align-items: center;
position: absolute;
border-radius: 14px;
top: 2%;
left: 50%;
padding: 14px;
transform: translateX(-50%) !important;
pointer-events: none;
transition: opacity 0.5s ease-out;
letter-spacing: 5px;
font-size: 1.2em;
}
.jail-counter .heading {
font-size: 1.2em;
letter-spacing: 10px;
width: 100%;
font-weight: bold;
}
.jail-counter .seperator {
width: 100%;
height: 1px;
justify-content: center;
align-items: center;
background: linear-gradient(to right, transparent, #ffffff80, transparent);
margin: 2px 0;
}
.jail-counter .sentence {
font-size: 0.75em;
font-weight: normal;
}<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wasabi Police</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div class="camera-flash"> </div>
<div id="camera-overlay" class="camera-overlay">
<!-- Header with REC and Channel info -->
<div class="overlay-header">
<div class="rec-indicator">
<span class="rec-dot">●</span> REC
</div>
</div>
<!-- Crosshair in the center -->
<div class="crosshair"></div>
<!-- Footer with Camera Info and Time -->
<div class="overlay-footer">
<!-- Camera number and time -->
<div class="cam-info">
<div class="camera-info-text">CAM 03</div>
<div class="time-display">00:00</div>
</div>
</div>
</div>
<div class="jail-counter">
<div class="heading">YOU ARE IN JAIL</div>
<div class="seperator"> </div>
<div class="sentence">4 Months Left</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<script src="js/script.js"></script>
</body>
</html>/*var mockData = {
action: 'jailCounter',
header: 'YOU ARE IN JAIL!',
sentence: '4 Months Left',
color: '#0390fc'
}*/
//window.postMessage(mockData);
const selectors = {
// Speed Traps
cameraFlash: '.camera-flash',
// Camera Overlay
cameraOverlay: '.camera-overlay',
timeDisplay: '.time-display',
cameraName: '.camera-info-text',
// Jail
jailCounter: '.jail-counter',
jailCounterHeader: '.jail-counter .heading',
jailCounterText: '.jail-counter .sentence'
};
function getElements() {
const elements = {};
for (const key in selectors) {
elements[key] = document.querySelector(selectors[key]);
}
return elements;
}
function HandleCameraFlash(elements) {
elements.cameraFlash.style.display = 'flex';
elements.cameraFlash.style.opacity = '1';
setTimeout(() => {
elements.cameraFlash.style.opacity = '0';
setTimeout(() => {
elements.cameraFlash.style.display = 'none';
}, 1000);
}, 100);
}
let inPrison;
function HandlePrisonCounter(data, elements) {
if (!inPrison && data.sentence) {
elements.jailCounterHeader.textContent = data.header;
elements.jailCounterText.textContent = data.sentence;
elements.jailCounter.style.display = 'flex';
ApplyGradientTextEffect(elements.jailCounterHeader, data.color || '#ff0000');
anime({
targets: elements.jailCounter,
opacity: [0, 1],
scale: [0.9, 1],
duration: 300,
easing: 'easeOutExpo'
});
inPrison = true
return;
} else if (inPrison && !data.sentence) {
anime({
targets: elements.jailCounter,
opacity: [1, 0],
scale: [1, 0.],
duration: 300,
easing: 'easeOutExpo',
complete: () => {
elements.jailCounter.style.display = 'none';
}
});
inPrison = false;
return;
}
if (!data.sentence) { return; }
elements.jailCounterText.textContent = data.sentence
}
const ColorNameToHex = (color) => {
const colors = {
"aliceblue": "#f0f8ff",
"antiquewhite": "#faebd7",
"aqua": "#00ffff",
"aquamarine": "#7fffd4",
"azure": "#f0ffff",
"beige": "#f5f5dc",
"bisque": "#ffe4c4",
"black": "#000000",
"blanchedalmond": "#ffebcd",
"blue": "#0000ff",
"blueviolet": "#8a2be2",
"brown": "#a52a2a",
"burlywood": "#deb887",
"cadetblue": "#5f9ea0",
"chartreuse": "#7fff00",
"chocolate": "#d2691e",
"coral": "#ff7f50",
"cornflowerblue": "#6495ed",
"cornsilk": "#fff8dc",
"crimson": "#dc143c",
"cyan": "#00ffff",
"darkblue": "#00008b",
"darkcyan": "#008b8b",
"darkgoldenrod": "#b8860b",
"darkgray": "#a9a9a9",
"darkgreen": "#006400",
"darkkhaki": "#bdb76b",
"darkmagenta": "#8b008b",
"darkolivegreen": "#556b2f",
"darkorange": "#ff8c00",
"darkorchid": "#9932cc",
"darkred": "#8b0000",
"darksalmon": "#e9967a",
"darkseagreen": "#8fbc8f",
"darkslateblue": "#483d8b",
"darkslategray": "#2f4f4f",
"darkturquoise": "#00ced1",
"darkviolet": "#9400d3",
"deeppink": "#ff1493",
"deepskyblue": "#00bfff",
"dimgray": "#696969",
"dodgerblue": "#1e90ff",
"firebrick": "#b22222",
"floralwhite": "#fffaf0",
"forestgreen": "#228b22",
"fuchsia": "#ff00ff",
"gainsboro": "#dcdcdc",
"ghostwhite": "#f8f8ff",
"gold": "#ffd700",
"goldenrod": "#daa520",
"gray": "#808080",
"green": "#008000",
"greenyellow": "#adff2f",
"honeydew": "#f0fff0",
"hotpink": "#ff69b4",
"indianred": "#cd5c5c",
"indigo": "#4b0082",
"ivory": "#fffff0",
"khaki": "#f0e68c",
"lavender": "#e6e6fa",
"lavenderblush": "#fff0f5",
"lawngreen": "#7cfc00",
"lemonchiffon": "#fffacd",
"lightblue": "#add8e6",
"lightcoral": "#f08080",
"lightcyan": "#e0ffff",
"lightgoldenrodyellow": "#fafad2",
"lightgray": "#d3d3d3",
"lightgreen": "#90ee90",
"lightpink": "#ffb6c1",
"lightsalmon": "#ffa07a",
"lightseagreen": "#20b2aa",
"lightskyblue": "#87cefa",
"lightslategray": "#778899",
"lightsteelblue": "#b0c4de",
"lightyellow": "#ffffe0",
"lime": "#00ff00",
"limegreen": "#32cd32",
"linen": "#faf0e6",
"magenta": "#ff00ff",
"maroon": "#800000",
"mediumaquamarine": "#66cdaa",
"mediumblue": "#0000cd",
"mediumorchid": "#ba55d3",
"mediumpurple": "#9370db",
"mediumseagreen": "#3cb371",
"mediumslateblue": "#7b68ee",
"mediumspringgreen": "#00fa9a",
"mediumturquoise": "#48d1cc",
"mediumvioletred": "#c71585",
"midnightblue": "#191970",
"mintcream": "#f5fffa",
"mistyrose": "#ffe4e1",
"moccasin": "#ffe4b5",
"navajowhite": "#ffdead",
"navy": "#000080",
"oldlace": "#fdf5e6",
"olive": "#808000",
"olivedrab": "#6b8e23",
"orange": "#ffa500",
"orangered": "#ff4500",
"orchid": "#da70d6",
"palegoldenrod": "#eee8aa",
"palegreen": "#98fb98",
"paleturquoise": "#afeeee",
"palevioletred": "#db7093",
"papayawhip": "#ffefd5",
"peachpuff": "#ffdab9",
"peru": "#cd853f",
"pink": "#ffc0cb",
"plum": "#dda0dd",
"powderblue": "#b0e0e6",
"purple": "#800080",
"rebeccapurple": "#663399",
"red": "#ff0000",
"rosybrown": "#bc8f8f",
"royalblue": "#4169e1",
"saddlebrown": "#8b4513",
"salmon": "#fa8072",
"sandybrown": "#f4a460",
"seagreen": "#2e8b57",
"seashell": "#fff5ee",
"sienna": "#a0522d",
"silver": "#c0c0c0",
"skyblue": "#87ceeb",
"slateblue": "#6a5acd",
"slategray": "#708090",
"snow": "#fffafa",
"springgreen": "#00ff7f",
"steelblue": "#4682b4",
"tan": "#d2b48c",
"teal": "#008080",
"thistle": "#d8bfd8",
"tomato": "#ff6347",
"turquoise": "#40e0d0",
"violet": "#ee82ee",
"wheat": "#f5deb3",
"white": "#ffffff",
"whitesmoke": "#f5f5f5",
"yellow": "#ffff00",
"yellowgreen": "#9acd32"
};
return colors[color.toLowerCase()] || color;
};
const ApplyGradientTextEffect = (element, color) => {
if (!color.startsWith('#')) {
color = ColorNameToHex(color);
}
const hexColor = color.slice(1);
const r = parseInt(hexColor.substr(0, 2), 16);
const g = parseInt(hexColor.substr(2, 2), 16);
const b = parseInt(hexColor.substr(4, 2), 16);
const lighterColor = `rgba(${r}, ${g}, ${b}, 0.5)`;
const darkerColor = `rgba(${Math.max(r - 30, 0)}, ${Math.max(g - 30, 0)}, ${Math.max(b - 30, 0)}, 1)`;
element.style.background = `linear-gradient(to right, ${lighterColor} 0%, ${darkerColor} 50%, ${lighterColor} 100%)`;
element.style.textShadow = `0 0 2px rgba(${r}, ${g}, ${b}, 0.8),
0 0 4px rgba(${r}, ${g}, ${b}, 0.6),
0 0 6px rgba(${r}, ${g}, ${b}, 0.4)`;
element.style.webkitTextFillColor = 'transparent';
element.style.webkitBackgroundClip = 'text';
element.style.backgroundClip = 'text';
}
// MAIN LISTENER
let mainListener;
if (mainListener) {
window.removeEventListener('message', mainListener);
}
mainListener = (event) => {
const data = event.data;
const elements = getElements();
if (data.action === 'cameraFlash') {
HandleCameraFlash(elements);
return;
}
if (data.action === 'showCamera') {
elements.timeDisplay.textContent = data.time;
elements.cameraName.textContent = data.name;
elements.cameraOverlay.style.display = 'flex';
return;
}
if (data.action === 'updateCameraTime') {
elements.timeDisplay.textContent = data.time;
return;
}
if (data.action === 'disableCameraOverlay') {
// Hide the camera UI
elements.cameraOverlay.style.display = 'none';
return;
}
if (data.action === 'jailCounter') {
HandlePrisonCounter(data, elements);
return;
}
};
window.addEventListener('message', mainListener);