为了解决亚历山大大帝的中途循环变身问题,修改了很多代码
This commit is contained in:
parent
43425ffc62
commit
f43f7160e9
|
@ -1 +1 @@
|
|||
[{"code":"ja","ckey":{"card":"594292872021201fb4cc4344478d3510","skill":"92883709980f061ccc855640a933d2de"},"updateTime":1645294196663},{"code":"en","ckey":{"card":"56d6a2fdd617717a0e0b84fe2538f0d0","skill":"099e7a331415c67de734cdb03ddf04bd"},"updateTime":1645292041102},{"code":"ko","ckey":{"card":"a8ab932556959b177fb43c4ff106d1e4","skill":"46ef08ef980fb154823ec64d075fed3c"},"updateTime":1645292041102}]
|
||||
[{"code":"ja","ckey":{"card":"1d70cbf8387c0b58fe01bf63869d9593","skill":"92883709980f061ccc855640a933d2de"},"updateTime":1645443085870},{"code":"en","ckey":{"card":"20ddffdd70fde86eaca9239b8012af0d","skill":"099e7a331415c67de734cdb03ddf04bd"},"updateTime":1645443085870},{"code":"ko","ckey":{"card":"686bb240f5d76b9fd349f884467f0500","skill":"46ef08ef980fb154823ec64d075fed3c"},"updateTime":1645443085870}]
|
|
@ -32,6 +32,29 @@ function sameCard(m1,m2)
|
|||
if (m1.collabId != m2.collabId) return false; //合作ID
|
||||
return true;
|
||||
}
|
||||
|
||||
//查找到真正起作用的那一个技能
|
||||
function getActuallySkills(skillsDataset, skillid, skillTypes, searchRandom = true) {
|
||||
const skill = skillsDataset[skillid];
|
||||
if (skill) {
|
||||
if (skillTypes.includes(skill.type)){
|
||||
return [skill];
|
||||
} else if (skill.type == 116 || //主动技
|
||||
(searchRandom && skill.type == 118) || //随机主动技
|
||||
skill.type == 138 || //队长技
|
||||
skill.type == 232 || //进化技能1,不循环
|
||||
skill.type == 233) { //进化技能2,循环
|
||||
//因为可能有多层调用,特别是随机118再调用组合116的,所以需要递归
|
||||
let subSkills = skill.params.flatMap(id => getActuallySkills(skillsDataset, id, skillTypes, searchRandom));
|
||||
subSkills = subSkills.filter(s=>s);
|
||||
return subSkills;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 正式流程
|
||||
*/
|
||||
|
@ -100,20 +123,22 @@ officialAPI.forEach(function(lang) {
|
|||
lang.skills = oSkills.map((oc,idx)=>new Skill(idx,oc)); //每一项生成分析对象
|
||||
|
||||
lang.cards.forEach((m,idx,arr)=>{
|
||||
const skill = lang.skills[m.activeSkillId];
|
||||
let henshinTo = null;
|
||||
const searchType = 202;
|
||||
if (skill.type == searchType)
|
||||
const skills = getActuallySkills(lang.skills, m.activeSkillId, [202]);
|
||||
if (skills.length) {
|
||||
const skill = skills[0];
|
||||
henshinTo = skill.params[0];
|
||||
else if (skill.type == 116 || skill.type == 118){
|
||||
const subskill = skill.params.map(id=>lang.skills[id]).find(subskill=>subskill.type == searchType);
|
||||
if (subskill)
|
||||
henshinTo = subskill.params[0];
|
||||
}
|
||||
if (henshinTo)
|
||||
{
|
||||
m.henshinTo = henshinTo;
|
||||
arr[henshinTo].henshinFrom = idx;
|
||||
//变身来源可能有多个,因此将变身来源修改为数组
|
||||
let henshinFrom = arr[henshinTo].henshinFrom;
|
||||
if (Array.isArray(henshinFrom)) {
|
||||
henshinFrom.push(idx);
|
||||
} else {
|
||||
arr[henshinTo].henshinFrom = [idx];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -3216,13 +3216,13 @@ const specialSearchFunctions = (function() {
|
|||
]},
|
||||
{group:true,name:"======Evo type======",otLangName:{chs:"======进化类型======",cht:"======進化類型======"}, functions: [
|
||||
{name:"No Henshin",otLangName:{chs:"非变身",cht:"非變身"},
|
||||
function:cards=>cards.filter(card=>!card.henshinFrom && !card.henshinTo)
|
||||
function:cards=>cards.filter(card=>!Array.isArray(card.henshinFrom) && !card.henshinTo)
|
||||
},
|
||||
{name:"Before Henshin",otLangName:{chs:"变身前",cht:"變身前"},
|
||||
function:cards=>cards.filter(card=>card.henshinTo)
|
||||
},
|
||||
{name:"After Henshin",otLangName:{chs:"变身后",cht:"變身後"},
|
||||
function:cards=>cards.filter(card=>card.henshinFrom)
|
||||
function:cards=>cards.filter(card=>Array.isArray(card.henshinFrom))
|
||||
},
|
||||
{name:"Pixel Evo",otLangName:{chs:"像素进化",cht:"像素進化"},
|
||||
function:cards=>cards.filter(card=>card.evoMaterials.includes(3826))
|
||||
|
|
|
@ -624,7 +624,7 @@ function calculateAbility_max(id, solo, teamsCount, maxLevel = 110) {
|
|||
function searchCards(cards, attr1, attr2, fixMainColor, types, typeAndOr, rares, awokens, sawokens, equalAk, incSawoken, canAssist, noHenshin) {
|
||||
let cardsRange = cards.concat(); //这里需要复制一份原来的数组,不然若无筛选,后面的排序会改变初始Cards
|
||||
if (canAssist) cardsRange = cardsRange.filter(card=>card.canAssist);
|
||||
if (noHenshin) cardsRange = cardsRange.filter(card=>!card.henshinFrom || card.limitBreakIncr);
|
||||
if (noHenshin) cardsRange = cardsRange.filter(card=>!Array.isArray(card.henshinFrom) || card.limitBreakIncr);
|
||||
//属性
|
||||
if (attr1 != null && attr1 === attr2 || //主副属性一致并不为空
|
||||
(attr1 === 6 && attr2 === -1)) //主副属性都为“无”
|
||||
|
@ -1086,9 +1086,9 @@ function tIf_Effect_76board(leader1id, leader2id) {
|
|||
{
|
||||
if (firstId == undefined) firstId = cardid;
|
||||
let card = Cards[cardid];
|
||||
if (card && card.henshinFrom && card.henshinFrom !== firstId)
|
||||
if (card && Array.isArray(card.henshinFrom) && card.henshinFrom[0] !== firstId)
|
||||
{
|
||||
card = henshinBase(card.henshinFrom, firstId);
|
||||
card = henshinBase(card.henshinFrom[0], firstId);
|
||||
}
|
||||
return card;
|
||||
}
|
||||
|
|
84
script.js
84
script.js
|
@ -656,16 +656,15 @@ class EvoTree
|
|||
{
|
||||
const _this = this;
|
||||
this.parent = parent;
|
||||
if (parent == null)
|
||||
if (parent == null) //如果没有提供父级,则寻找进化根
|
||||
{
|
||||
//mid = Cards[mid].evoRootId;
|
||||
function returnRootId(mid)
|
||||
{
|
||||
mid = Cards[mid].evoRootId;
|
||||
const m = Cards[mid];
|
||||
if (m.henshinFrom && m.henshinFrom < m.id)
|
||||
{ //只有变身来源小于目前id的,才继续找base
|
||||
mid = returnRootId(m.henshinFrom);
|
||||
if (Array.isArray(m.henshinFrom) && m.henshinFrom[0] < m.id)
|
||||
{ //只有变身来源小于目前id的,才继续找base,为了解决黑魔导女孩的问题
|
||||
mid = returnRootId(m.henshinFrom[0]);
|
||||
}
|
||||
return mid;
|
||||
}
|
||||
|
@ -683,7 +682,7 @@ class EvoTree
|
|||
{
|
||||
this.evoType = "Base";
|
||||
}
|
||||
else if (card.henshinFrom == parent.id)
|
||||
else if (Array.isArray(card.henshinFrom) && card.henshinFrom[0] == parent.id)
|
||||
{
|
||||
this.evoType = "Henshin";
|
||||
}
|
||||
|
@ -706,10 +705,7 @@ class EvoTree
|
|||
}
|
||||
}else
|
||||
{
|
||||
if (card.henshinFrom == parent.id)
|
||||
{
|
||||
this.evoType = "Henshin";
|
||||
}else if (parent.card.isUltEvo) //转生
|
||||
if (parent.card.isUltEvo) //转生
|
||||
{
|
||||
this.evoType = "Reincarnation";
|
||||
}else if(parent.evoType == "Reincarnation")
|
||||
|
@ -721,10 +717,10 @@ class EvoTree
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (this.idArr.includes(mid))
|
||||
{
|
||||
if (card.henshinFrom == parent.id)
|
||||
if (Array.isArray(card.henshinFrom) && card.henshinFrom.includes(parent.id))
|
||||
{
|
||||
this.evoType = "Henshin Loop";
|
||||
}
|
||||
|
@ -734,7 +730,7 @@ class EvoTree
|
|||
this.idArr.push(mid);
|
||||
}
|
||||
if (card.henshinTo)
|
||||
this.children.push(new EvoTree(card.henshinTo,_this));
|
||||
this.children.push(new EvoTree(card.henshinTo, _this));
|
||||
if (this.evoType != "Henshin")
|
||||
this.children.push(...Cards.filter(scard=>scard.evoBaseId == mid && scard.id != mid).map(scard=>new EvoTree(scard.id,_this)));
|
||||
//this.children = (card.henshinTo && card.henshinTo != card.evoRootId ? [new EvoTree(card.henshinTo,_this)] : []).concat(Cards.filter(scard=>scard.evoBaseId == mid && scard.id != mid).map(scard=>new EvoTree(scard.id,_this)));
|
||||
|
@ -860,9 +856,9 @@ function henshinStep(step)
|
|||
{ //是变身的则返回
|
||||
return gotoHenshin(Cards[card.henshinTo], --nstep);
|
||||
}
|
||||
else if (nstep < 0 && card.henshinFrom)
|
||||
else if (nstep < 0 && Array.isArray(card.henshinFrom))
|
||||
{
|
||||
return gotoHenshin(Cards[card.henshinFrom], ++nstep);
|
||||
return gotoHenshin(Cards[card.henshinFrom[0]], ++nstep);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -873,7 +869,7 @@ function henshinStep(step)
|
|||
team[0].forEach(member=>{
|
||||
const mid = member.id;
|
||||
const card = Cards[mid];
|
||||
if (step > 0 ? card.henshinTo : (card.henshinFrom && member.level <= 99))
|
||||
if (step > 0 ? card.henshinTo : (Array.isArray(card.henshinFrom) && member.level <= 99))
|
||||
{ //要变身前的才进行操作
|
||||
const _card = gotoHenshin(card, step);
|
||||
member.id = _card.id;
|
||||
|
@ -3655,42 +3651,46 @@ function initialize(event) {
|
|||
|
||||
//搜出一个卡片包含变身的的完整进化树
|
||||
function buildEvoTreeIdsArray(card, includeHenshin = true) {
|
||||
const evoLinkCardsIdArray = card.evoRootId !== 0 ? Cards.filter(m=>m.evoRootId == card.evoRootId).map(m=>m.id) : []; //筛选出相同进化链的
|
||||
const evoLinkCardsIdArray = card.evoRootId ? Cards.filter(m=>m.evoRootId == card.evoRootId).map(m=>m.id) : []; //筛选出相同进化链的
|
||||
function loopAddHenshin(arr,card)
|
||||
{
|
||||
const tcard1 = Cards[card.henshinFrom] || null;
|
||||
const tcard2 = Cards[card.henshinTo] || null;
|
||||
const evoCards = Cards.filter(m=>m.evoRootId == card.evoRootId && !arr.includes(m.id)).map(m=>m.id);
|
||||
if (tcard1 && !arr.includes(tcard1.id))
|
||||
{
|
||||
arr.push(tcard1.id);
|
||||
loopAddHenshin(arr,tcard1);
|
||||
//从本卡片变身到的
|
||||
const cardIdTo = card.henshinTo;
|
||||
if (!arr.includes(cardIdTo) && Cards[cardIdTo]) {
|
||||
arr.push(cardIdTo);
|
||||
loopAddHenshin(arr, Cards[cardIdTo]);
|
||||
}
|
||||
if (tcard2 && !arr.includes(tcard2.id))
|
||||
{
|
||||
arr.push(tcard2.id);
|
||||
loopAddHenshin(arr,tcard2);
|
||||
//变身到本卡片的(多个)
|
||||
const cardsIdFrom = (card.henshinFrom || []).filter(id=>Boolean(Cards[id]) && !arr.includes(id));
|
||||
if (cardsIdFrom.length) {
|
||||
arr.push(...cardsIdFrom);
|
||||
for (let id of cardsIdFrom) {
|
||||
loopAddHenshin(arr, Cards[id]);
|
||||
}
|
||||
}
|
||||
//本角色进化树上的
|
||||
const evoCards = Cards.filter(m=>m.evoRootId == card.evoRootId && !arr.includes(m.id));
|
||||
if (evoCards.length > 0)
|
||||
{
|
||||
evoCards.forEach(mid=>{
|
||||
arr.push(mid);
|
||||
const m = Cards[mid];
|
||||
if (m.henshinFrom || m.henshinTo)
|
||||
{ //添加变身的
|
||||
loopAddHenshin(arr,m);
|
||||
for (let card of evoCards) {
|
||||
arr.push(card.id);
|
||||
if (includeHenshin && (Array.isArray(card.henshinFrom) || card.henshinTo))
|
||||
{ //添加这个的变身的
|
||||
loopAddHenshin(arr, card);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
evoLinkCardsIdArray.forEach((mid,idx,arr)=>{
|
||||
const m = Cards[mid];
|
||||
if (includeHenshin && (m.henshinFrom || m.henshinTo))
|
||||
{ //添加变身的
|
||||
loopAddHenshin(arr,m);
|
||||
if (includeHenshin) {
|
||||
for (let id of evoLinkCardsIdArray) {
|
||||
const card = Cards[id];
|
||||
if (Array.isArray(card.henshinFrom) || card.henshinTo)
|
||||
{ //添加变身的
|
||||
loopAddHenshin(evoLinkCardsIdArray, card);
|
||||
}
|
||||
}
|
||||
});
|
||||
evoLinkCardsIdArray.sort((a,b)=>a-b);
|
||||
}
|
||||
evoLinkCardsIdArray.sort((a,b)=>a-b); //按ID大小排序
|
||||
return evoLinkCardsIdArray;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue