|
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>怪物代码测试</title>
- <script type="text/javascript">
- var cards;
- 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);
- }
-
- 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.blockSkinId = data[i++]; //珠子皮肤ID
- card.specialAttribute = data[i++]; //特别属性,比如黄龙
- if (i !== data.length)
- console.log(`residue data for #${card.id}: ${i} ${data.length}`);
- return card;
- }
-
- function g(id)
- {
- let m = cards[id];
- var pn = ["火","水","木","光","暗"];
- var p = [pn[m[2]]||"无", pn[m[3]]||"无"];
- var tn = ["0进化","1平衡","2体力","3回复","4龙","5神","6攻击","7恶魔","8机械","9","10","11","12觉醒","13","14强化","15卖钱"];
-
- let mobj = parseCard(m);
- console.log(mobj); //输出人家大佬的格式
- //因为觉醒数量的不一样,所以需要制定序号
- var awokenCIdx = 58+m[57]*3; //awoken Count Index,觉醒数量的序号
- var superAwokenIdx = awokenCIdx+1+m[awokenCIdx]; //super awoken Index,超觉醒的序号
-
- //类型
- var type = [];
- type.push(tn[m[5]]);
- if (m[6]!=-1) //第二个type
- type.push(tn[m[6]]);
- if (m[superAwokenIdx+3]!=-1) //第三个type要倒着来
- type.push(tn[m[superAwokenIdx+3]]);
- console.log("No.%d %s [%s/%s],Lv%d,类型:%s,%d星,COST%d,%s个觉醒,三维%s,110级增长%d%%,%s当二技,1级吃经验%d,1级卖¥%d,%dMP,成长类型%d,升2级经验%d,技能编号%d,队长%d,进化链根%d,%s究极退化为%d,进化素材ID[%d,%d,%d,%d,%d]\n%o",
- m[0], //ID
- m[1], //名字
- p[0],p[1], //属性
- m[10], //最大等级
- type.join("|"), //类型
- m[7], //星级
- m[8], //cost
- m[58+m[57]*3], //觉醒数
- m[14]+"-"+m[15]+"/"+m[17]+"-"+m[18]+"/"+m[20]+"-"+m[21], //三维
- m[superAwokenIdx+9], //110级增长
- m[superAwokenIdx+7]>2?"能":"不能", //二技
- Math.round(m[11]/4), //1级经验,每级,直接乘
- Math.round(m[13]/10), //1级卖钱
- m[superAwokenIdx+4], //MP
- m[23], //成长类型
- Math.round(m[23] * Math.pow((2 - 1) / 98,m[24])), //1级升2级经验
- m[25], //技能编号
- m[26], //队长技能编号
- m[superAwokenIdx+1], //进化根编号
- m[4]?"可":"不可", //可退化?
- m[40], //可退化?
- m[41],m[42],m[43],m[44],m[45], //进化素材ID 1-5
- 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",
- onload: function(response) {
- cards = JSON.parse(response.response).card;
- },
- onerror: function(response) {
- console.error("怪物数据获取错误",response);
- }
- });
- </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>
|