SCRIPT

Documentación de Desguace de vehículos

Desguace de vehículos (ov_desguace)

Que hace

ov_desguace convierte un desguace del mapa en un trabajo completo para tus jugadores: robar un coche, llevarlo a un puesto, picarlo pieza por pieza y cobrar. Incluye contratos de misión, una tablet de banda con tienda y caja, un impound propio, robos con tarjeta y, de forma opcional, la recuperación de piezas de tuning de jg-mechanic.

El recurso se diseñó con las carpetas editable/ (framework, inventarios, grupos) y locales/ para que el comprador adapte lo que necesite.

Requisitos

Dependencias declaradas en el fxmanifest.lua: ox_lib y oxmysql. Lua 5.4 (lua54 'yes'). Base de datos MySQL o MariaDB mediante oxmysql.

ObligatorioOpcional
ox_lib, oxmysqlInventario: ox_inventory, qb-inventory, codem-inventory o modo custom (incluye soporte para qs-inventory y origen_inventory)
QBCore (qb-core)Target: ox_target o qb-target (o modo custom)
Un inventario compatible de la listaGarajes: jg-advancedgarages, qb-garages o ninguno
Una tabla player_vehicles de QBCoreOrganizaciones: op-crime (o crime-system) o la banda (gang) del framework
Grupos: bd-groups o ninguno (cada jugador es su propio grupo)
Despacho: rcore_dispatch, frkn-dispatch, qs-dispatch o tu propio sistema mediante un evento
Combustible: ox_fuel, LegacyFuel, cdn-fuel (o el que indiques en la configuración)
Llaves: qs-vehiclekeys, 0r-vehiclekeys o qb-vehiclekeys
jg-mechanic, solo para el módulo de piezas de tuning

Framework. El recurso está hecho para QBCore. Los archivos de client/editable/framework/ y server/editable/framework/ traen una base para ESX y otra para frameworks propios (Config.Core.Framework = 'esx' o 'custom'), pero los robos, la tablet, las misiones, el impound y el módulo de tuning llaman a QBCore directamente. Por eso ESX no está soportado de punta a punta: con ESX o un framework propio tendrías que adaptar esas partes a mano.

Inventarios. Se elige en Config.Core.Inventory. Con custom el recurso detecta origen_inventory, qs-inventory o qb-inventory. El módulo de tuning usa solo las funciones comunes del inventario, así que no depende de uno concreto.

Estado de pruebas. Según el README del recurso, la versión 3.0.0 pasa la comprobación de sintaxis y las pruebas de carga de configuración e idiomas, pero todavía no está probada completa dentro del juego. Pruébala en un servidor de desarrollo antes de llevarla a producción.

Instalacion

  1. Descarga el recurso desde el Portal de Cfx.re (sección de assets comprados) con la cuenta Cfx.re con la que hiciste la compra. Viene protegido con Asset Escrow de Cfx.re: solo funciona en servidores cuya licencia pertenece a tu cuenta.
  2. Copia la carpeta ov_desguace a resources de tu servidor. Los archivos que no se cifran, y que puedes editar, son: shared/config.lua, shared/parts.lua, locales/, client/editable/, server/editable/, install/ y toda la interfaz html/. El resto del Lua va cifrado.
  3. Agrega los items de tu inventario: pega install/items_ox_inventory.lua en el items.lua de ox_inventory, o install/items_qb-core.lua en el items.lua de qb-core. Los items normales de QBCore (lockpick, advancedlockpick, repair_kit, radio...) ya existen en la mayoría de servidores; si falta alguno, agrégalo igual.
  4. Copia las imágenes de html/img/ a la carpeta de imágenes de tu inventario (en ox_inventory, web/images/).
  5. Base de datos: las tablas ov_desguace_* se crean solas al arrancar el recurso. Si usas el módulo de tuning, también se crea sola ov_desguace_tuning_recoveries; el archivo install/tuning_recoveries.sql es la misma tabla por si prefieres crearla a mano.
  6. En server.cfg, asegura el recurso después de ox_lib, oxmysql, tu framework y tu inventario (y de jg-mechanic si usas el módulo de tuning):
   ensure ox_lib
   ensure oxmysql
   ensure qb-core
   ensure ox_inventory
   ensure ov_desguace
  1. Permisos opcionales (ACE):
   add_ace group.admin ov_desguace.bypass allow
   add_ace group.admin ov_desguace.admin allow

ov_desguace.bypass salta las restricciones de acceso. ov_desguace.admin permite /desguacejefe (también valen los permisos admin y god de QBCore). Los comandos de administración marcados como restringidos necesitan además command.<nombre> (ver la sección de comandos).

  1. Arranca el servidor y, desde el juego o la consola, nombra al primer jefe de la organización con /desguacejefe (ver más abajo). Sin un primer jefe nadie puede reclutar en la tablet.
  2. Abre shared/config.lua y ajústalo. Las coordenadas por defecto corresponden a un MLO concreto de desguace (puestos, puntos de venta, tablet, impound y taller). Si usas otro mapa tienes que cambiarlas a tus propias coordenadas.

Configuracion

Todo está en shared/config.lua (y los precios en shared/parts.lua). Los valores de abajo son los que trae por defecto.

General

ClavePor defectoPara qué sirve
Config.Language'es'Idioma de todo el recurso: 'es' o 'en'.
Config.Core.Framework"qb"'qb', 'esx' o 'custom' (ver Requisitos).
Config.Core.Inventory"ox_inventory"'ox_inventory', 'qb-inventory', 'codem-inventory' o 'custom'.
Config.Core.Target"ox"'ox', 'qb' o 'custom'.
Config.Core.ProgressBar"ox"'ox', 'qb' o 'custom'.
Config.Core.GroupsSystem"none"'bd' (bd-groups) o 'none'.
Config.Core.DebugEnabledfalseMás mensajes de error en consola (por ejemplo del despacho).
Config.Markerr=198, g=255, b=30, a=170Color y transparencia de los marcadores del suelo.
Config.BlipColor2Id de color de GTA para los blips (2 = verde).

Integraciones (Config.Integrations)

Con 'auto' se usa el recurso que esté arrancado; con 'none' se desactiva.

ClavePor defectoOpciones
Fuel'auto''auto', 'ox_fuel', 'LegacyFuel', 'cdn-fuel', 'lc_fuel', 'none'
VehicleKeys'auto''auto', 'qs-vehiclekeys', 'qb-vehiclekeys', '0r-vehiclekeys', 'none'
Garages'auto''auto', 'jg-advancedgarages', 'qb-garages', 'none'
Organizations'auto''auto', 'op-crime', 'framework'
Dispatch'auto''auto', 'rcore_dispatch', 'frkn-dispatch', 'qs-dispatch', 'none'

Acceso y requisitos

ClavePor defectoPara qué sirve
Config.Access.EnabledtrueActiva la restricción de acceso.
Config.Access.Mode"job_or_gang"'job', 'gang', 'job_or_gang' o 'job_and_gang'.
Config.Access.AllowedJobs{ "mechanic" }Trabajos que pueden operar.
Config.Access.AllowedGangs{}Bandas permitidas; vacío = cualquier banda real.
Config.Access.AceBypassEnabled = true, ov_desguace.bypassPermiso ACE que salta las restricciones.
Config.Access.AdminAce"ov_desguace.admin"Permiso ACE para /desguacejefe.
Config.StealRequirementEnabled = true, Items = { "advancedlockpick" }Item que el jugador debe llevar para poder procesar un coche.

Vehículos de jugadores e impound

ClavePor defectoPara qué sirve
Config.OwnedVehicleCheck.EnabledtrueAplica las reglas de coches registrados en player_vehicles.
Config.OwnedVehicleCheck.SendToImpoundtrueEl coche del dueño va al impound del desguace en vez de borrarse.
Config.OwnedVehicleCheck.RemoveFromDatabasefalsefalse = no se borra de la base de datos.
Config.OwnedVehicleCheck.FallbackGarage"Impound"Garaje al que va el coche si el impound no se puede usar.
Config.ChopshopImpound.EnabledtrueActiva el impound del desguace.
Config.ChopshopImpound.Price50000Tarifa que paga el dueño por recuperar su coche (no va a la caja de la banda).
Config.ChopshopImpound.AccessCoords / SpawnCoordsdel MLO por defectoPunto de acceso y de salida del coche.
Config.ChopshopImpound.GarageTag"ov_desguace_impound"Etiqueta del impound en el sistema de garajes.

Ubicaciones

ClavePara qué sirve
Config.JobDataPosición de la tablet y del NPC del desguace (EnablePed = false por defecto: el NPC está desactivado, la tablet funciona igual).
Config.DeliveryCoordsLos 6 puestos donde se aparca y se pica el coche.
Config.SellPointsLos 6 puntos donde se entrega cada pieza y se cobra.
Config.MisionSpawnLocations10 zonas (con nombre) donde puede aparecer el coche de una misión.
Config.VehicleCoordsLista de ubicaciones de vehículos; en este recurso se usa para el modo de depuración (/chopdebug).

Misiones

ClavePor defectoPara qué sirve
Config.MisionTiers[1..3]Fácil, Medio, DifícilVehículos, partsMultiplier (0.4 / 0.65 / 1.0), bonus (15.000 / 30.000 / 45.000), estimate y guardias de cada nivel.
Config.Missions.Cooldown300Segundos de espera tras entregar una misión.
Config.Missions.CancelCooldown120Segundos de espera si se cancela o se rechazan los contratos.
Config.Missions.DailyLimit6Misiones por jugador y día.
Config.Missions.ResetHour0Hora del servidor (0-23) a la que se reinicia el contador diario.
Config.Missions.ContractSeconds30Tiempo para elegir contrato (la interfaz muestra una cuenta atrás de 30 s).
Config.GuardBrainenabled = true, agresividad 2Rangos de alerta (32 m) y ataque (18 m), puntería y refuerzos.

Tienda de la tablet (Config.Shop)

Commission = 0.10 (el 10 % de cada compra va a la caja de la organización). Items es una lista de { name, price, image }; precios por defecto: ganzúa 500, ganzúa avanzada 1.500, juego de destornilladores 800, kit electrónico 3.000, kit de reparación 1.200, binoculares 600, radio 2.500, tarjetas de robo 50.000 cada una, bidón de gasolina 1.000, cortapernos 2.500 y carga térmica 7.500. El nombre y la descripción de cada item salen de locales/ (cl_tab_item_<name>_label y _desc); el servidor valida el precio.

Robos (Config.Robberies)

ClavePor defectoPara qué sirve
EnabledtrueActiva los robos con tarjeta.
PoliceJob'police'Trabajo que confirma y paga la recompensa.
ActivationRadius15.0Metros a la ubicación para poder activar la tarjeta.
Cooldown600Segundos entre dos robos del mismo tipo.
Types.ammunationitem tarjetarobo_ammunation, recompensa 875.0009 ubicaciones.
Types.fleecaitem tarjetarobo_fleeca, recompensa 4.500.0006 ubicaciones.
Types.metroitem tarjetarobo_metro, recompensa 2.900.0001 ubicación.

Cada tipo también define el sprite y el color del blip y minBandits / maxBandits. Los textos del aviso están en locales/server_features.lua.

Otras

Precios por pieza (shared/parts.lua)

Por defecto cada rueda (wheel_fl, wheel_fr, wheel_rl, wheel_rr) paga 20.000 y cada puerta (door_fl, door_fr, door_rl, door_rr) y el capó (hood) pagan 25.000; las nueve piezas suman 205.000. DesguaceBonusFinalPorDefecto (20.000) es el bonus de cierre cuando no hay contrato. DesguacePagoMaximo (50.000) es un tope de seguridad por pago: si subes un precio o un bonus por encima, el servidor rechaza el cobro, así que sube también ese tope.

Idiomas

Los textos están en locales/*.lua con AddLocale('es', {...}) y AddLocale('en', {...}). Para agregar un idioma, copia cada bloque AddLocale de todos los archivos de locales/, cámbiale el código (por ejemplo 'pt'), traduce los textos y pon Config.Language = 'pt'. La tablet toma sus textos de html/js/i18n.js: agrega ahí una tabla con el mismo código.

Colores de la interfaz

La interfaz usa la identidad de Otra Vida: negro mate, verde lima (--accent: #C6FF1E) y crema, con esquinas cortadas. Todas las variables están al inicio de html/css/style.css, dentro de :root (--accent, --accent-rgb, --accent-hover, --bg-app, --bg-card, --danger, --text-primary...). Cambia ahí la marca; para que los marcadores y blips del mundo coincidan, ajusta también Config.Marker y Config.BlipColor. (El README del recurso habla de una paleta roja, pero el CSS que se entrega es verde lima.)

Comandos y permisos

Jugadores

ComandoEfecto
/desguaceAbre la tablet (requiere acceso según Config.Access). También se abre con E junto a la tablet del desguace.
/misiondPide los tres contratos de misión (lo mismo que el botón "Iniciar Misión" de la tablet).
/cancelarmisionCancela la misión activa (aplica la espera de cancelación).
/abandonardesguaceAbandona el desguace en curso y borra el progreso guardado.
/limpiardesguaceComando de emergencia: quita los objetos pegados al jugador y reinicia su estado de desguace.
/piezasVuelve a abrir el diálogo de piezas de tuning recuperables (módulo de tuning).
/reacondicionarAbre el reacondicionado de piezas usadas (solo mecánicos de jg-mechanic).
/pagarroboSolo el trabajo de Config.Robberies.PoliceJob: lista los robos activos y confirma el pago.

Teclas: E para aparcar el coche en un puesto, quitar una pieza, venderla, abrir la tablet, abrir el impound y forzar la cerradura del coche de misión.

Administración

ComandoPermisoEfecto
/desguacejefe [id] [rango]ACE ov_desguace.admin, permisos admin o god de QBCore, o consolaNombra o cambia el rango de un miembro. Rango 0-4 (por defecto 4 = Jefe); -1 lo saca de la organización.
/borrar <placa>restringido (command.borrar)Borra del mundo la entidad con esa placa y deja el coche en garaje en la base de datos.
/forzarlimpieza [id]restringido (command.forzarlimpieza)Fuerza la limpieza de objetos de desguace en un jugador.
/chopcheckplate <placa>sin restricción en el códigoDice si la placa está en player_vehicles y de quién es.
/chopdbinfosin restricción en el códigoMuestra la base de datos activa y el nombre del recurso.
/chopdebug y /chopstatesin restricción en el códigoDiagnóstico en el cliente: marcadores de puestos y estado del desguace.
`/tuningver <id\matrícula>, /tuningtodo, /tuningcatalogo, /tuningprobar`restringidos (command.<nombre>)Diagnóstico del módulo de tuning, solo lectura (/tuningprobar solo desde el juego).
/tuninglimpiar <matrícula> [categoría]ACE ov_desguace.bypassApaga el tuning que quedó pegado a un vehículo cercano.

Para los comandos restringidos: add_ace group.admin command.borrar allow (y lo mismo con cada nombre). Si quieres limitar /chopcheckplate, /chopdbinfo, /chopdebug y /chopstate, puedes hacerlo con add_ace/remove_ace del propio comando.

Eventos, exports e integración de despacho

El recurso no declara exports. Eventos que puedes escuchar:

Para integrar un despacho propio (por ejemplo ps-dispatch o cd_dispatch):

AddEventHandler('ov_desguace:server:alertaPolicia', function(d)
    -- d.code, d.title, d.message, d.coords, d.blip.sprite / colour / scale
    -- envía el aviso a tu despacho
end)

Pon Config.Integrations.Dispatch = 'none' si no quieres que se envíe a ninguno de los despachos incluidos.

Como se usa

  1. Acceso. Por defecto pueden operar los jugadores con el trabajo mechanic o que pertenezcan a una banda. Con el permiso ov_desguace.bypass se salta la restricción.
  2. Conseguir un coche. Roba un coche de la calle o, con una misión, ve a buscar el coche del contrato. Para procesar un coche necesitas llevar una ganzúa avanzada (Config.StealRequirement). El minijuego de habilidad aparece al forzar la cerradura del coche de una misión.
  3. Aparcar en un puesto. Entra con el coche en uno de los seis puestos marcados en el suelo y pulsa E. El servidor valida el coche: no puede ser un modelo de la lista negra, ni uno que otro jugador esté picando, y no puedes desguazar un coche tuyo. El coche queda congelado en el puesto.
  4. Picar piezas. Camina hasta cada pieza (ruedas, puertas y capó) y pulsa E: una animación de soldadura de 10 segundos y la pieza queda en tus manos. En coches de dos puertas, las puertas traseras que no existen se saltan.
  5. Vender. Lleva la pieza a un punto de venta y pulsa E: cobras en efectivo. Cada pieza se paga una sola vez por vehículo.
  6. Terminar. Con las nueve piezas vendidas cobras el bonus de cierre y el coche desaparece. Si el coche era de una misión, el pago de piezas y el bonus siguen el contrato.
  7. Misiones. Desde la pestaña Misiones de la tablet (o /misiond) recibes tres contratos, uno por nivel, con 30 segundos para elegir. Al aceptar, aparece el coche en la zona indicada con guardias según el nivel; usa una ganzúa avanzada (se consume) para abrirlo, supera el minijuego, recibe las llaves y llévalo al desguace. Hay espera entre misiones y límite diario; el HUD muestra la misión activa y permite cancelarla.
  8. Tablet de banda. Tienda: compra herramientas con carrito (se paga primero con efectivo y luego con banco; el 10 % va a la caja). Personal y Finanzas: solo para los rangos Líder y Jefe. Historial: vehículos de jugadores desguazados.
  9. Impound. Si desguazaron tu coche, ve al punto del impound (blip en el mapa), pulsa E, elige tu coche y paga la tarifa con tu banco: reaparece con tus mejoras y tus llaves.
  10. Robos con tarjeta. Compra una tarjeta en la tienda de la tablet, ve a una de las ubicaciones del tipo de robo (a menos de 15 m) y úsala desde el inventario. Se avisa a la policía y aparece un blip para todos; la policía paga la recompensa con /pagarrobo si los bandidos ganan.
  11. Piezas de tuning. Si el coche pasó por un taller de jg-mechanic, unos segundos después de aparcar se abre un diálogo con las piezas recuperables. Marca las que quieras, confirma (es irreversible) y recibes cada una como "Pieza de tuning usada". Solo se puede sacar una pieza por categoría y vehículo. Un mecánico las reacondiciona gratis en el taller o con /reacondicionar, y obtiene el item original.

Para administradores

Preguntas frecuentes

¿Funciona con ESX? No de punta a punta. El recurso está hecho para QBCore; las carpetas editable/ traen una base para ESX, pero los robos, la tablet, las misiones y el módulo de tuning usan QBCore directamente.

Nadie puede reclutar en la tablet. Hace falta un primer jefe: usa /desguacejefe con tu usuario (necesitas el permiso ov_desguace.admin o ser admin de QBCore).

Los puestos y marcadores aparecen en un lugar vacío del mapa. Las coordenadas por defecto son de un MLO concreto. Cambia Config.DeliveryCoords, Config.SellPoints, Config.JobData y Config.ChopshopImpound por las de tu mapa.

¿Se borran los coches de los jugadores? Por defecto no: van al impound del desguace y el dueño los recupera pagando Config.ChopshopImpound.Price. RemoveFromDatabase está en false.

¿Qué pasa si el jugador se desconecta mientras pica un coche? El progreso se guarda; al cargar su personaje el coche reaparece en el mismo puesto con las piezas ya retiradas. Con /abandonardesguace se borra.

Subí un precio y el servidor no paga. Cada pago tiene un tope de seguridad, DesguacePagoMaximo en shared/parts.lua. Súbelo junto con el precio.

¿Necesito jg-mechanic? No. Solo para el módulo de piezas de tuning; con Config.Tuning.Enabled = false, o sin jg-mechanic iniciado, el desguace funciona igual.

Actualizaciones y soporte

El recurso se entrega protegido con Asset Escrow de Cfx.re y se descarga desde tu cuenta del Portal de Cfx.re; allí encontrarás también las nuevas versiones. Los cambios de cada versión están en CHANGELOG.md. La licencia (LICENSE.txt) concede el uso en un servidor y prohíbe redistribuir o revender el recurso.

Si necesitas ayuda con la instalación o has encontrado un problema, escríbenos por el canal oficial de soporte: [enlace de soporte]. Indica la versión del recurso, tu framework e inventario, y el mensaje de error de la consola del servidor.