Script de rehenes para FiveM

Hostage: documentación

Rehenes para FiveM. Apunta con un arma o un cuchillo a un NPC o a un jugador. Cuando se rinda, pulsa [E] para controlarlo:

  • de rodillas;
  • atar;
  • bolsa en la cabeza;
  • llevar contigo;
  • meter en tu carro;
  • escudo humano;
  • registrar;
  • soltar.

La policía recibe un aviso. Todo está sincronizado para todos los jugadores y el servidor comprueba cada acción.

Funciones

  • 🔫 Las armas y los cuchillos asustan a la gente (lista configurable; los tasers y otras herramientas nunca). Las armas funcionan a distancia, los cuchillos de cerca.
  • 🧍 Los NPC reaccionan como personas:
    • la mayoría levanta las manos;
    • algunos salen corriendo;
    • los pandilleros pueden sacar una pistola;
    • la policía, la seguridad y los militares nunca se rinden.
    • Los conductores de un carro parado se bajan con las manos arriba.
  • 🙋 Los jugadores deciden: reciben un aviso cuando alguien les apunta y levantan las manos con [X] (tecla configurable). Una vez rendidos, el captor puede tomarlos como rehén.
  • 🧎 De rodillas / de pie (manos arriba), atar las manos (sin item por defecto), bolsa en la cabeza (un prop real; el jugador casi no ve nada).
  • 🚶 Llevar contigo: el rehén camina detrás de ti y acelera si se queda atrás.
  • 🚗 Meter en / sacar de un vehículo: primero los asientos de atrás. El rehén se queda sentado mientras manejas.
  • 🛡️ Escudo humano con armas de una mano (pistolas, subfusiles tipo pistola, cuchillos). No puedes correr, saltar ni subir a un carro mientras sujetas a alguien.
  • 🔍 Registrar:
    • NPC: una cosa al azar de una lista con pesos (aluminio, agua, comida, $1-2 de dinero sucio por defecto), a veces nada; sin dinero limpio salvo que lo configures; una vez por persona;
    • jugadores: abre su inventario (ox_inventory, origen_inventory, qs-inventory, qb-inventory; rama custom para otros).
  • 🏃 Los rehenes sin atar pueden escapar si dejas de amenazarlos un rato. Los jugadores atados pueden intentar soltarse con un skill check cada X segundos.
  • 👮 Avisos a la policía: siempre, solo cuando lo ve un NPC testigo, o nunca. Sistemas compatibles:
    • origen_police, ps-dispatch, cd_dispatch, qs-dispatch, core_dispatch, rcore_dispatch;
    • sin dispatch, los policías de servicio reciben una notificación y un blip.
  • 🔒 Seguro:
    • el servidor guarda quién tiene a quién;
    • los rehenes se sueltan cuando alguien muere, se desconecta o la policía lo esposa;
    • un máximo de rehenes por jugador;
    • trabajos protegidos.
  • 📊 Logs de Discord: rehén tomado, soltado, escapado, aviso a la policía.
  • ⚡ Ligero: los bucles duermen mientras no tienes un arma fuera ni rehenes.
  • 🌍 Español e inglés (locales/). QBCore, Qbox o standalone. Las notificaciones, los textos "[E]" y las barras de progreso pasan por rolo_notify automáticamente, con ox_lib, qb-core u okok como alternativas.

Dependencias

  • ox_lib (menú, skill check, callbacks)
  • Opcional: rolo_notify (notificaciones, burbujas "[E]", barras de progreso)

Instalación

  1. Pon rolo_hostage en tu carpeta resources.
  2. En server.cfg, después de ox_lib (y de tu framework / inventario):
    ensure rolo_hostage
    
  3. Reinicia. Eso es todo: no hay base de datos y no hace falta ningún item.
  4. Opcional:
    • pedir items (Config.Tie.item, Config.Bag.item);
    • poner tus trabajos de policía (Config.Police.jobs) y tu dispatch (Config.Police.system).

Cómo se usa

Quién Cómo
Captor Apunta a alguien con un arma o un cuchillo. Los NPC reaccionan al segundo. Un jugador tiene que levantar las manos.
Captor [E] apuntando a una persona rendida o estando junto a tu rehén abre el menú.
Jugador [X] sube / baja las manos (/manosarriba).
Rehén [G] intenta soltarse (cada Config.Players.escape.everySeconds).

Cada jugador puede cambiar las teclas en Configuración > Asignación de teclas > FiveM.

Configuración (config.lua)

Opción Qué hace
Config.Locale, Framework, Inventory, Notify, TextUI, Progress 'auto' los detecta
Config.MenuKey, MaxHostages, ActionDistance Tecla del menú, rehenes por jugador, alcance
Config.Weapons Armas sí / no, lista de cuchillos, armas bloqueadas, distancias
Config.NPC Tiempo para rendirse, probabilidades de resistirse, modelos que nunca se rinden, bajarse del carro, escapar, botín del registro
Config.Players Tecla / comando de manos arriba, aviso al apuntar, skill check de escape, registro del inventario, trabajos protegidos
Config.Tie, Config.Bag Items opcionales y tiempo, modelo de la bolsa
Config.Shield Armas permitidas con escudo humano
Config.Vehicle Distancia y orden de asientos
Config.Police Modo del aviso, retraso, radio de testigos, tiempo de espera, trabajos, sistema de dispatch, código y blip
config_server.lua Logs de Discord (hostage, police, default), solo servidor

Exports

-- servidor
exports.rolo_hostage:IsHostage(src)          -- true mientras ese jugador es rehén
exports.rolo_hostage:GetCaptor(src)          -- id del servidor de su captor o nil
exports.rolo_hostage:GetHostages(captor)     -- { { kind, target, netId, state, tied }, ... }
exports.rolo_hostage:ReleaseHostages(captor) -- suelta a todos los que tiene ese jugador
exports.rolo_hostage:FreePlayer(src)         -- suelta a un jugador rehén (por ejemplo desde tu script de policía)

-- cliente
exports.rolo_hostage:IsHostage()             -- este jugador es rehén
exports.rolo_hostage:HandsUp()               -- este jugador tiene las manos arriba
exports.rolo_hostage:IsCaptor()              -- este jugador tiene a alguien
exports.rolo_hostage:GetMyHostages()

Eventos de servidor para otros scripts: rolo_hostage:taken (captor, kind, target / netId) y rolo_hostage:released (captor, kind, target / netId, reason).

Archivos abiertos (sin escrow)

  • config.lua
  • locales/*.lua: todos los textos
  • bridge/client.lua: notificaciones, textos "[E]", barra de progreso, skill check, abrir el inventario de un jugador, dispatch de cliente
  • bridge/server.lua: framework, dinero, items, inventarios, comprobación de esposas, avisos a la policía, logs de Discord

Notas

  • El script no toca a los jugadores esposados por la policía. En QBCore / Qbox se detecta con metadata.ishandcuffed; para otros scripts de policía, edita Bridge.IsCuffed.
  • Las animaciones y los props son del juego base.

Secretos: config_server.lua

Los webhooks de Discord y las API keys van en config_server.lua, no en config.lua. config.lua se envía al juego de cada jugador (FiveM lo comparte), así que cualquiera con trampas podría leerlo; config_server.lua solo lo carga el servidor. Pega ahí tus webhooks y deja config.lua sin secretos.

Compatibilidad

El núcleo de compatibilidad (compat/server.lua + compat/client.lua, archivos abiertos) detecta tus sistemas al arrancar y los muestra en la consola del servidor, por ejemplo compat: framework qbcore · inventory ox_inventory · garages qb-garages · society qb-banking.

  • Inventarios: ox_inventory, origen_inventory, qs-inventory, codem-inventory, core_inventory, qb-inventory, ps-inventory / lj-inventory / tgiann-inventory (mediante las funciones de jugador de QBCore). Config.Inventory = 'custom' + Compat.CustomInventory.
  • Los errores se muestran en la consola con el nombre del sistema, nunca en silencio.
  • Los nombres y columnas siguen la documentación pública de cada script. Prueba una vez después de instalar con tu propia configuración.

ROLO SCRIPT · Soporte y actualizaciones en nuestro Discord.

¿Te atascaste?

Escríbenos en el canal de soporte de Discord con el script, tu framework y el error de la consola.