Browse Source

调整好单人的能力值计算

tags/v5.0
枫谷剑仙 6 years ago
parent
commit
4e127067d6
2 changed files with 106 additions and 50 deletions
  1. +40
    -31
      script.js
  2. +66
    -19
      universal_function.js

+ 40
- 31
script.js View File

@@ -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");


+ 66
- 19
universal_function.js View File

@@ -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;
});


Loading…
Cancel
Save