Economize 20% hoje mesmo Use o código WELCOME ao finalizar a compra. BEM-VINDO

Editor de Manuseio de Veículos FiveM – Personalize a Física do Carro

Esta ferramenta permite modificar o arquivo de manuseio do seu veículo

.fhe-wrap{–bg:#0f1115;–fg:#e6e8eb;–muted:#97a1ab;–acc:#4f8cff;–accent2:#00c2a8;–border:#1b1f2a;–card:#141822;–warn:#ffcc00;font-family:system-ui,-apple-system,Segoe UI,Roboto,Inter,Arial,sans-serif;color:var(–fg)} .fhe-wrap{background:var(–bg);padding:24px;border-radius:16px;box-shadow:0 10px 30px rgba(0,0,0,.35);max-width:1100px;margin:24px auto;border:1px solid var(–border)} .fhe-top{display:flex;gap:12px;flex-wrap:wrap;align-items:center;justify-content:space-between;margin-bottom:16px} .fhe-title{font-size:18px;font-weight:700;letter-spacing:.2px} .fhe-controls{display:flex;gap:8px;flex-wrap:wrap} .fhe-btn{background:var(–card);border:1px solid var(–border);color:var(–fg);padding:8px 12px;border-radius:10px;cursor:pointer;transition:.15s;line-height:1} .fhe-btn:hover{border-color:#2d3342;transform:translateY(-1px)} .fhe-btn.primary{background:linear-gradient(180deg,var(–acc),#2b5fd9);border-color:#2b5fd9;color:white} .fhe-btn.secondary{background:linear-gradient(180deg,var(–accent2),#0aa890);border-color:#0aa890;color:white} .fhe-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px} @media (max-width:1000px){.fhe-grid{grid-template-columns:repeat(2,minmax(0,1fr))}} @media (max-width:640px){.fhe-grid{grid-template-columns:1fr}} .fhe-card{background:var(–card);border:1px solid var(–border);border-radius:14px;padding:14px} .fhe-card h3{margin:0 0 10px;font-size:14px;color:#c7d2e1;letter-spacing:.3px} .fhe-field{display:flex;flex-direction:column;gap:6px} .fhe-label{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(–muted)} .fhe-input{width:100%;padding:8px 10px;border-radius:10px;border:1px solid #2a3141;background:#0e121a;color:var(–fg);outline:none} .fhe-input:focus{border-color:var(–acc);box-shadow:0 0 0 3px rgba(79,140,255,.15)} .fhe-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:10px} @media (max-width:1000px){.fhe-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}} @media (max-width:640px){.fhe-metrics{grid-template-columns:1fr}} .fhe-kpi{background:linear-gradient(180deg,#121725,#0d111a);border:1px solid var(–border);border-radius:12px;padding:12px} .fhe-kpi .kpi-h{font-size:11px;color:#9aa7b5;margin-bottom:6px} .fhe-kpi .kpi-v{font-size:18px;font-weight:700} .fhe-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:16px} .fhe-col{flex:1;min-width:280px} textarea.fhe-text{width:100%;min-height:180px;background:#0e121a;color:var(–fg);border:1px solid #2a3141;border-radius:12px;padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace} .fhe-subtle{font-size:12px;color:var(–muted)} .fhe-badge{display:inline-block;background:#0e243f;border:1px solid #163a6b;color:#a7c5ff;padding:2px 8px;border-radius:999px;font-size:11px;margin-left:8px} .fhe-help{font-size:12px;color:#99a7b8;margin-top:8px} .fhe-sep{height:1px;background:var(–border);margin:14px 0} .fhe-note{background:#1b1f2a;border:1px dashed #2e3446;color:#dfdfdf;border-radius:12px;padding:10px;font-size:12px} .fhe-warn{color:var(–warn)}
Editor de Manuseio FiveM Lite • Incorporar

Importar

Formatos KV: fMassa=1600,0, fMassa 1600,0, ou <fMass value="1600.0"/>.

Saída

Usar Copiar saída ou Baixar XML.
Notas: As estimativas são indicativas. Teste no jogo. Os valores persistem localmente (localStorage).
Tração integral/tração traseira: fDriveBiasFront → 0 = RWD, 1 = FWD, 0,5 = AWD.
Privacidade: 100% do lado do cliente. Nenhum dado sai da página.
(function(){ const KEY = ‘fhe_state_v1’; const $ = (s, r=document)=>r.querySelector(s); const root = $(‘#fhe-root’); if(!root) return; const FIELDS = { HandlingName: { label: ‘HandlingName’, type:’text’ }, fMass: { label: ‘fMass’, min:1, max:10000, step:1 }, fInitialDragCoeff: { label: ‘fInitialDragCoeff’, min:0, max:100, step:0.1 }, fPercentSubmerged: { label: ‘fPercentSubmerged’, min:0, max:200, step:1 }, fDriveBiasFront: { label: ‘fDriveBiasFront (0=RWD,1=FWD)’, min:0, max:1, step:0.01 }, nInitialDriveGears: { label: ‘nInitialDriveGears’, min:1, max:10, step:1 }, fInitialDriveForce: { label: ‘fInitialDriveForce’, min:0, max:2, step:0.01 }, fDriveInertia: { label: ‘fDriveInertia’, min:0.1, max:5, step:0.01 }, fClutchChangeRateScaleUpShift: { label: ‘fClutchChangeRateScaleUpShift’, min:0, max:10, step:0.1 }, fClutchChangeRateScaleDownShift: { label: ‘fClutchChangeRateScaleDownShift’, min:0, max:10, step:0.1 }, fInitialDriveMaxFlatVel: { label: ‘fInitialDriveMaxFlatVel (approx m/s)’, min:1, max:500, step:0.1 }, fBrakeForce: { label: ‘fBrakeForce’, min:0, max:10, step:0.01 }, fHandBrakeForce: { label: ‘fHandBrakeForce’, min:0, max:10, step:0.01 }, fSteeringLock: { label: ‘fSteeringLock (deg)’, min:1, max:90, step:0.1 }, fTractionCurveMax: { label: ‘fTractionCurveMax’, min:0, max:10, step:0.01 }, fTractionCurveMin: { label: ‘fTractionCurveMin’, min:0, max:10, step:0.01 }, fSuspensionForce: { label: ‘fSuspensionForce’, min:0, max:20, step:0.1 }, fSuspensionCompDamp: { label: ‘fSuspensionCompDamp’, min:0, max:10, step:0.1 }, fSuspensionReboundDamp: { label: ‘fSuspensionReboundDamp’, min:0, max:10, step:0.1 }, fRollCentreHeightFront: { label: ‘fRollCentreHeightFront’, min:-1, max:2, step:0.01 }, fRollCentreHeightRear: { label: ‘fRollCentreHeightRear’, min:-1, max:2, step:0.01 } }; const DEFAULTS = { HandlingName: ‘ADDER’, fMass: 1600, fInitialDragCoeff: 7.0, fPercentSubmerged: 85, fDriveBiasFront: 0.0, nInitialDriveGears: 6, fInitialDriveForce: 0.35, fDriveInertia: 1.0, fClutchChangeRateScaleUpShift: 2.5, fClutchChangeRateScaleDownShift: 2.0, fInitialDriveMaxFlatVel: 150.0, fBrakeForce: 1.0, fHandBrakeForce: 0.7, fSteeringLock: 40.0, fTractionCurveMax: 2.30, fTractionCurveMin: 2.10, fSuspensionForce: 2.50, fSuspensionCompDamp: 1.40, fSuspensionReboundDamp: 1.70, fRollCentreHeightFront: 0.30, fRollCentreHeightRear: 0.30 }; const grid = $(‘#fhe-grid’); const metrics = $(‘#fhe-metrics’); const outArea = $(‘#fhe-output’); const inArea = $(‘#fhe-import’); let state = load() || {…DEFAULTS}; function load(){ try{ const raw = localStorage.getItem(KEY); return raw? JSON.parse(raw):null; }catch(e){ return null; } } function save(){ try{ localStorage.setItem(KEY, JSON.stringify(state)); }catch(e){} } function fmt(n,d=3){ return (typeof n===’number’&&isFinite(n)) ? Number(n.toFixed(d)).toString() : ‘—’; } function clamp(v,min,max){ return Math.max(min, Math.min(max, v)); } function escapeAttr(s){ return String(s).replace(/&/g,’&’).replace(/”/g,’"’).replace(/{ const value = state[k] ?? ”; const isText = m.type===’text’; const card = document.createElement(‘div’); card.className = ‘fhe-card’; card.innerHTML = `
${m.label}${k}
`; grid.appendChild(card); }); Object.keys(FIELDS).forEach(k=>{ const el = $(‘#fhe-‘+cssEscape(k)); el.addEventListener(‘input’,()=>{ const meta = FIELDS[k]; if(meta.type===’text’){ state[k] = el.value.trim(); } else { const n = Number(el.value); if(!isNaN(n)) state[k]=n; } save(); renderMetrics(); },{passive:true}); }); } function renderMetrics(){ const kmh = state.fInitialDriveMaxFlatVel * 3.6; const accelScore = clamp((state.fInitialDriveForce * state.fDriveInertia * 900)/Math.max(500,state.fMass),0,10); const gripScore = clamp(((state.fTractionCurveMin+state.fTractionCurveMax)/2)*(1.6 – (state.fMass/4000)),0,10); const brakeScore = clamp(state.fBrakeForce * (1600/state.fMass) * 3,0,10); metrics.innerHTML = `
Estimated Top Speed
${fmt(kmh,0)} km/h
fInitialDriveMaxFlatVel × 3.6
Accel Score
${fmt(accelScore,1)} / 10
Mass • Force • Inertia
Grip Score
${fmt(gripScore,1)} / 10
Traction & mass
Brake Score
${fmt(brakeScore,1)} / 10
Brake force & mass
`; } function toXML(){ const x=(k,v)=>` `; const body = Object.keys(FIELDS).map(k=>x(k,state[k]??”)).join(‘\n’); const header = ”; /* avoid ‘<?xml' */ return `${header} ${body} `; } function toKV(){ return Object.keys(FIELDS).map(k=>{ const v = state[k]??”; return `${k}=${typeof v===’number’?Number(v).toFixed(6):v}`; }).join(‘\n’); } function parseXML(text){ try{ const doc = new DOMParser().parseFromString(text,’application/xml’); if(doc.querySelector(‘parsererror’)) return null; const next = {…state}; Object.keys(FIELDS).forEach(k=>{ const el = doc.querySelector(k); if(!el) return; let val = el.getAttribute(‘value’); if(val==null) val = el.textContent; if(val==null) return; const meta = FIELDS[k]; if(meta.type===’text’) next[k] = String(val).trim(); else { const n = Number(val); if(!isNaN(n)) next[k]=n; } }); return next; }catch(e){ return null; } } function parseKV(text){ const next = {…state}; const lines = text.split(/\r?\n/).map(s=>s.trim()).filter(Boolean); for(const line of lines){ let m = line.match(/^\s*([a-zA-Z0-9_]+)\s*=\s*(“?)([^”]+)\2\s*$/) || line.match(/^\s*([a-zA-Z0-9_]+)\s+([^\s]+)\s*$/) || line.match(/^\s*]*\bvalue\s*=\s*”(.*?)”[^>]*\/?>\s*$/); if(!m) continue; const key = m[1], val = m[3] ?? m[2]; if(!(key in FIELDS)) continue; const meta = FIELDS[key]; if(meta.type===’text’) next[key]=String(val).trim(); else { const n = Number(val); if(!isNaN(n)) next[key]=n; } } return next; } function setState(next){ state = {…state, …next}; save(); renderFields(); renderMetrics(); } function download(filename,content){ const blob = new Blob([content],{type:’application/xml;charset=utf-8′}); const url = URL.createObjectURL(blob); const a = document.createElement(‘a’); a.href=url; a.download=filename; a.click(); setTimeout(()=>URL.revokeObjectURL(url),5000); } document.getElementById(‘fhe-root’).addEventListener(‘click’, (e)=>{ const btn = e.target.closest(‘.fhe-btn’); if(!btn) return; const a = btn.getAttribute(‘data-action’); if(a===’reset’){ setState({…DEFAULTS}); document.getElementById(‘fhe-output’).value=”; document.getElementById(‘fhe-import’).value=”; } if(a===’save’){ save(); btn.textContent=’Saved’; setTimeout(()=>btn.textContent=’Save’,900); } if(a===’load-example’){ setState({ HandlingName:’GODMODEX’, fMass:1450,fInitialDragCoeff:6.4,fPercentSubmerged:85,fDriveBiasFront:0.05,nInitialDriveGears:7, fInitialDriveForce:0.40,fDriveInertia:1.15,fClutchChangeRateScaleUpShift:3.2,fClutchChangeRateScaleDownShift:2.6, fInitialDriveMaxFlatVel:165,fBrakeForce:1.10,fHandBrakeForce:0.9,fSteeringLock:38.0,fTractionCurveMax:2.45, fTractionCurveMin:2.20,fSuspensionForce:2.7,fSuspensionCompDamp:1.5,fSuspensionReboundDamp:1.8, fRollCentreHeightFront:0.32,fRollCentreHeightRear:0.32 }); } if(a===’export-xml’){ document.getElementById(‘fhe-output’).value = toXML(); document.getElementById(‘fhe-output’).scrollIntoView({behavior:’smooth’,block:’center’}); } if(a===’export-kv’){ document.getElementById(‘fhe-output’).value = toKV(); document.getElementById(‘fhe-output’).scrollIntoView({behavior:’smooth’,block:’center’}); } if(a===’copy-output’){ const ta = document.getElementById(‘fhe-output’); if(!ta.value) ta.value = toXML(); ta.select(); document.execCommand(‘copy’); btn.textContent=’Copied’; setTimeout(()=>btn.textContent=’Copy Output’,900); } if(a===’download-xml’){ const xml = toXML(); const name = (state.HandlingName||’handling’) + ‘.xml’; download(name, xml); } }); document.querySelector(‘#fhe-root [data-action=”import-xml”]’).addEventListener(‘click’, ()=>{ const txt = document.getElementById(‘fhe-import’).value.trim(); if(!txt){ alert(‘Paste XML into the Import box.’); return; } const next = parseXML(txt); if(!next){ alert(‘Could not parse XML.’); return; } setState(next); }); document.querySelector(‘#fhe-root [data-action=”import-kv”]’).addEventListener(‘click’, ()=>{ const txt = document.getElementById(‘fhe-import’).value.trim(); if(!txt){ alert(‘Paste KV lines into the Import box.’); return; } const next = parseKV(txt); setState(next); }); renderFields(); renderMetrics(); })();
Lucas
Lucas

Eu sou Luke, sou um gamer e adoro escrever sobre FiveM, GTA e roleplay. Eu administro uma comunidade de roleplay e tenho cerca de 10 anos de experiência em administração de servidores.

Artigos: 570