diff --git a/multi.html b/multi.html
index 009753df..8d966a6c 100644
--- a/multi.html
+++ b/multi.html
@@ -756,22 +756,22 @@ var formation = new Formation(teamsCount,5);
diff --git a/script-universal_function.js b/script-universal_function.js
index add631dc..1127c68d 100644
--- a/script-universal_function.js
+++ b/script-universal_function.js
@@ -676,14 +676,14 @@ function calculateAbility_max(id, solo, teamsCount, maxLevel = 110) {
}
}
//搜索卡片用
-function searchCards(cards, {attrs:[attr1, attr2], fixMainColor, types, typeAndOr, rares, awokens, sawokens, equalAk, incSawoken, canAssist, canLv110, is8Latent}) {
+function searchCards(cards, {attrs:[attr1, attr2], fixMainColor, types, typeAndOr, rares:[rareLow, rareHigh], awokens, sawokens, equalAk, incSawoken, canAssist, canLv110, is8Latent}) {
let cardsRange = cards.concat(); //这里需要复制一份原来的数组,不然若无筛选,后面的排序会改变初始Cards
if (canAssist) cardsRange = cardsRange.filter(card=>card.canAssist);
if (canLv110) cardsRange = cardsRange.filter(card=>card.limitBreakIncr>0);
if (is8Latent) cardsRange = cardsRange.filter(card=>card.is8Latent);
//属性
const anyAttr = 0b1111101;
- const anyA1 = (attr1 & anyAttr) == anyAttr, anyA2 = (attr2 & anyAttr) == anyAttr;
+ const anyA1 = attr1 === 0 || (attr1 & anyAttr) == anyAttr, anyA2 = attr2 === 0 || (attr2 & anyAttr) == anyAttr;
if (!anyA1 || !anyA2) { //当a1、a2任一不为所有颜色时才需要筛选属性
const attr1s = flags(attr1), attr2s = flags(attr2);
const nullAttrArr = [undefined,-1,6];
@@ -713,14 +713,14 @@ function searchCards(cards, {attrs:[attr1, attr2], fixMainColor, types, typeAndO
}
//类型
if (types.length > 0) {
- cardsRange = cardsRange.filter(c => typeAndOr ?
- types.every(t => c.types.includes(t)) : //所有type都满足
- types.some(t => c.types.includes(t)) //只需要满足一个type
+ cardsRange = cardsRange.filter(({types: cTypes}) =>
+ //所有type都满足,或只需要满足一个type
+ types[typeAndOr ? 'every' : 'some'](t => cTypes.includes(t))
);
}
//稀有度
- if (rares.length > 1) {
- cardsRange = cardsRange.filter(c => c.rarity >= rares[0] && c.rarity <= rares[1]);
+ if (rareLow !== 1 || rareHigh !== 10) { //不是1~10时才进行筛选
+ cardsRange = cardsRange.filter(({rarity}) => rarity >= rareLow && rarity <= rareHigh);
}
//觉醒
//等效觉醒时,事先去除大觉醒
diff --git a/script.js b/script.js
index 255e5842..1a5220e0 100644
--- a/script.js
+++ b/script.js
@@ -3167,8 +3167,11 @@ function initialize() {
}
//只添加第一个列表,后面的全部通过克隆的方式复现
specialFirstSelect.refreshList();
- specialAdd.onclick = function() {
- return specialFilterUl.appendChild(specialFilterFirstLi.cloneNode(true));
+ specialAdd.onclick = function(event) {
+ const specialFilterLi = specialFilterFirstLi.cloneNode(true);
+ const specialFilterSelection = specialFilterLi.querySelector(".special-filter");
+ specialFilterUl.appendChild(specialFilterLi);
+ return specialFilterSelection;
}
//specialAdd.onclick(); //先运行一次产生两个
specialClear.onclick = function() {
@@ -3321,56 +3324,56 @@ function initialize() {
s_add_show_abilities.onchange = reShowSearch;
s_add_show_abilities_with_awoken.onchange = reShowSearch;
- searchBox.recoverySearchStatus = function(options) {
- (s_attr1s.find(opt=>parseInt(opt.value) == options.attrs[0]) || s_attr1s[0]).checked = true;
- (s_attr2s.find(opt=>parseInt(opt.value) == options.attrs[1]) || s_attr2s[0]).checked = true;
- s_fixMainColor.checked = options.fixMainColor;
- s_types.filter(opt=>options.types.includes(parseInt(opt.value))).forEach(opt=>opt.checked = true);
- s_typeAndOr.checked = options.typeAndOr;
- (s_rareLows.find(opt=>parseInt(opt.value) == options.rares[0]) || s_rareLows[0]).checked = true;
- (s_rareHighs.find(opt=>parseInt(opt.value) == options.rares[1]) || s_rareHighs[0]).checked = true;
+ //恢复搜索状态
+ searchBox.recoverySearchStatus = function({attrs:[attr1, attr2], fixMainColor, types, typeAndOr, rares:[rareLow, rareHigh], awokens, sawokens, equalAk, incSawoken, canAssist, canLv110, is8Latent, specialFilters}) {
+ //属性这里是用的2进制写
+ (s_attr1s.find(opt=>parseInt(opt.value,2) == attr1) || s_attr1s[0]).checked = true;
+ (s_attr2s.find(opt=>parseInt(opt.value,2) == attr2) || s_attr2s[0]).checked = true;
+ s_fixMainColor.checked = fixMainColor;
+ s_types.filter(opt=>types.includes(parseInt(opt.value,10))).forEach(opt=>opt.checked = true);
+ s_typeAndOr.checked = typeAndOr;
+ (s_rareLows.find(opt=>parseInt(opt.value,10) == rareLow) || s_rareLows[0]).checked = true;
+ (s_rareHighs.find(opt=>parseInt(opt.value,10) == rareHigh) || s_rareHighs[s_rareHighs.length-1]).checked = true;
+ s_selectedAwokensUl.innerHTML = "";
//添加觉醒
- options.awokens.forEach(awokenCount=>{
- const btn = s_awokensIcons.find(_btn=>parseInt(_btn.getAttribute("data-awoken-icon")) == awokenCount.id);
- btn.setAttribute("data-awoken-count", awokenCount.num);
+ awokens.forEach(ak=>{
+ const btn = s_awokensIcons.find(_btn=>parseInt(_btn.getAttribute("data-awoken-icon"), 10) == ak.id);
- for (let i = 0; i < awokenCount.num; i++) {
- const iconLi = document.createElement("li");
- const icon = iconLi.appendChild(document.createElement("icon"));
- icon.className = "awoken-icon";
- icon.setAttribute("data-awoken-icon", awokenCount.id);
- icon.onclick = search_awokenSub1;
- s_selectedAwokensUl.appendChild(iconLi);
+ for (let i = 0; i < ak.num; i++) {
+ btn.onclick();
}
});
- s_sawokens.filter(opt=>options.sawokens.includes(parseInt(opt.value))).forEach(opt=>opt.checked = true);
- s_awokensEquivalent.checked = options.awokensEquivalent;
- s_includeSuperAwoken.checked = options.includeSuperAwoken;
- s_canAssist.checked = options.canAssist;
- s_canLevelLimitBreakthrough.checked = options.canLevelLimitBreakthrough;
- s_have8LatentSlot.checked = options.have8LatentSlot;
+ s_sawokens.filter(opt=>sawokens.includes(parseInt(opt.value,10))).forEach(opt=>opt.checked = true);
+ s_awokensEquivalent.checked = equalAk;
+ s_includeSuperAwoken.checked = incSawoken;
+ s_canAssist.checked = canAssist;
+ s_canLevelLimitBreakthrough.checked = canLv110;
+ s_have8LatentSlot.checked = is8Latent;
- const specialFilters = Array.from(specialFilterUl.querySelectorAll(".special-filter"));
+ //保留之前的特殊搜索,不需要完全新增
+ const specialFilterSelections = Array.from(specialFilterUl.querySelectorAll(".special-filter"));
//将筛选个数增加到需要的个数
- for (let i = specialFilters.length; i < options.specialFilters.length; i++) {
- specialFilters.push(specialAdd.onclick().querySelector(".special-filter"));
+ for (let i = specialFilterSelections.length; i < specialFilters.length; i++) {
+ specialFilterSelections.push(specialAdd.onclick());
}
+ //将每一个搜索都设置好
for (let i = 0; i < specialFilters.length; i++) {
- const filterUl = specialFilters[i];
- const filter = options.specialFilters[i];
- filterUl.value = filter.join("|");
+ const filterSelection = specialFilterSelections[i];
+ const filter = specialFilters[i];
+ filterSelection.value = filter.join("|");
}
}
searchBox.getSearchOptions = function(){
- let attr1 = Number(returnRadiosValue(s_attr1s)) || 0;
- let attr2 = Number(returnRadiosValue(s_attr2s)) || 0;
-
+ const attrs = [
+ parseInt(returnRadiosValue(s_attr1s), 2) || 0,
+ parseInt(returnRadiosValue(s_attr2s), 2) || 0
+ ];
const types = returnCheckBoxsValues(s_types).map(Str2Int);
const rares = [
- returnCheckBoxsValues(s_rareLows).map(Str2Int)[0],
- returnCheckBoxsValues(s_rareHighs).map(Str2Int)[0],
+ parseInt(returnRadiosValue(s_rareLows), 10),
+ parseInt(returnRadiosValue(s_rareHighs), 10),
];
const sawokens = returnCheckBoxsValues(s_sawokens).map(Str2Int);
const awokens = s_awokensIcons.filter(btn => parseInt(btn.getAttribute("data-awoken-count"), 10) > 0).map(btn => {
@@ -3379,9 +3382,13 @@ function initialize() {
num: parseInt(btn.getAttribute("data-awoken-count"), 10)
};
});
+ //储存设置用于页面刷新的状态恢复
+ const specialFilters = Array.from(specialFilterUl.querySelectorAll(".special-filter"))
+ .map(select=>select.value.split("|").map(Number)) //将字符串"1|2"转换成数组[1,2]
+ .filter(([f1, f2])=>!(f1===0&&f2===undefined)); //去掉0号筛选
const options = {
- attrs:[attr1, attr2],
+ attrs,
fixMainColor: s_fixMainColor.checked,
types,
typeAndOr: s_typeAndOr.checked,
@@ -3393,8 +3400,7 @@ function initialize() {
canAssist: s_canAssist.checked,
canLv110: s_canLevelLimitBreakthrough.checked,
is8Latent: s_have8LatentSlot.checked,
- specialFilters: Array.from(specialFilterUl.querySelectorAll(".special-filter"))
- .map(select=>select.value.split("|").map(Number)) //储存设置用于页面刷新的状态恢复
+ specialFilters,
};
return options;
}
diff --git a/service-worker.js b/service-worker.js
index 74934401..816ba869 100644
--- a/service-worker.js
+++ b/service-worker.js
@@ -6847,7 +6847,7 @@ const cachesMap = new Map([
],
[
"multi.html",
- "879e15f7cbd65d01b756bf4626b7b24b"
+ "c2b977946df4ac8ca5f306a471a684ed"
],
[
"script-custom_elements.js",
@@ -6863,15 +6863,15 @@ const cachesMap = new Map([
],
[
"script-universal_function.js",
- "fe7c78c90328699773a0ca4ceb7d7fe7"
+ "fa372d33c4a66251b02159a90bb4bde3"
],
[
"script.js",
- "eda6b45f6710044a734c7fd6915ba407"
+ "ce49b5dcec98ba8ad89c42f4897cd5c4"
],
[
"solo.html",
- "bcde6ce52dcf6b5d0126cdc0f7b26bda"
+ "7d63dced9fa11ae320fa3cac675e17f3"
],
[
"style-monsterimages.css",
@@ -6887,7 +6887,7 @@ const cachesMap = new Map([
],
[
"triple.html",
- "af7798d49322f58831f9236194dbb20b"
+ "f8a5d8e2a76c3f5e6f4cb03f5d3e67f0"
],
[
"languages/en.css",
diff --git a/solo.html b/solo.html
index 0976a7a0..cc400684 100644
--- a/solo.html
+++ b/solo.html
@@ -602,22 +602,22 @@ var formation = new Formation(teamsCount,6);
diff --git a/triple.html b/triple.html
index 0ef52b8e..7d0d193b 100644
--- a/triple.html
+++ b/triple.html
@@ -1638,22 +1638,22 @@ var formation = new Formation(teamsCount,6);