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
尚未注册?
注册
登录
FANDOM
Explore
Current 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
種族索引
人類
獸
龍
機械
魔物
妖精
神
技能分類
隊長技能
主動技能
普通技能
被動技能
敵人技能
副本資訊
故事副本
都之系列
監獄系列
塔之系列
樓閣系列
休息室系列
研究所系列
遊園地系列
進化神殿
烈火殿ヘパイストス
流水殿ポセイドン
旋風殿ヘルメス
閃光殿アルテミス
常闇殿ハーデス
絶無殿ヘスティア
賭場副本
活動副本
單週副本
合作副本
降臨副本
分类:
屬性索引
、
人類
、
水屬
、
以及
其他6个分类
★5
主動技能/回復
魔物
妖精
神
獸
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
光屬
分类页面
编辑
可视化编辑器
查看历史
讨论 (0)
光屬性Unit一覽
[
|
]
热门页面
ID:319 ラクサス
ID:1661 ライトデモギガノウン
所有项目 (294)
#
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他
I
ID:056 ツヤイリウム
ID:854 ハコの魔女
★
Category:★3
Category:★5
【
ID:1226 【聖学】アーサー
あ
ID:1783 あの日の僕ら
じ
ID:1105 じぶたん
ア
ID:211 アクスアーム
ID:212 アクスアーム:セカンド
ID:1374 アスタルテ:光
ID:803 アテナ
ID:457 アン・パント・ケットバス
ID:295 アーサー
イ
ID:867 イザヨイ
ID:868 イザヨイ:ニシキ
ID:830 インソムニア
ID:1159 イヴァン
ウ
ID:151 ウィルオウィスプ
エ
ID:1473 エドぼん
ID:1461 エドワード・エルリック
オ
ID:749 オリジン
ID:750 オリジン:マキナ
ID:1201 オリナ=ラモラック
ID:767 オーディン
カ
ID:1119 カイザーゴールドエッグ
ID:396 カタリナ
ID:350 カルネアデス
ID:1256 カルネアデス:桐崎千棘
ガ
ID:1197 ガストレア:光
ID:127 ガルル
キ
ID:079 キャット・ピー
ID:850 キュゥべえ:黄
ID:1725 キョーソ☆ディバイン
ID:198 キングゴールドエッグ
ID:1525 キングゴールドSエッグ
ク
ID:251 クッキャー
ID:410 クリスタ
ID:411 クリスタ・レンズ
ID:1010 クロウリー
ID:1422 クロウリー:サマー
ID:1234 クロード
グ
ID:038 グング
ID:039 グングニル
ID:040 グングニル:プロト
ID:037 グーン
ケ
ID:080 ケット・ピー
ID:456 ケリ姫
ID:462 ケリ姫:聖服
ID:463 ケリ姫:聖装
ID:128 ケルベロス
コ
ID:503 コウガニア
ID:544 コガネ
ID:489 コドラチョコバー
ゴ
ID:402 ゴルドラド
ID:196 ゴールドエッグ
ID:1523 ゴールドSエッグ
サ
ID:814 サイン
シ
ID:1153 シャイニィ
ID:056 シャイリウム
ID:988 シャルロット
ID:1001 シャルロットぼん
ID:989 シャルロット:RRCⅡ
ID:265 シンデレラ
ジ
ID:1094 ジブリール
ID:683 ジュリエット
ス
ID:709 ススキ
ID:620 スティング
ID:1510 スピカ
セ
ID:700 セイカシャイリウム
ID:699 セイカピカリウム
ID:1035 セイバー
ID:1055 セイバーぼん
ID:224 センコウニテラサレシモノ
ソ
ID:1332 ソガ
テ
ID:533 ティターニア
ID:1182 ティナ・スプラウト
ID:882 テンニ
デ
ID:389 ディバインネッキー
ID:663 ディーバ:誘宵美九
ID:252 デッドクッキャー
ト
ID:1169 トニング
ID:797 トランペ
ド
ID:403 ドス:ゴルドラド
ID:490 ドラチョコバー
ID:579 ドローン:シグナルイエロー
ニ
ID:692 ニャオ・ピー
ハ
ID:197 ハイゴールドエッグ
ID:1524 ハイゴールドSエッグ
ID:599 ハールレム
パ
ID:695 パンドラ
ヒ
ID:013 ヒカリ
ID:1340 ヒカリ:WEGO
ID:1418 ヒカリ:サマー
ID:927 ヒカリ:ハロウィン
ID:1737 ヒカリ:幼少期
ID:363 ヒマワリ
ピ
ID:160 ピカゲコー
ID:178 ピカテルテル
ID:184 ピカドラグルミ
ID:1758 ピカペルソナ
ID:067 ピカポックル
ID:068 ピカポックルン
ID:1764 ピカモックン
ID:166 ピカモッフル
ID:055 ピカリウム
ID:172 ピカロボタン
ID:1144 ピクシー:タイプ光
フ
ID:139 ファーブニル
ID:140 ファーブニル:バースト
ID:1020 フィア
ID:1021 フィア:E03
ID:921 フェイザ
ID:234 フェイリス
ID:1722 フェイリスぼん
ID:233 フェイリス・ニャンニャン
ID:1710 フェイリス:光の精霊
ID:1711 フェイリス:光精王
ID:1183 フクロウの因子:ティナ
プ
ID:115 プチキューレ
ID:362 プチワリ
ID:328 プルー
ベ
ID:1379 ベオウルフ
ボ
ID:978 ボーム
ID:1295 ボーム:モノクマ
マ
ID:1352 マジカルゴリラ千棘
ミ
ID:1267 ミレン=トリスタン
メ
ID:300 メガピカポックルン
ID:247 メタルうーぱ:ゴールド
ユ
ID:611 ユキノ
ヨ
ID:1405 ヨトゥン:零号機
ラ
ID:633 ライキリ
ID:735 ライキリ:鏡音レン
ID:429 ライコウ
ID:430 ライコウ:ナユタ
ID:747 ライコウ:鏡音リン
ID:786 ライトイーグル
ID:103 ライトエッジ
ID:1649 ライトゴッドギガノウン
ID:1650 ライトゴッドテラノウン
ID:1550 ライトゴッドノウン
ID:1592 ライトゴッドメガノウン
ID:1673 ライトスピリギガノウン
ID:1674 ライトスピリテラノウン
ID:1562 ライトスピリノウン
ID:1604 ライトスピリメガノウン
ID:1661 ライトデモギガノウン
ID:1662 ライトデモテラノウン
ID:1556 ライトデモノウン
ID:1598 ライトデモメガノウン
ID:1637 ライトドラゴギガノウン
ID:1638 ライトドラゴテラノウン
ID:1544 ライトドラゴノウン
ID:1586 ライトドラゴメガノウン
ID:785 ライトバレット
ID:1625 ライトヒューマギガノウン
ID:1626 ライトヒューマテラノウン
ID:1538 ライトヒューマノウン
ID:1580 ライトヒューマメガノウン
ID:1685 ライトビーストギガノウン
ID:1686 ライトビーストテラノウン
ID:1568 ライトビーストノウン
ID:1610 ライトビーストメガノウン
ID:104 ライトブレード
ID:1697 ライトマシナギガノウン
ID:1698 ライトマシナテラノウン
ID:1574 ライトマシナノウン
ID:1616 ライトマシナメガノウン
ID:091 ライトロン
ID:092 ライトロン:ツヴァイ
ID:440 ライトロン:ドライ
ID:319 ラクサス
ID:588 ラブー
ID:289 ラモラック
ID:277 ランスロット
リ
ID:740 リンぼん
ル
ID:960 ルクス
ID:309 ルーシィ
レ
ID:1385 レイ
ID:1410 レイぼん
ID:1395 レイ:クロウリー
ID:479 レオン
ID:325 レクター
ID:512 レベル5・御坂美琴
ID:741 レンぼん
ロ
ID:972 ロビン
ワ
ID:116 ワルキューレ
ヴ
ID:1265 ヴラド
一
ID:623 一夜
七
ID:1488 七つの大罪:ディアンヌ
不
ID:831 不眠神インソムニア
世
ID:973 世界評議員ロビン
偽
ID:1170 偽光精トニング
元
ID:725 元気を歌う少年:鏡音レン
光
ID:1299 光のおしおき:モノクマ
ID:1085 光のドラ助
ID:1029 光の大聖石
ID:1499 光の残飯処理係:ホーク
ID:397 光の美女カタリナ
ID:892 光の翼
ID:903 光の聖石
下一页
Advertisement
Follow on IG
TikTok
Join Fan Lab