Browse Source

开发了三个不同服务器的数据输出

tags/v2.5
枫谷剑仙 6 years ago
parent
commit
9eb2ddf6b2
3 changed files with 114 additions and 93 deletions
  1. +112
    -91
      monsters-info/extractByNode.js
  2. +1
    -1
      monsters-info/提取中文数据.bat
  3. +1
    -1
      solo.html

+ 112
- 91
monsters-info/extractByNode.js View File

@@ -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 导出成功');
})
}

+ 1
- 1
monsters-info/提取中文数据.bat View File

@@ -2,6 +2,6 @@
echo 开始提取网页数据
node.exe extract_CHT.js
echo 正在将繁体中文转换为简体中文
opencc\opencc.exe -i custom\cht.json -o custom\chs.json -c opencc\t2s.json
opencc\opencc.exe -i custom\cht.json -o custom\chs.json -c opencc\hk2s.json
echo 转换完成
pause

+ 1
- 1
solo.html View File

@@ -23,7 +23,7 @@ var formation = new Formation(1,6);
<body>
<div class="control-box">
<label class="languages-label"><select class="languages"></select></label><button class="btn-show-mon-id" onclick="document.body.classList.toggle('not-show-mon-id');"></button><a href="index.html" class="multi-link"></a>
<label class="languages-label"><select class="languages"></select></label><label class="datasource-label"><select class="datasource"></select></label><button class="btn-show-mon-id" onclick="document.body.classList.toggle('not-show-mon-id');"></button><a href="index.html" class="multi-link"></a>
</div>
<div class="formation-box">
<div class="title-box"><input type="text" class="title" placeholder="输入阵型标题" /></div>


Loading…
Cancel
Save