Merge branch 'dev'
This commit is contained in:
commit
a6ea068a0e
|
@ -385,13 +385,13 @@ function parseSkillDescription(skill)
|
|||
str = "全画面的宝珠变成" + strArr.map(o=>attrN(o)).join("、");
|
||||
break;
|
||||
case 73:
|
||||
str = `${getAttrTypeString(flags(sk[0]),flags(sk[1]))}宠物的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[2]})}`;
|
||||
str = `${getAttrTypeString([sk[0]],[sk[1]])}宠物的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[2]})}`;
|
||||
break;
|
||||
case 75:
|
||||
str = `${getAttrTypeString(flags(sk[0]),flags(sk[1]))}宠物的${getFixedHpAtkRcvString({atk:sk[2],rcv:sk[2]})}`;
|
||||
str = `${getAttrTypeString([sk[0]],[sk[1]])}宠物的${getFixedHpAtkRcvString({atk:sk[2],rcv:sk[2]})}`;
|
||||
break;
|
||||
case 76:
|
||||
str = `${getAttrTypeString(flags(sk[0]),flags(sk[1]))}宠物`;
|
||||
str = `${getAttrTypeString([sk[0]],[sk[1]])}宠物`;
|
||||
if (sk[2] || sk[3] || sk[4]) str += `的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[2],rcv:sk[2]})}`;
|
||||
break;
|
||||
case 84:
|
||||
|
@ -481,6 +481,7 @@ function parseSkillDescription(skill)
|
|||
str = `根据余下 HP 对敌方${sk[0] || "全"}体造成${attrN(sk[1])}属性伤害(100% HP 时为自身攻击力×${sk[2]/100}倍,1 HP 时为自身攻击力×${sk[3]/100}倍)`;
|
||||
break;
|
||||
//case 111: 在45
|
||||
//case 114: 在29
|
||||
case 115:
|
||||
str = `对敌方1体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害,并回复伤害${sk[2]}%的 HP `;
|
||||
break;
|
||||
|
|
|
@ -259,6 +259,9 @@
|
|||
.formation-total-info .tIf-total-rcv::before{
|
||||
content: "总回复(队伍觉醒和徽章):";
|
||||
}
|
||||
.formation-box::before {
|
||||
content: "▼HP计算队长技倍率能功能测试中,请反馈";
|
||||
}
|
||||
|
||||
.setting-box .row-mon-id .open-search::before{
|
||||
content: "简易搜索";
|
||||
|
|
|
@ -504,4 +504,112 @@ function parseSkillDescription(skill)
|
|||
function parseBigNumber(number)
|
||||
{
|
||||
return number.toLocaleString();
|
||||
}
|
||||
//计算队伍中有多少血量
|
||||
function countTeamHp(memberArr, leader1id, leader2id, solo)
|
||||
{
|
||||
const ls1 = Skills[Cards[leader1id].leaderSkillId];
|
||||
const ls2 = Skills[Cards[leader2id].leaderSkillId];
|
||||
const mHpArr = memberArr.map(m=>{
|
||||
let hp = m.ability ? m.ability[0] : 0;
|
||||
if (!hp) return 0;
|
||||
const card = Cards[m.id];
|
||||
hp *= memberHpMul(card,ls1,memberArr,solo);
|
||||
hp *= memberHpMul(card,ls2,memberArr,solo);
|
||||
return hp;
|
||||
});
|
||||
|
||||
console.log(mHpArr);
|
||||
|
||||
function memberHpMul(card,ls,memberArr,solo)
|
||||
{
|
||||
function flags(num){
|
||||
const arr = [];
|
||||
for (let i = 0; i<32;i++)
|
||||
{
|
||||
if (num & (1<<i))
|
||||
{
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
function hpMul(parm,scale)
|
||||
{
|
||||
if (scale == undefined || scale == 0) return 1;
|
||||
if (parm.attrs && card.attrs.some(a => parm.attrs.includes(a)))
|
||||
{
|
||||
return scale / 100;
|
||||
}
|
||||
if (parm.types && card.types.some(t => parm.types.includes(t)))
|
||||
{
|
||||
return scale / 100;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
const sk = ls.params;
|
||||
let scale = 1;
|
||||
switch (ls.type)
|
||||
{
|
||||
case 23: case 30: case 62: case 77: case 63: case 65:
|
||||
scale = hpMul({types:sk.slice(0,sk.length-1)}, sk[sk.length-1]);
|
||||
break;
|
||||
case 29: case 114: case 45: case 111: case 46: case 48: case 67:
|
||||
scale = hpMul({attrs:sk.slice(0,sk.length-1)}, sk[sk.length-1]);
|
||||
break;
|
||||
case 73: case 76:
|
||||
scale = hpMul({attrs:sk[0],types:sk[1]}, sk[2]);
|
||||
break;
|
||||
case 106: case 107: case 108:
|
||||
scale = sk[0] / 100;
|
||||
break;
|
||||
case 121: case 129: case 163: case 186:
|
||||
scale = hpMul({attrs:flags(sk[0]),types:flags(sk[1])}, sk[2]);
|
||||
break;
|
||||
case 125: //队伍中必须有指定队员
|
||||
const needMonIdArr = sk.slice(0,5).filter(s=>s>0);
|
||||
const memberIdArr = memberArr.map(m=>m.id);
|
||||
scale = needMonIdArr.every(mid=>memberIdArr.includes(mid)) ? sk[5]/100 : 1;
|
||||
break;
|
||||
case 136:
|
||||
scale = hpMul({attrs:flags(sk[0])}, sk[1]) *
|
||||
sk[4]? hpMul({attrs:flags(sk[4])}, sk[5]) : 1;
|
||||
break;
|
||||
case 137:
|
||||
scale = hpMul({types:flags(sk[0])}, sk[1]) *
|
||||
sk[4]? hpMul({types:flags(sk[4])}, sk[5]) : 1;
|
||||
break;
|
||||
case 155:
|
||||
scale = solo ? 1 : hpMul({attrs:flags(sk[0]),types:flags(sk[1])}, sk[2]);
|
||||
break;
|
||||
case 158:
|
||||
scale = hpMul({attrs:flags(sk[1]),types:flags(sk[2])}, sk[4]);
|
||||
break;
|
||||
case 175: //队伍组成全为合作
|
||||
const needCollabIdIdArr = sk.slice(0,3).filter(s=>s>0);
|
||||
const memberCollabIdArr = memberArr.map(m=>Cards[m.id].collabId);
|
||||
scale = memberCollabIdArr.every(cid=>needCollabIdIdArr.includes(cid)) ? sk[3]/100 : 1;
|
||||
break;
|
||||
case 178: case 185:
|
||||
scale = hpMul({attrs:flags(sk[1]),types:flags(sk[2])}, sk[3]);
|
||||
break;
|
||||
case 203:
|
||||
switch (sk[0])
|
||||
{
|
||||
case 0: //全是像素进化
|
||||
scale = memberArr.map(m=>Cards[m.id].evoMaterials).every(ems=>ems.includes(3826)) ? sk[1]/100 : 1;
|
||||
break;
|
||||
case 2: //全是转生、超转生(8格潜觉)
|
||||
scale = memberArr.map(m=>Cards[m.id].is8Latent).every(is8=>is8) ? sk[1]/100 : 1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 138: //调用其他队长技
|
||||
scale = sk.reduce((pmul,skid)=>pmul * memberHpMul(card,Skills[skid],memberArr,solo),1)
|
||||
break;
|
||||
default:
|
||||
}
|
||||
return scale || 1;
|
||||
}
|
||||
return mHpArr;
|
||||
}
|
62
script.js
62
script.js
|
@ -17,6 +17,48 @@ var showSearch; //整个程序都可以用的显示搜索函数
|
|||
const dataStructure = 3; //阵型输出数据的结构版本
|
||||
const className_displayNone = "display-none";
|
||||
|
||||
class Member2
|
||||
{
|
||||
constructor(oldMenber = null,isAssist = false)
|
||||
{
|
||||
if (oldMenber)
|
||||
{ //Copy一个
|
||||
this.id = oldMenber.id;
|
||||
this.level = oldMenber.level;
|
||||
this.plus = [...oldMenber.plus];
|
||||
this.awoken = oldMenber.awoken;
|
||||
this.sAwoken = oldMenber.sAwoken;
|
||||
this.latent = [...oldMenber.latent];
|
||||
this.skilllevel = oldMenber.sAwoken;
|
||||
this.assist = oldMenber.assist;
|
||||
}else
|
||||
{ //全新的
|
||||
this.id = 0;
|
||||
this.level = 1;
|
||||
this.plus = [0,0,0];
|
||||
this.awoken = 0;
|
||||
this.sAwoken = null;
|
||||
this.latent = [];
|
||||
this.skilllevel = null;
|
||||
this.assist = null;
|
||||
}
|
||||
this.isAssist = isAssist;
|
||||
}
|
||||
calculateAbility(solo,teamCount){
|
||||
const card = Cards[this.id];
|
||||
let bonus = null;
|
||||
if (!this.isAssist &&
|
||||
this.assist &&
|
||||
this.assist.id>0 &&
|
||||
Cards[this.assist.id].attrs[0] === card.attrs[0]
|
||||
){
|
||||
bonus = this.assist.calculateAbility(solo,teamCount);
|
||||
}
|
||||
}
|
||||
toJSON(){
|
||||
|
||||
}
|
||||
}
|
||||
//队员基本的留空
|
||||
var Member = function(){
|
||||
this.id=0;
|
||||
|
@ -2297,9 +2339,14 @@ function refreshTeamTotalHP(totalDom,team){
|
|||
|
||||
if (tHpDom)
|
||||
{
|
||||
const tHP = team[0].reduce(function(value,mon){ //队伍计算的总HP
|
||||
return value += mon.ability ? mon.ability[0] : 0;
|
||||
},0);
|
||||
//因为目前仅用于1P、3P,所以直接固定写了
|
||||
const leader1id = team[0][0].id;
|
||||
//const leader2 = teamsCount==2 ? Cards[team2[0][0].id] : Cards[team[0][5].id]; //这个写法无法获得队伍2的队长
|
||||
const leader2id = team[0][5].id;
|
||||
|
||||
const teamHPArr = countTeamHp(team[0],leader1id,leader2id,solo);
|
||||
|
||||
const tHP = teamHPArr.reduce((pv,v)=>pv+v); //队伍计算的总HP
|
||||
const teamHPAwoken = awokenCountInTeam(team,46,solo, teamsCount); //全队大血包个数
|
||||
|
||||
let badgeHPScale = 1; //徽章倍率
|
||||
|
@ -2347,10 +2394,13 @@ function refreshFormationTotalHP(totalDom, teams){
|
|||
|
||||
if (tHpDom)
|
||||
{
|
||||
//因为目前仅用于2P,所以直接在外面固定写了
|
||||
const leader1id = teams[0][0][0].id;
|
||||
const leader2id = teams[1][0][0].id;
|
||||
const tHPArr = teams.map(function(team){
|
||||
const teamTHP = team[0].reduce(function(value,mon){ //队伍计算的总HP
|
||||
return value += mon.ability ? mon.ability[0] : 0;
|
||||
},0);
|
||||
const teamHPArr = countTeamHp(team[0],leader1id,leader2id,solo);
|
||||
|
||||
const teamTHP = teamHPArr.reduce((pv,v)=>pv+v); //队伍计算的总HP
|
||||
const teamHPAwoken = awokenCountInTeam(team,46,solo, teamsCount); //全队大血包个数
|
||||
return [teamTHP,teamHPAwoken];
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue