Cómo funcionan las integraciones#
Crutches se comunica con tu framework, tu inventario y tu sistema de notificaciones mediante unos pocos puentes pequeños. El framework se detecta al iniciar buscando un recurso en marcha, así que no hay nada que configurar a mano.
Capa | Compatibles | Sin él |
|---|---|---|
Framework |
| Obligatorio. El ítem, el menú de EMS y el guardado no funcionan. |
Inventario | Cualquier inventario que respete los ítems usables de tu framework: qs-inventory, ox_inventory, qb-inventory, el de ESX por defecto. | El ítem no se puede usar. EMS y los exports siguen funcionando. |
Menú y diálogos |
| Obligatorio. El recurso no se inicia. |
Base de datos |
| Obligatorio. Las prescripciones no se pueden guardar ni restaurar. |
Notificaciones |
| Pasa a la siguiente de la lista. |
Discord | Cualquier webhook de Discord | No se envían logs. |
Qbox es compatible mediante su compatibilidad con
qb-core, queqbx_coreofrece de serie. Los personajes se identifican poridentifieren ESX y porcitizeniden QBCore y Qbox, así que las prescripciones siguen al personaje, no a la cuenta de Rockstar.
Los archivos que puedes editar#
La mayor parte de qs-crutches está cifrada. Estos archivos se dejan abiertos a propósito para que puedas adaptarlo a tu servidor:
Archivo | Contenido |
|---|---|
| Idioma, trabajos, duración, modelo, forma de caminar, animación de recogida, posición del prop, depuración. |
| Todos los mensajes que ven los jugadores, por idioma. |
| Cómo se muestran las notificaciones y cómo se recoge la muleta caída. |
| Cuándo pide el cliente al servidor su estado de muletas guardado. |
| El webhook de Discord y el aspecto del embed del log. |
Notificaciones#
Todos los mensajes pasan por una función, Notification(msg, notifyType) en client/custom/custom.lua. Usa qs-interface si está en marcha; si no, ox_lib; y si no, el feed nativo de GTA. El tipo es uno de success, error, warning o inform.
Para usar otro recurso de notificaciones, sustituye el cuerpo de la función:
-- client/custom/custom.lua
function Notification(msg, notifyType)
notifyType = notifyType or 'inform'
exports['okokNotify']:Alert('Crutches', msg, 5000, notifyType == 'inform' and 'info' or notifyType)
endLos avisos propios del menú de EMS de "no hay jugador cerca" e "ID no válido" son notificaciones de ox_lib y no pasan por esta función.
Logs de Discord#
Cada vez que se aplican o quitan muletas —salvo una muleta manual— se puede publicar un embed en un canal de Discord. Pega la URL de tu webhook en server/webhook.lua:
Webhook.URL = 'https://discord.com/api/webhooks/...' -- empty = no logs
Webhook.Name = 'Crutches' -- the webhook's display name
Webhook.Avatar = '' -- an image URL for its avatar
Webhook.Color = 16753920 -- the embed colour, as a decimal
Webhook.IncludeIdentifiers = true -- add license, steam, fivem and discord IDsAcción | Se registra cuando |
|---|---|
| Un jugador usa el ítem de muleta. |
| Un paramédico aplica muletas desde el menú. |
| Un paramédico quita muletas desde el menú. |
| Otro script llama a |
| Otro script llama a |
Cada embed muestra la acción, los minutos, el motivo, quién las dio y a quién (nombre e ID de servidor), la hora en UTC y, con IncludeIdentifiers, los identificadores de ambos jugadores. La caducidad no se registra.
Carga del personaje#
Las muletas guardadas de un jugador se restauran cuando carga su personaje. El script escucha esx:playerLoaded en ESX y QBCore:Client:OnPlayerLoaded en QBCore y Qbox, y vuelve a comprobarlo unos segundos después de que el jugador aparezca.
Si tu multipersonaje o selector de aparición carga el personaje más tarde, vuelve a pedir el estado cuando el jugador esté en el mundo:
-- client/custom/framework/esx.lua (or qb.lua)
RegisterNetEvent('my-multichar:client:spawned', function()
Wait(500)
TriggerServerEvent('crutch:server:syncState')
end)El prop de la muleta#
El prop es v_med_crutch01, cargado por el recurso crutches. Para usar otro modelo, define Config.CrutchModel y ajusta Config.Attach hasta que quede bien en la mano:
Campo | Significado |
|---|---|
|
|
| El hueso al que se une la muleta. |
| Desplazamiento desde ese hueso, en metros. |
| Rotación desde ese hueso, en grados. |
El aviso de recogida, su tecla (E) y su alcance (2,2 metros) están en startPickupThread en client/custom/custom.lua, por si quieres que la muleta se recoja de otra forma, por ejemplo con un target.
Idiomas#
Se incluyen 29 traducciones en locales/. Elige una con Config.Language:
Config.Language = 'en'
-- ar · bg · ca · cs · da · de · el · en · es · fa · fr · he · hi · hu · it
-- jp · ko · nl · no · pl · pt · ro · ru · sl · sv · th · tk · tr · zh-CNUn código sin archivo usa el inglés. Para añadir un idioma, copia locales/en.lua a un archivo nuevo, cambia Locales["en"] por tu código, traduce el texto y pon Config.Language con ese valor. Mantén los marcadores %d y %s: es donde van los minutos, los IDs y los motivos.



