# Ez-PoliceJob

##

{% hint style="warning" %}
**L'installation de ce scripts est le même procédé pour les jobs :** \
\
\-  *EzPoliceJob* !\
\- *EzSheriffJob* !\
\
**Veuillez suivre cette documentation pour les deux scripts cités ci-dessus !**
{% endhint %}

## Configuration :

**Ce script est très simple a installer sur votre serveur FiveM, que vous soyez en localhost, sur un VPS ou bien sur une machine dédiée FiveM !**

{% tabs %}
{% tab title="👨‍💻 Config.lua" %}
**Configurez d'abord le nom de votre serveur !** \
\- Ligne #8 :

```lua
ServerNameInRP = "WestSide",
```

\
\
**Vous utilisez esx\_identity ?**\
\- Ligne #16 :

```lua
EnableESXIdentity = true,
```

\
\
\
\
**Vous êtes en capacité de changer le nom du job :**\
\- Ligne #22 :

```lua
JobName = "police",
SocietyName = "society_police",
```

\
\
\
\
**Configurez l'ésthetique du Menu F6** : \
\- Ligne #25 à #44 :&#x20;

```lua
--------------------------
-- menu Interactions/F6 --
--------------------------

	MenuServiceEnOX = true, -- possibilités de passer le menu d'acceuil dédié aux citoyens en Ox ou en Rageui (false = RageUI - true =  Menu OX)

	TypeOfProgress = 'Circle', -- Customisation du OX_Progress (progress bar), 
	-- Trois choix possible :
	-- - 'Bar' = ProgressBar rectangulaire avec description
	-- - 'Circle' = ProgressBar ronde sans description mais avec pourcentage !
	-- - 'Aucune' = Aucune ProgressBar 
	
	ToucheParDefautMenuInteraction = 'F7',
	MenuTitle = 'POLICE',
	MenuColor = '6A6EFF', -- https://htmlcolorcodes.com/fr/ | Prendre les couleurs en #FF0000 !
	TempsPourLireLesDroit = 10000, -- temps pendant lequel les droit miranda sont affichés ! (en ms)
	
	-- Customisation du système de crochetage de véhicule by Benderoooo :D --
	SkillCheckForLockpick = {'easy', {areaSize = 40, speedMultiplier = 0.75}, {areaSize = 55, speedMultiplier = 1.2}, {areaSize = 40, speedMultiplier = 1.4},}, 
	-- ^^ ce referer a la documentation ox sur les skill check ! https://overextended.dev/ox_lib/Modules/Interface/Client/skillcheck
```

\
\
\
\
**Configurez les grades de certaines fonctionnalités :**\
\- Ligne #46 & #100 :

```lua
----------------------------------------------------------
-- Grade pour acceder a certaines fonctionalités du Job --
----------------------------------------------------------
    
GradePointBoss = 7, 
GradePointArmurerie = 1, 
GradePointBracelet = 0,
-- Perms Camera
GradePointCamera = 0,
-- Perms Casier Perso
GradePointCasier = 1,
-- Perms Coffre
GradePointCoffre = 1, 
-- Perms Casier Judiciaire
GradeForCasierJudiciaire = 1, 
-- Perms Camera
GradeForSecurityCamera = 1,
-- Config Vestiaire
GradePointVestiaire = 0, 
-- Perms A.D.R
GradePourAvisDeRecherche = 1, -- grade gestion ADR
-- Grade Garage
GradePointGarage = 0,
-- Grade Garage Hélico 
GradePointGarageHeli = 1,
-- Grade Garage Bateaux
GradePointGarageBateau = 1,
-- Grade Gestion des permis
GradePointGestionPermis = 1,
-- Grade BDD 
GradePointBaseDeDonne = 1,
-- Grade ??? 
GradePointExtra = 1,
-- Grade Menu Props
GradeMenuObjets = 0,
-- Grade Menu Chien
GradeMenuChien = 1,
-- Chien Custom (chop par défaut) 
HashOfCustomDog = 351016938,
-- Grade Pour gestion interventions
GradeMenuIntervention = 7, 
GradeMenuLicences = 1,
GradeEnvoieFacture = 1, -- effectuer des factures 
-- Poser des radars
GradeMenuRadar = 0,
GradeMenuFourriere = 0, -- envoyer les véhicules en fourrière
-- Crochetage des véhicules fermés
GradeMenuCrocheter = 0, -- crocheter les véhicules fermer
GradeRecherchePlaque = 0, -- NEW CONFIG
GradePourTargetFouille = 0,
	
-- Other
GradePourCameraHelico = 1,
-- Message d'erreur si le joueur n'a pas le grade necessaires :
ErrorForGrade = "Vous n'avez pas le grade requis pour vérifier ce genre de choses, veuillez vous réferer à quelqu'un de plus haute gradés !",
```

\
\
\
\
**Configurez les liens des webhooks Discord pour les logs :** \
\- Ligne #103 à #129:&#x20;

```lua
    --------------------------------------------------
    --------- Config Logs
    --------------------------------------------------
	
    logs = {

        ---- Point menu

        Armurerie = "",
        Boss = "",
        Camera = "",
        Casier = "",
        Coffre = "",
        AcceuilPolice = "",
        GestionPermis = "",
        CasierPolice = "",
		-- 
        PriseTenueGAV = "", 
		-- ^^ -- Logs prise de tenue de G.A.V
		
        ---------------- F6 & Co

        PriseFinService = "",
        AvisDeRecherche = "",
        FactureAmende = "",

    },
```

\
\
\
\
**Configurez la totalité des positions :** \
\- Ligne #221 à #239:&#x20;

```lua
Config.pos = {
	adrmenu = vector3(840.52789306641, -1305.5543212891, 28.188259124756), -- tcheck [RAGEUI]
    menuPermisInfo = vector3(838.41033935547, -1299.1547851563, 28.187459945679), -- tchek [RAGEUI]
	armurerie = vector3(836.05755615234, -1286.8448486328, 28.281639099121), -- tcheck [RAGEUI]
	bossmenu = vector3(856.07171630859, -1300.8112792969, 28.127754211426), -- tchek [RAGEUI]
	coffreperso = vector3(852.66827392578, -1312.4132080078, 28.369386672974), -- tchek [OX]
	coffrecommun = vector3(840.61254882813, -1286.1125488281, 28.375410079956), -- tchek [OX]
    casierjudiciaire = vector3(852.87744140625, -1292.4477539063, 28.14342880249), -- tchek [RAGEUI]
    cameraview = vector3(842.84423828125, -1299.3912353516, 28.188060760498), -- tcheck [RAGEUI] 
	tenueGav = vector3(834.71368408203, -1295.3033447266, 28.244918823242), -- tchek [RAGEUI]
	vestiaire = vector3(845.10925292969, -1286.3443603516, 28.248874664307), -- tchek [OX]
    plainterdv = vector3(836.57336425781, -1289.0986328125, 28.299808502197), -- tchek [RAGEUI/OX]

	garagevoiture = vector3(870.8583984375, -1350.4412841797, 26.306943893433),
	garageheli = vector3(827.48046875, -1407.9948730469, 25.555910491943),
    garagebateau = vector3(-778.62042236328, -1494.8626708984, 1.9765459299088),

    extrascustom = { position = {x = 823.81317138672, y = -1372.2250976563, z = 26.138072967529} }
}
```

\
\
\
\
**Configurez les tenues dédiée aux job police :** \
\- Ligne #247 à #598 :&#x20;

```lua
Config.TenueName = {
    Tenue1 = '1ére Tenue',
	Tenue2 = '2ème Tenue',
	Tenue3 = '3ème Tenue',
	Tenue4 = '4ème Tenue',
	Tenue5 = '5ème Tenue',
	Tenue6 = '6ème Tenue',
	Tenue7 = '7ème Tenue',
	TenueCivile = 'Remettre votre tenue Civile',
	GPBAdd = 'Mettre un Gilet Pare-Balles',
    GPBRemove = 'Enlever le Gillet Pare-Balles'
}

Config.TenueGrade = {
    Tenue1 = 0,
	Tenue2 = 7,
	Tenue3 = 7,
	Tenue4 = 7,
	Tenue5 = 7,
	Tenue6 = 7,
	Tenue7 = 7,
	TenueCivile = 7,
	GPBAdd = 7,
    GPBRemove = 7
}

TenueCivile = function()
    ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin)
        TriggerEvent('skinchanger:loadSkin', skin)
    end)
end

TenueSansGPB = function()
	local model = GetEntityModel(PlayerPedId())
	TriggerEvent('skinchanger:getSkin', function(skin)
		if model == GetHashKey("mp_m_freemode_01") then
			clothesSkin = {
              ['bproof_1'] = 0,
			}
		else
			clothesSkin = {
				['bproof_1'] = 0,
			}
		end
		TriggerEvent('skinchanger:loadClothes', skin, clothesSkin)
	end)
end

TenueAvecGPB = function()
	local model = GetEntityModel(PlayerPedId())
	TriggerEvent('skinchanger:getSkin', function(skin)
		if model == GetHashKey("mp_m_freemode_01") then
			clothesSkin = {
              ['bproof_1'] = 80,
			}
		else
			clothesSkin = {
				['bproof_1'] = 0,
			}
		end
		TriggerEvent('skinchanger:loadClothes', skin, clothesSkin)
	end)
end

Tenue1 = function()
	local model = GetEntityModel(PlayerPedId())
	TriggerEvent('skinchanger:getSkin', function(skin)
		if model == GetHashKey("mp_m_freemode_01") then
			clothesSkin = {
              ['tshirt_1'] = 127,  ['tshirt_2'] = 0,
              ['torso_1'] = 311,   ['torso_2'] = 0,
              ['decals_1'] = 0,    ['decals_2'] = 0,
              ['arms'] = 1,
              ['pants_1'] = 136,   ['pants_2'] = 0,
              ['shoes_1'] = 119,   ['shoes_2'] = 0,
              ['helmet_1'] = -1,   ['helmet_2'] = 0,
              ['bags_1'] = 71,      ['bags_2'] = 0,
              ['mask_1'] = 129, ['mask_2'] = 0,
              ['chain_1'] = 8,     ['chain_2'] = 0,
              ['bproof_1'] = 0,						
              ['ears_1'] = -1,      ['ears_2'] = 0,
			}
		else
			clothesSkin = {
				['bags_1'] = 0, ['bags_2'] = 0,
				['tshirt_1'] = 15,['tshirt_2'] = 2,
				['torso_1'] = 65, ['torso_2'] = 2,
				['arms'] = 36, ['arms_2'] = 0,
				['pants_1'] = 38, ['pants_2'] = 2,
				['shoes_1'] = 12, ['shoes_2'] = 6,
				['mask_1'] = 0, ['mask_2'] = 0,
				['bproof_1'] = 0,
				['chain_1'] = 0,
				['helmet_1'] = -1, ['helmet_2'] = 0,
			}
		end
		TriggerEvent('skinchanger:loadClothes', skin, clothesSkin)
	end)
end
```

\
\
\
\
**Configurez les voitures/hélicoptères/bateaux :** \
\- Ligne #604 à #625 :&#x20;

```lua
police = {
    vehicles = {                                                         -- category = Separator en rageui 
car = {                                                           -- Label = nom ig qui apparaitra sur le bouton 
    {model = "police2", label = "Dodge Charger ", minimum_grade = 0, restockprice = 1000}, 
    {model = "police3", label = "Ford Explorer ", minimum_grade = 0, restockprice = 1000}, 
    {model = "police4", label = "Vapid Cruiser (Banalisé) ", minimum_grade = 0, restockprice = 1000}, 
    {model = "police5", label = "Dodge Charger (Banalisé) ", minimum_grade = 0, restockprice = 1000}, 
    {model = "police6", label = "Chevrolet Tahoe (K9) ", minimum_grade = 0, restockprice = 1000}, 
    {model = "police7", label = "Ford Crown Vitoria ", minimum_grade = 0, restockprice = 1000}, 
    {model = "policeb", label = "Police Moto v2 (Traffic Units)", minimum_grade = 3, restockprice = 1000},	
    {model = "Riot", label = "Blinder", minimum_grade = 2, restockprice = 12000},
	},
helico = {
    {category = "↓ ~b~Hélicoptère(s) ~s~↓"},                           -- Model = nom de spawn du véhicule
    {model = "polmav", label = "Hélico du LSPD", minimum_grade = 0, restockprice = 1000}
		},
bateaux = {
    {category = "↓ ~b~Bateau(x) ~s~↓"},                           -- Model = nom de spawn du véhicule
    {model = "predator", label = "Predator du LSPD", minimum_grade = 0, restockprice = 1000}
		}
	}
}
```

\
\
\
\
**Configurez les chiens de l'unité K9 :** \
\- Ligne #630 à #644 :&#x20;

```lua
Config.Dog = {
    Job = 'police',
    Model = 351016938,
    TpDistance = 50.0,
    Sit = {
        dict = 'creatures@rottweiler@amb@world_dog_sitting@base',
        anim = 'base'
    },
    Drugs = {'coke1g', 'coke10g', 'cokebrick', 'opium1g', 'opium10g', 'opiumbrick', 'weed4g', 'weed20g', 'weedbrick', 'crack1g', 'crack10g', 'crackbrick', 'heroine1g', 'heroine10g', 'heroinebrick', 'ketamine1g', 'ketamine10g', 'ketaminebrick', 'lsd1g', 'lsd10g', 'lsdbrick', 'meth1g', 'meth10g', 'methbrick', 'morphine1g', 'morphine10g', 'morphinebrick', 'leanflacon', 'lean10g', 'lean1g', 'shitplaque', 'shit10g', 'shit1g'}, -- ajouter la drogue détectable ici ! (sous forme de nom item)
}

Strings = {
    ['no_drugs'] = 'Aucun indice de drogues trouvé.', 
    ['drugs_found'] = 'Votre chien a trouvé une trace de drogues !'
}
```

\
\
\
\
**Configurez le système d'intéractions en ox\_target :** \
\- Ligne #662 à #690 :&#x20;

```lua
EzConfig                            = {}

EzConfig.EnableHandcuffTimer        = true -- Enable handcuff timer? will unrestrain player after the time ends.
EzConfig.HandcuffTimer              = 10 * 60000 -- 10 minutes.
EzConfig.NormalColor				= '6AEFFF'
EzConfig.PoliceColor				= '6A6EFF'
EzConfig.ShowNotificationText       = "La personne doit être menottée où lever les bras"
EzConfig.RequiredItem               = "Vous avez besoin de menotte ou d'une corde"
EzConfig.Unrestrained_timer         = "Vous sentez que vos menottes deviennent fragiles"
EzConfig.search                     = "Fouiller l'individu"
EzConfig.searchcops					= "Fouiller de force"
EzConfig.search_img                 = "fa-solid fa-person"
EzConfig.handcuff                   = "Menotter"
EzConfig.handcuff_img               = "fa-solid fa-handcuffs"
EzConfig.escort                     = "Escorter"
EzConfig.escort_img                 = "fa-solid fa-people-pulling"
EzConfig.putveh                     = "Mettre dans véhicule"
EzConfig.putveh_img                 = "fa-solid fa-people-pulling"
EzConfig.ID                         = "Regarder carte identité"
EzConfig.ID_img                     = "fa-solid fa-id-card"
EzConfig.ID_driver                  = "Regarder permis de conduire"
EzConfig.ID_driver_img              = "fa-solid fa-id-card-clip"
EzConfig.outveh                     = "Sortir du véhicule"
EzConfig.outveh_img                 = "fa-solid fa-people-pulling"
EzConfig.billing_title              = "Facture"
EzConfig.input                      = "Entrer une valeur"
EzConfig.billing                    = "Faire une facture"
EzConfig.billing_img                = "fa-solid fa-euro-sign"
EzConfig.Unemployed                 = "Vous êtes pas dans une entreprise"
```

\
\
\
\
**Configurez le système d'intéractions en ox\_target :** \
\- Ligne #698 à #727 :&#x20;

```lua
Config.discordwebhooklink = "" -- lien logs

Config.CentreDeLaPrison = vector3(831.84643554688, -1299.0463867188, 28.245313644409) -- position du millieu de la prison pour eviter les évasions !
Config.PosRetraitDetention = vector3(835.42822265625, -1295.5721435547, 27.244916915894) -- position de Unjail
Config.PosMiseEnDetention = vector3(831.73614501953, -1301.5067138672, 27.244915008545) -- position de Jail
Config.JailTimeSyncInterval = 60000 * 1  -- pas touche
Config.NotMenuForTenueGav = false -- si false, menu ox pour ce mettre en tenue gav, si true, pas de menu et application de la tenue a la mise en détention ;)

Config.Uniforms = { -- Pour changer la tenue en prison 
	prison_wear = {
		male = {
			['tshirt_1'] = 15,  ['tshirt_2'] = 0,
			['torso_1']  = 146, ['torso_2']  = 0,
			['decals_1'] = 0,   ['decals_2'] = 0,
			['arms']     = 0,   ['pants_1']  = 3,
			['pants_2']  = 7,   ['shoes_1']  = 12,
			['shoes_2']  = 12,  ['chain_1']  = 50,
			['chain_2']  = 0
		},
		female = {
			['tshirt_1'] = 3,   ['tshirt_2'] = 0,
			['torso_1']  = 38,  ['torso_2']  = 3,
			['decals_1'] = 0,   ['decals_2'] = 0,
			['arms']     = 2,   ['pants_1']  = 3,
			['pants_2']  = 15,  ['shoes_1']  = 66,
			['shoes_2']  = 5,   ['chain_1']  = 0,
			['chain_2']  = 2
		}
	}
}
```

{% endtab %}

{% tab title="📦 Evidences" %}
Insérer ceci dans votre ***ox\_inventory/data/evidence.lua*** :&#x20;

```
{
  coords = vec3(850.89410400391, -1312.0444335938, 28.244922637939),
  target = { -- qtarget support
    name = 'police_evidence', -- name of zone must be uniuqe
    loc = vec3(850.89410400391, -1312.0444335938, 28.244922637939),
    length = 1.4,
    width = 3.2,
    heading = 0,
    minZ = 29.09,
    maxZ = 31.89
  }
},
```

{% endtab %}

{% tab title="📦 Coffre/Stock" %}
Insérer ceci dans votre ***ox\_inventory/data/stashes.lua*** :&#x20;

```
	{
		coords = vec3(0.0,0.0,-1000.0),
		name = 'persolspdlocker',
		label = 'Vestaire Personnel des Membres du L.S.P.D',
		owner = true,
		slots = 10,
		weight = 15000,
		groups = {['police'] = 0}
	},

	{
		coords = vec3(0.0,0.0,-1000.0),
		name = 'commonlspdlocker',
		label = 'Coffre Commun des Membres du L.S.P.D',
		slots = 100,
		weight = 100000,
		groups = {['police'] = 0}
	},
------------ SI VOUS AVEZ ACTIVER LES DEUX POINT :
	{
		coords = vec3(0.0,0.0,-1000.0),
		name = 'persolspdlocker2',
		label = 'Vestaire Personnel des Membres du L.S.P.D',
		owner = true,
		slots = 10,
		weight = 15000,
		groups = {['police'] = 0}
	},

	{
		coords = vec3(0.0,0.0,-1000.0),
		name = 'commonlspdlocker2',
		label = 'Coffre Commun des Membres du L.S.P.D',
		slots = 100,
		weight = 100000,
		groups = {['police'] = 0}
	},
-------------------- SINON NE LES INSERER PAS !

	{
		coords = vec3(0.0,0.0,-1000.0),
		name = 'lockerforweaponlspd',
		label = 'Stock d\'armes L.S.P.D',
		slots = 100,
		weight = 100000,
		groups = {['police'] = 0}
	},
```

\-
{% endtab %}

{% tab title="🎉 Enjoy !" %}
Votre job police/LSPD est enfin prêt à être utilisée ! 🎉
{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ezdeveloppement.gitbook.io/ezdev-script/script-ez-jobs/ez-policejob.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
