Anti-cheat
Anti-cheat
Todas as decisões de dinheiro e estoque são feitas no servidor. O cliente apenas desenha a bomba e relata o que aconteceu; ele nunca decide quanto algo custa ou quanto combustível entrou.
O que o servidor valida
- Sessões de bomba. Abrir uma bomba solicita um token de sessão ao servidor. O pagamento exige esse token, e os litros cobrados são limitados pelo tempo que a sessão realmente esteve aberta com a taxa de fluxo configurada. Um cliente que alegue ter recebido mais do que a bomba fisicamente poderia entregar é limitado ao que o relógio permite.
- Expiração de sessão. Os tokens são de uso único, vinculados ao jogador que os abriu e descartados após
PumpSessionTimeout. Uma sessão expirada não cobra nada. - Verificações de distância. Comprar, reabastecer, carregar, trocar bateria, encher um galão, encomendar estoque e cada ação do painel verificam novamente no servidor se o jogador realmente está naquela estação, com uma margem de
DistanceSlackmetros para compensar o atraso de posição do ped. - Limitação de taxa (Rate limiting). Cada evento e callback consome um token de um balde por jogador que se recarrega em
PerSeconde nunca acumula além deBurst. Uma tecla presa continua funcionando; um loop de spam esbarra em um bloqueio quase imediatamente. - Limitação de valores (Clamping). Preços, salários, pedidos, retiradas e depósitos passam por validação de limites e tipos no lado do servidor. Nada acima de
MaxAmounté aceito de forma alguma, e os preços são mantidos dentro deConfig.Refuel.PriceLimits. - Verificações de permissão em cada ação. As permissões da equipe são revalidadas no lado do servidor a cada requisição, nunca confiando na interface (UI). Contratar, demitir e editar qualquer pessoa que possua a permissão
employeesé restrito apenas ao proprietário, impedindo que um funcionário se promova. A transferência e a revenda são exclusivas para o proprietário e exigem que o nome da estação seja digitado novamente. - Estoque e banco são estados do servidor. Uma venda só ocorre se a estação realmente tiver os litros e o cliente realmente tiver o dinheiro; ambos os lados são atualizados na mesma etapa do lado do servidor.
Config.AntiCheat = {
RateLimit = { Burst = 14, PerSecond = 6 },
MaxLitresPerPay = 200.0,
LitreGrace = 3.0,
PumpSessionTimeout = 900,
DistanceSlack = 15.0,
MaxAmount = 100000000,
MaxWage = 25000,
JerryPourTimeout = 600,
}| Configuração | Finalidade |
|---|---|
RateLimit |
Tamanho do burst e taxa de recarga do balde de eventos por jogador |
MaxLitresPerPay |
Limite máximo rígido para uma única sessão de bomba ou carregador, independentemente do tempo |
LitreGrace |
Margem de tolerância na verificação de tempo, em litros. Cobre um tick com lag |
PumpSessionTimeout |
Segundos que uma sessão permanece válida |
DistanceSlack |
Metros extras permitidos além do raio de uma estação |
MaxAmount |
Limite máximo para qualquer valor em dinheiro aceito de um cliente |
MaxWage |
Maior salário que um proprietário pode definir para um funcionário |
JerryPourTimeout |
Segundos em que um despejo inacabado é lembrado antes que o restante não possa mais ser resgatado |
Ajustes
Os padrões atendem bem a um servidor normal. Os dois que vale a pena mexer:
LitreGrace— aumente em um ou dois litros se jogadores com conexões ruins estiverem sendo prejudicados na bomba. Mantenha o valor baixo; é combustível gratuito.RateLimit.Burst— aumente se um pátio de combustível genuinamente movimentado começar a recusar ações. Reduza se quiser um controle mais rigoroso.
⚠
Aumentar excessivamente MaxLitresPerPay ou DistanceSlack remove a proteção para a qual essas verificações existem. Só altere esses valores se jogadores honestos estiverem sendo visivelmente bloqueados.