EXOTICA NETWORKDocs
Configuración

Recompensa por tiempo

Sorteo periódico de premios entre los jugadores conectados

Cada cierto tiempo, el servidor sortea un premio entre los jugadores conectados. El menú muestra el premio actual, la cuenta regresiva y cuántas personas participan. Al terminar, el ganador se anuncia en el chat y, si lo configuras, en Discord.

Cómo funciona el sorteo

  1. Al iniciar el recurso se elige al azar el premio de la ronda entre la lista Rewards.
  2. El servidor cuenta el tiempo que cada jugador lleva conectado.
  3. Al acabar el intervalo, se elige un ganador al azar entre los jugadores elegibles, siempre que haya al menos MinPlayers.
  4. Se entrega el premio, se anuncia y empieza una nueva ronda con otro premio al azar.

El tiempo que ya contó para una ronda se descuenta al terminarla. Si un jugador se desconecta, pierde su tiempo acumulado.

Configuración

config_server.lua
ServerConfig.TimeReward = {
  Enabled = true,
  IntervalMinutes = 60,
  UiUpdateSeconds = 15,
  EligibilityMode = 'online',
  MinPlayedSeconds = 0,
  MinPlayers = 1,
  AnnounceNoWinner = false,

  DiscordWebhook = '',
  DiscordUsername = 'Exotica Network · Recompensas',
  DiscordAvatar = '',
  ChatTitle = 'RECOMPENSA',
  ChatColor = { 155, 92, 255 },

  ItemImageResource = 'ox_inventory',
  ItemImagePath = 'web/images',
  ItemImageExtension = 'png',

  VehiclePlatePrefix = 'EXN',
  VehicleGarage = 'pillboxgarage',

  EnableDebugCommand = false,
  DebugCommand = 'en_forcereward',

  Rewards = { ... },
}

Sorteo

OpciónDescripción
EnabledActiva o desactiva el sistema.
IntervalMinutesMinutos entre sorteos (mínimo 1).
UiUpdateSecondsCada cuántos segundos se actualiza la cuenta regresiva en el menú (mínimo 5).
EligibilityMode'online': participa cualquiera que lleve al menos MinPlayedSeconds conectado. 'full_interval': solo quien estuvo conectado todo el intervalo.
MinPlayedSecondsSegundos mínimos conectado para participar (modo online).
MinPlayersJugadores elegibles necesarios para que haya ganador.
AnnounceNoWinnerAnuncia en el chat y en Discord cuando no hay ganador.

Anuncios

OpciónDescripción
DiscordWebhookRespaldo. Usa mejor el convar en_pausamenu_webhook en server.cfg (ver Instalación).
DiscordUsernameNombre del bot que publica en Discord.
DiscordAvatarURL https de la imagen del bot (opcional).
ChatTitleTítulo del mensaje en el chat.
ChatColorColor del mensaje en el chat, en RGB.

El mensaje de Discord incluye el nombre del ganador, su ID, su mención de Discord (si tiene Discord vinculado), el premio y el número de participantes.

Imágenes y vehículos

OpciónDescripción
ItemImageResource / ItemImagePath / ItemImageExtensionDe dónde se sacan automáticamente las imágenes de los items. Por defecto, las de ox_inventory: nui://ox_inventory/web/images/<item>.png.
VehiclePlatePrefixPrefijo de la matrícula de los vehículos regalados (8 caracteres como máximo en total).
VehicleGarageGaraje donde aparecen los vehículos en QBCore y Qbox.

Premios

Cada premio es una tabla dentro de Rewards. Todos llevan label (el texto que se muestra) y type:

config_server.lua
Rewards = {
  { label = '$5,000', type = 'money', account = 'money', amount = 5000, image = 'images/money.png' },
  { label = '$10,000 al banco', type = 'money', account = 'bank', amount = 10000 },
  { label = '$2,500 sucios', type = 'black_money', amount = 2500 },
  { label = 'Botiquín', type = 'item', item = 'medikit', amount = 2 },
  { label = '50 ExoticaCoins', type = 'coins', amount = 50 },
  { label = 'Sultan RS', type = 'vehicle', model = 'sultanrs' },
  { label = 'Premio especial', type = 'event', event = 'mi_recurso:premio' },
}
typeCamposQué entrega
moneyaccount, amountDinero en la cuenta indicada: 'money' (efectivo), 'bank'…
black_moneyamountDinero negro. En QBCore/Qbox, si no existe esa cuenta, se entrega como item black_money.
itemitem, amountUn item del inventario (usa ox_inventory si está iniciado).
coinsamount, item (opcional)La moneda premium como item. Por defecto, ServerConfig.CurrencyItem.
vehiclemodel, plate, props, garage (opcionales)Un vehículo en el garaje del jugador.
eventeventLanza un evento de servidor: TriggerEvent(event, src, reward).

Imágenes de los premios

  • Si pones image, se usa esa imagen (relativa a ui/, por ejemplo images/money.png, o una URL).
  • En item y coins sin image, se usa la imagen del item de ox_inventory.
  • Si no hay ninguna, se usa Config.Branding.RewardFallbackImage.

En Discord solo aparece la imagen si es una URL http(s). Las imágenes locales (images/...) se ven en el menú, pero no en el webhook.

Premios de vehículo

Se inserta en owned_vehicles. Campos extra opcionales: vehicleType (por defecto 'car') y stored = false si quieres que aparezca fuera del garaje.

Premios con evento

Tu recurso (servidor)
AddEventHandler('mi_recurso:premio', function(src, reward)
  -- src = ID del ganador, reward = la entrada de Rewards
  exports['mi_recurso']:DarPremioEspecial(src)
end)

Entrega totalmente personalizada

Si quieres controlar tú la entrega de todos los premios, define ServerConfig.GiveTimeReward en server/sv_custom.lua. Ver API.

Probar el sorteo

Pon EnableDebugCommand = true y usa /en_forcereward (desde la consola o como staff) para forzar un sorteo sin esperar al intervalo. Desactívalo en producción.

En esta página