Changelog
Todas las versiones de SL-Marketplace, de la más reciente a la más antigua. El formato sigue Keep a Changelog y el proyecto usa Semantic Versioning.
v1.16.2 · Reempaquetado de release
Sección titulada «v1.16.2 · Reempaquetado de release»29 de septiembre de 2026
- Paquete regenerado desde el código fuente sin cambios de la versión 1.16.1; no cambia el comportamiento del juego ni la base de datos.
v1.16.1 · Corrección de traducción del selector de temas
Sección titulada «v1.16.1 · Corrección de traducción del selector de temas»29 de septiembre de 2026
- Corregido el nombre que faltaba en inglés y español para el tema Mono del selector.
- No hay cambios en la base de datos ni hace falta una migración.
v1.16.0 · Idiomas y preferencias por jugador
Sección titulada «v1.16.0 · Idiomas y preferencias por jugador»29 de septiembre de 2026
- Todos los mensajes Lua que ve un jugador usan el idioma de su perfil: avisos, compras y pujas, robos de entregas, indicaciones, fotos y buzón.
- Se añaden 427 textos editables en inglés y español en
locales/en.luaylocales/es.lua. Se dejan sin cifrar para que los administradores puedan cambiarlos o añadir idiomas. - Los textos compartidos usan
Config.DefaultLang, ahoraen. El registro de jugadores nuevos usa el idioma por defecto del servidor y la interfaz recurre al inglés cuando falta una traducción. - Los temas de la interfaz se guardan por separado para cada personaje en el dispositivo actual. Al cambiar de personaje se recuperan su tema y el color de sus markers.
- Se corrige la documentación de la integración de teléfono:
lb-phoneestá integrado si se activaConfig.Phone.Enabled = true. - No hay cambios en la base de datos ni hace falta una migración.
v1.15.2 · Documentación completa
Sección titulada «v1.15.2 · Documentación completa»29 de septiembre de 2026
- El README describe ahora todas las funcionalidades, incluidos los atracos al repartidor y el minijuego: quién puede robar, qué se lleva cada parte y cómo ajustarlo.
- Instalación paso a paso: descarga desde el Cfx Portal, el requisito de licencia del escrow, cómo conseguir la key gratuita de Imgbb y el permiso de admin.
- Secciones nuevas: comandos y teclas, mapa de configuración, qué puedes editar, y preguntas frecuentes y problemas.
- DOCUMENTATION añade el resultado de los atracos y la lista completa de hooks de servidor y eventos de cliente.
- Se quitan afirmaciones que no eran ciertas: no hay app de teléfono incluida.
- Sin cambios de código ni de base de datos: no hace falta ninguna migración.
v1.15.1 · Documentación
Sección titulada «v1.15.1 · Documentación»29 de septiembre de 2026
- El checklist de release deja constancia de que la 1.15.0 se publicó tras probar su build cifrado en un servidor real.
- Se quitan de la lista de versiones los enlaces a un repositorio antiguo de terceros.
- Sin cambios de código ni de base de datos: no hace falta ninguna migración.
v1.15.0 · Rediseño de la interfaz y el pulso del robo
Sección titulada «v1.15.0 · Rediseño de la interfaz y el pulso del robo»29 de septiembre de 2026
Es la versión más grande desde que existe el recurso: la interfaz está reescrita entera y el robo de entregas ha dejado de ser una espera.
⚠ Cambio incompatible
Sección titulada «⚠ Cambio incompatible»- El webhook de Discord pasa a una convar exclusiva del servidor. Configura
set sl_marketplace_discord_webhook "TU_URL"enserver.cfgy elimina el antiguo campoConfig.Discord.Webhookde tu configuración compartida. El recurso ya no lee ese campo. ManténConfig.Discord.Enabled = truepara activar los logs; usaset, nuncasetrnisets, para la URL. Config.Gameplay.NPCDelivery.ExtractionTimeya no existe. Forzar el maletero era aguantar una tecla seis segundos; ahora es un minijuego de puntería que dura lo que tarde el jugador, así que un número fijo de milisegundos dejó de significar nada. Lo sustituyenExtractionAttempts(cuántos intentos hay) yExtractionMinSeconds(el suelo que valida el servidor). Quien actualice conservando suconfig.luano verá ningún error: el ajuste viejo simplemente se ignora, así que hay que revisarlo a mano.- Desaparece también
StopSpeedThreshold, que ya estaba anotado en 1.14.3.
Documentación
Sección titulada «Documentación»- Toda la documentación está en inglés (
*.md) y en español (*.es.md).DOCUMENTACION.mdpasa a serDOCUMENTATION.es.md.
Interfaz
Sección titulada «Interfaz»- La portada de la tienda de un vendedor se desplaza con el contenido y el avatar monta sobre ella sin quedar recortado; el botón de cerrar sigue fijo en la esquina.
- Vue 3.4.38, Lucide 0.462.0 y las fuentes se incluyen localmente, con sus licencias. El arranque de la interfaz ya no necesita los CDN de JavaScript ni Google Fonts; las fotos y los iconos externos siguen usando sus servicios.
- Rediseño visual completo, por componentes y con una vista por archivo: catálogo, ficha de producto, publicar, mensajería, perfil, buzón, alertas, seguidos, favoritos, mis anuncios y panel de administración.
app.jsqueda partido en módulos de dominio bajostore/, con una batería de pruebas que vigila que la plantilla no use bindings quesetup()no devuelve — el fallo que tenía las ofertas flash invisibles sin un solo error en consola.- Los avisos pasan a forma de notificación de móvil, se agrupan cuando se repiten y llevan el color del tema. El icono del HUD y los avisos comparten columna, así que el tercer aviso ya no tapa el icono.
- Once avisos más pasan de frase a campos, de modo que el artículo, el importe y quién lo manda se leen sin releer la frase entera.
- Un error de JavaScript ya no deja al jugador sin poder jugar, y un icono o una foto rota ya no se llevan por delante la interfaz.
El mundo
Sección titulada «El mundo»- Los markers son un anillo y no un disco: marcan el sitio sin taparlo, laten despacio y se iluminan al acercarte. Cogen el color del tema que tenga puesto el jugador.
- El «pulsa E para…» es propio, no la cajita gris de GTA, así que también se entera del tema. Va clavado en la entidad de la que habla —el repartidor, la persona con la que has quedado, el maletero— y encoge con la distancia.
- Con eso desaparece el último texto 3D dibujado con nativas de GTA.
El robo de entregas
Sección titulada «El robo de entregas»-
Nuevo minijuego: un anillo que da una vuelta y un tramo que hay que acertar. Tres fases, cada una más rápida, más estrecha y con otra tecla, para que no se pueda machacar una sola. Se configura entero en
Config.SkillCheck. -
Fallar cuesta: hay tres intentos por furgoneta y por jugador, y gastados los tres el cierre se revienta para ese jugador. Solo gasta intento fallar el pulso; que te disparen o que la furgoneta arranque, no.
-
Recibir daño corta el intento. Antes solo cortaba disparar tú, así que podías comerte una ráfaga entera con el minijuego girando tan tranquilo.
-
El ladrón se queda quieto y con una animación de estar manipulando algo, en vez de abrir una furgoneta con los brazos colgando.
-
Corregido: con el repartidor encañonado se podía pulsar E y recibir el pedido igual, quedándote el paquete robado y el comprado. Un repartidor retenido ya no entrega nada, y el servidor lo comprueba aunque quien encañone sea un tercero.
-
Tres eventos nuevos para integraciones:
sl-marketplace:onSkillCheckStarted,onSkillCheckPhaseyonSkillCheckFinished. -
Tema nuevo: Mono. Neón blanco sobre negro puro, el único sin color de marca. Los markers y el «pulsa E» del mundo lo siguen como a los demás, así que también se vuelven blancos.
- Los avisos por vendedor seguido se pueden apagar sin dejar de seguirlo, desde
la vista de seguidos. Requiere
sql/migrate_1.15.sql.
Correcciones
Sección titulada «Correcciones»- El límite de solicitudes de robo por jugador y entrega ya no se reinicia al caducar el token; al agotarlo se invalida también el token anterior.
- La intimidación comprueba el modelo y la vida del repartidor registrado.
- Los lotes no se podían publicar con
ox_inventory. - El buzón trataba un lote como si fuera un item suelto, y la entrega por NPC no llevaba su contenido.
- Los modales eran invisibles dentro del juego.
- El panel de administración no abría.
- La entrega inmediata prometía un buzón que no usa.
v1.14.4 · Correcciones de empaquetado
Sección titulada «v1.14.4 · Correcciones de empaquetado»20 de agosto de 2026
- Crítico:
server/devtools.luaestaba declarado enfxmanifest.luapero excluido del ZIP de distribución, de modo que el recurso no arrancaba limpio en una instalación nueva. El archivo vuelve a formar parte del paquete y sigue inerte salvo queConfig.Debugsea true y quien lo invoque sea administrador. - Las trazas de diagnóstico del flujo de fotografías (39 en Lua, 9 en la interfaz) ya no escriben en consola: quedan detrás de
Config.Debugen el servidor y el cliente, y detrás dePHOTO_DEBUGen la interfaz. - La carpeta
tests/se excluye del paquete comercial, igual quehtml/tests/. RELEASE_CHECKLIST.mddocumenta quegit archiveproduce un ZIP vacío sin error si se lanza fuera de la raíz del repositorio, y añade un paso de verificación del contenido del paquete.
v1.14.3 · Endurecimiento de la entrega NPC
Sección titulada «v1.14.3 · Endurecimiento de la entrega NPC»20 de agosto de 2026
- El servidor elige los modelos de repartidor y furgoneta y el cliente ya no puede spawnear otros distintos.
- El registro de entidades de una entrega es inmutable, valida modelo, vínculo conductor-vehículo, cercanía al origen y rechaza net IDs reutilizados por otra entrega.
- Los IDs de entrega y de red se normalizan de forma estricta: se descartan NaN, decimales, negativos y valores fuera del rango de 16 bits.
- La recogida exige un repartidor vivo, con el modelo esperado y a distancia real del comprador; el reporte de entrega perdida requiere el vehículo destruido y verificado.
- El robo comprueba el modelo del vehículo y acota la ventana de extracción por arriba, además del mínimo ya existente.
- Nuevos rate limits dedicados:
deliverySpawn,deliveryClaimydeliveryRobbery. - La extracción del maletero deja de depender de
StopSpeedThreshold(eliminado): puede iniciarse en movimiento, pero mantiene la exigencia de proximidad. - Añadida la batería
tests/security.test.jsque cubre estas garantías.
v1.14.2 · Endurecimiento server-side
Sección titulada «v1.14.2 · Endurecimiento server-side»7 de agosto de 2026
- Las entregas NPC validan en servidor entidades de red, proximidad, tiempos y motivos de fallo; ya no se puede robar o liquidar una entrega desde cualquier posición.
- Las pujas usan claims condicionales para evitar carreras de saldo/estado; proxy-bids, cancelaciones y reclamaciones de buzón tienen límites y validaciones adicionales.
- Reembolsos, cancelaciones administrativas y operaciones de trueque evitan doble resolución; las contraofertas monetarias ahora reservan el dinero del comprador al aceptarse.
- Se rechazan entradas malformadas, cantidades/precios fuera de rango y acciones bulk sin rate limit.
- El permiso del panel admin usa el ACE explícito
marketplace.adminy la interfaz ya no queda vacía si el usuario no está autorizado.
v1.14.1 · Seguridad de credenciales de imágenes
Sección titulada «v1.14.1 · Seguridad de credenciales de imágenes»7 de agosto de 2026
- Las credenciales de Imgbb/Imgur ya no se guardan en
config.lua, que se comparte con los clientes. - La subida de fotos lee las credenciales desde convars exclusivamente server-side.
- Añadidas instrucciones de configuración para
sl_marketplace_imgbb_keyysl_marketplace_imgur_client_id.
v1.14.0 · Trueque con máquina de estados + contraoferta
Sección titulada «v1.14.0 · Trueque con máquina de estados + contraoferta»19 de abril de 2026
🔁 Los trueques ahora negocian antes de cerrarse
Sección titulada «🔁 Los trueques ahora negocian antes de cerrarse»- Una propuesta pasa por: propuesto → (contrapropuesto)* → aceptado → en-ventana → completado/cancelado
- El vendedor puede mandar una contraoferta desde el chat pidiendo items distintos; la propuesta original se marca
Contrapropuestoy los items ofertados vuelven al comprador - El comprador puede aceptar la contraoferta (bloqueando los items pedidos como escrow), rechazarla o cancelar su propuesta original
- Al aceptar el trueque no se hace el intercambio al instante: se crea un trade en persona que requiere quedada física (misma UX que compra
person) - Cuando ambos se encuentran en proximidad y confirman, los items + dinero se intercambian finalmente
- Todos los eventos (propuesta, contraoferta, aceptado, cancelado, rechazado) se registran en el hilo del chat como filas de sistema
Nuevos endpoints server
Sección titulada «Nuevos endpoints server»marketplace:counterTrade— el vendedor publica una contraoferta indicando qué items quiere a cambiomarketplace:cancelProposal— el emisor retira su propuesta abierta (refund de escrow)marketplace:rejectProposal— el destinatario rechaza (refund de escrow)marketplace:acceptTrade— reescrito: crea unmarketplace_tradesdetrade_kind='barter'con snapshot de la oferta y arranca la ventana de encuentro
Migration
Sección titulada «Migration»- Ejecutar
sql/migrate_1.14.sql→ amplíatrade_statusdel mensaje (countered,cancelled,expired,completed) y añadecounter_of_message_id,wanted_items,trade_id; y añadetrade_kind+barter_offerenmarketplace_trades - Trueques ya aceptados en v1.13 siguen completando con el intercambio tradicional; el nuevo flujo solo aplica a propuestas creadas a partir de v1.14
v1.13.0 · Quedar bajo demanda (on-demand meetup)
Sección titulada «v1.13.0 · Quedar bajo demanda (on-demand meetup)»19 de abril de 2026
🤝 El trade en persona ya no dispara blips/prompts automáticamente
Sección titulada «🤝 El trade en persona ya no dispara blips/prompts automáticamente»- Tras comprar con
person, se abre el chat con el vendedor como antes, pero no hay blip ni prompt - Cualquiera de los dos envía una propuesta de quedada desde el chat (posición actual o punto en el mapa)
- La otra parte Acepta / Rechaza la propuesta desde el chat
- Solo al aceptarse se activan blip + prompt de proximidad; además se abre una ventana temporal (10 min por defecto)
- Si nadie se acerca a tiempo, la quedada caduca y vuelve al estado “chat-only” — se puede re-proponer
- Cualquier parte puede cancelar una propuesta o una quedada activa en cualquier momento
- Todos los eventos (propose/accept/cancel/decline/expire) quedan registrados en el hilo del chat como filas de sistema
Config nueva (config.lua)
Sección titulada «Config nueva (config.lua)»Config.InPersonTrade = { ... MeetRequestTimeoutSeconds = 300, -- propuesta caduca sin respuesta MeetWindowSeconds = 600 -- 10 min para encontraros tras aceptar}Migration
Sección titulada «Migration»- Ejecutar
sql/migrate_1.13.sql→ añademeet_status,meet_proposed_by,meet_proposed_coords,meet_proposed_at,meet_window_ends_atamarketplace_trades - Trades existentes pasan a
meet_status='none'→ se puede proponer quedada desde el chat
v1.10.0 · Buyer-choice delivery
Sección titulada «v1.10.0 · Buyer-choice delivery»13 de abril de 2026
🚚 El comprador elige cómo recibir, el vendedor marca sus preferidos
Sección titulada «🚚 El comprador elige cómo recibir, el vendedor marca sus preferidos»- En listados
fixed/dutch/bundleel vendedor marca modos de entrega preferidos (checkboxes multi) - El comprador siempre puede elegir cualquier modo al comprar, desde un modal unificado
- Si elige un modo NO preferido → paga un extra (
Config.DeliveryBuyerFee) que va íntegro al vendedor - Subastas/trueque/reverse mantienen un único modo fijado por el vendedor (no hay buyer activo al cerrar)
Configurables nuevos (config.lua)
Sección titulada «Configurables nuevos (config.lua)»Config.DeliveryBuyerFee = { mailbox = 0, meetup = 100, npc = 0, person = 300}Migration
Sección titulada «Migration»- Ejecutar
sql/migrate_1.10.sql→ añadedelivery_modes_allowed VARCHAR(60)amarketplace_listings - Listados legacy (NULL) siguen funcionando en modo single-mode
- Modal de compra unificado con radio de 4 modos + chip visual “preferido” / “+$X”
- Total a pagar se calcula en vivo (precio + extra mode + NPC cost + seguro)
- Meetup se deshabilita si el listado no tiene punto configurado
v1.9.0 · Vehículos, armas, iconos y toasts propios
Sección titulada «v1.9.0 · Vehículos, armas, iconos y toasts propios»13 de abril de 2026
🚗 Venta de vehículos ESX
Sección titulada «🚗 Venta de vehículos ESX»Inventory.GetListahora incluye los vehículos deowned_vehiclesdel jugador- Listar un vehículo cambia
ownera'marketplace'(escrow) preservando todas las props/tuning - En cancel/expiración → se restaura al vendedor; en venta → se transfiere al comprador
- Vehículos solo soportan
fixed/auction/blind/dutch, con entregamailbox/meetup/person(NPC delivery bloqueada) item_metadatapersiste plate + model del vehículo para la entrega diferida
🔫 Venta de armas (loadout ESX)
Sección titulada «🔫 Venta de armas (loadout ESX)»- Se listan armas del
getLoadout()con ammo y componentes - Al listar se hace
p.removeWeapon; al reclamar del buzón se restaura con ammo y componentes - Label automático:
Pistola (120 mun) - (ox_inventory ya maneja armas como items, no hace falta capa extra)
🖼️ Iconos de items (fallback sin foto)
Sección titulada «🖼️ Iconos de items (fallback sin foto)»Config.ItemIcons.UrlPatternscon soporte%s(nombre) y%c(categoría)- Prioriza
nui://ox_inventory/web/images/(self-contained, ~2000 iconos gratis) - Fallback a
nui://marketplace/html/images/para items custom - Cascada on-error: si el primer pattern falla, prueba el siguiente
- Fallbacks específicos para
vehicleyweapon(_vehicle.png/_weapon.pngen la carpeta local) - Cero dependencias externas — todo se sirve desde FiveM assets
🔔 Toasts propios (no más ESX notify bajo el UI)
Sección titulada «🔔 Toasts propios (no más ESX notify bajo el UI)»- Helper
notify(msg, ok)en client: si el marketplace está abierto usa el toast NUI interno; si está cerrado cae a ESX - Soluciona el bug de notificaciones ESX quedando tapadas por la interfaz
Migración
Sección titulada «Migración»- La tabla
marketplace_listingsya teníaitem_metadata; no se necesita migration SQL - Si usas un fork con esta columna renombrada, ajusta en
createListing
v1.8.0 · Delivery Overhaul
Sección titulada «v1.8.0 · Delivery Overhaul»12 de abril de 2026
🚚 Home delivery (NPC) refinado
Sección titulada «🚚 Home delivery (NPC) refinado»- Sin blips por defecto (stealth):
ShowBlipToBuyer=falseyShowBlipToWorld=false - Los compradores/interceptores deben localizar al repartidor físicamente en el mapa
- Intimidación: apunta con arma al NPC a <5m → prompt “E” → NPC para el vehículo y alza manos
- % de éxito configurable (55% por defecto) al intimidar
- Si falla la intimidación, el NPC intenta huir
- Hook
Config.OnDeliveryRobbedpara que servers conecten alerta a policía - Broadcast de network IDs del NPC a todos los clientes para que puedan interceptar
🤝 Compra en persona (Wallapop-style)
Sección titulada «🤝 Compra en persona (Wallapop-style)»- Nuevo
delivery_mode = 'person'en listados - Al comprar, el buyer elige punto de encuentro (meetup predefinido o waypoint libre)
- Tabla
marketplace_tradescon buyer_accepted + seller_accepted bilateral - Ambos ven blip del punto + notificación
- Proximity scan: cuando ambos están <3m del punto → prompt “E — Iniciar tradeo”
- Modal bilateral: cada uno ve el estado del otro, los dos deben pulsar “Confirmar mi parte”
- Transferencia atómica cuando ambos aceptan (item → comprador, dinero → vendedor)
- Cancelación por timeout (2h default), por abandono, o manual
Bug fixes
Sección titulada «Bug fixes»- Refunds ya no duplican items:
applyRefundahora retira el item del comprador antes de devolverlo al vendedor. Si el comprador está offline o no tiene el item, el refund se rechaza automáticamente (salvo force admin) - Corregido refund de bundles para procesar todos los items del lote
Config nuevo
Sección titulada «Config nuevo»Config.Gameplay.NPCDelivery.ShowBlipToBuyer / ShowBlipToWorldConfig.Gameplay.NPCDelivery.IntimidationEnabled / IntimidationDistance / RobSuccessRate / PoliceAlertOnRobConfig.InPersonTrade.*(Enabled, ProximityMeters, LocationRadiusMeters, TimeoutMinutes, AllowCustomLocation)Config.OnDeliveryRobbed(thiefSrc, deliveryId, value)hook function
v1.7.0 · Storefronts & Trust
Sección titulada «v1.7.0 · Storefronts & Trust»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Storefronts expandidos: perfil público convertido en una tienda completa
- Banner de cabecera (URL configurable por vendedor)
- Descripción larga (hasta 1500 chars)
- Listados fijados (hasta 3) que aparecen arriba con borde dorado
- Tabs: Activos / Vendido / Valoraciones / Sobre (long description)
- Muestra historial de ventas recientes + top valoraciones
- Link rápido desde el perfil propio para ver “mi storefront”
- Pin/unpin listings con botón en la propia tienda del vendedor
- Sistema de refunds completo:
- Ventana configurable (7 días por defecto)
- Botón “Pedir refund” en historial para compras elegibles
- Modal de solicitud con motivo obligatorio (mín 10 chars)
- Sección en historial para el vendedor con refunds pendientes
- Vendedor aprueba (→ item vuelve, dinero vuelve) o rechaza con nota
- Auto-aprobación por timeout configurable (72h default)
- Panel admin con cola de refunds y botón force
- Columnas nuevas en
marketplace_users:banner_url,long_description,pinned_listings - Tabla nueva
marketplace_refundscon tracking completo
Config.Storefront.Enabled/MaxPinned/LongDescriptionMaxLenConfig.Refunds.Enabled/WindowDays/AutoApproveAfterHours/ServerFeeRefunded
v1.6.0 · Trueque / Barter
Sección titulada «v1.6.0 · Trueque / Barter»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Nuevo listing_type
barter: intercambio de items sin dinero (o con componente monetario) - Vendedor especifica
wants_items(items que acepta a cambio) o marcawants_any - Columna
offered_itemsenmarketplace_messagespara propuestas de trueque - Columna
trade_status(open/accepted/rejected/withdrawn) en messages - Modal “Proponer trueque” con selector de items del inventario + dinero opcional
- Items propuestos se bloquean en escrow hasta aceptar/rechazar/expirar
- Al aceptar: transferencia atómica bidireccional
- Al aceptar una propuesta: todas las demás se auto-rechazan y se reembolsan
- Al expirar: item del publicante vuelve al buzón + refund de todas las propuestas
- Botón “Aceptar trueque” en chat (solo visible para el publicante del barter)
- Config.Barter.Enabled / AllowMoneyComponent / MaxItemsPerProposal / DurationMinutes
v1.5.0 · Auction Variants
Sección titulada «v1.5.0 · Auction Variants»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Subastas holandesas (
dutch): precio empieza alto y baja automáticamente- Columnas
dutch_floor,dutch_step_percent,dutch_interval_min - Precio actual calculado en vivo (client + server)
- UI muestra countdown hasta la próxima bajada
- Validaciones de rango: step 5-25%, floor >= 10% del precio inicial
- Columnas
- Subastas inversas (
reverse): el comprador publica lo que busca- El comprador deposita el precio máximo en escrow
- Los vendedores envían ofertas via chat con
offer_amount - Botón “Aceptar oferta” en el chat para el comprador
- Al aceptar: transfer de item, payout con comisión, refund del excedente
- Si expira sin aceptar: devuelve depósito automáticamente
- Config nuevos:
Config.Auctions.Dutch,Config.Auctions.Reverse(toggles)
v1.4.0 · NPC Delivery
Sección titulada «v1.4.0 · NPC Delivery»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Nuevo delivery mode
npc: un NPC en vehículo lleva el paquete al comprador - Spawn automático de ped + vehículo desde el meetup más cercano
- NPC conduce hasta el destino con IA de GTA V
- Sistema de interceptación opcional: si
Config.Gameplay.NPCDelivery.Interceptable=true, otros jugadores ven un blip rojo en el origen y pueden robar al NPC - Solo listados por valor >=
MinValueForInterceptgeneran blips compartidos - Seguro opcional (+10%): si roban el paquete, el vendedor cobra el 80% del precio
- Payout al vendedor solo al confirmarse la entrega (no al comprar)
- Detección de robo por muerte del NPC o destrucción del vehículo
- Auto-retry si el vehículo se queda atascado
- Blip privado del comprador siempre visible para seguir su paquete
- Timeout automático de 15 min que cancela la entrega y reembolsa
- Tabla
marketplace_deliveriescon historial completo
Config.Gameplay.NPCDelivery.EnabledConfig.Gameplay.NPCDelivery.Cost($500 por envío)Config.Gameplay.NPCDelivery.Interceptable(toggle para server no-PvP)Config.Gameplay.NPCDelivery.MinValueForInterceptConfig.Gameplay.NPCDelivery.InsuranceCost/InsurancePayoutConfig.Gameplay.NPCDelivery.MaxDistance,Speed,DeliveryTimeoutConfig.Gameplay.NPCDelivery.Models.Peds/Vehicles
v1.3.0 · Gameplay Update
Sección titulada «v1.3.0 · Gameplay Update»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Flash sales con descuento temporal (10-70%) y duración configurable (10-120 min)
- Badge rojo pulsante y countdown visible en cards
- Precio tachado con descuento aplicado
- Bundles (lotes): empaqueta hasta 8 items del inventario en un listado
- UI builder para crear lotes con selector desde inventario
- Entrega múltiple al comprar un lote
- Placeholder
Config.Gameplay.NPCDeliverypara v1.4
v1.2.0 · Auction Pro
Sección titulada «v1.2.0 · Auction Pro»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Subastas ciegas (blind): pujas ocultas hasta el final
- Proxy bidding estilo eBay: sube tu puja automáticamente hasta tu máximo
- Config.Auctions.Blind.Enabled y Config.Auctions.ProxyBidding.Enabled
v1.1.0 · Social Update
Sección titulada «v1.1.0 · Social Update»12 de abril de 2026
Añadido
Sección titulada «Añadido»- Follow vendedores con notificaciones de nuevos listados
- Wishlist / alertas por item con precio máximo opcional
- Badge vendedor verificado automático (50 ventas + 4.5★ + 10 ratings)
- Sistema de reportes con motivos configurables
- Perfil público clicable con listados activos
- UI overhaul: sidebar, design tokens, iconos Lucide, command palette (Ctrl+K)
- Skeleton loaders, toasts con iconos, empty states mejorados
12 de abril de 2026
Añadido
Sección titulada «Añadido»- Venta directa y subastas con anti-snipe automático
- Buy Now en subastas con refund al pujador
- Bump de listados expirados/activos (cuesta dinero)
- Featured listings con borde dorado y prioridad en orden
- Perfiles de vendedor con shop name único, bio, avatar color
- Ratings 1-5 estrellas + comentario tras cada compra
- Reputación automática (+1 por venta, +1 por 5★)
- Categorías de items con iconos
- Rarezas (común → legendario) con precio mínimo forzado
- Multi-foto por listado (hasta 4) con cámara libre in-game
- Upload de fotos a Imgur vía API
- Chat/ofertas comprador↔vendedor por listado con inbox
- Favoritos / watchlist con notificaciones al pujar
- Notificaciones push en tiempo real con toasts por tipo
- Sonidos en eventos clave (outbid, venta, compra)
- Entrega física “meetup” en 4 puntos del mapa con blip + ruta
- Buzón (mailbox) para items y dinero con claim
- Historial de transacciones filtrable (ventas/compras/todo)
- Estadísticas de precio histórico al elegir item en vender
- Filtros avanzados: búsqueda, categoría, rareza, rango precio, orden
- Paginación con total de listados y páginas
- Panel admin con listar/cancelar/banear
- ACE permissions
group.admin+ identifiers manuales - Comando
/marketadminpara abrir en modo admin - Webhooks Discord configurables por evento
- Rate limiting (ventana deslizante) por acción y jugador
- Auto-cleanup de listados y mailbox antiguos (cron 1h)
- UI Vue 3 por CDN (sin build step) con i18n ES/EN
- Modal de confirmación sustituyendo
confirm()del navegador - Galería de fotos con navegación teclado
- Empty states con iconos grandes por sección
- Soporte para
ox_inventoryautodetectado - Stub de integración con
lb-phone/qb-phone
Técnico
Sección titulada «Técnico»- 8 tablas SQL con índices apropiados y foreign keys
- Abstracción de inventario ESX/ox en
server/inventory.lua - Módulo de webhooks Discord aislado en
server/discord.lua - Módulo de cámara libre aislado en
client/camera.lua