// ==UserScript==
// @name 咕咕镇数据采集
// @namespace https://greasyfork.org/users/448113
// @version 0.4.1
// @description 咕咕镇数据采集,目前采集技能率、暴击率
// @author paraii
// @include https://www.lv999max.com/*
// @grant GM_xmlhttpRequest
// @connect notes.orga.cat
// @connect www.lv999max.com
// @license MIT License
// ==/UserScript==
function submitData(){
var npc = document.getElementById('pklist').children;
for(let i = 2;i<12;i++){
//console.log(npc[o].innerText[0]);
if(npc[i].innerText[0]!='已'){
localStorage.setItem('over', 0); //未与全部npc战斗
alert('未与全部npc战斗,请与全部npc完成战斗后提交')
break;
}
else{
localStorage.setItem('over', 1);
}
}
if(localStorage.length>4&&localStorage.getItem('over')=='1'){
var meURL = `https://notes.orga.cat/${encodeURI(localStorage.getItem('title')).replace(/%/g, '')}`;
console.log(meURL);
GM_xmlhttpRequest({
method: 'GET',
url: meURL,
timeout: 30000,
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
onload: response => {
var text = response.responseText.match(/content">([\s\S]*)<\/text/)[1];
if(text.length==0){
text='{"1-50":{"MU":[0],"ZHU":[0],"DENG":[0],"SHOU":[0]},"51-100":{"MU":[0],"ZHU":[0],"DENG":[0],"SHOU":[0]},"101-":{"MU":[0],"ZHU":[0],"DENG":[0],"SHOU":[0]}}'
}else{
text=text.replace(/"/g,'"');
}
var json = JSON.parse(text);
let pk_i = 0;
while(localStorage.getItem(`pk${pk_i}`)!=null){
var a = localStorage.getItem(`pk${pk_i}`).split(',');
var n = a.shift();
for(let j = 1; j<a.length; j++){
a[j] = +a[j];
}
if(a[3]<51){
json['1-50'][n].push(a);
}
else if(a[3]<101&&a[3]>50){
json['51-100'][n].push(a);
}
else{
json['101-'][n].push(a);
}
pk_i++;
}
text = JSON.stringify(json);
GM_xmlhttpRequest({
method: 'POST',
url: meURL,
timeout: 30000,
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
data: `text=${text}`,
onload: response => {
let atrr = localStorage.getItem('attribute');
let na = localStorage.getItem('cardName');
localStorage.clear();
localStorage.setItem('attribute',atrr);
localStorage.setItem('cardName',na);
alert('数据已提交,第一次使用记得把用户名站内发给thewzmath');
return 1;
}
})
}
})
}else{
return 0;
}
}
(function() {
'use strict'
if(localStorage.getItem('attribute'==null)&&localStorage.getItem('cardName'==null)){
localStorage.setItem('attribute',0);
localStorage.setItem('cardName',0);
}
var attribute = new Array();
if(window.location.pathname=='/fyg_card.php'){
let btn2 = document.createElement('button');
let span2 = document.createElement('span');
let btnc1 = document.createElement('button');
let cardNameNode = 0;
function updateCard(){
span2.innerHTML = '读取中...';
attribute.splice(0,attribute.length);
for(let i=1;i<7;i++){
attribute.push(document.getElementById(`sjj${i}`).innerText);
}
localStorage.setItem('attribute',attribute.join(','));
localStorage.setItem('cardName',cardNameNode.innerText);
if(localStorage.getItem('cardName')==''){localStorage.setItem('cardName',null);}
span2.innerHTML = ` 当前卡片:${localStorage.getItem('cardName')}(${localStorage.getItem('attribute')})`;
}
span2.innerHTML = ` 当前卡片:${localStorage.getItem('cardName')}(${localStorage.getItem('attribute')})`;
btn2.innerHTML = '手动读取';
btn2.onclick = updateCard;
btnc1.innerHTML = '导出计算器';
btnc1.onclick = ()=>{
switch(localStorage.getItem('cardName')){
case '琳':prompt('卡片数据',`LIN ${cardNameNode.parentNode.children[1].innerText.substr(3)} 4\n${localStorage.getItem('attribute').replace(/,/g,' ')}`);break;
case '艾':prompt('卡片数据',`AI ${cardNameNode.parentNode.children[1].innerText.substr(3)} 4\n${localStorage.getItem('attribute').replace(/,/g,' ')}`);break;
case '默':prompt('卡片数据',`MO ${cardNameNode.parentNode.children[1].innerText.substr(3)} 4\n${localStorage.getItem('attribute').replace(/,/g,' ')}`);break;
case '梦':prompt('卡片数据',`MENG ${cardNameNode.parentNode.children[1].innerText.substr(3)} 4\n${localStorage.getItem('attribute').replace(/,/g,' ')}`);break;
}
}
let p = document.getElementsByClassName('panel panel-primary')[1];
p.insertBefore(span2,p.children[0]);
p.insertBefore(btn2,p.children[0]);
p.insertBefore(btnc1,p.children[0]);
let load1=0,load2=0;
let observer1 = new MutationObserver(()=>{
load1=1;
document.getElementsByClassName('btn btn-block btn-lg btn-warning')[0].addEventListener('click', updateCard);
if(load1&&load2){
updateCard();
load1=0;load2=0;
}
});
observer1.observe(document.getElementById('mystata'), {childList: true, characterData: true});
let observer2 = new MutationObserver(()=>{
load2=1;
cardNameNode = document.getElementById('carding').children[0].children[0];
if(load1&&load2){
updateCard();
load1=0;load2=0;
}
});
observer2.observe(document.getElementById('carding'), {childList: true});
}
else if(window.location.pathname=='/fyg_equip.php'){
let btnc1 = document.createElement('button');
let span1 = document.createElement('span');
span1.innerText = ' *暂不支持神秘,默认无神秘';
btnc1.innerText = '导出计算器';
btnc1.onclick = ()=>{
try{
let data = new Array();
let equip = document.getElementsByClassName('content');
for(let i=0;i<4;i++){
let name = equip[i].children[0].children[0].innerText;
let lv = equip[i].children[0].children[1].innerText.substr(3);
let atrr = equip[i].children[1].children;
let mys = 0;
switch(name[name.length-1]){
case '杖':name='STAFF';break;
case '弓':name='BOW';break;
case '剑':name='SWORD';break;
case '刃':name='BLADE';break;
case '套':name='GLOVES';break;
case '环':name='BRACELET';break;
case '袍':name='CLOAK';break;
case '巾':name='SCARF';break;
default:
switch(name[name.length-2]){
case '布':name='CLOTH';break;
case '皮':name='LEATHER';break;
case '铁':name='PLATE';break;
case '重':name='THORN';break;
}
}
data.push(new Array(name,lv,atrr[0].innerText.replace('%',''),atrr[2].innerText.replace('%',''),atrr[4].innerText.replace('%',''),atrr[6].innerText.replace('%',''),mys))
}
prompt('装备数据',`${data[0].join(' ')}\n${data[1].join(' ')}\n${data[2].join(' ')}\n${data[3].join(' ')}`)
}catch(err){console.log(err);}
}
let p = document.getElementsByClassName('panel panel-primary')[0];
p.insertBefore(span1,p.children[0]);
p.insertBefore(btnc1,p.children[0]);
}
else if(window.location.pathname=='/fyg_halo.php'){
let btnc1 = document.createElement('button');
btnc1.innerText = '导出计算器';
btnc1.onclick = ()=>{
try{
let aura = document.getElementsByClassName('btn btn-primary');
let data = new Array();
data.push(aura.length);
for(let i=0;i<aura.length;i++){
let t = aura[i].innerText;
console.log(t);
switch(t[0]){
case '启':
switch(t[3]){
case '誓':data.push('SHI');break;
case '心':data.push('XIN');break;
case '风':data.push('FENG');break;
}
break;
case '破':
switch(t[1]){
case '壁':data.push('BI');break;
case '魔':data.push('MO');break;
}
break;
case '伤':data.push('SHANG');break;
case '精':data.push('SHEN');break;
case '铁':data.push('CI');break;
case '沸':data.push('FEI');break;
case '波':data.push('BO');break;
case '飓':data.push('JU');break;
}
}
prompt('光环信息',`${data.join(' ')}`);
}catch(err){
console.log(err);
}
}
let p = document.getElementsByClassName('panel panel-primary')[1];
p.insertBefore(btnc1,p.children[0]);
}
else if(window.location.pathname=='/fyg_pk.php'){
let btn1 = document.createElement('button');
btn1.innerHTML = '正在读取卡片...';
btn1.onclick = ()=>{
try{
if(submitData()){
return;
}
}
catch(err){
console.log(err);
alert('数据提交失败,请重试');
}
};
let p = document.getElementsByClassName('panel panel-primary')[0];
p.insertBefore(btn1,p.children[0]);
try{
GM_xmlhttpRequest({
method: 'POST',
url: `https://www.lv999max.com/fyg_read.php`,
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
data: 'f=9',
onload: response => {
try{
var n = response.responseText.match(/>[\u4e00-\u9fa5]</u)[0];
localStorage.setItem('cardName',n.substr(1,n.length-2));
}catch(err){localStorage.setItem('cardName','null');}
GM_xmlhttpRequest({
method: 'POST',
url: `https://www.lv999max.com/fyg_read.php`,
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
data: 'f=4',
onload: response => {
//console.log(response.responseText);
attribute.splice(0,attribute.length);
response.responseText.match(/>(\d+)</g).forEach(item => {
attribute.push(item.substr(1,item.length-2));
});
attribute.shift();
localStorage.setItem('attribute',attribute.join(','));
if(localStorage.getItem('cardName')!='0'&&localStorage.getItem('attribute')!='0'){
//alert('卡片读取完成');
btn1.innerHTML = '提交数据';
console.log(localStorage);
var targetNode = document.getElementById('pk_text');
var config = {childList: true};
// 当节点发生变化时的需要执行的函数
var callback = function(mutationsList, observer) {
var isPk = 0;
for(let mutation of mutationsList) {
if (mutation.type == 'childList') {
//console.log('new pk');
isPk = 1;
//console.log(targetNode.firstChild);
}
}
if(isPk){
var infoList = targetNode.firstChild.children;
//infoList: [0]名字,[1]初始血盾,[2]第一回合{左方信息,右方信息,左方血盾,右方血盾},[3]第二回合{..} ...[end]结果
var npcTitle = '';
var npcName = '';
var npcLv = '';
var npcRate = 0;
var npcSKL = '';
var meName = 'null';
var meSKL = 'null';
var isNpc = 1;
try{
localStorage.setItem('title',infoList[0].getElementsByClassName('fyg_mp0 fyg_tc')[0].innerText);
npcTitle = infoList[0].getElementsByClassName('fyg_mp0 fyg_tc')[1].innerText;
}catch(err){return;}
switch(npcTitle[npcTitle.length-1]){
case '人':npcSKL = '三连击';npcName='MU';break;
case '蛛':npcSKL = '剧毒蛛网';npcName='ZHU';break;
case '灵':npcSKL = '灵魂爆燃';npcName='DENG';break;
case '兽':npcSKL = '肉球嘲讽';npcName='SHOU';break;
default: isNpc = 0; //只统计NPC
}
var meProba = {'CRT':0,'SKL':0,'SUM':0};
var npcProba = {'CRT':0,'SKL':0,'SUM':0};
if(isNpc){
switch(localStorage.getItem('cardName')){
case '琳':meSKL = '爆裂双刃';meName='LIN';break;
case '艾':meSKL = '烈焰宝石';meName='AI';break;
case '默':meSKL = '魔力压制';meName='MO';break;
case '梦':meSKL = '星轮逆转';meName='MENG';break;
}
switch(npcTitle[0]){
case '超':npcRate = 3;;break;
case '大':npcRate = 2;break;
case '强':npcRate = 1;break;
default:npcRate = 0;
}
npcLv = npcTitle.match(/.?(\d+)./)[1];
//console.log(npcLv);
for(let i=2;i<infoList.length-1;i++){
var left=infoList[i].children[0].innerText;
//console.log(left);
var right=infoList[i].children[1].innerText;
//console.log(right);
if(left.indexOf('暴击')!=-1){
meProba.CRT++;
}
if(right.indexOf('暴击')!=-1){
npcProba.CRT++;
}
if(left.indexOf(meSKL)!=-1){
meProba.SKL++;
}
if(right.indexOf(npcSKL)!=-1){
npcProba.SKL++;
}
}
meProba.SUM = targetNode.firstChild.getElementsByClassName('icon icon-arrow-right text-success').length;
npcProba.SUM = targetNode.firstChild.getElementsByClassName('icon icon-arrow-left text-success').length
//[卡片名,智力,敏捷,NPC等级,NPC倍率,我方技能数,我方暴击数,我方攻击数,NPC技能数,NPC暴击数,NPC攻击数]
var attr = localStorage.getItem('attribute').split(',');
var probaArray = new Array(npcName,meName,attr[2],attr[1],npcLv,npcRate,
meProba.SKL,meProba.CRT,meProba.SUM,npcProba.SKL,npcProba.CRT,npcProba.SUM);
localStorage.setItem('over', 0);
let pk_i = 0;
while(localStorage.getItem(`pk${pk_i}`)!=null){
pk_i++;
}
localStorage.setItem(`pk${pk_i}`, probaArray.join(','));
console.log(`${localStorage.getItem('cardName')}(${localStorage.getItem('attribute')}) vs ${npcTitle}: 该次战斗已保存`);
}
}
};
// 创建一个observer示例与回调函数相关联
var observer = new MutationObserver(callback);
//使用配置文件对目标节点进行观测
observer.observe(targetNode, config);
// 停止观测
//observer.disconnect();
}
else{
alert(`卡片读取失败,请刷新重试或前往卡片页面手动读取\n当前卡片为:${localStorage.getItem('cardName')}(${localStorage.getItem('attribute')}) 若无误请忽略`);
btn1.innerHTML = '提交数据';
}
}
})
}
})
}
catch(err){
console.log(err);
alert(`卡片读取失败,请刷新重试或前往卡片页面手动读取\n当前卡片为:${localStorage.getItem('cardName')}(${localStorage.getItem('attribute')}) 若无误请忽略`);
btn1.innerHTML = '提交数据';
}
}
})();