Cómo funcionan las integraciones#
Arm Wrestling se comunica con el resto de tu servidor mediante un archivo pequeño y abierto por framework, en custom/, que gestiona el dinero y los nombres de los jugadores. El framework se detecta cuando arranca el recurso; los recursos opcionales se usan siempre que estén en ejecución.
Capa | Compatibles | Sin ella |
|---|---|---|
Framework |
| Funciona en modo standalone: las apuestas no mueven dinero y los nombres vienen de FiveM. |
Base de datos |
| Obligatorio. |
Librería |
| Obligatorio. Callbacks, el menú de la mesa y las notificaciones. |
Notificaciones |
| Las notificaciones de ox_lib. |
Aviso 3D |
| El texto 3D integrado sobre un fondo oscuro. |
Cada integración opcional se degrada en silencio. Un recurso que falta hace que su parte recurra a la alternativa, nunca que lance un error. Al que hay que vigilar es el framework: si arranca después de Arm Wrestling no se encuentra, y las apuestas no cobran ni pagan nada sin avisar.
Frameworks#
El framework se elige entre los siguientes que ya estén iniciados cuando arranca Arm Wrestling:
Recurso | Modo |
|---|---|
|
|
|
|
|
|
Ninguno de ellos |
|
Cada modo tiene un archivo (custom/esx/server.lua, custom/qb/server.lua y custom/standalone/server.lua) y solo se carga el del modo detectado. Todos los archivos implementan las mismas funciones, todas en el servidor:
Función | Decide |
|---|---|
| Cuánto puede apostar un jugador. ESX lee la cuenta de efectivo ( |
| Cobra una apuesta cuando se acepta un desafío. |
| Paga al ganador o devuelve una apuesta. |
| El nombre en la lista de rivales, en un desafío y en los mensajes. ESX usa el nombre del personaje, QBCore y Qbox el nombre y el apellido, y standalone el nombre de FiveM. |
| El identificador del jugador: el |
Standalone dice que cada jugador puede pagar cualquier apuesta y no cobra nada: sirve para probar el script, no para una economía real.
Pagar las apuestas desde el banco#
Por defecto, las apuestas salen del efectivo. Para usar la cuenta bancaria, cambia las tres funciones de dinero en el archivo de tu framework:
-- custom/esx/server.lua
function framework:getMoney(source)
local xPlayer = self:getPlayerFromId(source)
if not xPlayer then return 0 end
return xPlayer.getAccount('bank').money
end
function framework:removeMoney(source, amount)
local xPlayer = self:getPlayerFromId(source)
if not xPlayer then return false end
xPlayer.removeAccountMoney('bank', amount)
return true
end
function framework:addMoney(source, amount)
local xPlayer = self:getPlayerFromId(source)
if not xPlayer then return false end
xPlayer.addAccountMoney('bank', amount)
return true
end-- custom/qb/server.lua
function framework:getMoney(source)
local player = self:getPlayerFromId(source)
if not player then return 0 end
return player.PlayerData.money.bank or 0
end
function framework:removeMoney(source, amount)
local player = self:getPlayerFromId(source)
if not player then return false end
return player.Functions.RemoveMoney('bank', amount, 'qs-armwrestling-bet')
end
function framework:addMoney(source, amount)
local player = self:getPlayerFromId(source)
if not player then return false end
return player.Functions.AddMoney('bank', amount, 'qs-armwrestling-win')
endReinicia qs-armwrestling después de guardar. La interfaz sigue mostrando las cantidades con el signo $.
Una moneda personalizada#
Las apuestas se pueden pagar en algo que no sea dinero (fichas de casino, una moneda VIP, tokens de tu propio script) apuntando a ello las mismas tres funciones. Con ox_inventory y un ítem casino_chips:
-- in the file of the framework you run: custom/esx, custom/qb or custom/standalone
function framework:getMoney(source)
return exports.ox_inventory:GetItemCount(source, 'casino_chips')
end
function framework:removeMoney(source, amount)
return exports.ox_inventory:RemoveItem(source, 'casino_chips', amount)
end
function framework:addMoney(source, amount)
return exports.ox_inventory:AddItem(source, 'casino_chips', amount)
endCambia las tres a la vez.
addMoneyes la forma en que se paga al ganador y se devuelven las apuestas; si la dejas en dinero, un bote cobrado en fichas se devuelve en efectivo. Edita solo el archivo del framework que usas: los demás nunca se cargan.
Permisos#
Abrir el creador, y cada guardado, movimiento y eliminación dentro de él, se comprueba en el servidor contra un ace: Config.Creator.permission, command.armwrestlecreator salvo que lo cambies. Cualquier cosa que conceda ese ace funciona:
# A group
add_ace group.admin command.armwrestlecreator allow
# Or one player directly
add_ace identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx command.armwrestlecreator allowUn grupo que ya tenga command allow también lo cubre. Reinicia el servidor después de editar server.cfg, ya que los aces se leen al ejecutarlo. Jugar no necesita ningún permiso.
Notificaciones y el aviso#
Ambos se eligen solos: no hay nada que configurar:
Parte | Con | Si no |
|---|---|---|
Notificaciones |
|
|
El aviso de la mesa |
| Texto 3D dibujado sobre un fondo oscuro encima de la mesa. |
El menú de la mesa | El menú contextual de ox_lib. | — |
Teclas en pantalla | Los botones de instrucciones del propio GTA V, durante una partida y al colocar una mesa. | — |
Para qs-textui, inícialo antes de qs-armwrestling en server.cfg.
Añadir un framework#
Para admitir un framework que no está en la lista basta con una carpeta y una línea.
Copia el puente más parecido
Copia
custom/esx/ocustom/qb/a una carpeta con el nombre de tu framework, por ejemplocustom/myframework/, manteniendo el nombre de archivoserver.lua.Cambia las llamadas de dentro
Completa
getPlayerFromId,getIdentifier,getMoney,removeMoney,addMoneyygetNamecon las funciones de tu framework. El archivo debe terminar conreturn framework, como los originales.Regístralo para la detección
Añade el recurso de tu framework a la lista al principio de
config.lua, apuntando al nombre de la carpeta, y asegúrate de que arranca antes deqs-armwrestling.lua local frameworks = { -- resource name -> internal name ['es_extended'] = 'esx', ['qb-core'] = 'qb', ['qbx_core'] = 'qb', ['my_core'] = 'myframework', }
En el siguiente arranque, la consola indica Server framework loaded: myframework. Si el nombre de la carpeta no coincide, se muestra un error cuando arranca el recurso.
Idiomas#
41 traducciones vienen en locales/: árabe (ar), búlgaro (bg), bengalí (bn), catalán (ca), checo (cs), danés (da), alemán (de), griego (el), inglés (en), español (es), estonio (et), persa (fa), finés (fi), francés (fr), hebreo (he), hindi (hi), croata (hr), húngaro (hu), indonesio (id), italiano (it), japonés (ja), coreano (ko), lituano (lt), letón (lv), malayo (ms), neerlandés (nl), noruego (no), polaco (pl), portugués (pt), rumano (ro), ruso (ru), eslovaco (sk), esloveno (sl), sueco (sv), suajili (sw), tailandés (th), turco (tr), ucraniano (uk), urdu (ur), vietnamita (vi) y chino (zh).
Config.Locale = 'es'Un solo archivo traduce las notificaciones y toda la interfaz, incluido el creador. Para añadir un idioma, copia en.json con el nuevo código, traduce los valores y establece Config.Locale a ese código. Conserva todas las claves: una clave que falte en el archivo aparece en el juego como missing_<key>. Un código sin ningún archivo recurre al inglés.



