diff --git a/multi.html b/multi.html index ea36e4ce..9022db17 100644 --- a/multi.html +++ b/multi.html @@ -26,6 +26,7 @@ var formation = new Formation(2,5);
+
@@ -732,6 +733,20 @@ var formation = new Formation(2,5);
  • +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    diff --git a/script.js b/script.js index 38134f76..ffc7ff64 100644 --- a/script.js +++ b/script.js @@ -29,8 +29,8 @@ var Member = function(){ this.id=0; }; Member.prototype.outObj = function(){ - var m = this; - var obj = [m.id]; + const m = this; + let obj = [m.id]; if (m.level != undefined) obj[1] = m.level; if (m.awoken != undefined) obj[2] = m.awoken; if (m.plus != undefined && m.plus instanceof Array && m.plus.length>=3 && (m.plus[0]+m.plus[1]+m.plus[2])!==0) @@ -45,6 +45,10 @@ Member.prototype.outObj = function(){ } if (m.latent != undefined && m.latent instanceof Array && m.latent.length>=1) obj[4] = m.latent; if (m.sawoken != undefined && m.sawoken>=0) obj[5] = m.sawoken; + const card = Cards[m.id]; //怪物固定数据 + const skill = Skills[card.activeSkillId]; + //有技能等级,并且技能等级低于最大等级时才记录技能 + if (m.skilllevel != undefined && m.skilllevel < skill.maxLevel) obj[6] = m.skilllevel; return obj; }; Member.prototype.loadObj = function(m,dataVersion){ @@ -74,6 +78,7 @@ Member.prototype.loadObj = function(m,dataVersion){ this.latent = dataVersion>1 ? m[4] : m.latent; if (!(this.latent instanceof Array)) this.latent = []; //如果潜觉不是数组,则改变 this.sawoken = dataVersion>1 ? m[5] : m.sawoken; + if (m[6] != undefined) this.skilllevel = m[6]; }; //只用来防坐的任何队员 var MemberDelay = function(){ @@ -180,6 +185,11 @@ function toggleShowMonId() { document.body.classList.toggle('not-show-mon-id'); } +//切换怪物技能CD显示 +function toggleShowMonSkillCd() +{ + document.body.classList.toggle('show-mon-skill-cd'); +} //清除数据 function clearData() { @@ -676,7 +686,6 @@ function initialize() //id搜索 const monstersID = settingBox.querySelector(".row-mon-id .m-id"); monstersID.onchange = function(){ - console.log(this.value); if (/^\d+$/.test(this.value)) { editBox.mid = parseInt(this.value, 10); @@ -894,6 +903,8 @@ function initialize() mon.id = parseInt(monstersID.value,10); const card = Cards[mon.id]; + const skill = Skills[card.activeSkillId]; + mon.level = parseInt(monEditLv.value,10); mon.awoken = editBox.awokenCount; if (card.superAwakenings.length) //如果支持超觉醒 @@ -927,9 +938,14 @@ function initialize() } } + const skillLevelNum = parseInt(skillLevel.value,10); + if (skillLevelNum < skill.maxLevel) + { + mon.skilllevel = skillLevelNum; + } changeid(mon,editBox.monsterBox,editBox.memberIdx[1] ? null : editBox.latentBox); - var formationAbilityDom = document.querySelector(".formation-box .formation-ability"); + const formationAbilityDom = document.querySelector(".formation-box .formation-ability"); if (formationAbilityDom) { refreshAbility( @@ -939,6 +955,10 @@ function initialize() refreshTotalAbility(formation.team[editBox.memberIdx[0]]); } refreshAwokenCount(formation.team); + + //刷新改队员的CD + const teamDom = document.querySelector(".formation-box .formation-" + (editBox.memberIdx[0]?"B":"A") + "-box"); + refreshSkillCD(teamDom,formation.team[editBox.memberIdx[0]],editBox.memberIdx[2]); creatNewUrl(); editBox.hide(); }; @@ -1153,6 +1173,7 @@ function changeid(mon,monDom,latentDom) fragment.appendChild(monDom); const monId = mon.id; const card = Cards[monId]; //怪物固定数据 + const skill = Skills[card.activeSkillId]; monDom.setAttribute("data-cardid", monId); //设定新的id if (monId<0) //如果是延迟 { @@ -1310,6 +1331,20 @@ function changeid(mon,monDom,latentDom) latentDom.classList.add("display-none"); } } + /* + const skillLv = monDom.querySelector(".skill"); + if (skillLv) //如果存在超觉醒的DOM且提供了超觉醒 + { + if (mon.skilllevel != undefined && mon.skilllevel < skill.maxLevel) + { + skillLv.classList.remove("display-none"); + skillLv.innerHTML = skill.initialCooldown - mon.skilllevel + 1; + }else + { + skillLv.classList.add("display-none"); + } + } + */ parentNode.appendChild(fragment); } //点击怪物头像,出现编辑窗 @@ -1361,7 +1396,14 @@ function editMon(AorB,isAssist,tempIdx) monEditAddAtk.value = mon.plus[1]; monEditAddRcv.value = mon.plus[2]; } - var btnDelay = editBox.querySelector(".button-delay"); + const btnDelay = editBox.querySelector(".button-delay"); + const skillLevel = editBox.querySelector(".row-mon-skill .skill-box .m-skill-level"); + if (mon.skilllevel) + { + skillLevel.value = mon.skilllevel; + } + skillLevel.onchange(); + if (!isAssist) { editBox.latent = mon.latent ? mon.latent.concat() : []; @@ -1389,7 +1431,6 @@ function editBoxChangeMonId(id) if (card.id == 0){ id = 0; } - console.log(card) const skill = Skills[card.activeSkillId]; const leaderSkill = Skills[card.leaderSkillId]; @@ -1522,7 +1563,6 @@ function editBoxChangeMonId(id) //将怪物的文字介绍解析为HTML function descriptionToHTML(str) { - console.log(str); str = str.replace("\n","
    "); str = str.replace(/\^(\w+)\^(.+)\^p/igm,'$2'); return str; @@ -1632,10 +1672,12 @@ function refreshAll(formationData){ formationData.team[0], ti); } + refreshSkillCD(formationA,formationData.team[0],ti); if (formationB) { changeid(formationData.team[1][0][ti],fBTeam[ti],fBLatents[ti]); changeid(formationData.team[1][1][ti],fBAssist[ti]); + refreshSkillCD(formationB,formationData.team[1],ti); } } formationBox.appendChild(fragment); @@ -1691,17 +1733,18 @@ function refreshAwokenCount(teams){ awokenTotalBox.appendChild(awokenUL); } //刷新能力值 -function refreshAbility(dom,team,idx){ - const ali = dom.querySelector(".abilitys-" + (idx+1)); +function refreshAbility(abilityDom,team,idx){ + const ali = abilityDom.querySelector(".abilitys-" + (idx+1)); const mainMD = team[0][idx]; const assistMD = team[1][idx]; const bonusScale = [0.1,0.05,0.15]; //辅助宠物附加的属性倍率 //基底三维,如果辅助是武器,还要加上辅助的觉醒 const mainAbility = calculateAbility(mainMD.id,mainMD.level,mainMD.plus,mainMD.awoken,mainMD.latent,assistMD.id,assistMD.awoken); //辅助增加的三维,如果辅助的主属性相等,辅助宠物只计算等级和加值,不计算觉醒 - const mainCard = Cards[mainMD.id] || Cards[0]; + const memberCard = Cards[mainMD.id] || Cards[0]; const assistCard = Cards[assistMD.id] || Cards[0]; - const assistAbility = (assistMD.id > 0 && mainCard.attrs[0]==assistCard.attrs[0]) ? + + const assistAbility = (assistMD.id > 0 && memberCard.attrs[0]==assistCard.attrs[0]) ? calculateAbility(assistMD.id,assistMD.level,assistMD.plus,null,null) : [0,0,0]; if (mainAbility && mainMD.ability) @@ -1768,4 +1811,96 @@ function refreshTotalAbility(team){ (teamRCVAwoken>0||badgeRCVScale>1 ? ("("+Math.round(tRCV * (1 + 0.10 * teamRCVAwoken)*badgeRCVScale).toString()+")") : ""); -} \ No newline at end of file +} +//刷新能力值合计 +function refreshTotalAbility(team){ + //计算总的生命值 + const formationBox = document.querySelector(".formation-box"); + const teamInfo = formationBox.querySelector(".team-info"); + if (!teamInfo) return; + const tHpDom = teamInfo.querySelector(".tIf-total-hp"); + const tRcvDom = teamInfo.querySelector(".tIf-total-rcv"); + const tHP = team[0].reduce(function(value,mon){ //队伍计算的总HP + return value += mon.ability ? mon.ability[0] : 0; + },0); + const teamHPAwoken = awokenCountInTeam(team,46,solo); //全队血包个数 + //let tHPwithAwoken = Math.round(tHP * (1 + awokenCountInTeam(team,46,solo) * 0.05)); //全队血包 + let badgeHPScale = 1; //徽章倍率 + if (formation.badge == 4) + { + badgeHPScale = 1.05; + }else if (formation.badge == 11) + { + badgeHPScale = 1.15; + } + const tRCV = team[0].reduce(function(value,mon){ //队伍计算的总回复 + return value += mon.ability ? mon.ability[2] : 0; + },0); + const teamRCVAwoken = awokenCountInTeam(team,47,solo); //全队回复个数 + //let tRCVwithAwoken = Math.round(tRCV * (1 + awokenCountInTeam(team,47,solo) * 0.10)); //全队回复 + let badgeRCVScale = 1; //徽章倍率 + if (formation.badge == 3) + { + badgeRCVScale = 1.25; + }else if (formation.badge == 10) + { + badgeRCVScale = 1.35; + } + tHpDom.innerHTML = tHP.toString() + + (teamHPAwoken>0||badgeHPScale>1 ? + ("("+Math.round(tHP * (1 + 0.05 * teamHPAwoken)*badgeHPScale).toString()+")") : + ""); + tRcvDom.innerHTML = tRCV.toString() + + (teamRCVAwoken>0||badgeRCVScale>1 ? + ("("+Math.round(tRCV * (1 + 0.10 * teamRCVAwoken)*badgeRCVScale).toString()+")") : + ""); +} +//刷新技能CD +function refreshSkillCD(teamDom,team,idx){ + const memberMonDom = teamDom.querySelector(".formation-team .member-" + (idx+1) + " .monster"); + const assistMonDom = teamDom.querySelector(".formation-assist .member-" + (idx+1) + " .monster"); + const member = team[0][idx]; + const assist = team[1][idx]; + + const memberCard = Cards[member.id] || Cards[0]; + const memberSkill = Skills[memberCard.activeSkillId]; + const assistCard = Cards[assist.id] || Cards[0]; + const assistSkill = Skills[assistCard.activeSkillId]; + + const memberSkillCdDom = memberMonDom.querySelector(".skill"); + const assistSkillCdDom = assistMonDom.querySelector(".skill"); + + const memberSkillCd = memberSkill ? (memberSkill.initialCooldown - (member.skilllevel||memberSkill.maxLevel) + 1) : 0; + const assistSkillCd = assistSkill ? (assistSkill.initialCooldown - (assist.skilllevel||assistSkill.maxLevel) + 1) : 0; + memberSkillCdDom.innerHTML = memberSkillCd; + assistSkillCdDom.innerHTML = memberSkillCd + assistSkillCd; + + if (member.skilllevel < memberSkill.maxLevel) + { + memberSkillCdDom.classList.remove("max-skill"); + assistSkillCdDom.classList.remove("max-skill"); + }else if (assist.skilllevel < assistSkill.maxLevel){ + memberSkillCdDom.classList.add("max-skill"); + assistSkillCdDom.classList.remove("max-skill"); + }else + { + memberSkillCdDom.classList.add("max-skill"); + assistSkillCdDom.classList.add("max-skill"); + } + + //没有技能时 + if (memberSkill.id == 0) + { + memberSkillCdDom.classList.add("display-none"); + }else + { + memberSkillCdDom.classList.remove("display-none"); + } + if (assistSkill.id == 0) + { + assistSkillCdDom.classList.add("display-none"); + }else + { + assistSkillCdDom.classList.remove("display-none"); + } +} diff --git a/solo.html b/solo.html index c4969e7a..2662f72b 100644 --- a/solo.html +++ b/solo.html @@ -31,6 +31,7 @@ var formation = new Formation(1,6);
    +
    diff --git a/style.css b/style.css index 1cb7f309..58039ae1 100644 --- a/style.css +++ b/style.css @@ -143,7 +143,6 @@ ul{ position: absolute; left:10px; } - .null .monster>div,.delay .monster>div{ display:none; } @@ -247,6 +246,25 @@ ul{ /*.monster .id::before{ content: "No."; }*/ +.monster .skill::before{ + content:"CD"; + font-size: 10px; +} +.monster .skill{ + font-size: 13px; + line-height: 13px; + color:white; + text-shadow: black 0 0 1px,black 0 0 2px, black 2px 2px 0; + position: absolute; + right:3px; + bottom:0; +} +.monster .skill.max-skill{ + display: none; +} +.show-mon-skill-cd .monster .skill.max-skill{ + display: block; +} /*辅助和队伍的每一只框架*/ .member, .acquisitus-awoken-icon{ display: block; @@ -1035,9 +1053,16 @@ ul{ /*.control-box .btn-show-mon-id::before{ content: "隐藏怪物ID"; } -.not-show-mon-id .control-box .btn-show-mon-id::before{ +.not-show-mon-id .control-box .btn-show-mon-skill-cd::before{ content: "显示怪物ID"; -}*/ +} +*/ +.show-mon-skill-cd .control-box .btn-show-mon-skill-cd::before{ + content: "⬜隐藏已满技能CD"; +} +.control-box .btn-show-mon-skill-cd::before{ + content: "💿显示已满技能CD"; +} #interchange-line{ pointer-events: none; position: absolute;