Las tres ventanas#
Vending Machine Creator tiene tres ventanas, cada una para una persona distinta. Comprar un producto no es una de ellas: [E] en una máquina abre un menú sencillo con sus productos, sus precios y, en las máquinas con propietario, el stock restante.
Ventana | Se abre con | Para qué sirve |
|---|---|---|
El creador |
| Administradores y los trabajos de |
El panel de compra |
| Cualquier jugador: el precio de la máquina, la cuenta con la que se paga y el botón para comprarla. |
El panel del propietario |
| El propietario: ganancias, stock, precios y la venta de la máquina. |
Los avisos aparecen a menos de dos metros de una máquina. Mientras un panel está abierto o hay un robo en curso, las máquinas de detrás no reaccionan, así que una pulsación nunca activa dos cosas.
Máquinas que ya están en el mapa#
El mapa de GTA está lleno de máquinas expendedoras, y todas aquellas cuyo modelo aparece en Config.MachineTypes funcionan de serie: acércate, pulsa [E] y elige un producto. No hay nada que colocar ni nada guardado en la base de datos.
Tipo de máquina | Modelo | Vende |
|---|---|---|
Drink Machine |
| Water, Cola, Orange Soda, Energy Drink |
Drink Fridge |
| Cola, Water, Beer |
Sprunk Machine |
| Sprunk, Lime Soda, Energy Drink |
Snack Machine |
| Chips, Chocolate, Nuts, Candy |
Snack Machine 2 |
| Cookies, Donut, Cupcake |
Coffee Machine |
| Coffee, Espresso, Cappuccino |
Water Dispenser |
| Water Bottle |
Las máquinas del mapa venden a los precios de la configuración, cobran en la cuenta de la configuración y nunca se agotan. No tienen propietario y no se pueden robar; para eso, coloca una máquina propia.
Colocar una máquina#
/vendingcreator abre el creador. La columna izquierda lista todas las máquinas colocadas con un buscador, su número de productos, su cuenta de pago y una insignia de blip; el botón del pin te teletransporta a ella y + empieza una nueva. Al seleccionar una máquina se abre a la derecha.
Los paneles#
Panel | Qué configuras ahí |
|---|---|
Machine Settings | El nombre, el modelo, la cuenta de pago y Apply Template, que los rellena todos, además de los productos, a partir de un tipo de máquina con un solo clic. Debajo, el interruptor For sale con su precio de compra, y Can be robbed. |
Placement | Dónde está la máquina. Select te pone en modo de colocación. |
Products | Una fila por hueco: el ítem, elegido de la propia lista de tu inventario con su imagen, la etiqueta que se muestra en el menú y el precio. |
Blip Settings | Un blip opcional en el mapa: su nombre, un sprite y un color de listas con buscador y vista previa, su escala y su posición, escrita o elegida apuntando. |
Access Control | Trabajos y rangos asociados a la máquina. Se guardan con ella, pero en esta versión no limitan quién puede comprarle. |
La lista de modelos contiene los props de Config.MachineTypes, y la lista de cuentas es Config.CreatorMoneyTypes; ambas se explican más abajo.
Modo de colocación#
Select cierra la ventana y pone una copia transparente de la máquina donde apuntes, apoyada en el suelo. Los botones de instrucciones en la parte inferior de la pantalla muestran las teclas:
Tecla | Hace |
|---|---|
Apuntar | Mueve la máquina. |
Rueda del ratón | La gira 15° por cada paso. |
| La gira despacio, para un ángulo preciso. |
Clic izquierdo | La coloca. |
| Cancela, conservando la posición que tenía. |
El creador se vuelve a abrir con la posición rellenada. Mover una máquina de nuevo parte de la rotación que ya tenía.
Si alguna vez una colocación queda en curso, abrir el creador la cancela: nunca puedes quedarte atascado en el modo de colocación.
Guardar, editar y eliminar#
Create Machine necesita un nombre, un modelo, una posición y al menos un producto; el error indica cuál falta. La máquina aparece para todos los jugadores a la vez. Una máquina marcada como For sale puede crearse sin productos, pero su propietario solo puede reponer y cambiar el precio de lo que ya vende, así que dale primero una lista de productos.
Save en una máquina existente nunca toca lo que los jugadores hicieron con ella: el propietario y las ganancias sin recoger se mantienen, y el stock se conserva producto a producto, emparejado por nombre de ítem. Un producto que añades empieza con stock cero; un producto que quitas se lleva su stock.
Tipos de máquina y productos#
Config.MachineTypes cumple tres funciones a la vez: es la lista de plantillas del creador, la lista de modelos que puede usar una máquina, y la lista de productos de cada máquina del mapa con ese modelo.
Config.MachineTypes = {
drinks = {
label = 'Drink Machine', -- shown in the creator and the prompt
prop = 'prop_vend_soda_01', -- the world model
account = 'money', -- money · bank · black_money
items = {
{ item = 'water_bottle', label = 'Water', price = 5, prop = 'prop_ld_can_01' },
{ item = 'cola', label = 'Cola', price = 10, prop = 'prop_ecola_can' },
},
},
}item es el nombre en el inventario, label y price son lo que el menú muestra y cobra, y prop es el objeto que sostiene el personaje durante la animación de compra. Los productos añadidos en el creador sostienen una lata.
Para vender los ítems propios de tu servidor, cambia los nombres de item por los suyos. Para ofrecer otro modelo, añade una entrada con ese prop: aparece en la lista de modelos del creador, y todas sus copias en el mapa empiezan a vender sus productos.
Las máquinas colocadas guardan su propia lista de productos en la base de datos. Editar
Config.MachineTypescambia las máquinas del mapa y las plantillas, nunca una máquina que ya colocaste; edítala en el creador.
Cuentas de pago#
Config.CreatorMoneyTypes rellena la lista Payment Account del creador. Cada value debe ser una cuenta que tu framework conozca:
Config.CreatorMoneyTypes = {
{ label = 'Cash', value = 'money' },
{ label = 'Bank', value = 'bank' },
{ label = 'Black Money', value = 'black_money' },
}En QBCore y QBox, money se lee como la cuenta cash. Black Money es una cuenta de ESX: en QBCore y QBox, vende por Cash o Bank.
Comprar un producto#
[E] - Use <machine> abre el menú de productos. Al elegir un producto se comprueba el dinero y, en ESX, si el personaje puede llevarlo, antes de mover nada. Después el personaje se acerca al frente de la máquina, reproduce la animación de compra con el producto en la mano y el ítem llega al inventario.
El servidor lee el precio de la propia máquina; el juego del jugador nunca envía uno. Un rechazo (dinero insuficiente, inventario lleno, producto agotado) se muestra como notificación.
Máquinas en propiedad#
Activa For sale en el creador y configura el precio de compra. Hasta que alguien la compre, la máquina no vende nada: los jugadores cercanos ven [E] - Buy machine ($price), que abre el panel de compra. El precio se cobra de Config.Ownable.purchaseAccount, el comprador pasa a ser el propietario y, para él, el aviso cambia a [E] - Manage <machine> al instante.
La propiedad pertenece al personaje: en QBCore y QBox es el citizen id, en ESX el identificador del personaje.
El panel del propietario#
Sección | Qué hace |
|---|---|
Earnings | Lo que la máquina ha generado desde la última recogida. Collect lo ingresa en |
Your share · Total stock | El porcentaje de cada venta que es tuyo, y las unidades que hay dentro entre todos los productos. |
Products & Stock | Por producto: su precio con Save, lo que ganas por venta, el stock y Restock, que mueve unidades de tu propio inventario a la máquina y muestra cuántas llevas. |
Sell machine | Devuelve la máquina por el |
Una máquina con propietario vende stock real: cada unidad la puso su propietario, los demás jugadores ven el stock junto a cada precio, y un producto a cero aparece en gris en el menú. Un hueco admite hasta maxStockPerItem unidades, y el precio puede ser cualquier valor desde 1. Qué productos vende la máquina se decide en el creador; el propietario los repone y les cambia el precio.
La economía#
El cliente siempre paga el precio completo. El ownerShare por ciento se acumula como ganancias del propietario y el resto se retira de la economía como impuesto; y como el propietario paga el stock con sus propios ítems, una máquina es un negocio, no una máquina de imprimir dinero.
Config.Ownable = {
enabled = true, -- machines can be bought by players
purchaseAccount = 'bank', -- account charged when buying a machine
payoutAccount = 'bank', -- account credited with earnings and resale
ownerShare = 80, -- % of each sale the owner keeps, 0-100
maxStockPerItem = 200, -- units one product slot can hold
resaleRatio = 0.5, -- refund when selling back; 0 disables it
}Robar una máquina#
Las máquinas con Can be robbed activado muestran [G] - Force machine a cualquiera que lleve Config.Robbery.item. Sin lockpick no hay aviso, y un propietario nunca lo ve en su propia máquina.
Fuerza la cerradura
Una barra de progreso avanza durante
durationsegundos mientras el personaje fuerza la cerradura. Retirarse aquí no cuesta nada: no se arriesga el lockpick y no hay tiempo de espera.Supera la prueba de habilidad
Una prueba de habilidad de ox_lib, una ronda por cada entrada de
skillCheck.difficulty, con las teclas deskillCheck.inputs.Llévate el botín
De una máquina con propietario,
stealPercentde cada producto con stock (al menos una unidad, como máximomaxPerItem) y se avisa al propietario de cuántas unidades se llevaron. De una máquina sin propietario, un número aleatorio deunownedLootunidades de su lista de productos. Lo que el ladrón no pueda llevar se queda dentro.
Resultado | Qué ocurre |
|---|---|
Éxito | Se entrega el botín, el lockpick se rompe el |
Prueba de habilidad fallida | No se lleva nada, el lockpick se rompe el |
Máquina con propietario vacía | "This machine is empty", antes de tocar la cerradura. |
El lockpick solo se gasta cuando se rompe. La alerta policial se envía cuando empieza un robo, el alert.chance% de las veces, a todos los jugadores conectados cuyo trabajo está en alert.jobs: una notificación y un blip parpadeante con un área de 80 metros que desaparece tras blipTime segundos.
Config.Robbery = {
enabled = true,
item = 'lockpick', -- no item, no prompt
key = 47, -- G
useItem = false, -- also start it by using the item
allowSelfRobbery = false, -- testing only: rob your own machine
duration = 6, -- seconds forcing the lock
skillCheck = {
difficulty = { 'easy', 'medium', 'medium' }, -- one round each
inputs = { 'w', 'a', 's', 'd' },
},
breakChance = 15, -- % the lockpick breaks after succeeding
breakChanceFail = 50, -- ...and after failing
stealPercent = 50, -- % of each stocked product taken
maxPerItem = 10, -- most units of one product per robbery
unownedLoot = { min = 1, max = 4 },
cooldown = 1800, -- seconds shut after a successful robbery
cooldownFailed = 60, -- ...after a failed attempt
alert = {
enabled = true,
chance = 70, -- % the alert goes out
jobs = { 'police', 'sheriff' },
blipTime = 60, -- seconds the blip stays
},
}Los tiempos de espera se guardan en memoria: los jugadores que entran tarde siguen viendo cerrada una máquina forzada, pero reiniciar el recurso los borra todos.
La app VendGo del teléfono#
Con Quasar Smartphone y su addon phone-vendingmachine en ejecución, los jugadores instalan VendGo desde la App Store del teléfono. Muestra:
Máquinas colocadas, primero las más cercanas, con su distancia, sus productos y un botón que marca un punto de ruta en el GPS.
Catálogos de la ciudad: cada tipo de máquina de
Config.MachineTypescon sus productos.Un carrito para varios productos de una máquina en un solo pago, y el saldo en efectivo del jugador.

Config.Phone = {
enabled = true, -- the app can read machines at all
allowRemotePurchase = true, -- buy from the phone, anywhere on the map
}Una compra desde el teléfono se entrega directamente en el inventario y se cobra de la propia cuenta de la máquina. En una máquina con propietario, descuenta stock y paga al propietario exactamente igual que si el cliente estuviera delante. Configura allowRemotePurchase = false para usar VendGo solo como buscador: los jugadores exploran y marcan un punto de ruta, y compran en persona.
Otros ajustes#
Ajuste | Qué hace |
|---|---|
| El idioma, por nombre de archivo en |
| Cómo se escriben los precios en los paneles, por ejemplo |
| Máquinas enviadas por lote a un jugador que entra (15). Bájalo en un servidor concurrido con muchas máquinas. |
| A qué altura flota la línea |
| Silencia los sonidos de la interfaz de los paneles. |
| Salida adicional en consola, incluido por qué no aparece el aviso de robo. Desactivado en un servidor en producción. |



