MediaWiki:Gadget-stat-calc.js:修订间差异

来自赛尔号精灵图鉴
跳转到导航 跳转到搜索
(创建页面,内容为“→‎*********************************************************** * MediaWiki Gadget: stat-calc * 用法:只需在页面中写 <stat-calc />,即可嵌入精灵能力值计算器 ***********************************************************:​ mw.hook('wikipage.content').add(function($content) { if (!$content.find('stat-calc').length) return; // 构建 HTML 模板 const html = ` <div class="stat-calc"> <h3>精灵能力值计算器</h3> <div cla…”
 
无编辑摘要
第1行: 第1行:
/************************************************************
* MediaWiki Gadget: stat-calc
* 用法:只需在页面中写 <stat-calc />,即可嵌入精灵能力值计算器
************************************************************/
mw.hook('wikipage.content').add(function($content) {
mw.hook('wikipage.content').add(function($content) {
   if (!$content.find('stat-calc').length) return;
   if (!$content.find('stat-calc').length) return;


  // 构建 HTML 模板
   const html = `<div class="stat-calc">
   const html = `
  <div class="stat-calc">
     <h3>精灵能力值计算器</h3>
     <h3>精灵能力值计算器</h3>
     <div class="config-block">
     <div class="config-block">
第28行: 第21行:
     <table class="stat-table">
     <table class="stat-table">
       <tr><th>项目</th><th>种族值</th><th>努力值</th><th>最终值</th></tr>
       <tr><th>项目</th><th>种族值</th><th>努力值</th><th>最终值</th></tr>
       <tr><td>体力</td><td class="_race2">171</td><td><input name="ev" type="number" value="0" min="0" max="252"></td><td><span class="result"></span></td></tr>
       <tr><td>体力</td><td class="_race2">171</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
       <tr><td>攻击</td><td class="_race2">140</td><td><input name="ev" type="number" value="0" min="0" max="252"></td><td><span class="result"></span></td></tr>
       <tr><td>攻击</td><td class="_race2">140</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
       <tr><td>防御</td><td class="_race2">111</td><td><input name="ev" type="number" value="0" min="0" max="252"></td><td><span class="result"></span></td></tr>
       <tr><td>防御</td><td class="_race2">111</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
       <tr><td>特攻</td><td class="_race2">70</td><td><input name="ev" type="number" value="0" min="0" max="252"></td><td><span class="result"></span></td></tr>
       <tr><td>特攻</td><td class="_race2">70</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
       <tr><td>特防</td><td class="_race2">111</td><td><input name="ev" type="number" value="0" min="0" max="252"></td><td><span class="result"></span></td></tr>
       <tr><td>特防</td><td class="_race2">111</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
       <tr><td>速度</td><td class="_race2">132</td><td><input name="ev" type="number" value="0" min="0" max="252"></td><td><span class="result"></span></td></tr>
       <tr><td>速度</td><td class="_race2">132</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
     </table>
     </table>
     <p>剩余学习力:<span id="ev-remaining">510</span></p>
     <p>剩余学习力:<span id="ev-remaining">510</span></p>
   </div>
   </div>`;
  `;


   $content.find('stat-calc').replaceWith(html);
   $content.find('stat-calc').replaceWith(html);


  // JS 功能绑定
   function getNatureModifiers(nature) {
   function getNatureModifiers(nature) {
     const map = {
     const map = {
       adamant: [1.1, 1.0, 1.0, 0.9, 1.0],
       adamant: [1.1, 1.0, 1.0, 0.9, 1.0],
       modest: [0.9, 1.0, 1.0, 1.1, 1.0],
       modest: [0.9, 1.0, 1.0, 1.1, 1.0],
       jolly: [1.0, 1.0, 1.0, 0.9, 1.1],
       jolly:   [1.0, 1.0, 1.0, 0.9, 1.1],
       bold:   [0.9, 1.1, 1.0, 1.0, 1.0],
       bold:   [0.9, 1.1, 1.0, 1.0, 1.0],
       calm:   [0.9, 1.0, 1.0, 1.0, 1.1],
       calm:   [0.9, 1.0, 1.0, 1.0, 1.1],
       neutral: [1, 1, 1, 1, 1]
       neutral: [1.0, 1.0, 1.0, 1.0, 1.0]
     };
     };
     return map[nature] || map["neutral"];
     return map[nature] || map.neutral;
   }
   }


第77行: 第68行:
       results[i].textContent = stat;
       results[i].textContent = stat;
     }
     }
     document.getElementById("ev-remaining").textContent = Math.max(510 - totalEV, 0);
     document.getElementById("ev-remaining").textContent = Math.max(510 - totalEV, 0);
   });
   });
});
});

2025年5月10日 (六) 16:50的版本

mw.hook('wikipage.content').add(function($content) {
  if (!$content.find('stat-calc').length) return;

  const html = `<div class="stat-calc">
    <h3>精灵能力值计算器</h3>
    <div class="config-block">
      <label>等级 <input name="level2" type="number" value="100" min="1" max="100"></label>
      <label>个体值 <input name="geti" type="number" value="31" min="0" max="31"></label>
      <label>性格
        <select name="character">
          <option value="neutral">平衡</option>
          <option value="adamant">固执(+攻击 -特攻)</option>
          <option value="modest">保守(+特攻 -攻击)</option>
          <option value="jolly">爽朗(+速度 -特攻)</option>
          <option value="bold">大胆(+防御 -攻击)</option>
          <option value="calm">冷静(+特防 -攻击)</option>
        </select>
      </label>
      <button id="calc-btn">计算</button>
    </div>
    <table class="stat-table">
      <tr><th>项目</th><th>种族值</th><th>努力值</th><th>最终值</th></tr>
      <tr><td>体力</td><td class="_race2">171</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
      <tr><td>攻击</td><td class="_race2">140</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
      <tr><td>防御</td><td class="_race2">111</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
      <tr><td>特攻</td><td class="_race2">70</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
      <tr><td>特防</td><td class="_race2">111</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
      <tr><td>速度</td><td class="_race2">132</td><td><input name="ev" type="number" value="0"></td><td><span class="result"></span></td></tr>
    </table>
    <p>剩余学习力:<span id="ev-remaining">510</span></p>
  </div>`;

  $content.find('stat-calc').replaceWith(html);

  function getNatureModifiers(nature) {
    const map = {
      adamant: [1.1, 1.0, 1.0, 0.9, 1.0],
      modest:  [0.9, 1.0, 1.0, 1.1, 1.0],
      jolly:   [1.0, 1.0, 1.0, 0.9, 1.1],
      bold:    [0.9, 1.1, 1.0, 1.0, 1.0],
      calm:    [0.9, 1.0, 1.0, 1.0, 1.1],
      neutral: [1.0, 1.0, 1.0, 1.0, 1.0]
    };
    return map[nature] || map.neutral;
  }

  document.getElementById("calc-btn").addEventListener("click", function () {
    const level = parseInt(document.getElementsByName("level2")[0].value);
    const iv = parseInt(document.getElementsByName("geti")[0].value);
    const evs = document.getElementsByName("ev");
    const bases = document.querySelectorAll("._race2");
    const results = document.querySelectorAll(".result");
    const nature = document.getElementsByName("character")[0].value;
    const modifiers = getNatureModifiers(nature);

    let totalEV = 0;
    for (let i = 0; i < 6; i++) {
      const base = parseInt(bases[i].textContent || "0");
      const ev = parseInt(evs[i].value || "0");
      totalEV += ev;

      let stat = 0;
      if (i === 0) {
        stat = Math.floor(((base * 2 + iv + Math.floor(ev / 4)) * level) / 100 + level + 10);
      } else {
        stat = Math.floor(((((base * 2 + iv + Math.floor(ev / 4)) * level) / 100) + 5) * modifiers[i - 1]);
      }
      results[i].textContent = stat;
    }

    document.getElementById("ev-remaining").textContent = Math.max(510 - totalEV, 0);
  });
});
👥 当前在线人数:77