From 4baf96555ff22f7947ffbb9f06fef8a626e28058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Mon, 4 Nov 2019 11:20:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E4=B8=89=E7=BB=B4=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- monsters-info/extractByNode.js | 229 ++++++++++++++--------- monsters-info/official-API/test-mon.html | 102 ++++++++-- universal_function.js | 12 +- 3 files changed, 233 insertions(+), 110 deletions(-) diff --git a/monsters-info/extractByNode.js b/monsters-info/extractByNode.js index 19577865..d4f5afd1 100644 --- a/monsters-info/extractByNode.js +++ b/monsters-info/extractByNode.js @@ -14,61 +14,97 @@ var officialAPI = [ //来源于官方API } ]; +//分析卡片的函数,Code From pad-rikuu +function parseCard(data) { + const card = { + attrs: [], + 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.unk08 = data[i++]; //未知08 + card.unk09 = data[i++]; //未知09 + card.specialAttribute = data[i++]; //特别属性,比如黄龙 + if (i !== data.length) + console.log(`residue data for #${card.id}: ${i} ${data.length}`); + return card; +} + officialAPI.forEach(function(lang){ console.log("正在读取官方 " + lang.code + " 信息"); let json = fs.readFileSync("official-API/" + lang.code +".json", 'utf-8'); //使用同步读取 let card = lang.cardOriginal = JSON.parse(json).card;//将字符串转换为json对象 - let monArray = lang.monArray = []; //储存输出内容 + let monCard = lang.cards = []; //储存格式化后的输出内容 for (let mi=0; mi2 && [303,305,307,600,602].indexOf(m[0])<0)?1:0, //但是5种小企鹅是特殊情况 - ability: [ //三维 - [m[14],m[15]], //HP - [m[17],m[18]], //ATK - [m[20],m[21]], //RCV - ], - } - if (m[superAwokenIdx+9]>0) //如果可以110级 - { - mon.a110 = m[superAwokenIdx+9]; - let superAwoken = //超觉醒 - m[superAwokenIdx].length>0 - ? (m[superAwokenIdx].split(",").map(function(sa){return parseInt(sa);})) - : null; - if (superAwoken) - { - mon.sAwoken = superAwoken; - } - } - monArray.push(mon); + let m = parseCard(card[mi]); + monCard.push(m); } //加入自定义的语言 @@ -77,47 +113,29 @@ officialAPI.forEach(function(lang){ let json = fs.readFileSync("custom/" + lcode +".json", 'utf-8'); //使用同步读取 let ccard = JSON.parse(json);//将字符串转换为json对象 ccard.forEach(function(cm,idx){ //每个文件内的名字循环 - let m = monArray[cm.id]; + let m = monCard[cm.id]; if (m) - m.name[lcode] = cm.name; + { + if (!m.otlName) //如果没有其他语言名称属性,则添加一个对象属性 + m.otlName = {}; + m.otlName[lcode] = cm.name; + } }); }); }) -/* -//比较两只怪物是否是同一只(在不同语言服务器),原始数据模式 -function sameCard(m1,m2) -{ - //因为觉醒数量的不一样,所以需要制定序号 - //let awokenCountIdx1 = 58+m1[57]*3; //觉醒数量的序号 - //let superAwokenIdx1 = awokenCountIdx1+1+m1[awokenCountIdx1]; //超觉醒的序号 - //let awokenCountIdx2 = 58+m2[57]*3; //觉醒数量的序号 - //let superAwokenIdx2 = awokenCountIdx2+1+m2[awokenCountIdx2]; //超觉醒的序号 - if (m1[0]==4949)console.log(m1[7],m2[7],m1[7] != m2[7]) - - if (m1 == undefined || m2 == undefined) return false; //是否存在 - if (m1[2] != m2[2]) return false; //主属性 - if (m1[3] != m2[3]) return false; //副属性 - if (m1[5] != m2[5]) return false; //type1 - if (m1[6] != m2[6]) return false; //type2 - //if (m1[superAwokenIdx+3] != m2[superAwokenIdx+3]) return false; //type3 - if (m1[7] != m2[7]) return false; //稀有度 - if (m1[10] != m2[10]) return false; //最大等级 - return true; -} -*/ //比较两只怪物是否是同一只(在不同语言服务器) function sameCard(m1,m2) { if (m1 == undefined || m2 == undefined) return false; //是否存在 - if (m1.ppt[0] != m2.ppt[0]) return false; //主属性 - if (m1.ppt[1] != m2.ppt[1]) return false; //副属性 - if (m1.type.length != m2.type.length) return false; //副属性 - if (m1.type.some(function(t1,ti){ - return m2.type[ti] == undefined || m2.type[ti] != t1; + if (m1.attrs[0] != m2.attrs[0]) return false; //主属性 + if (m1.attrs[1] != m2.attrs[1]) return false; //副属性 + if (m1.types.length != m2.types.length) return false; //类型长度 + if (m1.types.some(function(t1,ti){ + return m2.types[ti] == undefined || m2.types[ti] != t1; })) return false; //全部类型 - if (m1.rare != m2.rare) return false; //稀有度 - if (m1.maxLv != m2.maxLv) return false; //最大等级 + if (m1.maxLevel != m2.maxLevel) return false; //最大等级 + if (m1.collabId != m2.collabId) return false; //合作ID return true; } //加入其他语言 @@ -125,28 +143,32 @@ for (let li = 0;li < officialAPI.length; li++) { let otherLangs = officialAPI.concat(); //复制一份原始数组,储存其他语言 let lang = otherLangs.splice(li,1)[0]; //删掉并取得当前的语言 - let monArray = lang.monArray; //储存输出内容 + let monCard = lang.cards //储存输出内容 - for (let mi=0; mi0) + sm.sAwoken = m.superAwakenings; + if (m.limitBreakIncr>0) + sm.a110 = m.limitBreakIncr; + return sm; + }) + let str = JSON.stringify(outCards); fs.writeFile('./mon_'+lang.code+'.json',str,function(err){ if(err){ console.error(err); diff --git a/monsters-info/official-API/test-mon.html b/monsters-info/official-API/test-mon.html index dcaef382..49f756cc 100644 --- a/monsters-info/official-API/test-mon.html +++ b/monsters-info/official-API/test-mon.html @@ -4,7 +4,7 @@ 怪物代码测试