您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
XHR Intercept for MHH
- // ==UserScript==
- // @name Mousehunt Helper - XHRIntercept
- // @namespace DSXC
- // @description XHR Intercept for MHH
- // @include http://www.mousehuntgame.com/*
- // @include https://www.mousehuntgame.com/*
- // @include http://apps.facebook.com/mousehunt/*
- // @include https://apps.facebook.com/mousehunt/*
- // @version 1.0
- // ==/UserScript==
- //===============================================================================
- var _is_xhri_setup = false;
- var _trap_update_user_array = new Array();
- var _timeout_called = false;
- var _timeout_hidden_called = false;
- var _last_user;
- setupCommunications();
- function setupCommunications()
- {
- document.addEventListener("xhri_trap_change", xhri_trap_change, false);
- document.addEventListener("xhri_hidden_item", xhri_hidden_item, false);
- _is_xhri_setup = true;
- }
- function xhri_trap_change(aEvent)
- {
- if (typeof user == 'undefined')
- {
- timeout = setTimeout(function(){xhri_trap_change(aEvent)}, 2000);
- return;
- }
- _trap_update_user_array.push(user);
- if (_timeout_called)
- return;
- _timeout_called = true;
- timeout = setTimeout(function(){call_trap_check()}, 2000);
- }
- function xhri_hidden_item(aEvent)
- {
- if (typeof hg == 'undefined' ||
- $(".inventoryitemview[data-view-id="+$($("#tabbarContent_page_4 .inventoryitemview")[0]).data("viewId")+"]").length <= 0)
- {
- timeout = setTimeout(function(){xhri_hidden_item(aEvent)}, 2000);
- return;
- }
- if (_timeout_hidden_called)
- return;
- _timeout_hidden_called = true;
- timeout = setTimeout(function(){call_modify_hidden_items()}, 2000);
- }
- function call_trap_check()
- {
- var _trap_update_user = JSON.stringify(_trap_update_user_array.pop());
- //Don't send another update if the last user pushed is the same as the user we're currently on.
- if (_trap_update_user == _last_user)
- {
- _trap_update_user_array.length = 0;
- _timeout_called = false;
- return;
- }
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_trap_change", true, true, this, _trap_update_user, _trap_update_user, 'ht_stuff', 1);
- document.dispatchEvent(evt);
- _last_user = _trap_update_user;
- _trap_update_user_array.length = 0;
- _timeout_called = false;
- }
- function call_modify_hidden_items()
- {
- var inv = hg.utils.UserInventory.getAllItems();
- for (var category in inv) if (inv.hasOwnProperty(category) && category != "length")
- {
- for (var item in inv[category]) if (inv[category].hasOwnProperty(item) && item != "length")
- {
- hg.utils.UserInventory.getAllItems()[category][item].is_hidden = false;
- }
- }
- //Empty the existing items:
- $(".inventoryitemview[data-view-id="+$($("#tabbarContent_page_4 .inventoryitemview")[0]).data("viewId")+"]").empty();
- //Render all the items again:
- app.views.InventoryItemView[$($("#tabbarContent_page_4 .inventoryitemview")[0]).data("viewId")].render();
- }
- function getQueryParams(qs)
- {
- var urlParams = {},
- e,
- d = function (s) { return decodeURIComponent(s).replace(/\+/g, " "); },
- r = /([^&=]+)=?([^&]*)/g;
- while (e = r.exec(d(qs))) {
- if (e[1].indexOf("[") == "-1")
- urlParams[d(e[1])] = d(e[2]);
- else {
- var b1 = e[1].indexOf("["),
- aN = e[1].slice(b1+1, e[1].indexOf("]", b1)),
- pN = d(e[1].slice(0, b1));
- if (typeof urlParams[pN] != "object")
- urlParams[d(pN)] = {},
- urlParams[d(pN)].length = 0;
- if (aN)
- urlParams[d(pN)][d(aN)] = d(e[2]);
- else
- Array.prototype.push.call(urlParams[d(pN)], d(e[2]));
- }
- }
- return urlParams;
- }
- (function(open)
- {
- XMLHttpRequest.prototype.open = function(method, url, async, user, pass)
- {
- if (typeof url == 'string')
- {
- if (url.search('mousehuntgame') != -1)
- {
- if (!_is_xhri_setup)
- setupCommunications();
- /*
- window.unsafeWindow || (
- unsafeWindow = (function()
- {
- var el = document.createElement('p');
- el.setAttribute('onclick', 'return window;');
- return el.onclick();
- })()
- );*/
- var mh_user = window.user; //unsafeWindow.user;
- if (mh_user != null)
- {
- this.mhUserJSON = mh_user;
- //TODO: Make a call to grab the user variable from HG with the least amount of data. Use this as a direct before snapshot of event firing.
- // In conjunction with the earlier variable grab we can determine 3 points of user values for hunt tracking.
- this.calledURL = url;
- this.addEventListener("readystatechange", function()
- {
- if (this.readyState == 4)
- {
- if (this.responseText.substring(0, 1) == "{")
- {
- //TODO: Make this all generic, have one event thrown, and one submit.
- // Specific instructions can be made in the response packet so message information can be gathered from there.
- var respJSON = JSON.parse(this.responseText);
- respJSON.ht_submit_URL = this.calledURL;
- respJSON.ht_submit_params = this.submit_params;
- //Hunt submission
- if (this.calledURL.search('activeturn.php') != -1)
- {
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_submit", true, true, this, JSON.stringify(this.mhUserJSON), JSON.stringify(respJSON), 'ht_stuff', 1);
- document.dispatchEvent(evt);
- }
- //NOTE: Currently disabled.
- //Crafting attempts.
- else if (this.calledURL.search('crafting.php') != -1)
- {
- /*
- var crafts = $('#selectedComponents div.craftThumb:has(input)');
- var t_array = Array();
- for (var i in respJSON.ht_submit_params.parts)
- {
- for (var j = 0; j < crafts.length; j++)
- {
- if (crafts[j].classList.contains(i))
- {
- var t_obj = new Object();
- t_obj.name = $('span', crafts[j]).html();
- t_obj.val = respJSON.ht_submit_params.parts[i];
- t_array.push(t_obj);
- break;
- }
- }
- }
- respJSON.ht_submit_params.parts.translated = t_array;
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_crafting", true, true, this, JSON.stringify(this.mhUserJSON), JSON.stringify(respJSON), 'ht_stuff', 1);
- document.dispatchEvent(evt);
- */
- }
- //TEM effectiveness selection
- else if (this.calledURL.search('getmiceeffectiveness.php') != -1)
- {
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_effectiveness", true, true, this, JSON.stringify(this.mhUserJSON), JSON.stringify(respJSON), 'ht_stuff', 1);
- document.dispatchEvent(evt);
- }
- //Adversaries page tab click
- else if (this.calledURL.search('getmousegroup.php') != -1 ||
- this.calledURL.search('getregionmice.php') != -1)
- {
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_group_effectiveness", true, true, this, JSON.stringify(this.mhUserJSON), JSON.stringify(respJSON), 'ht_stuff', 1);
- document.dispatchEvent(evt);
- }
- //Convertible
- else if (this.calledURL.search('useconvertible.php') != -1)
- {
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_convertible", true, true, this, JSON.stringify(this.mhUserJSON), JSON.stringify(respJSON), 'ht_stuff', 1);
- document.dispatchEvent(evt);
- }
- //Inventory
- else if (this.calledURL.search('userInventory.php') != -1)
- {
- var evt = document.createEvent("MutationEvents");
- evt.initMutationEvent("ht_inventory", true, true, this, JSON.stringify(this.mhUserJSON), JSON.stringify(respJSON), 'ht_stuff', 1);
- document.dispatchEvent(evt);
- }
- }
- }
- },
- false);
- }
- }
- }
- //Call regardless. Use async if not defined to avoid hanging browser due to extension needing waiting on response.
- if (is_set(async))
- open.call(this, method, url, async, user, pass);
- else
- open.call(this, method, url, true, user, pass);
- };
- })(XMLHttpRequest.prototype.open);
- (function(send) {
- XMLHttpRequest.prototype.send = function(params)
- {
- this.submit_params = getQueryParams(params);
- send.call(this, params);
- }
- })(XMLHttpRequest.prototype.send);
- function is_set(variable)
- {
- if (typeof variable === "undefined")
- return false;
- else
- return true;
- }