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
- Al iniciar el recurso se elige al azar el premio de la ronda entre la lista
Rewards. - El servidor cuenta el tiempo que cada jugador lleva conectado.
- Al acabar el intervalo, se elige un ganador al azar entre los jugadores elegibles, siempre que haya al menos
MinPlayers. - 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
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ón | Descripción |
|---|---|
Enabled | Activa o desactiva el sistema. |
IntervalMinutes | Minutos entre sorteos (mínimo 1). |
UiUpdateSeconds | Cada 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. |
MinPlayedSeconds | Segundos mínimos conectado para participar (modo online). |
MinPlayers | Jugadores elegibles necesarios para que haya ganador. |
AnnounceNoWinner | Anuncia en el chat y en Discord cuando no hay ganador. |
Anuncios
| Opción | Descripción |
|---|---|
DiscordWebhook | Respaldo. Usa mejor el convar en_pausamenu_webhook en server.cfg (ver Instalación). |
DiscordUsername | Nombre del bot que publica en Discord. |
DiscordAvatar | URL https de la imagen del bot (opcional). |
ChatTitle | Título del mensaje en el chat. |
ChatColor | Color 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ón | Descripción |
|---|---|
ItemImageResource / ItemImagePath / ItemImageExtension | De 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. |
VehiclePlatePrefix | Prefijo de la matrícula de los vehículos regalados (8 caracteres como máximo en total). |
VehicleGarage | Garaje 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:
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' },
}type | Campos | Qué entrega |
|---|---|---|
money | account, amount | Dinero en la cuenta indicada: 'money' (efectivo), 'bank'… |
black_money | amount | Dinero negro. En QBCore/Qbox, si no existe esa cuenta, se entrega como item black_money. |
item | item, amount | Un item del inventario (usa ox_inventory si está iniciado). |
coins | amount, item (opcional) | La moneda premium como item. Por defecto, ServerConfig.CurrencyItem. |
vehicle | model, plate, props, garage (opcionales) | Un vehículo en el garaje del jugador. |
event | event | Lanza un evento de servidor: TriggerEvent(event, src, reward). |
Imágenes de los premios
- Si pones
image, se usa esa imagen (relativa aui/, por ejemploimages/money.png, o una URL). - En
itemycoinssinimage, 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
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.
