MediaWiki:Cooking calculator.js

提供:ARK Wiki
ナビゲーションに移動 検索に移動

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • 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);
    }
});