Browse Source

怪物数据加上card名字

tags/v8.0
枫谷剑仙 6 years ago
parent
commit
5c914e28f7
7 changed files with 7 additions and 404 deletions
  1. +2
    -2
      monsters-info/extractByNode.js
  2. +0
    -0
      monsters-info/official-API/en-card.json
  3. +0
    -0
      monsters-info/official-API/ja-card.json
  4. +0
    -0
      monsters-info/official-API/ko-card.json
  5. +2
    -16
      monsters-info/official-API/test-mon.html
  6. +0
    -383
      monsters-info/official-API/test-skill.html
  7. +3
    -3
      update-manifest.js

+ 2
- 2
monsters-info/extractByNode.js View File

@@ -37,12 +37,12 @@ function sameCard(m1,m2)
*/
officialAPI.forEach(function(lang) {
console.log("正在读取官方 %s 信息",lang.code);
const cardJson = fs.readFileSync("official-API/" + lang.code +".json", 'utf-8'); //使用同步读取怪物
const cardJson = fs.readFileSync("official-API/" + lang.code +"-card.json", 'utf-8'); //使用同步读取怪物
const cardJsonObj = JSON.parse(cardJson);
const oCards = lang.cardOriginal = cardJsonObj.card;//将字符串转换为json对象
const monCards = lang.cards = [];
for (let cardIndex = 0; oCards[cardIndex][0] === maxCardIndex; cardIndex++)
for (let cardIndex = 0; oCards[cardIndex][0] === cardIndex; cardIndex++)
{
monCards.push(new Card(oCards[cardIndex]));
}


monsters-info/official-API/en.json → monsters-info/official-API/en-card.json View File


monsters-info/official-API/ja.json → monsters-info/official-API/ja-card.json View File


monsters-info/official-API/ko.json → monsters-info/official-API/ko-card.json View File


+ 2
- 16
monsters-info/official-API/test-mon.html View File

@@ -30,6 +30,7 @@ var GM_xmlhttpRequest = function(GM_param) {
function g(id)
{
console.log("原始数组",m);
console.log("已解析对象",pcards[id]); //输出人家大佬的格式
let m = cards[id];
@@ -72,25 +73,10 @@ function g(id)
m[40], //可退化?
m[41],m[42],m[43],m[44],m[45], //进化素材ID 1-5
);
console.log("原始数组",m);
//if (m[57]>0) console.log("[57]="+m[57]);
/*
m[superAwokenIdx+1], //进化根编号
m[superAwokenIdx+2], //
m[superAwokenIdx+3], //第三个type
m[superAwokenIdx+4], //卖MP
m[superAwokenIdx+5], //
m[superAwokenIdx+6], //
m[superAwokenIdx+7], //是否能当二技
m[superAwokenIdx+8], //怀疑是区分怪物所属合作的文字
m[superAwokenIdx+9], //110级增长
m[superAwokenIdx+10], //
m[superAwokenIdx+11], //
*/
}
GM_xmlhttpRequest({
method: "GET",
url:"ja.json",
url:"ja-card.json",
onload: function(response) {
const originalJSON = JSON.parse(response.response);
console.log(originalJSON)


+ 0
- 383
monsters-info/official-API/test-skill.html View File

@@ -1,383 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>技能代码测试</title>
<script type="text/javascript">
var skill;
var mid;
var GM_xmlhttpRequest = function(GM_param) {
var xhr = new XMLHttpRequest(); //创建XMLHttpRequest对象
xhr.open(GM_param.method, GM_param.url, true);
if (GM_param.responseType) xhr.responseType = GM_param.responseType;
if (GM_param.overrideMimeType) xhr.overrideMimeType(GM_param.overrideMimeType);
xhr.onreadystatechange = function() //设置回调函数
{
if (xhr.readyState === xhr.DONE) {
if (xhr.status === 200 && GM_param.onload)
GM_param.onload(xhr);
if (xhr.status !== 200 && GM_param.onerror)
GM_param.onerror(xhr);
}
}
for (var header in GM_param.headers) {
xhr.setRequestHeader(header, GM_param.headers[header]);
}
xhr.send(GM_param.data ? GM_param.data : null);
}
GM_xmlhttpRequest({
method: "GET",
url:"ja-skill.json",
onload: function(response) {
skill = JSON.parse(response.response).skill;
},
onerror: function(response) {
console.error("技能数据获取错误",response);
}
});
function g(id)
{
var m = skill[id];
console.log("No.%d CD:%d-%d(Lv%d) %o",
id,
m[4], //技能CD MAX
(m[4]-m[3]+1), //技能CD MIN
m[3], //技能CD LV
m, //对象
);
//console.log(skillDetail(id));
skillDetail(id)
}
function skillDetail(sid)
{
skillDataDetail(skill[sid],sid);
}
function skillDataDetail(sk,si)
{
var str = null;
//珠子名数组
var pna = ["火","水","木","光","暗","回复","废","毒","剧毒","炸弹"];
//类型名数组
var tna = ["进化","平衡","体力","回复","龙","神","攻击","恶魔","机械","9","10","11","觉醒","13","强化","卖钱"];
//觉醒名数组
var ana = ["HP+","攻击+","回复+","火盾","水盾","木盾","光盾","暗盾","自回","防封","防暗","防废","防毒","火+","水+","木+","光+","暗+","手指","心解","SB","火横","水横","木横","光横","暗横","U","SX","心+","协力","龙杀","神杀","恶魔杀","机杀","平衡杀","攻击杀","体力杀","回复杀","进化杀","觉醒杀","强化杀","卖钱杀","7c","5色破防","心追","全体HP","全体回复","破无效","武器觉醒","方块心追","5色溜","大防封","大手指","防云","防封条","大SB","满血强化","下半血强化","L盾","L解锁","10c","c珠","语音","奖励增加","HP-","攻击-","回复-"];
//返回属性名
function pn(i){return pna[i] || ("未知属性" + i);}
//返回类型名
function tn(i){return tna[i] || ("未知类型" + i);}
//返回觉醒名
function an(i){return ana[i-1] || ("未知觉醒" + i);}
//从二进制的数字中获得布尔值数组
function getBooleanFromBinary(num,reverse=true)
{ /*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。
如果num和2的N次方同时存在某位1,则返回这个数,逻辑上转换为true。*/
let arr = num.toString(2).split("").map(c=>{return parseInt(c);});
if (reverse) arr.reverse();
return arr;
}
//从二进制的数字中获得有哪些内容
function getNamesFromBinary(num,dataArr)
{ /*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。
如果num和2的N次方同时存在某位1,则返回这个数,逻辑上转换为true。
filter就可以返回所有有这个数的数据*/
var results = dataArr.filter(function(pn,pi){
return num & Math.pow(2,pi); //Math.pow(x,y)计算以x为底的y次方值
});
return results;
}
//从二进制(10进制保存)的数字中获得有哪些珠子
function binPns(b)
{ /*b是输入的数字,比如10进制465转二进制=>111010001
然后从地位到高位表示火水木光暗……
用逻辑运算AND序号来获得有没有这个值*/
return getNamesFromBinary(b,pna);
}
//从二进制的数字中获得有哪些列(colum)
function binClum(b)
{
var ClumsN = ["左边第1竖列","左边第2竖列","左边第3竖列","右边第3竖列","右边第2竖列","右边第1竖列"];
return getNamesFromBinary(b,ClumsN);
}
//从二进制的数字中获得有哪些行(row)
function binRows(b)
{
var RowsN = ["最上1横行","上方第2横行","中间横行","下方第2横行","最下1横行"];
return getNamesFromBinary(b,RowsN);
}
switch(sk[2])
{
case 0:
str = "对敌方全体造成自身攻击力×" + sk[7]/100 + "倍的" + pn(sk[6]) + "属性伤害";
break;
case 1:
str = "对敌方全体造成" + sk[7] + "的" + pn(sk[6]) + "属性攻击";
break;
case 2:
str = "对敌方1体造成自身攻击力×" + sk[6]/100 + "倍的伤害";
break;
case 3:
str = sk[6] + "回合内受到的伤害减少" + sk[7] + "%";
break;
case 4:
str = "使敌方全体中毒,每回合损失宠物自身攻击力×" + sk[6]/100 + "倍的HP";
break;
case 5:
str = sk[6] + "秒内时间停止,可以任意移动宝珠";
break;
case 6:
str = "敌人的HP减少" + sk[6] + "%";
break;
case 8:
str = "回复" + sk[6] + "HP";
break;
case 9:
str = pn(sk[6]) + "变为" + pn(sk[7] || 0);
break;
case 10:
str = "全版刷新";
break;
case 11:
str = pn(sk[6]) + "属性宠物的攻击力×" + sk[7]/100 + "倍";
break;
case 12:
str = "消除宝珠的回合,以自身攻击力×" + sk[6]/100 + "倍的伤害追打敌人";
break;
case 13:
str = "消除宝珠的回合,回复自身回复力×" + sk[6]/100 + "倍的HP";
break;
case 14:
str = "如当前HP在HP上限的"+sk[6]+"%~"+sk[7]+"%的话,受到单一次致命攻击时,将会以1点HP生还";
break;
case 15:
str = "操作时间演延长" + sk[6]/100 + "秒";
break;
case 16:
str = "受到的所有伤害减少" + sk[6] + "%";
break;
case 17:
str = "受到的" +pn(sk[6])+ "属性伤害减少" + sk[7] + "%";
break;
case 18:
str = "将敌人的攻击延迟" + sk[6] + "回合";
break;
case 19:
str = sk[6] + "回合内敌方防御力减少" + sk[7] + "%";
break;
case 20: //单色A转B,C转D
var argArr = sk.slice(6); //获取6开始的参数
var arrT = [];
for (var ai=0;ai<argArr.length;ai+=2)
{
arrT.push(pn(argArr[ai]) +"宝珠变为" + pn(argArr[ai+1]));
}
str = arrT.join(",");
break;
case 21:
str = sk[6] + "回合内" + pn(sk[7]) + "属性的伤害减少" + sk[8] + "%";
break;
case 50:
str = sk[6] + "回合内" + (sk[7]==5?"回复力":(pn(sk[7]) + "属性的攻击力")) + "×"+ sk[8]/100 + "倍";
break;
case 51:
str = sk[6] + "回合内,所有攻击转为全体攻击";
break;
case 52:
str = pn(sk[6]) + "宝珠强化(每颗强化珠伤害/回复增加"+sk[7]+"%)";
break;
case 55:
str = "对敌方1体造成" + sk[6] + "点无视防御的固定伤害";
break;
case 56:
str = "对敌方全体造成" + sk[6] + "点无视防御的固定伤害";
break;
case 58:
str = "对敌方全体造成自身攻击力×" + sk[7]/100 + "~"+sk[8]/100+"倍的" +pn(sk[6])+ "属性伤害";
break;
case 60:
str = sk[6] + "回合内,受到伤害时进行受到伤害"+sk[7]/100+"倍的"+pn(sk[8])+"属性反击";
break;
case 71:
var Orbs = sk.slice(6,sk.indexOf(-1,6)); //6开到-1为止都是会产生的属性
str = "全画面的宝珠变成" + Orbs.map(function(o){return pn(o);}).join("、");
break;
case 84:
str = "HP"+(sk[9]?("减少"+ sk[9] +"%"):"变为1")+",对敌方1体造成自身攻击力×" + (sk[7]!=sk[8]?(sk[7]/100+"~"+sk[8]/100):sk[7]/100) + "倍的" + pn(sk[6]) + "属性伤害";
break;
case 85:
str = "HP减少"+ sk[9] +"%,对敌方全体造成自身攻击力×" + (sk[7]!=sk[8]?(sk[7]/100+"~"+sk[8]/100):sk[7]/100) + "倍的" + pn(sk[6]) + "属性伤害";
break;
case 87:
str = "HP变为1,,对敌方全体造成"+sk[7]+"点"+pn(sk[6])+"属性伤害";
break;
case 88:
str = sk[6] + "回合内" + tn(sk[7]) + "类型的攻击力×"+ sk[8]/100 + "倍";
break;
case 90:
var Properties = sk.slice(7,sk.length-1);
str = sk[6] + "回合内" + Properties.map(pi => {return pn(pi);}).join("、") + "属性的攻击力×"+ sk[sk.length-1]/100 + "倍";
break;
case 92:
var Types = sk.slice(7,sk.length-1);
str = sk[6] + "回合内" + Types.map(ti => {return tn(ti);}).join("、") + "类型的攻击力×"+ sk[sk.length-1]/100 + "倍";
break;
case 110:
str = "根据余下HP对敌方"+(sk[6]?"1":"全")+"体造成"+pn(sk[7])+"属性伤害(100%HP时为自身攻击力的"+sk[8]/100+"倍,1HP时为自身攻击力的"+sk[9]/100+"倍)";
break;
case 115:
str = "对敌方全体造成自身攻击力×" + sk[7]/100 + "倍的" + pn(sk[6]) + "属性伤害,并回复伤害"+sk[8]+"%的HP";
break;
case 116: //多内容主动技能
var nextSkillId = sk.slice(6); //6开始都是下个技能的内容
console.log("按顺序组合发动如下主动技能:");
nextSkillId.forEach(si => {skillDetail(si)});
return;
break;
case 118: //随机内容主动技能
var nextSkillId = sk.slice(6); //6开始都是下个技能的内容
console.log("随机发动如下主动技能:");
nextSkillId.forEach(si => {g(si);});
return;
break;
case 117:
var arrT = [];
if(sk[7]>0) arrT.push("回复宠物自身回复力x" + sk[7]/100 + "倍的HP");
if(sk[9]) arrT.push("回复HP上限" + sk[9] + "%的HP");
if(sk[6]>0) arrT.push("封锁状态减少" + sk[6] + "回合");
if(sk[10]>0) arrT.push("觉醒无效状态减少" + sk[10] + "回合");
if(sk[8]) arrT.push("未知的sk[8]");
str = arrT.join(",");
break;
case 126:
str = sk[7] +"回合内" + binPns(sk[6]).join("、") + "珠的掉落率提高"+ sk[9] + "%";
if (sk[7] != sk[8]) str += "还有未知sk[8]";
break;
case 127: //生成竖列
var argArr = sk.slice(6); //获取6开始的参数
var arrT = [];
for (var ai=0;ai<argArr.length;ai+=2)
{
var clums = binClum(argArr[ai]);
arrT.push(clums.join("、") +"的宝珠变为" + binPns(argArr[ai+1]).join("、"));
}
str = arrT.join(",");
break;
case 128: //生成横
var argArr = sk.slice(6); //获取6开始的参数
var arrT = [];
for (var ai=0;ai<argArr.length;ai+=2)
{
var rows = binRows(argArr[ai]);
arrT.push(rows.join("、") +"的宝珠变为" + binPns(argArr[ai+1]).join("、"));
}
str = arrT.join(",");
break;
case 132:
str = sk[6] + "回合内,宝珠移动时间" + (sk[8]?("变为"+sk[8]/100+"倍"):("增加"+sk[7]/10+"秒"));
break;
case 138: //多内容队长技能
var nextSkillId = sk.slice(6); //6开始都是下个技能的内容
console.log("按顺序组合发动如下队长技能:");
nextSkillId.forEach(si => {skillDetail(si)});
return;
break;
case 140:
str = binPns(sk[6]).join("、") + "宝珠强化(每颗强化珠伤害/回复增加"+sk[7]+"%)";
break;
case 141:
str = "随机生成" + binPns(sk[7]).join("、") + "珠各"+ sk[6] + "个";
if (sk[7] != sk[8]) str += "还有未知sk[8]";
break;
case 144:
str = "对敌方全体造成"+binPns(sk[6]).join("、")+"属性总攻击力×" + sk[7]/100 + "倍的" + pn(sk[9]||0) + "属性伤害";
if (sk[8]>0) str += "还有未知sk[8]";
break;
case 146:
str = "自身以外的宠物技能CD减少"+ (sk[6]!=sk[7]?(sk[6]+"~"+sk[7]):sk[6])+"回合";
break;
case 152:
str = "将"+ binPns(sk[6]).join("、") + "宝珠锁定";
if (sk[7]!=42) str += "还有未知sk[7]";
break;
case 153:
str = "敌人全体变为"+ pn(sk[6]) + "属性。(" +(sk[7]?"不":"")+"受防护盾的影响)";
break;
case 154:
str = binPns(sk[6]).join("、") + "珠变为"+ binPns(sk[7]).join("、");
break;
case 156: //宝石姬技能
if (sk[10]==2)
str = sk[6] + "回合内,根据队伍内觉醒技能"+an(sk[7])+"的数目提升所有属性的攻击力,每个觉醒可以提升"+(sk[11]-100)+"%";
else if (sk[10]==3)
str = sk[6] + "回合内,根据队伍内觉醒技能"+an(sk[7])+"的数目减少收到的伤害,每个觉醒可以减少"+sk[11]+"%";
else
str = "156宝石姬技能,未知buff类型sk[10]";
if (sk[8]>0) str += "还有未知sk[8]";
if (sk[9]>0) str += "还有未知sk[9]";
break;
case 160:
str = sk[6] + "回合内,结算时增加"+sk[7]+"COMBO";
break;
case 172:
str = "解锁所有宝珠";
break;
case 176:
//●◉○◍◯
var table = [sk[6],sk[7],sk[8],sk[9],sk[10]];
str = "以如下形状生成" + pn(sk[11]||0) + "宝珠\n";
str += table.map(r=>{
var rArr = [];
for(var c=0;c<=5;c++)
{
rArr.push(r & Math.pow(2,c)?"●":"○");
}
return rArr.join("");
}).join("\n");
break;
case 173:
var arrT = [];
if (sk[7]) arrT.push("属性吸收");
if (sk[8]) arrT.push("连击吸收?目前是猜测");
if (sk[9]) arrT.push("伤害吸收");
str = sk[6] + "回合内敌人的" + arrT.join("、") + "无效化";
break;
case 184:
str = sk[6] + "回合内,天降的宝珠不会产生COMBO";
break;
case 180:
str = sk[6] + "回合内," + sk[7] + "%概率掉落强化宝珠";
break;
case 188:
str = "对敌方1体造成" + sk[6] + "点无视防御的固定伤害(×多次)";
break;
case 191:
str = sk[6] + "回合内可以贯穿伤害无效盾";
break;
case 195:
str = "HP减少"+ sk[6] + "%";
break;
case 196:
str = "无法消除宝珠状态减少"+ sk[6] + "回合";
break;
default:
str = "未知的技能类型" + sk[2] + "(No." + si + ")";
console.log(str,sk);
return;
break;
}
//return str;
console.log(str);
}
</script>
</head>
<body>
<script type="text/javascript">
window.onload = function()
{
mid = document.querySelector("#mid");
}
</script>
<input type="number" id="mid"><input type="button" value="获取技能" onclick="g(parseInt(mid.value));">
</body>
</html>

+ 3
- 3
update-manifest.js View File

@@ -56,15 +56,15 @@ cardsLang.forEach(lang=>{
files.forEach(function (filename) {
if (new RegExp(cardsReg,"i").test(filename))
{
list.push(path.join(langPath, filename))
list.push(path.join(langPath, filename));
}
})
});
const newType = {
typeName:lang.name,
list:list,
};
cacheList.push(newType);
})
});
const outTextArray = cacheList.map(type=>{
const typeTextArray = [];


Loading…
Cancel
Save