// ==UserScript== // @name MH: Labyrinth Door Data Collector // @author Warden Slayer - Warden Slayer#2302 // @namespace https://greasyfork.org/en/users/227259-wardenslayer // @version 1.2.1 // @description Mousehunt data collection tool for avilible labyrinth doors // @include https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js // @include http://www.mousehuntgame.com/* // @include https://www.mousehuntgame.com/* // @grant GM_setClipboard // @downloadURL none // ==/UserScript== $(document).ready(function() { buildCopyButton(); }); function buildCopyButton() { if ($(".copyButtonContainer").length > 0) return; var copyButtonContainer = document.createElement("div"); copyButtonContainer.classList.add("copyButtonContainer"); var hudLocation = $(".hudLocationContent.labyrinth"); //Copy Button var copyButton = document.createElement("button"); copyButton.id = "copyButton"; copyButton.innerText = "Copy/Submit Data"; copyButton.addEventListener("click", copyData); copyButtonContainer.appendChild(copyButton); $(copyButton).css({ 'margin-right': '5px', }) hudLocation.after(copyButtonContainer); $(".copyButtonContainer").css({ 'width': '100%', 'margin-bottom': '10px', 'text-align': 'right', }); } function copyData() { const debug = localStorage.getItem('debug'); var lastStep = $(".labyrinthHUD-hallway-padding").children().last(); if ($(lastStep).hasClass("labyrinthHUD-hallway-tile active") || $(lastStep).hasClass("labyrinthHUD-hallway-tile locked")) { if (debug == true) { console.log('Not in an intersection. Submit cancelled') } return; } else { if (debug == true) { console.log('Collecting Data') } var fealtyClues = $('[class*="labyrinthHUD-clueDrawer-clue y"]').find(".labyrinthHUD-clueDrawer-quantity").text(); if (debug == true) { console.log("Fealty Clues: ", fealtyClues) } var techClues = $('[class*="labyrinthHUD-clueDrawer-clue h"]').find(".labyrinthHUD-clueDrawer-quantity").text(); if (debug == true) { console.log("Tech Clues: ", techClues) } var scholarClues = $('[class*="labyrinthHUD-clueDrawer-clue s"]').find(".labyrinthHUD-clueDrawer-quantity").text(); if (debug == true) { console.log("Scholar Clues: ", scholarClues) } var treasureClues = $('[class*="labyrinthHUD-clueDrawer-clue t"]').find(".labyrinthHUD-clueDrawer-quantity").text(); if (debug == true) { console.log("Treasury Clues: ", treasureClues) } var farmingClues = $('[class*="labyrinthHUD-clueDrawer-clue f"]').find(".labyrinthHUD-clueDrawer-quantity").text(); if (debug == true) { console.log("Farming Clues: ", farmingClues) } var deadEndClues = $('[class*="labyrinthHUD-clueDrawer-clue m"]').find(".labyrinthHUD-clueDrawer-quantity").text(); if (debug == true) { console.log("Dead End Clues: ", deadEndClues) } var A = isNaN(parseInt(fealtyClues, 10)); var B = isNaN(parseInt(techClues, 10)); var C = isNaN(parseInt(scholarClues, 10)); var D = isNaN(parseInt(treasureClues, 10)); var E = isNaN(parseInt(farmingClues, 10)); var F = isNaN(parseInt(deadEndClues, 10)); //if data is missing: stop if (A || B || C || D || E || F) { if (debug == true) { console.log('Bad Data Parse, Submit cancelled', A, B, C, D, E, F) } return } var allDoors = $(".labyrinthHUD-doorContainer").children(); //Add flag to denote shuffling var journalText = $(".journaltext"); var journalArray = journalText.toArray(0); var shuffleFlag = parseJournal(journalArray); //Parse Doors var doorOne = $(allDoors).first(); var doorThree = $(allDoors).last(); var doorTwo = $(allDoors).not(doorOne).not(doorThree); var doorOneData = parseDoor(doorOne) var doorOneObj = new doorOption(doorOneData.doorLength, doorOneData.doorQuality, doorOneData.doorType); var doorTwoData = parseDoor(doorTwo) var doorTwoObj = new doorOption(doorTwoData.doorLength, doorTwoData.doorQuality, doorTwoData.doorType); var doorThreeData = parseDoor(doorThree) var doorThreeObj = new doorOption(doorThreeData.doorLength, doorThreeData.doorQuality, doorThreeData.doorType); var resultsArray = [fealtyClues, techClues, scholarClues, treasureClues, farmingClues, deadEndClues, doorOneObj.length, doorOneObj.quality, doorOneObj.type, doorTwoObj.length, doorTwoObj.quality, doorTwoObj.type, doorThreeObj.length, doorThreeObj.quality, doorThreeObj.type, shuffleFlag ]; let results = resultsArray.join() console.log('Result String: ', results) GM_setClipboard(results) publishResults(results) } } function parseDoor(door) { const debug = localStorage.getItem('debug'); var doorString = door.find(".labyrinthHUD-door-name-padding").text(); var doorArray = doorString.split(/\s+/); var doorLength = doorArray[0]; var doorQuality = doorArray[1]; var doorType = doorArray[2]; if (debug == true) { console.log("Door before shortening: ", doorLength, doorQuality, doorType) } //shorten door length if (doorLength == "Long") { doorLength = "L"; } else if (doorLength == "Medium") { doorLength = "M"; } else { doorLength = "S"; } //shorten door quality if (doorQuality == "Epic") { doorQuality = "E"; } else if (doorQuality == "Superior") { doorQuality = "S"; } else { doorQuality = "P"; } //shorten door type if (doorType == "Fealty") { doorType = "Y"; } else if (doorType == "Tech") { doorType = "H"; } else if (doorType == "Scholar") { doorType = "S"; } else if (doorType == "Treasury") { doorType = "T"; } else if (doorType == "Farming") { doorType = "F"; } else { doorType = "M"; } if (debug == true) { console.log("Door after shortening: ", doorLength, doorQuality, doorType) } return { doorLength, doorQuality, doorType } } function parseJournal(array) { var shuffleFlag = 0; array.forEach(function(elements) { var text = $(elements).text(); if (text.includes("grinding whirr")) { shuffleFlag = 1; } else {} }) return shuffleFlag; } function doorOption(length, quality, type) { this.length = length; this.quality = quality; this.type = type; } function publishResults(results) { const debug = localStorage.getItem('debug'); var lastSubmit = localStorage.getItem('Last Submission'); if (debug == true) { console.log('Atempting to submit data') } if (results == lastSubmit) { if (debug == true) { console.log("Data has not changed, submit cancelled", lastSubmit) } return } const url = 'https://script.google.com/macros/s/AKfycbwmnDYV_3f5XFj7xzKcPclMcrzTaDkG1SMLwm2e8A8ABN5ms_j6/exec'; var form = new submitData(results) var jqxhr = $.ajax({ url: url, method: "GET", dataType: "json", data: form, }).success(function() { // do something console.log('Door Data Submitted!') localStorage.setItem('Last Submission', results) }); } function submitData(result_string) { this.The_String_From_The_Script = result_string; }