MediaWiki:Cooking calculator.js
ナビゲーションに移動
検索に移動
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: Ctrl-F5を押してください
$(function() {
if (cookingCalcDiv = document.getElementById('cookingCalc')) {
// [0]: health, [1]: stamina, [2]:food, [3]: water, [4]:
var cookingStats = {
'エレメントダスト': [0.1, 0.1, 0.1, 0.1, 0.01],
'アマル/アズール/ティントベリー/サボテンの樹液': [0.01, 0.01, 0.0375, 0.025, 0.01],
'メジョベリー': [0.01, 0.01, 0.0525, 0.035, 0.01],
'ナルコベリー': [0.01, -0.1, 0.1, 0.01, 0.01],
'スティムベリー': [0.01, 0.125, 0.0375, -0.25, 0.01],
'作物': [0.055, 0.01, 0.06, 0.5, 0.02],
'アガーラビック・マッシュルーム': [0.05, 0.2, 0.1, 0, 0.1],
'アクアティック・マッシュルーム': [0.01, 0.1, 0.05, 0.2, 0.01],
'アサービック・マッシュルーム': [0.01, -0.1, 0.1, 0.01, 0.01],
'金のマッシュルーム': [0.01, 0.5, 0.0375, -0.25, 0.01],
'レアマッシュルーム': [0.01, 1, 0.01, 0.01, 0.01],
'種': [0.01, 0.01, 0.01, 0.01, 0.01],
'レアフラワー': [0.01, 0.01, 0.01, 0.01, 1],
'巨大ハチのハチミツ': [0.11, 0.01, 0.2, 0.01, 0.02],
'スイートベジタブルケーキ': [0.1, 0.01, 0.1, 0.01, 0.02],
'卵': [0.8, 0.8, 0.8, 0.01, 0.3],
'キブル': [0.01, 3, 2.25, -1, 0.05],
'石鹸': [-0.05, -0.05, 0.1, -0.05, 0.01],
'汚染された小瘤': [-0.5, -0.5, 0.1, -0.5, 0.01],
'有機ポリマー': [-0.5, -0.5, 0.1, -0.5, 0.01],
'生肉/魚肉': [0.11, 0.01, 0.15, 0.01, 0.02],
'霜降り肉/大トロ/羊肉': [0.24, 0.01, 0.2, 0.01, 0.02],
'こんがり肉/こんがり魚/干し肉': [0.11, 0.01, 0.2, 0.01, 0.02],
'霜降りこんがり肉(干し肉)/こんがり大トロ/ラムチョップ': [0.33, 0.01, 0.29, 0.01, 0.02],
'腐った肉': [-0.5, -0.3, 0.0625, 0.01, 0.02],
'人間の糞': [-0.125, -0.125, 0.1, -0.125, 0.01],
'小型動物の糞': [-0.05, -0.05, 0, -0.05, 0.01],
'中型動物の糞': [-0.1, -0.1, 0.1, -0.1, 0.01],
'大型動物の糞/巨大生物の糞': [-0.15, -0.15, 0.1, -0.15, 0.01],
'雪フクロウのペレット': [-0.05, -0.05, 0, -0.05, 0.01]
};
var tableRows = '';
var dropDownOptions = '';
for (var ing in cookingStats) {
dropDownOptions += '<option>' + ing + '</option>';
}
for (var i = 0; i < 8; i++) {
tableRows += '<tr><td><select id="cookingCalcIng' + i + '">' + dropDownOptions + '</select></td><td><input type="number" min="0" max="1000" maxlength="4" value="0" id="cookingCalcIngNr' + i + '" style="width:5em"></td></tr>';
}
cookingCalcDiv.innerHTML = '<table class="wikitable">' +
'<tr><th>製作スキル</th><td><input type="number" min="100" max="2000" maxlength="4" value="100" id="cookingCalcCraftingSpeed" style="width:5em">%</td></tr>' +
'<tr><th>材料</th><th>個数</th></tr>' +
tableRows +
'</table>' +
'<table class="wikitable"><tr><th>結果</th><th colspan="5"><label><input type="radio" name="foodkind">食料</label><label><input type="radio" name="foodkind">飲料</label></td></tr><tr><th></th><th>体力</th><th>スタミナ</th><th>食料</th><th>水分</th><th>重量</th></tr>' +
'<tr><th>数値</th><td id="cookingR0">1</td><td id="cookingR1">1</td><td id="cookingR2">1</td><td id="cookingR3">1</td><td id="cookingR4">0.1</td></tr>' +
'</table>';
for (var i = 0; i < 8; i++) {
document.getElementById('cookingCalcIng' + i).selectedIndex = i;
}
function cookingCalcChangeKind(type) {
document.getElementById('cookingR2').style.textDecoration = (type === "食料" ? "" : "line-through");
document.getElementById('cookingR3').style.textDecoration = (type === "飲料" ? "" : "line-through");
}
function calcCooking() {
if (cookingStats) {
var results = [1, 1, 1, 1, .1];
var ing = 0;
var ingNr = 0;
var ingEl = null;
var ingNrEl = null;
var csEl = document.getElementById('cookingCalcCraftingSpeed');
if (csEl != null) {
var cs = csEl.value / 100.0;
for (var i = 0; i < 8; i++) {
ingEl = document.getElementById('cookingCalcIng' + i);
ingNrEl = document.getElementById('cookingCalcIngNr' + i);
if (ingEl != null && ingNrEl != null) {
ing = ingEl.value;
ingNr = ingNrEl.value;
if (cookingStats[ing] != null) {
for (var j = 0; j < 4; j++) {
results[j] += ingNr * cookingStats[ing][j] * 5 * (cs * 1.5625 - 0.3125);
}
results[4] += ingNr * cookingStats[ing][4];
}
}
}
}
for (var j = 0; j < 5; j++) {
var rEl = document.getElementById('cookingR' + j);
if (rEl != null) {
rEl.innerHTML = results[j].toFixed(2);
}
}
}
}
// Add the event listeners to the elements.
// We do this as event listeners instead of adding onchange attributes because the functions aren't global
// and we don't want to pollute the global scope.
document.querySelectorAll('[id^=cookingCalcIng]').forEach(function(el){
el.addEventListener('input', calcCooking);
});
document.querySelectorAll('[name="foodkind"]').forEach(function(el){
el.addEventListener('change', function(){cookingCalcChangeKind(el.nextSibling.textContent)});
});
document.getElementById('cookingCalcCraftingSpeed').addEventListener('input', calcCooking);
}
});