Integracion con tu sistema de gangs¶
nb-gangwars es agnostico respecto a tu sistema de gangs — se integra mediante tres funciones en config.lua que tu completas. Aqui van ejemplos listos para pegar.
nb-jobscreator (default)¶
Por defecto el config ya asume que usas nb-jobscreator (del suite de Neenbyss).
function GetPlayerGangClient()
return exports['nb-jobscreator']:GetPlayerGang()
end
function GetPlayerGangServer(src)
return exports['nb-jobscreator']:GetPlayerGang(src)
-- debe devolver { name = 'vagos', label = 'Vagos' } o nil
end
function AddGangMoney(gangName, amount)
exports['nb-jobscreator']:AddGangMoney(gangName, amount)
end
ESX + societies¶
function GetPlayerGangClient()
local xPlayer = ESX.GetPlayerData()
if xPlayer and xPlayer.job and xPlayer.job.name ~= 'unemployed' then
return xPlayer.job.name
end
end
function GetPlayerGangServer(src)
local xPlayer = ESX.GetPlayerFromId(src)
if xPlayer then
return { name = xPlayer.job.name, label = xPlayer.job.label }
end
end
function AddGangMoney(gangName, amount)
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_' .. gangName, function(acc)
if acc then acc.addMoney(amount) end
end)
end
Si usas un addon especifico de gangs (tipo
esx_gangs), cambiajobporgangen las llamadas y el prefijo de la society a'gang_'.
QBCore + qb-management¶
function GetPlayerGangClient()
local playerData = Bridge.GetPlayerData()
if playerData and playerData.gang and playerData.gang.name ~= 'none' then
return playerData.gang.name
end
end
function GetPlayerGangServer(src)
local player = Bridge.GetPlayer(src)
if player and player.PlayerData.gang and player.PlayerData.gang.name ~= 'none' then
return { name = player.PlayerData.gang.name, label = player.PlayerData.gang.label }
end
end
function AddGangMoney(gangName, amount)
exports['qb-management']:AddMoney(gangName, amount)
end
Sistema custom¶
Cualquier sistema funciona mientras respetes las firmas:
GetPlayerGangClient() -> string|nil— nombre interno.GetPlayerGangServer(src) -> { name: string, label: string }|nil.AddGangMoney(gangName, amount) -> void— deposita en la cuenta / wallet / lo que prefieras.
Gotchas¶
- Sin
AddGangMoney, la captura se registra pero la recompensa no llega — el script arranca sin errores y confunde al admin. Confirma con un toast/print que el dinero se deposito. GetPlayerGangClienttiene que ser estable: si tu sistema devuelvenilmientras el PlayerData carga, el jugador quedara fuera hasta refrescar. Valida trasOnPlayerLoaded.- Admin requerido: el panel (
/gangzones) depende deBridge.IsAdmin(src). Revisa tuConfig.AdminGroupsen nb-bridge o en el script consumidor. - Zonas sin gang atacante: si todos los jugadores de una gang salen durante una fase, la captura se cancela. Esto es intencional para forzar presencia constante.
- Un servidor authoritative: el cliente solo informa; las transiciones de fase y la recompensa se calculan en el servidor. No confies en eventos client-side para cuadrar la economia.