Sistema de Gambling
O CSGOFlip oferece múltiplas modalidades de jogos, todas implementadas com o sistema Provably Fair para garantir transparência e justiça.
Modalidades Disponíveis
Visão Geral das Modalidades
| Modalidade | Descrição | Jogadores | Provably Fair |
|---|---|---|---|
| Cases | Abertura de caixas com roleta | 1 | ✅ HMAC-SHA256 |
| FLIP | Roleta dupla com itens raros | 1 | ✅ Dual Seed |
| Battles | Batalhas PvP (1v1 e 3v3) | 2-6 | ✅ Shared Seed |
| Upgrades | Melhorar valor do item | 1 | ✅ HMAC-SHA256 |
| Swaps | Troca de itens | 2 | - |
| Raffles | Sorteios com tickets | N | ✅ Random.org |
Fluxo Geral de um Jogo
Arquitetura dos Jogos
Camadas
src/
├── domain/
│ └── entities/
│ ├── case.entity.ts
│ ├── case-opening.entity.ts
│ ├── battle.entity.ts
│ ├── battle-round.entity.ts
│ ├── upgrade.entity.ts
│ ├── swap.entity.ts
│ └── raffle.entity.ts
│
├── application/
│ └── use-cases/
│ ├── case-opening/
│ │ ├── open-case.use-case.ts
│ │ └── get-case-history.use-case.ts
│ ├── battle/
│ │ ├── create-battle.use-case.ts
│ │ ├── join-battle.use-case.ts
│ │ └── execute-battle.use-case.ts
│ ├── upgrade/
│ │ └── execute-upgrade.use-case.ts
│ ├── swap/
│ │ └── execute-swap.use-case.ts
│ └── raffle/
│ ├── create-raffle.use-case.ts
│ └── draw-raffle.use-case.ts
│
└── infrastructure/
└── provably-fair/
└── provably-fair.service.tsServiços Compartilhados
typescript
// Todos os jogos usam estes serviços
interface GamblingServices {
provablyFairService: ProvablyFairService; // Geração de resultados
transactionService: TransactionService; // Débito/crédito
inventoryService: InventoryService; // Gestão de itens
webSocketGateway: WebSocketGateway; // Notificações
auditService: AuditService; // Logs
}Probabilidades e Odds
House Edge
Cada modalidade tem uma margem da casa configurável:
| Modalidade | House Edge | Notas |
|---|---|---|
| Cases | 5-15% | Depende da caixa |
| Battles | 5% | Taxa sobre o pot total |
| Upgrades | 10% | Ajustado na probabilidade |
| Raffles | 5% | Taxa sobre tickets |
Cálculo de Probabilidade
typescript
// Exemplo: Cálculo de probabilidade de item em case
function calculateItemProbability(
item: CaseItem,
caseConfig: Case,
): number {
// Base probability from rarity
const rarityProbability = RARITY_PROBABILITIES[item.rarity];
// Adjust by item value relative to case price
const valueMultiplier = item.valueCents / caseConfig.priceCents;
// Apply house edge
const houseEdge = caseConfig.houseEdge;
return rarityProbability * valueMultiplier * (1 - houseEdge);
}Validações Comuns
Antes de Jogar
- Saldo suficiente - Verificado via TransactionRepository
- Conta ativa - Usuário não banido
- Limites de aposta - Mínimo e máximo respeitados
- Rate limiting - Proteção contra spam
- Cooldown - Tempo entre jogadas (se aplicável)
Durante o Jogo
- Locks distribuídos - Prevenir race conditions
- Transações atômicas - Tudo ou nada
- Validação de estado - Jogo não pode ser alterado
Após o Jogo
- Registro de auditoria - Toda jogada é logada
- Verificação Provably Fair - Resultado pode ser verificado
- Atualização de estatísticas - XP, leaderboards
