PADDashFormation/monsters-info/official-API/parseCard.js

87 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//分析卡片的函数,Code From https://github.com/kiootic/pad-rikuu
class Card{
constructor(data){
let card = this;
card.attrs=[];
card.types=[];
let i = 0;
function readCurve() {
return {
min: data[i++],
max: data[i++],
scale: data[i++],
};
}
card.id = data[i++]; //ID
card.name = data[i++]; //名字
card.attrs.push(data[i++]); //属性1
card.attrs.push(data[i++]); //属性2
card.isUltEvo = data[i++] !== 0; //是否究极进化
card.types.push(data[i++]); //类型1
card.types.push(data[i++]); //类型2
card.rarity = data[i++]; //星级
card.cost = data[i++]; //cost
card.unk01 = data[i++]; //未知01
card.maxLevel = data[i++]; //最大等级
card.feedExp = data[i++]; //1级喂食经验需要除以4
card.isEmpty = data[i++] === 1; //空卡片?
card.sellPrice = data[i++]; //1级卖钱需要除以10
card.hp = readCurve(); //HP增长
card.atk = readCurve(); //攻击增长
card.rcv = readCurve(); //回复增长
card.exp = { min: 0, max: data[i++], scale: data[i++] }; //经验增长
card.activeSkillId = data[i++]; //主动技
card.leaderSkillId = data[i++]; //队长技
card.enemy = { //作为怪物的数值
countdown: data[i++],
hp: readCurve(),
atk: readCurve(),
def: readCurve(),
maxLevel: data[i++],
coin: data[i++],
exp: data[i++]
};
card.evoBaseId = data[i++]; //进化基础ID
card.evoMaterials = [data[i++], data[i++], data[i++], data[i++], data[i++]]; //进化素材
card.unevoMaterials = [data[i++], data[i++], data[i++], data[i++], data[i++]]; //退化素材
card.unk02 = data[i++]; //未知02
card.unk03 = data[i++]; //未知03
card.unk04 = data[i++]; //未知04
card.unk05 = data[i++]; //未知05
card.unk06 = data[i++]; //未知06
card.unk07 = data[i++]; //未知07
const numSkills = data[i++]; //几种敌人技能
card.enemy.skills = Array.from(new Array(numSkills)).map(() => ({
id: data[i++],
ai: data[i++],
rnd: data[i++]
}));
const numAwakening = data[i++]; //觉醒个数
card.awakenings = Array.from(new Array(numAwakening)).map(() => data[i++]);
const sAwakeningStr = data[i++];
card.superAwakenings = sAwakeningStr.length>0?(sAwakeningStr.split(',')).map(Number):[]; //超觉醒
card.evoRootId = data[i++]; //进化链根ID
card.seriesId = data[i++]; //系列ID
card.types.push(data[i++]); //类型3
card.sellMP = data[i++]; //卖多少MP
card.latentAwakeningId = data[i++]; //潜在觉醒ID
card.collabId = data[i++]; //合作ID
const flags = data[i++]; //一个旗子?
card.unk08 = flags; //未知08
card.canAssist = (flags & 1) !== 0; //是否能当二技
card.enabled = (flags & 1<<1) !== 0; //是否已启用
card.overlay = card.types.some(t => { //这步还是猜测,是否能合并
return t == 0 || t == 12 || t == 14; //0進化用;12能力覺醒用;14強化合成用;15販賣用
}) && (flags & 1<<3) === 0; //進化用、能力覺醒用、強化合成用且flag有1000时
card.is8Latent = (flags & 1<<5) !== 0; //是否支持8个潜觉
card.altName = data[i++].split("|").filter(str=>str.length); //替换名字(分类标签)
card.limitBreakIncr = data[i++]; //110级增长
card.voiceId = data[i++]; //语音觉醒的ID
card.blockSkinId = data[i++]; //珠子皮肤ID
card.specialAttribute = data[i++]; //特别属性,比如黄龙
if (i !== data.length)
console.log(`residue data for #${card.id}: ${i} ${data.length}`);
}
}
//对于Nodejs输出成模块
if (typeof(module) != "undefined") module.exports = Card;