DRS Gift Codes

Códigos de oferta para eventos, sorteios e recompensas: cada código dá dinheiro, itens e até veículos, com proteção contra abusos.

v2.0.4 QBCore drs_giftcodes
Ver na loja

Códigos de oferta para eventos, sorteios e recompensas. Cada código pode dar dinheiro no banco, itens e veículos. Os admins criam códigos dentro do jogo e os jogadores resgatam numa janela própria.

#Requisitos

RecursoObrigatório
qb-coreSim
oxmysqlSim

#Instalação

  1. Importa o SQL (cria as tabelas de códigos e resgates, com um código de teste):
drs_giftcodes.sql
-- DRS Gift Codes
CREATE TABLE IF NOT EXISTS `drs_giftcodes` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `code` VARCHAR(32) NOT NULL,
  `uses_remaining` INT NOT NULL DEFAULT 1,
  `last_username` VARCHAR(64) DEFAULT NULL,
  `bank_money` INT NOT NULL DEFAULT 0,
  `item` VARCHAR(64) DEFAULT NULL,
  `item_amount` INT NOT NULL DEFAULT 1,
  `vehicle` VARCHAR(64) DEFAULT NULL,
  `allow_repeat` TINYINT(1) NOT NULL DEFAULT 0,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_drs_giftcodes_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `drs_giftcode_redemptions` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `gift_id` INT NOT NULL,
  `citizenid` VARCHAR(64) NOT NULL,
  `player_name` VARCHAR(64) NOT NULL,
  `redeemed_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_drs_gcr_gift_citizen` (`gift_id`, `citizenid`),
  CONSTRAINT `fk_drs_gcr_gift` FOREIGN KEY (`gift_id`) REFERENCES `drs_giftcodes`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Código de teste / Test code: 12345678  (5000 no banco + 2 águas)
INSERT IGNORE INTO `drs_giftcodes` (`code`, `uses_remaining`, `bank_money`, `item`, `item_amount`)
VALUES ('12345678', 1, 5000, 'water', 2);
  1. Coloca drs_giftcodes em resources e adiciona ao server.cfg:
server.cfg
ensure qb-core
ensure oxmysql
ensure drs_giftcodes

#Comandos

ComandoQuemO que faz
/codigoTodosAbre a janela para resgatar um código
/criarcodigo [dinheiro] [item] [quantidade] [veículo] [usos]AdminCria um código novo e mostra-o

Usa - quando não queres item ou veículo:

exemplos
/criarcodigo 10000 - 1 adder 5     → 10 000 no banco + um Adder, 5 usos
/criarcodigo 0 water 10 - 1        → 10 águas, 1 uso
/criarcodigo 5000 - 1 - 50         → 5 000 no banco, 50 usos

Os veículos vão diretamente para a garagem Config.VehicleGarage.

#Segurança

  • Cada jogador só resgata cada código uma vez.
  • Máximo de Config.MaxAttemptsPerMinute tentativas por minuto; quem passar fica bloqueado Config.LockoutMinutes minutos.
  • O código é consumido de forma atómica na base de dados — dois jogadores ao mesmo tempo nunca gastam o mesmo uso.
  • Todos os resgates ficam registados na tabela drs_giftcode_redemptions.

#Opções principais

OpçãoPor defeitoDescrição
Config.CommandcodigoComando para resgatar
Config.AdminCommandcriarcodigoComando para criar
Config.AdminPermissionadminPermissão QBCore para criar
Config.CodeLength / Config.CodeCharset8 dígitosFormato dos códigos gerados
Config.VehicleGaragepillboxgarageGaragem dos veículos oferecidos

#Configuração completa

config.lua
Config = {}

-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'

-- Comando para abrir a janela de resgate / Command that opens the redeem window
Config.Command = 'codigo'

-- Comando de admin para criar códigos / Admin command to create codes
-- /criarcodigo [dinheiro] [item] [quantidade] [veiculo] [usos]
Config.AdminCommand = 'criarcodigo'
Config.AdminPermission = 'admin'   -- permissão QBCore / QBCore permission

-- Formato dos códigos gerados / Generated code format
Config.CodeLength = 8
Config.CodeCharset = '0123456789'  -- ex.: 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789' para alfanumérico

-- Proteção contra força bruta / Brute-force protection
Config.MaxAttemptsPerMinute = 5
Config.LockoutMinutes = 10

-- Garagem onde ficam os veículos oferecidos / Garage for gifted vehicles
Config.VehicleGarage = 'pillboxgarage'

-- Moeda nas mensagens / Currency in messages
Config.Currency = '€'

#Resolução de problemas

"Table 'drs_giftcodes' doesn't exist" — importa o SQL.

O veículo não aparece — confirma que o nome da garagem em Config.VehicleGarage existe no teu script de garagens.