
Rental
Alquiler de vehículos: en las estaciones de alquiler, el jugador elige vehículo, color y tiempo de alquiler, paga por minuto y recibe el vehículo directamente en el punto de recogida – coches, barcos o aeronaves. Cuando se acaba el tiempo, desaparece; quien termine antes lo devuelve antes.
- ESX Legacy (
es_extended) - OneSync
Funciones
- Varias estaciones con NPC o marker, punto de recogida propio y, opcionalmente, selección de vehículos propia.
- Tres tipos de estación: alquiler de coches, alquiler de barcos (punto de recogida en el agua) y alquiler de aeronaves (pista o helipuerto) – cada uno con su propia lista de vehículos, su propio blip y sus propios textos en el menú.
- Precio por minuto, pago en efectivo o con banco, indicador de tiempo restante con avisos antes de que termine.
- Devolución anticipada: si el vehículo puede circular y está en el punto de recogida, se reembolsa una parte de los minutos sin usar. Si no, el alquiler termina sin reembolso. Log de Discord de cada devolución.
- Un alquiler por jugador. Si el spawn falla, se devuelve el dinero.
Instalación
- Pon la carpeta
off_rentalen tu carpetaresources. - En el
server.cfg– después de ESX:
ensure es_extended
ensure off_rental- Opcional: configura el webhook de las devoluciones en
config/settings/config.server.lua.
Configuración
config/settings/config.lua
| Opción | Predeterminado | Descripción |
|---|---|---|
serverInfo.name | 'OFF SCRIPTS' | Nombre del servidor, se muestra en la interfaz en lugar de «OFF SCRIPTS» |
serverInfo.locale | 'de' | Idioma: de, en, pl, fr, es, it o nl |
serverInfo.color | { 155, 89, 255 } | Color de la UI (RGB) |
serverInfo.design | 3 | Diseño de la interfaz: 1 = Clásico, 2 = Ticket, 3 = Storefront |
blur | true | Fondo desenfocado mientras el menú está abierto |
payment | 'both' | 'cash', 'bank' o 'both' (elige el jugador) |
rentalMinutes | 1–120, paso 5, inicio 30 | min, max, step y default del tiempo de alquiler en minutos |
warningMinutes | { 5, 1 } | Llega un aviso tantos minutos antes de que termine |
refundPercent | 50 | Devolución anticipada: se reembolsa este porcentaje de los minutos sin usar, 0 = sin reembolso |
platePrefix | 'RENT' | Inicio de la matrícula (máx. 4 caracteres), p. ej. RENT4821 |
ped / marker / blip | Mecánico / disco, 2 m / activado | Aspecto del NPC, el marker y el blip – marker.size también es la zona para E, blip.sprite va por tipo (car, boat, aircraft) |
config/settings/config.stations.lua – Estaciones de alquiler
| Campo | Descripción |
|---|---|
label | Nombre en el menú |
type | Opcional: 'car' (predeterminado), 'boat' o 'aircraft' – define la lista de vehículos, el blip y los textos |
interactionType | 'ped' (NPC, position = vec4 con orientación) o 'marker' (círculo, position = vec3) |
spawn | vec4 – punto de recogida y de devolución. Debe estar libre: calle o aparcamiento, en el agua para boat, en una pista o helipuerto para aircraft |
vehicles | Opcional: qué model de la lista del tipo hay aquí. Si se omite = todos |
config/settings/config.vehicles.lua – Vehículos y colores
Config.vehiclestiene una lista por tipo:car,boatyaircraft.- Por vehículo:
model,label,category(pestaña en el menú),price(precio por minuto) yseats. - Si falta una imagen de vehículo (p. ej. vehículos addon), colócala como
web/dist/assets/vehicles/<model>.png. Config.colors:label= nombre en el menú,rgb= color de pintura ({ r, g, b }, cada uno 0–255).
config/functions.lua
| Función | Para qué |
|---|---|
Notify(message, type) | Notify propio (avisos, fin del alquiler …) · Servidor: Notify(source, message, type) |
HelpNotify(text) | Texto de ayuda en la estación |
ClientVehicleRented(vehicle, plate) | Después del spawn – p. ej. llaves o combustible |
Logs de Discord
El webhook lo pones en config/settings/config.server.lua (solo en el servidor): returns registra cada devolución anticipada con vehículo, estación, minutos sin usar y reembolso. Una url vacía ('') desactiva el log. Además están name (nombre del bot), color (RGB) y también avatar e image (URL de imagen, '' = ninguna).
Idiomas
Todos los textos están en config/locales/<idioma>.json. Para tu propio idioma, copia un archivo, tradúcelo y ajusta serverInfo.locale – deja los marcadores como %d y {price}.
En el juego
En la estación, pulsa E, elige vehículo, color y tiempo de alquiler y paga en efectivo o con banco – te sientas directamente en el vehículo. El alquiler termina cuando se acaba el tiempo, el jugador sale del servidor o el vehículo se elimina. Los alquileres no se guardan: al reiniciar el script, todos los vehículos de alquiler desaparecen sin reembolso.
Devolución anticipada – solo en una estación del mismo tipo:
- Lleva el vehículo al punto de recogida marcado, detente y pulsa E.
- O pulsa E en la estación: el menú muestra el alquiler activo, el tiempo restante y el reembolso. Devolver vehículo termina el alquiler.
Reembolso = minutos completos sin usar × precio por minuto × refundPercent, a la misma cuenta que el pago. Si el vehículo no está en el punto de recogida, está destruido o ha desaparecido, el alquiler solo se puede terminar en el menú – tras una confirmación y sin reembolso. Después el vehículo se elimina; con barcos, el jugador vuelve a tierra.
Problemas frecuentes
| Problema | Solución |
|---|---|
[ERROR] en la consola del servidor | El script comprueba la instalación al iniciar. Lee el mensaje, corrígelo y reinicia el script. |
| «El punto de recogida está ocupado ahora mismo» | Hay algo en spawn. Despéjalo o mueve spawn – no se cobra nada. |
| «Este vehículo no está disponible aquí» | model incorrecto, no instalado, no está en la lista del tipo o en vehicles de la estación. |
| El barco o la aeronave aparece mal | spawn no está en el agua o no está libre en una pista o helipuerto – vuelve a tomar la posición. |
| No se puede devolver | Solo en una estación del mismo type; en el vehículo, detente primero. |
| No hay llave para el vehículo de alquiler | Pon tu script de llaves en ClientVehicleRented. |
| El NPC está dentro de una pared o flota | Ajusta position – z es la altura en la que está el jugador. |
¿Aún no lo has comprado?
Ver Rental en la tienda