Ir al contenido

Resumen

Un mercado completo entre jugadores para servidores ESX — con subastas, trueques, quedadas en persona y furgonetas de reparto que otros jugadores pueden atracar.

  • 7 formas de vender: precio fijo, subasta, subasta ciega, subasta holandesa, subasta inversa, trueque y lotes.
  • 4 formas de entregar: instantánea, punto de recogida, repartidor NPC y quedada en persona.
  • Entregas que se pueden robar: la furgoneta de reparto recorre la ciudad y cualquier jugador puede encañonar al conductor y forzar el maletero con un minijuego de puntería.
  • Negociación de verdad: chat por anuncio, ofertas de precio, trueques de objeto por objeto y contraofertas.
  • Identidad de vendedor: tiendas propias, valoraciones, reputación, insignia de verificado, seguidores y alertas de precio.
  • Panel de administración completo y seguridad en el servidor: cada acción se valida en el servidor.
  • Bilingüe de verdad: inglés y español por jugador —la interfaz y todos los mensajes del juego— y puedes añadir tu propio idioma.
  • Interfaz moderna: 5 temas de color, sin necesidad de CDN externos para cargarla.
  • Hecho para personalizarse: config.lua abierto, 38 hooks de servidor y 21 eventos de cliente para conectar tus propios scripts.
Tipo de venta Cómo funciona
Precio fijo Anuncio clásico. Se compra al instante.
Subasta Las pujas suben. El anti-snipe automático alarga la subasta si alguien puja en los últimos segundos. Precio de compra inmediata opcional.
Subasta ciega Las pujas quedan ocultas hasta el final; gana la más alta.
Subasta holandesa El precio empieza alto y baja cada pocos minutos hasta que alguien compra o llega al mínimo.
Subasta inversa El comprador publica lo que busca y un presupuesto máximo (bloqueado en depósito); los vendedores compiten con ofertas.
Trueque Objetos por objetos, con dinero encima si se quiere.
Lote De 2 a 8 objetos en un solo anuncio.

Además:

  • Fotos hechas dentro del juego con una cámara libre (hasta 4 por anuncio), alojadas en Imgbb. Sin fotos, se usa el icono del objeto.
  • Vehículos y armas: vende vehículos propios con todo su tuning, y armas con su munición y accesorios.
  • Ofertas flash (descuento temporal del 10–70 %), anuncios destacados (de pago, arriba del todo) y bump (volver a subir un anuncio caducado).
  • Historial de precios de cada objeto al publicar, para poner un precio justo.
  • Categorías y rarezas detectadas automáticamente a partir de tu catálogo de objetos, con precio mínimo por rareza.
  • Puja automática: fijas un máximo y el script puja por ti hasta esa cantidad.
  • Entrega a elección del comprador: el vendedor marca sus modos preferidos; si el comprador elige otro, paga un pequeño extra que va al vendedor.
  • Buzón: todo lo que recibe un jugador (objetos, dinero, reembolsos) le espera ahí hasta que lo recoge.
  • Valoraciones (1–5 ★) tras cada compra, que construyen la reputación del vendedor.
  • Reembolsos: el comprador puede pedirlo dentro de un plazo; el vendedor lo acepta o lo rechaza, y se aprueba solo si el vendedor no contesta.
Modo Qué pasa
Instantánea El objeto va directo al inventario del comprador (o a su buzón si lo tiene lleno).
Punto de recogida El comprador lo recoge de un NPC en uno de los puntos de recogida del mapa (configurables).
Repartidor NPC Una furgoneta con conductor lleva el pedido al comprador — y se puede atracar por el camino.
En persona Comprador y vendedor quedan en un sitio desde el chat y se encuentran en el mundo para el intercambio.

Cuando un comprador elige repartidor NPC, aparece una furgoneta cerca y conduce hasta él. Cualquier otro jugador que la encuentre puede robarla:

  1. Para al conductor. Apúntale con un arma de cerca y se rinde (motor apagado, manos arriba). Matarlo también sirve.
  2. Ve al maletero. Aparece un aviso de «pulsa E» en la parte trasera de la furgoneta.
  3. Supera el minijuego. Un anillo gira y hay un tramo de color en algún punto: pulsa la tecla que se indica cuando la aguja pase por el tramo. Hay 3 fases, cada una más rápida, más estrecha y con otra tecla (E, Q, R o F, barajadas cada vez).
  4. Aguanta el pulso. El intento se corta si te alejas de la furgoneta, corres, disparas o recibes daño.
  5. 3 intentos por jugador y furgoneta. Fallar una fase gasta un intento; que te disparen o que la furgoneta arranque, no. Gastados los tres, ese cierre queda reventado para ti — otro jugador todavía puede intentarlo.

Resultado:

Quién Qué pasa
Ladrón Se lleva el paquete a su inventario.
Comprador Pierde el pedido y se le avisa de quién se lo ha llevado. Si el comprador atraca su propia furgoneta, cuenta como entrega anticipada.
Vendedor Solo cobra si el comprador contrató el seguro de envío al pagar (por defecto el vendedor recibe el 80 % del precio).

Para el dueño del servidor:

  • Desactiva los atracos del todo con Interceptable = false, o pon un valor mínimo de pedido.
  • Por defecto no hay blip: los ladrones tienen que encontrar la furgoneta. Puedes avisar a un trabajo (por ejemplo 'robber') con un blip cuando sale una entrega robable (NotifyJob).
  • Conecta un aviso a la policía en Config.OnDeliveryRobbed o en el handler OnDeliveryRobbed.
  • El minijuego (velocidad, ancho del tramo, teclas, sonidos) se ajusta entero en Config.SkillCheck.
  • Si la furgoneta se destruye o no llega a tiempo, al comprador se le reembolsa automáticamente.
  • Todo se valida en el servidor: la distancia, los modelos, los tiempos y los intentos no se pueden falsear desde el cliente.
  • Chat por anuncio con bandeja de entrada, estado de lectura y mensajes del sistema.
  • Ofertas de precio y ofertas de subasta inversa dentro del chat.
  • Propuestas de trueque con objetos + dinero, contraofertas, aceptación y cancelación. Los objetos ofrecidos quedan en depósito para que nadie pueda estafar.
  • Quedadas en persona: propón tu posición actual, un punto del mapa o un sitio predefinido; el otro jugador acepta o rechaza; el blip, la ruta y el plazo solo aparecen cuando los dos están de acuerdo.
  • Comparte tu ubicación o tu contacto de teléfono desde el chat.
  • Perfil de tienda: nombre de tienda único, bio, color de avatar e idioma preferido.
  • Escaparate: banner, descripción larga, hasta 3 anuncios fijados, y pestañas de anuncios activos, ventas, valoraciones y «sobre la tienda».
  • Insignia de verificado, automática (por defecto: 50 ventas, media de 4,5 ★ y 10 valoraciones).
  • Sigue a vendedores y recibe avisos de sus nuevos anuncios (los avisos se pueden silenciar por vendedor).
  • Alertas de precio: te avisa cuando se publica un objeto por debajo del precio que marques.
  • Favoritos, y reportes con motivos configurables (los anuncios se ocultan solos al acumular varios reportes).
  • 5 temas: Cash (por defecto), Indigo, Gold, Vice y Mono. Se guardan por separado para cada personaje en el dispositivo actual.
  • Inglés y español, a elección de cada jugador: la interfaz, los avisos, las indicaciones en el mundo y las notas del buzón lo siguen. Añade cualquier idioma copiando un archivo de locales/.
  • Paleta de comandos (Ctrl+K) para ir a cualquier sitio, filtros, orden y paginación.
  • Notificaciones agrupadas como en un móvil, con sonidos en los momentos clave.
  • Marcadores en el mundo y avisos de «pulsa E» dibujados por el script y anclados al repartidor, al punto de encuentro o a la furgoneta — siguen el tema del jugador.
  • Vue 3, los iconos y las fuentes vienen dentro del recurso: la interfaz carga sin ningún CDN.

/marketadmin abre un panel con:

  • Resumen con indicadores en directo.
  • Anuncios (buscar, previsualizar, cancelar), reportes (revisar, descartar), usuarios (banear, desbanear), reembolsos (forzar).
  • Historial y operaciones (entregas y trueques), en solo lectura.
  • Cada acción pide confirmación y el servidor comprueba el permiso marketplace.admin.

Además: límites de uso por acción, limpieza automática de datos antiguos y logs de Discord opcionales por evento.

  • 38 hooks de servidor en server/handlers.lua: 8 guardas que pueden bloquear una acción (CanCreateListing, CanBuyListing, CanPlaceBid…) y 30 avisos (OnSaleCompleted, OnDeliveryRobbed…). Un error en tu código se captura y se registra; nunca rompe la venta.
  • 21 eventos de cliente en client/handlers.lua (sl-marketplace:onPurchaseCompleted, onOutbid, onSkillCheckFinished…), para sonidos, HUD o notificaciones de teléfono.
  • Config.Notify para usar tu propio sistema de notificaciones (ox_lib, okokNotify…).
  • /markethandlers muestra qué hooks se han ejecutado, sus errores y las llamadas lentas.