// ==UserScript==
// @name MoxxiMod
// @namespace https://studiomoxxi.com/
// @description one click at a time
// @author Ben
// @match *.outwar.com/*
// @version 4.4
// @grant GM_xmlhttpRequest
// @license MIT
// @grant GM_getResourceText
// @grant GM_addStyle
// @require http://code.jquery.com/jquery-3.6.0.min.js
// @downloadURL none
// ==/UserScript==
// moxximod raid results menu and styling
if (document.URL.indexOf("crew_raidresults") != -1 ) {
document.querySelector("#content-header-row > table > tbody > tr > td > form > p > input:nth-child(3)").setAttribute("value", "MoxxiMod raid results");
};
if (document.URL.indexOf("crew_raidresults.php?most_recent=MoxxiMod") != -1 ) {
GM_addStyle ( `#content-header-row > table > tbody > tr > td > div > center > div > table{background:#0B0B0B !important;}
td:nth-of-type(3){display: none;}
td:nth-of-type(4){display: none;}
td:nth-of-type(5){display: none;}
`);
var changeHeader0 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table")
changeHeader0.rows[0].cells[0].innerHTML = `TIME`
var changeHeader1 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table")
changeHeader1.rows[0].cells[1].innerHTML = `RAID`
// moxximod raid results header row
function insertAfter2(newNode, existingNode) {
existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling);
}
let rrHead11 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead11 = document.createElement('td');
tdHead11.innerHTML = `CHARS`;
insertAfter2(tdHead11, rrHead11.lastElementChild);
let rrHead1 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead1 = document.createElement('td');
tdHead1.innerHTML = `DAMAGE`;
insertAfter2(tdHead1, rrHead1.lastElementChild);
let rrHead2 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead2 = document.createElement('td');
tdHead2.innerHTML = `AVG`;
insertAfter2(tdHead2, rrHead2.lastElementChild);
let rrHead6 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead6 = document.createElement('td');
tdHead6.innerHTML = `BLOCK`;
insertAfter2(tdHead6, rrHead6.lastElementChild);
let rrHead7 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead7 = document.createElement('td');
tdHead7.innerHTML = `BLOCK`;
insertAfter2(tdHead7, rrHead7.lastElementChild);
let rrHead13 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead13 = document.createElement('td');
tdHead13.innerHTML = `SHIELD`;
insertAfter2(tdHead13, rrHead13.lastElementChild);
let rrHead14 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead14 = document.createElement('td');
tdHead14.innerHTML = `ATKS`;
insertAfter2(tdHead14, rrHead14.lastElementChild);
let rrHead10 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead10 = document.createElement('td');
tdHead10.innerHTML = `RNDS`;
insertAfter2(tdHead10, rrHead10.lastElementChild);
let rrHead12 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead12 = document.createElement('td');
tdHead12.innerHTML = `SIN`;
insertAfter2(tdHead12, rrHead12.lastElementChild);
let rrHead5 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead5 = document.createElement('td');
tdHead5.innerHTML = `HEALTH`;
insertAfter2(tdHead5, rrHead5.lastElementChild);
let rrHead4 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr");
let tdHead4 = document.createElement('td');
tdHead4.innerHTML = `LOOT`;
insertAfter2(tdHead4, rrHead4.lastElementChild);
// moxximod raid results data scrape
var rrTable = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table");
var rrRowCount = 1+rrTable.rows.length;
for (let rownum = 2; rownum < rrRowCount; rownum++) {
let raidLink11 = '';
if (document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr:nth-child("+rownum+") > td:nth-child(5) > a") != null)
raidLink11 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr:nth-child("+rownum+") > td:nth-child(5) > a");
let row11 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr:nth-child("+rownum+")")
let chars11 = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr:nth-child("+rownum+") > td:nth-child(3)").innerHTML;
let raidNameCell = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr:nth-child("+rownum+") > td:nth-child(2)");
let raidName = '';
if (raidNameCell != null)
raidNameCell.innerHTML = ''+raidNameCell.innerHTML.replaceAll(/,.*/g,"").replaceAll(/of.*/g,"").replaceAll("The","").replaceAll(/the.*/g,"").replaceAll(/the.*/g,"")+'';
let timeStampCell = document.querySelector("#content-header-row > table > tbody > tr > td > div > center > div > table > tbody > tr:nth-child("+rownum+") > td:nth-child(1)");
let timeStampName = '';
if (timeStampCell != null)
timeStampCell.innerHTML = timeStampCell.innerHTML.replaceAll(/[0-9]+-[0-9]+-[0-9]+/g,"");
GM_xmlhttpRequest ( {
method: 'GET',
url: raidLink11,
onload: function (responseDetails) {
var raidDmg11 = /Damage: ([0-9,]*)/;
var printDmg11 = raidDmg11.exec(responseDetails.responseText);
var raidDrops11 = /[0-9]+ items<\/a>/i;
var printDrops11 = raidDrops11.exec(responseDetails.responseText);
var drops11 = '';
if (printDrops11 == null)
drops11 = `No items found`
if (printDrops11 != null)
drops11 = printDrops11[1]
var raidHealth11 = /([0-9]+)%<\/span><\/div>.*[\n\r].*[\n\r].*[\n\r].*[\n\r].*[\n\r].*[\n\r]`+printHealth11[1]+`%`
if (printHealth11[1] > 0)
health11 = ``+printHealth11[1]+`%`
fetch(raidLink11)
.then(response => response.text())
.then((response) => {
var attacks11 = response.match(/Base: [0-9]+/g).length;
var blocks11 = response.match(/images\/block\.jpg/g);
var eleblocks11 = response.match(/images\/block2\.jpg/g);
var shields11 = response.match(/_ele_shield\.jpg/g);
var dead11 = response.match(/images\/dead\.jpg/g);
var rounds11 = response.match(/\/img\/skin\/Bar_separator_little\.png/g).length;
var sincheck11 = response.match(/color:#CC0000;">(.*)<\/b>/i);
const reducer = (accumulator, curr) => accumulator + curr
var BaseDmgArray = [];
var BaseMatch = response.matchAll(/onmouseover="popup\(event,.*Base: (.*)
"
var ShadowDmgArray = [];
var ShadowMatch = response.matchAll(/onmouseover="popup\(event,.*\+(.*) shadow/g);
for (const ShadowMatchLoop of ShadowMatch) {
let ShadowObj = [parseInt(ShadowMatchLoop[1].replace(",",""))];
for (const ShadowDmg of ShadowObj) {
ShadowDmgArray.push(ShadowDmg);}}
var ShadowNumbers = ShadowDmgArray.map(Number)
var ShadowDmgCheck = '';
if (ShadowNumbers != "")
ShadowDmgCheck = ShadowNumbers
if (ShadowNumbers == "")
ShadowDmgCheck = [0]
var SumOfShadow = ShadowDmgCheck.reduce(reducer).toLocaleString("en-US");
var printShadow = "+"+SumOfShadow+" shadow
"
var HolyDmgArray = [];
var HolyMatch = response.matchAll(/onmouseover="popup\(event,.*\+(.*) holy/g);
for (const HolyMatchLoop of HolyMatch) {
let HolyObj = [parseInt(HolyMatchLoop[1].replace(",",""))];
for (const HolyDmg of HolyObj) {
HolyDmgArray.push(HolyDmg);}}
var HolyNumbers = HolyDmgArray.map(Number)
var HolyDmgCheck = '';
if (HolyNumbers != "")
HolyDmgCheck = HolyNumbers
if (HolyNumbers == "")
HolyDmgCheck = [0]
var SumOfHoly = HolyDmgCheck.reduce(reducer).toLocaleString("en-US");
var printHoly = "+"+SumOfHoly+" holy
"
var ArcaneDmgArray = [];
var ArcaneMatch = response.matchAll(/onmouseover="popup\(event,.*\+(.*) arcane/g);
for (const ArcaneMatchLoop of ArcaneMatch) {
let ArcaneObj = [parseInt(ArcaneMatchLoop[1].replace(",",""))];
for (const ArcaneDmg of ArcaneObj) {
ArcaneDmgArray.push(ArcaneDmg);}}
var ArcaneNumbers = ArcaneDmgArray.map(Number)
var ArcaneDmgCheck = '';
if (ArcaneNumbers != "")
ArcaneDmgCheck = ArcaneNumbers
if (ArcaneNumbers == "")
ArcaneDmgCheck = [0]
var SumOfArcane = ArcaneDmgCheck.reduce(reducer).toLocaleString("en-US");
var printArcane = "+"+SumOfArcane+" arcane
"
var KineticDmgArray = [];
var KineticMatch = response.matchAll(/onmouseover="popup\(event,.*\+(.*) kinetic/g);
for (const KineticMatchLoop of KineticMatch) {
let KineticObj = [parseInt(KineticMatchLoop[1].replace(",",""))];
for (const KineticDmg of KineticObj) {
KineticDmgArray.push(KineticDmg);}}
var KineticNumbers = KineticDmgArray.map(Number)
var KineticDmgCheck = '';
if (KineticNumbers != "")
KineticDmgCheck = KineticNumbers
if (KineticNumbers == "")
KineticDmgCheck = [0]
var SumOfKinetic = KineticDmgCheck.reduce(reducer).toLocaleString("en-US");
var printKinetic = "+"+SumOfKinetic+" kinetic
"
var VileDmgArray = [];
var VileMatch = response.matchAll(/onmouseover="popup\(event,.*\+(.*) vile/g);
for (const VileMatchLoop of VileMatch) {
let VileObj = [parseInt(VileMatchLoop[1].replace(",",""))];
for (const VileDmg of VileObj) {
VileDmgArray.push(VileDmg);}}
var VileNumbers = VileDmgArray.map(Number)
var VileDmgCheck = '';
if (VileNumbers != "")
VileDmgCheck = VileNumbers
if (VileNumbers == "")
VileDmgCheck = [0]
var SumOfVile = VileDmgCheck.reduce(reducer).toLocaleString("en-US");
var printVile = "+"+SumOfVile+" vile energy
"
var ChaosDmgArray = [];
var ChaosMatch = response.matchAll(/onmouseover="popup\(event,.*\+(.*) chaos/g);
for (const ChaosMatchLoop of ChaosMatch) {
let ChaosObj = [parseInt(ChaosMatchLoop[1].replace(",",""))];
for (const ChaosDmg of ChaosObj) {
ChaosDmgArray.push(ChaosDmg);}}
var ChaosNumbers = ChaosDmgArray.map(Number)
var ChaosDmgCheck = '';
if (ChaosNumbers != "")
ChaosDmgCheck = ChaosNumbers
if (ChaosNumbers == "")
ChaosDmgCheck = [0]
var SumOfChaos = ChaosDmgCheck.reduce(reducer).toLocaleString("en-US");
var printChaos = "+"+SumOfChaos+" chaos"
var totdead11 = '';
if (dead11 != null)
totdead11 = (dead11.length).toFixed(0)
if (dead11 == null)
totdead11 += "0"
var shieldrate11 = '';
if (shields11 != null)
shieldrate11 = (shields11.length/attacks11*100).toFixed(1)
if (shields11 == null)
shieldrate11 += "0.0"
var sin11 = '';
if (sincheck11[1] != "0")
sin11 += "No"
if (sincheck11[1] == "0")
sin11 += "Yes"
var blockrate11 = '';
if (blocks11 != null)
blockrate11 += (blocks11.length/attacks11*100).toFixed(1)
if (blocks11 == null)
blockrate11 += "0.0"
var eleblockrate11 = '';
if (eleblocks11 != null)
eleblockrate11 = (eleblocks11.length/attacks11*100).toFixed(1)
if (eleblocks11 == null)
eleblockrate11 += "0.0"
let td112 = document.createElement('td');
td112.innerHTML = chars11+" (🕱"+totdead11+")";
insertAfter2(td112, row11.lastElementChild);
var damage11 = printDmg11[1];
let td11 = document.createElement('td');
td11.innerHTML = ``+damage11;
insertAfter2(td11, row11.lastElementChild);
var cells11 = row11.getElementsByTagName("td");
let td12 = document.createElement('td');
var td12comma = Math.floor(printDmg11[1].replace(/,/g, '')/cells11[2].innerText);
td12.textContent = td12comma.toLocaleString("en-US");
insertAfter2(td12, row11.lastElementChild);
let td61 = document.createElement('td');
td61.innerHTML = blockrate11+"%";
insertAfter2(td61, row11.lastElementChild);
let td71 = document.createElement('td');
td71.innerHTML = eleblockrate11+"%";
insertAfter2(td71, row11.lastElementChild);
let td111 = document.createElement('td');
td111.innerHTML = shieldrate11+"%";
insertAfter2(td111, row11.lastElementChild);
let td13 = document.createElement('td');
td13.innerHTML = attacks11;
insertAfter2(td13, row11.lastElementChild);
let td91 = document.createElement('td');
td91.innerHTML = rounds11;
insertAfter2(td91, row11.lastElementChild);
let td101 = document.createElement('td');
td101.innerHTML = sin11;
insertAfter2(td101, row11.lastElementChild);
let td51 = document.createElement('td');
td51.innerHTML = health11;
insertAfter2(td51, row11.lastElementChild);
let td41 = document.createElement('td');
td41.innerHTML = drops11.replaceAll(/Amulet Chest \(.*\),/g,"").replaceAll(/,/g,"
");
insertAfter2(td41, row11.lastElementChild);
});}})}}
// world
function doc_keyUp(e) {
if (e.key === '1') {
document.querySelector("#roomDetails > ul > li:nth-child(1) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '2') {
document.querySelector("#roomDetails > ul > li:nth-child(2) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '3') {
document.querySelector("#roomDetails > ul > li:nth-child(3) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '4') {
document.querySelector("#roomDetails > ul > li:nth-child(4) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '5') {
document.querySelector("#roomDetails > ul > li:nth-child(5) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '6') {
document.querySelector("#roomDetails > ul > li:nth-child(6) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '7') {
document.querySelector("#roomDetails > ul > li:nth-child(7) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '8') {
document.querySelector("#roomDetails > ul > li:nth-child(8) > div > div.ml-3.d-block.align-self-center > a > img").click();}
if (e.key === '9') {
document.querySelector("#roomDetails > ul > li:nth-child(9) > div > div.ml-3.d-block.align-self-center > a > img").click();}}
document.addEventListener('keyup', doc_keyUp, false);
if ( document.URL.indexOf("world") != -1 ) {
let observer = new MutationObserver(mutationRecords => {
attackframe()
});
observer.observe(roomid_display, {
childList: true,
subtree: true,
characterDataOldValue: true
});
function attackframe(){
$('a[target="_blank"]').prop("target", "attack");
};}
if (document.URL.indexOf("plrattack") != -1 ) {
$("#sidebar").hide()
$("body > center > div.sub-header-container").hide()
$("body > center > div.header-container.fixed-top").hide()
$("#ranks-filters > form > div").hide()
GM_addStyle ( `
#container{background:#0B0B0B !important;}
#content > div.layout-px-spacing{margin-top: -50px !important;background:#0B0B0B !important;}
.mr-3, .mx-3 {margin-right: 0rem!important;}
#content-header-row > center{zoom: 90% !important;}
` );}
if ( document.URL.indexOf("world") != -1 ) {
var theImage8;
theImage8 = document.querySelector("#content-header-row > div.col-xl-5.col-lg-12.col-md-6.col-sm-12.col-12.layout-spacing.px-1 > div > div.widget-content > div.room-top")
theImage8.innerHTML =
''}
if ( document.URL.indexOf("world") != -1 ) {
GM_addStyle ( `
#roomDetails > ul > li > div > div.mr-3 > img {display:none !important;}
#ranks > li > div > div.mr-3 > div > div.rank-row-image > a{width: 0px !important;}
#ranks > li > div > div.media-body{text-align: left !important;}
.mr-3, .mx-3 {margin-right: 0rem!important;}
#content-header-row > div.col-xl-5.col-lg-12.col-md-6.col-sm-12.col-12.layout-spacing.px-1 > div > div.widget-content > div.room-middle{display:none !important;}
.spawnRow{padding-top:0px !important;padding-bottom:0px !important;}
#roomDetails > ul > li {
display: block !important;
list-style-type: disc !important;
margin-block-start: 0em !important;
margin-block-end: 0em !important;
margin-inline-start: 0px !important;
margin-inline-end: 0px !important;
padding-inline-start: 0px !important;
}
` );}
// redefined
if ( document.URL.indexOf("scratch_ticket") != -1 ) {
var theImage2;
theImage2 = document.querySelector("#content > div.layout-px-spacing")
theImage2.innerHTML = '
' + 'MoxxiMod is a userscript written to improve the gaming user interface and player experience
' + 'The code is a combination of CSS (cascading style sheets) and JS (javascript)
' + 'MoxxiMod is 100% free
' + 'If you want to support, please send points to Moxxi
' + 'For help with setup or to report a bug, join our Discord server
' + 'Click Here for the latest scripts
BIG THANK YOU FOR THE TECHNICAL DEV SUPPORT
Beast666007, Bello, CarminT' + '
AND THANK YOU TO THE BETA TESTERS
Rhino, Andreas, Brillo, Dkgoon
StarFox, Kevin, Kriminal, Shawn
Tyler, Xafloc, Jalek, Rodeo
StarPower, TeddyPain, TheStud'+
'
toolbar1 | '+
'toolbar2 | '+
'toolbar3 | '+
'
' + `` + ' | '+ ' | '+
' ' +
'' +
' ' +
'' +
'ASTRAL RIFT' +
'CHALLENGES' +
'DEATHBAT GRAVEYARD' +
'EOB SANDS' +
'MADNESS VAULT' +
'MOUNTAIN CAVE' +
'PRISTINE DEPTHS' +
'ROOM 11' +
'SCIENTIFIC DISTRICT' +
'UNDERGROUND Q SEC BASE' +
'VALLEY OF DEATH' +
'WARDENS SANCTUARY' +
'WILDERNESS' +
' ' +
' |
CHAR: POWER | ' + 'CHAR: ELE DMG | ' + 'CHAR: CHAOS DMG | '+ 'CHAR: GROWTH |
CREW: POWER | ' + 'CREW: ELE DMG | ' + 'CREW: CHAOS DMG | ' + 'CREW: BOSS DMG |
' + stat + '
' + '' + stat + '
' + '' + stat + '
' + '' + stat + '
' + '' + stat + '
' + '' + stat + '
' + '' + stat + '
' + '' + stat + '
' + '