Guia de Farming: Difference between revisions
No edit summary |
No edit summary |
||
| Line 324: | Line 324: | ||
TOP FARMING SPOTS — ROUTE VIEWER | TOP FARMING SPOTS — ROUTE VIEWER | ||
═══════════════════════════════════════════════════════════ --> | ═══════════════════════════════════════════════════════════ --> | ||
<div id="routes-section" style="background:#04060d;padding:52px 64px;border-bottom:1px solid rgba(255,255,255,0.05);"> | <div id="routes-section" style="background:#04060d;padding:52px 64px;border-bottom:1px solid rgba(255,255,255,0.05);" data-open-route=""> | ||
<div style="max-width:1080px;margin:0 auto;"> | <div style="max-width:1080px;margin:0 auto;"> | ||
<div style="text-align:center;margin-bottom:32px;"> | <div style="text-align:center;margin-bottom:32px;"> | ||
<div style="display:inline-flex;align-items:center;gap:8px;padding: | <div style="display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:5px 16px;min-width:170px;border-radius:999px;background:linear-gradient(180deg,rgba(0,255,136,0.10),rgba(0,255,136,0.04));border:1px solid rgba(0,255,136,0.20);box-shadow:0 0 0 1px rgba(0,255,136,0.04) inset;margin-bottom:14px;"> | ||
<span style="font-size:0.65rem;letter-spacing:0.18em;text-transform:uppercase;color:#00ff88;font-weight: | <span style="font-size:0.65rem;letter-spacing:0.18em;text-transform:uppercase;color:#00ff88;font-weight:800;">// Rotas de Farm</span> | ||
</div> | </div> | ||
<h2 style="font-size:clamp(1.4rem,2.5vw,2rem);font-weight:900;color:#fff;margin:0 0 | <h2 style="font-size:clamp(1.4rem,2.5vw,2rem);font-weight:900;color:#fff;margin:0 0 10px;border:none;">Melhores locais de farming</h2> | ||
<p style="color:rgba(122,144,176,0.70);font-size:0.92rem;margin:0;">Clique em uma localização para ver a rota completa e estratégia.</p> | <p style="color:rgba(122,144,176,0.70);font-size:0.92rem;margin:0;">Clique em uma localização para ver a rota completa e estratégia.</p> | ||
</div> | </div> | ||
<!-- Location pill grid --> | <!-- Location pill grid --> | ||
<div style="display:flex;flex-wrap:wrap;gap: | <div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:28px;"> | ||
<div class="route-pill" data-route="route-a" id="pill-route-a" style="display:inline-flex;align-items:center;justify-content:center;gap:10px;min-width:170px;padding:13px 20px;border-radius:14px;border:1px solid rgba(249,197,0,0.22);background:linear-gradient(180deg,rgba(249,197,0,0.09),rgba(249,197,0,0.04));box-shadow:0 0 0 1px rgba(249,197,0,0.03) inset;color:#f9c500;font-size:0.88rem;font-weight:800;cursor:pointer;font-family:inherit;transition:all 0.18s;letter-spacing:0.01em;user-select:none;"> | |||
<span style="font-size:1rem;line-height:1;">🗺️</span> | |||
<span style="color:#f9c500;">Rota A — Lv.??+</span> | |||
</div> | |||
<div class="route-pill" data-route="route-b" id="pill-route-b" style="display:inline-flex;align-items:center;justify-content:center;gap:10px;min-width:170px;padding:13px 20px;border-radius:14px;border:1px solid rgba(0,212,255,0.22);background:linear-gradient(180deg,rgba(0,212,255,0.09),rgba(0,212,255,0.04));box-shadow:0 0 0 1px rgba(0,212,255,0.03) inset;color:#00d4ff;font-size:0.88rem;font-weight:800;cursor:pointer;font-family:inherit;transition:all 0.18s;letter-spacing:0.01em;user-select:none;"> | |||
<span style="font-size:1rem;line-height:1;">🗺️</span> | |||
<span style="color:#00d4ff;">Rota B — Lv.??+</span> | |||
</div> | |||
<div class="route-pill" data-route="route-c" id="pill-route-c" style="display:inline-flex;align-items:center;justify-content:center;gap:10px;min-width:170px;padding:13px 20px;border-radius:14px;border:1px solid rgba(0,255,136,0.22);background:linear-gradient(180deg,rgba(0,255,136,0.09),rgba(0,255,136,0.04));box-shadow:0 0 0 1px rgba(0,255,136,0.03) inset;color:#00ff88;font-size:0.88rem;font-weight:800;cursor:pointer;font-family:inherit;transition:all 0.18s;letter-spacing:0.01em;user-select:none;"> | |||
<span style="font-size:1rem;line-height:1;">🗺️</span> | |||
<span style="color:#00ff88;">Rota C — Lv.??+</span> | |||
</div> | |||
<div class="route-pill" data-route="route-d" id="pill-route-d" style="display:inline-flex;align-items:center;justify-content:center;gap:10px;min-width:170px;padding:13px 20px;border-radius:14px;border:1px solid rgba(255,107,0,0.22);background:linear-gradient(180deg,rgba(255,107,0,0.09),rgba(255,107,0,0.04));box-shadow:0 0 0 1px rgba(255,107,0,0.03) inset;color:#ff6b00;font-size:0.88rem;font-weight:800;cursor:pointer;font-family:inherit;transition:all 0.18s;letter-spacing:0.01em;user-select:none;"> | |||
<span style="font-size:1rem;line-height:1;">🗺️</span> | |||
<span style="color:#ff6b00;">Rota D — Lv.??+</span> | |||
</div> | |||
<div class="route-pill" data-route="route-e" id="pill-route-e" style="display:inline-flex;align-items:center;justify-content:center;gap:10px;min-width:230px;padding:13px 20px;border-radius:14px;border:1px solid rgba(176,108,255,0.22);background:linear-gradient(180deg,rgba(176,108,255,0.09),rgba(176,108,255,0.04));box-shadow:0 0 0 1px rgba(176,108,255,0.03) inset;color:#b06cff;font-size:0.88rem;font-weight:800;cursor:pointer;font-family:inherit;transition:all 0.18s;letter-spacing:0.01em;user-select:none;"> | |||
<span style="font-size:1rem;line-height:1;">🗺️</span> | |||
<span style="color:#b06cff;">Rota E — Lv.??+ (Endgame)</span> | |||
</div> | |||
</div> | </div> | ||
<!-- Route | <!-- Route A --> | ||
<div id="route-a" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(249,197,0,0.18);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | <div id="route-a" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(249,197,0,0.18);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | ||
<div style="padding:16px 22px;background:linear-gradient(135deg,rgba(249,197,0,0.12),rgba(249,197,0,0.04));border-bottom:1px solid rgba(249,197,0,0.12);display:flex;align-items:center;justify-content:space-between;"> | <div style="padding:16px 22px;background:linear-gradient(135deg,rgba(249,197,0,0.12),rgba(249,197,0,0.04));border-bottom:1px solid rgba(249,197,0,0.12);display:flex;align-items:center;justify-content:space-between;"> | ||
| Line 370: | Line 375: | ||
</div> | </div> | ||
</div> | </div> | ||
< | <div class="route-close" data-route="route-a" style="padding:5px 11px;border-radius:7px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.09);color:rgba(122,144,176,0.60);font-size:0.72rem;cursor:pointer;font-family:inherit;user-select:none;">✕ Fechar</div> | ||
</div> | </div> | ||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:0;"> | <div style="display:grid;grid-template-columns:1fr 1fr;gap:0;"> | ||
| Line 405: | Line 410: | ||
<div style="padding:16px 22px;background:linear-gradient(135deg,rgba(0,212,255,0.10),rgba(0,212,255,0.03));border-bottom:1px solid rgba(0,212,255,0.10);display:flex;align-items:center;justify-content:space-between;"> | <div style="padding:16px 22px;background:linear-gradient(135deg,rgba(0,212,255,0.10),rgba(0,212,255,0.03));border-bottom:1px solid rgba(0,212,255,0.10);display:flex;align-items:center;justify-content:space-between;"> | ||
<div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota B — Nome do Mapa/Local</div><div style="font-size:0.70rem;color:rgba(0,212,255,0.60);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M z/hr estimado</div></div></div> | <div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota B — Nome do Mapa/Local</div><div style="font-size:0.70rem;color:rgba(0,212,255,0.60);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M z/hr estimado</div></div></div> | ||
< | <div class="route-close" data-route="route-b" style="padding:5px 11px;border-radius:7px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.09);color:rgba(122,144,176,0.60);font-size:0.72rem;cursor:pointer;font-family:inherit;user-select:none;">✕ Fechar</div> | ||
</div> | </div> | ||
<div style="padding:20px 22px;"> | <div style="padding:20px 22px;"> | ||
| Line 412: | Line 417: | ||
</div> | </div> | ||
<!-- | <!-- Route C --> | ||
<div id="route-c" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(0,255,136,0.16);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | <div id="route-c" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(0,255,136,0.16);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | ||
<div style="padding:16px 22px;background:linear-gradient(135deg,rgba(0,255,136,0.08),rgba(0,255,136,0.02));border-bottom:1px solid rgba(0,255,136,0.08);display:flex;align-items:center;justify-content:space-between;"> | <div style="padding:16px 22px;background:linear-gradient(135deg,rgba(0,255,136,0.08),rgba(0,255,136,0.02));border-bottom:1px solid rgba(0,255,136,0.08);display:flex;align-items:center;justify-content:space-between;"> | ||
<div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota C — Nome do Mapa/Local</div><div style="font-size:0.70rem;color:rgba(0,255,136,0.55);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M z/hr estimado</div></div></div> | <div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota C — Nome do Mapa/Local</div><div style="font-size:0.70rem;color:rgba(0,255,136,0.55);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M z/hr estimado</div></div></div> | ||
< | <div class="route-close" data-route="route-c" style="padding:5px 11px;border-radius:7px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.09);color:rgba(122,144,176,0.60);font-size:0.72rem;cursor:pointer;font-family:inherit;user-select:none;">✕ Fechar</div> | ||
</div> | </div> | ||
<div style="padding:20px 22px;"><p style="font-size:0.88rem;color:rgba(122,144,176,0.70);margin:0;">Preencha com dados reais da Rota C.</p></div> | <div style="padding:20px 22px;"><p style="font-size:0.88rem;color:rgba(122,144,176,0.70);margin:0;">Preencha com dados reais da Rota C.</p></div> | ||
</div> | </div> | ||
<!-- Route D --> | |||
<div id="route-d" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(255,107,0,0.16);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | <div id="route-d" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(255,107,0,0.16);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | ||
<div style="padding:16px 22px;background:linear-gradient(135deg,rgba(255,107,0,0.08),rgba(255,107,0,0.02));border-bottom:1px solid rgba(255,107,0,0.08);display:flex;align-items:center;justify-content:space-between;"> | <div style="padding:16px 22px;background:linear-gradient(135deg,rgba(255,107,0,0.08),rgba(255,107,0,0.02));border-bottom:1px solid rgba(255,107,0,0.08);display:flex;align-items:center;justify-content:space-between;"> | ||
<div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota D — Nome do Mapa/Local</div><div style="font-size:0.70rem;color:rgba(255,107,0,0.55);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M z/hr estimado</div></div></div> | <div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota D — Nome do Mapa/Local</div><div style="font-size:0.70rem;color:rgba(255,107,0,0.55);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M z/hr estimado</div></div></div> | ||
< | <div class="route-close" data-route="route-d" style="padding:5px 11px;border-radius:7px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.09);color:rgba(122,144,176,0.60);font-size:0.72rem;cursor:pointer;font-family:inherit;user-select:none;">✕ Fechar</div> | ||
</div> | </div> | ||
<div style="padding:20px 22px;"><p style="font-size:0.88rem;color:rgba(122,144,176,0.70);margin:0;">Preencha com dados reais da Rota D.</p></div> | <div style="padding:20px 22px;"><p style="font-size:0.88rem;color:rgba(122,144,176,0.70);margin:0;">Preencha com dados reais da Rota D.</p></div> | ||
</div> | </div> | ||
<!-- Route E --> | |||
<div id="route-e" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(176,108,255,0.16);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | <div id="route-e" class="route-detail" style="display:none;background:rgba(0,0,0,0.30);border:1px solid rgba(176,108,255,0.16);border-radius:18px;overflow:hidden;margin-bottom:12px;animation:route-in 0.3s ease both;"> | ||
<div style="padding:16px 22px;background:linear-gradient(135deg,rgba(176,108,255,0.08),rgba(176,108,255,0.02));border-bottom:1px solid rgba(176,108,255,0.08);display:flex;align-items:center;justify-content:space-between;"> | <div style="padding:16px 22px;background:linear-gradient(135deg,rgba(176,108,255,0.08),rgba(176,108,255,0.02));border-bottom:1px solid rgba(176,108,255,0.08);display:flex;align-items:center;justify-content:space-between;"> | ||
<div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota E — Endgame Farming</div><div style="font-size:0.70rem;color:rgba(176,108,255,0.55);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M+ z/hr estimado</div></div></div> | <div style="display:flex;align-items:center;gap:10px;"><span style="font-size:1.3rem;">🗺️</span><div><div style="font-size:1rem;font-weight:900;color:#fff;">Rota E — Endgame Farming</div><div style="font-size:0.70rem;color:rgba(176,108,255,0.55);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Nível: ??? · ???M+ z/hr estimado</div></div></div> | ||
< | <div class="route-close" data-route="route-e" style="padding:5px 11px;border-radius:7px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.09);color:rgba(122,144,176,0.60);font-size:0.72rem;cursor:pointer;font-family:inherit;user-select:none;">✕ Fechar</div> | ||
</div> | </div> | ||
<div style="padding:20px 22px;"><p style="font-size:0.88rem;color:rgba(122,144,176,0.70);margin:0;">Preencha com dados reais da Rota E (endgame). Mencione o nível mínimo, build necessária e por que é a melhor rota para jogadores veteranos.</p></div> | <div style="padding:20px 22px;"><p style="font-size:0.88rem;color:rgba(122,144,176,0.70);margin:0;">Preencha com dados reais da Rota E (endgame). Mencione o nível mínimo, build necessária e por que é a melhor rota para jogadores veteranos.</p></div> | ||
Revision as of 12:55, 13 April 2026
// Métodos de Farming
Escolha sua abordagem
Cada estilo tem vantagens diferentes. Clique para explorar.
O método mais direto: você mata monstros, coleta os drops e vende no mercado. O lucro depende da eficiência de kills e do valor dos drops do mapa escolhido.
Substitua com as melhores rotas de grind ativo do servidor. Mencione quais classes têm vantagem, quais monstros dropar os itens mais valiosos e qual é o range ideal de nível.
- Lucro imediato em Zeny
- EXP simultânea
- Drops raros possíveis
- Requer atenção ativa
- Custo de consumíveis
- Variação no lucro
Zeny/hora (estimado) ???M–???M
Dificuldade Moderada
Consistência Alta
Iniciantes Classes DPS Lv. 40+
// Rotas de Farm
Melhores locais de farming
Clique em uma localização para ver a rota completa e estratégia.
🗺️ Rota A — Lv.??+
🗺️ Rota B — Lv.??+
🗺️ Rota C — Lv.??+
🗺️ Rota D — Lv.??+
🗺️ Rota E — Lv.??+ (Endgame)
// Ranking de Eficiência
Comparativo de métodos
Zeny por hora estimado em condições ideais. Valores variam conforme class e build.
// Calculadora
Calculadora de Lucro
Estime quanto Zeny você pode acumular com base na sua rotina de jogo.
// Mercado
Como funciona a economia
Entenda onde e como vender seus itens para máximo lucro.
Venda imediata, preço fixo
Use para itens sem valor no mercado de jogadores. Rápido mas menos lucrativo. Substitua com a lista de itens que valem mais vendendo para NPC do que para jogadores.
Máximo lucro, requer paciência
Open shop ou mercado de jogadores. Preços determinados pela oferta e demanda. Substitua com detalhes de como funciona o sistema de venda no TimeRO.
Conheça o mercado
Antes de vender, pesquise os preços praticados. Mencione onde pesquisar: Discord, site oficial, ou @whosell/@whobuy in-game commands se o servidor suportar.
// Loadout Builder
Monte seu loadout de farming
Selecione os consumíveis que você usa por sessão e veja o custo total. Ajuda a calcular o lucro real.
data-cost com os preços reais do servidor (em milhares de Zeny).
// Dicas Avançadas
Maximize cada hora de farm
Detalhes que a maioria dos jogadores ignora e fazem diferença real no lucro.
Guias relacionados
🌿BASEGuia de LevelingEvolua seu personagem enquanto faz Zeny no caminho.Ler →
💀AVANÇADOCaça a MVPsMVPs dropam os itens mais valiosos do servidor. Alta recompensa.Ler →
💹SISTEMAEconomia do ServidorEntenda o fluxo de Zeny, inflação e como o mercado funciona no macro.Ler →
💬 Discussão do Guia Discord TimeRO
<script>
/* ════════════════════════════════════════════════════════
FARMING GUIDE JAVASCRIPT All new functions — none shared with leveling/mvp guides.
════════════════════════════════════════════════════════ */
/* ── Method tab switcher ─────────────────────────── */ var activeMethod = 'grind'; var methodColors = {
grind: { bg: 'rgba(249,197,0,0.18)', color: '#f9c500' },
market: { bg: 'rgba(0,212,255,0.14)', color: '#00d4ff' },
passive: { bg: 'rgba(176,108,255,0.14)', color: '#b06cff' }
};
function switchMethod(m) {
activeMethod = m;
/* Hide all panels */
document.querySelectorAll('.method-panel').forEach(function(p) {
p.style.display = 'none';
});
/* Show selected panel */
var panel = document.getElementById('method-' + m);
if (panel) { panel.style.display = 'grid'; panel.style.animation = 'method-in 0.3s ease both'; }
/* Update tab buttons */
var tabs = { grind: 'grind', market: 'market', passive: 'passive' };
Object.keys(tabs).forEach(function(key) {
var btn = document.getElementById('mtab-' + key);
if (!btn) return;
if (key === m) {
var mc = methodColors[m];
btn.style.background = mc.bg;
btn.style.color = mc.color;
btn.style.fontWeight = '900';
} else {
btn.style.background = 'transparent';
btn.style.color = 'rgba(122,144,176,0.55)';
btn.style.fontWeight = '700';
}
});
}
/* ── Route pill viewer ───────────────────────────── */ var openRoute = null;
function expandRoute(id) {
var detail = document.getElementById(id); if (!detail) return;
if (openRoute === id) {
/* Toggle close */
detail.style.display = 'none';
openRoute = null;
var pill = document.getElementById('pill-' + id);
if (pill) { pill.style.transform = ; pill.style.fontWeight = '800'; }
return;
}
/* Close previously open */
if (openRoute) {
var prev = document.getElementById(openRoute);
if (prev) prev.style.display = 'none';
var prevPill = document.getElementById('pill-' + openRoute);
if (prevPill) { prevPill.style.transform = ; prevPill.style.fontWeight = '800'; }
}
detail.style.display = 'block'; openRoute = id;
/* Highlight active pill */
var pill = document.getElementById('pill-' + id);
if (pill) { pill.style.transform = 'scale(1.04)'; pill.style.fontWeight = '900'; }
/* Scroll to route */
setTimeout(function() { detail.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 80);
}
/* ── Profitability Calculator ────────────────────── */ var calcState = {
hours: 2, methodRate: 70, /* estimated M z per hour — change per method option */ booster: false
};
function adjustCalc(field, delta) {
if (field === 'hours') {
calcState.hours = Math.max(0.5, Math.min(12, calcState.hours + delta));
var el = document.getElementById('calc-hours');
if (el) el.textContent = calcState.hours;
}
updateCalc();
}
function setBooster(on) {
calcState.booster = on;
var yes = document.getElementById('boost-yes');
var no = document.getElementById('boost-no');
if (yes && no) {
if (on) {
yes.style.background = 'rgba(0,255,136,0.16)';
yes.style.borderColor = 'rgba(0,255,136,0.35)';
yes.style.color = '#00ff88';
no.style.background = 'rgba(255,255,255,0.04)';
no.style.borderColor = 'rgba(255,255,255,0.09)';
no.style.color = 'rgba(122,144,176,0.60)';
} else {
no.style.background = 'rgba(255,61,90,0.15)';
no.style.borderColor = 'rgba(255,61,90,0.30)';
no.style.color = '#ff3d5a';
yes.style.background = 'rgba(255,255,255,0.04)';
yes.style.borderColor = 'rgba(255,255,255,0.09)';
yes.style.color = 'rgba(122,144,176,0.60)';
}
}
updateCalc();
}
function updateCalc() {
var sel = document.getElementById('calc-method');
if (sel) calcState.methodRate = parseInt(sel.value) || 70;
var rate = calcState.methodRate * (calcState.booster ? 1.5 : 1.0); var session = rate * calcState.hours; var day = session; var week = day * 7;
/* Format: if >= 1000, show as B (billions), >= 1 show as M, else k */
function fmt(v) {
if (v >= 1000) return (v / 1000).toFixed(1) + 'B z';
if (v >= 1) return v.toFixed(0) + 'M z';
return (v * 1000).toFixed(0) + 'k z';
}
var el_s = document.getElementById('result-session');
var el_d = document.getElementById('result-day');
var el_w = document.getElementById('result-week');
var el_b = document.getElementById('result-bar');
var el_p = document.getElementById('result-pct');
if (el_s) el_s.textContent = fmt(session); if (el_d) el_d.textContent = fmt(day); if (el_w) el_w.textContent = fmt(week);
/* Bar: max = endgame method * 12h * 7d * 1.5x booster */ var max = 95 * 1.5 * 12 * 7; var pct = Math.min(100, Math.round((week / max) * 100)); if (el_b) el_b.style.width = pct + '%'; if (el_p) el_p.textContent = pct + '%';
}
/* ── Loadout Builder ─────────────────────────────── */ var loadoutTotal = 0; var loadoutCount = 0;
function toggleLoadout(el) {
var cost = parseInt(el.dataset.cost) || 0;
var box = el.querySelector('.li-check');
var on = el.dataset.selected === '1';
if (on) {
el.dataset.selected = '0';
loadoutTotal -= cost;
loadoutCount--;
if (box) { box.textContent = ; box.style.background = 'rgba(176,108,255,0.04)'; box.style.borderColor = 'rgba(176,108,255,0.30)'; }
el.style.background = 'rgba(255,255,255,0.03)';
el.style.borderColor = 'rgba(255,255,255,0.07)';
} else {
el.dataset.selected = '1';
loadoutTotal += cost;
loadoutCount++;
if (box) { box.textContent = '✓'; box.style.background = 'rgba(176,108,255,0.20)'; box.style.borderColor = 'rgba(176,108,255,0.50)'; box.style.color = '#b06cff'; }
el.style.background = 'rgba(176,108,255,0.07)';
el.style.borderColor = 'rgba(176,108,255,0.22)';
}
var tot = document.getElementById('loadout-total');
var cnt = document.getElementById('loadout-count');
if (tot) tot.textContent = loadoutTotal >= 1000
? (loadoutTotal / 1000).toFixed(1) + 'M z'
: loadoutTotal + 'k z';
if (cnt) cnt.textContent = loadoutCount;
}
function clearLoadout() {
loadoutTotal = 0; loadoutCount = 0;
document.querySelectorAll('.loadout-item').forEach(function(el) {
el.dataset.selected = '0';
var box = el.querySelector('.li-check');
if (box) { box.textContent = ; box.style.background = 'rgba(176,108,255,0.04)'; box.style.borderColor = 'rgba(176,108,255,0.30)'; box.style.color = ; }
el.style.background = 'rgba(255,255,255,0.03)';
el.style.borderColor = 'rgba(255,255,255,0.07)';
});
var tot = document.getElementById('loadout-total'); if (tot) tot.textContent = '0k z';
var cnt = document.getElementById('loadout-count'); if (cnt) cnt.textContent = '0';
}
/* ── Efficiency bars animate on scroll ──────────── */ (function() {
var animated = false;
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(e) {
if (e.isIntersecting && !animated) {
animated = true;
document.querySelectorAll('.eff-bar').forEach(function(bar, i) {
var w = bar.style.width;
bar.style.width = '0';
bar.style.transition = 'width 0.8s ' + (i * 0.08) + 's cubic-bezier(0.22,1,0.36,1)';
setTimeout(function() { bar.style.width = w; }, 50);
});
}
});
}, { threshold: 0.2 });
var section = document.querySelector('.eff-bar');
if (section) observer.observe(section.closest('div') || section);
})();
/* ── Init ────────────────────────────────────────── */ document.addEventListener('DOMContentLoaded', function() {
var sb = document.getElementById('settingsButton'), sm = document.getElementById('settingsMenu');
if (sb && sm) sb.addEventListener('click', function() { sm.style.right = sm.style.right === '20px' ? '-300px' : '20px'; });
/* Init first method tab */
switchMethod('grind');
/* Init calculator */ updateCalc();
/* Smooth anchors */
document.querySelectorAll('a[href^="#"]').forEach(function(a) {
a.addEventListener('click', function(e) {
var id = this.getAttribute('href').slice(1), el = document.getElementById(id);
if (el) { e.preventDefault(); el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
});
});
/* Mobile padding */
if (window.innerWidth < 900) {
document.querySelectorAll(
'[style*="padding:52px 64px"],[style*="padding:48px 64px"],[style*="padding:28px 64px"]'
).forEach(function(el) { el.style.paddingLeft = '18px'; el.style.paddingRight = '18px'; });
}
}); </script>