Browse Source

基本完善2人协力能力值的计算

tags/v8.0
枫谷剑仙 6 years ago
parent
commit
b4578da43d
3 changed files with 61 additions and 72 deletions
  1. +25
    -49
      script.js
  2. +3
    -1
      style.css
  3. +33
    -22
      universal_function.js

+ 25
- 49
script.js View File

@@ -51,6 +51,7 @@ Member.prototype.outObj = function(){
const skill = Skills[card.activeSkillId];
//有技能等级,并且技能等级低于最大等级时才记录技能
if (m.skilllevel != undefined && m.skilllevel < skill.maxLevel) obj[6] = m.skilllevel;
m.ability = [0,0,0];
return obj;
};
Member.prototype.loadObj = function(m,dataVersion){
@@ -80,7 +81,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];
this.skilllevel = m[6] || null;
};
//只用来防坐的任何队员
var MemberDelay = function(){
@@ -167,11 +168,11 @@ Formation.prototype.loadObj= function(f){
this.badge = f.b ? f.b : 0; //徽章
const teamArr = dataVeision>1 ? f.f : f.team;
this.teams.forEach(function(t,ti){
var tf = teamArr[ti] || [];
let tf = teamArr[ti] || [];
t.forEach(function(st,sti){
var fst = tf[sti] || [];
let fst = tf[sti] || [];
st.forEach(function(m,mi){
var fm = fst[mi];
let fm = fst[mi];
m.loadObj(fm,dataVeision);
});
});
@@ -1868,23 +1869,13 @@ function refreshAbility(abilityDom,team,idx){
const bonusScale = [0.1,0.05,0.15]; //辅助宠物附加的属性倍率
//基底三维,如果辅助是武器,还要加上辅助的觉醒
const mainAbility = calculateAbility(memberData, assistData, solo);
if (mainAbility)
{
//辅助增加的三维,如果辅助的主属性相等,辅助宠物只计算等级和加值,不计算觉醒
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)
{
for (let ai=0;ai<3;ai++)
{
memberData.ability[ai] = mainAbility[ai];
if (assistAbility) memberData.ability[ai] += Math.round(assistAbility[ai]*bonusScale[ai]);
}
}
}
if (!abilityDom) return; //如果没有dom,直接跳过
const abilityLi = abilityDom.querySelector(".abilitys-" + (idx+1));
const hpDom = abilityLi.querySelector(".hp");
@@ -1957,52 +1948,37 @@ function refreshFormationTotalHP(totalDom, teams){
const tHpDom = totalDom.querySelector(".tIf-total-hp");
const tRcvDom = totalDom.querySelector(".tIf-total-rcv");

const tHP = teams.reduce(function(value, team){
const tHPArr = teams.map(function(team){
const teamTHP = team[0].reduce(function(value,mon){ //队伍计算的总HP
return value += mon.ability ? mon.ability[0] : 0;
},0);
return value + teamTHP;
},0);

const teamHPAwoken = awokenCountInFormation(teams,46,solo); //全队大血包个数
const teamHPAwoken = awokenCountInTeam(team,46,solo); //全队大血包个数
return [teamTHP,teamHPAwoken];
});
const tHP = tHPArr.reduce(function(value, teamHP){
return [value[0] + teamHP[0], value[1] + Math.round(teamHP[0] * (1 + 0.05 * teamHP[1]))];
},[0,0]);
let badgeHPScale = 1; //徽章倍率
if (formation.badge == 4 && solo)
{
badgeHPScale = 1.05;
}else if (formation.badge == 11 && solo)
{
badgeHPScale = 1.15;
}
const tRCV = teams.reduce(function(value, team){
const tRCVArr = teams.map(function(team){
const teamTRCV = team[0].reduce(function(value,mon){ //队伍计算的总回复
return value += mon.ability ? mon.ability[2] : 0;
},0);
return value + teamTRCV;
const teamRCVAwoken = awokenCountInTeam(team,47,solo); //全队大回复个数
return [teamTRCV,teamRCVAwoken];
},0);
const teamRCVAwoken = awokenCountInFormation(teams,47,solo); //全队大回复个数
const tRCV = tRCVArr.reduce(function(value, teamRCV){
return [value[0] + teamRCV[0], value[1] + Math.round(teamRCV[0] * (1 + 0.10 * teamRCV[1]))];
},[0,0]);
let badgeRCVScale = 1; //徽章倍率
if (formation.badge == 3)
{
badgeRCVScale = 1.25;
}else if (formation.badge == 10)
{
badgeRCVScale = 1.35;
}
if (tHpDom)
{
tHpDom.innerHTML = tHP.toString() +
(teamHPAwoken>0||badgeHPScale!=1 ?
("("+Math.round(tHP * (1 + 0.05 * teamHPAwoken)*badgeHPScale).toString()+")") :
"");
tHpDom.innerHTML = tHP[0].toString() +
(tHP[0] != tHP[1] ? `(${tHP[1]})` : "");
}
if (tRcvDom)
{
tRcvDom.innerHTML = tRCV.toString() +
(teamRCVAwoken>0||badgeRCVScale!=1 ?
("("+Math.round(tRCV * (1 + 0.10 * teamRCVAwoken)*badgeRCVScale).toString()+")") :
"");
tRcvDom.innerHTML = tRCV[0].toString() +
(tRCV[0] != tRCV[1] ? `(${tRCV[1]})` : "");
}
}
//刷新单人技能CD
@@ -2024,12 +2000,12 @@ function refreshMemberSkillCD(teamDom,team,idx){
const assistSkillCd = assistSkill ? (assistSkill.initialCooldown - (assist.skilllevel||assistSkill.maxLevel) + 1) : 0;
memberSkillCdDom.innerHTML = memberSkillCd;
assistSkillCdDom.innerHTML = memberSkillCd + assistSkillCd;
if (member.skilllevel < memberSkill.maxLevel)
if (member.skilllevel && member.skilllevel < memberSkill.maxLevel)
{
memberSkillCdDom.classList.remove("max-skill");
assistSkillCdDom.classList.remove("max-skill");
}else if (assist.skilllevel < assistSkill.maxLevel){
}else if (assist.skilllevel && assist.skilllevel < assistSkill.maxLevel){
memberSkillCdDom.classList.add("max-skill");
assistSkillCdDom.classList.remove("max-skill");
}else


+ 3
- 1
style.css View File

@@ -115,13 +115,15 @@ ul{
border: none;
box-shadow: inset black 0 0 7px;
}
.member{
vertical-align: top;
}
.delay .monster{
background-color: yellow;
box-shadow: inset orange 0 0 7px;
border: 3px black solid;
}
.delay .monster::before{
display: block;
width: 94px;
height: 94px;
color: black;


+ 33
- 22
universal_function.js View File

@@ -153,6 +153,7 @@ function returnMonsterNameArr(card, lsList, defaultCode)
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];
@@ -161,9 +162,11 @@ function calculateAbility(member = null, assist = null, solo = true)
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 || card.enabled == false) return null;
*/
const memberCard = Cards[member.id];
const assistCard = assist ? Cards[assist.id] : null;
if (!memberCard || memberCard.id == 0 || !memberCard.enabled) return null;
//Code From pad-rikuu
function valueAt(level, maxLevel, curve) {
@@ -171,7 +174,7 @@ function calculateAbility(member = null, assist = null, solo = true)
return curve.min + (curve.max - curve.min) * Math.pow(f, curve.scale);
}
//Code From pad-rikuu
function curve(c, maxLevel, limitBreakIncr) {
function curve(c, level, maxLevel, limitBreakIncr) {
let value = valueAt(level, maxLevel, {
min: c.min,
max: c.max || (c.min * maxLevel),
@@ -184,6 +187,7 @@ function calculateAbility(member = null, assist = null, solo = true)
}
return value;
}
const bonusScale = [0.1,0.05,0.15]; //辅助宠物附加的属性倍率
const plusAdd = [10,5,3]; //加值的增加值
const awokenAdd = [ //对应加三维觉醒的序号与增加值
[{index:1,value:500},{index:65,value:-5000}], //HP
@@ -206,45 +210,52 @@ function calculateAbility(member = null, assist = null, solo = true)
[{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
];
if (monid == 4691){console.log(curve(card.hp, card.maxLevel, card.limitBreakIncr))}
const memberCurves = [memberCard.hp, memberCard.atk, memberCard.rcv];
const assistCurves = assistCard ? [assistCard.hp, assistCard.atk, assistCard.rcv] : null;
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]; //加值增加量
let awokenList = card.awakenings.slice(0,awoken); //储存点亮的觉醒
let abilitys = memberCurves.map((ab, idx)=>{
const n_base = Math.round(curve(ab, member.level, memberCard.maxLevel, memberCard.limitBreakIncr)); //等级基础三维
const n_plus = member.plus[idx] * plusAdd[idx]; //加值增加量
let n_assist_base = 0,n_assist_plus=0; //辅助的bonus
let awokenList = memberCard.awakenings.slice(0,member.awoken); //储存点亮的觉醒
//单人时增加超觉醒
if (solo && sawoken>=0)
if (solo && member.sawoken>=0)
{
awokenList = awokenList.concat(card.superAwakenings[sawoken]);
awokenList = awokenList.concat(memberCard.superAwakenings[member.sawoken]);
}
//如果有武器还要计算武器的觉醒
if (weaponId>0)
if (assistCard && assistCard.id > 0 && assistCard.enabled)
{
const weaponCard = Cards[weaponId]; //武器数据
if (weaponCard && weaponCard.enabled)
const assistAwokenList = assistCard.awakenings.slice(0, assist.awoken); //储存武器点亮的觉醒
if (assistAwokenList.indexOf(49)>=0) //49是武器觉醒,确认已经点亮了武器觉醒
{
awokenList = awokenList.concat(assistAwokenList);
}
if (memberCard.attrs[0] === assistCard.attrs[0])
{
const weaponAwokenList = weaponCard.awakenings.slice(0,weaponAwoken); //储存武器点亮的觉醒
if (weaponAwokenList.indexOf(49)>=0) //49是武器觉醒,确认已经点亮了武器觉醒
{awokenList = awokenList.concat(weaponAwokenList);}
n_assist_base = Math.round(curve(assistCurves[idx], assist.level, assistCard.maxLevel, assistCard.limitBreakIncr)); //辅助等级基础三维
n_assist_plus = assist.plus[idx] * plusAdd[idx]; //辅助加值增加量
}
}
//觉醒增加的数值
const n_awoken = awoken ?
const n_awoken = awokenList.length>0 ?
Math.round(awokenAdd[idx].reduce(function(previous,aw){
const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个觉醒的数量
return previous + aw.value * awokenCount; //那么多个觉醒的增加
if (awokenCount>0)
return previous + aw.value * awokenCount;
else
return previous;
},0)) :
0;
//潜觉增加的倍率
const n_latent = (latent && latent.length) ?
const n_latent = (member.latent && member.latent.length>0) ?
Math.round(latentScale[idx].reduce(function(previous,la){
const latentCount = latent.filter(function(l){return l==la.index;}).length; //每个潜觉的数量
const latentCount = member.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;
let reValue = n_base + n_plus + n_awoken + n_latent + (n_assist_base + n_assist_plus) * bonusScale[idx];
//协力觉醒的倍率
reValue = Math.round(awokenScale[idx].reduce(function(previous,aw){
const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个协力觉醒的数量


Loading…
Cancel
Save