您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tracks and upload data on Bwrift Portals
// ==UserScript== // @name MH - BWrift Portal Tracker (Public) // @version 1.2.0 // @description Tracks and upload data on Bwrift Portals // @author Chromatical // @match https://www.mousehuntgame.com/camp.php // @icon https://www.google.com/s2/favicons?domain=mousehuntgame.com // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.js // @resource YOUR_CSS https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_xmlhttpRequest // @connect self // @connect script.google.com // @connect script.googleusercontent.com // @namespace https://gf.qytechs.cn/users/748165 // ==/UserScript== // Please state whether you want to display your MH name or not in SETTINGS // A unique name would let you check your own data (in the future) $(document).ajaxStop(function() { var cssTxt = GM_getResourceText ("YOUR_CSS"); GM_addStyle (cssTxt); }); //Settings const useMHname = false; // Set to true to use MH name, false to use 'Anonymous' or unique name const useThisName = 'Anonymous'; // const showTrackingName = true; //Set to false to display only "tracking" without the name (to see if you are submitting with your name) const debug1 = false; //Settings end var count = 0 //How many portals have been tracked on this reload $(function () { const Timeout = setTimeout(function(){ //Listens to bwrift travel requests, parses data (function parsedata) AND runs the same observe(function observe) travelListener(); //If already at bwrift if (user.environment_name == "Bristle Woods Rift"){ if(debug1) createBox(); checkportal(); observe(); render(); } },1000); }); //Observes changes to DOM function observe(){ const observer = new MutationObserver(function(){ if (user.quests.QuestRiftBristleWoods.chamber_status == "open"){ bwriftTrack(); if(debug1) submitDataTest(); } }); const observerTarget = $('.riftBristleWoodsHUD-portalContainer')[0]; const config = {childList: true, subtree: true}; observer.observe(observerTarget,config); } //Checks for localstorage function checkportal(){ var portalArr = localStorage.getItem("bwrift-portal-stats-p"); if (portalArr === null){ var emptySet = [] localStorage.setItem("bwrift-portal-stats-p",JSON.stringify(emptySet)) } } //Main function function bwriftTrack(){ if (debug1){ console.log("Portal!") }; var now = new Date(); if (user.quests.QuestRiftBristleWoods.chamber_status == "open"){ //Sand var sandAmt = $(".riftBristleWoodsHUD-footer-item-quantity")[0].innerText //Portal var portal = document.getElementsByClassName('riftBristleWoodsHUD-portalContainer')[0]; var portalAmt = portal.children.length; var portalName = [] for (var i=0;i<portalAmt;i++){ portalName[i] = portal.children[i].getElementsByClassName('riftBristleWoodsHUD-portal-name')[0].textContent; }; //Buffs var effects = user.quests.QuestRiftBristleWoods.status_effects; var gb,fa,ic; //Guard Barracks if (effects.un.indexOf("active")>-1){ gb = "Cursed" } else if (effects.ng.indexOf("active")>-1){ gb = "Buffed" } else if (effects.ng == "default"){ gb = "Default" }; //Frozen Alcove if (effects.fr.indexOf("active")>-1){ fa = "Cursed" } else if (effects.ac.indexOf("active")>-1){ fa = "Buffed" } else if (effects.ac == "default"){ fa = "Default" }; //Ingress if (effects.st.indexOf("active")>-1){ ic = "Cursed" } else if (effects.ex.indexOf("active")>-1){ ic = "Buffed" } else if (effects.ex == "default"){ ic = "Default" } //Your name var name; if (useMHname){ name = user.username } else { name = useThisName }; //Record the data if(portalName[0] !== ""){ var Arr = JSON.parse(localStorage.getItem("bwrift-portal-stats-p")); var newArr = [sandAmt,gb,fa,ic,portalName,name] Arr.push(newArr); localStorage.setItem("bwrift-portal-stats-p",JSON.stringify(Arr)); //Submit the data var arraystring = JSON.stringify(newArr); const webAppUrl = 'https://script.google.com/macros/s/AKfycbyxlMZk2iXty3To2R3Dm_c8zrV_aPfZYrxG9uJF4rXcraCt_YjB4Vmae2Fo8PXyk-oS/exec'; if (webAppUrl){ GM_xmlhttpRequest({ method: "POST", url: webAppUrl, data: arraystring, onload: function(response){ console.log("data submitted") checkSubmit("success") }, onerror: function(response){ console.log("data submission failed") checkSubmit("failed") } }) } setInterval(function(){ checkSubmit("default"); },1000) } } } //Render the 'track' wording function render(){ var name; if (useMHname){ name = user.username } else { name = useThisName }; //Get data from local storage var amt_json = JSON.parse(localStorage.getItem("bwrift-portal-stats-p")); var totalSets = amt_json.length //Construct "tracking" in main DOM const track = document.createElement("div"); if (showTrackingName){ track.title = "Tracking portal data as ".concat(name, ".\nDisplayed name can be changed in MH-Bwrift Portal Tracker.\nTotal sets submitted: ",(totalSets)) track.innerText = "Tracking (".concat(name,")") } else { track.title = "Tracking portal data. Name can be displayed by changing settings in MH-Bwrift Portal Tracker.\nTotal sets submitted :".concat(totalSets) track.innerText = "Tracking" } track.className = "portal-track-data" track.style.cursor = "context-menu" track.style.fontWeight = "600" track.style.float = "right" track.style.marginRight ="40px" track.style.color = "silver" const bb = $(".riftBristleWoodsHUD-acolyteStats")[0]; bb.insertAdjacentElement('beforebegin',track); } //Listens to travel requests function travelListener(){ if (debug1) console.log("Listening to travel requests") const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (){ this.addEventListener("load",function(){ if (this.responseURL === "https://www.mousehuntgame.com/managers/ajax/users/changeenvironment.php"){ if (debug1){ console.log("Travelled Sometwhere") }; try { const data = JSON.parse(this.responseText); if (data)parsedata(data); } catch (error){ console.log("Error") } } }); originalOpen.apply(this,arguments); } }; //Checks whether is BWrift or not function parsedata(data){ const result = data.user.environment_name if (result == "Bristle Woods Rift"){ checkportal(); observe(); render(); } } //Changes status according to data state function checkSubmit(status){ if (status == "success"){ count ++ $(".portal-track-data")[0].innerText = "Submitting ..." } else if (status == "failed"){ $(".portal-track-data")[0].innerText = "Submission Failed" } else if (status == "default"){ $(".portal-track-data")[0].innerText = 'Sets Submitted: '.concat(count); var amt_json = JSON.parse(localStorage.getItem("bwrift-portal-stats-p")); var totalSets = amt_json.length $(".portal-track-data")[0].title = 'Total sets submitted: '.concat(totalSets) } } //Debugging---------------------------------------------------- function createBox(){ var box = $(".riftBristleWoodsHUD-acolyteStats")[0]; box.addEventListener("click",function(){ $.confirm({ title: 'Portal Scramble Tracker', boxWidth: '50%', useBootstrap: false, closeIcon: true, draggable: true, content: '' + '<form action="" class="formName">' + '<div class="form-group">' + '<label>Paste your WebApp link here. Only needed the first time unless you need to update it.</label>' + '<input type="text" placeholder="Paste WebApp Link Here" class="webapp link" size="100" "/>' + '</div>' + '</form>', buttons: { formsubmit: { text: 'Submit Link', btnClass: 'btn-blue', action: function(){ submitDataTest() } }, cancel: function(){ }, } }) }) } function submitDataTest(){ var name; if (useMHname){ name = user.username } else { name = useThisName }; var lastArray = [123,'default','default','default',['test1','test2','test3'],name] var arraystring = JSON.stringify(lastArray) const webAppUrl = 'https://script.google.com/macros/s/AKfycbw03hvTIV767ZDooo-bv1I3KEKaqd0BYt-jkngevF0/dev' if (webAppUrl){ GM_xmlhttpRequest({ method: "POST", url: webAppUrl, data: arraystring, onload: function(response){ if (debug1){ console.log("data submitted") } }, onerror: function(response){ if (debug1){ console.log("data submission failed") } } }) } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址