From 62596345b3194b2b4873071faeb5b9de5fe0fadf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Tue, 29 Dec 2020 23:05:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=9A=E8=B5=B7=E6=9D=A5=E7=9C=9F=E6=98=AF?= =?UTF-8?q?=E5=9B=B0=E9=9A=BE=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/en.js | 44 +++++++------- languages/zh-CN.js | 9 +++ script-skill-parser.js | 107 ++++++++++++++++++++++++----------- script-universal_function.js | 3 +- script.js | 13 ++--- style.css | 11 +++- 6 files changed, 121 insertions(+), 66 deletions(-) diff --git a/languages/en.js b/languages/en.js index 7a56ff9b..53c12e86 100644 --- a/languages/en.js +++ b/languages/en.js @@ -1,28 +1,32 @@ const localTranslating = { webpage_title: `P&D ${teamsCount}P Formation Maker`, - title_blank: "Input Formation Title", - detail_blank: "Input Detail", + title_blank: `Input Formation Title`, + detail_blank: `Input Detail`, sort_name: { - sort_none: "Nope", - sort_id: "Cards Id", - sort_attrs : "Attribute", - sort_evoRootId: "Cards Evolution Root", - sort_evoRoot_Attrs : "Cards Evolution Root's Attribute", - sort_rarity: "Rarity", - sort_cost: "Cost", - sort_skillLv1: "Maximum Skill Turn", - sort_skillLvMax: "Minimum Skill Turn", - sort_hpMax110: "Max HP", - sort_atkMax110: "Max ATK", - sort_rcvMax110: "Max RCV", - sort_hpMax110_awoken: "Max HP (+Awoken)", - sort_atkMax110_awoken: "Max ATK (+Awoken)", - sort_rcvMax110_awoken: "Max RCV (+Awoken)", - sort_abilityIndex_awoken: "Maximum Weighted Ability Index (+Awakening)", + sort_none: `Nope`, + sort_id: `Cards Id`, + sort_attrs : `Attribute`, + sort_evoRootId: `Cards Evolution Root`, + sort_evoRoot_Attrs : `Cards Evolution Root's Attribute`, + sort_rarity: `Rarity`, + sort_cost: `Cost`, + sort_skillLv1: `Maximum Skill Turn`, + sort_skillLvMax: `Minimum Skill Turn`, + sort_hpMax110: `Max HP`, + sort_atkMax110: `Max ATK`, + sort_rcvMax110: `Max RCV`, + sort_hpMax110_awoken: `Max HP (+Awoken)`, + sort_atkMax110_awoken: `Max ATK (+Awoken)`, + sort_rcvMax110_awoken: `Max RCV (+Awoken)`, + sort_abilityIndex_awoken: `Maximum Weighted Ability Index (+Awakening)`, }, - force_reload_data: "Force refresh data", + force_reload_data: `Force refresh data`, skill_parse: { - Unknown: "unknown skill", + unknown_skill_type: ()=>`Unknown skill type.`, + active_turns: (turns, element)=> [element,`, in ${turns} turns.`], + random_skills: (element)=>[`Activates these random skills:`, element], + delay: ()=> `Delays enemies' next move`, + mass_attack: ()=> `plus Mass Attack`, }, } diff --git a/languages/zh-CN.js b/languages/zh-CN.js index 9afc6737..3cd2a8f1 100644 --- a/languages/zh-CN.js +++ b/languages/zh-CN.js @@ -1,4 +1,13 @@ document.title = `智龙迷城${teamsCount}人队伍图制作工具`; +const localTranslating = { + skill_parse: { + unknown_skill_type: ()=>`未知的技能类型`, + active_turns: (turns, element)=>[`${turns}回合内,`, element], + random_skills: (element)=>[`随机执行以下技能:`, element], + delay: ()=> `将敌人的攻击延迟`, + mass_attack: ()=> `所有攻击变为全体攻击`, + }, +} //大数字缩短长度 Number.prototype.bigNumberToString = function() diff --git a/script-skill-parser.js b/script-skill-parser.js index 37b7fb25..eda902f1 100644 --- a/script-skill-parser.js +++ b/script-skill-parser.js @@ -126,6 +126,23 @@ function skillParser(skillId) return skills; } +//返回flag里值为true的数组,如[1,4,7] +function flags(num){ + /* + return Array.from(new Array(32),(i,n)=>n).filter(n => num & (1 << n)); //性能太差 + return new Array(32).fill(null).map((i,n)=>n).filter(n => num & (1 << n)); //性能比上者好,但还是不够快 + */ + const arr = []; + for (let i = 0; i<32;i++) + { + if (num & (1< ({ ...cross, mul: (cross.mul / 100) || 1 })) }; @@ -614,49 +631,71 @@ const parsers = { }, }; +function renderSkills(skills) +{ + const ul = document.createElement("ul"); + ul.className = "card-skill-list"; + skills.forEach(skill=>{ + const li = ul.appendChild(document.createElement("li")); + li.className = skill.kind; + li.appendChild(renderSkill(skill)); + }); + return ul; +} function renderSkill(skill) { + function appendToFragment(arg){ + if (Array.isArray(arg)) + { + arg.forEach(element=>appendToFragment(element)); + } + else if (typeof arg == "string") + { + return fragment.appendChild(document.createTextNode(arg)); + } + else + { + console.log("看看这是啥",arg); + return fragment.appendChild(arg); + } + } const fragment = document.createDocumentFragment(); - const txt = str=>fragment.appendChild(document.createTextNode(str)); if (typeof localTranslating == "undefined") return fragment; const tsp = localTranslating.skill_parse; switch (skill.kind) { case SkillKinds.Unknown: { - txt(tsp.Unknown); + appendToFragment(tsp.unknown_skill_type()); + break; } - /* case SkillKinds.ActiveTurns: { - const { turns, skill: actionSkill } = skill as Skill.ActiveTurns; - return {renderSkill(skillactionSkill)} × {turns} turns; + appendToFragment(tsp.active_turns(skill.turns, renderSkill(skill.skill))); + break; } case SkillKinds.RandomSkills: { - const { skills } = skill as Skill.RandomSkills; - return ( - <> - random skills: - - - ); + const ul = document.createElement("ul"); + ul.className = "random-active-skill"; + skill.skills.forEach(subSkills=>{ + const li = ul.appendChild(document.createElement("li")); + li.appendChild(renderSkills(subSkills)); + }); + appendToFragment(tsp.random_skills(ul)); + break; } - case SkillKinds.Delay: { - return ( - - - - ); + const idoc = document.createElement("icon"); + idoc.className = "icon-delay"; + appendToFragment(idoc); + appendToFragment(tsp.delay()); + break; } case SkillKinds.MassAttack: { - return ( - - - - ); + const idoc = document.createElement("icon"); + idoc.className = "icon-mass-attack"; + appendToFragment(idoc); + appendToFragment(tsp.mass_attack()); + break; } + /* case SkillKinds.LeaderChange: { return ( @@ -1051,10 +1090,10 @@ function renderSkill(skill) ); } - */ + */ default: { - console.log(skill, skill.kind); - txt(skill.kind); + console.log(skill.kind, skill); + appendToFragment(skill.kind); } } return fragment; diff --git a/script-universal_function.js b/script-universal_function.js index eee9f87c..20c16c3c 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -524,8 +524,9 @@ function cardN(id){ //将怪物的文字介绍解析为HTML function descriptionToHTML(str) { - str = str.replace(/\n/ig,"
"); //换行 + //str = str.replace(/\n/ig,"
"); //换行 //str = str.replace(/ /ig," "); //换行 + str = str.replace(/\^([a-fA-F0-9]+?)\^([^\^]+?)\^p/igm,'$2'); //文字颜色 str = str.replace(/\%\{m([0-9]{1,4})\}/g,function (str, p1, offset, s){return cardN(parseInt(p1,10)).outerHTML;}); //怪物头像 return str; diff --git a/script.js b/script.js index 75caaece..7c9f06ad 100644 --- a/script.js +++ b/script.js @@ -2716,14 +2716,13 @@ function editBoxChangeMonId(id) { fragment = document.createDocumentFragment(); //创建节点用的临时空间 fragment.appendChild(skillBox); - skillTitle.innerHTML = descriptionToHTML(activeskill.name); + skillTitle.textContent = activeskill.name; skillTitle.setAttribute("data-skillid", activeskill.id); skillDetailOriginal.innerHTML = ""; skillDetailOriginal.appendChild(parseSkillDescription(activeskill)); skillDetailParsed.innerHTML = ""; - skillParser(card.activeSkillId) - .map(parsedSkill => renderSkill(parsedSkill)) - .forEach(node => skillDetailParsed.appendChild(node)); + skillDetailParsed.appendChild(renderSkills(skillParser(card.activeSkillId))); + const t_maxLevel = card.overlay || card.types.includes(15) ? 1 : activeskill.maxLevel; //遇到不能升技的,最大等级强制为1 skillLevel.max = t_maxLevel; skillLevel.value = t_maxLevel; @@ -2743,14 +2742,12 @@ function editBoxChangeMonId(id) { fragment = document.createDocumentFragment(); //创建节点用的临时空间 fragment.appendChild(lskillBox); - lskillTitle.innerHTML = descriptionToHTML(leaderSkill.name); + lskillTitle.textContent = leaderSkill.name; lskillTitle.setAttribute("data-skillid", leaderSkill.id); lskillDetailOriginal.innerHTML = ""; lskillDetailOriginal.appendChild(parseSkillDescription(leaderSkill)); lskillDetailParsed.innerHTML = ""; - skillParser(card.leaderSkillId) - .map(parsedSkill => renderSkill(parsedSkill)) - .forEach(node => lskillDetailParsed.appendChild(node)); + lskillDetailParsed.appendChild(renderSkills(skillParser(card.leaderSkillId))); rowLederSkill.appendChild(fragment); diff --git a/style.css b/style.css index 407dd4c0..ed87aa99 100644 --- a/style.css +++ b/style.css @@ -79,7 +79,7 @@ body{ box-sizing: border-box; padding: 1px; margin: 0; - white-space: pre-wrap; + white-space: break-spaces; } .guide-mod .control-box>div.status @@ -2039,6 +2039,11 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after color: black; padding: 0 8px 6px 8px; line-height: 25px; + white-space: break-spaces; +} +.skill-datail-original +{ + border-bottom: #9C743E solid 2px; } .skill-datail .spColor{ color: #ff3600; @@ -2050,10 +2055,10 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after .skill-datail .detail-search::before{ content: "🔍"; } -.skill-datail .random-active-skill{ +.random-active-skill{ padding-left: 1em; } -.skill-datail .random-active-skill>.active-skill-li{ +.random-active-skill>li{ list-style: decimal; }