diff --git a/monsters-info/extractByNode.js b/monsters-info/extractByNode.js index 0899c077..38a3e023 100644 --- a/monsters-info/extractByNode.js +++ b/monsters-info/extractByNode.js @@ -1,4 +1,5 @@ const fs = require('fs'); +const Card = require('./official-API/parseCard'); var officialAPI = [ //来源于官方API { code:"ja", @@ -14,87 +15,6 @@ var officialAPI = [ //来源于官方API } ]; -//分析卡片的函数,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.altName = data[i++]; //替换名字 - card.limitBreakIncr = data[i++]; //110级增长 - card.unk09 = data[i++]; //未知09 - card.blockSkinId = data[i++]; //珠子皮肤ID - card.specialAttribute = data[i++]; //特别属性字符串,比如黄龙 - if (i !== data.length) - console.log(`residue data for #${card.id}: ${i} ${data.length}`); - } -} - //比较两只怪物是否是同一只(在不同语言服务器) function sameCard(m1,m2) { @@ -109,7 +29,6 @@ function sameCard(m1,m2) if (m1.collabId != m2.collabId) return false; //合作ID return true; } - /* * 正式流程 */ diff --git a/monsters-info/official-API/parseCard.js b/monsters-info/official-API/parseCard.js new file mode 100644 index 00000000..0cb7551f --- /dev/null +++ b/monsters-info/official-API/parseCard.js @@ -0,0 +1,87 @@ +//分析卡片的函数,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 & parseInt("1",2)) !== 0; //是否能当二技 + card.enabled = (flags & parseInt("10",2)) !== 0; //是否已启用 + card.overlay = card.types.some(t => { //这步还是猜测,是否能合并 + return t == 0 || t == 12 || t == 14; //0進化用;12能力覺醒用;14強化合成用;15販賣用 + }) && (flags & parseInt("1000",2)) === 0; //進化用、能力覺醒用、強化合成用,且flag有1000时 + card.is8Latent = (flags & parseInt("10000",2)) !== 0; //是否支持8个潜觉 + card.altName = data[i++]; //替换名字 + card.limitBreakIncr = data[i++]; //110级增长 + card.unk09 = data[i++]; //未知09 + 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; \ No newline at end of file diff --git a/monsters-info/official-API/test-mon.html b/monsters-info/official-API/test-mon.html index 6bd69eb1..61cc4dc2 100644 --- a/monsters-info/official-API/test-mon.html +++ b/monsters-info/official-API/test-mon.html @@ -3,8 +3,10 @@