Accueil › Documentation › Vente de drogue · origen_ilegalv2
Le système de vente de drogue permet aux joueurs de vendre de la drogue à des clients PNJ. Il prend en charge deux modes de vente indépendants qui peuvent fonctionner en même temps ou être activés séparément.
Config.DrugSales.Modes = {
ZoneSale = {
Enable = true,
RequireReputation = false, -- require street rep to start
MinReputationToStart = 90,
},
ItemSale = {
Enable = true,
},
}| Mode | Déclencheur | Description |
|---|---|---|
ZoneSale |
Menu rapide du gang (F6) | Les peds marchent VERS le joueur. Ne fonctionne que si le joueur est dans un gang. |
ItemSale |
Utiliser un item de drogue de l’inventaire | Ouvre un menu pour vendre à un ped proche ou consommer la drogue. Les items utilisables sont enregistrés automatiquement au démarrage du serveur. |
Définir Config.DrugSales.Enable = false désactive tout le système, quel que soit le mode ci-dessus.
Config.DrugSales = {
Enable = true,
CopRequired = 0, -- min police online to allow sales
CopAlertBlipTime = 200, -- ms the police alert blip stays on the map
AllowPoliceToSell = false,
MaxCustomer = 30, -- total customers queued per seller
MaxSimultaneousCustomers = 1,
RejectPercentage = 20, -- % chance customer refuses
CustomerSpawnTime = { min = 3, max = 7 }, -- seconds before next customer
CustomerInteractionTime = 60, -- seconds seller has to interact
UseBlackMoney = true, -- pay out as dirty money
MinDistanceBetweenSales = 50.0, -- meters between active sell points
SaleRadius = 50.0, -- active sale area radius around the seller
}Contrôle l’ordre dans lequel les clients en attente sont servis.
CustomerPriority = {
enabled = true,
distanceThreshold = 0.5, -- meters: customers closer are in the "near" group
priorityByArrival = true, -- earlier arrivals get served first
showWaitingMessages = true, -- show queue position messages to waiting customers
messageUpdateInterval = 0,
fixedMessages = true,
},Modèles de ped PNJ utilisés comme clients. Ajoute ou retire des entrées selon tes besoins.
CustomerPeds = {
's_m_y_doorman_01',
'a_f_m_tourist_01',
'a_m_m_eastsa_02',
'a_m_m_polynesian_01',
'ig_priest',
'ig_ramp_hipster',
'ig_rashcosvki',
'ig_money',
'ig_hunter',
},PoliceAlerts = {
onReject = true, -- alert when customer rejects
onAccept = { enabled = true, percentage = 20 }, -- % chance on accept
},
PoliceJobs = {
['police'] = true,
['sheriff'] = true,
['sapd'] = true,
},Réglages partagés utilisés par les deux modes lorsqu’un ped s’approche du joueur pendant une vente.
StreetSale = {
Enable = true, -- legacy guard, modes are controlled via Modes above
MaxDistance = 6.0, -- meters
CooldownTime = 5000, -- ms between attempts (anti-spam)
OnlyPeds = true, -- only NPC peds can buy
ExcludePlayerPeds = true, -- exclude player-controlled peds
IgnoreDeadPeds = true, -- skip dead peds as targets
PriceMultiplier = 0.8, -- 80% of the normal drug price
},Définis dans DrugList quels items sont vendables. Chaque entrée accepte les champs suivants :
| Champ | Type | Description |
|---|---|---|
label |
string |
Nom affiché dans l’UI d’interaction |
image |
string |
URL ou chemin d’image facultatif (utilisé dans le panneau d’administration) |
quantity |
{ min, max } |
Unités vendues par transaction |
price |
{ min, max } |
Prix par unité en $ |
prop |
string |
Prop du monde tenu pendant l’échange |
rejectChance |
number|nil |
Surcharge du % de refus par drogue. Si nil, utilise RejectPercentage |
policeChance |
number|nil |
Surcharge du % d’alerte à la police à l’acceptation, par drogue |
forSale |
boolean |
Si cette drogue peut être vendue aux PNJ. Par défaut true |
forConsumption |
boolean |
Si le joueur peut consommer cette drogue. Par défaut false |
effect (consommation uniquement)Appliqué lorsque le joueur consomme la drogue. Utilisé uniquement si forConsumption = true.
| Champ | Type | Description |
|---|---|---|
type |
string |
Clé du type d’effet (voir tableau ci-dessous) |
value |
number|nil |
Intensité de l’effet (la signification varie selon le type) |
duration |
number|nil |
Durée en secondes |
Types d’effet disponibles :
| Clé | Description | Utilise value |
Utilise duration |
|---|---|---|---|
heal |
Restaure value % de la vie max |
✅ (%) | — |
armor |
Ajoute value points d’armure |
✅ | — |
stamina |
Restaure l’endurance instantanément | — | — |
heal_full |
Vie complète + armure complète | — | — |
speed |
Multiplicateur de vitesse de déplacement | ✅ (multiplicateur) | ✅ |
superman |
Vitesse ×2 + super saut | — | ✅ |
no_ragdoll |
Désactive le ragdoll | — | ✅ |
super_jump |
Active le super saut | — | ✅ |
invincible |
Mode dieu | — | ✅ |
one_punch |
Dégâts de mêlée massifs | — | ✅ |
infinite_stamina |
Endurance infinie | — | ✅ |
fireproof |
Immunité au feu | — | ✅ |
screen_high |
Post-fx d’Aliens fight | — | ✅ |
screen_drunk |
Tremblement + flou d’ivresse | ✅ (intensité 0–5) | ✅ |
blur |
Effet de flou d’écran | — | ✅ |
night_vision |
Vision nocturne | — | ✅ |
consume (animation de consommation)Contrôle l’animation et la barre de progression affichées lorsque le joueur consomme la drogue.
| Champ | Type | Description |
|---|---|---|
animDict |
string|nil |
Dictionnaire d’animation |
animClip |
string|nil |
Clip d’animation |
animFlag |
number |
Flag d’animation (par défaut 49) |
progressDur |
number|nil |
Durée de la barre de progression en secondes |
progressLabel |
string|nil |
Libellé de la barre de progression. À défaut, utilise "Consuming {drug label}" |
canMove |
boolean |
Autorise le déplacement pendant la consommation (par défaut false) |
propModel |
string|nil |
Prop facultatif tenu pendant l’animation |
propBone |
number |
Os du ped auquel le prop est attaché (par défaut 57005, main droite) |
propPos |
{ x, y, z } |
Décalage de position du prop |
propRot |
{ x, y, z } |
Décalage de rotation du prop |
DrugList = {
['packaged_weed'] = {
label = 'Gram of Marijuana',
quantity = { min = 1, max = 3 },
price = { min = 80, max = 150 },
prop = 'prop_weed_block_01',
forSale = true,
forConsumption = true,
effect = {
type = 'infinite_stamina',
duration = 30,
},
consume = {
animDict = 'amb@world_human_smoking@male@male1@base',
animClip = 'base',
animFlag = 49,
progressDur = 3,
progressLabel = 'Smoking...',
canMove = true,
},
},
['cokebaggy'] = {
label = 'Cocaine Bag',
quantity = { min = 1, max = 2 },
price = { min = 250, max = 400 },
prop = 'prop_drug_package_02',
forSale = true,
},
['meth_bag'] = {
label = 'Meth Bag',
quantity = { min = 1, max = 2 },
price = { min = 200, max = 350 },
prop = 'prop_drug_package_02',
forSale = true,
},
},Drogue d’entrée de gamme, à prix plus bas, échelonnée par rareté :
['weed_packed_common'] = { label = 'Marijuana Pack (Common)', quantity = { min = 1, max = 5 }, price = { min = 45, max = 75 }, prop = 'prop_weed_block_01' },
['weed_packed_uncommon'] = { label = 'Marijuana Pack (Uncommon)', quantity = { min = 1, max = 4 }, price = { min = 60, max = 95 }, prop = 'prop_weed_block_01' },
['weed_packed_rare'] = { label = 'Marijuana Pack (Rare)', quantity = { min = 1, max = 4 }, price = { min = 80, max = 115 }, prop = 'prop_weed_block_01' },
['weed_packed_epic'] = { label = 'Marijuana Pack (Epic)', quantity = { min = 1, max = 3 }, price = { min = 95, max = 130 }, prop = 'prop_weed_block_01' },
['weed_packed_legendary'] = { label = 'Marijuana Pack (Legendary)', quantity = { min = 1, max = 3 }, price = { min = 110, max = 148 }, prop = 'prop_weed_block_01' },Toute la liste des drogues peut être gérée directement depuis le panneau d’administration (/gangadmin) sans toucher à aucun fichier de configuration. Tu peux créer, modifier et supprimer des drogues à l’exécution, y compris les prix, les quantités, les effets et les animations de consommation. Les modifications sont enregistrées dans origen_drug_sales_custom en base de données et fusionnées avec la configuration statique au démarrage. Les entrées statiques sans surcharge en base sont traitées par défaut comme forSale = true, forConsumption = false.
Les ventes sont bloquées dans les zones configurées. Ajoute d’autres entrées selon tes besoins :
BlacklistedZones = {
{ name = "Police Station", coords = vector3(425.1, -979.5, 30.7), radius = 100.0 },
{ name = "Hospital", coords = vector3(298.7, -584.7, 43.2), radius = 100.0 },
{ name = "Airport", coords = vector3(-1037.45, -2737.04, 20.17), radius = 400.0 },
},Si le vendeur ignore un client qui attend, le PNJ s’enfuit après un délai.
CustomerEscape = {
enabled = true,
escapeTime = 20000, -- ms before the customer runs
escapeDistance = { min = 40, max = 60 }, -- meters run before despawn
},Animations = {
phoneCall = {
enabled = true,
duration = 3000,
phoneModel = "prop_npc_phone_02",
},
exchange = {
enabled = true,
duration = 3000,
playerAnim = 'givetake1_a',
npcAnim = 'givetake1_b',
},
},BlipSettings = {
enable = false, -- show sell point blip on the minimap
},
Messages = {
accepted = 'drug_sales.messages.accepted',
rejected = 'drug_sales.messages.rejected',
waiting = 'drug_sales.messages.waiting',
},Debug = {
enabled = false,
showBlacklistedZones = true,
showSaleRadius = true,
markerSettings = {
type = 1,
scale = { x = 1.0, y = 1.0, z = 100.0 },
color = { r = 255, g = 0, b = 0, a = 100 },
colorSaleRadius = { r = 0, g = 255, b = 0, a = 100 },
},
},