# FAQ

## Serveurs Haut de Gamme ?

Nos machines intègrent les toutes dernières technologies pour vous garantir des serveurs toujours plus performants. Nos machines sont équipées de processeur surpuissant (5GHz+) car les serveurs Garry's Mod sont très gourmands en puissance.

## **En** combien **de temps suis-je livré ?**

Généralement le paiement est accepté instantanément, l'installation du serveur ce fait en quelques secondes ! Si vous rencontrez des problèmes lors de la livraison, vous pouvez contacter notre support.

## **Ressources Dédiées ?**

Afin de vous garantir un serveur sans lags et sans crash, nous vous louons des serveurs avec des ressources dédiées. Vous ne partagez pas les ressources avec les autres clients sur la machine. Contrairement à d'autres hébergeurs, vous n'êtes pas à la merci des serveurs voisins.

## **Quels moyens de paiement acceptez-vous ?**

Vous pouvez acheter et renouveler vos serveurs avec PayPal, Carte de Crédit, Paysafecard et BitCoins. Si vous avez des questions, n'hésitez pas à contacter le support.


# Créer Collection Worskhop

Ce tutoriel vous permettra de créer une collection workshop et la liée à votre serveur Gmod.

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928109/0403FEBD1A1B7DD48C4E59FA28893DE2EAD5AACF/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928129/443BF17FC0DF721783067F32BA19B4A66AA356F6/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928171/C221FCCE39B36C6EA4426F981EB3CF6493D298E3/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928216/9151A947433295E80E7DB194DCD117DBA184CAFB/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928245/1C64A44E51C9269A44CA14539FF2F66AA13D3558/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928268/131F6B914251E35DA1CA53F2690C4D5496F7C6E8/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928289/70EAB60BBD900575082BB33A08A2B682D40B8748/)

## Ajouter des addons dans votre collection

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928048/A9A61E41BB2B5DF0394CEF3C0492C90371C2E092/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928071/6BF3481CB9A3BE84D4E2CBD6F318EA5BCDBF2F12/)

![](https://steamuserimages-a.akamaihd.net/ugc/525014862223928097/D874036081F8C240BC97FF6204747EB13CD686FE/)

## Liée la collection à votre serveur

Une fois votre collection publiée il vous suffit de copié l'id de la collection qui ce trouvent dans le lien de la collection après ?id=

![](https://2882000225-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le6I4XabbkYXO5L5zMt%2F-LfBNsW8hvcOXNLgo3nO%2F-LfBQoJwvyM2GPVIqqxj%2FScreenshot%202019-05-18%20at%2021.32.16.png?alt=media\&token=efd90140-3d3a-4cc9-a669-f8002929814b)

Ensuite rendez vous dans l'onglet configuration de votre serveur et mettez l'id de la collection dans la case "Workshop Collection ID" après Sauvegarder les paramètres et redémarrer le serveur.

![](https://2882000225-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le6I4XabbkYXO5L5zMt%2F-LfBknoONYZk9s9cc2-p%2F-LfBl7zDXyUfSjIWmmuf%2Fimage.png?alt=media\&token=e6bc7ad7-f8cc-45e2-8bf2-9a7a926373a6)

Le serveur vas télécharger tout les addons de la collection et à chaque redémarrage il vas vérifier si vous avez enlever ou ajouté des addons. Si c'est le cas les modifications de la collection vont s'actualisé sur le serveur et vous aurez les nouveau addons installé.


# FAQ

## **Les armes et l'argent flottent en l'air ?**

\
Soyez certain d'avoir les contents de Counter-Strike Source installés et montés dans le fichier mount.cfg.

## **Je ne peux prendre aucune arme !**

\
Passez GM.Config.license = false dans le fichier settings.lua ou demandez une licence d'arme au commissaire ou au maire.

## **Couldn't include file darkrp\gamemode\cl\_init.lua (File not found)**

\
Soyez certain d'avoir "+gamemode darkrp" dans les options de lancement du serveur.\
Assurez vous aussi d'avoir le dossier du DarkRP (nommé darkrp en minuscules) dans le dossier gamemodes du serveur.

## **Pourquoi le Maire ne peut il pas ajouter des lois, contrôler le couvre feu, ou lancer une lotterie ?**

\
Vous avez probablement oublié le champs 'mayor' dans la configuration du job. Ajoutez ceci dans le job Maire:

```
mayor = true,
```

A moins que vous souhaitiez créer un job de Maire personnalisé, cette étape n'est pas nécessaire si vous possédez la version 2.5.0 du DarkRP, n'oubliez pas, ne touchez pas les fichier core du DarkRP.

## **J'ai téléchargé le DarkRP depuis garrysmod.org et...**

\
Veuillez utiliser la dernière version Git/SVN du DarkRP [ICI](https://github.com/FPtje/DarkRP).

## **Comment puis je obtenir le nom de mon équipe (job) ?**

```
team.GetName(ply:Team())
```

## **J'ai trouvé un bug dans le DarkRP. Que puis je faire pour qu'il soit résolu ?**

\
Veuillez lire [CECI](https://github.com/FPtje/DarkRP/wiki/HOW-TO-REPORT-ISSUES) et reportez le problème [ICI](https://github.com/FPtje/DarkRP/issues/new)


# Jobs

Ajout et configuration des jobs.

### Schéma

```lua
    TEAM_PIRATE = DarkRP.createJob("Pirate", { -- Ce TEAM_PIRATE est utilisé pour les AddDoorGroup ou ajouter une porte à uniquement cette Team. Donc, ne jamais utiliser le même TEAM_
        color = Color(80, 5, 255, 0), -- Couleur du job dans le Chat / Tableau de bord
        model = "models/player/swat.mdl", -- Model; pour en ajouter plusieurs utilisez {"models/../model1.mdl","models/../model2.mld},  NOTEZ la virgule après l'accolade.
        description = [[Description.]], --Description pour le job.
        weapons = {"med_kit"}, -- Les armes du job. Séparez les avec une virgule ex: "med_kid", "armor_kit" et toujours finir le dernier sans une virgule.
        command = "pirate", --Commande de chat pour devenir de ce job. N'utilisez jamais le même sur d'autres TEAM_.
        max = 5, -- Nombre maximum de joueurs pouvant être dans le job.
        salary = 200, -- Salaire payé.
        admin = 0, -- Faut-il être admin? 1 pour oui, 0 pour non.
        vote = true, -- Ont-ils besoin de voter pour devenir de ce job ? true pour oui, false pour non.
        hasLicense = true, -- Ont-ils une licence pour les armes ?
     })
```

### &#x20;Schéma SWAT

```lua
     TEAM_SWAT = DarkRP.createJob("S.W.A.T", {
        color = Color(80, 45, 0, 255),
        model = "models/player/swat.mdl",
        description = [[C'est un job special donateur,
                votre devoir est de soigner durant les operations.
                Vous devez rester dans le departement.
                Sauf si on vous dit le contraire.
                Faites tout ce que vous pouvez pour garder la ville en securite.
                Vous pouvez soigner votre equipe mais c'est optionnel si un medecin est present.
                S'il n'y a pas de maires, vous etes le chef.]],
        weapons = {"arrest_stick", "unarrest_stick", "weapon_glock2", "weapon_ak472", "ls_sniper", "weapon_m42", "weapon_mp52", "stunstick", "door_ram", "weaponchecker"},
        command = "swat",
        max = 1,
        salary = 200,
        admin = 0,
        vote = true,
        hasLicense = true,
     })
```

### **Explications**

TEAM\_SWAT = Variable Lua de l'équipe. C'est utilisé pour certaines choses comme choisir qui peut acheter telles armes (autorisé uniquement la TEAM\_SWAT par exemple).

DarkRP.createJob("S.W\.A.T", = S.W\.A.T est le nom du job affiché dans le tableau de bord.

color = Color(0,0,153,255), = C'est la couleur du job affiché dans le tableau de bord, en format RGB. Vous pouvez chercher la couleur parfaite en utilisant l'outil de couleur du jeu.

model = "models/player/barney.mdl", = Le model du joueur que vous avez une fois que vous apparaissez. Si le client n'a pas le model, il aura un model ERROR à la place.

{% hint style="info" %}
&#x20;Depuis la révision 529, vous pouvez ajouter plusieurs models pour chaque job, quand un joueur choisit le job dans le menu F4, un menu GUI apparaît avec tous les models possibles. Pour ajouter plus de 1 model, vous devez les lister entre les accolades {}, séparés par des virgules, ex : {"models/player/barney.mdl","models/player/alyx.mdl"}.
{% endhint %}

description = \[\[Tuer et proteger des terroristes]], = La description de ce métier qui peut être vu dans le menu F4. Cette fonctionnalité est rarement utilisée, mais peut aidée.

weapons = {"weapon\_deagle2", "weapon\_mp52", "weapon\_pumpshotgun2"}, = Les armes avec lesquelles on apparaît une fois dans le métier. Vous devez utiliser les noms d'entités d'armes ou ça ne marchera pas.

"swat", = La commande pour devenir ce métier. (Assurez vous 'exclure le slash / car DarkRP le fait automatiquement).

max = 3, = Combien de joueurs peuvent devenir de ce job en même temps ?

salary = 300, = Salaire gagné durant le jour de paie.

admin = 0, = Qui peut être de ce job ? (0 = tout le monde, 1 = admin, 2 = superadmin uniquement)

vote = true, = Avez-vous besoin de voter pour être dans cette team ? (false = non et true = oui)

hasLicense = true, = Est-ce que cette team nécessite une licence d'arme ? (false = non et true = oui)

### &#x20;**Exemples**

```lua
     TEAM_DRUG = DarkRP.createJob("Vendeur de drogue", {
	color = Color(80, 45, 0, 255),
	model = "models/Eli.mdl",
	description = [[Vous etes un vendeur de drogue. Vous vendez des drogues anonymes. Faites des /advert.]],
	weapons = {},
	command = "drug",
	max = 3,
	salary = 15,
	admin = 0,
	vote = false,
	hasLicense = false
     })
```

```lua
     TEAM_SWAT = DarkRP.createJob("S.W.A.T", {
	color = Color(80, 45, 0, 255),
	model = "models/player/swat.mdl",
	description = [[C'est un job special donateur,
                votre devoir est de soigner durant les operations.
                Vous devez rester dans le departement.
                Sauf si on vous dit le contraire.
                Faites tout ce que vous pouvez pour garder la ville en securite.
                Vous pouvez soigner votre equipe mais c'est optionnel si un medecin est present.]],
	weapons = {"arrest_stick", "unarrest_stick", "weapon_glock2", "weapon_ak472", "ls_sniper", "weapon_m42", "weapon_mp52", "stunstick", "door_ram", "weaponchecker"},
	command = "swat",
	max = 3,
	salary = 100,
	admin = 0,
	vote = true,
	hasLicense = true,

     })
```

```lua
     TEAM_SWATM = DarkRP.createJob("Medecin S.W.A.T", {
	color = Color(80, 45, 0, 255),
	model = "models/player/swat.mdl",
	description = [[C'est un job special donateur,
                votre devoir est de soigner durant les operations.
                Vous devez rester dans le departement.
                Sauf si on vous dit le contraire.
                Faites tout ce que vous pouvez pour garder la ville en securite.
		Vous devez garder votre team vivante en les soignant.]],
	weapons = {"arrest_stick", "unarrest_stick", "weapon_glock2", "weapon_ak472", "ls_sniper", "weapon_m42", "weapon_mp52", "stunstick", "door_ram", "weaponchecker", "med_kit"},
	command = "swatm",
	max = 3,
	salary = 100,
	admin = 0,
	vote = true,
	hasLicense = true,

     })
```

```lua
     TEAM_SWATC = DarkRP.createJob("Chef S.W.A.T", {
        color = Color(80, 45, 0, 255),
        model = "models/player/swat.mdl",
        description = [[C'est un job special donateur,
                votre devoir est de soigner durant les operations.
                Vous devez rester dans le departement.
                Sauf si on vous dit le contraire.
                Faites tout ce que vous pouvez pour garder la ville en securite.
                Vous pouvez soigner votre equipe mais c'est optionnel si un medecin est present.
                S'il n'y a pas de maires, vous etes le chef.]],
        weapons = {"arrest_stick", "unarrest_stick", "weapon_glock2", "weapon_ak472", "ls_sniper", "weapon_m42", "weapon_mp52", "stunstick", "door_ram", "weaponchecker", "med_kit"},
        command = "swat",
        max = 1,
        salary = 200,
        admin = 0,
        vote = true,
        hasLicense = true,
     })
```

## **Champs Avancés**

Vous pouvez créer des travaux personnalisés dans DarkRP. Cependant, il y a beaucoup de choses à tripoter. Cette page explique chaque "champ". Vous pouvez créer des emplois personnalisés dans DarkRP. Sinon, il y a beaucoup de choses.

### Exemple avec toutes les fonctions

Voici un exemple avec toutes les fonctions disponibles

```lua
TEAM_EXEMPLE = DarkRP.createJob("Team exemple", {
	color = Color(255, 255, 255, 255),
	model = {
		"models/player/Group03/Female_01.mdl",
		"models/player/Group03/Female_02.mdl"
		},
	description = [[Ce texte sert en description de la team.]],
	weapons = {"weapon_p2282"},
	command = "example",
	max = 0.7, -- 70% des joueurs peuvent avoir le job. Mettez un nombre entier pour fixer une limite absolue.
	salary = 45,
	admin = 0,
	vote = false,
	hasLicense = false,

	-- Les fonctions suivantes sont OPTIONNELS. Si vous ne les utilisez pas, ou vous ne changez pas les valeurs par défaut, RETIREZ les.
	NeedToChangeFrom = TEAM_CITIZEN,
	customCheck = function(ply) return ply:getDarkRPVar("money") > 10000 end,
	CustomCheckFailMsg = "Vous n'avez pas assez d'argent!", -- alternative: CustomCheckFailMsg = function(ply, jobTable) return ply:getDarkRPVar("money") < 5000 and "Vous etes pauvre" or "Vous n'avez pas assez d'argent!" end,
	modelScale = 1.2,
	maxpocket = 20,
	maps = {"rp_downtown_v2", "gm_construct"},
	candemote = false,
	mayor = false,
	chief = false,
	medic = false,
	cook = false,
	hobo = false,
	ammo = {
		["pistol"] = 60,
	},
        category = "Other", -- Le nom de la catégorie. Note : La catégorie doit être crée !
        sortOrder = 100, -- La position de cette chose dans sa catégorie. Nombre inférieur signifie qu'il sera plus haut.
        playerClass = "player_darkrp",
	CanPlayerSuicide = function(ply) return false end,
	PlayerCanPickupWeapon = function(ply, weapon) return true end,
	PlayerDeath = function(ply, weapon, killer) end,
	PlayerLoadout = function(ply) return true end,
	PlayerSelectSpawn = function(ply, spawn) end,
	PlayerSetModel = function(ply) return "models/player/Group03/Female_02.mdl" end,
	PlayerSpawn = function(ply) end,
	PlayerSpawnProp = function(ply, model) end,
	RequiresVote = function(ply, job) for k,v in pairs(player.GetAll()) do if IsValid(v) and v:IsAdmin() then return false end end return true end, -- Les gens ont besoin de faire un vote lorsqu'il n'y a pas d'administrateur autour
	ShowSpare1 = function(ply) end,
	ShowSpare2 = function(ply) end,
	OnPlayerChangedTeam = function(ply, oldTeam, newTeam) end,
	canStartVote = function(ply) return ply:Distance(SomeNPC) < 200 end,
	canStartVoteReason = "Vous devez etre a proximite de certains PNJ", -- alternative: canStartVoteReason = function(ply, jobTable) return ply:Distance(SomeNPC) > 5000 and "Vous etes trop loin de cerrtains PNJ" or "Vous devez etre a proimite de certains PNJ" end,
        buttonColor = Color(255, 255, 255, 255), -- Le couleur de le bouton dans le menu F4
        label = "Super job", -- Optionnel: Le texte sur le bouton dans le menu F4
})
```

### Explications

**color** ([Color](https://wiki.darkrp.com/index.php/Lua/Classes/Color)) (required) : La couleur de la team.

**model** ([string](https://wiki.darkrp.com/index.php/Lua/Classes/string)/[table](https://wiki.darkrp.com/index.php/Lua/Classes/table)) (required) : Le model de la team. Cela peut être une chaîne de caractères ou une table de caractères. Deux exemples :

A string, players who have this job have ONE model, namely the one given in the string:

```lua
model = "models/player/Group03/Female_01.mdl"
```

A table, the model of the player holding this job is randomly chosen from the list of given models:

```lua
model = {
		"models/player/Group03/Female_01.mdl",
		"models/player/Group03/Female_02.mdl"
	}
```

**description** ([string](https://wiki.darkrp.com/index.php/Lua/Classes/string)) (required)

* The description of a job shows up in the F4 menu when selecting the job. Describe what your job does and what the use of it is.

**weapons** ([table](https://wiki.darkrp.com/index.php/Lua/Classes/table)) (required)

* The list of weapons people with this job spawn with (besides the default weapons).
* The following example means that the job spawns with the weapons in the list:

```lua
weapons = {"arrest_stick", "unarrest_stick", "weapon_deagle2", "stunstick", "door_ram", "weaponchecker"}
```

**command** ([string](https://wiki.darkrp.com/index.php/Lua/Classes/string)) (required)

* What do you have to enter in chat to get this job?
* Example: type /example in chat to get the example job

```lua
command = "example"
```

* If the job requires voting, a command "/voteexample" is added.

{% hint style="info" %}
The "/" at the start of the command should be omitted.
{% endhint %}

**max** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number)) (required)

* How many people can have this job at any given time.
* Set to a number between 0 and 1 to make it a percentage. E.g. max = 0.3 means at most 30% of the players can have this job.
* Set to a whole number to set an absolute limit.

**salary** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number)) (required)

* The salary this job gets.

**admin** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number)) (required)

* What (admin) access you need to get this job.

```lua
admin = 0 -- anyone can get this job
admin = 1 -- only admins can get this job
admin = 2 -- only superadmins can get this job
```

* If you want to customize this further (with donators, moderators and whatnot), look at customCheck (scroll down).

### **vote** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

* Do players need to create a vote to get this job? true for yes, false for no.

### **hasLicense** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

* Does this job get a gun license for free? true for yes, false for no.
* It's useful to give the cops gun licenses.

### **NeedToChangeFrom** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number)/[table](https://wiki.darkrp.com/index.php/Lua/Classes/table))

* You can only get this job if you had a specific other job first.
* Example: You can only become a chief of police when you're already a CP:

```lua
NeedToChangeFrom = TEAM_POLICE
```

* Example 2: You can only become a mayor if you're either a CP or a chief:

```lua
NeedToChangeFrom = {TEAM_CHIEF, TEAM_POLICE}
```

### **customCheck** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

* See [here](https://wiki.darkrp.com/index.php/Donator_Job_configuration) for an example with donator jobs.
* Function arguments are: [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **CustomCheckFailMsg** ([string](https://wiki.darkrp.com/index.php/Lua/Classes/string)/[function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

* Custom message when someone tries and fails to get the job.
* See [here](https://wiki.darkrp.com/index.php/Donator_Job_configuration) for an example with donator jobs.

If using this as a function, the arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [table](https://wiki.darkrp.com/index.php/Lua/Classes/table) jobTable

### **modelScale** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number))

* How big are the players that have this job?

```lua
modelScale = 1 -- the default size
modelScale = 1.2 -- 120% of the default size
modelScale = 0.9 -- 90% of the default size.
```

* Don't make it too big or too small, people will get trouble with jumping and crouching.

### **maxpocket** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number))

* The amount of items that can fit in the pocket of people having this job. If not set, it will revert to the setting in settings.lua, which is set to 10 by default.

### **maps** ([table](https://wiki.darkrp.com/index.php/Lua/Classes/table))

In what maps this job will be available. This is just a list of maps.

### **candemote** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

Can people who have this job be demoted? By default hobo's and citizens cannot be demoted because it has no use to demote them.

### **mayor** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

People with this job can do things the mayor can do (create a lottery, accept warrants etc.).

### **chief** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

People with this job can do things the chief can do.

### **medic** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

People with this job can do things the medic can do.

### **cook** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

People with this job can do things the cook can do.

### **hobo** ([boolean](https://wiki.darkrp.com/index.php/Lua/Classes/boolean))

People with this job can do things the hobo can do.

### **ammo** ([table](https://wiki.darkrp.com/index.php/Lua/Classes/table))

The ammo people spawn with.

The keys in the table are the ammo names and the values are how much of each ammo is given.

### **category** ([string](https://wiki.darkrp.com/index.php/Lua/Classes/string))

The category it belongs to in the F4 menu.

{% hint style="info" %}
This will throw an error if the category doesn't exist! Please see [the categories page](https://wiki.darkrp.com/index.php/DarkRP:Categories).
{% endhint %}

### **category** ([number](https://wiki.darkrp.com/index.php/Lua/Classes/number))

Location in the category. Lower number means more on top of the list. By default this is set 100.

### More advanced fields

### **playerClass** ([string](https://wiki.darkrp.com/index.php/Lua/Classes/string))

The GMod player class to assign to the player when they change to this job.

### **CanPlayerSuicide** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

A function that decides whether players with this job can commit suicide.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **CanPlayerSuicide** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

A function that decides whether players with this job can commit suicide.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **PlayerCanPickupWeapon** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

A function that decides whether players with this job can pick up a certain weapon.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [Weapon](https://wiki.darkrp.com/index.php/Lua/Classes/Weapon) wep

### **PlayerDeath** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player dies.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [Entity](https://wiki.darkrp.com/index.php/Lua/Classes/Entity) inflictor
* [Entity](https://wiki.darkrp.com/index.php/Lua/Classes/Entity) killer

### **PlayerLoadout** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player gets his weapons. Return true to prevent him from getting his default weapons!

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **PlayerSelectSpawn** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a spawn is selected for this player.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [Entity](https://wiki.darkrp.com/index.php/Lua/Classes/Entity) spawn

### **PlayerSetModel** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

A function that decides what the model should be. Return a [string](https://wiki.darkrp.com/index.php/Lua/Classes/string) to override the default model.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **PlayerSpawn** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player spawns.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **PlayerSpawnProp** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player attempts to spawn a prop.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [string](https://wiki.darkrp.com/index.php/Lua/Classes/string) model

### **RequiresVote** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Decides whether the player needs to make a vote to get the job.

{% hint style="info" %}
Overrides the vote field! (the vote field will have no effect when this is set)
{% endhint %}

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [number](https://wiki.darkrp.com/index.php/Lua/Classes/number) team

Example :

People need to make a vote if there are three or more people who have this job. People DON'T need to make a vote if there are fewer than three people with this job.

\
Autre :

VIPS can skip the vote

### **ShowSpare1** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player presses the F1 key.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **ShowSpare2** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player presses the F2 key.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply

### **OnPlayerChangedTeam** ([function](https://wiki.darkrp.com/index.php/Lua/Classes/function))

Called when a player switches to this job.

Arguments are:

* [Player](https://wiki.darkrp.com/index.php/Lua/Classes/Player) ply
* [number](https://wiki.darkrp.com/index.php/Lua/Classes/number) oldTeam
* [number](https://wiki.darkrp.com/index.php/Lua/Classes/number) newTeam


# Jobs VIP

Ajouter et configurer un job pour un groupe d'utilisateur spécifique.

## Créer le groupe d'utilisateur (VIP)

Pour utiliser cela, vous devez tout d'abord avoir quelques joueurs connectés sur le serveur pour pouvoir tester les commandes et créer par la suite le groupe d'utilisateur (donateur, vip ou ce que vous voulez). Pour créer un groupe d'utilisateur sur ulx, la commande est "ulx adduser nom donateur" (avec le nom de la personne et votre groupe d'utilisateur au lieu de donateur). Vous pouvez aussi écrire "ulx adduserid steamid donateur".

* Assurez vous que vous êtes utilisateur (FAdmin setroot votrenom dans la console rcon/serveur)
* Avoir le donateur sur le serveur
* Après avoir appuyé sur TAB, cliquer sur le nom du joueur et sur "Set access" (premier bouton)
* Cliquer de nouveau
* Suivre les instructions à l'écran et appelez votre groupe d'utilisateur "donateur" ou "vip" ou ce que vous voulez. Assurez vous cependant de retenir le nom du groupe.
* Quand vous créez votre job, utilisez ceci:

```lua
TEAM_DONATORJOB = DarkRP.createJob("Cuisinier", { -- Nom
    color = Color(238, 99, 99, 255), -- Couleur de la team
    model = "models/player/mossman.mdl", -- Modèle du joueur
    description = [[En cuisinier, c'est votre responsabilite de nourrir les personnes de la ville. 
                            Vous pouvez acheter un micro onde et vendre votre nourriture: /Buymicrowave]],  -- Description du job
    weapons = {}, -- Armes additionnelles
    command = "Cuisinier", -- Commande pour devenir ce job
    max = 2, -- Nombre de joueurs pouvant avoir le job au maximum
    salary = 45, -- Salaire
    admin = 0, -- Faut-il être admin? 2 pour super-admin uniquement, 1 pour admin (et super-admin), 0 pour joueur standard.
    vote = false, -- Faut-il un vote? true pour oui, false pour non.
    hasLicense = false, -- A une licence
    customCheck = function(ply) return ply:GetNWString("usergroup") == "donateur" end -- La fonction customCheck. Mettez nil ou ne rien mettre pour ne pas en avoir.
})
```

* à la dernière partie (customCheck), changez "donateur" en "vip", en "special" ou votre groupe. Si c'est "donateur", vous pouvez laisser comme cela. Vérifiez qu'il y'a bien les guillemets (" ").
* Redémarrer le serveur
* Demandez au donateur de se mettre dans le job correspondant pour vérifier s'il peut y accéder.

### Notes

Si le customCheck dit "Only donators can get the job", alors les administrateurs et super-administrateurs ne pourront pas obtenir le métier car ils ne sont pas "donateur", il faut dans ce cas utiliser ce code pour qu'ils puissent obtenir le métier:

```lua
TEAM_DONATORJOB = DarkRP.createJob("Cuisinier", { -- Nom
    color = Color(238, 99, 99, 255), -- Couleur de la team
    model = "models/player/mossman.mdl", -- Modèle du joueur
    description = [[En cuisinier, c'est votre responsabilite de nourrir les personnes de la ville. 
                            Vous pouvez acheter un micro onde et vendre votre nourriture: /Buymicrowave]],  -- Description du job
    weapons = {}, -- Armes additionnelles
    command = "Cuisinier", -- Commande pour devenir ce job
    max = 2, -- Nombre de joueurs pouvant avoir le job au maximum
    salary = 45, -- Salaire
    admin = 0, -- Faut-il être admin? 2 pour super-admin uniquement, 1 pour admin (et super-admin), 0 pour joueur standard.
    vote = false, -- Faut-il un vote? true pour oui, false pour non.
    hasLicense = false, -- A une licence
    customCheck = function(ply) return ply:GetNWString("usergroup") == "donateur" or ply:IsAdmin() end, -- La fonction customCheck. Mettez nil ou ne rien mettre pour ne pas en avoir.
    CustomCheckFailMsg = "Ce métier est VIP uniquement!" -- Message qui s'affiche lorsque l'utilisateur essaie d'obtenir le job sans avoir le groupe d'utilisateur requis.
})
```

### ULX

Si vous souhaitez utiliser ULX au lieu de FAdmin, remplacez:

```lua
ply:GetNWString("usergroup") == "donateur"
```

Par:

```lua
ply:GetUserGroup() == "donateur"
```

Ou si vous souhaitez autoriser les groupes inhérités, (ex: admin/superadmin), remplacer par:

```lua
ply:CheckGroup("donateur")
```

{% hint style="info" %}
Si vous utilisez ces fonctions, cela ne marchera pas si ULX n'est pas installé.
{% endhint %}

### customCheck sur plusieurs groupes

Voici un exemple de fonction customCheck. Cela fonctionne pour les shipments et les jobs et tout ce qui peut utiliser des fonctions customCheck.

**Donateurs et admins peuvent avoir le job**

```lua
function(ply) return ply:GetNWString("usergroup") == "donateur" or ply:IsAdmin() end
```

**Superadmin uniquement**

```lua
function(ply) return ply:IsSuperAdmin() end
```

**Plusieurs groupes**

**Exemple 1:**

```lua
function(ply) return ply:GetNWString("usergroup") == "donateur" or ply:GetNWString("usergroup") == "vip" end
```

On peut ensuite rajouter d'autres groupes.

**Exemple 2:**

```lua
function(ply) return table.HasValue({"donateur", "vip", "admin", "superadmin", "mingebag"}, ply:GetNWString("usergroup")) end
```

**Exemple 3:**

```lua
customCheck = function(ply) return ply:IsUserGroup("donateur") or ply:IsAdmin() end
```

\--C'est pour les donateurs FAdmin uniquement, et autorise un admin également.--

### Faire en sorte que les clients voient les entités même si ils ne peuvent pas l'acheter

C'est un paramètre par défaut depuis DarkRP 2.5.0. Pour désactiver ceci, mettez GM.Config.hideNonBuyable à true dans settings.lua.

### Messages si on ne passe pas le customCheck

Quand le customCheck dit à un joueur qu'il ne peut pas acheter / avoir quelque chose, Vous pouvez changer le message envoyé au joueur lors de l'échec. Voici comment faire:

```lua
customCheck = function(ply) return ply:IsUserGroup("donateur") end, -- Fonction customCheck
CustomCheckFailMsg = "Vous devez etre un donateur pour devenir un clochard." -- Le message envoyé au client
```

Ceci marche avec les shipments, jobs, munitions, vehicules et jobs personnalisés.

Exemple entier:

```lua
TEAM_HOBO = DarkRP.createJob("Clochard", {
	color = Color(80, 45, 0, 255),
	model = "models/player/corpse1.mdl",
	description = [[Le membre le plus faible de la societe. Tous les joueurs vous voient mal.
		Vous n'avez pas de maison.
		Mendiez pour la nourriture et l'argent.
		Chantez pour avoir de l'argent.
		Faites votre maison dans les bois.]],
	weapons = {"weapon_bugbait"},
	command = "clochard",
	max = 5,
	salary = 0,
	admin = 0,
	vote = false,
	hasLicense = false,
	customCheck = function(ply) return ply:IsUserGroup("donateur") end,
	CustomCheckFailMsg = "Vous devez etre un donateur pour devenir un clochard."
})
```

Vous voulez peut être faire en sorte que le message d'échec soit dynamique (afficher un message lorsque le joueur n'est pas donateur ou un autre lorsque le joueur a trop d'argent).

```lua
customCheck = function(ply) return ply:IsUserGroup("donateur") and ply:getDarkRPVar("money") < 1000 end, -- La fonction customCheck
CustomCheckFailMsg = function(ply) return ply:getDarkRPVar("money") >= 1000 and "Vous etes trop riche!" or not ply:IsUserGroup("donateur") and "Vous devez etre un donateur pour devenir clochard." end, -- The message it sends to the client
```

{% hint style="warning" %}
Ne pas utiliser d'accents (é,è,ê) dans la ligne de la commande (cmd) afin de ne pas faire planter votre métier. Vous devez également ne pas rajouter d'accents que ce soit dans le nom du job ou dans la description sauf si votre fichier est encodé en UTF8.
{% endhint %}


# Entitées

Mettre des équipements ou des entités pour les donateurs uniquement. Vous pouvez faire en sorte de mettre uniquement pour les VIP ou d'autres contraintes.

Le customCheck définit une fonction qui définie si un joueur peut acheter ou non (ou pour un job, le devenir ou non).

Le fonctionnement est le même que les jobs donateurs. Voici quelques exemples:

### Mettre une imprimante d'argent pour les donateurs uniquement.

```lua
DarkRP.createEntity("Imprimante d'argent", {
	ent = "money_printer",
	model = "models/props_c17/consolebox01a.mdl",
	price = 1000,
	max = 2,
	cmd = "buymoneyprinter",
	customCheck = function(ply) return ply:IsUserGroup("Donateur") end
})
```

L'imprimante d'argent est disponible uniquement pour le groupe "Donateur".

### Mettre une AK47 pour les VIP uniquement.

```lua
DarkRP.createShipment("AK47", {
	model = "models/weapons/w_rif_ak47.mdl",
	entity = "weapon_ak472",
	price = 2450,
	amount = 10,
	separate = false,
	pricesep = nil,
	noship = false,
	allowed = {TEAM_GUN},
	customCheck = function(ply) return ply:IsUserGroup("VIP") end
})
```

L'imprimante d'argent est disponible uniquement pour le groupe "VIP".


# Introduction

## Introduction <a href="#introduction" id="introduction"></a>

Welcome to the GarryPanel API documentation.

The API makes use of POST, GET, PATCH and DELETE requests.

## Authentication <a href="#authentication" id="authentication"></a>

> To authorize, use this code:

```php
# With shell, you can just pass the correct header with each request
curl "api_endpoint_here"
  -H "Authorization: Bearer api"
  -H "Content-Type: application/json" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
```

> Make sure to replace `api` with your API key.

You can obtain an API key from the Account API page within Pterodactyl. Remember, protect your API key as if it was a password.

We expect the API key to be included in all API requests to the server in a header that looks like the following:

`Authorization: Bearer api` You must replace `api` with your API key.

## Ratelimits <a href="#ratelimits" id="ratelimits"></a>

To prevent abuse, the GarryPanel API has a ratelimit in place.

Up to 60 requests are allowed per minute.

The amount of requests left can be found within the reply header.

| Header                | Description                                    |
| --------------------- | ---------------------------------------------- |
| x-ratelimit-limit     | The amount of API requests allowed per minute. |
| x-ratelimit-remaining | The amount of API requests left.               |


# List Servers

## List all servers

```
curl "https://garry.host/api/client" \
  -H "Authorization: Bearer api" \
  -H "Content-Type: application/json" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -X GET 
```

#### HTTP Request <a href="#http-request" id="http-request"></a>

`GET https://garry.host/api/client`

> The above command returns JSON structured like this:

```javascript
{
   "object":"list",
   "data":[
      {
         "object":"server",
         "attributes":{
            "server_owner":true,
            "identifier":"d3aac109",
            "uuid":"d3aac109-e5a0-4331-b03e-3454f7e136dc",
            "name":"Survival",
            "description":"",
            "limits":{
               "memory":1024,
               "swap":0,
               "disk":5000,
               "io":500,
               "cpu":200
            },
            "feature_limits":{
               "databases":5,
               "allocations":5
            }
         }
      }
   ],
   "meta":{
      "pagination":{
         "total":1,
         "count":1,
         "per_page":25,
         "current_page":1,
         "total_pages":1,
         "links":[

         ]
      }
   }
}
```


# Get Information

## Get server specific information

```php
curl "https://garry.host/api/client/servers/<id>" \
  -H "Authorization: Bearer api" \
  -H "Content-Type: application/json" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -X GET 
```

#### HTTP Request <a href="#http-request-2" id="http-request-2"></a>

`GET https://garry.host/api/client/servers/<ID>`

| Parameter | Description                                   |
| --------- | --------------------------------------------- |
| ID        | The ID of the server that you are requesting. |

#### URL Parameters <a href="#url-parameters" id="url-parameters"></a>

> The above command returns JSON structured like this:

```javascript
{
   "object":"server",
   "attributes":{
      "server_owner":true,
      "identifier":"d3aac109",
      "uuid":"d3aac109-e5a0-4331-b03e-3454f7e136dc",
      "name":"Survival",
      "description":"",
      "limits":{
         "memory":1024,
         "swap":0,
         "disk":5000,
         "io":500,
         "cpu":200
      },
      "feature_limits":{
         "databases":5,
         "allocations":5
      }
   }
}
```

This endpoint retrieves information for the specified server.

### Get server resource utilization <a href="#get-server-resource-utilization" id="get-server-resource-utilization"></a>

#### URL Parameters <a href="#url-parameters-2" id="url-parameters-2"></a>

```php
curl "https://garry.host/api/client/servers/<id>/utilization" \
  -H "Authorization: Bearer api" \
  -H "Content-Type: application/json" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -X GET
```

#### HTTP Request <a href="#http-request-3" id="http-request-3"></a>

`GET https://garry.host/api/client/servers/<ID>/utilization`

| Parameter | Description                                   |
| --------- | --------------------------------------------- |
| ID        | The ID of the server that you are requesting. |

> The above command returns JSON structured like this:

```javascript
{
   "object":"stats",
   "attributes":{
      "state":"on",
      "memory":{
         "current":375,
         "limit":1024
      },
      "cpu":{
         "current":1.522,
         "cores":[
            0.033,
            0.048,
            0.04,
            0,
            0.031,
            0,
            0.021,
            0.024,
            0.249,
            0.042,
            0.007,
            0,
            0.293,
            0.003,
            0.6,
            0.131
         ],
         "limit":200
      },
      "disk":{
         "current":119,
         "limit":5000
      }
   }
}
```

This endpoint displays resource utilization of the specified server. If the server is offline, current data is displayed as `0` and the state is displayed as `off`.


# Send console command

#### HTTP Request <a href="#http-request-4" id="http-request-4"></a>

`POST https://garry.host/api/client/servers/<ID>/command`

#### URL Parameters <a href="#url-parameters-3" id="url-parameters-3"></a>

| Parameter | Description                                         |
| --------- | --------------------------------------------------- |
| ID        | The ID of the server that you are requesting.       |
| command   | The command that you would like sent to the server. |

```php
  curl "https://garry.host/api/client/servers/<id>/command" \
  -H "Authorization: Bearer api" \
  -H "Content-Type: application/json" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -X POST \
  -d '{ "command": "say test" }'
```

This endpoint sends a command to the server.

You are required to add the `Accept: Application/vnd.pterodactyl.v1+json` and `Content-Type: application/json`headers for this endpoint.

If successful, there will be an empty response body. The server must be online already, otherwise you will receive a `HTTP 412`error.


# Send action

### Send power action <a href="#send-power-action" id="send-power-action"></a>

```php
curl "https://garry.host/api/client/servers/<id>/power" \
  -H "Authorization: Bearer api" \
  -H "Content-Type: application/json" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -X POST \
  -d '{ "signal": "start" }'
```

This endpoint sends a power signal to the server.

You are required to add the `Accept: Application/vnd.pterodactyl.v1+json` and `Content-Type: application/json`headers for this endpoint.

If successful, there will be an empty response body.

#### HTTP Request <a href="#http-request-5" id="http-request-5"></a>

`POST https://garry.host/api/client/servers/<ID>/power`

#### URL Parameters <a href="#url-parameters-4" id="url-parameters-4"></a>

| Parameter | Description                                      |
| --------- | ------------------------------------------------ |
| ID        | The ID of the server that you are requesting.    |
| signal    | The power signal you want to send to the server. |

#### Power Signals <a href="#power-signals" id="power-signals"></a>

| Signal  | Description                                                   |
| ------- | ------------------------------------------------------------- |
| start   | Sends the startup command to the server.                      |
| stop    | Sends the stop command to the server.                         |
| restart | Stops the server then immediately starts it straight after.   |
| kill    | Instantly ends all processes and marks the server as stopped. |

&#x20;Sending the `kill` power signal will forcefully kill the server process and can cause corruption in files, only use it as a last resort.


