|
|
|
@@ -1,112 +1,133 @@ |
|
|
|
var fs = require('fs');
|
|
|
|
var officialAPI = ["ja","en","ko"]; //来源于官方API
|
|
|
|
var custom = ["cht","chs"]; //来源于自定义文件
|
|
|
|
const fs = require('fs');
|
|
|
|
var officialAPI = [ //来源于官方API
|
|
|
|
{
|
|
|
|
code:"ja",
|
|
|
|
customName:["cht","chs"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
code:"en",
|
|
|
|
customName:[]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
code:"ko",
|
|
|
|
customName:[]
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
var cards = officialAPI.map(function(code){
|
|
|
|
console.log("正在读取官方 " + code + " 信息");
|
|
|
|
var json = fs.readFileSync("official-API/" + code +".json", 'utf-8'); //使用同步读取
|
|
|
|
var card = JSON.parse(json).card;//将字符串转换为json对象
|
|
|
|
return card;
|
|
|
|
officialAPI.forEach(function(lang){
|
|
|
|
console.log("正在读取官方 " + lang.code + " 信息");
|
|
|
|
let json = fs.readFileSync("official-API/" + lang.code +".json", 'utf-8'); //使用同步读取
|
|
|
|
lang.cardOriginal = JSON.parse(json).card;//将字符串转换为json对象
|
|
|
|
})
|
|
|
|
|
|
|
|
var mainCard = cards[0]; //数据的主要card
|
|
|
|
var mArr = []; //储存输出内容
|
|
|
|
//比较两只怪物是否是同一只(在不同语言服务器)
|
|
|
|
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]; //超觉醒的序号
|
|
|
|
|
|
|
|
let res = true;
|
|
|
|
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[10] != m2[10]) return false; //最大等级
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
for (let li = 0;li < officialAPI.length; li++)
|
|
|
|
{
|
|
|
|
let otherLangs = officialAPI.concat(); //复制一份原始数组
|
|
|
|
let lang = otherLangs.splice(li,1)[0]; //删掉并取得当前的数组
|
|
|
|
let card = lang.cardOriginal;
|
|
|
|
let monArray = []; //储存输出内容
|
|
|
|
|
|
|
|
var maxLength = cards.map(function(card){ //获取最大怪物id
|
|
|
|
var length = card.length;
|
|
|
|
for (var mi=0;mi<card.length;mi++)
|
|
|
|
for (let mi=0; mi<card.length && card[mi][0] == mi; mi++)
|
|
|
|
{
|
|
|
|
if (card[mi][0] != mi) //id超了,都是些怪物了
|
|
|
|
{
|
|
|
|
length = mi;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return length;
|
|
|
|
}).sort(function(a,b){return b-a;})[0];
|
|
|
|
//if (card[mi][0] != mi) {break;}//id超了,都是些怪物了
|
|
|
|
let m = card[mi];
|
|
|
|
|
|
|
|
for (var mi=0;mi<maxLength;mi++)
|
|
|
|
{
|
|
|
|
var m = mainCard[mi]; //预设默认的数据
|
|
|
|
//名字对象
|
|
|
|
let nameObj = {},dname = m[1];
|
|
|
|
nameObj[lang.code] = dname;
|
|
|
|
|
|
|
|
//名字对象
|
|
|
|
var nameObj = {};
|
|
|
|
officialAPI.forEach(function(code,idx){
|
|
|
|
var _m = cards[idx][mi];
|
|
|
|
if (_m[0] == mi) //如果id是一致的才添加,否则是怪物,不添加
|
|
|
|
{
|
|
|
|
if (_m && !/^\*+/.test(_m[1])) //没有数据,或者名字是星号,则为空
|
|
|
|
otherLangs.forEach(function(olang){
|
|
|
|
let _m = olang.cardOriginal[mi]; //获得这种语言的当前这个怪物数据
|
|
|
|
let oname = _m[1];
|
|
|
|
if (_m[0] == mi //id和位置相等
|
|
|
|
&& !/^\*+/.test(oname) //名字不是星号开头
|
|
|
|
&& !/^\?+/.test(oname)) //名字不是问号开头
|
|
|
|
{
|
|
|
|
nameObj[code] = _m[1]; //储存当前语言,问号也存
|
|
|
|
if (m[0] != mi || /^\?+/.test(m[1])) //如果日服没有基础数据,或日服是问号而后面的有内容,则使用后面服的数据
|
|
|
|
if (sameCard(m,_m)) //如果这个怪物与原语言怪物时同一只,则储存它的名字
|
|
|
|
{
|
|
|
|
m = _m;
|
|
|
|
nameObj[olang.code] = oname; //增加储存当前语言
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
//因为觉醒数量的不一样,所以需要制定序号
|
|
|
|
var awokenCIdx = 58+m[57]*3; //awoken Count Index,觉醒数量的序号
|
|
|
|
var superAwokenIdx = awokenCIdx+1+m[awokenCIdx]; //super awoken Index,超觉醒的序号
|
|
|
|
//因为觉醒数量的不一样,所以需要制定序号
|
|
|
|
let awokenCountIdx = 58+m[57]*3; //awoken Count Index,觉醒数量的序号
|
|
|
|
let superAwokenIdx = awokenCountIdx+1+m[awokenCountIdx]; //super awoken Index,超觉醒的序号
|
|
|
|
|
|
|
|
//类型
|
|
|
|
var type = [m[5]];
|
|
|
|
if (m[6]!=-1) //第二个type
|
|
|
|
type.push(m[6]);
|
|
|
|
if (m[superAwokenIdx+3]!=-1) //第三个type要倒着来
|
|
|
|
type.push(m[superAwokenIdx+3]);
|
|
|
|
//类型
|
|
|
|
let type = [m[5]];
|
|
|
|
if (m[6]!=-1) //第二个type
|
|
|
|
type.push(m[6]);
|
|
|
|
if (m[superAwokenIdx+3]!=-1) //第三个type
|
|
|
|
type.push(m[superAwokenIdx+3]);
|
|
|
|
|
|
|
|
var awoken = m.slice(awokenCIdx+1,awokenCIdx+1+m[awokenCIdx]); //具体觉醒编号的数组
|
|
|
|
let awokens = m.slice(awokenCountIdx+1,awokenCountIdx+1+m[awokenCountIdx]); //具体觉醒编号的数组
|
|
|
|
|
|
|
|
var mon = {
|
|
|
|
id: m[0],
|
|
|
|
name: nameObj,
|
|
|
|
ppt: [m[2],m[3]], //属性property
|
|
|
|
type: type,
|
|
|
|
rare: m[7], //稀有度
|
|
|
|
awoken: awoken, //觉醒
|
|
|
|
maxLv: m[10],
|
|
|
|
assist: (m[superAwokenIdx+7]>2 && [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];
|
|
|
|
var superAwoken = //超觉醒
|
|
|
|
m[superAwokenIdx].length>0
|
|
|
|
? (m[superAwokenIdx].split(",").map(function(sa){return parseInt(sa);}))
|
|
|
|
: null;
|
|
|
|
if (superAwoken)
|
|
|
|
let mon = {
|
|
|
|
id: m[0],
|
|
|
|
name: nameObj,
|
|
|
|
ppt: [m[2],m[3]], //属性property
|
|
|
|
type: type,
|
|
|
|
rare: m[7], //稀有度
|
|
|
|
awoken: awokens, //觉醒
|
|
|
|
maxLv: m[10],
|
|
|
|
assist: (m[superAwokenIdx+7]>2 && [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.sAwoken = superAwoken;
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
mArr.push(mon);
|
|
|
|
}
|
|
|
|
|
|
|
|
var cards_c = custom.map(function(code){
|
|
|
|
console.log("正在读取自定义 " + code + " 信息");
|
|
|
|
var json = fs.readFileSync("custom/" + code +".json", 'utf-8'); //使用同步读取
|
|
|
|
var card = JSON.parse(json);//将字符串转换为json对象
|
|
|
|
return card;
|
|
|
|
})
|
|
|
|
|
|
|
|
cards_c.forEach(function(card,cidx){ //每个文件循环
|
|
|
|
card.forEach(function(cm,idx){ //每个文件内的名字循环
|
|
|
|
var m = mArr[cm.id];
|
|
|
|
m.name[custom[cidx]] = cm.name;
|
|
|
|
//加入自定义的语言
|
|
|
|
lang.customName.forEach(function(lcode){
|
|
|
|
console.log("正在读取自定义 " + lcode + " 信息");
|
|
|
|
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];
|
|
|
|
if (m)
|
|
|
|
m.name[lcode] = cm.name;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
var str = JSON.stringify(mArr);
|
|
|
|
fs.writeFile('./mon.json',str,function(err){
|
|
|
|
if(err){
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
console.log('----------导出成功-------------');
|
|
|
|
}) |
|
|
|
let str = JSON.stringify(monArray);
|
|
|
|
fs.writeFile('./mon_'+lang.code+'.json',str,function(err){
|
|
|
|
if(err){
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
console.log('mon_'+lang.code+'.json 导出成功');
|
|
|
|
})
|
|
|
|
} |