| @@ -87,7 +87,11 @@ | |||||
| power_up_targets: tp`[${'attrs_types'}]'s `, //attrs, types, attrs_types | power_up_targets: tp`[${'attrs_types'}]'s `, //attrs, types, attrs_types | ||||
| henshin: tp`Transforms into ${'card'}`, | henshin: tp`Transforms into ${'card'}`, | ||||
| void_poison: tp`Voids ${'poison'} damage`, | void_poison: tp`Voids ${'poison'} damage`, | ||||
| skill_proviso: tp`The follow-up effect can only be initiated ${'condition'}`, | |||||
| skill_proviso: tp`The follow-up effect can only be activates ${'condition'}`, | |||||
| obstruct_opponent: tp`Apply obstruct skill effect to ${'target'}: ${'skills'}`, | |||||
| obstruct_opponent_after_me: tp`The opponent ranked lower than me`, | |||||
| obstruct_opponent_before_me: tp`The opponent ranked higher than me`, | |||||
| obstruct_opponent_designated_position: tp`No.${'positions'} ranked opponents`, | |||||
| }, | }, | ||||
| power: { | power: { | ||||
| unknown: tp`[ Unkonwn power up: ${'type'} ]`, | unknown: tp`[ Unkonwn power up: ${'type'} ]`, | ||||
| @@ -178,7 +182,7 @@ | |||||
| in_once: tp`in onece `, | in_once: tp`in onece `, | ||||
| evo_type_pixel: tp`Pixel Evo`, | evo_type_pixel: tp`Pixel Evo`, | ||||
| evo_type_reincarnation: tp`Reinc. or Super Reinc. Evo`, | evo_type_reincarnation: tp`Reinc. or Super Reinc. Evo`, | ||||
| evo_type_unknow: tp`Unknown Evo`, | |||||
| evo_type_unknow: tp`Unknown Evo: ${'type'}`, | |||||
| affix_attr: tp`${'cotent'} attr.`, | affix_attr: tp`${'cotent'} attr.`, | ||||
| affix_orb: tp`${'cotent'} orbs`, | affix_orb: tp`${'cotent'} orbs`, | ||||
| affix_type: tp`${'cotent'} types`, | affix_type: tp`${'cotent'} types`, | ||||
| @@ -8,7 +8,7 @@ Number.prototype.bigNumberToString = function() { | |||||
| let numTemp = negative ? Math.abs(this) : this.valueOf(); | let numTemp = negative ? Math.abs(this) : this.valueOf(); | ||||
| if (!numTemp) return "0"; | if (!numTemp) return "0"; | ||||
| const grouping = Math.pow(10, 4); | |||||
| const grouping = 1e4; | |||||
| const unit = ['', '万', '亿', '兆', '京', '垓']; | const unit = ['', '万', '亿', '兆', '京', '垓']; | ||||
| const numParts = []; | const numParts = []; | ||||
| do { | do { | ||||
| @@ -34,8 +34,8 @@ Number.prototype.bigNumberToString = function() { | |||||
| //查找原先完整技能 | //查找原先完整技能 | ||||
| function findFullSkill(subSkill) { | function findFullSkill(subSkill) { | ||||
| const parentSkill = Skills.find(ss => (ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill; | |||||
| const aCard = Cards.find(card => card.activeSkillId == parentSkill.id || card.leaderSkillId == parentSkill.id); | |||||
| const parentSkill = Skills.find(ss => (ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill;3 | |||||
| const aCard = Cards.find(card => card?.activeSkillId == parentSkill.id || card?.leaderSkillId == parentSkill.id); | |||||
| return { skill: parentSkill, card: aCard }; | return { skill: parentSkill, card: aCard }; | ||||
| } | } | ||||
| //document.querySelector(".edit-box .row-mon-id .m-id").type = "number"; | //document.querySelector(".edit-box .row-mon-id .m-id").type = "number"; | ||||
| @@ -45,20 +45,13 @@ showSearch(result.map(o=>o.card).filter(c=>c)); | |||||
| console.table(result); | console.table(result); | ||||
| */ | */ | ||||
| //按住Ctrl点击技能在控制台输出技能的对象 | |||||
| function fastShowSkill(event) { | |||||
| if (event.ctrlKey) { | |||||
| const skillId = parseInt(this.getAttribute("data-skillid"), 10); | |||||
| console.log(Skills[skillId]); | |||||
| } | |||||
| } | |||||
| //insertAdjacentHTML 可以只增加部分 HTML | //insertAdjacentHTML 可以只增加部分 HTML | ||||
| //高级技能解释 | //高级技能解释 | ||||
| function parseSkillDescription(skill) { | function parseSkillDescription(skill) { | ||||
| const id = skill.id; | |||||
| const id = skill?.id; | |||||
| let fragment = document.createDocumentFragment(); //创建节点用的临时空间 | let fragment = document.createDocumentFragment(); //创建节点用的临时空间 | ||||
| if (id == 0) return fragment; | |||||
| if (!id) return fragment; | |||||
| const sk = skill.params; | const sk = skill.params; | ||||
| //珠子名和属性名数组 | //珠子名和属性名数组 | ||||
| @@ -1466,6 +1459,32 @@ function parseSkillDescription(skill) { | |||||
| case 229: | case 229: | ||||
| str = `队伍中每存在1个${getAttrTypeString(flags(sk[0]), flags(sk[1]))}时,${getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]}, false)}`; | str = `队伍中每存在1个${getAttrTypeString(flags(sk[0]), flags(sk[1]))}时,${getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]}, false)}`; | ||||
| break; | break; | ||||
| case 1000:{ //8人限定的技能 | |||||
| //str = skill.description + '\n'; | |||||
| str = ''; | |||||
| switch (sk[0]) | |||||
| { | |||||
| case 1: { | |||||
| str += `对排名比自身靠后的`; | |||||
| break; | |||||
| } | |||||
| case 2: { | |||||
| str += `对排名${flags(sk[1]).map(n=>n+1).join('、')}`; | |||||
| break; | |||||
| } | |||||
| case 3: { | |||||
| str += `对排名比自身靠前的`; | |||||
| break; | |||||
| } | |||||
| default: { | |||||
| str += `未知排名${sk[0]}`; | |||||
| break; | |||||
| } | |||||
| } | |||||
| str += `,使用敌人技能${sk.slice(2).join('、')}`; | |||||
| break; | |||||
| } | |||||
| default: | default: | ||||
| str = `未知的技能类型${skill.type}(No.${id})`; | str = `未知的技能类型${skill.type}(No.${id})`; | ||||
| //开发部分 | //开发部分 | ||||
| @@ -32,7 +32,7 @@ Number.prototype.bigNumberToString = function() | |||||
| { | { | ||||
| let numTemp = this.valueOf(); | let numTemp = this.valueOf(); | ||||
| if (!numTemp) return "0"; | if (!numTemp) return "0"; | ||||
| const grouping = Math.pow(10, 4); | |||||
| const grouping = 1e4; | |||||
| const unit = ['','萬','億','兆','京','垓']; | const unit = ['','萬','億','兆','京','垓']; | ||||
| const numParts = []; | const numParts = []; | ||||
| do{ | do{ | ||||
| @@ -42,6 +42,7 @@ officialAPI.forEach(function(lang) { | |||||
| const oCards = lang.cardOriginal = cardJsonObj.card;//将字符串转换为json对象 | const oCards = lang.cardOriginal = cardJsonObj.card;//将字符串转换为json对象 | ||||
| const monCards = lang.cards = []; | const monCards = lang.cards = []; | ||||
| //const monCards = lang.cards = oCards.map(ocard=>new Card(ocard)); | |||||
| /*oCards.forEach((oCard, idx)=>{ | /*oCards.forEach((oCard, idx)=>{ | ||||
| let mid = oCard[0]; | let mid = oCard[0]; | ||||
| if (mid === idx) //原始怪物 | if (mid === idx) //原始怪物 | ||||
| @@ -56,7 +57,17 @@ officialAPI.forEach(function(lang) { | |||||
| });*/ | });*/ | ||||
| for (let cardIndex = 0; oCards[cardIndex][0] === cardIndex; cardIndex++) | for (let cardIndex = 0; oCards[cardIndex][0] === cardIndex; cardIndex++) | ||||
| { | { | ||||
| monCards.push(new Card(oCards[cardIndex])); | |||||
| const card = new Card(oCards[cardIndex]); | |||||
| delete card.enemy; | |||||
| delete card.unk01; | |||||
| delete card.unk02; | |||||
| delete card.unk03; | |||||
| delete card.unk04; | |||||
| delete card.unk05; | |||||
| delete card.unk06; | |||||
| delete card.unk07; | |||||
| delete card.unk08; | |||||
| monCards.push(card); | |||||
| } | } | ||||
| //加入自定义的语言 | //加入自定义的语言 | ||||
| @@ -86,7 +97,6 @@ officialAPI.forEach(function(lang) { | |||||
| const oSkills = lang.skillOriginal = skillJsonObj.skill;//将字符串转换为json对象 | const oSkills = lang.skillOriginal = skillJsonObj.skill;//将字符串转换为json对象 | ||||
| lang.skills = oSkills.map((oc,idx)=>new Skill(idx,oc)); //每一项生成分析对象 | lang.skills = oSkills.map((oc,idx)=>new Skill(idx,oc)); //每一项生成分析对象 | ||||
| lang.cards.forEach((m,idx,arr)=>{ | lang.cards.forEach((m,idx,arr)=>{ | ||||
| const skill = lang.skills[m.activeSkillId]; | const skill = lang.skills[m.activeSkillId]; | ||||
| let henshinTo = null; | let henshinTo = null; | ||||
| @@ -104,6 +114,10 @@ officialAPI.forEach(function(lang) { | |||||
| arr[henshinTo].henshinFrom = idx; | arr[henshinTo].henshinFrom = idx; | ||||
| } | } | ||||
| }); | }); | ||||
| const eskillJson = fs.readFileSync("official-API/" + lang.code +"-enemy_skill.json", 'utf-8'); //使用同步读取技能 | |||||
| const eskillJsonObj = JSON.parse(eskillJson); | |||||
| lang.enemy_skills = eskillJsonObj.enemy_skills; | |||||
| }); | }); | ||||
| //加入其他服务器相同角色的名字 | //加入其他服务器相同角色的名字 | ||||
| @@ -215,6 +229,14 @@ var newCkeyObjs = officialAPI.map(lang=>{ | |||||
| } | } | ||||
| console.log(`skill_${lcode}.json 导出成功`); | console.log(`skill_${lcode}.json 导出成功`); | ||||
| }); | }); | ||||
| const enemy_skillsStr = lang.enemy_skills; | |||||
| //写入Skills | |||||
| fs.writeFile(`./enemy_skills_${lcode}.json`,enemy_skillsStr,function(err){ | |||||
| if(err){ | |||||
| console.error(err); | |||||
| } | |||||
| console.log(`enemy_skills_${lcode}.json 导出成功`); | |||||
| }); | |||||
| const cardHash = crypto.createHash('md5'); | const cardHash = crypto.createHash('md5'); | ||||
| const skillHash = crypto.createHash('md5'); | const skillHash = crypto.createHash('md5'); | ||||
| @@ -80,8 +80,7 @@ GM_xmlhttpRequest({ | |||||
| url:"ja-card.json", | url:"ja-card.json", | ||||
| onload: function(response) { | onload: function(response) { | ||||
| const originalJSON = JSON.parse(response.response); | const originalJSON = JSON.parse(response.response); | ||||
| console.log(originalJSON) | |||||
| cards = originalJSON.card.filter((c,idx)=>{return c[0]==idx;}); | |||||
| cards = originalJSON.card; | |||||
| pcards = cards.map(c=>{ | pcards = cards.map(c=>{ | ||||
| let card = new Card(c); | let card = new Card(c); | ||||
| //将可能的flag显示为二进制 | //将可能的flag显示为二进制 | ||||
| @@ -101,6 +101,10 @@ let localTranslating = { | |||||
| henshin: tp`变身为${'card'}`, | henshin: tp`变身为${'card'}`, | ||||
| void_poison: tp`消除${'poison'}时不会受到毒伤害`, | void_poison: tp`消除${'poison'}时不会受到毒伤害`, | ||||
| skill_proviso: tp`${'condition'}才能发动后续效果`, | skill_proviso: tp`${'condition'}才能发动后续效果`, | ||||
| obstruct_opponent: tp`对${'target'}施加敌对技能效果:${'skills'}`, | |||||
| obstruct_opponent_after_me: tp`排名比自身低的对手`, | |||||
| obstruct_opponent_before_me: tp`排名比自身高的对手`, | |||||
| obstruct_opponent_designated_position: tp`第${'positions'}排位的对手`, | |||||
| }, | }, | ||||
| power: { | power: { | ||||
| unknown: tp`[ 未知能力提升: ${'type'} ]`, | unknown: tp`[ 未知能力提升: ${'type'} ]`, | ||||
| @@ -190,7 +194,7 @@ let localTranslating = { | |||||
| in_once: tp`同时`, | in_once: tp`同时`, | ||||
| evo_type_pixel: tp`像素进化`, | evo_type_pixel: tp`像素进化`, | ||||
| evo_type_reincarnation: tp`转生或超转生进化`, | evo_type_reincarnation: tp`转生或超转生进化`, | ||||
| evo_type_unknow: tp`未知进化`, | |||||
| evo_type_unknow: tp`未知进化: ${'type'}`, | |||||
| affix_attr: tp`${'cotent'}属性`, //词缀-属性 | affix_attr: tp`${'cotent'}属性`, //词缀-属性 | ||||
| affix_orb: tp`${'cotent'}宝珠`, //词缀-宝珠 | affix_orb: tp`${'cotent'}宝珠`, //词缀-宝珠 | ||||
| affix_type: tp`${'cotent'}类型`, //词缀-类型 | affix_type: tp`${'cotent'}类型`, //词缀-类型 | ||||
| @@ -3206,6 +3210,13 @@ const specialSearchFunctions = (function() { | |||||
| } | } | ||||
| }) | }) | ||||
| }, | }, | ||||
| /*{name:"8P dedicated hostile skills",otLangName:{chs:"8P专用敌对技能"}, | |||||
| function:cards=>cards.filter(card=>{ | |||||
| const searchTypeArray = [1000]; | |||||
| const skill = getCardActiveSkill(card, searchTypeArray); | |||||
| return skill; | |||||
| }) | |||||
| },*/ | |||||
| ]}, | ]}, | ||||
| ]; | ]; | ||||
| return functions; | return functions; | ||||
| @@ -369,6 +369,7 @@ const SkillKinds = { | |||||
| Henshin: "henshin", | Henshin: "henshin", | ||||
| VoidPoison: "void-poison", | VoidPoison: "void-poison", | ||||
| SkillProviso: "skill-proviso", | SkillProviso: "skill-proviso", | ||||
| ObstructOpponent: "obstruct-opponent", | |||||
| } | } | ||||
| function skillParser(skillId) | function skillParser(skillId) | ||||
| @@ -920,6 +921,9 @@ function noSkyfall() { return { kind: SkillKinds.NoSkyfall }; } | |||||
| function henshin(id) { return { kind: SkillKinds.Henshin, id: id }; } | function henshin(id) { return { kind: SkillKinds.Henshin, id: id }; } | ||||
| function voidPoison() { return { kind: SkillKinds.VoidPoison }; } | function voidPoison() { return { kind: SkillKinds.VoidPoison }; } | ||||
| function skillProviso(cond) { return { kind: SkillKinds.SkillProviso, cond: cond }; } | function skillProviso(cond) { return { kind: SkillKinds.SkillProviso, cond: cond }; } | ||||
| function obstructOpponent(type, pos, ids) { | |||||
| return { kind: SkillKinds.ObstructOpponent, type: type, pos: pos, enemy_skills: ids }; | |||||
| } | |||||
| const parsers = { | const parsers = { | ||||
| parser: (() => []), //这个用来解决代码提示的报错问题,不起实际作用 | parser: (() => []), //这个用来解决代码提示的报错问题,不起实际作用 | ||||
| @@ -1332,9 +1336,19 @@ const parsers = { | |||||
| return powerUp(null, null, p.scaleMatchAttrs(attrs.map(flags), min, attrs.length, [100, 100], [0, 0]), null, null, [followAttackFixed(damage)]); | return powerUp(null, null, p.scaleMatchAttrs(attrs.map(flags), min, attrs.length, [100, 100], [0, 0]), null, null, [followAttackFixed(damage)]); | ||||
| }, | }, | ||||
| [202](id) { | [202](id) { | ||||
| return henshin(id); | |||||
| return henshin(id); | |||||
| }, | |||||
| [203](evotypeid, hp, atk, rcv) { | |||||
| let evotype = (type=>{ | |||||
| switch (type) { | |||||
| case 0: return "pixel-evo"; | |||||
| case 2: return "reincarnation-evo"; | |||||
| default: return type; | |||||
| } | |||||
| })(evotypeid); | |||||
| return powerUp(null, null, p.mul({ hp: hp || 100, atk: atk || 100, rcv: rcv || 100 }), | |||||
| c.compo('evolution', [evotype])); | |||||
| }, | }, | ||||
| [203](evotype, hp, atk, rcv) { return powerUp(null, null, p.mul({ hp: hp || 100, atk: atk || 100, rcv: rcv || 100 }), c.compo('evolution', [evotype])); }, | |||||
| [205](attrs, turns) { return activeTurns(turns, orbDropIncrease(null, flags(attrs == -1 ? 1023: attrs), 'locked')); }, | [205](attrs, turns) { return activeTurns(turns, orbDropIncrease(null, flags(attrs == -1 ? 1023: attrs), 'locked')); }, | ||||
| [206](attrs1, attrs2, attrs3, attrs4, attrs5, min, combo) { | [206](attrs1, attrs2, attrs3, attrs4, attrs5, min, combo) { | ||||
| @@ -1386,6 +1400,17 @@ const parsers = { | |||||
| [229](attrs, types, hp, atk, rcv) { | [229](attrs, types, hp, atk, rcv) { | ||||
| return powerUp(null, null, p.scaleStateKindCount(null, flags(attrs), flags(types), p.mul({hp: hp, atk: atk, rcv: rcv}))); | return powerUp(null, null, p.scaleStateKindCount(null, flags(attrs), flags(types), p.mul({hp: hp, atk: atk, rcv: rcv}))); | ||||
| }, | }, | ||||
| [1000](type, pos, ...ids) { | |||||
| let posType = (type=>{ | |||||
| switch (type) { | |||||
| case 1: return "after-me"; | |||||
| case 2: return "designated-position"; | |||||
| case 3: return "before-me"; | |||||
| default: return type; | |||||
| } | |||||
| })(type); | |||||
| return obstructOpponent(posType, flags(pos), ids); | |||||
| }, | |||||
| }; | }; | ||||
| //将内容添加到代码片段 | //将内容添加到代码片段 | ||||
| @@ -2070,6 +2095,35 @@ function renderSkill(skill, option = {}) | |||||
| frg.ap(tsp.skill.skill_proviso(dict)); | frg.ap(tsp.skill.skill_proviso(dict)); | ||||
| break; | break; | ||||
| } | } | ||||
| case SkillKinds.ObstructOpponent: { //条件限制才能用技能 | |||||
| let type = skill.type, pos = skill.pos, enemy_skills = skill.enemy_skills; | |||||
| let slight_pause = tsp.word.slight_pause().textContent; | |||||
| dict = { | |||||
| skills: enemy_skills.join(slight_pause) | |||||
| } | |||||
| let targetDict = { positions: pos?.map(p=>p+1).join(slight_pause)} | |||||
| switch (type) | |||||
| { | |||||
| case "after-me": { | |||||
| dict.target = tsp.skill.obstruct_opponent_after_me(targetDict); | |||||
| break; | |||||
| } | |||||
| case "designated-position": { | |||||
| dict.target = tsp.skill.obstruct_opponent_designated_position(targetDict); | |||||
| break; | |||||
| } | |||||
| case "before-me": { | |||||
| dict.target = tsp.skill.obstruct_opponent_before_me(targetDict); | |||||
| break; | |||||
| } | |||||
| default: { | |||||
| dict.target = tsp.cond.unknown(); | |||||
| break; | |||||
| } | |||||
| } | |||||
| frg.ap(tsp.skill.obstruct_opponent(dict)); | |||||
| break; | |||||
| } | |||||
| default: { | default: { | ||||
| console.log("未处理的技能类型",skill.kind, skill); | console.log("未处理的技能类型",skill.kind, skill); | ||||
| @@ -2271,19 +2325,19 @@ function renderCondition(cond) { | |||||
| break; | break; | ||||
| } | } | ||||
| case 'evolution':{ | case 'evolution':{ | ||||
| dict.ids = cond.compo.ids.map(eid=>{ | |||||
| dict.ids = cond.compo.ids.map(type=>{ | |||||
| const lnk = document.createElement("a"); | const lnk = document.createElement("a"); | ||||
| lnk.className ="detail-search"; | lnk.className ="detail-search"; | ||||
| switch (eid) | |||||
| switch (type) | |||||
| { | { | ||||
| case 0:{ //像素进化 | |||||
| case "pixel-evo":{ //像素进化 | |||||
| lnk.appendChild(tsp.word.evo_type_pixel()); | lnk.appendChild(tsp.word.evo_type_pixel()); | ||||
| lnk.onclick = function(){ | lnk.onclick = function(){ | ||||
| showSearch(Cards.filter(card=>card.evoMaterials.includes(3826))); | showSearch(Cards.filter(card=>card.evoMaterials.includes(3826))); | ||||
| }; | }; | ||||
| break; | break; | ||||
| } | } | ||||
| case 2:{ //转生或超转生 | |||||
| case "reincarnation-evo":{ //转生或超转生 | |||||
| lnk.appendChild(tsp.word.evo_type_reincarnation()); | lnk.appendChild(tsp.word.evo_type_reincarnation()); | ||||
| lnk.onclick = function(){ | lnk.onclick = function(){ | ||||
| showSearch(Cards.filter(card=>isReincarnated(card))); | showSearch(Cards.filter(card=>isReincarnated(card))); | ||||
| @@ -2291,7 +2345,7 @@ function renderCondition(cond) { | |||||
| break; | break; | ||||
| } | } | ||||
| default:{ //转生或超转生 | default:{ //转生或超转生 | ||||
| return tsp.word.evo_type_unknow(); | |||||
| return tsp.word.evo_type_unknow({ type }); | |||||
| } | } | ||||
| } | } | ||||
| return lnk; | return lnk; | ||||
| @@ -656,6 +656,19 @@ function searchCollab(event) { | |||||
| showSearch(Cards.filter(card => card.collabId == collabId)); | showSearch(Cards.filter(card => card.collabId == collabId)); | ||||
| return false; | return false; | ||||
| } | } | ||||
| //按住Ctrl点击技能在控制台输出技能的对象 | |||||
| function fastShowSkill(event) { | |||||
| const skillId = parseInt(this.getAttribute("data-skillid"), 10); //获得当前技能ID | |||||
| if (event.ctrlKey) { | |||||
| const skillId = parseInt(this.getAttribute("data-skillid"), 10); | |||||
| console.debug(Skills[skillId]); | |||||
| return; | |||||
| }; | |||||
| const s_cards = Cards.filter(card => card.activeSkillId === skillId); //搜索同技能怪物 | |||||
| if (s_cards.length > 1) { | |||||
| showSearch(s_cards); //显示 | |||||
| } | |||||
| } | |||||
| //将怪物的文字介绍解析为HTML | //将怪物的文字介绍解析为HTML | ||||
| function descriptionToHTML(str) | function descriptionToHTML(str) | ||||
| @@ -815,7 +815,7 @@ function loadData(force = false) | |||||
| request.onsuccess = function(event) { | request.onsuccess = function(event) { | ||||
| if (Array.isArray(request.result)) | if (Array.isArray(request.result)) | ||||
| { | { | ||||
| Cards = request.result; | |||||
| Cards = loadExtraCardsData(request.result); | |||||
| dealCardsData(Cards); | dealCardsData(Cards); | ||||
| }else | }else | ||||
| { | { | ||||
| @@ -835,7 +835,7 @@ function loadData(force = false) | |||||
| url: `${sourceDataFolder}/mon_${currentDataSource.code}.json?t=${_time}`, //Cards数据文件 | url: `${sourceDataFolder}/mon_${currentDataSource.code}.json?t=${_time}`, //Cards数据文件 | ||||
| onload: function(response) { | onload: function(response) { | ||||
| try { | try { | ||||
| Cards = JSON.parse(response.response); | |||||
| Cards = loadExtraCardsData(JSON.parse(response.response)); | |||||
| } catch (e) { | } catch (e) { | ||||
| console.error("Cards 数据 JSON 解码出错。", e); | console.error("Cards 数据 JSON 解码出错。", e); | ||||
| return; | return; | ||||
| @@ -862,7 +862,17 @@ function loadData(force = false) | |||||
| } | } | ||||
| }); | }); | ||||
| } | } | ||||
| function loadExtraCardsData(_cards) | |||||
| { | |||||
| let splitIdx = _cards.findIndex((card, id)=>card.id !== id); | |||||
| let cards = _cards.slice(0, splitIdx); | |||||
| for (let i = splitIdx + 1; i < _cards.length; i++) | |||||
| { | |||||
| const card = _cards[i]; | |||||
| cards[card.id] = card; | |||||
| } | |||||
| return cards; | |||||
| } | |||||
| function dealCardsData() | function dealCardsData() | ||||
| { | { | ||||
| if (editBox) | if (editBox) | ||||
| @@ -2830,14 +2840,7 @@ function initialize() { | |||||
| const skillLevel_1 = skillBox.querySelector(".m-skill-lv-1"); | const skillLevel_1 = skillBox.querySelector(".m-skill-lv-1"); | ||||
| const skillLevel_Max = skillBox.querySelector(".m-skill-lv-max"); | const skillLevel_Max = skillBox.querySelector(".m-skill-lv-max"); | ||||
| skillTitle.onclick = function(event) { | |||||
| if (event.ctrlKey) return; | |||||
| const skillId = parseInt(this.getAttribute("data-skillid"), 10); //获得当前技能ID | |||||
| const s_cards = Cards.filter(card => card.activeSkillId === skillId); //搜索同技能怪物 | |||||
| if (s_cards.length > 1) { | |||||
| showSearch(s_cards); //显示 | |||||
| } | |||||
| }; | |||||
| skillTitle.onclick = fastShowSkill; | |||||
| skillLevel.onchange = function() { | skillLevel.onchange = function() { | ||||
| const card = Cards[editBox.mid] || Cards[0]; //怪物固定数据 | const card = Cards[editBox.mid] || Cards[0]; //怪物固定数据 | ||||
| @@ -2851,6 +2854,9 @@ function initialize() { | |||||
| const rowLeaderSkill = settingBox.querySelector(".row-mon-leader-skill"); | const rowLeaderSkill = settingBox.querySelector(".row-mon-leader-skill"); | ||||
| const leaderSkillBox = rowLeaderSkill.querySelector(".skill-box"); | const leaderSkillBox = rowLeaderSkill.querySelector(".skill-box"); | ||||
| const lskillTitle = leaderSkillBox.querySelector(".skill-name"); | |||||
| lskillTitle.onclick = fastShowSkill; | |||||
| const showSkillOriginalClassName = 'show-skill-original'; | const showSkillOriginalClassName = 'show-skill-original'; | ||||
| const showSkillOriginal = leaderSkillBox.querySelector(`#${showSkillOriginalClassName}`); //显示官方排序的觉醒 | const showSkillOriginal = leaderSkillBox.querySelector(`#${showSkillOriginalClassName}`); //显示官方排序的觉醒 | ||||
| showSkillOriginal.onchange = function(e){ | showSkillOriginal.onchange = function(e){ | ||||
| @@ -3174,7 +3180,7 @@ function changeid(mon, monDom, latentDom) { | |||||
| parentNode.classList.remove("null"); | parentNode.classList.remove("null"); | ||||
| parentNode.classList.remove("delay"); | parentNode.classList.remove("delay"); | ||||
| monDom.setAttribute("data-cards-pic-idx", Math.ceil(monId / 100)); //添加图片编号 | |||||
| monDom.setAttribute("data-cards-pic-idx", Math.ceil(monId % 1e5 / 100)); //添加图片编号 | |||||
| const idxInPage = (monId - 1) % 100; //获取当前页面的总序号 | const idxInPage = (monId - 1) % 100; //获取当前页面的总序号 | ||||
| monDom.setAttribute("data-cards-pic-x", idxInPage % 10); //添加X方向序号 | monDom.setAttribute("data-cards-pic-x", idxInPage % 10); //添加X方向序号 | ||||
| monDom.setAttribute("data-cards-pic-y", Math.floor(idxInPage / 10)); //添加Y方向序号 | monDom.setAttribute("data-cards-pic-y", Math.floor(idxInPage / 10)); //添加Y方向序号 | ||||
| @@ -3462,7 +3468,7 @@ function editBoxChangeMonId(id) { | |||||
| } | } | ||||
| const evoLinkCardsIdArray = Cards.filter(m=>m.evoRootId == card.evoRootId).map(m=>m.id); //筛选出相同进化链的 | |||||
| const evoLinkCardsIdArray = card.evoRootId !== 0 ? Cards.filter(m=>m.evoRootId == card.evoRootId).map(m=>m.id) : []; //筛选出相同进化链的 | |||||
| function loopAddHenshin(arr,card) | function loopAddHenshin(arr,card) | ||||
| { | { | ||||