翻译的大量改进

This commit is contained in:
枫谷剑仙 2020-10-12 20:59:16 +08:00
parent dfe520faab
commit ccd907ab3c
7 changed files with 221 additions and 51 deletions

View File

@ -35,7 +35,44 @@ function fastShowSkill(event)
console.log(Skills[skillId]);
}
}
//技能介绍里的头像的切换
function changeToIdInSkillDetail(event)
{
const settingBox = editBox.querySelector(".setting-box");
const monstersID = settingBox.querySelector(".row-mon-id .m-id");
const mid = this.getAttribute("data-cardid");
monstersID.value = mid;
monstersID.onchange();
return false; //取消链接的默认操作
}
//技能介绍里的头像的切换
function createBoard(boardData, orbType = 0)
{
boardData.splice(3,0,boardData[2]); //将第2行复制插入为第3行
const table = document.createElement("table");
table.className = "board fixed-shape-orb";
boardData.forEach((flag,ri) => {
const row = table.insertRow();
if (ri == 3)
row.classList.add("board-row4");
boolArr = new Array(6).fill(null).map((a,i)=> (1<<i & flag) ? true:false);
boolArr.splice(4,0,boolArr[3]); //将第3个复制插入为第4个
boolArr.forEach((has,ci)=>{
const cell = row.insertCell();
if (has) cell.className = `has-orb orb-${orbType}`;
if (ci == 4)
cell.classList.add("board-cell5");
});
});
table.onclick = function(){
this.classList.toggle("board-76");
};
return table;
}
//insertAdjacentHTML 可以只增加部分 HTML
//高级技能解释
function parseSkillDescription(skill)
{
@ -600,20 +637,33 @@ function parseSkillDescription(skill)
}
break;
case 125: //隊伍中同時存在 時所有寵物的攻擊力3.5倍
strArr = sk.slice(0,5).filter(s=>s>0);
str = `队伍中${strArr.length>1?"同时":""}存在`;
str += strArr.map(cardN).join("");
str += "时所有宠物的";
strArr =[];
if (sk[5]) {strArr.push(`HP×${sk[5]/100}`);}
if (sk[6]) {strArr.push(`攻击力×${sk[6]/100}`);}
if (sk[7]) {strArr.push(`回复力×${sk[7]/100}`);}
str += strArr.join("、");
let needMons = sk.slice(0,5).filter(s=>s>0);
fragment.appendChild(document.createTextNode(`队伍中${needMons.length>1?"同时":""}存在`));
needMons.forEach(mid=>{
let cardDom = cardN(mid);
cardDom.monDom.onclick = changeToIdInSkillDetail;
fragment.appendChild(cardDom);
});
fragment.appendChild(document.createTextNode(`时,所有宠物的${getFixedHpAtkRcvString({hp:sk[5],atk:sk[6],rcv:sk[7]})}`));
return fragment;
break;
case 126:
str = `${sk[1]}${sk[1] != sk[2]?`~${sk[2]}`:""}回合内${nb(sk[0], attrsName).join("、")}宝珠的掉落率提高${sk[3]}%`;
break;
case 127: //生成竖列
strArr = [];
for (let ai=0;ai<sk.length;ai+=2)
{
strArr.push(`${nb(sk[ai],ClumsN).join("、")}的宝珠变为${nb(sk[ai+1],attrsName).join("、")}`);
}
fragment.appendChild(document.createTextNode(strArr.join("")));
/*
var table = createBoard([sk[0],sk[1],sk[2],sk[3],sk[4]], sk[5]);
table.classList.add("fixed-shape-orb");
fragment.appendChild(table);*/
return fragment;
break;
strArr = [];
for (let ai=0;ai<sk.length;ai+=2)
{
@ -736,7 +786,25 @@ function parseSkillDescription(skill)
str = `协力时${getAttrTypeString(flags(sk[0]),flags(sk[1]))}宠物的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]})}`;
break;
case 156: //宝石姬技能
strArr = sk.slice(1,4);
awokenArr = sk.slice(1,4).filter(s=>s>0);
fragment.appendChild(document.createTextNode(`${sk[0]?`${sk[0]}回合内,`:""}根据队伍内觉醒技能`));
awokenArr.forEach((aid,idx,arr)=>{
const icon = fragment.appendChild(document.createElement("icon"));
icon.className ="awoken-icon";
icon.setAttribute("data-awoken-icon",aid);
icon.title = awokenN(aid);
if (idx < arr.length-1) icon.insertAdjacentText('afterend', "、");;
});
fragment.appendChild(document.createTextNode(`的数目`));
if (sk[4]==1)
fragment.appendChild(document.createTextNode(`回复 HP ,每个觉醒回复自身回复力的${sk[5]/100}`));
else if (sk[4]==2)
fragment.appendChild(document.createTextNode(`提升所有属性的攻击力,每个觉醒可以提升${sk[5]-100}%`));
else if (sk[4]==3)
fragment.appendChild(document.createTextNode(`减少受到的伤害,每个觉醒可以减少${sk[5]}%`));
else
fragment.appendChild(document.createTextNode(`宝石姬技能未知buff类型 参数[4]${sk[4]}`));
return fragment;
str = `${sk[0]?`${sk[0]}回合内,`:""}根据队伍内觉醒技能 ${strArr.filter(s=>s>0).map(s=>awokenN(s)).join("、")} 的数目`;
if (sk[4]==1)
str += `回复 HP ,每个觉醒回复自身回复力的${sk[5]/100}`;
@ -1033,21 +1101,34 @@ function parseSkillDescription(skill)
str = `${sk[0]}回合内敌人的${strArr.join("、")}无效化`;
break;
case 175: //隊員編成均為「マガジン」合作活動角色時所有寵物的攻擊力8倍
str = `队员组成全是`;
strArr = sk.slice(0,3).filter(s=>s>0); //最多3种id
str += strArr.map(s=>{
return `<a class="detail-search monster-collabId" data-collabId="${s}" onclick="searchColla(this.getAttribute('data-collabId'));">${s}</a>`;
}).join("、");
str += `合作角色时,所有宠物的${getFixedHpAtkRcvString({hp:sk[3],atk:sk[4],rcv:sk[5]})}`;
let needCollabs = sk.slice(0,3).filter(s=>s>0); //最多3种id
fragment.appendChild(document.createTextNode(`队员组成全是`));
//搜索并显示合作
function searchCollab(event) {
const collabId = parseInt(this.getAttribute('data-collabId'), 10);
showSearch(Cards.filter(card => card.collabId == collabId));
}
needCollabs.forEach((cid,idx,arr)=>{
const lnk = fragment.appendChild(document.createElement("a"));
lnk.className ="detail-search monster-collabId";
lnk.setAttribute("data-collabId",cid);
lnk.onclick = searchCollab;
lnk.textContent = cid;
if (idx < arr.length-1) lnk.insertAdjacentText('afterend', "、");;
});
fragment.appendChild(document.createTextNode(`合作角色时,所有宠物的${getFixedHpAtkRcvString({hp:sk[3],atk:sk[4],rcv:sk[5]})}`));
return fragment;
break;
case 176:
//●◉○◍◯
var table = [sk[0],sk[1],sk[2],sk[3],sk[4]];
str = `以如下形状生成${attrN(sk[5])}宝珠<br>`;
str += table.map(r=>{
const line = new Array(6).fill(null).map((a,i)=> (1<<i & r) ? "●":"○");
return line.join("");
}).join("<br>");
//var data = [sk[0],sk[1],sk[2],sk[3],sk[4]].map(flag=>new Array(6).fill(null).map((a,i)=> (1<<i & flag) ? sk[5] : null));
//var table = createBoard([sk[0],sk[1],sk[2],sk[3],sk[4]], sk[5]);
var table = createBoard([sk[0],sk[1],sk[2],sk[3],sk[4]], sk[5]);
table.classList.add("fixed-shape-orb");
fragment.appendChild(table);
return fragment;
break;
case 177:
/*
@ -1213,15 +1294,33 @@ function parseSkillDescription(skill)
if (sk[5]) str += `,追加${sk[5]}点固定伤害`;
break;
case 202:
str = `变身为${cardN(sk[0])}`;
fragment.appendChild(document.createTextNode("变身为"));
let cardDom = cardN(sk[0]);
cardDom.monDom.onclick = changeToIdInSkillDetail;
fragment.appendChild(cardDom);
return fragment;
break;
case 203:
str = `队员组成全是`;
if (sk[0] === 0) str += "像素进化";
else if (sk[0] === 2)str += "转生或超转生";
else str += "未知新类型";
str += `时,`;
str += "宠物的" + getFixedHpAtkRcvString({hp:sk[1],atk:sk[2],rcv:sk[3]});
fragment.appendChild(document.createTextNode(`队员组成全是`));
const lnk = fragment.appendChild(document.createElement("a"));
lnk.className ="detail-search";
if (sk[0] === 0)
{
lnk.textContent = "像素进化";
lnk.onclick = function(){
showSearch(Cards.filter(card=>card.evoMaterials.includes(3826)));
};
}else if (sk[0] === 2)
{
lnk.textContent = "转生或超转生";
lnk.onclick = function(){
showSearch(Cards.filter(card=>isReincarnated(card)));
};
}else
lnk.textContent = "未知新类型";
fragment.appendChild(document.createTextNode(`时,所有宠物的${getFixedHpAtkRcvString({hp:sk[1],atk:sk[2],rcv:sk[3]})}`));
return fragment;
break;
case 205:
str = `${sk[1]}回合内,${getOrbsAttrString(sk[0])}宝珠会以锁定形式掉落`;
@ -3235,7 +3334,7 @@ function parseBigNumber(number)
return subskills.some(subskill=>subskill.type == searchType);
}
})},
{name:"变身后",function:cards=>cards.filter(card=>card.henshinTo)},
{name:"变身后",function:cards=>cards.filter(card=>card.henshinFrom)},
{name:"变身前后队长技保持不变",function:cards=>cards.filter(card=>{
const searchType = 202;
const skill = Skills[card.activeSkillId];

View File

@ -235,6 +235,12 @@
.control-box .btn-swap-ABC-team::before{
content: "🔄轮换ABC队";
}
.control-box .btn-swap-henshin::before{
content: "🐱➡️🐯最终变身";
}
.control-box .btn-swap-henshin.henshin-back::before{
content: "🐱↩️🐯变身前";
}
.control-box .show-mon-id-lbl::after{
content:"🆔显示怪物ID";
}

View File

@ -42,6 +42,7 @@ var formation = new Formation(teamsCount,5);
<button class="btn-solo-link" onclick="turnPage(1,arguments[0]);"></button>
<button class="btn-triple-link" onclick="turnPage(3,arguments[0]);"></button>
<button class="btn-swap-AB-team" onclick="swapABCteam();"></button>
<button class="btn-swap-henshin" onclick="swapHenshin(this);"></button>
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
</div>
<div>

View File

@ -452,15 +452,16 @@ function cardN(id){
monOuterDom.className = "detail-mon";
const monDom = createCardA(id);
monOuterDom.appendChild(monDom);
monOuterDom.monDom = monDom;
changeid({id:id},monDom);
return monOuterDom.outerHTML;
return monOuterDom;
}
//将怪物的文字介绍解析为HTML
function descriptionToHTML(str)
{
str = str.replace(/\n/ig,"<br>"); //换行
str = str.replace(/\^([a-fA-F0-9]+?)\^([^\^]+?)\^p/igm,'<span style="color:#$1;">$2</span>'); //文字颜色
str = str.replace(/\%\{m([0-9]{1,4})\}/g,function (str, p1, offset, s){return cardN(parseInt(p1,10));}); //怪物头像
str = str.replace(/\%\{m([0-9]{1,4})\}/g,function (str, p1, offset, s){return cardN(parseInt(p1,10)).outerHTML;}); //怪物头像
return str;
}
//默认的技能解释的显示行为

View File

@ -297,20 +297,83 @@ function toggleDomClassName(checkBox, className, checkedAdd = true, dom = docume
}
}
//清除数据
function clearData() {
function clearData()
{
const locationURL = new URL(location);
locationURL.searchParams.delete('d'); //删除数据
locationURL.searchParams.delete('l'); //删除语言
location = locationURL.toString();
}
//轮换ABC队伍
function swapABCteam() {
function swapABCteam()
{
if (formation.teams.length > 1) {
formation.teams.push(formation.teams.splice(0, 1)[0]); //将队伍1移动到最后
creatNewUrl();
refreshAll(formation);
}
}
function swapHenshin(self)
{
const backClassName = "henshin-back";
const back = self.classList.contains(backClassName);
let shouldChange = formation.teams.some(team=>
team[0].some(member=>{
const mid = member.id;
const card = Cards[mid];
return card.henshinFrom || card.henshinTo;
})
);
//获得最终变身
function finalHenshin(card)
{
if (card.henshinTo)
{ //是变身的则返回
if (card.evoRootId === card.henshinTo)
{ //应对无限循环变身的问题
return card;
}
return finalHenshin(Cards[card.henshinTo]);
}
return card;
}
if (shouldChange)
{
if (back)
{ //回到变身前
formation.teams.forEach(team=>{
team[0].forEach(member=>{
const mid = member.id;
const card = Cards[mid];
if (card.henshinFrom && member.level <= 99)
{ //要变身后的才进行操作
const _card = Cards[card.evoRootId];
member.id = card.evoRootId;
member.awoken = _card.awakenings.length;
}
});
});
self.classList.remove(backClassName);
}else
{ //跑到变身后
formation.teams.forEach(team=>{
team[0].forEach(member=>{
const mid = member.id;
const card = Cards[mid];
if (card.henshinTo)
{ //要变身前的才进行操作
const _card = finalHenshin(card);
member.id = _card.id;
member.awoken = _card.awakenings.length;
}
});
});
self.classList.add(backClassName);
}
creatNewUrl();
refreshAll(formation);
}
}
//在单人和多人之间转移数据
function turnPage(toPage, e = null) {
let pagename = null;
@ -540,10 +603,11 @@ function loadData(force = false)
const linkRes = new RegExp("link:(\\d+)", "ig").exec(m.specialAttribute);
if (linkRes) { //每个有链接的符卡,把它们被链接的符卡的进化根修改到链接前的
const _m = Cards[parseInt(linkRes[1], 10)];
const toId = parseInt(linkRes[1], 10);
const _m = Cards[toId];
_m.evoRootId = m.evoRootId;
m.henshinFrom = true;
_m.henshinTo = true;
m.henshinTo = toId;
_m.henshinFrom = m.id;
}
});
monstersList.appendChild(fragment);
@ -837,26 +901,28 @@ function initialize() {
mSeriesId.onclick = function() { //搜索系列
const seriesId = parseInt(this.getAttribute('data-seriesId'), 10);
if (seriesId > 0) {
showSearch(Cards.filter(card => { return card.seriesId == seriesId; }));
showSearch(Cards.filter(card => card.seriesId == seriesId));
}
};
const mCollabId = smonsterinfoBox.querySelector(".monster-collabId");
mCollabId.onclick = function() { //搜索合作
const collabId = parseInt(this.getAttribute('data-collabId'), 10);
if (collabId > 0); {
searchColla(collabId);
showSearch(Cards.filter(card => card.collabId == collabId));
}
};
const mAltName = smonsterinfoBox.querySelector(".monster-altName");
mAltName.onclick = function() { //搜索合作
const altName = this.getAttribute('data-altName');
const splitAltName = altName.split("|");
if (altName.length > 0); {
showSearch(Cards.filter(card => {
return splitAltName.some(alt => {
return alt.length > 0 && (card.altName.includes(alt) || card.name.includes(alt));
});
}));
if (altName.length > 0)
{
const splitAltName = altName.split("|");
showSearch(Cards.filter(card =>
splitAltName.some(alt =>
alt.length > 0 &&
(card.altName.includes(alt) || card.name.includes(alt))
)
));
}
};
//创建一个新的怪物头像
@ -2164,11 +2230,6 @@ function editBoxChangeMonId(id) {
editBox.reCalculateExp();
editBox.reCalculateAbility();
}
//搜索并显示合作
function searchColla(collabId) {
if (typeof(collabId) == "string") collabId = parseInt(collabId, 10);
showSearch(Cards.filter(card => { return card.collabId == collabId; }));
}
//刷新整个队伍
function refreshAll(formationData) {
let fragment = document.createDocumentFragment(); //创建节点用的临时空间

View File

@ -41,6 +41,7 @@ var formation = new Formation(teamsCount,6);
<a class="down-capture display-none" target="_blank"></a>
<button class="btn-multi-link" onclick="turnPage(2,arguments[0]);"></button>
<button class="btn-triple-link" onclick="turnPage(3,arguments[0]);"></button>
<button class="btn-swap-henshin" onclick="swapHenshin(this);"></button>
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
</div>
<div>

View File

@ -55,6 +55,7 @@ var formation = new Formation(teamsCount,6);
<button class="btn-solo-link" onclick="turnPage(1,arguments[0]);"></button>
<button class="btn-multi-link" onclick="turnPage(2,arguments[0]);"></button>
<button class="btn-swap-ABC-team" onclick="swapABCteam();"></button>
<button class="btn-swap-henshin" onclick="swapHenshin(this);"></button>
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
</div>
<div>