Spotligh:mapas: mudanças entre as edições

De Farmland
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(27 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
{{DISPLAYTITLE:<span style="display:none">{{PAGENAME}}</span>}}
__TOC__
<html>
<html>
<style>
<style>
:root{--bg:#0b1020;--panel:#121a2d;--panel2:#182238;--text:#edf2ff;--muted:#98a7c3;--accent:#79a7ff;--green:#62d49b;--border:#27344f}
:root{--bg:#0b1020;--panel:#121a2d;--panel2:#182238;--text:#edf2ff;--muted:#98a7c3;--accent:#79a7ff;--green:#62d49b;--border:#27344f}
.guia-up *{box-sizing:border-box}
.guia-up *{box-sizing:border-box}
.guia-up{background:linear-gradient(180deg,#080d19,#0e1527);color:var(--text);font-family:Inter,Segoe UI,Arial,sans-serif;padding:20px;border-radius:12px;margin:10px 0}
.guia-up{background:linear-gradient(180deg,#080d19,#0e1527);color:var(--text);font-family:Inter,Segoe UI,Arial,sans-serif;padding:20px;border-radius:12px;margin:10px 0;position:relative}
.guia-up h1{margin:0;font-size:28px;color:#edf2ff}
.guia-up h1{margin:0;font-size:28px;color:#edf2ff}
.guia-up .sub{color:var(--muted);margin:8px 0 20px;font-size:14px}
.guia-up .sub{color:var(--muted);margin:8px 0 20px;font-size:14px}
Linha 19: Linha 21:
.guia-up .tablebox{overflow:auto;border:1px solid var(--border);border-radius:14px;background:var(--panel)}
.guia-up .tablebox{overflow:auto;border:1px solid var(--border);border-radius:14px;background:var(--panel)}
.guia-up table{width:100%;border-collapse:collapse;min-width:800px}
.guia-up table{width:100%;border-collapse:collapse;min-width:800px}
.guia-up th{position:sticky;top:0;background:#17213a;color:#b9c7df;text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.05em;padding:13px}
.guia-up th{position:sticky;top:0;background:#17213a;color:#b9c7df;text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.05em;padding:13px;cursor:pointer;user-select:none;white-space:nowrap}
.guia-up th:hover{color:#edf2ff}
.guia-up th .sort-arrow{margin-left:6px;font-size:11px;opacity:.45}
.guia-up th.sorted .sort-arrow{opacity:1;color:var(--accent)}
.guia-up td{padding:12px 13px;border-top:1px solid var(--border);color:#edf2ff}
.guia-up td{padding:12px 13px;border-top:1px solid var(--border);color:#edf2ff}
.guia-up tr:hover td{background:#162038}
.guia-up tr:hover td{background:#162038}
Linha 26: Linha 31:
.guia-up .max{font-weight:700}
.guia-up .max{font-weight:700}
.guia-up .rec{font-weight:800;color:var(--green)}
.guia-up .rec{font-weight:800;color:var(--green)}
.guia-up .map-name{cursor:pointer;color:#a9c7ff;border-bottom:1px dashed #5a7ab0;transition:color .15s}
.guia-up .map-name:hover{color:#79a7ff}
.guia-up footer{color:var(--muted);font-size:12px;margin-top:14px;line-height:1.5}
.guia-up footer{color:var(--muted);font-size:12px;margin-top:14px;line-height:1.5}
.guia-tooltip{
  display:none;position:fixed;z-index:9999;background:#0f1729;border:1px solid #2c3b5c;
  border-radius:12px;padding:14px 16px;max-width:340px;box-shadow:0 12px 40px rgba(0,0,0,.55);
  font-size:13px;line-height:1.55;pointer-events:none;
}
.guia-tooltip.visible{display:block;pointer-events:auto}
.guia-tooltip .tt-title{font-weight:700;color:#79a7ff;margin-bottom:8px;font-size:14px}
.guia-tooltip .tt-list{margin:0;padding:0;list-style:none}
.guia-tooltip .tt-list li{padding:3px 0;color:#d0daf0}
.guia-tooltip .tt-list li span{color:#62d49b;font-weight:600}
.guia-tooltip .tt-mvp{color:#ff9f43 !important}
.guia-tooltip .tt-close{position:absolute;top:8px;right:10px;cursor:pointer;color:#98a7c3;font-size:16px}
.guia-tooltip .tt-close:hover{color:#fff}
@media(max-width:650px){.guia-up .cards{grid-template-columns:1fr}}
@media(max-width:650px){.guia-up .cards{grid-template-columns:1fr}}
</style>
</style>
<div class="guia-up">
<div class="guia-up">
   <h1>Guia de Up — Mapas por Nível</h1>
   <h1>Mapas Spotlight</h1>
   <p class="sub">Nível recomendado = Máximo 15. Use a busca e os filtros para encontrar o mapa ideal.</p>
   <p class="sub">Mín/Máx = nível do monstro mais comum ±10. Recomendado = nível 5. Passe o mouse no <b>nome do mapa</b> para ver os monstros. Clique para abrir no Divine Pride.</p>
 
   <div class="cards">
   <div class="cards">
     <div class="card"><b id="total-maps">0</b><span>mapas nesta lista</span></div>
     <div class="card"><b id="total-maps">0</b><span>mapas nesta lista</span></div>
     <div class="card"><b>1 → 177</b><span>faixa total de níveis</span></div>
     <div class="card"><b>1 → 178</b><span>faixa total de níveis</span></div>
     <div class="card"><b>Máx. 15</b><span>regra do nível recomendado</span></div>
     <div class="card"><b>Principal 5</b><span>regra do nível recomendado</span></div>
   </div>
   </div>
   <div class="tools">
   <div class="tools">
     <input id="search" placeholder="Buscar por código ou nome do mapa..." oninput="filterRows()">
     <input id="search" placeholder="Buscar por código ou nome do mapa..." oninput="filterRows()">
Linha 61: Linha 78:
     <button class="btn-clear" onclick="clearFilters()">Limpar</button>
     <button class="btn-clear" onclick="clearFilters()">Limpar</button>
   </div>
   </div>
   <div class="info-bar">
   <div class="info-bar">
     <span>Mostrando <b id="result-count">0</b> mapas</span>
     <span>Mostrando <b id="result-count">0</b> mapas</span>
     <span>Dica: digite parte do nome ou código</span>
     <span>Hover: monstros · Clique: Divine Pride · Clique no cabeçalho para ordenar</span>
   </div>
   </div>
   <div class="tablebox">
   <div class="tablebox">
     <table>
     <table>
Linha 72: Linha 87:
         <tr>
         <tr>
           <th>#</th>
           <th>#</th>
           <th>Mapa</th>
           <th data-col="0" onclick="sortBy(0)">Mapa <span class="sort-arrow">▲</span></th>
           <th>Nome</th>
           <th data-col="1" onclick="sortBy(1)">Nome <span class="sort-arrow">▲</span></th>
           <th class="num">Mín.</th>
           <th class="num" data-col="2" onclick="sortBy(2)">Mín. <span class="sort-arrow">▲</span></th>
           <th class="num">Máx.</th>
           <th class="num" data-col="3" onclick="sortBy(3)">Máx. <span class="sort-arrow">▲</span></th>
           <th class="num">Recomendado</th>
           <th class="num" data-col="4" onclick="sortBy(4)">Recomendado <span class="sort-arrow">▲</span></th>
         </tr>
         </tr>
       </thead>
       </thead>
Linha 82: Linha 97:
     </table>
     </table>
   </div>
   </div>
 
   <footer>Mínimo e máximo usam o monstro com mais spawns no mapa (±10). O recomendado é 5 níveis abaixo desse monstro.</footer>
   <footer>O nível recomendado é calculado automaticamente (Máximo − 15). A dificuldade real pode variar conforme classe, equipamento e monstros do mapa.<br>
</div>
   <b style="color:#79a7ff">Obs:</b> Os níveis ainda estão temporários (1-1). Assim que você enviar os níveis corretos eu atualizo.</footer>
<div class="guia-tooltip" id="tooltip">
  <div class="tt-close" onclick="hideTooltip()">×</div>
   <div class="tt-title" id="tt-title"></div>
  <ul class="tt-list" id="tt-list"></ul>
</div>
</div>
<script>
<script>
const solar = [
const monsters = {
["abbey02","Abadia da Ilha 2",1,1],["abyss_03","Lago do Abismo 3",1,1],["ama_dun03","Calabouço de Amatsu 3",1,1],
"abbey02":[["Zombie Slaughter",124],["Ragged Zombie",123],["Flame Skull",121],["Necromancer",133],["Falling Bishop",138,"MVP"]],
["ayo_dun01","Calabouço de Ayothaya 1",1,1],["c_tower2","Torre do Relógio 2",1,1],["cmd_fild03","Campo de Comodo 3",1,1],
"abyss_03":[["Acidus",130],["Mimic",56],["Ancient Mimic",112],["Dragon Egg",119],["Ferus",126],["Hydrolancer",121],["Detardeurus",135,"MVP"]],
["dew_fild01",
"ama_dun03":[["Shinobi",95],["Tengu",98],["Firelock Soldier",88],["The Paper",97],["Mimic",56],["Miyabi Doll",85],["Samurai Specter",100,"MVP"]],
"ayo_dun01":[["Leaf Cat",64],["Ghoul",61],["Whisper",46],["Kraben",70]],
"c_tower2":[["Clock",81],["Punk",82],["Rideword",74],["Mimic",56],
const lists = {
const lists = {
   "Spotlight Solar": solar,
   "Spotlight Solar": solar,
Linha 211: Linha 391:
   "Spotlight Astral": astral
   "Spotlight Astral": astral
};
};
let currentList = [];
let sortCol = -1;
let sortDir = 1; // 1 = crescente, -1 = decrescente


function recommended(max){return Math.max(1,max-15)}
function recommended(max){return Math.max(1,max-15)}


function render(list){
function showTooltip(e, mapCode, mapName){
  const tip = document.getElementById("tooltip");
  const title = document.getElementById("tt-title");
  const list = document.getElementById("tt-list");
  const data = monsters[mapCode];
  title.textContent = mapName;
  if(!data || data.length === 0){
    list.innerHTML = "<li style='color:#98a7c3'>Nenhuma informação de monstros cadastrada.</li>";
  } else {
    list.innerHTML = data.map(m => {
      const isMvp = m[2] === "MVP" || m[2] === "especial";
      const label = isMvp ? ` <span class="tt-mvp">(${m[2]})</span>` : "";
      return `<li>${m[0]} — <span>Nv. ${m[1]}</span>${label}</li>`;
    }).join("");
  }
  tip.classList.add("visible");
  const x = Math.min(e.clientX + 14, window.innerWidth - 360);
  const y = Math.min(e.clientY + 14, window.innerHeight - 300);
  tip.style.left = x + "px";
  tip.style.top = y + "px";
}
function hideTooltip(){
  document.getElementById("tooltip").classList.remove("visible");
}
 
function updateSortArrows(){
  document.querySelectorAll("th[data-col]").forEach(th => {
    const arrow = th.querySelector(".sort-arrow");
    const col = parseInt(th.dataset.col);
    th.classList.remove("sorted");
    if(col === sortCol){
      th.classList.add("sorted");
      arrow.textContent = sortDir === 1 ? "▲" : "▼";
    } else {
      arrow.textContent = "▲";
    }
  });
}
 
function sortBy(col){
  if(sortCol === col){
    sortDir *= -1;
  } else {
    sortCol = col;
    sortDir = 1;
  }
  currentList.sort((a,b) => {
    let va, vb;
    if(col === 0){ // código do mapa
      va = a[0].toLowerCase();
      vb = b[0].toLowerCase();
    } else if(col === 1){ // nome
      va = a[1].toLowerCase();
      vb = b[1].toLowerCase();
    } else if(col === 2){ // min
      va = a[2]; vb = b[2];
    } else if(col === 3){ // max
      va = a[3]; vb = b[3];
    } else { // recomendado
      va = recommended(a[3]);
      vb = recommended(b[3]);
    }
    if(va < vb) return -1 * sortDir;
    if(va > vb) return 1 * sortDir;
    return 0;
  });
  updateSortArrows();
  render(currentList, lists[document.getElementById("spotlight").value].length);
}
 
function render(list, totalInSpotlight){
   const tbody = document.getElementById("rows");
   const tbody = document.getElementById("rows");
   document.getElementById("result-count").textContent = list.length;
   document.getElementById("result-count").textContent = list.length;
   document.getElementById("total-maps").textContent = list.length;
   document.getElementById("total-maps").textContent = totalInSpotlight;
 
   if(list.length === 0){
   if(list.length === 0){
     tbody.innerHTML = `<tr><td colspan="6" style="text-align:center;padding:28px;color:#98a7c3">Nenhum mapa encontrado com os filtros atuais.</td></tr>`;
     tbody.innerHTML = `<tr><td colspan="6" style="text-align:center;padding:28px;color:#98a7c3">Nenhum mapa encontrado com os filtros atuais.</td></tr>`;
     return;
     return;
   }
   }
   tbody.innerHTML = list.map((x,i)=>`<tr>
   tbody.innerHTML = list.map((x,i)=>`<tr>
     <td>${i+1}</td>
     <td>${i+1}</td>
     <td><code>${x[0]}</code></td>
     <td><code>${x[0]}</code></td>
     <td>${x[1]}</td>
     <td><span class="map-name" data-code="${x[0]}" data-name="${x[1]}">${x[1]}</span></td>
     <td class="num">${x[2]}</td>
     <td class="num">${x[2]}</td>
     <td class="num max">${x[3]}</td>
     <td class="num max">${x[3]}</td>
     <td class="num rec">${recommended(x[3])}</td>
     <td class="num rec">${recommended(x[3])}</td>
   </tr>`).join("");
   </tr>`).join("");
  document.querySelectorAll(".map-name").forEach(el => {
    el.addEventListener("mouseenter", e => showTooltip(e, el.dataset.code, el.dataset.name));
    el.addEventListener("mouseleave", () => setTimeout(hideTooltip, 180));
    el.addEventListener("click", e => {
      e.stopPropagation();
      window.open("https://www.divine-pride.net/database/map/" + el.dataset.code, "_blank", "noopener,noreferrer");
    });
  });
}
}


Linha 238: Linha 498:
   const range = document.getElementById("level").value;
   const range = document.getElementById("level").value;
   const selected = document.getElementById("spotlight").value;
   const selected = document.getElementById("spotlight").value;
 
   const spotlightList = lists[selected] || [];
   let list = (lists[selected] || []).filter(x => (x[0] + " " + x[1]).toLowerCase().includes(q));
  let list = spotlightList.filter(x => (x[0] + " " + x[1]).toLowerCase().includes(q));
 
   if(range){
   if(range){
     const [a,b] = range.split("-").map(Number);
     const [a,b] = range.split("-").map(Number);
Linha 248: Linha 507:
     });
     });
   }
   }
   render(list);
   currentList = list;
  // reaplica a ordenação atual se existir
  if(sortCol >= 0){
    sortBy(sortCol); // isso já chama o render
    // corrige a direção porque o sortBy inverte quando clica de novo
    sortDir *= -1;
    sortBy(sortCol);
  } else {
    render(list, spotlightList.length);
  }
}
}


Linha 255: Linha 523:
   document.getElementById("level").value = "";
   document.getElementById("level").value = "";
   document.getElementById("spotlight").value = "Spotlight Solar";
   document.getElementById("spotlight").value = "Spotlight Solar";
  sortCol = -1;
  sortDir = 1;
  updateSortArrows();
   filterRows();
   filterRows();
}
}
document.addEventListener("click", e => {
  if(!e.target.closest(".guia-tooltip") && !e.target.closest(".map-name")) hideTooltip();
});


filterRows();
filterRows();
</script>
</script>
</html>
</html>

Edição atual tal como às 22h56min de 26 de julho de 2026

Mapas Spotlight

Mín/Máx = nível do monstro mais comum ±10. Recomendado = nível − 5. Passe o mouse no nome do mapa para ver os monstros. Clique para abrir no Divine Pride.

0mapas nesta lista
1 → 178faixa total de níveis
Principal − 5regra do nível recomendado
Mostrando 0 mapas Hover: monstros · Clique: Divine Pride · Clique no cabeçalho para ordenar
# Mapa Nome Mín. Máx. Recomendado
Mínimo e máximo usam o monstro com mais spawns no mapa (±10). O recomendado é 5 níveis abaixo desse monstro.
×