Merge branch 'master' into skillParser
# Conflicts: # languages/icon-en.css # script-universal_function.js # script.js # style.css
Before Width: | Height: | Size: 492 KiB After Width: | Height: | Size: 511 KiB |
After Width: | Height: | Size: 847 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 48 KiB |
|
@ -255,6 +255,9 @@
|
|||
.control-box .btn-show-mon-skill-cd-lbl::after{
|
||||
content:"❄️Show full skill's cooldown";
|
||||
}
|
||||
.control-box .btn-show-mon-awoken-lbl::after{
|
||||
content:"👁Show card awoken";
|
||||
}
|
||||
.control-box .btn-show-awoken-count-lbl::after{
|
||||
content:"⚔️Show awoken count and ability";
|
||||
}
|
||||
|
@ -268,6 +271,43 @@
|
|||
content: " sec";
|
||||
}
|
||||
|
||||
.dialog-hp-detail .dialog-title::before
|
||||
{
|
||||
content: "HP Range Reduction Details";
|
||||
}
|
||||
.hp-range-table .hp-range th::before
|
||||
{
|
||||
content: "HP Range";
|
||||
}
|
||||
.hp-range-table .reduce-scale .reduce-probability:before
|
||||
{
|
||||
content: "Odds ";
|
||||
}
|
||||
.hp-range-table caption::before
|
||||
{
|
||||
content: "All Attribute Enemy";
|
||||
}
|
||||
.hp-range-table[data-attr="0"] caption::before
|
||||
{
|
||||
content: "Fire Attribute Enemy";
|
||||
}
|
||||
.hp-range-table[data-attr="1"] caption::before
|
||||
{
|
||||
content: "Water Attribute Enemy";
|
||||
}
|
||||
.hp-range-table[data-attr="2"] caption::before
|
||||
{
|
||||
content: "Wood Attribute Enemy";
|
||||
}
|
||||
.hp-range-table[data-attr="3"] caption::before
|
||||
{
|
||||
content: "Light Attribute Enemy";
|
||||
}
|
||||
.hp-range-table[data-attr="4"] caption::before
|
||||
{
|
||||
content: "Dark Attribute Enemy";
|
||||
}
|
||||
|
||||
.setting-box .row-mon-id .open-search::before{
|
||||
content: "Simple Search";
|
||||
}
|
||||
|
|
|
@ -22,12 +22,10 @@
|
|||
}
|
||||
|
||||
.tIf-total-hp .awoken-bind::before,
|
||||
.tIf-total-move .awoken-bind::before
|
||||
.tIf-total-move .awoken-bind::before,
|
||||
.tIf-total-hp .reduce .reduce-scale::before
|
||||
{
|
||||
background-position-x: -16px;
|
||||
}
|
||||
.tIf-total-hp .reduce::before{
|
||||
background-position-x: -16px;
|
||||
background-position-x: -20px;
|
||||
}
|
||||
.icon-skill[data-icon-type="mass-attack"] {
|
||||
background-position-x: calc(-36px * 1);
|
||||
|
|
|
@ -247,6 +247,9 @@
|
|||
.control-box .btn-show-mon-skill-cd-lbl::after{
|
||||
content:"❄️フル スキル クールを表示";
|
||||
}
|
||||
.control-box .btn-show-mon-awoken-lbl::after{
|
||||
content:"👁カードの覚醒を表示します";
|
||||
}
|
||||
.control-box .btn-show-awoken-count-lbl::after{
|
||||
content:"⚔️総覚醒と能力値の表示";
|
||||
}
|
||||
|
@ -260,6 +263,43 @@
|
|||
content: " 秒";
|
||||
}
|
||||
|
||||
.dialog-hp-detail .dialog-title::before
|
||||
{
|
||||
content: "HP 範囲減傷の詳細";
|
||||
}
|
||||
.hp-range-table .hp-range th::before
|
||||
{
|
||||
content: "HP 範囲";
|
||||
}
|
||||
.hp-range-table .reduce-scale .reduce-probability:before
|
||||
{
|
||||
content: "確率 ";
|
||||
}
|
||||
.hp-range-table caption::before
|
||||
{
|
||||
content: "すべての属性の敵";
|
||||
}
|
||||
.hp-range-table[data-attr="0"] caption::before
|
||||
{
|
||||
content: "火属性の敵";
|
||||
}
|
||||
.hp-range-table[data-attr="1"] caption::before
|
||||
{
|
||||
content: "水属性の敵";
|
||||
}
|
||||
.hp-range-table[data-attr="2"] caption::before
|
||||
{
|
||||
content: "木属性の敵";
|
||||
}
|
||||
.hp-range-table[data-attr="3"] caption::before
|
||||
{
|
||||
content: "光属性の敵";
|
||||
}
|
||||
.hp-range-table[data-attr="4"] caption::before
|
||||
{
|
||||
content: "暗属性の敵";
|
||||
}
|
||||
|
||||
.setting-box .row-mon-id .open-search::before{
|
||||
content: "簡単な検索";
|
||||
}
|
||||
|
|
|
@ -244,6 +244,9 @@
|
|||
.control-box .btn-show-mon-skill-cd-lbl::after{
|
||||
content:"❄️전체 스킬 쿨을 표시";
|
||||
}
|
||||
.control-box .btn-show-mon-awoken-lbl::after{
|
||||
content:"👁카드 각성을 표시합니다";
|
||||
}
|
||||
.control-box .btn-show-awoken-count-lbl::after{
|
||||
content:"⚔️각성 통계 및 기능 값 표시";
|
||||
}
|
||||
|
@ -257,6 +260,43 @@
|
|||
content: " 초";
|
||||
}
|
||||
|
||||
.dialog-hp-detail .dialog-title::before
|
||||
{
|
||||
content: "HP 범위 손상 감소 세부 정보";
|
||||
}
|
||||
.hp-range-table .hp-range th::before
|
||||
{
|
||||
content: "HP 범위";
|
||||
}
|
||||
.hp-range-table .reduce-scale .reduce-probability:before
|
||||
{
|
||||
content: "확률 ";
|
||||
}
|
||||
.hp-range-table caption::before
|
||||
{
|
||||
content: "모든 속성의 적";
|
||||
}
|
||||
.hp-range-table[data-attr="0"] caption::before
|
||||
{
|
||||
content: "화재 속성의 적";
|
||||
}
|
||||
.hp-range-table[data-attr="1"] caption::before
|
||||
{
|
||||
content: "물 속성의 적";
|
||||
}
|
||||
.hp-range-table[data-attr="2"] caption::before
|
||||
{
|
||||
content: "나무 속성의 적";
|
||||
}
|
||||
.hp-range-table[data-attr="3"] caption::before
|
||||
{
|
||||
content: "빛의 속성의 적";
|
||||
}
|
||||
.hp-range-table[data-attr="4"] caption::before
|
||||
{
|
||||
content: "숨겨진 속성의 적";
|
||||
}
|
||||
|
||||
.setting-box .row-mon-id .open-search::before{
|
||||
content: "간단한 검색";
|
||||
}
|
||||
|
|
|
@ -48,310 +48,290 @@ const localTranslating = {
|
|||
}
|
||||
|
||||
//大数字缩短长度
|
||||
Number.prototype.bigNumberToString = function()
|
||||
{
|
||||
let numTemp = this.valueOf();
|
||||
if (!numTemp) return "0";
|
||||
const grouping = Math.pow(10, 4);
|
||||
const unit = ['','万','亿','兆','京','垓'];
|
||||
const numParts = [];
|
||||
do{
|
||||
numParts.push(numTemp % grouping);
|
||||
numTemp = Math.floor(numTemp / grouping);
|
||||
}while(numTemp>0 && numParts.length<(unit.length-1))
|
||||
if (numTemp>0)
|
||||
{
|
||||
numParts.push(numTemp);
|
||||
}
|
||||
let numPartsStr = numParts.map((num,idx)=>{
|
||||
if (num > 0)
|
||||
{
|
||||
return (num < 1e3 ? "零" : "") + num.toLocaleString() + unit[idx];
|
||||
}else
|
||||
return "零";
|
||||
});
|
||||
Number.prototype.bigNumberToString = function() {
|
||||
let numTemp = this.valueOf();
|
||||
if (!numTemp) return "0";
|
||||
const grouping = Math.pow(10, 4);
|
||||
const unit = ['', '万', '亿', '兆', '京', '垓'];
|
||||
const numParts = [];
|
||||
do {
|
||||
numParts.push(numTemp % grouping);
|
||||
numTemp = Math.floor(numTemp / grouping);
|
||||
} while (numTemp > 0 && numParts.length < (unit.length - 1))
|
||||
if (numTemp > 0) {
|
||||
numParts.push(numTemp);
|
||||
}
|
||||
let numPartsStr = numParts.map((num, idx) => {
|
||||
if (num > 0) {
|
||||
return (num < 1e3 ? "零" : "") + num + unit[idx];
|
||||
} else
|
||||
return "零";
|
||||
});
|
||||
|
||||
numPartsStr.reverse(); //反向
|
||||
let outStr = numPartsStr.join("");
|
||||
outStr = outStr.replace(/(^零+|零+$)/g,''); //去除开头的零
|
||||
outStr = outStr.replace(/零{2,}/g,'零'); //去除多个连续的零
|
||||
return outStr;
|
||||
numPartsStr.reverse(); //反向
|
||||
let outStr = numPartsStr.join("");
|
||||
outStr = outStr.replace(/(^零+|零+$)/g, ''); //去除开头的零
|
||||
outStr = outStr.replace(/零{2,}/g, '零'); //去除多个连续的零
|
||||
return outStr;
|
||||
}
|
||||
|
||||
//查找原先完整技能
|
||||
function findFullSkill(subSkill){
|
||||
const parentSkill = Skills.find(ss=>(ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill;
|
||||
const aCard = Cards.find(card=>card.activeSkillId == parentSkill.id || card.leaderSkillId == parentSkill.id);
|
||||
return {skill:parentSkill,card:aCard};
|
||||
function findFullSkill(subSkill) {
|
||||
const parentSkill = Skills.find(ss => (ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill;
|
||||
const aCard = Cards.find(card => card.activeSkillId == parentSkill.id || card.leaderSkillId == parentSkill.id);
|
||||
return { skill: parentSkill, card: aCard };
|
||||
}
|
||||
//document.querySelector(".edit-box .row-mon-id .m-id").type = "number";
|
||||
//console.table(Skills.filter(s=>{const sk = s.params; return s.type == 156;}).map(findFullSkill));
|
||||
/* 快速搜索指定类型的技能
|
||||
var result = Skills.filter(s=>{const sk = s.params; return [130,131].includes(s.type);}).map(findFullSkill);
|
||||
showSearch(result.map(o=>o.card).filter(c=>c));
|
||||
console.table(result);
|
||||
*/
|
||||
|
||||
//返回flag里值为true的数组,如[1,4,7]
|
||||
function flags(num){
|
||||
/*
|
||||
return Array.from(new Array(32),(i,n)=>n).filter(n => num & (1 << n)); //性能太差
|
||||
return new Array(32).fill(null).map((i,n)=>n).filter(n => num & (1 << n)); //性能比上者好,但还是不够快
|
||||
*/
|
||||
const arr = [];
|
||||
for (let i = 0; i<32;i++)
|
||||
{
|
||||
if (num & (1<<i))
|
||||
{
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
function flags(num) {
|
||||
/*
|
||||
return Array.from(new Array(32),(i,n)=>n).filter(n => num & (1 << n)); //性能太差
|
||||
return new Array(32).fill(null).map((i,n)=>n).filter(n => num & (1 << n)); //性能比上者好,但还是不够快
|
||||
*/
|
||||
const arr = [];
|
||||
for (let i = 0; i < 32; i++) {
|
||||
if (num & (1 << i)) {
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
//按住Ctrl点击技能在控制台输出技能的对象
|
||||
function fastShowSkill(event)
|
||||
{
|
||||
if (event.ctrlKey)
|
||||
{
|
||||
const skillId = parseInt(this.getAttribute("data-skillid"), 10);
|
||||
console.log(Skills[skillId]);
|
||||
}
|
||||
function fastShowSkill(event) {
|
||||
if (event.ctrlKey) {
|
||||
const skillId = parseInt(this.getAttribute("data-skillid"), 10);
|
||||
console.log(Skills[skillId]);
|
||||
}
|
||||
}
|
||||
//技能介绍里的头像的切换
|
||||
function changeToIdInSkillDetail(event)
|
||||
{
|
||||
const settingBox = editBox.querySelector(".setting-box");
|
||||
const monstersID = settingBox.querySelector(".row-mon-id .m-id");
|
||||
const mid = this.getAttribute("data-cardid");
|
||||
monstersID.value = mid;
|
||||
monstersID.onchange();
|
||||
return false; //取消链接的默认操作
|
||||
function changeToIdInSkillDetail(event) {
|
||||
const settingBox = editBox.querySelector(".setting-box");
|
||||
const monstersID = settingBox.querySelector(".row-mon-id .m-id");
|
||||
const mid = this.getAttribute("data-cardid");
|
||||
monstersID.value = mid;
|
||||
monstersID.onchange();
|
||||
return false; //取消链接的默认操作
|
||||
}
|
||||
|
||||
//insertAdjacentHTML 可以只增加部分 HTML
|
||||
//高级技能解释
|
||||
function parseSkillDescription(skill)
|
||||
{
|
||||
const id = skill.id;
|
||||
let fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
if (id == 0) return fragment;
|
||||
const type = skill.type;
|
||||
const sk = skill.params;
|
||||
|
||||
//珠子名和属性名数组
|
||||
const attrsName = ["火","水","木","光","暗","回复","废","毒","剧毒","炸弹"];
|
||||
//类型名数组
|
||||
const typeName = ["进化","平衡","体力","回复","龙","神","攻击","恶魔","机械","特别保护","10","11","觉醒","13","强化","卖钱"];
|
||||
//觉醒名数组
|
||||
const awokenName = ["HP+","攻击+","回复+","火盾","水盾","木盾","光盾","暗盾","自回","防封","防暗","防废","防毒","火+","水+","木+","光+","暗+","手指","心解","SB","火横","水横","木横","光横","暗横","U","SX","心+","协力","龙杀","神杀","恶魔杀","机杀","平衡杀","攻击杀","体力杀","回复杀","进化杀","觉醒杀","强化杀","卖钱杀","7c","5色破防","心追","全体 HP ","全体回复","破无效","武器觉醒","方块心追","5色溜","大防封","大手指","防云","防封条","大SB","满血强化","下半血强化","L盾","L解锁","10c","c珠","语音","奖励增加"," HP -","攻击-","回复-","大防暗","大防废","大防毒","掉废","掉毒","2串火","2串水","2串木","2串光","2串暗"];
|
||||
const ClumsN = ["左边第1竖列","左边第2竖列","左边第3竖列","右边第3竖列","右边第2竖列","右边第1竖列"];
|
||||
const RowsN = ["最上1横行","上方第2横行","下方第3横行","下方第2横行","最下1横行"];
|
||||
//返回属性名
|
||||
function attrN(i){return attrsName[i || 0] || ("未知属性" + i);}
|
||||
//返回类型名
|
||||
function typeN(i){return typeName[i || 0] || ("未知类型" + i);}
|
||||
//返回觉醒名
|
||||
function awokenN(i){return awokenName[(i || 0)-1] || ("未知觉醒" + i);}
|
||||
//从二进制的数字中获得有哪些内容
|
||||
function getNamesFromBinary(num,dataArr)
|
||||
{ /*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。
|
||||
如果num和2的N次方同时存在某位1,则返回这个数,逻辑上转换为true。
|
||||
filter就可以返回所有有这个数的数据*/
|
||||
/*以珠子名称为例,num是输入的数字,比如10进制465转二进制=>111010001。
|
||||
二进制数从低位到高位表示火水木光暗……
|
||||
用逻辑运算AND序号来获得有没有这个值*/
|
||||
var results = dataArr.filter(function(pn,pi){
|
||||
return num & Math.pow(2,pi); //Math.pow(x,y)计算以x为底的y次方值
|
||||
});
|
||||
return results;
|
||||
}
|
||||
|
||||
const nb = getNamesFromBinary; //化简名称
|
||||
function parseSkillDescription(skill) {
|
||||
const id = skill.id;
|
||||
let fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
if (id == 0) return fragment;
|
||||
const type = skill.type;
|
||||
const sk = skill.params;
|
||||
|
||||
function getAttrTypeString(attrsArray = [],typesArray = [])
|
||||
{
|
||||
let outArr = [];
|
||||
if (attrsArray && attrsArray.indexOf(0)>=0 &&
|
||||
attrsArray.indexOf(1)>=0 &&
|
||||
attrsArray.indexOf(2)>=0 &&
|
||||
attrsArray.indexOf(3)>=0 &&
|
||||
attrsArray.indexOf(4)>=0)
|
||||
{
|
||||
return "所有属性";
|
||||
}
|
||||
if (attrsArray && attrsArray.length)
|
||||
{
|
||||
outArr.push(attrsArray.map(attrN).join("、") + "属性");
|
||||
}
|
||||
if (typesArray && typesArray.length)
|
||||
{
|
||||
outArr.push(typesArray.map(typeN).join("、") + "类型");
|
||||
}
|
||||
return outArr.join("和");
|
||||
}
|
||||
function getOrbsAttrString(orbFlag,isOr = false)
|
||||
{
|
||||
let outStr = ``;
|
||||
if ((orbFlag & 1023) == 1023) //1023-1111111111
|
||||
{ //单纯5色
|
||||
outStr += '任何';
|
||||
}else if (orbFlag == 31) //31-11111
|
||||
{ //单纯5色
|
||||
outStr += '5色';
|
||||
}else if((orbFlag & 31) == 31)
|
||||
{ //5色加其他色
|
||||
outStr += `5色+${nb(orbFlag ^ 31, attrsName).join(isOr?"或":"、")}`;
|
||||
}else
|
||||
{
|
||||
outStr += `${nb(orbFlag, attrsName).join(isOr?"或":"、")}`;
|
||||
}
|
||||
return outStr;
|
||||
}
|
||||
function stats(value, statTypes)
|
||||
{
|
||||
return [
|
||||
statTypes.indexOf(1) >= 0 ? value : 100, //攻击
|
||||
statTypes.indexOf(2) >= 0 ? value : 100 //回复
|
||||
];
|
||||
}
|
||||
const mulName = ["HP","攻击力","回复力"];
|
||||
//获取固定的三维成长的名称
|
||||
function getFixedHpAtkRcvString(values)
|
||||
{
|
||||
let mulArr = null;
|
||||
if (Array.isArray(values)) {
|
||||
mulArr = [
|
||||
1,
|
||||
values[0] / 100,
|
||||
values[1] / 100,
|
||||
];
|
||||
} else
|
||||
{
|
||||
mulArr = [
|
||||
(values.hp || 100) / 100,
|
||||
(values.atk || 100) / 100,
|
||||
(values.rcv || 100) / 100
|
||||
];
|
||||
}
|
||||
const hasMul = mulArr.filter(m=>m != 1); //不是1的数值
|
||||
let str = "";
|
||||
if (hasMul.length>0)
|
||||
{
|
||||
const hasDiff = hasMul.filter(m=>m != hasMul[0]).length > 0; //存在不一样的值
|
||||
if (hasDiff)
|
||||
{
|
||||
str += mulArr.map((m,i)=>(m>0 && m!=1)?(mulName[i]+(m>=1?`×${m}倍`:`变为${m*100}%`)):null).filter(s=>s!=null).join(",");
|
||||
}else
|
||||
{
|
||||
let hasMulName = mulName.filter((n,i)=>mulArr[i] != 1);
|
||||
if (hasMulName.length>=3)
|
||||
{
|
||||
str+=hasMulName.slice(0,hasMulName.length-1).join("、") + "和" + hasMulName[hasMulName.length-1];
|
||||
}else
|
||||
{
|
||||
str+=hasMulName.join("和");
|
||||
}
|
||||
str += hasMul[0]>=1?`×${hasMul[0]}倍`:`变为${hasMul[0]*100}%`;
|
||||
}
|
||||
}else
|
||||
{
|
||||
str += "能力值没有变化";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
const mul = getFixedHpAtkRcvString;
|
||||
//技能介绍里的头像的切换
|
||||
function createBoard(boardData)
|
||||
{
|
||||
const table = document.createElement("table");
|
||||
table.className = "board fixed-shape-orb";
|
||||
//console.table(boardData);
|
||||
boardData.forEach((rowData,ri,rArr) => {
|
||||
const row = table.insertRow();
|
||||
if (ri == 2 && rArr.length > 5) row.classList.add("board-row4");
|
||||
//珠子名和属性名数组
|
||||
const attrsName = ["火", "水", "木", "光", "暗", "回复", "废", "毒", "剧毒", "炸弹"];
|
||||
//类型名数组
|
||||
const typeName = ["进化", "平衡", "体力", "回复", "龙", "神", "攻击", "恶魔", "机械", "特别保护", "10", "11", "觉醒", "13", "强化", "卖钱"];
|
||||
//觉醒名数组
|
||||
const awokenName = ["HP+", "攻击+", "回复+", "火盾", "水盾", "木盾", "光盾", "暗盾", "自回", "防封", "防暗", "防废", "防毒", "火+", "水+", "木+", "光+", "暗+", "手指", "心解", "SB", "火横", "水横", "木横", "光横", "暗横", "U", "SX", "心+", "协力", "龙杀", "神杀", "恶魔杀", "机杀", "平衡杀", "攻击杀", "体力杀", "回复杀", "进化杀", "觉醒杀", "强化杀", "卖钱杀", "7c", "5色破防", "心追", "全体 HP ", "全体回复", "破无效", "武器觉醒", "方块心追", "5色溜", "大防封", "大手指", "防云", "防封条", "大SB", "满血强化", "下半血强化", "L盾", "L解锁", "10c", "c珠", "语音", "奖励增加", " HP -", "攻击-", "回复-", "大防暗", "大防废", "大防毒", "掉废", "掉毒", "2串火", "2串水", "2串木", "2串光", "2串暗"];
|
||||
const ClumsN = ["左边第1竖列", "左边第2竖列", "左边第3竖列", "右边第3竖列", "右边第2竖列", "右边第1竖列"];
|
||||
const RowsN = ["最上1横行", "上方第2横行", "下方第3横行", "下方第2横行", "最下1横行"];
|
||||
//返回属性名
|
||||
function attrN(i) { return attrsName[i || 0] || ("未知属性" + i); }
|
||||
//返回类型名
|
||||
function typeN(i) { return typeName[i || 0] || ("未知类型" + i); }
|
||||
//返回觉醒名
|
||||
function awokenN(i) { return awokenName[(i || 0) - 1] || ("未知觉醒" + i); }
|
||||
//从二进制的数字中获得有哪些内容
|
||||
function getNamesFromBinary(num, dataArr) {
|
||||
/*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。
|
||||
如果num和2的N次方同时存在某位1,则返回这个数,逻辑上转换为true。
|
||||
filter就可以返回所有有这个数的数据*/
|
||||
/*以珠子名称为例,num是输入的数字,比如10进制465转二进制=>111010001。
|
||||
二进制数从低位到高位表示火水木光暗……
|
||||
用逻辑运算AND序号来获得有没有这个值*/
|
||||
var results = dataArr.filter(function(pn, pi) {
|
||||
return num & Math.pow(2, pi); //Math.pow(x,y)计算以x为底的y次方值
|
||||
});
|
||||
return results;
|
||||
}
|
||||
|
||||
rowData.forEach((orbType,ci,cArr)=>{
|
||||
const cell = row.insertCell();
|
||||
cell.className = "orb-icon";
|
||||
if (orbType != null)
|
||||
{
|
||||
cell.setAttribute("data-orb-icon", orbType);
|
||||
}
|
||||
if (ci == 3 && cArr.length > 6) cell.classList.add("board-cell5");
|
||||
});
|
||||
});
|
||||
table.onclick = function(){
|
||||
this.classList.toggle("board-76");
|
||||
};
|
||||
return table;
|
||||
}
|
||||
const nb = getNamesFromBinary; //化简名称
|
||||
|
||||
function boardData_fixed(dataArr,orbType)
|
||||
{
|
||||
const data = dataArr.map(flag=>new Array(6).fill(null).map((a,i)=> (1<<i & flag) ? (orbType || 0) : null));
|
||||
data.splice(3,0,data[2].concat()); //将第2行复制插入为第3行
|
||||
data.forEach(rowData =>
|
||||
rowData.splice(4,0,rowData[3]) //将第3个复制插入为第4个
|
||||
);
|
||||
return data;
|
||||
}
|
||||
function boardData_line(data)
|
||||
{
|
||||
data.splice(3,0,data[2].concat()); //将第2行复制插入为第3行
|
||||
data.forEach(row=>row.splice(3,0,null)); //插入全空为第4个
|
||||
return data;
|
||||
}
|
||||
function boardData_row(data)
|
||||
{
|
||||
data.splice(2,0,new Array(6).fill(null)); //插入全空为第3行
|
||||
data.forEach(row=>row.splice(4,0,row[3])); //将第3个复制插入为第4个
|
||||
return data;
|
||||
}
|
||||
function getAttrTypeString(attrsArray = [], typesArray = []) {
|
||||
let outArr = [];
|
||||
if (attrsArray && attrsArray.indexOf(0) >= 0 &&
|
||||
attrsArray.indexOf(1) >= 0 &&
|
||||
attrsArray.indexOf(2) >= 0 &&
|
||||
attrsArray.indexOf(3) >= 0 &&
|
||||
attrsArray.indexOf(4) >= 0) {
|
||||
return "所有属性";
|
||||
}
|
||||
if (attrsArray && attrsArray.length) {
|
||||
outArr.push(attrsArray.map(attrN).join("、") + "属性");
|
||||
}
|
||||
if (typesArray && typesArray.length) {
|
||||
outArr.push(typesArray.map(typeN).join("、") + "类型");
|
||||
}
|
||||
return outArr.join("和");
|
||||
}
|
||||
|
||||
let str = null;
|
||||
let strArr = null,fullColor = null,atSameTime = null,hasDiffOrbs = null;
|
||||
switch(type)
|
||||
{
|
||||
case 0:
|
||||
str = `对敌方全体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害`;
|
||||
break;
|
||||
case 1:
|
||||
str = `对敌方全体造成${sk[1].bigNumberToString()}点${attrN(sk[0])}属性伤害`;
|
||||
break;
|
||||
case 2:
|
||||
str = `对敌方1体造成自身攻击力×${sk[0]/100}${sk[1]&&sk[1]!=sk[0]?'~'+sk[1]/100:''}倍的自身属性伤害`;
|
||||
break;
|
||||
case 3:
|
||||
str = `${sk[0]}回合内,受到的伤害减少${sk[1]}%`;
|
||||
break;
|
||||
case 4:
|
||||
str = `使敌方全体中毒,每回合损失宠物自身攻击力×${sk[0]/100}倍的 HP `;
|
||||
break;
|
||||
case 5:
|
||||
str = `${sk[0]}秒内时间停止,可以任意移动宝珠`;
|
||||
break;
|
||||
case 6:
|
||||
str = `敌人的 HP 减少${sk[0]}%`;
|
||||
break;
|
||||
case 7:
|
||||
str = `回复宠物自身回复力×${sk[0]/100}倍的 HP`;
|
||||
break;
|
||||
case 8:
|
||||
str = `回复${sk[0]} HP `;
|
||||
break;
|
||||
case 9:
|
||||
str = `${attrN(sk[0])}宝珠变为${attrN(sk[1])}宝珠`;
|
||||
break;
|
||||
case 10:
|
||||
str = `全版刷新`;
|
||||
break;
|
||||
case 11:
|
||||
str = `${attrN(sk[0])}属性宠物的攻击力×${sk[1]/100}倍`;
|
||||
break;
|
||||
case 12:
|
||||
str = `消除宝珠的回合,以自身攻击力×${sk[0]/100}倍的伤害追打敌人`;
|
||||
break;
|
||||
case 13:
|
||||
str = `消除宝珠的回合,回复自身回复力×${sk[0]/100}倍的 HP `;
|
||||
break;
|
||||
case 14:
|
||||
str = `如当前 HP 在 HP 上限的${sk[0]}%以上的话,受到单一次致命攻击时,${sk[1]<100?`有${sk[1]}的几率`:"将"}会以1点 HP 生还`;
|
||||
function getOrbsAttrString(orbFlag, isOr = false) {
|
||||
let outStr = ``;
|
||||
if ((orbFlag & 1023) == 1023) //1023-1111111111
|
||||
{ //单纯5色
|
||||
outStr += '任何';
|
||||
} else if (orbFlag == 31) //31-11111
|
||||
{ //单纯5色
|
||||
outStr += '5色';
|
||||
} else if ((orbFlag & 31) == 31) { //5色加其他色
|
||||
outStr += `5色+${nb(orbFlag ^ 31, attrsName).join(isOr?"或":"、")}`;
|
||||
} else {
|
||||
outStr += `${nb(orbFlag, attrsName).join(isOr?"或":"、")}`;
|
||||
}
|
||||
return outStr;
|
||||
}
|
||||
|
||||
function stats(value, statTypes) {
|
||||
return [
|
||||
statTypes.indexOf(1) >= 0 ? value : 100, //攻击
|
||||
statTypes.indexOf(2) >= 0 ? value : 100 //回复
|
||||
];
|
||||
}
|
||||
const mulName = ["HP", "攻击力", "回复力"];
|
||||
//获取固定的三维成长的名称
|
||||
function getFixedHpAtkRcvString(values) {
|
||||
let mulArr = null;
|
||||
if (Array.isArray(values)) {
|
||||
mulArr = [
|
||||
1,
|
||||
values[0] / 100,
|
||||
values[1] / 100,
|
||||
];
|
||||
} else {
|
||||
mulArr = [
|
||||
(values.hp || 100) / 100,
|
||||
(values.atk || 100) / 100,
|
||||
(values.rcv || 100) / 100
|
||||
];
|
||||
}
|
||||
const hasMul = mulArr.filter(m => m != 1); //不是1的数值
|
||||
let str = "";
|
||||
if (hasMul.length > 0) {
|
||||
const hasDiff = hasMul.filter(m => m != hasMul[0]).length > 0; //存在不一样的值
|
||||
if (hasDiff) {
|
||||
str += mulArr.map((m, i) => (m > 0 && m != 1) ? (mulName[i] + (m >= 1 ? `×${m}倍` : `变为${m*100}%`)) : null).filter(s => s != null).join(",");
|
||||
} else {
|
||||
let hasMulName = mulName.filter((n, i) => mulArr[i] != 1);
|
||||
if (hasMulName.length >= 3) {
|
||||
str += hasMulName.slice(0, hasMulName.length - 1).join("、") + "和" + hasMulName[hasMulName.length - 1];
|
||||
} else {
|
||||
str += hasMulName.join("和");
|
||||
}
|
||||
str += hasMul[0] >= 1 ? `×${hasMul[0]}倍` : `变为${hasMul[0]*100}%`;
|
||||
}
|
||||
} else {
|
||||
str += "能力值没有变化";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
const mul = getFixedHpAtkRcvString;
|
||||
//技能介绍里的头像的切换
|
||||
function createBoard(boardData) {
|
||||
const table = document.createElement("table");
|
||||
table.className = "board fixed-shape-orb";
|
||||
//console.table(boardData);
|
||||
boardData.forEach((rowData, ri, rArr) => {
|
||||
const row = table.insertRow();
|
||||
if (ri == 2 && rArr.length > 5) row.classList.add("board-row4");
|
||||
|
||||
rowData.forEach((orbType, ci, cArr) => {
|
||||
const cell = row.insertCell();
|
||||
cell.className = "orb-icon";
|
||||
if (orbType != null) {
|
||||
cell.setAttribute("data-orb-icon", orbType);
|
||||
}
|
||||
if (ci == 3 && cArr.length > 6) cell.classList.add("board-cell5");
|
||||
});
|
||||
});
|
||||
table.onclick = function() {
|
||||
this.classList.toggle("board-76");
|
||||
};
|
||||
return table;
|
||||
}
|
||||
|
||||
function boardData_fixed(dataArr, orbType) {
|
||||
const data = dataArr.map(flag => new Array(6).fill(null).map((a, i) => (1 << i & flag) ? (orbType || 0) : null));
|
||||
data.splice(3, 0, data[2].concat()); //将第2行复制插入为第3行
|
||||
data.forEach(rowData =>
|
||||
rowData.splice(4, 0, rowData[3]) //将第3个复制插入为第4个
|
||||
);
|
||||
return data;
|
||||
}
|
||||
|
||||
function boardData_line(data) {
|
||||
data.splice(3, 0, data[2].concat()); //将第2行复制插入为第3行
|
||||
data.forEach(row => row.splice(3, 0, null)); //插入全空为第4个
|
||||
return data;
|
||||
}
|
||||
|
||||
function boardData_row(data) {
|
||||
data.splice(2, 0, new Array(6).fill(null)); //插入全空为第3行
|
||||
data.forEach(row => row.splice(4, 0, row[3])); //将第3个复制插入为第4个
|
||||
return data;
|
||||
}
|
||||
|
||||
let str = null;
|
||||
let strArr = null,
|
||||
fullColor = null,
|
||||
atSameTime = null,
|
||||
hasDiffOrbs = null;
|
||||
switch (type) {
|
||||
case 0:
|
||||
str = `对敌方全体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害`;
|
||||
break;
|
||||
case 1:
|
||||
str = `对敌方全体造成${sk[1].bigNumberToString()}点${attrN(sk[0])}属性伤害`;
|
||||
break;
|
||||
case 2:
|
||||
str = `对敌方1体造成自身攻击力×${sk[0]/100}${sk[1]&&sk[1]!=sk[0]?'~'+sk[1]/100:''}倍的自身属性伤害`;
|
||||
break;
|
||||
case 3:
|
||||
str = `${sk[0]}回合内,受到的伤害减少${sk[1]}%`;
|
||||
break;
|
||||
case 4:
|
||||
str = `使敌方全体中毒,每回合损失宠物自身攻击力×${sk[0]/100}倍的 HP `;
|
||||
break;
|
||||
case 5:
|
||||
str = `${sk[0]}秒内时间停止,可以任意移动宝珠`;
|
||||
break;
|
||||
case 6:
|
||||
str = `敌人的 HP 减少${sk[0]}%`;
|
||||
break;
|
||||
case 7:
|
||||
str = `回复宠物自身回复力×${sk[0]/100}倍的 HP`;
|
||||
break;
|
||||
case 8:
|
||||
str = `回复${sk[0]} HP `;
|
||||
break;
|
||||
case 9:
|
||||
str = `${attrN(sk[0])}宝珠变为${attrN(sk[1])}宝珠`;
|
||||
break;
|
||||
case 10:
|
||||
str = `全版刷新`;
|
||||
break;
|
||||
case 11:
|
||||
str = `${attrN(sk[0])}属性宠物的攻击力×${sk[1]/100}倍`;
|
||||
break;
|
||||
case 12:
|
||||
str = `消除宝珠的回合,以自身攻击力×${sk[0]/100}倍的伤害追打敌人`;
|
||||
break;
|
||||
case 13:
|
||||
str = `消除宝珠的回合,回复自身回复力×${sk[0]/100}倍的 HP `;
|
||||
break;
|
||||
case 14:
|
||||
str = `如当前 HP 在 HP 上限的${sk[0]}%以上的话,受到单一次致命攻击时,${sk[1]<100?`有${sk[1]}的几率`:"将"}会以1点 HP 生还`;
|
||||
break;
|
||||
case 15:
|
||||
str = `操作时间${sk[0]>0?`延长`:`减少`}${Math.abs(sk[0]/100)}秒`;
|
||||
|
@ -519,12 +499,49 @@ function parseSkillDescription(skill)
|
|||
break;
|
||||
case 71:
|
||||
//这个类型,所有颜色是直接显示的,但是最后一位有个-1表示结束
|
||||
strArr = sk;
|
||||
if (sk.includes(-1))
|
||||
let attrArr = sk.includes(-1) ? sk.slice(0,sk.indexOf(-1)) : sk;
|
||||
strArr = [];
|
||||
strArr.push(`全画面的宝珠变成${attrArr.map(o=>attrN(o)).join("、")}`);
|
||||
|
||||
const rowC = 5, columC = 6;
|
||||
let valueArray = new Uint8Array(rowC * columC);
|
||||
window.crypto.getRandomValues(valueArray); //获取符合密码学要求的安全的随机值
|
||||
valueArray = Array.from(valueArray.map(x => attrArr[x % attrArr.length])); //用所有宝珠填充
|
||||
//之后用每种颜色填充前3个
|
||||
attrArr.forEach((attr,idx)=>{
|
||||
valueArray.fill(attr, idx * 3, idx * 3 + 3);
|
||||
});
|
||||
|
||||
//将上方数据重新乱序排列
|
||||
let dataArray = [];
|
||||
while(valueArray.length > 0)
|
||||
{
|
||||
strArr = sk.slice(0,sk.indexOf(-1));
|
||||
dataArray.push(valueArray.splice(Math.randomInteger(valueArray.length - 1),1));
|
||||
}
|
||||
str = "全画面的宝珠变成" + strArr.map(o=>attrN(o)).join("、");
|
||||
|
||||
//创建版面数据,依次填入
|
||||
var data = new Array(5).fill(null).map(()=>new Array(6).fill(null));
|
||||
|
||||
let da = dataArray.entries();
|
||||
for (let ri=0;ri<rowC;ri++)
|
||||
{
|
||||
for (let ci=0;ci<columC;ci++)
|
||||
{
|
||||
let v = da.next().value;
|
||||
if (v == undefined)
|
||||
{
|
||||
atrr = attrArr.entries();
|
||||
v = atrr.next().value;
|
||||
}
|
||||
data[ri][ci] = v[1];
|
||||
}
|
||||
}
|
||||
|
||||
data = boardData_row(data);
|
||||
fragment.appendChild(document.createTextNode(strArr.join(",")));
|
||||
var table = createBoard(data);
|
||||
fragment.appendChild(table);
|
||||
return fragment;
|
||||
break;
|
||||
case 73:
|
||||
str = `${getAttrTypeString([sk[0]],[sk[1]])}宠物的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[2]})}`;
|
||||
|
|
|
@ -250,6 +250,9 @@
|
|||
.control-box .btn-show-mon-skill-cd-lbl::after{
|
||||
content:"❄️顯示已滿技能冷卻";
|
||||
}
|
||||
.control-box .btn-show-mon-awoken-lbl::after{
|
||||
content:"👁顯示卡片覺醒";
|
||||
}
|
||||
.control-box .btn-show-awoken-count-lbl::after{
|
||||
content:"⚔️顯示覺醒統計和能力值";
|
||||
}
|
||||
|
@ -263,6 +266,43 @@
|
|||
content: " 秒";
|
||||
}
|
||||
|
||||
.dialog-hp-detail .dialog-title::before
|
||||
{
|
||||
content: "HP 階段減傷詳情";
|
||||
}
|
||||
.hp-range-table .hp-range th::before
|
||||
{
|
||||
content: "HP 範圍";
|
||||
}
|
||||
.hp-range-table .reduce-scale .reduce-probability:before
|
||||
{
|
||||
content: "幾率 ";
|
||||
}
|
||||
.hp-range-table caption::before
|
||||
{
|
||||
content: "全屬性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="0"] caption::before
|
||||
{
|
||||
content: "火屬性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="1"] caption::before
|
||||
{
|
||||
content: "水屬性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="2"] caption::before
|
||||
{
|
||||
content: "木屬性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="3"] caption::before
|
||||
{
|
||||
content: "光屬性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="4"] caption::before
|
||||
{
|
||||
content: "暗屬性敵人";
|
||||
}
|
||||
|
||||
.setting-box .row-mon-id .open-search::before{
|
||||
content: "簡易搜索";
|
||||
}
|
||||
|
|
|
@ -249,6 +249,9 @@
|
|||
.control-box .btn-show-mon-skill-cd-lbl::after{
|
||||
content:"❄️显示已满技能冷却";
|
||||
}
|
||||
.control-box .btn-show-mon-awoken-lbl::after{
|
||||
content:"👁显示卡片觉醒";
|
||||
}
|
||||
.control-box .btn-show-awoken-count-lbl::after{
|
||||
content:"⚔️显示觉醒统计和能力值";
|
||||
}
|
||||
|
@ -262,6 +265,43 @@
|
|||
content: " 秒";
|
||||
}
|
||||
|
||||
.dialog-hp-detail .dialog-title::before
|
||||
{
|
||||
content: "HP 階段減傷詳情";
|
||||
}
|
||||
.hp-range-table .hp-range th::before
|
||||
{
|
||||
content: "HP 范围";
|
||||
}
|
||||
.hp-range-table .reduce-scale .reduce-probability:before
|
||||
{
|
||||
content: "几率 ";
|
||||
}
|
||||
.hp-range-table caption::before
|
||||
{
|
||||
content: "全属性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="0"] caption::before
|
||||
{
|
||||
content: "火属性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="1"] caption::before
|
||||
{
|
||||
content: "水属性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="2"] caption::before
|
||||
{
|
||||
content: "木属性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="3"] caption::before
|
||||
{
|
||||
content: "光属性敵人";
|
||||
}
|
||||
.hp-range-table[data-attr="4"] caption::before
|
||||
{
|
||||
content: "暗属性敵人";
|
||||
}
|
||||
|
||||
.setting-box .row-mon-id .open-search::before{
|
||||
content: "简易搜索";
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
[{"code":"ja","ckey":{"card":"56aa8093f01c096740c2561dcc2a1aa8","skill":"90e66ac2abd3cc1403097f525866017a"},"updateTime":1615452037445},{"code":"en","ckey":{"card":"54beee631776eb495753a65626804a6b","skill":"9a79c6dc157b11a9ef5cd0d453ae00ab"},"updateTime":1615452037445},{"code":"ko","ckey":{"card":"9327ddea61597f4c78f592a01e4e9f57","skill":"cebdcb32c4eede9bc07311480951a52f"},"updateTime":1615452037445}]
|
||||
[{"code":"ja","ckey":{"card":"ff5fe66914f601505bd863da9ed47bdf","skill":"808d8ea31fa4806d7a9454ba65d5380c"},"updateTime":1615544553272},{"code":"en","ckey":{"card":"54beee631776eb495753a65626804a6b","skill":"9a79c6dc157b11a9ef5cd0d453ae00ab"},"updateTime":1615452037445},{"code":"ko","ckey":{"card":"9327ddea61597f4c78f592a01e4e9f57","skill":"cebdcb32c4eede9bc07311480951a52f"},"updateTime":1615452037445}]
|
117
multi.html
|
@ -31,6 +31,8 @@ var formation = new Formation(teamsCount,5);
|
|||
.show-team-name-right .team-total-info>div,
|
||||
.show-team-name-left .team-total-info .team-awoken,
|
||||
.show-team-name-left .team-total-info>div
|
||||
.formation-total-info .tIf-effect,
|
||||
.formation-total-info .tIf-total-hp
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
|
@ -39,6 +41,11 @@ var formation = new Formation(teamsCount,5);
|
|||
{
|
||||
display: none;
|
||||
}
|
||||
.show-team-name-left .team-menber-awoken,
|
||||
.show-team-name-left .team-assist-awoken
|
||||
{
|
||||
padding-left: var(--head-block-width);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
|
@ -60,8 +67,9 @@ var formation = new Formation(teamsCount,5);
|
|||
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-mon-id" id="show-mon-id" onclick="toggleDomClassName(this,'not-show-mon-id',false);" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-mon-skill-cd" id="btn-show-mon-skill-cd"><label class="config-checkbox-lbl btn-show-mon-skill-cd-lbl" for="btn-show-mon-skill-cd"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-mon-awoken" id="btn-show-mon-awoken"><label class="config-checkbox-lbl btn-show-mon-awoken-lbl" for="btn-show-mon-awoken"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-mon-id" id="show-mon-id" onclick="toggleDomClassName(this,'not-show-mon-id',false);" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="change-swap-to-copy" id="change-swap-to-copy"><label class="config-checkbox-lbl change-swap-to-copy-lbl" for="change-swap-to-copy"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
</div>
|
||||
<div class="status"><span class="icon"></span><span class="text"></span></div>
|
||||
|
@ -72,7 +80,19 @@ var formation = new Formation(teamsCount,5);
|
|||
<div class="tIf-total-hp">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<span class="reduce"></span>
|
||||
<span class="reduce">
|
||||
<span class="reduce-scale"></span>
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<canvas height="20" width="100" class="reduce-details display-none"></canvas>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tIf-effect">
|
||||
<icon class="_76board display-none"></icon>
|
||||
<icon class="no-skyfall display-none"></icon>
|
||||
<icon class="poison-no-effect display-none"></icon>
|
||||
<icon class="add-combo display-none"></icon>
|
||||
<icon class="inflicts display-none"></icon>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="teams">
|
||||
|
@ -90,6 +110,50 @@ var formation = new Formation(teamsCount,5);
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="team-menber-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-assist-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="team-box-name">
|
||||
<div class="team-box">
|
||||
<ul class="team-assist">
|
||||
|
@ -462,6 +526,50 @@ var formation = new Formation(teamsCount,5);
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="team-menber-awoken">
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-assist-awoken">
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="team-total-info">
|
||||
<div class="tIf-total-move">
|
||||
<span class="general"></span>
|
||||
|
@ -490,6 +598,11 @@ var formation = new Formation(teamsCount,5);
|
|||
</ul>
|
||||
</div>
|
||||
<div class="detail-box edit"><textarea class="detail" placeholder="输入说明"></textarea><div class="detail-display"></div></div>
|
||||
<div class="dialog dialog-hp-detail display-none">
|
||||
<div class="dialog-title"></div>
|
||||
<div class="dialog-content"></div>
|
||||
<div class="dialog-control"><button class="dialog-close brown-button"></button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="edit-box display-none">
|
||||
<div class="edit-box-title"><!--修改怪物--></div>
|
||||
|
|
457
script.js
|
@ -607,6 +607,16 @@ window.onload = function(event) {
|
|||
localStorage.setItem("PADDF-" + showMonSkillCd_id, this.checked ? 1 : 0);
|
||||
};
|
||||
btnShowMonSkillCd.onclick();
|
||||
|
||||
//记录显示觉醒开关的状态
|
||||
const showMonAwoken_id = "show-mon-awoken";
|
||||
const btnShowMonAwoken = controlBox.querySelector(`#btn-${showMonAwoken_id}`);
|
||||
btnShowMonAwoken.checked = Boolean(parseInt(localStorage.getItem("PADDF-" + showMonAwoken_id)));
|
||||
btnShowMonAwoken.onclick = function(){
|
||||
toggleDomClassName(this, showMonAwoken_id);
|
||||
localStorage.setItem("PADDF-" + showMonAwoken_id, this.checked ? 1 : 0);
|
||||
};
|
||||
btnShowMonAwoken.onclick();
|
||||
|
||||
toggleDomClassName(controlBox.querySelector("#btn-show-awoken-count"), 'not-show-awoken-count', false);
|
||||
|
||||
|
@ -1063,6 +1073,103 @@ function initialize() {
|
|||
badges.forEach(badge => badge.onclick = setBadge);
|
||||
});
|
||||
|
||||
//显示HP的详细值
|
||||
const hpDetailDialog = formationBox.querySelector(".dialog-hp-detail");
|
||||
hpDetailDialog.show = function(reduceAttrRanges, tHP, tHPNoAwoken)
|
||||
{
|
||||
const dialogContent = this.querySelector(".dialog-content");
|
||||
const fragment = document.createDocumentFragment();
|
||||
|
||||
function insertHpRangeTable(reduceRanges, tHP, tHPNoAwoken, attr)
|
||||
{
|
||||
const table = document.createElement("table");
|
||||
table.className = "hp-range-table";
|
||||
table.setAttribute("data-attr", attr);
|
||||
table.createCaption();
|
||||
const tHead = table.createTHead();
|
||||
const tBody = table.createTBody();
|
||||
const rangeRow = tHead.insertRow();
|
||||
rangeRow.className = "hp-range";
|
||||
rangeRow.appendChild(document.createElement("th"));
|
||||
const rageHpRow = tBody.insertRow();
|
||||
rageHpRow.className = "general";
|
||||
rageHpRow.appendChild(document.createElement("th"));
|
||||
const rageHpNoAwokenRow = tBody.insertRow();
|
||||
rageHpNoAwokenRow.className = "awoken-bind";
|
||||
rageHpNoAwokenRow.appendChild(document.createElement("th"));
|
||||
const reduceRow = tBody.insertRow();
|
||||
reduceRow.className = "reduce-scale";
|
||||
reduceRow.appendChild(document.createElement("th"));
|
||||
const reduceHpRow = tBody.insertRow();
|
||||
reduceHpRow.className = "reduce-general";
|
||||
reduceHpRow.appendChild(document.createElement("th"));
|
||||
const reduceHpNoAwokenRow = tBody.insertRow();
|
||||
reduceHpNoAwokenRow.className = "reduce-awoken-bind";
|
||||
reduceHpNoAwokenRow.appendChild(document.createElement("th"));
|
||||
reduceRanges.forEach(range=>{
|
||||
const hpRange = rangeRow.insertCell();
|
||||
const hpRangeMin = hpRange.appendChild(document.createElement("span"));
|
||||
hpRangeMin.className = "hp-range-min";
|
||||
hpRangeMin.textContent = range.min;
|
||||
hpRange.appendChild(document.createTextNode(" ~ "));
|
||||
const hpRangeMax = hpRange.appendChild(document.createElement("span"));
|
||||
hpRangeMax.className = "hp-range-max";
|
||||
hpRangeMax.textContent = range.max;
|
||||
|
||||
const hpGeneral = rageHpRow.insertCell();
|
||||
hpGeneral.textContent = `${Math.round(tHP * (range.min / 100))} ~ ${Math.round(tHP * (range.max/100))}`;
|
||||
|
||||
const hpAwokenBind = rageHpNoAwokenRow.insertCell();
|
||||
hpAwokenBind.textContent = `${Math.round(tHPNoAwoken * (range.min / 100))} ~ ${Math.round(tHPNoAwoken * (range.max/100))}`;
|
||||
|
||||
const reduce = reduceRow.insertCell();
|
||||
const reduceScale = reduce.appendChild(document.createElement("span"));
|
||||
reduceScale.textContent = `${parseFloat((range.scale * 100).toFixed(2))}`;
|
||||
|
||||
if (range.probability < 1)
|
||||
{
|
||||
reduce.appendChild(document.createTextNode("("));
|
||||
const reduceProb = reduce.appendChild(document.createElement("span"));
|
||||
reduceProb.className = "reduce-probability";
|
||||
reduceProb.textContent = `${(range.probability * 100).toFixed(0)}`;
|
||||
reduce.appendChild(document.createTextNode(")"));
|
||||
}
|
||||
|
||||
const reduceGeneral = reduceHpRow.insertCell();
|
||||
reduceGeneral.textContent = `${Math.round(tHP * (range.min / 100) / (1 - range.scale))} ~ ${Math.round(tHP * (range.max/100) / (1 - range.scale))}`;
|
||||
|
||||
const reduceAwokenBind = reduceHpNoAwokenRow.insertCell();
|
||||
reduceAwokenBind.textContent = `${Math.round(tHPNoAwoken * (range.min / 100) / (1 - range.scale))} ~ ${Math.round(tHPNoAwoken * (range.max/100) / (1 - range.scale))}`;
|
||||
});
|
||||
return table;
|
||||
}
|
||||
if (reduceAttrRanges.some(r=>r != reduceAttrRanges[0])) //有指定属性减伤
|
||||
{
|
||||
reduceAttrRanges.forEach((reduceRanges, ridx)=>fragment.appendChild(insertHpRangeTable(reduceRanges, tHP, tHPNoAwoken, ridx)));
|
||||
}
|
||||
else //只有阶梯盾
|
||||
{
|
||||
const reduceRanges = reduceAttrRanges[0];
|
||||
fragment.appendChild(insertHpRangeTable(reduceRanges, tHP, tHPNoAwoken, 31));
|
||||
}
|
||||
|
||||
dialogContent.innerHTML = "";
|
||||
dialogContent.appendChild(fragment);
|
||||
this.classList.remove(className_displayNone);
|
||||
}
|
||||
hpDetailDialog.close = function()
|
||||
{
|
||||
this.classList.add(className_displayNone);
|
||||
}
|
||||
const hpDetailDialog_Close = hpDetailDialog.querySelector(".dialog-close");
|
||||
hpDetailDialog_Close.onclick = function(){hpDetailDialog.close();};
|
||||
const reduceDetailsBars = Array.from(formationBox.querySelectorAll(".tIf-total-hp .reduce-details"));
|
||||
reduceDetailsBars.forEach(bar => {
|
||||
bar.onclick = function(){
|
||||
hpDetailDialog.show(this.reduceAttrRanges, this.tHP, this.tHPNoAwoken);
|
||||
};
|
||||
});
|
||||
|
||||
//编辑框
|
||||
editBox.mid = null; //储存怪物id
|
||||
editBox.latent = []; //储存潜在觉醒
|
||||
|
@ -1403,25 +1510,6 @@ function initialize() {
|
|||
Math.max(thisValue,rangeHigh)
|
||||
)
|
||||
)).checked = true;
|
||||
/*
|
||||
if (rangeLow == rangeHigh)
|
||||
{
|
||||
if (thisValue == rangeLow)
|
||||
{
|
||||
s_rareLows.find(radio=>parseInt(radio.value,10) == 1).checked = true;
|
||||
s_rareHighs.find(radio=>parseInt(radio.value,10) == 10).checked = true;
|
||||
}else
|
||||
{
|
||||
s_rareLows.find(radio=>parseInt(radio.value,10) == Math.min(thisValue,rangeLow)).checked = true;
|
||||
s_rareHighs.find(radio=>parseInt(radio.value,10) == Math.max(thisValue,rangeLow)).checked = true;
|
||||
}
|
||||
}else
|
||||
{
|
||||
console.log("恢复单选");
|
||||
s_rareLows.find(radio=>parseInt(radio.value,10) == thisValue).checked = true;
|
||||
s_rareHighs.find(radio=>parseInt(radio.value,10) == thisValue).checked = true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
s_rareIcons.forEach(icon=>icon.onclick = s_rareIcons_onclick);
|
||||
const s_rareClear = s_rareDiv.querySelector(".rare-clear");
|
||||
|
@ -1493,11 +1581,11 @@ function initialize() {
|
|||
|
||||
const s_selectedAwokensUl = searchBox.querySelector(".selected-awokens");
|
||||
function search_awokenAdd1() {
|
||||
let count = parseInt(this.value || 0, 10);
|
||||
let count = parseInt(this.getAttribute("data-awoken-count") || 0, 10);
|
||||
const maxCount = parseInt(this.getAttribute("data-max-count") || 9, 10);
|
||||
if (count < maxCount) {
|
||||
count++;
|
||||
this.setAttribute("value", count);
|
||||
this.setAttribute("data-awoken-count", count);
|
||||
|
||||
const iconLi = document.createElement("li");
|
||||
const icon = iconLi.appendChild(document.createElement("icon"))
|
||||
|
@ -1510,16 +1598,13 @@ function initialize() {
|
|||
function search_awokenSub1() {
|
||||
const awokenId = this.getAttribute("data-awoken-icon");
|
||||
const awokenIcon = s_awokensIcons.find(icon=>icon.getAttribute("data-awoken-icon") == awokenId);
|
||||
let count = parseInt(awokenIcon.value || 0, 10);
|
||||
let count = parseInt(awokenIcon.getAttribute("data-awoken-count") || 0, 10);
|
||||
if (count > 0) {
|
||||
count--;
|
||||
awokenIcon.setAttribute("value", count);
|
||||
awokenIcon.setAttribute("data-awoken-count", count);
|
||||
}
|
||||
this.parentNode.remove();
|
||||
}
|
||||
function search_awokenClear() {
|
||||
this.setAttribute("value", 0);
|
||||
}
|
||||
s_awokensIcons.forEach(b => {
|
||||
b.onclick = search_awokenAdd1; //每种觉醒增加1
|
||||
});
|
||||
|
@ -1528,7 +1613,7 @@ function initialize() {
|
|||
const sawokenClear = searchBox.querySelector(".sawoken-clear");
|
||||
awokenClear.onclick = function() { //清空觉醒选项
|
||||
s_awokensIcons.forEach(t => {
|
||||
t.setAttribute("value", 0);
|
||||
t.setAttribute("data-awoken-count", 0);
|
||||
});
|
||||
s_selectedAwokensUl.innerHTML = "";
|
||||
};
|
||||
|
@ -1648,11 +1733,11 @@ function initialize() {
|
|||
s_rareHighs.filter(returnCheckedInput).map(returnInputValue).map(Str2Int)[0],
|
||||
];
|
||||
const sawokensFilter = s_sawokens.filter(returnCheckedInput).map(returnInputValue).map(Str2Int);
|
||||
const awokensFilter = s_awokensIcons.filter(btn => parseInt(btn.value, 10) > 0).map(btn => {
|
||||
const awokensFilter = s_awokensIcons.filter(btn => parseInt(btn.getAttribute("data-awoken-count"), 10) > 0).map(btn => {
|
||||
const awokenIndex = parseInt(btn.getAttribute("data-awoken-icon"), 10);
|
||||
return {
|
||||
id: awokenIndex,
|
||||
num: parseInt(btn.value, 10)
|
||||
num: parseInt(btn.getAttribute("data-awoken-count"), 10)
|
||||
};
|
||||
});
|
||||
const searchResult = searchCards(cards,
|
||||
|
@ -2020,7 +2105,7 @@ function initialize() {
|
|||
|
||||
teamData[editBox.memberIdx[1]][editBox.memberIdx[2]] = mon;
|
||||
|
||||
mon.id = parseInt(monstersID.value, 10);
|
||||
mon.id = editBox.mid;
|
||||
const card = Cards[mon.id] || Cards[0];
|
||||
const skill = Skills[card.activeSkillId];
|
||||
|
||||
|
@ -2067,6 +2152,10 @@ function initialize() {
|
|||
const formationTotalInfoDom = formationBox.querySelector(".formation-total-info"); //所有队伍能力值合计
|
||||
if (formationTotalInfoDom) refreshFormationTotalHP(formationTotalInfoDom, formation.teams);
|
||||
|
||||
const teamMenberAwokenDom = teamBigBox.querySelector(".team-menber-awoken"); //队员觉醒
|
||||
const teamAssistAwokenDom = teamBigBox.querySelector(".team-assist-awoken"); //辅助觉醒
|
||||
if (teamMenberAwokenDom && teamAssistAwokenDom) refreshMenberAwoken(teamMenberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒
|
||||
|
||||
const teamAwokenDom = teamBigBox.querySelector(".team-awoken"); //队伍觉醒合计
|
||||
if (teamAwokenDom) refreshTeamAwokenCount(teamAwokenDom, teamData);
|
||||
const formationAwokenDom = formationBox.querySelector(".formation-awoken"); //所有队伍觉醒合计
|
||||
|
@ -2102,6 +2191,10 @@ function initialize() {
|
|||
const formationTotalInfoDom = formationBox.querySelector(".formation-total-info"); //所有队伍能力值合计
|
||||
if (formationTotalInfoDom) refreshFormationTotalHP(formationTotalInfoDom, formation.teams);
|
||||
|
||||
const teamMenberAwokenDom = teamBigBox.querySelector(".team-menber-awoken"); //队员觉醒
|
||||
const teamAssistAwokenDom = teamBigBox.querySelector(".team-assist-awoken"); //辅助觉醒
|
||||
if (teamMenberAwokenDom && teamAssistAwokenDom) refreshMenberAwoken(teamMenberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒
|
||||
|
||||
const teamAwokenDom = teamBigBox.querySelector(".team-awoken"); //队伍觉醒合计
|
||||
if (teamAwokenDom) refreshTeamAwokenCount(teamAwokenDom, teamData);
|
||||
const formationAwokenDom = formationBox.querySelector(".formation-awoken"); //所有队伍觉醒合计
|
||||
|
@ -2129,6 +2222,10 @@ function initialize() {
|
|||
const formationTotalInfoDom = formationBox.querySelector(".formation-total-info"); //所有队伍能力值合计
|
||||
if (formationTotalInfoDom) refreshFormationTotalHP(formationTotalInfoDom, formation.teams);
|
||||
|
||||
const teamMenberAwokenDom = teamBigBox.querySelector(".team-menber-awoken"); //队员觉醒
|
||||
const teamAssistAwokenDom = teamBigBox.querySelector(".team-assist-awoken"); //辅助觉醒
|
||||
if (teamMenberAwokenDom && teamAssistAwokenDom) refreshMenberAwoken(teamMenberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒
|
||||
|
||||
const teamAwokenDom = teamBigBox.querySelector(".team-awoken"); //队伍觉醒合计
|
||||
if (teamAwokenDom) refreshTeamAwokenCount(teamAwokenDom, teamData);
|
||||
const formationAwokenDom = formationBox.querySelector(".formation-awoken"); //所有队伍觉醒合计
|
||||
|
@ -2869,6 +2966,8 @@ function refreshAll(formationData) {
|
|||
const latentsDom = teamBox.querySelector(".team-latents");
|
||||
const assistsDom = teamBox.querySelector(".team-assist");
|
||||
const teamAbilityDom = teamBigBox.querySelector(".team-ability");
|
||||
const teamMenberAwokenDom = teamBigBox.querySelector(".team-menber-awoken"); //队员觉醒
|
||||
const teamAssistAwokenDom = teamBigBox.querySelector(".team-assist-awoken"); //辅助觉醒
|
||||
for (let ti = 0, ti_len = membersDom.querySelectorAll(".member").length; ti < ti_len; ti++) {
|
||||
const member = membersDom.querySelector(`.member-${ti+1} .monster`);
|
||||
const latent = latentsDom.querySelector(`.latents-${ti+1} .latent-ul`);
|
||||
|
@ -2877,6 +2976,7 @@ function refreshAll(formationData) {
|
|||
changeid(teamData[1][ti], assist); //辅助
|
||||
refreshMemberSkillCD(teamBox, teamData, ti); //技能CD
|
||||
refreshAbility(teamAbilityDom, teamData, ti); //本人能力值
|
||||
refreshMenberAwoken(teamMenberAwokenDom, teamAssistAwokenDom, teamData, ti); //本人觉醒
|
||||
}
|
||||
const teamTotalInfoDom = teamBigBox.querySelector(".team-total-info"); //队伍能力值合计
|
||||
if (teamTotalInfoDom) refreshTeamTotalHP(teamTotalInfoDom, teamData, teamNum);
|
||||
|
@ -2998,6 +3098,73 @@ function refreshAbility(abilityDom, team, idx) {
|
|||
}
|
||||
});
|
||||
}
|
||||
//刷新队员觉醒
|
||||
function refreshMenberAwoken(menberAwokenDom, assistAwokenDom, team, idx) {
|
||||
if (!menberAwokenDom) return; //如果没有dom,直接跳过
|
||||
|
||||
const memberData = team[0][idx];
|
||||
const assistData = team[1][idx];
|
||||
//队员觉醒
|
||||
let menberAwokens = Cards[memberData.id].awakenings.slice(0,memberData.awoken);
|
||||
//单人和三人为队员增加超觉醒
|
||||
if ((solo || teamsCount === 3) && memberData.sawoken >= 0) menberAwokens.push(Cards[memberData.id].superAwakenings[memberData.sawoken]);
|
||||
//menberAwokens.sort();
|
||||
//武器觉醒
|
||||
let assistAwokens = Cards[assistData.id].awakenings.slice(0,assistData.awoken);
|
||||
if (!assistAwokens.includes(49)) assistAwokens = []; //清空非武器的觉醒
|
||||
//assistAwokens.sort();
|
||||
/*if (assistAwokens.includes(49))
|
||||
{
|
||||
menberAwokens = menberAwokens.concat(assistAwokens);
|
||||
}*/
|
||||
|
||||
const menberAwokenUl = menberAwokenDom.querySelector(`.menber-awoken-${idx + 1} .awoken-ul`);
|
||||
const assistAwokenUl = assistAwokenDom.querySelector(`.menber-awoken-${idx + 1} .awoken-ul`);
|
||||
/* //通用的
|
||||
function countNum(arr) {
|
||||
const map = arr.reduce(function(preMap, value){
|
||||
return preMap.set(value, (preMap.get(value) || 0) + 1);
|
||||
}, new Map());
|
||||
return Array.from(map);
|
||||
};*/
|
||||
function countAwokenNum(arr) {
|
||||
const map = arr.reduce(function(preMap, value){
|
||||
const eak = equivalent_awoken.find(eako => eako.big === value);
|
||||
if (eak)
|
||||
{
|
||||
return preMap.set(eak.small, (preMap.get(eak.small) || 0) + eak.times);
|
||||
}else
|
||||
{
|
||||
return preMap.set(value, (preMap.get(value) || 0) + 1);
|
||||
}
|
||||
}, new Map());
|
||||
return Array.from(map);
|
||||
};
|
||||
/*const hideAwokens = [49,1,2,3,63];
|
||||
if (solo) hideAwokens.push(30); //协力觉醒
|
||||
if (!solo) hideAwokens.push(63); //掉落觉醒
|
||||
menberAwokens = menberAwokens.filter(ak=>!hideAwokens.includes(ak));*/
|
||||
let menberAwokensCount = countAwokenNum(menberAwokens);
|
||||
menberAwokenUl.innerHTML = '';
|
||||
menberAwokensCount.forEach(akc=>{
|
||||
const iconLi = document.createElement("li");
|
||||
const icon = iconLi.appendChild(document.createElement("icon"))
|
||||
icon.className = "awoken-icon";
|
||||
icon.setAttribute("data-awoken-icon", akc[0]);
|
||||
icon.setAttribute("data-awoken-count", akc[1]);
|
||||
menberAwokenUl.appendChild(iconLi);
|
||||
});
|
||||
let assistAwokensCount = countAwokenNum(assistAwokens);
|
||||
assistAwokenUl.innerHTML = '';
|
||||
assistAwokensCount.forEach(akc=>{
|
||||
const iconLi = document.createElement("li");
|
||||
const icon = iconLi.appendChild(document.createElement("icon"))
|
||||
icon.className = "awoken-icon";
|
||||
icon.setAttribute("data-awoken-icon", akc[0]);
|
||||
icon.setAttribute("data-awoken-count", akc[1]);
|
||||
assistAwokenUl.appendChild(iconLi);
|
||||
});
|
||||
}
|
||||
|
||||
function setTextContentAndAttribute(dom,str)
|
||||
{
|
||||
|
@ -3006,13 +3173,49 @@ function setTextContentAndAttribute(dom,str)
|
|||
dom.setAttribute(dataAttrName, str);
|
||||
}
|
||||
|
||||
function drawHpInfo(hpBarDom, reduceAttrRanges)
|
||||
{
|
||||
const width = hpBarDom.width, height = hpBarDom.height;
|
||||
|
||||
let ctx = hpBarDom.getContext("2d");
|
||||
if (reduceAttrRanges.some(r=>r != reduceAttrRanges[0])) //有指定属性减伤
|
||||
{
|
||||
const attrColors = ['crimson','cornflowerblue','green','goldenrod','purple'];
|
||||
reduceAttrRanges.forEach((reduceRanges, ridx)=>{
|
||||
//console.table(reduceRanges);
|
||||
ctx.fillStyle = attrColors[ridx];
|
||||
ctx.fillRect(0, height / 5 * ridx, width, height / 5 * (ridx + 1));
|
||||
|
||||
reduceRanges.forEach(range=>{
|
||||
ctx.fillStyle = `rgba(0, 0, 0, 0.5)`;
|
||||
ctx.fillRect(width * (range.min / 100), height / 5 * ridx, width * (range.max / 100), height / 5 * (1 - range.scale));
|
||||
});
|
||||
});
|
||||
}
|
||||
else //只有阶梯盾
|
||||
{
|
||||
const reduceRanges = reduceAttrRanges[0];
|
||||
//创建线性颜色渐变对象
|
||||
const canvasGradient = ctx.createLinearGradient(0, 0, 0, height);
|
||||
canvasGradient.addColorStop(0, "#EE99AA");
|
||||
canvasGradient.addColorStop(0.4, "#FFDDEE");
|
||||
canvasGradient.addColorStop(1, "#EE9999");
|
||||
ctx.fillStyle = canvasGradient;
|
||||
ctx.fillRect(0, 0, width, height);
|
||||
|
||||
reduceRanges.forEach(range=>{
|
||||
ctx.fillStyle = `rgba(204, 0 ,85, 0.7)`;
|
||||
ctx.fillRect(width * (range.min / 100), 0, width * ((range.max - range.min) / 100), height * (1 - range.scale));
|
||||
});
|
||||
}
|
||||
}
|
||||
//刷新队伍能力值合计
|
||||
function refreshTeamTotalHP(totalDom, team, teamIdx) {
|
||||
//计算总的生命值
|
||||
if (!totalDom) return;
|
||||
const tHpDom = totalDom.querySelector(".tIf-total-hp");
|
||||
const tRcvDom = totalDom.querySelector(".tIf-total-rcv");
|
||||
const tMoveDom = totalDom.querySelector(".tIf-total-move");
|
||||
const tEffectDom = totalDom.querySelector(".tIf-effect");
|
||||
|
||||
const teams = formation.teams;
|
||||
|
||||
|
@ -3020,9 +3223,24 @@ function refreshTeamTotalHP(totalDom, team, teamIdx) {
|
|||
const leader2id = teamsCount===2 ? (teamIdx === 1 ? teams[0][0][0].id : teams[1][0][0].id) : team[0][5].id;
|
||||
|
||||
if (tHpDom) {
|
||||
const reduceScale1 = getReduceScale(Skills[Cards[leader1id].leaderSkillId],true,true,true);
|
||||
const reduceScale2 = getReduceScale(Skills[Cards[leader2id].leaderSkillId],true,true,true);
|
||||
const totalReduce = 1 - (1 - reduceScale1) * (1 - reduceScale2);
|
||||
const reduceScales1 = getReduceScales(leader1id);
|
||||
const reduceScales2 = getReduceScales(leader2id);
|
||||
const reduceAttrRanges = getReduceRange(reduceScales1.concat(reduceScales2));
|
||||
//将所有范围平铺,然后选择盾最少那个作为基础盾值
|
||||
const leastScale = reduceAttrRanges.flat().sort((a,b)=>a.scale-b.scale)[0];
|
||||
|
||||
const hpBar = totalDom.querySelector(".reduce-details");
|
||||
|
||||
if (reduceAttrRanges.some(r=>r != reduceAttrRanges[0]) || reduceAttrRanges[0].length > 1 || reduceAttrRanges[0][0].probability < 1) //有阶梯盾或者有指定属性减伤或者减伤比例不是100%
|
||||
{
|
||||
drawHpInfo(hpBar, reduceAttrRanges);
|
||||
hpBar.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
hpBar.classList.add(className_displayNone);
|
||||
}
|
||||
|
||||
const totalReduce = leastScale.scale;
|
||||
|
||||
const teamHPArr = countTeamHp(team[0], leader1id, leader2id, solo);
|
||||
const teamHPNoAwokenArr = countTeamHp(team[0], leader1id, leader2id, solo, true);
|
||||
|
@ -3031,7 +3249,6 @@ function refreshTeamTotalHP(totalDom, team, teamIdx) {
|
|||
let tHP = teamHPArr.reduce((pv, v) => pv + v); //队伍计算的总HP
|
||||
let tHPNoAwoken = teamHPNoAwokenArr.reduce((pv, v) => pv + v); //队伍计算的总HP无觉醒
|
||||
|
||||
|
||||
const teamHPAwoken = awokenCountInTeam(team, 46, solo, teamsCount); //全队大血包个数
|
||||
|
||||
let badgeHPScale = 1; //徽章倍率
|
||||
|
@ -3044,18 +3261,27 @@ function refreshTeamTotalHP(totalDom, team, teamIdx) {
|
|||
tHP = Math.round(Math.round(tHP * (1 + 0.05 * teamHPAwoken)) * badgeHPScale);
|
||||
tHPNoAwoken = Math.round(Math.round(tHPNoAwoken) * badgeHPScale);
|
||||
|
||||
const tReduceHP = Math.round(tHP / (1 - reduceScale1) / (1 - reduceScale2)); //队伍正常满血加上盾能承受的最大伤害
|
||||
const tReduceHPNoAwoken = Math.round(tHPNoAwoken / (1 - reduceScale1) / (1 - reduceScale2)); //队伍封觉醒满血加上盾能承受的最大伤害
|
||||
//记录到bar中,方便打开详情时调用
|
||||
hpBar.reduceAttrRanges = reduceAttrRanges;
|
||||
hpBar.tHP = tHP;
|
||||
hpBar.tHPNoAwoken = tHPNoAwoken;
|
||||
|
||||
const tReduceHP = Math.round(tHP / (1 - totalReduce)); //队伍正常满血加上盾能承受的最大伤害
|
||||
const tReduceHPNoAwoken = Math.round(tHPNoAwoken / (1 - totalReduce)); //队伍封觉醒满血加上盾能承受的最大伤害
|
||||
|
||||
const tHpDom_general = tHpDom.querySelector(".general");
|
||||
const tHpDom_noAwoken = tHpDom.querySelector(".awoken-bind");
|
||||
const tHpDom_reduce = tHpDom.querySelector(".reduce");
|
||||
|
||||
setTextContentAndAttribute(tHpDom_general, tHP);
|
||||
setTextContentAndAttribute(tHpDom_noAwoken, tHPNoAwoken);
|
||||
setTextContentAndAttribute(tHpDom_reduce, (totalReduce * 100).keepCounts());
|
||||
tHpDom_reduce.setAttribute("data-max-equal-general", tReduceHP);
|
||||
tHpDom_reduce.setAttribute("data-max-equal-awoken-bind", tReduceHPNoAwoken);
|
||||
setTextContentAndAttribute(tHpDom_general, tHP.bigNumberToString());
|
||||
setTextContentAndAttribute(tHpDom_noAwoken, tHPNoAwoken.bigNumberToString());
|
||||
if (totalReduce > 0)
|
||||
tHpDom_reduce.classList.remove("no-reduce");
|
||||
else
|
||||
tHpDom_reduce.classList.add("no-reduce");
|
||||
setTextContentAndAttribute(tHpDom_reduce.querySelector(".reduce-scale"), (totalReduce * 100).toFixed(2));
|
||||
setTextContentAndAttribute(tHpDom_reduce.querySelector(".general"), tReduceHP.bigNumberToString());
|
||||
setTextContentAndAttribute(tHpDom_reduce.querySelector(".awoken-bind"), tReduceHPNoAwoken.bigNumberToString());
|
||||
}
|
||||
|
||||
if (tMoveDom) {
|
||||
|
@ -3075,22 +3301,85 @@ function refreshTeamTotalHP(totalDom, team, teamIdx) {
|
|||
setTextContentAndAttribute(tMoveDom_noAwoken, (moveTime.duration.default + moveTime.duration.leader + moveTime.duration.badge).keepCounts());
|
||||
}
|
||||
}
|
||||
|
||||
if (tEffectDom) {
|
||||
const _76board = tEffectDom.querySelector("._76board");
|
||||
if (tIf_Effect_76board(leader1id,leader2id))
|
||||
{
|
||||
_76board.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
_76board.classList.add(className_displayNone);
|
||||
}
|
||||
const noSkyfall = tEffectDom.querySelector(".no-skyfall");
|
||||
if (tIf_Effect_noSkyfall(leader1id,leader2id))
|
||||
{
|
||||
noSkyfall.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
noSkyfall.classList.add(className_displayNone);
|
||||
}
|
||||
const poisonNoEffect = tEffectDom.querySelector(".poison-no-effect");
|
||||
if (tIf_Effect_poisonNoEffect(leader1id,leader2id))
|
||||
{
|
||||
poisonNoEffect.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
poisonNoEffect.classList.add(className_displayNone);
|
||||
}
|
||||
const addCombo = tEffectDom.querySelector(".add-combo");
|
||||
const addComboValue = tIf_Effect_addCombo(leader1id,leader2id);
|
||||
if ((addComboValue[0] | addComboValue[1]) > 0)
|
||||
{
|
||||
addCombo.classList.remove(className_displayNone);
|
||||
addCombo.setAttribute("data-add-combo", addComboValue.filter(v=>v).join("/"));
|
||||
}else
|
||||
{
|
||||
addCombo.classList.add(className_displayNone);
|
||||
}
|
||||
const inflicts = tEffectDom.querySelector(".inflicts");
|
||||
const inflictsValue = tIf_Effect_inflicts(leader1id,leader2id);
|
||||
if ((inflictsValue[0] | inflictsValue[1]) > 0)
|
||||
{
|
||||
inflicts.classList.remove(className_displayNone);
|
||||
inflicts.setAttribute("data-inflicts", inflictsValue.filter(v=>v).map(v=>v.bigNumberToString()).join("/"));
|
||||
}else
|
||||
{
|
||||
inflicts.classList.add(className_displayNone);
|
||||
}
|
||||
}
|
||||
}
|
||||
//刷新所有队伍能力值合计
|
||||
function refreshFormationTotalHP(totalDom, teams) {
|
||||
//计算总的生命值
|
||||
if (!totalDom) return;
|
||||
const tHpDom = totalDom.querySelector(".tIf-total-hp");
|
||||
const tRcvDom = totalDom.querySelector(".tIf-total-rcv");
|
||||
const tEffectDom = totalDom.querySelector(".tIf-effect");
|
||||
|
||||
//因为目前仅用于2P,所以直接在外面固定写了
|
||||
const leader1id = teams[0][0][0].id;
|
||||
const leader2id = teams[1][0][0].id;
|
||||
|
||||
if (tHpDom) {
|
||||
//因为目前仅用于2P,所以直接在外面固定写了
|
||||
const leader1id = teams[0][0][0].id;
|
||||
const leader2id = teams[1][0][0].id;
|
||||
|
||||
const reduceScale1 = getReduceScale(Skills[Cards[leader1id].leaderSkillId],true,true,true);
|
||||
const reduceScale2 = getReduceScale(Skills[Cards[leader2id].leaderSkillId],true,true,true);
|
||||
const totalReduce = 1 - (1 - reduceScale1) * (1 - reduceScale2);
|
||||
const reduceScales1 = getReduceScales(leader1id);
|
||||
const reduceScales2 = getReduceScales(leader2id);
|
||||
const reduceAttrRanges = getReduceRange(reduceScales1.concat(reduceScales2));
|
||||
//将所有范围平铺,然后选择盾最少那个作为基础盾值
|
||||
const leastScale = reduceAttrRanges.flat().sort((a,b)=>a.scale-b.scale)[0];
|
||||
|
||||
const hpBar = totalDom.querySelector(".reduce-details");
|
||||
|
||||
if (reduceAttrRanges.some(r=>r != reduceAttrRanges[0]) || reduceAttrRanges[0].length > 1 || reduceAttrRanges[0][0].probability < 1) //有阶梯盾或者有指定属性减伤或者减伤比例不是100%
|
||||
{
|
||||
drawHpInfo(hpBar, reduceAttrRanges);
|
||||
hpBar.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
hpBar.classList.add(className_displayNone);
|
||||
}
|
||||
|
||||
const totalReduce = leastScale.scale;
|
||||
|
||||
const tHPArr = teams.map(function(team) {
|
||||
const teamHPArr = countTeamHp(team[0], leader1id, leader2id, solo);
|
||||
|
@ -3110,18 +3399,74 @@ function refreshFormationTotalHP(totalDom, teams) {
|
|||
const tHP = tHPArr.reduce((pv, v) => pv + v);
|
||||
const tHPNoAwoken = tHPNoAwokenArr.reduce((pv, v) => pv + v);
|
||||
|
||||
const tReduceHP = Math.round(tHP / (1 - reduceScale1) / (1 - reduceScale2)); //队伍正常满血加上盾能承受的最大伤害
|
||||
const tReduceHPNoAwoken = Math.round(tHPNoAwoken / (1 - reduceScale1) / (1 - reduceScale2)); //队伍封觉醒满血加上盾能承受的最大伤害
|
||||
//记录到bar中,方便打开详情时调用
|
||||
hpBar.reduceAttrRanges = reduceAttrRanges;
|
||||
hpBar.tHP = tHP;
|
||||
hpBar.tHPNoAwoken = tHPNoAwoken;
|
||||
|
||||
const tReduceHP = Math.round(tHP / totalReduce); //队伍正常满血加上盾能承受的最大伤害
|
||||
const tReduceHPNoAwoken = Math.round(tHPNoAwoken / totalReduce); //队伍封觉醒满血加上盾能承受的最大伤害
|
||||
|
||||
const tHpDom_general = tHpDom.querySelector(".general");
|
||||
const tHpDom_noAwoken = tHpDom.querySelector(".awoken-bind");
|
||||
const tHpDom_reduce = tHpDom.querySelector(".reduce");
|
||||
|
||||
setTextContentAndAttribute(tHpDom_general, tHP);
|
||||
setTextContentAndAttribute(tHpDom_noAwoken, tHPNoAwoken);
|
||||
setTextContentAndAttribute(tHpDom_reduce, (totalReduce * 100).keepCounts());
|
||||
tHpDom_reduce.setAttribute("data-max-equal-general", tReduceHP);
|
||||
tHpDom_reduce.setAttribute("data-max-equal-awoken-bind", tReduceHPNoAwoken);
|
||||
setTextContentAndAttribute(tHpDom_general, tHP.bigNumberToString());
|
||||
setTextContentAndAttribute(tHpDom_noAwoken, tHPNoAwoken.bigNumberToString());
|
||||
if (totalReduce > 0)
|
||||
tHpDom_reduce.classList.remove("no-reduce");
|
||||
else
|
||||
tHpDom_reduce.classList.add("no-reduce");
|
||||
setTextContentAndAttribute(tHpDom_reduce.querySelector(".reduce-scale"), (totalReduce * 100).toFixed(2));
|
||||
setTextContentAndAttribute(tHpDom_reduce.querySelector(".general"), tReduceHP.bigNumberToString());
|
||||
setTextContentAndAttribute(tHpDom_reduce.querySelector(".awoken-bind"), tReduceHPNoAwoken.bigNumberToString());
|
||||
}
|
||||
|
||||
if (tEffectDom) {
|
||||
const _76board = tEffectDom.querySelector("._76board");
|
||||
if (tIf_Effect_76board(leader1id,leader2id))
|
||||
{
|
||||
_76board.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
_76board.classList.add(className_displayNone);
|
||||
}
|
||||
const noSkyfall = tEffectDom.querySelector(".no-skyfall");
|
||||
if (tIf_Effect_noSkyfall(leader1id,leader2id))
|
||||
{
|
||||
noSkyfall.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
noSkyfall.classList.add(className_displayNone);
|
||||
}
|
||||
const poisonNoEffect = tEffectDom.querySelector(".poison-no-effect");
|
||||
if (tIf_Effect_poisonNoEffect(leader1id,leader2id))
|
||||
{
|
||||
poisonNoEffect.classList.remove(className_displayNone);
|
||||
}else
|
||||
{
|
||||
poisonNoEffect.classList.add(className_displayNone);
|
||||
}
|
||||
const addCombo = tEffectDom.querySelector(".add-combo");
|
||||
const addComboValue = tIf_Effect_addCombo(leader1id,leader2id);
|
||||
if ((addComboValue[0] | addComboValue[1]) > 0)
|
||||
{
|
||||
addCombo.classList.remove(className_displayNone);
|
||||
addCombo.setAttribute("data-add-combo", addComboValue.filter(v=>v).join("/"));
|
||||
}else
|
||||
{
|
||||
addCombo.classList.add(className_displayNone);
|
||||
}
|
||||
const inflicts = tEffectDom.querySelector(".inflicts");
|
||||
const inflictsValue = tIf_Effect_inflicts(leader1id,leader2id);
|
||||
if ((inflictsValue[0] | inflictsValue[1]) > 0)
|
||||
{
|
||||
inflicts.classList.remove(className_displayNone);
|
||||
inflicts.setAttribute("data-inflicts", inflictsValue.filter(v=>v).map(v=>v.bigNumberToString()).join("/"));
|
||||
}else
|
||||
{
|
||||
inflicts.classList.add(className_displayNone);
|
||||
}
|
||||
}
|
||||
}
|
||||
//刷新单人技能CD
|
||||
|
|
74
solo.html
|
@ -45,8 +45,9 @@ var formation = new Formation(teamsCount,6);
|
|||
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-mon-id" id="show-mon-id" onclick="toggleDomClassName(this,'not-show-mon-id',false);" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-mon-skill-cd" id="btn-show-mon-skill-cd"><label class="config-checkbox-lbl btn-show-mon-skill-cd-lbl" for="btn-show-mon-skill-cd"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-mon-awoken" id="btn-show-mon-awoken"><label class="config-checkbox-lbl btn-show-mon-awoken-lbl" for="btn-show-mon-awoken"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-mon-id" id="show-mon-id" onclick="toggleDomClassName(this,'not-show-mon-id',false);" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="change-swap-to-copy" id="change-swap-to-copy"><label class="config-checkbox-lbl change-swap-to-copy-lbl" for="change-swap-to-copy"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
</div>
|
||||
<div class="status"><span class="icon"></span><span class="text"></span></div>
|
||||
|
@ -79,12 +80,24 @@ var formation = new Formation(teamsCount,6);
|
|||
<div class="tIf-total-hp">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<span class="reduce"></span>
|
||||
<span class="reduce">
|
||||
<span class="reduce-scale"></span>
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<canvas height="20" width="100" class="reduce-details display-none"></canvas>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tIf-total-move">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
</div>
|
||||
<div class="tIf-effect">
|
||||
<icon class="_76board display-none"></icon>
|
||||
<icon class="no-skyfall display-none"></icon>
|
||||
<icon class="poison-no-effect display-none"></icon>
|
||||
<icon class="add-combo display-none"></icon>
|
||||
<icon class="inflicts display-none"></icon>
|
||||
</div>
|
||||
</div>
|
||||
</ul>
|
||||
<div class="team-box-name">
|
||||
|
@ -307,6 +320,58 @@ var formation = new Formation(teamsCount,6);
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="team-menber-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-assist-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-ability">
|
||||
<li class="abilitys abilitys-1">
|
||||
<div class="hp"></div><div class="atk"></div><div class="rcv"></div>
|
||||
|
@ -413,6 +478,11 @@ var formation = new Formation(teamsCount,6);
|
|||
</li>
|
||||
</ul>
|
||||
<div class="detail-box edit"><textarea class="detail" placeholder="输入说明"></textarea><div class="detail-display"></div></div>
|
||||
<div class="dialog dialog-hp-detail display-none">
|
||||
<div class="dialog-title"></div>
|
||||
<div class="dialog-content"></div>
|
||||
<div class="dialog-control"><button class="dialog-close brown-button"></button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="edit-box display-none">
|
||||
<div class="edit-box-title"><!--修改怪物--></div>
|
||||
|
|
437
style.css
|
@ -184,6 +184,119 @@ ul{
|
|||
min-width: 648px;
|
||||
}
|
||||
|
||||
/*弹出窗口相关*/
|
||||
.dialog
|
||||
{
|
||||
color: white;
|
||||
position: absolute;
|
||||
padding: 5px;
|
||||
border: 2px ridge #D1D398;
|
||||
top: 0;
|
||||
background-image: linear-gradient(to bottom,#788321f0,#3E4D14f0);
|
||||
border-radius: 6px;
|
||||
box-shadow: black 2px 0px 1px,black 0px 2px 1px,black -2px 0px 1px,black 0px -2px 1px;
|
||||
margin-left: calc(50% - 200px);
|
||||
margin-top: 30px;
|
||||
font-family: var(--game-font-family);
|
||||
text-shadow: black 2px 2px 0;
|
||||
}
|
||||
.dialog .dialog-title
|
||||
{
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.dialog .dialog-content .additional-string
|
||||
{
|
||||
border-top: 2px solid white;
|
||||
margin-top: 5px;
|
||||
}
|
||||
/*.dialog .dialog-content .additional-string::before
|
||||
{
|
||||
content: "其他語言";
|
||||
}*/
|
||||
.dialog .dialog-control
|
||||
{
|
||||
text-align: center;
|
||||
margin-top:10px;
|
||||
}
|
||||
.brown-button
|
||||
{
|
||||
background-image: linear-gradient(to bottom,#C38E5F,#2F2008);
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
padding: 2px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.1s;
|
||||
}
|
||||
.brown-button:active
|
||||
{
|
||||
transform: scale(1.1);
|
||||
}
|
||||
.brown-button::before
|
||||
{
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
width: 100px;
|
||||
padding: 5px;
|
||||
background-color: #956A42;
|
||||
background-image: url(images/slate.svg);
|
||||
background-size: 120px 120px;
|
||||
border-radius: 2px;
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
color: white;
|
||||
font-family: var(--game-font-family);
|
||||
text-shadow: black 2px 2px 0;
|
||||
}
|
||||
/*
|
||||
.dialog-search-string .dialog-title::before
|
||||
{
|
||||
content: "以字符串搜索";
|
||||
}
|
||||
.dialog-close::before
|
||||
{
|
||||
content: "关闭";
|
||||
}
|
||||
*/
|
||||
.dialog-search-string
|
||||
{
|
||||
width: 260px;
|
||||
}
|
||||
.dialog-search-string .string-copy,
|
||||
.dialog-search-string .string-search
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: 45px;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
background-color: #994433;
|
||||
border: 2px solid #FFCC88;
|
||||
box-shadow: black 1px 0 1px,black -1px 0 1px,black 0 -1px 1px,black 0 3px 2px;
|
||||
border-radius: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
.dialog-search-string .string-copy::before
|
||||
{
|
||||
content: "📋";
|
||||
}
|
||||
.dialog-search-string .string-search::before
|
||||
{
|
||||
content: "🔍";
|
||||
}
|
||||
.dialog-search-string .string-value
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: calc(100% - 50px * 2);
|
||||
}
|
||||
.dialog-search-string .additional-string .string-value
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: calc(100% - 50px * 1);
|
||||
}
|
||||
|
||||
/*单个怪物*/
|
||||
.monster{
|
||||
font-family: var(--game-font-family);
|
||||
|
@ -576,40 +689,128 @@ ul{
|
|||
display: inline-block;
|
||||
}
|
||||
/*各种信息统计的图标*/
|
||||
.tIf-total-hp::before,
|
||||
.tIf-total-move::before,
|
||||
.tIf-total-move,
|
||||
.tIf-effect
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
.tIf-total-hp .general::before,
|
||||
.tIf-total-hp .awoken-bind::before,
|
||||
.tIf-total-hp .reduce .reduce-scale::before,
|
||||
.tIf-total-hp .reduce .general::before,
|
||||
.tIf-total-hp .reduce .awoken-bind::before,
|
||||
.tIf-total-move .general::before,
|
||||
.tIf-total-move .awoken-bind::before,
|
||||
.tIf-total-move.fixed-move-time::after,
|
||||
.tIf-total-hp .reduce::before
|
||||
.tIf-effect icon::before,
|
||||
icon.poison-no-effect::after,
|
||||
.hp-range-table th::before
|
||||
{
|
||||
content: " ";
|
||||
background-size: cover;
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.tIf-total-hp .awoken-bind::before,
|
||||
.tIf-total-move .awoken-bind::before
|
||||
.tIf-total-hp .reduce .awoken-bind::before,
|
||||
.tIf-total-move .awoken-bind::before,
|
||||
.hp-range-table .awoken-bind th::before,
|
||||
.hp-range-table .reduce-awoken-bind th::before
|
||||
{
|
||||
background-image: url(images/icon-awoken-bind.png);
|
||||
}
|
||||
|
||||
.tIf-total-hp::before{
|
||||
.tIf-total-hp .general::before,
|
||||
.tIf-total-hp .reduce .general::before,
|
||||
.hp-range-table .general th::before,
|
||||
.hp-range-table .reduce-general th::before
|
||||
{
|
||||
background-image: url(images/icon-HP.png);
|
||||
}
|
||||
|
||||
.tIf-total-hp .reduce::before{
|
||||
.tIf-total-hp .reduce .reduce-scale::before,
|
||||
.hp-range-table .reduce-scale th::before
|
||||
{
|
||||
background-image: url(images/icon-reduce.png);
|
||||
}
|
||||
.tIf-total-hp .reduce::after{
|
||||
.tIf-total-hp .reduce .reduce-scale::after{
|
||||
content: "%⇔";
|
||||
}
|
||||
.tIf-total-hp .reduce.no-reduce .reduce-scale::after,
|
||||
.hp-range-table .hp-range td span:after,
|
||||
.hp-range-table .reduce-scale td span:after
|
||||
{
|
||||
content: "%";
|
||||
}
|
||||
.tIf-total-hp .reduce:not([data-value="0"])::after{
|
||||
.tIf-total-hp .reduce.no-reduce .general,
|
||||
.tIf-total-hp .reduce.no-reduce .awoken-bind
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
.tIf-total-hp .reduce:not([data-value="0"])::after
|
||||
{
|
||||
content: "%⇔" attr(data-max-equal-general) "/" attr(data-max-equal-awoken-bind);
|
||||
}
|
||||
|
||||
.tIf-total-move::before{
|
||||
.reduce-details
|
||||
{
|
||||
cursor: pointer;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.reduce-details:hover
|
||||
{
|
||||
box-shadow: red 0 0 3px;
|
||||
}
|
||||
.dialog-hp-detail
|
||||
{
|
||||
margin-left: calc(50% - 200px);
|
||||
margin-top: 100px;
|
||||
}
|
||||
.hp-range-table
|
||||
{
|
||||
font-family: var(--font-family);
|
||||
border: 1px solid white;
|
||||
background-color: saddlebrown;
|
||||
}
|
||||
.hp-range-table caption::before
|
||||
{
|
||||
font-family: var(--game-font-family);
|
||||
}
|
||||
.hp-range-table td,
|
||||
.hp-range-table th
|
||||
{
|
||||
border: 1px solid white;
|
||||
padding: 0 4px;
|
||||
}
|
||||
.hp-range-table .hp-range th::before
|
||||
{
|
||||
width: unset;
|
||||
height: unset;
|
||||
}
|
||||
.hp-range-table[data-attr="0"]
|
||||
{
|
||||
background-color: crimson;
|
||||
}
|
||||
.hp-range-table[data-attr="1"]
|
||||
{
|
||||
background-color: cornflowerblue;
|
||||
}
|
||||
.hp-range-table[data-attr="2"]
|
||||
{
|
||||
background-color: green;
|
||||
}
|
||||
.hp-range-table[data-attr="3"]
|
||||
{
|
||||
background-color: goldenrod;
|
||||
}
|
||||
.hp-range-table[data-attr="4"]
|
||||
{
|
||||
background-color: purple;
|
||||
}
|
||||
|
||||
.tIf-total-move .general::before{
|
||||
background-image: url(images/icon-orb-move-time.png);
|
||||
}
|
||||
/*固定手指的情况*/
|
||||
|
@ -628,12 +829,13 @@ ul{
|
|||
opacity: 0;
|
||||
}
|
||||
}
|
||||
.tIf-total-move.fixed-move-time::after
|
||||
.tIf-total-move.fixed-move-time::after,
|
||||
icon.poison-no-effect::after
|
||||
{
|
||||
background-image: url(images/icon-bind.png);
|
||||
position: absolute;
|
||||
left:0;
|
||||
top:2px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
animation: hidden-visible-animate 0.5s infinite ease-in alternate;
|
||||
}
|
||||
/*单人时的协力觉醒和多人时的掉落觉醒显示无效*/
|
||||
|
@ -649,6 +851,50 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
|
|||
animation: hidden-visible-animate 0.5s infinite ease-in alternate;
|
||||
}
|
||||
|
||||
.tIf-effect icon
|
||||
{
|
||||
position: relative;
|
||||
}
|
||||
icon._76board::before
|
||||
{
|
||||
background-image: url(images/icon-76board.png);
|
||||
}
|
||||
icon.no-skyfall::before
|
||||
{
|
||||
background-image: url(images/icon-no-skyfall.png);
|
||||
}
|
||||
icon.poison-no-effect::before
|
||||
{
|
||||
background-image: url(images/icon-poison.png);
|
||||
}
|
||||
icon.add-combo
|
||||
{
|
||||
margin-right: 7px;
|
||||
}
|
||||
icon.add-combo::before
|
||||
{
|
||||
background-image: url(images/icon-add-combo.png);
|
||||
}
|
||||
icon.add-combo::after
|
||||
{
|
||||
color: white;
|
||||
text-shadow: black 1px 1px 0,black -1px 0px 0,black 0 0 1px;
|
||||
font-family: var(--game-font-family);
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 10px;
|
||||
content: attr(data-add-combo);
|
||||
}
|
||||
icon.inflicts::before
|
||||
{
|
||||
background-image: url(images/icon-inflicts.png);
|
||||
}
|
||||
icon.inflicts::after
|
||||
{
|
||||
content: attr(data-inflicts);
|
||||
}
|
||||
|
||||
/*队伍的潜觉*/
|
||||
.team-latents .latents{
|
||||
width: var(--head-block-width);
|
||||
|
@ -826,7 +1072,42 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
|
|||
.abilitys .rcv::before{
|
||||
content: "回复:";
|
||||
}*/
|
||||
|
||||
/*队员觉醒统计*/
|
||||
.menber-awoken
|
||||
{
|
||||
width: var(--head-block-width);
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
.team-menber-awoken,
|
||||
.team-assist-awoken
|
||||
{
|
||||
margin-top: 3px;
|
||||
display : none;
|
||||
}
|
||||
.menber-awoken .awoken-ul
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
.menber-awoken .awoken-ul>li
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
.menber-awoken .awoken-icon
|
||||
{
|
||||
filter: unset;
|
||||
transform: scale(0.80);
|
||||
margin: calc(-32px * (1 - 0.80) / 2);
|
||||
}
|
||||
.show-mon-awoken .team-assist-awoken,
|
||||
.show-mon-awoken .team-menber-awoken
|
||||
{
|
||||
display : block;
|
||||
}
|
||||
.show-mon-awoken .monster .super-awoken
|
||||
{
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
/*编辑窗口*/
|
||||
.blur-bg{
|
||||
|
@ -997,8 +1278,8 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
|
|||
.custom-addition .awoken-icon
|
||||
{
|
||||
filter: unset;
|
||||
transform: scale(0.75);
|
||||
margin: calc(-32px * (1 - 0.75) / 2);
|
||||
transform: scale(0.75);
|
||||
margin: calc(-32px * (1 - 0.75) / 2);
|
||||
}
|
||||
|
||||
.cd-preview .cd-max,
|
||||
|
@ -1373,7 +1654,7 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
|
|||
{
|
||||
content: "×";
|
||||
}
|
||||
.search-box .awoken-div .awoken-icon
|
||||
.awoken-icon
|
||||
{
|
||||
position: relative;
|
||||
border: none;
|
||||
|
@ -1386,16 +1667,15 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
|
|||
text-align: left;
|
||||
}
|
||||
|
||||
.search-box .awoken-div .awoken-icon:not([value]),
|
||||
.search-box .awoken-div .awoken-icon[value="0"],
|
||||
.search-box .awoken-div .awoken-icon:not([value])~.awoken-sub1,
|
||||
.search-box .awoken-div .awoken-icon[value="0"]~.awoken-sub1
|
||||
.search-box .awoken-div .awoken-icon:not([data-awoken-count]),
|
||||
.search-box .awoken-div .awoken-icon[data-awoken-count="0"]
|
||||
{
|
||||
opacity: var(--search-icon-unchecked);
|
||||
}
|
||||
.awoken-div .awoken-icon:not([value="0"])::before
|
||||
|
||||
.awoken-icon:not([data-awoken-count="0"])::before
|
||||
{
|
||||
content: attr(value);
|
||||
content: attr(data-awoken-count);
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
line-height: 18px;
|
||||
|
@ -1403,7 +1683,6 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
|
|||
right: 0;
|
||||
bottom: 0;
|
||||
-webkit-text-stroke: 1px black;
|
||||
text-stroke: 1px black;
|
||||
text-shadow: black 1px 1px 1px;
|
||||
}
|
||||
.search-box .awoken-ul .awoken-count.zero{
|
||||
|
@ -2332,114 +2611,6 @@ table .orb-icon
|
|||
display: table-cell;
|
||||
}
|
||||
|
||||
/*弹出窗口相关*/
|
||||
.dialog
|
||||
{
|
||||
position: absolute;
|
||||
padding: 5px;
|
||||
border: 2px ridge #D1D398;
|
||||
top: 0;
|
||||
background-image: linear-gradient(to bottom,#788321f0,#3E4D14f0);
|
||||
border-radius: 6px;
|
||||
box-shadow: black 2px 0px 1px,black 0px 2px 1px,black -2px 0px 1px,black 0px -2px 1px;
|
||||
width: 260px;
|
||||
margin-left: calc(50% - 130px);
|
||||
margin-top: 30px;
|
||||
font-family: var(--game-font-family);
|
||||
text-shadow: black 2px 2px 0;
|
||||
}
|
||||
.dialog .dialog-title
|
||||
{
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.dialog .dialog-content .additional-string
|
||||
{
|
||||
border-top: 2px solid white;
|
||||
margin-top: 5px;
|
||||
}
|
||||
/*.dialog .dialog-content .additional-string::before
|
||||
{
|
||||
content: "其他語言";
|
||||
}*/
|
||||
.dialog .dialog-control
|
||||
{
|
||||
text-align: center;
|
||||
margin-top:10px;
|
||||
}
|
||||
.brown-button
|
||||
{
|
||||
background-image: linear-gradient(to bottom,#C38E5F,#2F2008);
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
padding: 2px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.1s;
|
||||
}
|
||||
.brown-button:active
|
||||
{
|
||||
transform: scale(1.1);
|
||||
}
|
||||
.brown-button::before
|
||||
{
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
width: 100px;
|
||||
padding: 5px;
|
||||
background-color: #956A42;
|
||||
background-image: url(images/slate.svg);
|
||||
background-size: 120px 120px;
|
||||
border-radius: 2px;
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
color: white;
|
||||
font-family: var(--game-font-family);
|
||||
text-shadow: black 2px 2px 0;
|
||||
}
|
||||
/*
|
||||
.dialog-search-string .dialog-title::before
|
||||
{
|
||||
content: "以字符串搜索";
|
||||
}
|
||||
.dialog-close::before
|
||||
{
|
||||
content: "关闭";
|
||||
}
|
||||
*/
|
||||
.dialog-search-string .string-copy,
|
||||
.dialog-search-string .string-search
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: 45px;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
background-color: #994433;
|
||||
border: 2px solid #FFCC88;
|
||||
box-shadow: black 1px 0 1px,black -1px 0 1px,black 0 -1px 1px,black 0 3px 2px;
|
||||
border-radius: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
.dialog-search-string .string-copy::before
|
||||
{
|
||||
content: "📋";
|
||||
}
|
||||
.dialog-search-string .string-search::before
|
||||
{
|
||||
content: "🔍";
|
||||
}
|
||||
.dialog-search-string .string-value
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: calc(100% - 50px * 2);
|
||||
}
|
||||
.dialog-search-string .additional-string .string-value
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: calc(100% - 50px * 1);
|
||||
}
|
||||
|
||||
/*.open-evolutionary-tree::before
|
||||
{
|
||||
|
|
206
triple.html
|
@ -59,8 +59,9 @@ var formation = new Formation(teamsCount,6);
|
|||
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-mon-id" id="show-mon-id" onclick="toggleDomClassName(this,'not-show-mon-id',false);" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-mon-skill-cd" id="btn-show-mon-skill-cd"><label class="config-checkbox-lbl btn-show-mon-skill-cd-lbl" for="btn-show-mon-skill-cd"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-mon-awoken" id="btn-show-mon-awoken"><label class="config-checkbox-lbl btn-show-mon-awoken-lbl" for="btn-show-mon-awoken"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-mon-id" id="show-mon-id" onclick="toggleDomClassName(this,'not-show-mon-id',false);" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="btn-show-awoken-count" id="btn-show-awoken-count" onclick="toggleDomClassName(this,'not-show-awoken-count',false);" checked><label class="config-checkbox-lbl btn-show-awoken-count-lbl" for="btn-show-awoken-count"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="change-swap-to-copy" id="change-swap-to-copy"><label class="config-checkbox-lbl change-swap-to-copy-lbl" for="change-swap-to-copy"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
</div>
|
||||
|
@ -94,12 +95,24 @@ var formation = new Formation(teamsCount,6);
|
|||
<div class="tIf-total-hp">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<span class="reduce"></span>
|
||||
<span class="reduce">
|
||||
<span class="reduce-scale"></span>
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<canvas height="20" width="100" class="reduce-details display-none"></canvas>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tIf-total-move">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
</div>
|
||||
<div class="tIf-effect">
|
||||
<icon class="_76board display-none"></icon>
|
||||
<icon class="no-skyfall display-none"></icon>
|
||||
<icon class="poison-no-effect display-none"></icon>
|
||||
<icon class="add-combo display-none"></icon>
|
||||
<icon class="inflicts display-none"></icon>
|
||||
</div>
|
||||
</div>
|
||||
</ul>
|
||||
<div class="team-box-name">
|
||||
|
@ -322,6 +335,58 @@ var formation = new Formation(teamsCount,6);
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="team-menber-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-assist-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-ability">
|
||||
<li class="abilitys abilitys-1">
|
||||
<div class="hp"></div><div class="atk"></div><div class="rcv"></div>
|
||||
|
@ -451,12 +516,24 @@ var formation = new Formation(teamsCount,6);
|
|||
<div class="tIf-total-hp">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<span class="reduce"></span>
|
||||
<span class="reduce">
|
||||
<span class="reduce-scale"></span>
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<canvas height="20" width="100" class="reduce-details display-none"></canvas>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tIf-total-move">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
</div>
|
||||
<div class="tIf-effect">
|
||||
<icon class="_76board display-none"></icon>
|
||||
<icon class="no-skyfall display-none"></icon>
|
||||
<icon class="poison-no-effect display-none"></icon>
|
||||
<icon class="add-combo display-none"></icon>
|
||||
<icon class="inflicts display-none"></icon>
|
||||
</div>
|
||||
</div>
|
||||
</ul>
|
||||
<div class="team-box-name">
|
||||
|
@ -679,6 +756,58 @@ var formation = new Formation(teamsCount,6);
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="team-menber-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-assist-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-ability">
|
||||
<li class="abilitys abilitys-1">
|
||||
<div class="hp"></div><div class="atk"></div><div class="rcv"></div>
|
||||
|
@ -808,12 +937,24 @@ var formation = new Formation(teamsCount,6);
|
|||
<div class="tIf-total-hp">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<span class="reduce"></span>
|
||||
<span class="reduce">
|
||||
<span class="reduce-scale"></span>
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
<canvas height="20" width="100" class="reduce-details display-none"></canvas>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tIf-total-move">
|
||||
<span class="general"></span>
|
||||
<span class="awoken-bind"></span>
|
||||
</div>
|
||||
<div class="tIf-effect">
|
||||
<icon class="_76board display-none"></icon>
|
||||
<icon class="no-skyfall display-none"></icon>
|
||||
<icon class="poison-no-effect display-none"></icon>
|
||||
<icon class="add-combo display-none"></icon>
|
||||
<icon class="inflicts display-none"></icon>
|
||||
</div>
|
||||
</div>
|
||||
</ul>
|
||||
<div class="team-box-name">
|
||||
|
@ -1036,6 +1177,58 @@ var formation = new Formation(teamsCount,6);
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="team-menber-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-assist-awoken">
|
||||
<li class="menber-awoken menber-awoken-1">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-2">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-3">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-4">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-5">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="menber-awoken menber-awoken-6">
|
||||
<ul class="awoken-ul">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="team-ability">
|
||||
<li class="abilitys abilitys-1">
|
||||
<div class="hp"></div><div class="atk"></div><div class="rcv"></div>
|
||||
|
@ -1142,6 +1335,11 @@ var formation = new Formation(teamsCount,6);
|
|||
</li>
|
||||
</ul>
|
||||
<div class="detail-box edit"><textarea class="detail" placeholder="输入说明"></textarea><div class="detail-display"></div></div>
|
||||
<div class="dialog dialog-hp-detail display-none">
|
||||
<div class="dialog-title"></div>
|
||||
<div class="dialog-content"></div>
|
||||
<div class="dialog-control"><button class="dialog-close brown-button"></button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="edit-box display-none">
|
||||
<div class="edit-box-title"><!--修改怪物--></div>
|
||||
|
|