// ==UserScript==
// @name 咕咕镇剩余价值收割机
// @namespace https://greasyfork.org/zh-CN/users/453092
// @version 2.09
// @description 剥削者的小助手
// @author ikarosf
// @match https://www.guguzhen.com/fyg_pk.php
// @grant GM_xmlhttpRequest
// @require https://greasyfork.org/scripts/409864-url-gbk-%E7%BC%96%E7%A0%81%E8%A7%A3%E7%A0%81%E5%BA%93/code/URL%20GBK%20%E7%BC%96%E7%A0%81%E8%A7%A3%E7%A0%81%E5%BA%93.js?version=840815
// ==/UserScript==
(function() {
'use strict';
var debugmode = false;
if(localStorage.getItem('dataReward')==null){
localStorage.setItem('dataReward','{"sumShell":"0","sumExp":"0"}');
}
var goxing = false;
var mainHost = "https://bbs.fygal.com/"
if(localStorage.getItem('mainHost')!==null){
mainHost = localStorage.getItem('mainHost');
}
var autogox=false;
var maxap=999;
var maxrank=999;
if(localStorage.getItem('maxap')!==null){
maxap = parseInt(localStorage.getItem('maxap'));
}
if(localStorage.getItem('maxrank')!==null){
maxrank = parseInt(localStorage.getItem('maxrank'));
}
//var audio = new Audio("https://cdnringhlt.shoujiduoduo.com/ringres/user/a24/564/9246564.aac");
//audio.load();
var Num = 0;
var goxNum = 0;
var beike=0;
var jingyan=0;
if(localStorage.getItem('flashtime')===null){
localStorage.setItem('flashtime',10 );
}
var maxtime = 10;
maxtime = parseInt(localStorage.getItem('flashtime'));
var time = maxtime;
var myrank = -100;
var myap=-100;
var changeLog = [];
let autoconfig = document.createElement('div');
let autoconfigranklabel = document.createElement('i');
autoconfigranklabel.innerText = "进度不低于:";
autoconfig.appendChild(autoconfigranklabel);
let autoconfigrank = document.createElement('input');
autoconfigrank.setAttribute('type','text');
autoconfigrank.setAttribute('oninput',"value=value.replace(/[^\\d]/g,'')");
autoconfigrank.setAttribute('style',"width: 40px;margin-right:15px;");
autoconfigrank.value = maxrank;
autoconfigrank.onchange = function(){
maxrank = autoconfigrank.value;
autoconfigcheckbox.checked = false;
localStorage.setItem('maxrank',maxrank );
};
autoconfig.appendChild(autoconfigrank);
let autoconfigaplabel = document.createElement('i');
autoconfigaplabel.innerText = "体力不低于:";
autoconfig.appendChild(autoconfigaplabel);
let autoconfigap = document.createElement('input');
autoconfigap.setAttribute('type','text');
autoconfigap.setAttribute('oninput',"value=value.replace(/[^\\d]/g,'')");
autoconfigap.setAttribute('style',"width: 40px;margin-right:15px;");
autoconfigap.value=maxap;
autoconfigap.onchange = function(){
maxap = autoconfigap.value;
autoconfigcheckbox.checked = false;
localStorage.setItem('maxap',maxap );
};
autoconfig.appendChild(autoconfigap);
let autoconfigcheckbox = document.createElement('input');
autoconfigcheckbox.setAttribute('type','checkbox');
autoconfig.appendChild(autoconfigcheckbox);
let autoconfigcheckboxtext = document.createElement('i');
autoconfigcheckboxtext.innerText = "自动搜刮";
autoconfigcheckboxtext.setAttribute('style',"margin-right:20px;");
autoconfig.appendChild(autoconfigcheckboxtext);
let setflashtime = document.createElement('input');
setflashtime.type = "button";
setflashtime.value = "设置刷新间隔";
setflashtime.setAttribute('style',"margin-right:20px;");
setflashtime.addEventListener('click',function() {
var newtime = parseInt(prompt("新的刷新间隔:",maxtime));
if(!isNaN(newtime)&&newtime>0){
localStorage.setItem('flashtime',newtime );
maxtime = newtime;
time = newtime;
}
},false);
autoconfig.appendChild(setflashtime);
let setmainHost = document.createElement('input');
setmainHost.type = "button";
setmainHost.value = "设置主站域名";
setmainHost.addEventListener('click',function() {
var newmainHost = prompt("格式如https://bbs.fygal.com/",mainHost);
if(newmainHost!=null&&newmainHost!=""){
localStorage.setItem('mainHost',newmainHost );
mainHost = newmainHost;
}
},false);
autoconfig.appendChild(setmainHost);
document.getElementsByClassName('panel panel-primary')[1].appendChild(autoconfig);
let progresschange = document.createElement('div');
progresschange.setAttribute('id','progresschange');
progresschange.setAttribute('class','panel-body');
document.getElementsByClassName('panel panel-primary')[1].appendChild(progresschange);
function getNowtime(){
var date=new Date();
var datetext = date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
return datetext;
}
function dlog(text){
if(debugmode){console.log(text)}
}
function getPostData(p1,p2){
let data = -1;
for(let s of document.getElementsByTagName('script')){
let func = s.innerText.match(p1)
if(func!=null){
data = func[0].match(p2)[0];
break;
}
}
return data
}
function postRequest(){
GM_xmlhttpRequest({
method: 'POST',
url: `https://www.guguzhen.com/fyg_read.php`,
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
data: 'f=12',
onload: response => {
Num++;
let newrank = parseInt(response.responseText.match(/class="fyg_colpz02" style="font-size:32px;font-weight:900;">[0-9]+%</)[0].match(/[0-9]+%/)[0]);
let newap = parseInt(response.responseText.match(/class="fyg_colpz03" style="font-size:32px;font-weight:900;">[0-9]+</)[0].match(/>[0-9]+</)[0].slice(1,-1));
if(myrank == -100){
myrank = newrank;
}
else if(newrank != myrank){
document.getElementsByClassName('fyg_colpz02')[0].innerText = newrank + "%";
changeLog.push(getNowtime()+" "+myrank+"%->"+newrank + "%")
myrank = newrank;
//audio.play();
/*var my_url = location.href;
var newwin = window.open(my_url, '进度变动', 'resizable=no')*/
}
if(myap == -100){
myap = newap;
}
else if(newap != myap){
document.getElementsByClassName('fyg_colpz03')[0].innerText = newap;
myap = newap;
}
if(autoconfigcheckbox.checked&&newap>=10&&newrank>=1&&newap>=maxap&&newrank>=maxrank&&goxing==false){
maxtime = 1;
time = 1;
goxNum++;
let gox_data = getPostData(/gox\(\)\{[\s\S]*\}/m,/data: ".*"/).slice(7,-1);
goxing = true;
GM_xmlhttpRequest({
method: 'POST',
url: `https://www.guguzhen.com/fyg_click.php`,
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
data: gox_data,
onload: response => {
goxing = false;
if(response.status === 200){
console.log(response.responseText);
if(response.responseText.slice(0,2)=='获得'){
let info = response.responseText.slice(0,response.responseText.indexOf('<'));
let div_info = document.createElement('div');
div_info.innerText = info;
changeLog.push(getNowtime() + " " + info)
let dataReward = JSON.parse(localStorage.getItem('dataReward'));
if(info.indexOf('贝壳')!=-1){
beike++;
dataReward.sumShell++;
}
else if(info.indexOf('经验')!=-1){
jingyan++;
dataReward.sumExp++;
}
localStorage.setItem('dataReward',JSON.stringify(dataReward));
document.getElementsByClassName('btn-outline-secondary')[0].parentNode.appendChild(div_info);
}
else{
let div_info = document.createElement('div');
div_info.innerText = '段位进度不足';
changeLog.push(getNowtime() + " " + '段位进度不足,搜刮失败')
document.getElementsByClassName('btn-outline-secondary')[0].parentNode.appendChild(div_info);
}
}
else{
console.log('返回状态码非200')
changeLog.push(getNowtime() + " " + '返回状态码非200')
console.log(response.responseText);
}
},
onerror : function(err){
goxing = false;
console.log('发送搜刮请求出错')
changeLog.push(getNowtime() + " " + '发送搜刮请求出错')
console.log(err)
},
ontimeout : function(){
goxing = false;
}
});
}else{
maxtime = parseInt(localStorage.getItem('flashtime'));
time = maxtime;
//console.log(123)
}
progresschange.innerText = getChangeLogText();
/* else{
document.getElementsByClassName('fyg_colpz02')[0].innerText = newrank;
}*/
}
});
}
function read_rank(){
if(--time!=0){
document.getElementsByClassName('panel-heading')[0].innerText = "刷新进度倒计时 "+time;
}else{
document.getElementsByClassName('panel-heading')[0].innerText = "刷新进度倒计时 "+0;
time = maxtime;
postRequest();
}
}
function getChangeLogText(){
let LogText = "";
LogText += "刷新次数: " +Num + "\n";
LogText += "[搜刮次数: " +goxNum +"] [贝壳:"+beike+"] [经验:"+jingyan+ "]\n";
if(changeLog.length == 0){
LogText += "未出现进度变动"
}
else{
for(var i = 0;i<changeLog.length;i++){
LogText += changeLog[i] + "\n"
}
}
return LogText;
}
postRequest();
setInterval(read_rank,"1000");
var get_user_theard_try_num = 0;
function show_battle_log(text){
document.getElementsByClassName('panel-heading')[1].innerText = text;
}
function get_user_theard(name,enemydiv){
var search_name = $URL.encode(name);
GM_xmlhttpRequest({
method: "post",
url: mainHost+'search.php',
data: 'step=2&method=AND&sch_area=0&s_type=forum&f_fid=all&orderway=lastpost&asc=DESC&keyword=&pwuser='+search_name,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
onload: function(res){
if(res.status === 200){
let info = res.responseText;
let firstindex = info.indexOf("共搜索到");
if(firstindex == -1){
if( info.indexOf("用户不存在")!=-1){
show_battle_log('用户'+name+'不存在');
get_user_theard_try_num = 0;
return;
}
if( info.indexOf("你所属的用户组不能使用搜索功能")!=-1){
show_battle_log('主站域名错误或无权限');
get_user_theard_try_num = 0;
return;
}
console.log('搜索尝试次数:' + get_user_theard_try_num)
if(info.indexOf("搜索排队中")!=-1&&get_user_theard_try_num<3){
get_user_theard_try_num++;
setTimeout(get_user_theard,2000,name,enemydiv)
}else{
console.log(info)
get_user_theard_try_num = 0;
show_battle_log('找不到'+name+'的帖子')
}
return;
}
let secondindex = info.indexOf("共搜索到",firstindex+1);
info = info.substring(firstindex,secondindex)
var theards=info.match(/read\.php.+?(?=" )/g)
get_user_mainpage(theards,enemydiv);
}else{
show_battle_log('搜索对手帖子失败')
console.log(res)
}
},
onerror : function(err){
show_battle_log('搜索对手帖子错误,可能域名设置格式不正确')
console.log(err)
}
});
}
function get_user_mainpage(theards,enemydiv){
if(theards==null||theards.length<1){
show_battle_log('找不到对手的帖子')
return}
var theard = theards[0];
GM_xmlhttpRequest({
method: "get",
url: mainHost+theard ,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
onload: function(res){
if(res.status === 200){
let info = res.responseText;
let firstindex = info.indexOf("楼主");
info = info.substring(0,firstindex)
var mainpage=info.match(/profile\.php\?action=show.+?(?=" )/g)
get_user_LV(mainpage,enemydiv);
}else{
show_battle_log('获取对手主页失败')
console.log(res)
}
},
onerror : function(err){
show_battle_log('获取对手主页错误')
console.log(err)
}
});
}
function get_user_LV(mainpages,enemydiv){
if(mainpages==null||mainpages.length<1){
show_battle_log('找不到对手的主页')
return}
var mainpage = mainpages[0];
GM_xmlhttpRequest({
method: "get",
url: mainHost+mainpage ,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
onload: function(res){
if(res.status === 200){
let info = res.responseText;
var level = info.match(/(?<=神秘系数:)\d+/g)[0]
enemydiv.innerHTML = enemydiv.innerHTML.replace(enemydiv.innerText, '<a target="_blank" href='+mainHost+mainpage+'>'+enemydiv.innerText + " Lv:" + level+ '</a>')
show_battle_log("获取对手系数成功")
}else{
show_battle_log('进入对手主页失败')
console.log(res)
}
},
onerror : function(err){
show_battle_log('进入对手主页错误')
console.log(err)
}
});
}
let observerBody1 = new MutationObserver(()=>{
var pkTextDiv = document.querySelector("#pk_text");
var enemydivs = pkTextDiv.querySelectorAll("h3.fyg_mp0");
if(enemydivs==null||enemydivs.length<2){return;}
var enemydiv = enemydivs[1];
var enemyname = enemydiv.innerText;
if(enemyname.indexOf("等级 -")!=-1){return}
if(enemyname.indexOf("ikarosf")!=-1){changeLog.push(getNowtime() + " 你挑战了作者,有趣的男人")}
get_user_theard(enemyname,enemydiv);
});
observerBody1.observe(document.querySelector("#pk_text"), {characterData: true,childList: true});
// Your code here...
})();