From 4e127067d67b7cd438fdfc4d81c4e17d43f8dff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Sun, 26 Jan 2020 16:05:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=A5=BD=E5=8D=95=E4=BA=BA?= =?UTF-8?q?=E7=9A=84=E8=83=BD=E5=8A=9B=E5=80=BC=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script.js | 71 ++++++++++++++++++++---------------- universal_function.js | 85 +++++++++++++++++++++++++++++++++---------- 2 files changed, 106 insertions(+), 50 deletions(-) diff --git a/script.js b/script.js index 6604a7be..ff450631 100644 --- a/script.js +++ b/script.js @@ -905,7 +905,7 @@ function initialize() }; }); - //重新计算怪物的能力 + //编辑界面重新计算怪物的能力 function reCalculateAbility(){ const monid = parseInt(monstersID.value || 0, 10); const level = parseInt(monEditLv.value || 0, 10); @@ -916,7 +916,14 @@ function initialize() parseInt(monEditAddRcv.value || 0, 10) ]; const latent = editBox.latent; - const abilitys = calculateAbility(monid,level,plus,awoken,latent) || [0,0,0]; + const tempMon = { + id:monid, + level:level, + plus:plus, + awoken:awoken, + latent:latent + } + const abilitys = calculateAbility(tempMon, null, true) || [0,0,0]; monEditHpValue.innerHTML = abilitys[0]; monEditAtkValue.innerHTML = abilitys[1]; @@ -943,6 +950,7 @@ function initialize() const mon = editBox.isAssist?new MemberAssist():new MemberTeam(); const teamData = formation.teams[editBox.memberIdx[0]]; const teamBigBox = teamBigBoxs[editBox.memberIdx[0]]; + const teamBox = teamBoxs[editBox.memberIdx[0]]; teamData[editBox.memberIdx[1]][editBox.memberIdx[2]] = mon; @@ -993,7 +1001,7 @@ function initialize() const teamAbilityDom = teamBigBox.querySelector(".team-ability"); if (teamAbilityDom) { - refreshAbility(teamAbilityDom, formation.teams[editBox.memberIdx[0]], editBox.memberIdx[2]); //本人能力值 + refreshAbility(teamAbilityDom, teamData, editBox.memberIdx[2]); //本人能力值 const teamTotalInfoDom = teamBigBox.querySelector(".team-total-info"); //队伍能力值合计 if (teamTotalInfoDom) refreshTeamTotalHP(teamTotalInfoDom,teamData); @@ -1005,11 +1013,9 @@ function initialize() const formationAwokenDom = formationBox.querySelector(".formation-awoken"); //所有队伍觉醒合计 if (formationAwokenDom) refreshFormationAwokenCount(formation.teams); } - refreshAwokenCount(formation.teams); //刷新改队员的CD - const teamDom = document.querySelector(".formation-box .formation-" + (editBox.memberIdx[0]?"B":"A") + "-box"); - refreshMemberSkillCD(teamDom,formation.teams[editBox.memberIdx[0]],editBox.memberIdx[2]); + refreshMemberSkillCD(teamBox,teamData,editBox.memberIdx[2]); creatNewUrl(); editBox.hide(); }; @@ -1022,9 +1028,10 @@ function initialize() } } }; - btnNull.onclick = function(){ - var mD = formation.teams[editBox.memberIdx[0]][editBox.memberIdx[1]][editBox.memberIdx[2]] = new Member(); - changeid(mD,editBox.monsterHead,editBox.latentBox); + btnNull.onclick = function(){ //空位置 + const mon = new Member(); + formation.teams[editBox.memberIdx[0]][editBox.memberIdx[1]][editBox.memberIdx[2]] = mon; + changeid(mon ,editBox.monsterHead, editBox.latentBox); var formationAbilityDom = document.querySelector(".formation-box .formation-ability"); if (formationAbilityDom) { @@ -1039,8 +1046,8 @@ function initialize() editBox.hide(); }; btnDelay.onclick = function(){ //应对威吓 - var mD = formation.teams[editBox.memberIdx[0]][editBox.memberIdx[1]][editBox.memberIdx[2]] = new MemberDelay(); - changeid(mD,editBox.monsterHead,editBox.latentBox); + const mon = new MemberDelay(); + changeid(mon, editBox.monsterHead, editBox.latentBox); var formationAbilityDom = document.querySelector(".formation-box .formation-ability"); if (formationAbilityDom) { @@ -1080,7 +1087,6 @@ function clickMonHead(e) let team = parseInt(this.getAttribute("data-team"),10); let assist = parseInt(this.getAttribute("data-assist"),10); let index = parseInt(this.getAttribute("data-index"),10); - console.log(team,assist,index) editMon(team,assist,index); return false; //没有false将会打开链接 } @@ -1728,7 +1734,7 @@ function refreshAll(formationData){ refreshMemberSkillCD(teamBox,teamData,ti); //技能CD if (teamAbilityDom) //角色能力值 { - refreshAbility(teamAbilityDom,teamData,ti); //本人能力值 + refreshAbility(teamAbilityDom, teamData, ti); //本人能力值 } } const teamTotalInfoDom = teamBigBox.querySelector(".team-total-info"); //队伍能力值合计 @@ -1843,34 +1849,37 @@ function refreshFormationAwokenCount(teams){ } //刷新能力值 function refreshAbility(abilityDom,team,idx){ - const ali = abilityDom.querySelector(".abilitys-" + (idx+1)); - const mainMD = team[0][idx]; - const assistMD = team[1][idx]; + const memberData = team[0][idx]; + const assistData = 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 memberCard = Cards[mainMD.id] || Cards[0]; - const assistCard = Cards[assistMD.id] || Cards[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) + const mainAbility = calculateAbility(memberData, assistData, solo); + if (mainAbility) { - for (let ai=0;ai<3;ai++) + //辅助增加的三维,如果辅助的主属性相等,辅助宠物只计算等级和加值,不计算觉醒 + const memberCard = Cards[memberData.id]; + const assistCard = Cards[assistData.id]; + + const assistAbility = (assistCard && assistCard.enabled && memberCard.attrs[0] === assistCard.attrs[0]) ? + calculateAbility(assistData, null, solo) : null; + if (mainAbility && memberData.ability) { - mainMD.ability[ai] = mainAbility[ai] + Math.round(assistAbility[ai]*bonusScale[ai]); + for (let ai=0;ai<3;ai++) + { + memberData.ability[ai] = mainAbility[ai]; + if (assistAbility) memberData.ability[ai] += Math.round(assistAbility[ai]*bonusScale[ai]); + } } } - const hpDom = ali.querySelector(".hp"); - const atkDom = ali.querySelector(".atk"); - const rcvDom = ali.querySelector(".rcv"); + const abilityLi = abilityDom.querySelector(".abilitys-" + (idx+1)); + const hpDom = abilityLi.querySelector(".hp"); + const atkDom = abilityLi.querySelector(".atk"); + const rcvDom = abilityLi.querySelector(".rcv"); [hpDom,atkDom,rcvDom].forEach(function(div,ai){ if (mainAbility) { div.classList.remove("display-none"); - div.innerHTML = mainMD.ability[ai]; + div.innerHTML = memberData.ability[ai]; }else { div.classList.add("display-none"); diff --git a/universal_function.js b/universal_function.js index 66dc4b50..627aee41 100644 --- a/universal_function.js +++ b/universal_function.js @@ -144,10 +144,21 @@ function returnMonsterNameArr(card, lsList, defaultCode) return monNameArr; } //计算怪物的能力 -function calculateAbility(monid = 0, level = 1, plus = [0,0,0], awoken = 0, latent = [], weaponId = null, weaponAwoken = null) +//function calculateAbility(monid = 0, level = 1, plus = [0,0,0], awoken = 0, latent = [], weaponId = null, weaponAwoken = null, solo = true) +function calculateAbility(member = null, assist = null, solo = true) { + if (!member) return null; + const monid = member.id || 0; + const level = member.level || 1; + const plus = member.plus || [0,0,0]; + const awoken = member.awoken || 0; + const latent = member.latent || []; + const sawoken = member.sawoken; + const weaponId = assist ? assist.id : null; + const weaponAwoken = assist ? assist.awoken : null; + const card = Cards[monid]; //怪物数据 - if (monid == 0 || card == undefined) return null; + if (monid == 0 || card == undefined || card.enabled == false) return null; //Code From pad-rikuu function valueAt(level, maxLevel, curve) { @@ -170,39 +181,75 @@ function calculateAbility(monid = 0, level = 1, plus = [0,0,0], awoken = 0, late } const plusAdd = [10,5,3]; //加值的增加值 const awokenAdd = [ //对应加三维觉醒的序号与增加值 - [{index:1,value:500},{index:65,value:-5000}], - [{index:2,value:100},{index:66,value:-1000}], - [{index:3,value:200},{index:67,value:-2000}] + [{index:1,value:500},{index:65,value:-5000}], //HP + [{index:2,value:100},{index:66,value:-1000}], //ATK + [{index:3,value:200},{index:67,value:-2000}] //RCV + ]; + const awokenScale = [ //对应比例加三维觉醒的序号与倍率值 + [], //HP + [], //ATK + [] //RCV ]; - const latentAdd = [ //对应加三维潜在觉醒的序号与增加比例 - [{index:1,scale:0.015},{index:12,scale:0.03},{index:25,scale:0.045}], - [{index:2,scale:0.01},{index:12,scale:0.02},{index:26,scale:0.03}], - [{index:3,scale:0.1},{index:12,scale:0.2},{index:27,scale:0.3}] + if (!solo) + { //协力时计算协力觉醒 + awokenScale.forEach(ab=>{ + ab.push({index:30,scale:1.5}); + }); + } + const latentScale = [ //对应加三维潜在觉醒的序号与增加比例 + [{index:1,scale:0.015},{index:12,scale:0.03},{index:25,scale:0.045}], //HP + [{index:2,scale:0.01},{index:12,scale:0.02},{index:26,scale:0.03}], //ATK + [{index:3,scale:0.1},{index:12,scale:0.2},{index:27,scale:0.3}] //RCV ]; var abilitys = [card.hp, card.atk, card.rcv].map((ab, idx)=>{ const n_base = Math.round(curve(ab, card.maxLevel, card.limitBreakIncr)); //等级基础三维 - const n_plus = plus[idx]*plusAdd[idx]; //加值增加量 + const n_plus = plus[idx] * plusAdd[idx]; //加值增加量 let awokenList = card.awakenings.slice(0,awoken); //储存点亮的觉醒 - if (weaponId>0) //如果有武器还要计算武器的觉醒 + //单人时增加超觉醒 + if (solo && sawoken>=0) { - const weaponAwokenList = Cards[weaponId].awakenings.slice(0,weaponAwoken); //储存武器点亮的觉醒 - if (weaponAwokenList.indexOf(49)>=0) //49是武器觉醒,确认已经点亮了武器觉醒 - {awokenList = awokenList.concat(weaponAwokenList);} + awokenList = awokenList.concat(card.superAwakenings[sawoken]); } - const n_awoken = awoken ? //觉醒增加的数值 + //如果有武器还要计算武器的觉醒 + if (weaponId>0) + { + const weaponCard = Cards[weaponId]; //武器数据 + if (weaponCard && weaponCard.enabled) + { + const weaponAwokenList = weaponCard.awakenings.slice(0,weaponAwoken); //储存武器点亮的觉醒 + if (weaponAwokenList.indexOf(49)>=0) //49是武器觉醒,确认已经点亮了武器觉醒 + {awokenList = awokenList.concat(weaponAwokenList);} + } + } + //觉醒增加的数值 + const n_awoken = awoken ? Math.round(awokenAdd[idx].reduce(function(previous,aw){ - const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个潜觉的数量 - return previous + aw.value * awokenCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数 + const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个觉醒的数量 + return previous + aw.value * awokenCount; //那么多个觉醒的增加 },0)) : 0; - const n_latent = (latent && latent.length) ? //潜觉增加的数值 - Math.round(latentAdd[idx].reduce(function(previous,la){ + //潜觉增加的倍率 + const n_latent = (latent && latent.length) ? + Math.round(latentScale[idx].reduce(function(previous,la){ const latentCount = latent.filter(function(l){return l==la.index;}).length; //每个潜觉的数量 return previous + n_base * la.scale * latentCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数 },0)) : 0; //console.log("基础值:%d,加蛋值:%d,觉醒x%d增加:%d,潜觉增加:%d",n_base,n_plus,awokenCount,n_awoken,n_latent); let reValue = n_base + n_plus + n_awoken + n_latent; + //协力觉醒的倍率 + reValue = Math.round(awokenScale[idx].reduce(function(previous,aw){ + const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个协力觉醒的数量 + if (awokenCount>0) + { + return previous * aw.scale * awokenCount; + } + else + { + return previous; + } + },reValue)); + if (idx<2 && reValue<1) reValue = 1; //HP和ATK最低为1 return reValue; });