Configurar um servidor FiveM para drift: física, scripts e handling
Par Benjamin D. · PDG
· Mis à jour le 12 Gwengolo 2026 · Lecture 9 min
Sumário
Montar a física de um servidor FiveM drift é um trabalho de precisão: não basta jogar alguns carros no stream e esperar que o traseiro solte. Handling coerente, pontuação sincronizada e tickrate estável são o tripé de qualquer comunidade de drift que pretende durar mais de um fim de semana. Este guia percorre a parte técnica, arquivo por arquivo.
Base técnica de um servidor FiveM drift: artifacts, OneSync e ordem de recursos
Antes de mexer em qualquer curva de tração, vale acertar a fundação. Comunidades de drift dependem de dois fatores que o jogador percebe na pele: consistência de física entre clientes e sincronização de veículos em alta velocidade. Ambos passam por escolhas feitas no server.cfg e na versão dos artifacts.
Game build e artifacts
Vários recursos modernos usados em drift — pneus de drift nativos, novos modelos de veículos, flags de handling recentes — só existem a partir de builds específicas do GTA V. Forçar a build no server.cfg evita que metade dos jogadores caia em Failed to load ao entrar:
# server.cfg — fundação
sv_hostname "Drift Zone BR | Touge & Tandem"
sv_maxclients 48
sv_licenseKey "SUA_CHAVE_CFX"
# build necessária para pneus de drift e veículos DLC recentes
set sv_enforceGameBuild 3095
# rede
set onesync on
set onesync_population false
set onesync_distanceCullVehicles true
Desligar onesync_population é quase obrigatório em servidor de drift: NPCs e trânsito ambiente consomem slots de entidade e atrapalham tandem em circuito fechado. Já onesync_distanceCullVehicles reduz o tráfego de rede de veículos distantes, o que ajuda quando 30 carros estão derrapando ao mesmo tempo.
Ordem de carregamento
A ordem dos ensure importa. Recursos de stream com handling customizado precisam carregar antes dos scripts que consultam esse handling, e o script de pontuação deve vir depois do framework, senão ele tenta registrar callbacks inexistentes.
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
# veículos e handling
ensure [vehicles]
# lógica de drift
ensure drift_score
ensure drift_tyres
ensure drift_leaderboard
Se a comunidade vai crescer, a parte de infraestrutura precisa acompanhar: CPU Ryzen de alta frequência (FiveM é fortemente monothread), NVMe para leitura rápida dos assets de stream e proteção anti-DDoS ativa por padrão. Quem prefere partir direto para a configuração de física sem montar toda a pilha do zero pode usar uma hospedagem FiveM já pronta com painel Pterodactyl e console em tempo real.
Handling.meta: os parâmetros que definem o comportamento em drift
O coração de um servidor FiveM drift é o handling.meta. É ele que decide se o carro fica preso no asfalto, se rodopia no primeiro toque de volante ou se mantém um ângulo controlável de 45 graus por toda a curva.
Estrutura mínima de um recurso de handling
drift_cars/
├── fxmanifest.lua
├── stream/
│ └── sultanrs_drift.ytd
└── data/
├── handling.meta
└── vehicles.meta
-- fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
files {
'data/handling.meta',
'data/vehicles.meta'
}
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
Parâmetros que realmente mudam o drift
| Parâmetro | Função | Faixa típica em drift |
|---|---|---|
fInitialDriveForce | Força de tração inicial; define quanto o carro consegue quebrar o traseiro | 0.30 – 0.45 |
fTractionCurveMax | Aderência máxima lateral | 1.90 – 2.30 |
fTractionCurveMin | Aderência após perda de grip | 1.20 – 1.60 |
fTractionCurveLateral | Ângulo em que o pneu perde lateral; valores altos alongam o deslize | 18.0 – 25.0 |
fLowSpeedTractionLossMult | Perda de tração em baixa velocidade — essencial para saídas de traseira | 0.80 – 1.60 |
fTractionBiasFront | Distribuição de aderência entre eixos | 0.47 – 0.52 |
fSteeringLock | Ângulo máximo de esterço; sem isso não existe contraesterço | 50.0 – 70.0 |
fAntiRollBarForce | Rigidez lateral da suspensão | 0.20 – 0.50 |
fBrakeBiasFront | Distribuição de freio; valores baixos ajudam o e-brake | 0.40 – 0.55 |
<Item type="CHandlingData">
<handlingName>SULTANRS_DRIFT</handlingName>
<fMass value="1450.000000" />
<fInitialDriveForce value="0.380000" />
<nInitialDriveGears value="6" />
<fDriveInertia value="1.100000" />
<fInitialDriveMaxFlatVel value="185.000000" />
<fBrakeForce value="1.050000" />
<fBrakeBiasFront value="0.450000" />
<fHandBrakeForce value="0.900000" />
<fSteeringLock value="62.000000" />
<fTractionCurveMax value="2.100000" />
<fTractionCurveMin value="1.400000" />
<fTractionCurveLateral value="22.500000" />
<fTractionSpringDeltaMax value="0.150000" />
<fLowSpeedTractionLossMult value="1.250000" />
<fCamberStiffnesss value="0.000000" />
<fTractionBiasFront value="0.490000" />
<fSuspensionForce value="2.400000" />
<fAntiRollBarForce value="0.320000" />
<strModelFlags>440010</strModelFlags>
<strHandlingFlags>0</strHandlingFlags>
<strDamageFlags>0</strDamageFlags>
</Item>
Metodologia de ajuste
Mudar dez valores de uma vez é receita para não saber o que funcionou. O fluxo prático:
- Ajuste primeiro
fSteeringLock— sem ângulo de esterço não há contraesterço possível. - Calibre
fInitialDriveForceaté o carro quebrar o traseiro em segunda marcha com meio acelerador. - Trabalhe
fTractionCurveLateralem passos de 1.0 até o deslize ficar sustentável, não abrupto. - Só então mexa em
fLowSpeedTractionLossMultpara as transições e saídas lentas. - Finalize com suspensão e barra estabilizadora, que afetam a transferência de peso nas mudanças de direção.
Depois de cada alteração, use refresh e restart drift_cars no console do painel, e reentre no veículo — o handling é aplicado na criação da entidade. A documentação das estruturas de dados está disponível na documentação oficial do FiveM.
Pneus de drift nativos
A partir das builds recentes, existe um modo de pneu de drift nativo do próprio jogo, que altera a curva de aderência sem tocar no handling.meta. Útil como toggle por jogador:
-- client.lua
RegisterCommand('drifttyres', function()
local ped = PlayerPedId()
local veh = GetVehiclePedIsIn(ped, false)
if veh == 0 then return end
local state = not IsDriftTyresSet(veh)
SetDriftTyresEnabled(veh, state)
SetVehicleDriftTyresEnabled(veh, state)
TriggerEvent('chat:addMessage', {
args = { 'DRIFT', state and 'Pneus de drift ativados' or 'Pneus normais' }
})
end, false)
Scripts de pontuação de drift: ângulo, combo e sincronização
A pontuação é o que transforma um circuito em competição. A lógica base é simples: medir o ângulo entre o vetor de direção do veículo e o vetor de velocidade real, multiplicar por velocidade e acumular enquanto o deslize se mantiver.
Cálculo do ângulo de derrapagem
-- drift_score/client.lua
local score, combo, driftAngle = 0, 1.0, 0.0
local MIN_SPEED = 8.0 -- m/s (~29 km/h)
local MIN_ANGLE = 12.0 -- graus para validar o drift
local MAX_ANGLE = 90.0 -- acima disso é rodada
local function getDriftAngle(veh)
local speed = GetEntitySpeed(veh)
if speed < MIN_SPEED then return 0.0, speed end
local vel = GetEntityVelocity(veh)
local fwd = GetEntityForwardVector(veh)
local dot = (fwd.x * vel.x + fwd.y * vel.y) / speed
dot = math.max(-1.0, math.min(1.0, dot))
return math.abs(math.deg(math.acos(dot))), speed
end
Loop de acúmulo com combo
CreateThread(function()
while true do
local wait = 250
local ped = PlayerPedId()
local veh = GetVehiclePedIsIn(ped, false)
if veh ~= 0 and GetPedInVehicleSeat(veh, -1) == ped then
wait = 50
local angle, speed = getDriftAngle(veh)
driftAngle = angle
if angle > MIN_ANGLE and angle < MAX_ANGLE then
score = score + (angle * speed * 0.02 * combo)
combo = math.min(combo + 0.01, 5.0)
elseif combo > 1.0 then
-- fim do drift: envia ao servidor e zera
TriggerServerEvent('drift:submit', math.floor(score), combo)
score, combo = 0, 1.0
end
if HasEntityCollidedWithAnything(veh) then
score, combo = 0, 1.0
end
end
Wait(wait)
end
end)
Repare no Wait variável: fora do veículo o thread roda a 250 ms, dentro sobe para 50 ms. Em um circuito com 40 jogadores, esse detalhe faz diferença real no FPS do cliente e evita que o recurso apareça no topo do resmon.
Validação no servidor
Nunca confie na pontuação enviada pelo cliente sem filtro. Um teto por evento e um intervalo mínimo entre submissões cortam a maior parte dos injectors de score:
-- drift_score/server.lua
local lastSubmit, MAX_SCORE = {}, 250000
RegisterNetEvent('drift:submit', function(value, combo)
local src = source
local now = GetGameTimer()
if type(value) ~= 'number' or value < 0 or value > MAX_SCORE then
return DropPlayer(src, 'Pontuação de drift inválida.')
end
if lastSubmit[src] and (now - lastSubmit[src]) < 1500 then return end
lastSubmit[src] = now
-- persistência: arquivo JSON ou banco de dados
SaveDriftRun(src, math.floor(value), combo)
TriggerClientEvent('drift:leaderboardUpdate', -1, GetTopRuns(10))
end)
AddEventHandler('playerDropped', function()
lastSubmit[source] = nil
end)
Zonas de pontuação
Para circuitos definidos, delimite polígonos ou esferas e aplique multiplicadores por trecho. Um touge descendente pode valer 1.5x, enquanto o estacionamento de aquecimento vale 1.0x. A verificação é barata com GetDistanceBetweenCoords executado no mesmo thread já existente, sem criar loops adicionais.
Ajustes finais no server.cfg, desempenho e manutenção
Com física e pontuação prontos, sobra a parte que mantém o servidor FiveM drift estável quando o Discord enche em uma noite de evento.
Convars úteis
# limites e qualidade de rede
set sv_scriptHookAllowed 0
set sv_authMaxVariance 1
set sv_authMinTrust 5
sets tags "drift, tandem, brasil, custom cars"
sets locale "pt-BR"
# convars do recurso de drift
setr drift_minAngle 12.0
setr drift_maxScore 250000
setr drift_comboDecay 0.015
setr drift_leaderboardSize 25
# administração
add_ace group.admin command.restart allow
add_principal identifier.license:SUA_LICENSE group.admin
Manter sv_scriptHookAllowed 0 é básico em qualquer comunidade competitiva: com o script hook liberado, qualquer menu externo injeta handling e destrói a legitimidade das tabelas de pontuação.
Diagnóstico de desempenho
txAdminou o console do painel mostram o tickrate; abaixo de 45 ms por tick de servidor, o tandem começa a apresentar rubber banding.- No cliente,
resmon 1revela quais recursos passam de 0.10 ms — scripts de drift mal escritos comWait(0)permanente são os campeões. - Assets de
streamcom texturas em 4K multiplicam o consumo de VRAM dos jogadores. Para drift, 2K resolve e reduz o tempo de download inicial. - SSD NVMe reduz sensivelmente o tempo de carregamento dos
.ytd/.yftno início da sessão.
Rotina de manutenção
- Backups automáticos antes de qualquer alteração em
handling.meta— um valor errado emfMassderruba a jogabilidade inteira. - Versione a pasta
resourcescom Git; reverter um commit é mais rápido que refazer tuning. - Reinicie o processo em janela de baixo movimento, nunca no meio de um evento de tandem.
- Teste cada carro novo em ambiente isolado antes de subir para produção.
- Mantenha RCON e senhas administrativas longas e exclusivas; combine com ACEs restritos por grupo.
Quem prefere gerenciar tudo por conta própria em um ambiente isolado pode usar VPS Pterodactyl e subir múltiplas instâncias de teste. E se a comunidade rodar outros títulos em paralelo, vale conferir Todos os nossos servidores de jogos ou os tutoriais publicados no Blog da Fly-Serv.
Conclusão
Drift em FiveM é engenharia de detalhe: cada décimo em fTractionCurveLateral, cada milissegundo de Wait e cada validação no lado do servidor pesam no resultado final. Comece pelo handling, valide a pontuação contra manipulação, monitore o tickrate e documente cada ajuste. Com essa disciplina, o circuito se mantém fluido mesmo com dezenas de carros em tandem simultâneo.
FAQ
Por que meu handling customizado não é aplicado no veículo?Três causas comuns: o data_file 'HANDLING_FILE' está ausente no fxmanifest.lua, o handlingName não corresponde ao definido em vehicles.meta, ou o recurso carrega depois de outro que sobrescreve o mesmo nome. Verifique a ordem dos ensure no server.cfg e saia/entre no carro após o restart, já que o handling é lido na criação da entidade.
Valide sempre no lado do servidor: defina um teto máximo por corrida, exija intervalo mínimo entre submissões, confira o tipo da variável recebida e compare com a velocidade máxima teórica do veículo. Complemente com sv_scriptHookAllowed 0, ACEs restritos e registro em log de todas as pontuações acima da média para revisão manual.
Para tandem com física intensa, mantenha o tempo de tick do servidor estável abaixo de 50 ms. Na prática, 32 a 48 slots ativos funcionam bem em CPU de alta frequência, desde que onesync_population esteja desativado e os recursos pesados sejam auditados com resmon. Acima disso, divida os jogadores por instâncias ou circuitos separados.