MediaWiki:Gadget-stat-calc.js:修订间差异
跳转到导航
跳转到搜索
无编辑摘要 |
无编辑摘要 |
||
第4行: | 第4行: | ||
if (!tag.length) return; | if (!tag.length) return; | ||
const html = `<div class="stat-calc"> | // 插入能力值计算器 HTML 内容 | ||
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> | </div> | ||
`; | |||
tag.replaceWith(html); | // 替换标签 | ||
tag.replaceWith(html); | |||
// 性格影响修正 | |||
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.0, 1.0, 1.0, 1.0, 1.0] | neutral: [1.0, 1.0, 1.0, 1.0, 1.0] // 平衡性格 | ||
}; | }; | ||
return map[nature] || map.neutral; | return map[nature] || map.neutral; | ||
} | } | ||
// 点击计算按钮触发 | |||
document.getElementById("calc-btn").addEventListener("click", function () { | document.getElementById("calc-btn").addEventListener("click", function () { | ||
const level = parseInt(document.getElementsByName("level2")[0].value); | const level = parseInt(document.getElementsByName("level2")[0].value); | ||
第64行: | 第72行: | ||
let stat = 0; | let stat = 0; | ||
if (i === 0) { | if (i === 0) { | ||
stat = Math.floor(((base * 2 + iv + Math.floor(ev / 4)) * level) / 100 + level + 10); | stat = Math.floor(((base * 2 + iv + Math.floor(ev / 4)) * level) / 100 + level + 10); // 体力 | ||
} else { | } else { | ||
stat = Math.floor(((((base * 2 + iv + Math.floor(ev / 4)) * level) / 100) + 5) * modifiers[i - 1]); | stat = Math.floor(((((base * 2 + iv + Math.floor(ev / 4)) * level) / 100) + 5) * modifiers[i - 1]); | ||
} | } | ||
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月11日 (日) 04:17的版本
mw.hook('wikipage.content').add(function ($content) {
// 查找 <stat-calc /> 或 <p><stat-calc /></p>
const tag = $content.find('stat-calc, p:has(stat-calc)').first();
if (!tag.length) return;
// 插入能力值计算器 HTML 内容
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>
`;
// 替换标签
tag.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);
});
});
👥 当前在线人数:72