Divine Gate 维基
探索
首页
讨论板
所有页面
社区页
交互式地图
最新博文
遊戲知識
工具
Divine Gate Wikia APK
Divine Gate Tool
體力計算
模擬強化合成
模擬刮卡
隊伍組合
活動時間表
基礎資料
版本更新
帳號升級能力表
任務
抽獎資訊
數據轉移系統
棋子掉落機制
亂入
心得
遊戲開局
朋友系統
遊戲秘技
速刷首抽秘技
光闇無主角開局
無視移動系陷阱
關於所有陷阱的小Bug
Unit相關
經驗值類型: Type2 (Lv 10) Type2 (Lv 15) Type2 (Lv 25) Type2 (Lv 30) Type2 (Lv 50) Type2 (Lv 70) Type3 (Lv 5) Type3 (Lv 10) Type3 (Lv 15) Type3 (Lv 25) Type3 (Lv 30) Type3 (Lv 35) Type3 (Lv 50) Type3 (Lv 70) Type5 (Lv 50) Type5 (Lv 99) 不能升級 合作小怪 Type4 第三世代A 第三世代B 合作刮卡 巨人 Type3e 妖尾II 御坂妹 化合龍A 化合龍B 一夜 大貓 花獸 WEGO — 滿級經驗: — 最大等級: — 成長曲線: 等級基礎經驗升到下級 /**/
@import url(//cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.min.css); #friends th { text-align: right; } #calculate-button { width: 50%; margin: 1em; } #friends { margin: auto; } .highlighted-unit { background: purple; } 合成目標【Base】: 不指定 強化素材【Materials】:Lv數量 經常出現的朋友及路人 火水風光闇無 人類 龍 神 魔物 妖精 獸 機械 強化合成用 var newRowTemplate = '' + '' + '' + '' + ''; function fetchFriendFactors() { var friendFactors = {'': 1}; var elems = ['火','水','風','光','闇','無']; var races = ['人類','龍','神','魔物','妖精','獸','機械','強化合成用']; $.each(elems, function (_, elem) { $.each(races, function (_, race) { friendFactors[elem + race] = 1.0; }); }); $('#friends input:checked').each(function () { var kind = $(this).data('kind').split(/-/); var thisElem = kind[0]; var thisRace = kind[1]; friendFactors[thisElem + thisRace] = 1.5; $.each(elems, function (_, elem) { friendFactors[elem + thisRace] = Math.max(1.25, friendFactors[elem + thisRace]); }); $.each(races, function (_, race) { friendFactors[thisElem + race] = Math.max(1.25, friendFactors[thisElem + race]); }); }); return friendFactors; } function getMinExp(info, level) { if (level >= info.lvmax) { return info.expmax; } else { var ratio = (level - 1) / (info.lvmax - 1); return Math.ceil(info.expmax * Math.pow(ratio, info.exppow)); } } var NEXT_UNIT_KEY = 0; function Unit(unitData, unitId, level) { this.key = NEXT_UNIT_KEY++; this.unitId = unitId; if (!unitData) { return; } var info = this._info = unitData[unitId]; this._exp = getMinExp(info, level); var blendCoeff = info.blendpow * (info.blendmax - info.blendmin) / info.exppow; this._blendCoeff = blendCoeff * Math.pow(info.expmax, -info.blendpow / info.exppow); this.recompute(); }; Unit.prototype.recompute = function () { var info = this._info; if (this._exp >= info.expmax) { this._exp = info.expmax; this._level = info.lvmax; this._blend = info.blendmax; } else { var raw_ratio = Math.pow((this._exp / info.expmax), 1 / info.exppow); this._level = ((raw_ratio * (info.lvmax - 1))|0) + 1; var ratio = Math.pow((this._level - 1) / (info.lvmax - 1), info.blendpow); this._blend = info.blendmin + (((info.blendmax - info.blendmin) * ratio)|0); } var blendPotential = Math.pow(Math.max(1, this._exp), info.blendpow / info.exppow - 1); this._blendPotential = this._blendCoeff * blendPotential; }; Unit.prototype.clone = function () { var newUnit = new Unit(); newUnit.unitId = this.unitId; newUnit._info = this._info; newUnit._exp = this._exp; newUnit._level = this._level; newUnit._blend = this._blend; newUnit._blendCoeff = this._blendCoeff; newUnit._blendPotential = this._blendPotential; return newUnit; }; Unit.prototype.getBlendFactor = function (info, friendFactors) { var factor = friendFactors[info.elem + info.race] || friendFactors; if (this._info.elem == info.elem) { factor *= 1.5; } return factor; }; Unit.prototype.minimizeFriendFactor = function () { var minExp = getMinExp(this._info, this._level); var baseExp = this.target._exp; var targetInfo = this.target._info; for (var ff = 1.0; ff < this.friendFactor; ff += 0.25) { var blend = this.material.getBlend(targetInfo, ff); if (blend + baseExp >= minExp) { this.friendFactor = ff; this._exp = blend + baseExp; break; } } }; Unit.prototype.getBlend = function (info, friendFactors) { return (this.getBlendFactor(info, friendFactors) * this._blend)|0; }; Unit.prototype.getBlendPotential = function (info, friendFactors) { return this.getBlendFactor(info, friendFactors) * this._blendPotential; }; Unit.prototype.toHTMLPartsSimple = function () { var info = this._info; return [ ' Lv.', this._level, '', ]; }; Unit.prototype.toHTMLParts = function () { /* Assume `.target` and `.material` are defined! */ var selfParts = this.toHTMLPartsSimple(); var targetParts = this.target.toHTMLPartsSimple(); var materialParts = this.material.toHTMLPartsSimple(); var ffString = this.friendFactor; if (this.friendFactor == 1) { ffString = '1.0'; } var materialBlend = this._exp - this.target._exp; return [''].concat(selfParts, ' = ', targetParts, ' + ', materialParts, ' (×', ffString, ' = ', materialBlend,')'); }; function blendUnits(target, material, friendFactors) { var result = target.clone(); result.target = target; result.material = material; result.friendFactor = friendFactors[target._info.elem + target._info.race]; result._exp += material.getBlend(target._info, friendFactors); result.recompute(); return result; } function fetchMaterials(unitData) { var materials = []; $('#units-tbody').children().each(function (i, row) { var unitId = $('select.unit', row).val(); var level = $('input.level', row).val()|0; for (var j = $('input.count', row).val()|0; j > 0; -- j) { materials.push(new Unit(unitData, unitId, level)); } }); return materials; } function BlendMatrix(materials, finalTargetInfo, friendFactors) { this._finalTargetInfo = finalTargetInfo; this._friendFactors = friendFactors; this._materials = materials.map(function (x) { return [x.getBlendPotential(finalTargetInfo, friendFactors), x, -1]; }); this._frozenMaterials = []; this.sortMaterials(); } BlendMatrix.prototype.sortMaterials = function () { this._materials.sort(function (a, b) { return b[0] - a[0]; }); }; BlendMatrix.prototype.checkMergeableOneSide = function (target, material) { var finalTargetInfo = this._finalTargetInfo; var friendFactors = this._friendFactors; var targetBlend = target.getBlend(finalTargetInfo, friendFactors); var materialBlend = material.getBlend(finalTargetInfo, friendFactors); var blendThreshold = targetBlend + materialBlend; var merged = blendUnits(target, material, friendFactors); var mergedBlend = merged.getBlend(finalTargetInfo, friendFactors); if (mergedBlend = p2[2]) { return p1; } else { return p2; } }; BlendMatrix.prototype.trySurvive = function () { var warmMaterial = this._materials.pop()[1]; var bestProposal = [0, null, -1]; var bestProposalIndex = -1; for (var i = 0; i < this._frozenMaterials.length; ++ i) { var frozenMaterial = this._frozenMaterials[i]; var proposal = this.checkMergeable(warmMaterial, frozenMaterial); if (proposal) { if (proposal[2] > bestProposal[2]) { bestProposal = proposal; bestProposalIndex = i; } } } if (bestProposalIndex >= 0) { this._frozenMaterials.splice(bestProposalIndex, 1); this._materials.push(bestProposal); return null; } else { return warmMaterial; } }; BlendMatrix.prototype.compress = function () { switch (this._materials.length) { default: { var worstMaterial = this._materials.pop(); var secondMaterial = this._materials.pop(); var proposalLow = this.checkMergeable(worstMaterial[1], secondMaterial[1]); var shouldMerge; if (!proposalLow) { shouldMerge = false; } else { var bestMaterial = this._materials[this._materials.length - 1]; var proposalHigh = this.checkMergeable(secondMaterial[1], bestMaterial[1]); var proposalMid = this.checkMergeable(worstMaterial[1], bestMaterial[1]); if (!(proposalHigh || proposalMid)) { shouldMerge = true; } else { var finalTargetInfo = this._finalTargetInfo; var friendFactors = this._friendFactors; var this_ = this; function computeTotalBlend(proposal, material) { if (!proposal) { return 0; } var merge = this_.checkMergeable(proposal[1], material); if (merge) { return merge[2]; } else { return proposal[2] + material.getBlend(finalTargetInfo, friendFactors); } } var lowTotalBlend = computeTotalBlend(proposalLow, bestMaterial[1]); var highTotalBlend = computeTotalBlend(proposalHigh, worstMaterial[1]); var midTotalBlend = computeTotalBlend(proposalMid, secondMaterial[1]); if (lowTotalBlend >= midTotalBlend) { shouldMerge = (lowTotalBlend >= highTotalBlend); } else { if (midTotalBlend > highTotalBlend) { this._materials[this._materials.length - 1] = secondMaterial; proposalLow = proposalMid; shouldMerge = true; } else { shouldMerge = false; } } } } /* accept low only if high is not better. */ if (shouldMerge) { this._materials.push(proposalLow); } else { this._materials.push(secondMaterial); this._frozenMaterials.push(worstMaterial[1]); } return true; } case 2: { var material1 = this._materials.pop(); var material2 = this._materials.pop(); var proposal = this.checkMergeable(material1[1], material2[1]); if (proposal) { this._materials.push(proposal); return true; } else { this._materials.push(material2, material1); /* fallthrough */ } } case 1: { var frozenMaterial = this.trySurvive(); if (!frozenMaterial) { return true; } else { this._frozenMaterials.push(frozenMaterial); /* fallthrough */ } } case 0: return (this._materials.length); } if (!this._materials.length) { return false; } var material = this._materials.pop(); if (this._materials.length) { var anotherMaterial = this._materials.pop(); var mergeProposal1 = this.checkMergeable(material[1], anotherMaterial[1]); var mergeProposal2 = this.checkMergeable(anotherMaterial[1], material[1]); if (mergeProposal2) { this._materials.push(mergeProposal2); this.sortMaterials(); return true; } else if (mergeProposal1) { this._materials.push(mergeProposal1); this.sortMaterials(); return true; } else { this._materials.push(anotherMaterial); } } for (var i = 0; i < this._frozenMaterials.length; ++ i) { var frozenMaterial = this._frozenMaterials[i]; var mergeResult = this.checkMergeable(material[1], frozenMaterial); if (mergeResult) { this._frozenMaterials.splice(i, 1); this._materials.push(mergeResult); this.sortMaterials(); return true; } } this._frozenMaterials.push(material[1]); return true; }; BlendMatrix.prototype.renderTo = function (elem) { var htmls = []; function appendMaterial(unit, canMinimize) { if (unit.material) { if (canMinimize) { unit.minimizeFriendFactor(); } htmls.push(unit.toHTMLParts()); appendMaterial(unit.material, true); appendMaterial(unit.target, false); } } for (var i = 0; i < this._frozenMaterials.length; ++ i) { appendMaterial(this._frozenMaterials[i], true); } htmls.reverse(); for (var i = 0; i < this._frozenMaterials.length; ++ i) { htmls.push('✓ ', this._frozenMaterials[i].toHTMLPartsSimple(), ''); } var flattened = []; htmls = flattened.concat.apply(flattened, htmls); elem.innerHTML = htmls.join(''); }; var PUBLIC_MATRIX; function pageFn() { var unitData = JSON.parse($('#unit-info').text()); function nextUnitId(x) { var newId = '000' + (1 + (x|0)); newId = newId.substr(newId.length - 3); if (!unitData[newId]) { newId = '001'; } return newId; } function addRow() { var tbody = $('#units-tbody'); var newId = tbody.children().length; tbody.append($(newRowTemplate)); var newRow = tbody.children().last(); makeUnitSelector($('select.unit', newRow), unitData, function (x) { if (newId) { var prevRow = newRow.prev(); $('input.level', newRow).val($('input.level', prevRow).val()); x.select2('val', nextUnitId($('select.unit', prevRow).val())); } else { x.select2('val', '187'); } }); $('select.unit,input.level', newRow).change(function () { var level = $('input.level', newRow); level.val(Math.min(unitData[$('select.unit', newRow).val()].lvmax, level.val() >>> 0)); }); } $('#add-new-button').click(addRow); $('#calculate-button').click(function () { NEXT_UNIT_KEY = 0; var friendFactors = fetchFriendFactors(); var materials = fetchMaterials(unitData); var finalTargetInfo; if ($('#base-type-some').prop('checked')) { finalTargetInfo = unitData[$('#base-unit').val()]; } else { finalTargetInfo = {elem: '', race: ''}; } var matrix = new BlendMatrix(materials, finalTargetInfo, friendFactors); /* this is O(n^3). any faster algorithm? */ var stepCount = 0; for (; stepCount < 10000; ++ stepCount) { if (!matrix.compress()) { break; } } PUBLIC_MATRIX = matrix; if (stepCount >= 10000) { alert('找不到答案!(太複雜啦?)\n\nCannot find answer, maybe too complicated!'); } else { matrix.renderTo(document.getElementById('answer-area')); } }); addRow(); makeUnitSelector($('#base-unit'), unitData); $('#base-unit').change(function(){ $('#base-type-some').prop('checked', true); }); $('#units-tbody').on('click', '.delete-button', function () { var tr = $(this).closest('tr'); if (tr.siblings().length) { tr.remove(); } }); $('#answer-area').on('mouseenter mouseleave', '.blend-unit', function() { var unitKey = this.getAttribute('data-unit-key'); $('.blend-unit[data-unit-key=' + unitKey + ']').toggleClass('highlighted-unit'); }); }
副本
副本列表
戰鬥系統
陷阱系統
Unit索引
Unit一覽表
001–887
888-1754
1755+
屬性索引
水屬
風屬
火屬
光屬
闇屬
無屬
稀有度索引
★3
★6
★1
★2
★4
★5
種族索引
人類
獸
龍
機械
魔物
妖精
神
技能分類
隊長技能
主動技能
普通技能
被動技能
敵人技能
副本資訊
故事副本
都之系列
監獄系列
塔之系列
樓閣系列
休息室系列
研究所系列
遊園地系列
進化神殿
烈火殿ヘパイストス
流水殿ポセイドン
旋風殿ヘルメス
閃光殿アルテミス
常闇殿ハーデス
絶無殿ヘスティア
賭場副本
活動副本
單週副本
合作副本
降臨副本
FANDOM
游戏
电影
电视
wiki
探索wiki
社区中心
创建wiki
尚未注册?
注册
登录
Advertisement
登录
注册
Divine Gate 維基
4,441
个页面
探索
首页
讨论板
所有页面
社区页
交互式地图
最新博文
遊戲知識
工具
Divine Gate Wikia APK
Divine Gate Tool
體力計算
模擬強化合成
模擬刮卡
隊伍組合
活動時間表
基礎資料
版本更新
帳號升級能力表
任務
抽獎資訊
數據轉移系統
棋子掉落機制
亂入
心得
遊戲開局
朋友系統
遊戲秘技
速刷首抽秘技
光闇無主角開局
無視移動系陷阱
關於所有陷阱的小Bug
Unit相關
經驗值類型: Type2 (Lv 10) Type2 (Lv 15) Type2 (Lv 25) Type2 (Lv 30) Type2 (Lv 50) Type2 (Lv 70) Type3 (Lv 5) Type3 (Lv 10) Type3 (Lv 15) Type3 (Lv 25) Type3 (Lv 30) Type3 (Lv 35) Type3 (Lv 50) Type3 (Lv 70) Type5 (Lv 50) Type5 (Lv 99) 不能升級 合作小怪 Type4 第三世代A 第三世代B 合作刮卡 巨人 Type3e 妖尾II 御坂妹 化合龍A 化合龍B 一夜 大貓 花獸 WEGO — 滿級經驗: — 最大等級: — 成長曲線: 等級基礎經驗升到下級 /**/
@import url(//cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.min.css); #friends th { text-align: right; } #calculate-button { width: 50%; margin: 1em; } #friends { margin: auto; } .highlighted-unit { background: purple; } 合成目標【Base】: 不指定 強化素材【Materials】:Lv數量 經常出現的朋友及路人 火水風光闇無 人類 龍 神 魔物 妖精 獸 機械 強化合成用 var newRowTemplate = '' + '' + '' + '' + ''; function fetchFriendFactors() { var friendFactors = {'': 1}; var elems = ['火','水','風','光','闇','無']; var races = ['人類','龍','神','魔物','妖精','獸','機械','強化合成用']; $.each(elems, function (_, elem) { $.each(races, function (_, race) { friendFactors[elem + race] = 1.0; }); }); $('#friends input:checked').each(function () { var kind = $(this).data('kind').split(/-/); var thisElem = kind[0]; var thisRace = kind[1]; friendFactors[thisElem + thisRace] = 1.5; $.each(elems, function (_, elem) { friendFactors[elem + thisRace] = Math.max(1.25, friendFactors[elem + thisRace]); }); $.each(races, function (_, race) { friendFactors[thisElem + race] = Math.max(1.25, friendFactors[thisElem + race]); }); }); return friendFactors; } function getMinExp(info, level) { if (level >= info.lvmax) { return info.expmax; } else { var ratio = (level - 1) / (info.lvmax - 1); return Math.ceil(info.expmax * Math.pow(ratio, info.exppow)); } } var NEXT_UNIT_KEY = 0; function Unit(unitData, unitId, level) { this.key = NEXT_UNIT_KEY++; this.unitId = unitId; if (!unitData) { return; } var info = this._info = unitData[unitId]; this._exp = getMinExp(info, level); var blendCoeff = info.blendpow * (info.blendmax - info.blendmin) / info.exppow; this._blendCoeff = blendCoeff * Math.pow(info.expmax, -info.blendpow / info.exppow); this.recompute(); }; Unit.prototype.recompute = function () { var info = this._info; if (this._exp >= info.expmax) { this._exp = info.expmax; this._level = info.lvmax; this._blend = info.blendmax; } else { var raw_ratio = Math.pow((this._exp / info.expmax), 1 / info.exppow); this._level = ((raw_ratio * (info.lvmax - 1))|0) + 1; var ratio = Math.pow((this._level - 1) / (info.lvmax - 1), info.blendpow); this._blend = info.blendmin + (((info.blendmax - info.blendmin) * ratio)|0); } var blendPotential = Math.pow(Math.max(1, this._exp), info.blendpow / info.exppow - 1); this._blendPotential = this._blendCoeff * blendPotential; }; Unit.prototype.clone = function () { var newUnit = new Unit(); newUnit.unitId = this.unitId; newUnit._info = this._info; newUnit._exp = this._exp; newUnit._level = this._level; newUnit._blend = this._blend; newUnit._blendCoeff = this._blendCoeff; newUnit._blendPotential = this._blendPotential; return newUnit; }; Unit.prototype.getBlendFactor = function (info, friendFactors) { var factor = friendFactors[info.elem + info.race] || friendFactors; if (this._info.elem == info.elem) { factor *= 1.5; } return factor; }; Unit.prototype.minimizeFriendFactor = function () { var minExp = getMinExp(this._info, this._level); var baseExp = this.target._exp; var targetInfo = this.target._info; for (var ff = 1.0; ff < this.friendFactor; ff += 0.25) { var blend = this.material.getBlend(targetInfo, ff); if (blend + baseExp >= minExp) { this.friendFactor = ff; this._exp = blend + baseExp; break; } } }; Unit.prototype.getBlend = function (info, friendFactors) { return (this.getBlendFactor(info, friendFactors) * this._blend)|0; }; Unit.prototype.getBlendPotential = function (info, friendFactors) { return this.getBlendFactor(info, friendFactors) * this._blendPotential; }; Unit.prototype.toHTMLPartsSimple = function () { var info = this._info; return [ ' Lv.', this._level, '', ]; }; Unit.prototype.toHTMLParts = function () { /* Assume `.target` and `.material` are defined! */ var selfParts = this.toHTMLPartsSimple(); var targetParts = this.target.toHTMLPartsSimple(); var materialParts = this.material.toHTMLPartsSimple(); var ffString = this.friendFactor; if (this.friendFactor == 1) { ffString = '1.0'; } var materialBlend = this._exp - this.target._exp; return [''].concat(selfParts, ' = ', targetParts, ' + ', materialParts, ' (×', ffString, ' = ', materialBlend,')'); }; function blendUnits(target, material, friendFactors) { var result = target.clone(); result.target = target; result.material = material; result.friendFactor = friendFactors[target._info.elem + target._info.race]; result._exp += material.getBlend(target._info, friendFactors); result.recompute(); return result; } function fetchMaterials(unitData) { var materials = []; $('#units-tbody').children().each(function (i, row) { var unitId = $('select.unit', row).val(); var level = $('input.level', row).val()|0; for (var j = $('input.count', row).val()|0; j > 0; -- j) { materials.push(new Unit(unitData, unitId, level)); } }); return materials; } function BlendMatrix(materials, finalTargetInfo, friendFactors) { this._finalTargetInfo = finalTargetInfo; this._friendFactors = friendFactors; this._materials = materials.map(function (x) { return [x.getBlendPotential(finalTargetInfo, friendFactors), x, -1]; }); this._frozenMaterials = []; this.sortMaterials(); } BlendMatrix.prototype.sortMaterials = function () { this._materials.sort(function (a, b) { return b[0] - a[0]; }); }; BlendMatrix.prototype.checkMergeableOneSide = function (target, material) { var finalTargetInfo = this._finalTargetInfo; var friendFactors = this._friendFactors; var targetBlend = target.getBlend(finalTargetInfo, friendFactors); var materialBlend = material.getBlend(finalTargetInfo, friendFactors); var blendThreshold = targetBlend + materialBlend; var merged = blendUnits(target, material, friendFactors); var mergedBlend = merged.getBlend(finalTargetInfo, friendFactors); if (mergedBlend = p2[2]) { return p1; } else { return p2; } }; BlendMatrix.prototype.trySurvive = function () { var warmMaterial = this._materials.pop()[1]; var bestProposal = [0, null, -1]; var bestProposalIndex = -1; for (var i = 0; i < this._frozenMaterials.length; ++ i) { var frozenMaterial = this._frozenMaterials[i]; var proposal = this.checkMergeable(warmMaterial, frozenMaterial); if (proposal) { if (proposal[2] > bestProposal[2]) { bestProposal = proposal; bestProposalIndex = i; } } } if (bestProposalIndex >= 0) { this._frozenMaterials.splice(bestProposalIndex, 1); this._materials.push(bestProposal); return null; } else { return warmMaterial; } }; BlendMatrix.prototype.compress = function () { switch (this._materials.length) { default: { var worstMaterial = this._materials.pop(); var secondMaterial = this._materials.pop(); var proposalLow = this.checkMergeable(worstMaterial[1], secondMaterial[1]); var shouldMerge; if (!proposalLow) { shouldMerge = false; } else { var bestMaterial = this._materials[this._materials.length - 1]; var proposalHigh = this.checkMergeable(secondMaterial[1], bestMaterial[1]); var proposalMid = this.checkMergeable(worstMaterial[1], bestMaterial[1]); if (!(proposalHigh || proposalMid)) { shouldMerge = true; } else { var finalTargetInfo = this._finalTargetInfo; var friendFactors = this._friendFactors; var this_ = this; function computeTotalBlend(proposal, material) { if (!proposal) { return 0; } var merge = this_.checkMergeable(proposal[1], material); if (merge) { return merge[2]; } else { return proposal[2] + material.getBlend(finalTargetInfo, friendFactors); } } var lowTotalBlend = computeTotalBlend(proposalLow, bestMaterial[1]); var highTotalBlend = computeTotalBlend(proposalHigh, worstMaterial[1]); var midTotalBlend = computeTotalBlend(proposalMid, secondMaterial[1]); if (lowTotalBlend >= midTotalBlend) { shouldMerge = (lowTotalBlend >= highTotalBlend); } else { if (midTotalBlend > highTotalBlend) { this._materials[this._materials.length - 1] = secondMaterial; proposalLow = proposalMid; shouldMerge = true; } else { shouldMerge = false; } } } } /* accept low only if high is not better. */ if (shouldMerge) { this._materials.push(proposalLow); } else { this._materials.push(secondMaterial); this._frozenMaterials.push(worstMaterial[1]); } return true; } case 2: { var material1 = this._materials.pop(); var material2 = this._materials.pop(); var proposal = this.checkMergeable(material1[1], material2[1]); if (proposal) { this._materials.push(proposal); return true; } else { this._materials.push(material2, material1); /* fallthrough */ } } case 1: { var frozenMaterial = this.trySurvive(); if (!frozenMaterial) { return true; } else { this._frozenMaterials.push(frozenMaterial); /* fallthrough */ } } case 0: return (this._materials.length); } if (!this._materials.length) { return false; } var material = this._materials.pop(); if (this._materials.length) { var anotherMaterial = this._materials.pop(); var mergeProposal1 = this.checkMergeable(material[1], anotherMaterial[1]); var mergeProposal2 = this.checkMergeable(anotherMaterial[1], material[1]); if (mergeProposal2) { this._materials.push(mergeProposal2); this.sortMaterials(); return true; } else if (mergeProposal1) { this._materials.push(mergeProposal1); this.sortMaterials(); return true; } else { this._materials.push(anotherMaterial); } } for (var i = 0; i < this._frozenMaterials.length; ++ i) { var frozenMaterial = this._frozenMaterials[i]; var mergeResult = this.checkMergeable(material[1], frozenMaterial); if (mergeResult) { this._frozenMaterials.splice(i, 1); this._materials.push(mergeResult); this.sortMaterials(); return true; } } this._frozenMaterials.push(material[1]); return true; }; BlendMatrix.prototype.renderTo = function (elem) { var htmls = []; function appendMaterial(unit, canMinimize) { if (unit.material) { if (canMinimize) { unit.minimizeFriendFactor(); } htmls.push(unit.toHTMLParts()); appendMaterial(unit.material, true); appendMaterial(unit.target, false); } } for (var i = 0; i < this._frozenMaterials.length; ++ i) { appendMaterial(this._frozenMaterials[i], true); } htmls.reverse(); for (var i = 0; i < this._frozenMaterials.length; ++ i) { htmls.push('✓ ', this._frozenMaterials[i].toHTMLPartsSimple(), ''); } var flattened = []; htmls = flattened.concat.apply(flattened, htmls); elem.innerHTML = htmls.join(''); }; var PUBLIC_MATRIX; function pageFn() { var unitData = JSON.parse($('#unit-info').text()); function nextUnitId(x) { var newId = '000' + (1 + (x|0)); newId = newId.substr(newId.length - 3); if (!unitData[newId]) { newId = '001'; } return newId; } function addRow() { var tbody = $('#units-tbody'); var newId = tbody.children().length; tbody.append($(newRowTemplate)); var newRow = tbody.children().last(); makeUnitSelector($('select.unit', newRow), unitData, function (x) { if (newId) { var prevRow = newRow.prev(); $('input.level', newRow).val($('input.level', prevRow).val()); x.select2('val', nextUnitId($('select.unit', prevRow).val())); } else { x.select2('val', '187'); } }); $('select.unit,input.level', newRow).change(function () { var level = $('input.level', newRow); level.val(Math.min(unitData[$('select.unit', newRow).val()].lvmax, level.val() >>> 0)); }); } $('#add-new-button').click(addRow); $('#calculate-button').click(function () { NEXT_UNIT_KEY = 0; var friendFactors = fetchFriendFactors(); var materials = fetchMaterials(unitData); var finalTargetInfo; if ($('#base-type-some').prop('checked')) { finalTargetInfo = unitData[$('#base-unit').val()]; } else { finalTargetInfo = {elem: '', race: ''}; } var matrix = new BlendMatrix(materials, finalTargetInfo, friendFactors); /* this is O(n^3). any faster algorithm? */ var stepCount = 0; for (; stepCount < 10000; ++ stepCount) { if (!matrix.compress()) { break; } } PUBLIC_MATRIX = matrix; if (stepCount >= 10000) { alert('找不到答案!(太複雜啦?)\n\nCannot find answer, maybe too complicated!'); } else { matrix.renderTo(document.getElementById('answer-area')); } }); addRow(); makeUnitSelector($('#base-unit'), unitData); $('#base-unit').change(function(){ $('#base-type-some').prop('checked', true); }); $('#units-tbody').on('click', '.delete-button', function () { var tr = $(this).closest('tr'); if (tr.siblings().length) { tr.remove(); } }); $('#answer-area').on('mouseenter mouseleave', '.blend-unit', function() { var unitKey = this.getAttribute('data-unit-key'); $('.blend-unit[data-unit-key=' + unitKey + ']').toggleClass('highlighted-unit'); }); }
副本
副本列表
戰鬥系統
陷阱系統
Unit索引
Unit一覽表
001–887
888-1754
1755+
屬性索引
水屬
風屬
火屬
光屬
闇屬
無屬
稀有度索引
★3
★6
★1
★2
★4
★5
種族索引
人類
獸
龍
機械
魔物
妖精
神
技能分類
隊長技能
主動技能
普通技能
被動技能
敵人技能
副本資訊
故事副本
都之系列
監獄系列
塔之系列
樓閣系列
休息室系列
研究所系列
遊園地系列
進化神殿
烈火殿ヘパイストス
流水殿ポセイドン
旋風殿ヘルメス
閃光殿アルテミス
常闇殿ハーデス
絶無殿ヘスティア
賭場副本
活動副本
單週副本
合作副本
降臨副本
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
本地网站地图
上一页(ID:121 コンコン)
ID:1533 ハイカラフルSエッグ
ID:1534 キングカラフルSエッグ
ID:1535 フィアヒューマノウン
ID:1536 アクアヒューマノウン
ID:1537 ウィンドヒューマノウン
ID:1538 ライトヒューマノウン
ID:1539 ダークヒューマノウン
ID:153 シャドウ
ID:1540 ノンヒューマノウン
ID:1541 フィアドラゴノウン
ID:1542 アクアドラゴノウン
ID:1543 ウィンドドラゴノウン
ID:1544 ライトドラゴノウン
ID:1545 ダークドラゴノウン
ID:1546 ノンドラゴノウン
ID:1547 フィアゴッドノウン
ID:1548 アクアゴッドノウン
ID:1549 ウィンドゴッドノウン
ID:154 闇精王シャドウ
ID:1550 ライトゴッドノウン
ID:1551 ダークゴッドノウン
ID:1552 ノンゴッドノウン
ID:1553 フィアデモノウン
ID:1554 アクアデモノウン
ID:1555 ウィンドデモノウン
ID:1556 ライトデモノウン
ID:1557 ダークデモノウン
ID:1558 ノンデモノウン
ID:1559 フィアスピリノウン
ID:155 ゼロ
ID:1560 アクアスピリノウン
ID:1561 ウィンドスピリノウン
ID:1562 ライトスピリノウン
ID:1563 ダークスピリノウン
ID:1564 ノンスピリノウン
ID:1565 フィアビーストノウン
ID:1566 アクアビーストノウン
ID:1567 ウィンドビーストノウン
ID:1568 ライトビーストノウン
ID:1569 ダークビーストノウン
ID:156 無精王ゼロ
ID:1570 ノンビーストノウン
ID:1571 フィアマシナノウン
ID:1572 アクアマシナノウン
ID:1573 ウィンドマシナノウン
ID:1574 ライトマシナノウン
ID:1575 ダークマシナノウン
ID:1576 ノンマシナノウン
ID:1577 フィアヒューマメガノウン
ID:1578 アクアヒューマメガノウン
ID:1579 ウィンドヒューマメガノウン
ID:157 ヒノゲコー
ID:1580 ライトヒューマメガノウン
ID:1581 ダークヒューマメガノウン
ID:1582 ノンヒューマメガノウン
ID:1583 フィアドラゴメガノウン
ID:1584 アクアドラゴメガノウン
ID:1585 ウィンドドラゴメガノウン
ID:1586 ライトドラゴメガノウン
ID:1587 ダークドラゴメガノウン
ID:1588 ノンドラゴメガノウン
ID:1589 フィアゴッドメガノウン
ID:158 ミズゲコー
ID:1590 アクアゴッドメガノウン
ID:1591 ウィンドゴッドメガノウン
ID:1592 ライトゴッドメガノウン
ID:1593 ダークゴッドメガノウン
ID:1594 ノンゴッドメガノウン
ID:1595 フィアデモメガノウン
ID:1596 アクアデモメガノウン
ID:1597 ウィンドデモメガノウン
ID:1598 ライトデモメガノウン
ID:1599 ダークデモメガノウン
ID:159 カゼゲコー
ID:1600 ノンデモメガノウン
ID:1601 フィアスピリメガノウン
ID:1602 アクアスピリメガノウン
ID:1603 ウィンドスピリメガノウン
ID:1604 ライトスピリメガノウン
ID:1605 ダークスピリメガノウン
ID:1606 ノンスピリメガノウン
ID:1607 フィアビーストメガノウン
ID:1608 アクアビーストメガノウン
ID:1609 ウィンドビーストメガノウン
ID:160 ピカゲコー
ID:1610 ライトビーストメガノウン
ID:1611 ダークビーストメガノウン
ID:1612 ノンビーストメガノウン
ID:1613 フィアマシナメガノウン
ID:1614 アクアマシナメガノウン
ID:1615 ウィンドマシナメガノウン
ID:1616 ライトマシナメガノウン
ID:1617 ダークマシナメガノウン
ID:1618 ノンマシナメガノウン
ID:1619 フィアヒューマギガノウン
ID:161 ヤミゲコー
ID:1620 フィアヒューマテラノウン
ID:1621 アクアヒューマギガノウン
ID:1622 アクアヒューマテラノウン
ID:1623 ウィンドヒューマギガノウン
ID:1624 ウィンドヒューマテラノウン
ID:1625 ライトヒューマギガノウン
ID:1626 ライトヒューマテラノウン
ID:1627 ダークヒューマギガノウン
ID:1628 ダークヒューマテラノウン
ID:1629 ノンヒューマギガノウン
ID:162 ムゲコー
ID:1630 ノンヒューマテラノウン
ID:1631 フィアドラゴギガノウン
ID:1632 フィアドラゴテラノウン
ID:1633 アクアドラゴギガノウン
ID:1634 アクアドラゴテラノウン
ID:1635 ウィンドドラゴギガノウン
ID:1636 ウィンドドラゴテラノウン
ID:1637 ライトドラゴギガノウン
ID:1638 ライトドラゴテラノウン
ID:1639 ダークドラゴギガノウン
ID:163 ヒノモッフル
ID:1640 ダークドラゴテラノウン
ID:1641 ノンドラゴギガノウン
ID:1642 ノンドラゴテラノウン
ID:1643 フィアゴッドギガノウン
ID:1644 フィアゴッドテラノウン
ID:1645 アクアゴッドギガノウン
ID:1646 アクアゴッドテラノウン
ID:1647 ウィンドゴッドギガノウン
ID:1648 ウィンドゴッドテラノウン
ID:1649 ライトゴッドギガノウン
ID:164 ミズモッフル
ID:1650 ライトゴッドテラノウン
ID:1651 ダークゴッドギガノウン
ID:1652 ダークゴッドテラノウン
ID:1653 ノンゴッドギガノウン
ID:1654 ノンゴッドテラノウン
ID:1655 フィアデモギガノウン
ID:1656 フィアデモテラノウン
ID:1657 アクアデモギガノウン
ID:1658 アクアデモテラノウン
ID:1659 ウィンドデモギガノウン
ID:165 カゼモッフル
ID:1660 ウィンドデモテラノウン
ID:1661 ライトデモギガノウン
ID:1662 ライトデモテラノウン
ID:1663 ダークデモギガノウン
ID:1664 ダークデモテラノウン
ID:1665 ノンデモギガノウン
ID:1666 ノンデモテラノウン
ID:1667 フィアスピリギガノウン
ID:1668 フィアスピリテラノウン
ID:1669 アクアスピリギガノウン
ID:166 ピカモッフル
ID:1670 アクアスピリテラノウン
ID:1671 ウィンドスピリギガノウン
ID:1672 ウィンドスピリテラノウン
ID:1673 ライトスピリギガノウン
ID:1674 ライトスピリテラノウン
ID:1675 ダークスピリギガノウン
ID:1676 ダークスピリテラノウン
ID:1677 ノンスピリギガノウン
ID:1678 ノンスピリテラノウン
ID:1679 フィアビーストギガノウン
ID:167 ヤミモッフル
ID:1680 フィアビーストテラノウン
ID:1681 アクアビーストギガノウン
ID:1682 アクアビーストテラノウン
ID:1683 ウィンドビーストギガノウン
ID:1684 ウィンドビーストテラノウン
ID:1685 ライトビーストギガノウン
ID:1686 ライトビーストテラノウン
ID:1687 ダークビーストギガノウン
ID:1688 ダークビーストテラノウン
ID:1689 ノンビーストギガノウン
ID:168 ムモッフル
ID:1690 ノンビーストテラノウン
ID:1691 フィアマシナギガノウン
ID:1692 フィアマシナテラノウン
ID:1693 アクアマシナギガノウン
ID:1694 アクアマシナテラノウン
ID:1695 ウィンドマシナギガノウン
ID:1696 ウィンドマシナテラノウン
ID:1697 ライトマシナギガノウン
ID:1698 ライトマシナテラノウン
ID:1699 ダークマシナギガノウン
ID:169 ヒノロボタン
ID:1700 ダークマシナテラノウン
ID:1701 ノンマシナギガノウン
ID:1702 ノンマシナテラノウン
ID:1703 魔法ネコ:ツグミャー
ID:1704 アマデウス紅莉栖:炎の精霊
ID:1705 アマデウス紅莉栖:炎精王
ID:1706 椎名まゆり:水の精霊
ID:1707 椎名まゆり:水精王
ID:1708 阿万音鈴羽:風の精霊
ID:1709 阿万音鈴羽:風精王
ID:170 ミズロボタン
ID:1710 フェイリス:光の精霊
ID:1711 フェイリス:光精王
ID:1712 桐生萌郁:闇の精霊
ID:1713 桐生萌郁:闇精王
ID:1714 漆原るか:無の精霊
ID:1715 漆原るか:無精王
ID:1716 比屋定真帆
ID:1717 岡部倫太郎:堕闇卿
ID:1718 橋田至:悪戯神
ID:1719 アマデウス紅莉栖ぼん
ID:171 カゼロボタン
ID:1720 まゆりぼん
ID:1721 鈴羽ぼん
ID:1722 フェイリスぼん
ID:1723 萌郁ぼん
ID:1724 るかぼん
ID:1725 キョーソ☆ディバイン
ID:1726 ハッター
ID:1727 堕精魔ハッター
ID:1728 ブラウン=ガレス
ID:1729 ヒルダ=ケイ
ID:172 ピカロボタン
ID:1730 ローガン=パロミデス
ID:1731 フェリス=ガウェイン
ID:1732 ロア=ユーウェイン
ID:1733 ラン=パーシヴァル
ID:1734 アカネ:幼少期
ID:1735 アオト:幼少期
ID:1736 ミドリ:幼少期
ID:1737 ヒカリ:幼少期
ID:1738 ユカリ:幼少期
ID:173 ヤミロボタン
ID:1740 司波達也:堕王
ID:1741 エギュン
ID:1742 西魔王エギュン
ID:1743 グライフ
ID:1744 天神獣グライフ
ID:1745 アームストロング少佐
ID:1746 豪腕の錬金術師:アレックス
ID:1747 ランファン
ID:1748 機械鎧:ランファン
ID:1749 暴食:グラトニー
ID:174 ムロボタン
ID:1750 色欲:ラスト
ID:1751 嫉妬:エンヴィー
ID:1752 強欲:グリード
ID:1753 傲慢:プライド
ID:1754 傷の男
ID:1755 ヒノペルソナ
ID:1756 ミズペルソナ
ID:1757 カゼペルソナ
ID:1758 ピカペルソナ
ID:1759 ヤミペルソナ
ID:175 ヒノテルテル
ID:1760 ムムペルソナ
ID:1761 ヒノモックン
ID:1762 ミズモックン
ID:1763 カゼモックン
ID:1764 ピカモックン
ID:1765 ヤミモックン
ID:1766 ムムモックン
ID:1767 ヒューマリンカー
ID:1768 虹のヒューマリンカー
ID:1769 ドラゴリンカー
ID:176 ミズテルテル
ID:1770 虹のドラゴリンカー
ID:1771 スピリリンカー
ID:1772 虹のスピリリンカー
ID:1773 デモンリンカー
ID:1774 虹のデモンリンカー
ID:1775 マシナリンカー
ID:1776 虹のマシナリンカー
ID:1777 ビーストリンカー
ID:1778 虹のビーストリンカー
ID:1779 ゴッドリンカー
ID:177 カゼテルテル
ID:1780 虹のゴッドリンカー
ID:1781 悲戯者シェイクスピア
ID:1782 あの日の私
ID:1783 あの日の僕ら
ID:1784 まどか:狂騒獣
ID:1785 ほむら:闇愛精
ID:1786 百江なぎさ
ID:1787 雪の美女エリザベート
ID:1788 聖無才メビウス
ID:1789 ヘイヴィア
ID:178 ピカテルテル
ID:1790 貴族の上等兵:ヘイヴィア
ID:1791 ミリンダ
ID:1792 お姫様のエリート:ミリンダ
ID:1793 レンディ
ID:1794 情報同盟の中佐:レンディ
ID:1795 クウェンサー
ID:1796 派遣留学生:クウェンサー
ID:1797 フローレイティア
ID:1798 貴族少佐:フローレイティア
ID:1799 おほほ
ID:179 ヤミテルテル
ID:1800 情報同盟のエリート:おほほ
ID:1801 ミリンダ:正装
ID:1802 ベイビーマグナム
ID:1803 ヘイヴィアぼん
ID:1804 ミリンダぼん
ID:1805 レンディぼん
ID:1806 クウェンサーぼん
ID:1807 フローレイティアぼん
ID:1808 おほほぼん
ID:1809 聖神アーサー
ID:180 ムテルテル
ID:1810 大いなる絶望
ID:1811 量産型ヨトゥン
ID:1812 量産型ヨトゥン:ゼロ
ID:1813 レプリカ:ホムラ
ID:1814 レプリカ:マブイ
ID:1815 レプリカ:カグラ
ID:1816 レプリカ:ナユタ
ID:1817 レプリカ:オロチ
ID:1818 レプリカ:ミヤビ
ID:1819 フォルテ
ID:181 ヒノドラグルミ
ID:1820 炎奏徒フォルテ
ID:1821 始祖リリン
ID:1823 ゲーマー:七海千秋
ID:1824 ???:日向創
ID:1825 アルカード・ロア
ID:1826 マイン
ID:1827 浪漫砲台:マイン
ID:1828 エスデス
ID:1829 魔神顕現:エスデス
ID:182 ミズドラグルミ
ID:1830 チェルシー
ID:1831 変身自在:チェルシー
ID:1832 レオーネ
ID:1833 百獣王化:レオーネ
ID:1834 アカメ
ID:1835 一斬必殺:アカメ
ID:1836 タツミ
ID:1837 悪鬼纏身:タツミ
ID:1838 桐一文字:アカメ
ID:1839 死者行軍:クロメ
ID:183 カゼドラグルミ
ID:1840 マインぼん
ID:1841 エスデスぼん
ID:1842 チェルシーぼん
ID:1843 レオーネぼん
ID:1844 アカメぼん
ID:1845 タツミぼん
ID:1846 イッテツ
ID:1847 炎杖刀イッテツ
ID:1848 ワトソン
上一页(ID:121 コンコン)
Advertisement
Follow on IG
TikTok
Join Fan Lab