Inicio › Documentación › Venta de droga · origen_ilegalv2
El sistema de venta de drogas permite a los jugadores vender drogas a clientes NPC. Admite dos modos de venta independientes que pueden funcionar a la vez o activarse por separado.
Config.DrugSales.Modes = {
ZoneSale = {
Enable = true,
RequireReputation = false, -- require street rep to start
MinReputationToStart = 90,
},
ItemSale = {
Enable = true,
},
}| Modo | Disparador | Descripción |
|---|---|---|
ZoneSale |
Menú rápido de banda (F6) | Los peds caminan HACIA el jugador. Solo funciona si el jugador está en una banda. |
ItemSale |
Usar un objeto de droga del inventario | Abre un menú para vender a un ped cercano o consumir la droga. Los objetos utilizables se registran automáticamente al arrancar el servidor. |
Establecer Config.DrugSales.Enable = false desactiva todo el sistema, sea cual sea el modo de los anteriores.
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
}Controla el orden en que se atiende a los clientes que esperan.
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,
},Modelos de ped NPC usados como clientes. Añade o quita entradas según necesites.
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,
},Ajustes compartidos que usan ambos modos cuando un ped se acerca al jugador durante una venta.
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
},Define qué objetos se pueden vender en DrugList. Cada entrada admite los siguientes campos:
| Campo | Tipo | Descripción |
|---|---|---|
label |
string |
Nombre mostrado en la UI de interacción |
image |
string |
URL o ruta de imagen opcional (se usa en el panel de administración) |
quantity |
{ min, max } |
Unidades vendidas por transacción |
price |
{ min, max } |
Precio por unidad en $ |
prop |
string |
Prop del mundo que se sostiene durante el intercambio |
rejectChance |
number|nil |
Sobrescritura del % de rechazo por droga. Si es nil, usa RejectPercentage |
policeChance |
number|nil |
Sobrescritura del % de alerta a la policía al aceptar, por droga |
forSale |
boolean |
Si esta droga se puede vender a NPCs. Por defecto true |
forConsumption |
boolean |
Si el jugador puede consumir esta droga. Por defecto false |
effect (solo consumo)Se aplica cuando el jugador consume la droga. Solo se usa si forConsumption = true.
| Campo | Tipo | Descripción |
|---|---|---|
type |
string |
Clave del tipo de efecto (ver tabla de abajo) |
value |
number|nil |
Intensidad del efecto (el significado varía según el tipo) |
duration |
number|nil |
Duración en segundos |
Tipos de efecto disponibles:
| Clave | Descripción | Usa value |
Usa duration |
|---|---|---|---|
heal |
Restaura el value % de la vida máxima |
✅ (%) | — |
armor |
Añade value puntos de armadura |
✅ | — |
stamina |
Restaura la resistencia al instante | — | — |
heal_full |
Vida completa + armadura completa | — | — |
speed |
Multiplicador de velocidad de movimiento | ✅ (multiplicador) | ✅ |
superman |
Velocidad ×2 + supersalto | — | ✅ |
no_ragdoll |
Desactiva el ragdoll | — | ✅ |
super_jump |
Activa el supersalto | — | ✅ |
invincible |
Modo dios | — | ✅ |
one_punch |
Daño cuerpo a cuerpo masivo | — | ✅ |
infinite_stamina |
Resistencia infinita | — | ✅ |
fireproof |
Inmunidad al fuego | — | ✅ |
screen_high |
Post-fx de Aliens fight | — | ✅ |
screen_drunk |
Temblor + desenfoque de borrachera | ✅ (intensidad 0–5) | ✅ |
blur |
Efecto de desenfoque de pantalla | — | ✅ |
night_vision |
Visión nocturna | — | ✅ |
consume (animación de consumo)Controla la animación y la barra de progreso que se muestran cuando el jugador consume la droga.
| Campo | Tipo | Descripción |
|---|---|---|
animDict |
string|nil |
Diccionario de animación |
animClip |
string|nil |
Clip de animación |
animFlag |
number |
Flag de animación (por defecto 49) |
progressDur |
number|nil |
Duración de la barra de progreso en segundos |
progressLabel |
string|nil |
Etiqueta de la barra de progreso. Si no se indica, usa "Consuming {drug label}" |
canMove |
boolean |
Permite moverse durante el consumo (por defecto false) |
propModel |
string|nil |
Prop opcional que se sostiene durante la animación |
propBone |
number |
Hueso del ped al que se une el prop (por defecto 57005, mano derecha) |
propPos |
{ x, y, z } |
Desplazamiento de posición del prop |
propRot |
{ x, y, z } |
Desplazamiento de rotación del 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,
},
},Droga de nivel de entrada con precio más bajo y escalonada por rareza:
['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' },Toda la lista de drogas se puede gestionar directamente desde el panel de administración (/gangadmin) sin tocar ningún fichero de configuración. Puedes crear, editar y eliminar drogas en tiempo de ejecución, incluidos precios, cantidades, efectos y animaciones de consumo. Los cambios se guardan en origen_drug_sales_custom en la base de datos y se combinan con la configuración estática al arrancar. Las entradas estáticas sin sobrescritura en la base de datos se tratan por defecto como forSale = true, forConsumption = false.
Las ventas se bloquean dentro de las zonas configuradas. Añade más entradas según necesites:
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 el vendedor ignora a un cliente que espera, el NPC huye pasado un tiempo de espera.
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 },
},
},