Apres les jobs et les entites custom, les shipments d'armes sont la troisieme brique technique d'un serveur DarkRP qui tient debout. Un shipment, c'est ce qui permet a ton gun dealer, ton mafioso ou ton black market dealer d'acheter un lot d'armes (5, 10, 20 fusils dans une caisse) qu'il pourra ensuite revendre aux autres joueurs.
Sans shipments custom, ton gun dealer DarkRP n'a strictement rien a vendre — c'est l'erreur n°1 des nouveaux serveurs : les jobs sont crees mais ils n'ont aucun produit. Dans ce guide, on va voir les deux methodes pour creer des shipments (avec et sans GMod Panel), tous les champs disponibles, et les erreurs frequentes qui empechent les armes d'apparaitre ou cassent l'economie.
Ce qu'est un shipment DarkRP
Un shipment DarkRP, c'est une caisse contenant N exemplaires d'une arme, achetable depuis le menu F4 par certains jobs uniquement. Quand le joueur l'achete, il pose la caisse au sol, et chaque clic dessus lui donne une copie de l'arme dans son inventaire. Il peut ensuite la jeter au sol pour la vendre a un autre joueur (qui la ramasse avec E).
Techniquement, un shipment se distingue de :
- Une arme directe (
addCustomShipmentavecseperate = false) : le joueur achete une caisse de plusieurs armes - Une vente a l'unite (
addCustomShipmentavecseperate = true) : le joueur peut acheter une seule arme directement, sans passer par la caisse - Une "pocket weapon" (
weaponfield) : l'arme va directement dans son inventaire sans caisse
Tu peux activer les deux modes simultanement : caisse ET vente a l'unite, ce qui donne au gun dealer plus de flexibilite commerciale.
Pre-requis
- Un serveur GMod avec DarkRP + DarkRPModification
- Au moins un job de gun dealer (TEAM_GUN, TEAM_BLACKMARKET, etc) — cf l'article jobs custom
- Le ou les addons d'armes que tu veux vendre (M9K, CW2.0, FAS2, TFA, etc) — generalement depuis le Workshop
- Le nom interne (
weapon class) de chaque arme, accessible dans le code de l'addon (souventm9k_ak47,cw_ak74, etc) - Optionnel mais fortement recommande : GMod Panel pour eviter les erreurs Lua
Methode 1 : creer un shipment via GMod Panel (sans Lua)
Le panel detecte automatiquement les armes installees dans tes addons et te les propose dans une liste avec preview.
Etape 1 : ouvrir l'editeur de shipments
Connecte-toi a GMod Panel, va sur ton serveur, puis clique sur Shipments dans la navigation. Tu vois la liste des shipments deja declares (souvent vide sur un nouveau serveur) avec leur prix, leur quantite et le job autorise.
Etape 2 : creer un nouveau shipment
Clique sur Nouveau shipment. Le formulaire :
- Nom affiche : ce que voit le joueur dans le menu F4 (ex: "Caisse d'AK-47")
- Class de l'arme : selecteur deroulant qui liste toutes les armes detectees dans tes addons. Le panel scanne
lua/weapons/au demarrage et te donne les classes valides — plus besoin de chercher dans les forums. - Modele : auto-detecte depuis l'addon, surchargeable
- Prix de la caisse : prix total du shipment (la caisse complete)
- Quantite par caisse : combien d'armes la caisse contient (typique : 5 a 20)
- Vente a l'unite : case a cocher. Si activee, le gun dealer peut aussi vendre l'arme a la piece sans passer par la caisse.
- Prix unitaire : prix d'une seule arme (n'apparait que si "vente a l'unite" coche)
- Jobs autorises : selecteur multiple parmi tes jobs gun dealer existants
- Categorie : Caisses d'armes legeres, Caisses d'armes lourdes, Black Market, etc
Etape 3 : sauvegarder
Le panel regenere shipments.lua automatiquement, en validant que :
- La class de l'arme existe bien dans tes addons installes
- Le prix et la quantite sont des entiers positifs
- Les TEAM_ references sont reels
- Pas de duplication (deux shipments avec exactement la meme arme + meme prix)
Etape 4 : redemarrer
Telecharge le ZIP, relance ton start.bat, et le shipment apparait dans le menu F4 → Shipments. Total : moins de 2 minutes par shipment, avec zero risque d'erreur Lua.
Avantages de la methode panel
- Detection automatique des classes d'armes installees (fini les heures de recherche dans les workshops)
- Duplication d'un shipment en 1 clic (super pour creer une gamme : caisse de 5 / caisse de 10 / caisse de 20 d'une meme arme)
- Categorisation visuelle drag and drop
- Validation du job_dealer : impossible de creer un shipment sans
allowed, contrairement au Lua manuel ou c'est une simple option
Methode 2 : creer un shipment en Lua manuel
Pour ceux qui veulent comprendre la mecanique sous le capot.
Etape 1 : trouver le bon fichier
Comme pour les jobs et entites, ne touche jamais au gamemode. Le bon fichier est :
garrysmod/addons/darkrpmodification/lua/darkrp_customthings/shipments.lua
Etape 2 : la structure d'un shipment
Voici un shipment classique pour un AK-47 M9K :
DarkRP.createShipment("Caisse d'AK-47", {
model = "models/weapons/w_rif_ak47.mdl",
entity = "m9k_ak47",
price = 12500,
amount = 10,
separate = true,
pricesep = 1500,
noship = false,
allowed = {TEAM_GUN, TEAM_MAFIABOSS},
shipmodel = "models/Items/item_item_crate.mdl",
category = "Caisses d'armes legeres",
})
Decortiquons les champs essentiels :
"Caisse d'AK-47": le nom affiche dans le menu F4model: modele 3D affiche dans le menu (souvent celui de l'arme en vue lointaine)entity: la class technique de l'arme (le nom du dossier danslua/weapons/)price: prix de la caisse completeamount: nombre d'armes contenues dans la caisseseparate = true: autorise aussi la vente a l'unitepricesep: prix d'une arme vendue a l'unite (ignore siseparate = false)noship = false: sitrue, supprime la caisse et n'autorise QUE la vente a l'uniteallowed: table de TEAM_ autorises a acheter — OBLIGATOIRE sous peine de catastropheshipmodel: modele de la caisse au sol (defaut : caisse en bois verte de Garry's Mod)category: categorie du menu F4
Etape 3 : creer une categorie de shipments (optionnel)
DarkRP.createCategory{
name = "Caisses d'armes lourdes",
categorises = "shipments",
startExpanded = false,
color = Color(180, 60, 30, 255),
canSee = function(ply) return true end,
sortOrder = 200,
}
Note categorises = "shipments" (et pas "jobs" ou "entities").
Etape 4 : redemarrer le serveur
Sauvegarde, redemarre, et regarde la console pour les erreurs au chargement.
Les erreurs a eviter absolument
Voici les pieges classiques qui plantent ou ruinent les serveurs DarkRP debutants quand ils ajoutent des shipments.
Erreur 1 : oublier allowed = {...}
Comme pour les entites, c'est catastrophique. Sans allowed, n'importe quel joueur peut acheter le shipment, y compris les Citizens. Un Citizen avec un AK-47 = serveur mort en 3 minutes.
-- DANGEREUX :
DarkRP.createShipment("Caisse AK", {
entity = "m9k_ak47",
price = 10000,
amount = 10,
-- pas de "allowed" => Citizen peut acheter !
})
-- CORRECT :
DarkRP.createShipment("Caisse AK", {
entity = "m9k_ak47",
price = 10000,
amount = 10,
allowed = {TEAM_GUN, TEAM_MAFIABOSS},
})
GMod Panel bloque la sauvegarde d'un shipment sans jobs autorises.
Erreur 2 : entity = "xxx" qui n'existe pas
C'est l'erreur n°2 la plus frequente. Si la class d'arme ne correspond a rien, le shipment apparait dans le menu, le joueur paye, mais la caisse contient... rien. Ou crash a l'ouverture.
-- CASSE :
entity = "m9k_aks47", -- typo : "aks47" au lieu de "ak47"
entity = "tfa_ak74", -- mauvais addon : tu utilises M9K, pas TFA
Solution : la class est exactement le nom du dossier dans addons/<addon>/lua/weapons/. Verifie a la main, ou utilise le selecteur du panel qui scanne automatiquement les armes detectees.
Erreur 3 : prix de la caisse < prix unitaire * quantite
Si le prix de la caisse est plus bas que prix_unitaire * amount, personne n'achete a l'unite (logique : autant prendre la caisse). C'est moins une erreur qu'un mauvais calibrage, mais ça rend l'option separate = true inutile.
Regle : pricesep > price / amount. Tu veux que la caisse soit plus avantageuse que la vente a l'unite, sinon ton gun dealer ne fait jamais de marge.
Exemple correct :
price = 10000(caisse de 10 armes a 1000/piece)pricesep = 1500(vente a l'unite : 1500/piece)- Marge gun dealer = 50% par arme vendue separement
Erreur 4 : amount trop eleve ou nul
amount = 0, -- caisse vide, ne sert a rien
amount = 100, -- gun dealer peut spawn 100 AK avec une seule caisse
amount = 0 ne plante pas mais le shipment ne donne aucune arme. amount trop eleve casse l'economie (un gun dealer arme la moitie du serveur d'un seul achat). Reste entre 5 et 20 pour des armes standard.
Erreur 5 : referencer un TEAM_ qui n'existe pas
Meme erreur que pour les entites :
allowed = {TEAM_GUNDEALR}, -- typo : "GUNDEALR" au lieu de "GUNDEALER"
Resultat : crash au demarrage :
[ERROR] addons/darkrpmodification/lua/darkrp_customthings/shipments.lua:8:
attempt to index a nil value (global 'TEAM_GUNDEALR')
GMod Panel valide chaque reference TEAM_ avant la sauvegarde.
Erreur 6 : noship = true sans separate = true
-- CASSE :
noship = true, -- pas de caisse
separate = false, -- pas de vente a l'unite non plus
Resultat : le shipment est inachetable. Soit separate = true (vente a l'unite OK), soit noship = false (caisse OK), soit les deux. Jamais aucun des deux.
Erreur 7 : modele d'arme qui n'existe pas
Si tu specifies un model qui n'est pas charge (mauvais chemin, addon non installe), le menu F4 affiche un cube ERROR rouge a la place de l'icone du shipment. Le shipment fonctionne quand meme, mais c'est moche.
Solution : utilise le modele defini par l'addon de l'arme (regarde dans lua/weapons/<class>/shared.lua, ligne SWEP.WorldModel), ou laisse le panel auto-detecter.
Erreur 8 : oublier de servir l'addon d'arme aux joueurs
Si l'addon d'arme est uniquement cote serveur, les joueurs voient ERROR a la place de l'arme quand ils la posent au sol. Ils ne peuvent pas la ramasser, et le shipment devient inutilisable.
Solution : assure-toi que l'addon d'arme est dans une collection Workshop liee au serveur ou servi via FastDL. Les armes doivent etre telechargees par chaque client qui rejoint.
Erreur 9 : meme arme dans plusieurs shipments
Tu peux avoir plusieurs shipments avec la meme entity, mais c'est generalement une mauvaise pratique : ça duplique les entrees dans le menu et confuse les joueurs.
Cas legitime : differentes quantites (caisse de 5, caisse de 10, caisse de 20 d'AK) — pratique pour donner des choix economiques au gun dealer. Cas illegitime : 3 lignes "AK-47" identiques avec juste un nom different.
Erreur 10 : virgules et accolades Lua
Les memes erreurs de syntaxe que pour les jobs et entites. Une virgule oubliee, une accolade en trop, et tout le fichier ne se charge pas.
-- CASSE (manque virgule apres "amount = 10") :
DarkRP.createShipment("Test", {
entity = "m9k_ak47",
price = 10000,
amount = 10
allowed = {TEAM_GUN},
})
Utilise un editeur Lua avec coloration syntaxique. Pas le Bloc-notes Windows.
Strategies de game design pour shipments
Quelques principes economiques pour ne pas casser ton serveur :
Marge raisonnable du gun dealer
Le prix unitaire (pricesep ou price/amount) doit etre inferieur au prix auquel le gun dealer revend l'arme aux joueurs. Marge typique : 2× a 4× le prix d'achat.
- Cout d'achat unitaire : 1000 dollars
- Prix de revente recommande : 2000 a 4000 dollars
- Marge gun dealer : 100% a 300% par arme
Echelle de puissance vs prix
Plus l'arme est puissante, plus le shipment doit etre cher et plus il doit etre restreint a des jobs avances :
- Pistolets / SMG : accessibles au gun dealer standard, prix ~5000-10000 par caisse
- Fusils d'assaut : gun dealer ou mafioso, prix ~10000-20000
- Snipers / armes lourdes : black market dealer uniquement, prix ~25000-50000
- Armes explosives (RPG, grenades) : tres restreints, prix tres eleves, tres faible quantite
Frequence de respawn vs raid
Si tes shipments sont trop chers, les gun dealers se font raid par les criminels et perdent tout. Si ils sont trop pas chers, l'economie inflate. Trouve l'equilibre en surveillant combien de raid ont lieu par heure et combien d'armes circulent.
Verifier ses shipments avant prod
- Valider la syntaxe Lua (
luac -p shipments.lua) - Demarrer le serveur et regarder la console au chargement
- Joindre le serveur avec un compte gun dealer, ouvrir F4 → Shipments
- Acheter chaque shipment, poser la caisse, prendre une arme — verifier qu'elle apparait correctement et qu'elle est utilisable
- Acheter en mode unite (si
separate = true) pour valider quepricesepest applique - Joindre avec un compte non-autorise (Citizen) et verifier que les shipments restreints n'apparaissent pas dans son F4
GMod Panel fait ces validations automatiquement via "Verifier les erreurs" dans le menu serveur.
Conclusion
Les shipments d'armes sont le poumon commercial du gun dealer DarkRP — sans eux, le job n'a aucun sens et personne ne le joue. Bien configures (avec allowed, des prix coherents et une echelle de puissance), ils creent une economie d'armement realiste qui alimente toute la boucle gameplay : criminels qui s'arment, police qui reagit, gun dealer qui tire profit.
Mal configures (sans allowed, prix bidons, classes inexistantes), ils ruinent le serveur en quelques minutes : Citizens armes jusqu'aux dents, gun dealers ruines, balance gameplay morte.
La methode via GMod Panel elimine 100% des erreurs structurelles et te laisse te concentrer sur ce qui compte vraiment : l'equilibre et le game design de ton serveur.
Avec tes jobs, tes entites et tes shipments custom configures, tu as desormais les 3 piliers techniques d'un serveur DarkRP unique. La prochaine etape, c'est l'ajout de maps custom — qu'on verra dans un futur tutoriel.
Bon dev !