Browse Source

加入editing这个记录正在编辑对象的功能

tags/v25.1
枫谷剑仙 3 years ago
parent
commit
19d9410c9b
4 changed files with 76 additions and 72 deletions
  1. +11
    -13
      script-skill-parser.js
  2. +13
    -21
      script-universal_function.js
  3. +47
    -33
      script.js
  4. +5
    -5
      service-worker.js

+ 11
- 13
script-skill-parser.js View File

@@ -1492,20 +1492,18 @@ const parsers = {
};
//将内容添加到代码片段
DocumentFragment.prototype.ap = function(arg)
DocumentFragment.prototype.ap = function(...args)
{
if (Array.isArray(arg)) //数组,递归自身
{
arg.forEach(element=>this.ap(element));
}
else if (arg instanceof Node) //属于Node的直接添加
{
this.appendChild(arg);
}
else //其他内容的转换为文字添加
{
this.appendChild(document.createTextNode(arg));
}
args.forEach(arg=>{
if (Array.isArray(arg)) //数组,递归自身
{
arg.forEach(item=>this.ap(item));
}
else //其他内容的转换为文字添加
{
this.append(arg);
}
}, this);
return this;
}


+ 13
- 21
script-universal_function.js View File

@@ -142,28 +142,19 @@ function tp(strings, ...keys) {
return (function(...values) {
let dict = values[values.length - 1] || {};
let fragment = document.createDocumentFragment();
fragment.appendChild(document.createTextNode(strings[0]));
//let result = [strings[0]];
fragment.append(strings[0]);
keys.forEach(function(key, i, arr) {
let value = Number.isInteger(key) ? values[key] : dict[key];
if (value == undefined)
if (value != undefined)
{
//console.debug("模板字符串中 %s 未找到输入数据",key);
}else
{
if (!(value instanceof Node)) //这里需要用 Node 而不是 HTMLElement,因为 DocumentFragment 从属于 Node
{
value = document.createTextNode(value);
}
try{
fragment.appendChild(arr.lastIndexOf(key) === i ? value : value.cloneNode(true)); //如果是最后一个匹配的标签,就插入原始的DOM(保留行为),否则插入克隆的DOM
fragment.append(arr.lastIndexOf(key) === i ? value : value.cloneNode(true)); //如果是最后一个匹配的标签,就插入原始的DOM(保留行为),否则插入克隆的DOM
}catch(e)
{
console.log(value, e);
console.log(keys, values);
console.log("模板字符串错误: %o,", e, values, keys, value);
}
}
fragment.appendChild(document.createTextNode(strings[i + 1]));
fragment.append(strings[i + 1]);
});
return fragment;
});
@@ -899,7 +890,7 @@ function parseSkillDescription(skill) {
//const span = document.createElement("span");
//span.innerHTML = descriptionToHTML(skill.description);
return descriptionToHTML(skill.description);
return descriptionToHTML(skill?.description);
}
//大数字缩短长度,默认返回本地定义字符串
function parseBigNumber(number) {
@@ -923,8 +914,8 @@ function getAllowLatent(card) {
//计算队伍中有多少血量
function countTeamHp(team, leader1id, leader2id, solo, noAwoken = false) {
let memberArr = team[0], assistArr = team[1];
const ls1 = Skills[(Cards[leader1id] || Cards[0]).leaderSkillId];
const ls2 = Skills[(Cards[leader2id] || Cards[0]).leaderSkillId];
const ls1 = Skills[(Cards[leader1id] || Cards[0])?.leaderSkillId];
const ls2 = Skills[(Cards[leader2id] || Cards[0])?.leaderSkillId];
const mHpArr = memberArr.map((member, idx) => {
const ability = noAwoken ? member.abilityNoAwoken : member.ability;
let hp = ability ? ability[0] : 0;
@@ -954,9 +945,9 @@ function countTeamHp(team, leader1id, leader2id, solo, noAwoken = false) {
}
return 1;
}
const sk = ls.params;
const sk = ls?.params;
let scale = 1;
switch (ls.type) {
switch (ls?.type) {
case 23:
case 30:
case 62:
@@ -1087,6 +1078,7 @@ function getCardActiveSkills(card, skillTypes, searchRandom = false) {
}
//查找到真正起作用的那一个技能
function getActuallySkills(skill, skillTypes, searchRandom = true) {
if (!skill) return [];
if (skillTypes.includes(skill.type))
{
return [skill];
@@ -1209,10 +1201,10 @@ function countTeamSB(team, solo) {
const assist = team[1][mi];
if (member.id < 0) continue;
const memberCard = henshinBase(member);
let enableAwoken = memberCard.awakenings.slice(0, member.awoken);
let enableAwoken = memberCard?.awakenings?.slice(0, member.awoken) || [];
//单人、3人时,大于等于100级且297时增加超觉醒
if ((solo || teamsCount === 3) && member.sawoken >= 0 && member.level >= 100 && member.plus.every(p=>p>=99)) {
const sAwokenT = memberCard.superAwakenings[member.sawoken];
const sAwokenT = memberCard?.superAwakenings?.[member.sawoken];
if (sAwokenT >= 0)
enableAwoken = enableAwoken.concat(sAwokenT);
}


+ 47
- 33
script.js View File

@@ -1250,13 +1250,9 @@ function loadData(force = false)
//重新读取URL中的Data数据并刷新页面
function reloadFormationData(event) {
let formationData;
if (event && event.state && event.state.outForm)
{
//直接使用现有数据
formationData = event.state.outForm;
//console.log("直接读取",formationData);
}else
if (!(formationData = event?.state?.outForm))
{
//如果没有现有数据
try {
const parameterDataString = getQueryString(["d","data"]);
formationData = JSON.parse(parameterDataString);
@@ -1292,6 +1288,21 @@ function reloadFormationData(event) {
showSearch(event.state.searchArr.map(id=>Cards[id]));
}
}
//编辑模式直接打开编辑框
let editingTarget = event?.state?.editing || ((str)=>{
try {
const arr = JSON.parse(str);
return (Array.isArray(arr) && arr.length >= 3 && arr.slice(0,3).every(n=>typeof n == "number")) ? arr : null;
} catch (error) {
return null;
}
})(getQueryString("editing"));
if (editingTarget)
{
editMon(editingTarget[0], editingTarget[1], editingTarget[2]);
} else {
editBox.hide();
}
}
window.addEventListener('popstate',reloadFormationData); //前进后退时修改页面
//创建新的分享地址
@@ -2376,7 +2387,7 @@ function initialize(event) {
const hpRangeMin = hpRange.appendChild(document.createElement("span"));
hpRangeMin.className = "hp-range-min";
hpRangeMin.textContent = range.min;
hpRange.appendChild(document.createTextNode(" ~ "));
hpRange.append(" ~ ");
const hpRangeMax = hpRange.appendChild(document.createElement("span"));
hpRangeMax.className = "hp-range-max";
hpRangeMax.textContent = range.max;
@@ -2393,11 +2404,11 @@ function initialize(event) {

if (range.probability < 1)
{
reduce.appendChild(document.createTextNode("("));
reduce.append("(");
const reduceProb = reduce.appendChild(document.createElement("span"));
reduceProb.className = "reduce-probability";
reduceProb.textContent = `${(range.probability * 100).toFixed(0)}`;
reduce.appendChild(document.createTextNode(")"));
reduce.append(")");
}

const reduceGeneral = reduceHpRow.insertCell();
@@ -2520,6 +2531,10 @@ function initialize(event) {
this.classList.add(className_displayNone);
formationBox.classList.remove("blur-bg");
controlBox.classList.remove("blur-bg");
//删除编辑模式,不改变页面
const locationURL = new URL(location);
locationURL.searchParams.delete('editing');
history.replaceState(null, null, locationURL);
};

const smonsterinfoBox = editBox.querySelector(".monsterinfo-box");
@@ -2752,11 +2767,7 @@ function initialize(event) {
const c_addition = cli.appendChild(document.createElement("div"));
c_addition.className = "custom-addition";
let content = func(card);
if (typeof content == "string" || typeof content == "number")
{
content = document.createTextNode(content);
}
content && c_addition.appendChild(content);
content && c_addition.append(content);
});
}

@@ -3500,7 +3511,7 @@ function initialize(event) {
skillLevel.onchange = function() {
const card = Cards[editBox.mid] || Cards[0]; //怪物固定数据
const skill = Skills[card.activeSkillId];
skillCD.textContent = skill.initialCooldown - this.value + 1;
skillCD.textContent = skill?.initialCooldown - this.value + 1;
};
skillLevel_1.ipt = skillLevel;
skillLevel_1.onclick = setIptToMyValue;
@@ -4058,6 +4069,11 @@ function editMon(teamNum, isAssist, indexInTeam) {
//数据
const mon = formation.teams[teamNum][isAssist][indexInTeam];

//传入编辑模式,不改变页面
const locationURL = new URL(location);
locationURL.searchParams.set('editing', JSON.stringify([teamNum, isAssist, indexInTeam]));
history.replaceState({editing: [teamNum, isAssist, indexInTeam]}, null, locationURL);

const teamBigBox = teamBigBoxs[teamNum];
const teamBox = teamBigBox.querySelector(".team-box");
const memberBox = teamBox.querySelector(isAssist ? ".team-assist" : ".team-members");
@@ -4283,17 +4299,17 @@ function editBoxChangeMonId(id) {
let frg1 = document.createDocumentFragment(); //创建节点用的临时空间
frg1.appendChild(skillBox);

skillTitle.textContent = activeskill.name;
skillTitle.setAttribute("data-skillid", activeskill.id);
skillTitle.textContent = activeskill?.name;
skillTitle.setAttribute("data-skillid", activeskill?.id);
skillDetailOriginal.innerHTML = "";
skillDetailOriginal.appendChild(parseSkillDescription(activeskill));

const t_maxLevel = card.overlay ? 1 : activeskill.maxLevel; //遇到不能升技的,最大等级强制为1
const t_maxLevel = card.overlay ? 1 : activeskill?.maxLevel; //遇到不能升技的,最大等级强制为1
skillLevel.max = t_maxLevel;
skillLevel.value = t_maxLevel;
skillLevel_Max.value = t_maxLevel;
//skillLevel_Max.textContent = activeskill.maxLevel;
skillCD.textContent = activeskill.initialCooldown - t_maxLevel + 1;
skillCD.textContent = activeskill?.initialCooldown - t_maxLevel + 1;

//怪物队长技能
const rowLederSkill = settingBox.querySelector(".row-mon-leader-skill");
@@ -4305,8 +4321,8 @@ function editBoxChangeMonId(id) {
let frg2 = document.createDocumentFragment(); //创建节点用的临时空间
frg2.appendChild(lskillBox);

lskillTitle.textContent = leaderSkill.name;
lskillTitle.setAttribute("data-skillid", leaderSkill.id);
lskillTitle.textContent = leaderSkill?.name;
lskillTitle.setAttribute("data-skillid", leaderSkill?.id);
lskillDetailOriginal.innerHTML = "";
lskillDetailOriginal.appendChild(parseSkillDescription(leaderSkill));

@@ -4355,9 +4371,7 @@ function refreshAll(formationData) {
const formationAwokenDom = formationBox.querySelector(".formation-awoken"); //所有队伍觉醒合计
const dungeonEnchanceDom = formationBox.querySelector(".dungeon-enchance"); //地下城强化

while (formationBox.childNodes.length > 0) {
fragment.appendChild(formationBox.childNodes[0]);
}
fragment.append(...formationBox.childNodes);

const txtTitle = titleBox.querySelector(".title");
const txtDetail = detailBox.querySelector(".detail");
@@ -4605,12 +4619,12 @@ function refreshMenberAwoken(menberAwokenDom, assistAwokenDom, team, idx) {
const memberCard = Cards[memberData.id] || Cards[0];
const assistCard = Cards[assistData.id] || Cards[0];
//队员觉醒
let menberAwokens = memberCard.awakenings.slice(0,memberData.awoken);
let menberAwokens = memberCard?.awakenings?.slice(0,memberData.awoken) || [];
//单人和三人为队员增加超觉醒
if ((solo || teamsCount === 3) &&
memberData.sawoken != null && //怪物设定了超觉醒
memberData.sawoken >= 0 && //怪物超觉醒编号大于0
memberCard.superAwakenings.length >= 0 && //卡片有超觉醒
memberCard?.superAwakenings?.length >= 0 && //卡片有超觉醒
memberData.level >= 100 && //怪物大于100级
memberData.plus.every(p=>p>=99) //怪物297了
) {
@@ -4618,8 +4632,8 @@ function refreshMenberAwoken(menberAwokenDom, assistAwokenDom, team, idx) {
}
//menberAwokens.sort();
//武器觉醒
let assistAwokens = assistCard.awakenings.slice(0,assistData.awoken);
if (!assistAwokens.includes(49)) assistAwokens = []; //清空非武器的觉醒
let assistAwokens = assistCard?.awakenings?.slice(0,assistData?.awoken);
if (!assistAwokens?.includes(49)) assistAwokens = []; //清空非武器的觉醒
//assistAwokens.sort();
/*if (assistAwokens.includes(49))
{
@@ -4834,7 +4848,7 @@ function refreshTeamTotalHP(totalDom, team, teamIdx) {
const rarityCount = team[0].slice(0,5).reduce((pre,member)=>{
if (member.id <= 0) return pre;
const card = Cards[member.id] || Cards[0];
return pre + card.rarity;
return pre + (card?.rarity ?? 0);
},0);
rarityDoms.setAttribute(dataAttrName, rarityCount);
}
@@ -5048,9 +5062,9 @@ function refreshMemberSkillCD(teamDom, team, idx) {
const assist = team[1][idx];

const memberCard = Cards[member.id] || Cards[0];
const memberSkill = Skills[memberCard.activeSkillId];
const memberSkill = Skills[memberCard?.activeSkillId];
const assistCard = Cards[assist.id] || Cards[0];
const assistSkill = Skills[assistCard.activeSkillId];
const assistSkill = Skills[assistCard?.activeSkillId];

const memberSkillCdDom = memberMonDom.querySelector(".skill-cd");
const assistSkillCdDom = assistMonDom.querySelector(".skill-cd");
@@ -5060,12 +5074,12 @@ function refreshMemberSkillCD(teamDom, team, idx) {
memberSkillCdDom.textContent = memberSkillCd;
assistSkillCdDom.textContent = memberSkillCd + assistSkillCd;

if (member.skilllevel != undefined && member.skilllevel < memberSkill.maxLevel) {
if (member?.skilllevel != undefined && member?.skilllevel < memberSkill?.maxLevel) {
memberSkillCdDom.classList.remove("max-skill");
} else {
memberSkillCdDom.classList.add("max-skill");
}
if (assist.skilllevel != undefined && assist.skilllevel < assistSkill.maxLevel) {
if (assist?.skilllevel != undefined && assist?.skilllevel < assistSkill?.maxLevel) {
assistSkillCdDom.classList.remove("max-skill");
} else {
assistSkillCdDom.classList.add("max-skill");


+ 5
- 5
service-worker.js View File

@@ -6047,7 +6047,7 @@ const cachesMap = new Map([
],
[
"multi.html",
"80dbae798d47c80ea85a16cc1d59de38"
"e18e48eb9c1ae0f38736582ab0e02d4e"
],
[
"script-custom_elements.js",
@@ -6059,15 +6059,15 @@ const cachesMap = new Map([
],
[
"script-skill-parser.js",
"e037dcf8114679968ddd88770411a28b"
"339597e08ba284485cb2207e2d8f6f78"
],
[
"script-universal_function.js",
"f0625fb4538d49510db46991032b1472"
"ab8eb5095c920772ff925a2c8fbbf069"
],
[
"script.js",
"df4625d20571646d6bf151e1da4e6dee"
"77f22488ac4b3fdc02507d25dfc41251"
],
[
"solo.html",
@@ -6087,7 +6087,7 @@ const cachesMap = new Map([
],
[
"triple.html",
"7efa50aa0483859147e7879cc20e6808"
"85818d0e5c2f518efbda39f02a2968e1"
],
[
"languages/en.css",


Loading…
Cancel
Save