// ==UserScript== // @name Training School Tools // @namespace np // @version 0.1 // @description try to take over the world! // @author You // @match http://www.neopets.com/pirates/academy.phtml?type=status // @match http://www.neopets.com/island/training.phtml?type=status // @match http://www.neopets.com/island/fight_training.phtml?type=status // @grant GM_getValue // @grant GM_setValue // @require https://code.jquery.com/jquery-3.5.1.min.js // @downloadURL none // ==/UserScript== const PIN = 4365; // set to 0 if you don't have PIN enabled for SDB const url = location.href; const itemID = { "One Dubloon Coin": "12755", "Two Dubloon Coin": "12756", "Five Dubloon Coin": "12757", "Mau Codestone": "7458", "Tai-Kai Codestone": "7459", "Lu Codestone": "7460", "Vo Codestone": "7461", "Eo Codestone": "7462", "Main Codestone": "7463", "Zei Codestone": "7464", "Orn Codestone": "7465", "Har Codestone": "7466", "Bri Codestone": "7467", "Mag Codestone": "22208", "Vux Codestone": "22209", "Cui Codestone": "22210", "Kew Codestone": "22211", "Sho Codestone": "22212", "Zed Codestone": "22213" }; //$("b:contains('Current Course Status')").after('

'); const process_url = location.pathname.replace(/\/(?!.+\/)/g, "/process_"); // Get list of all pets let pets = []; $("b").filter(function () { return this.innerHTML.includes(" (Level "); }).each(function (index, element) { const petName = $(element).text().split(" (Level")[0]; pets.push(petName); }); // Replace complete course button let forms = $("form[action*='process_']"); // get all available "Complete course!" forms for (let i = 0; i < forms.length; i++) { let petName = forms.eq(i).find("input[name='pet_name']").val(); let completeButton = forms.eq(i).find(":submit[value='Complete Course!']"); completeButton.replaceWith(''); $("#complete-" + petName).on("click", function () { $(this).prop("disabled", true); completeCourse(this, petName); }); } // Add button to get dubloons/codestones from SDB // codestone $("a[href*='_training.phtml?type=pay&pet_name=']").each(function (index, element) { //let petName = $(element).attr("href").split("&pet_name=")[1]; let $p = $(element).next("p"); $p.before('
'); }); // dubloon $("b:contains(' Dubloon Coin')").each(function (index, element) { $(element).parent().parent().before(''); }); // Handler $(".getItems").each(function (index, element) { $(element).on("click", function () { $(this).prop("disabled", true); let items = []; if (url.includes("/island/")) { $(element).next("p").find("b").each(function (index, element) { let codestone = $(element).text(); items.push(codestone); }); } if (url.includes("/pirates/")) { let dubloon = $(element).parentsUntil("table").eq(2).find("b").text(); items.push(dubloon); } console.log(items); (async () => $(this).html(await getItemsFromSDB(items)))(); }); }); /* ------- Functions ------- */ function completeCourse(element, pet) { const $this = $(element); $.ajax({ type: "POST", url: process_url, async: false, data: { "type": "complete", "pet_name": pet }, success: function (data, status) { let stat = data.match(/increased (\w+)/)[1] || "error"; let bonus = data.includes("SUPER BONUS") ? parseInt(data.match(/SUPER BONUS - You went up (\d+) points/)[1]) : 1; console.log({ "pet": pet, "status": status, "stat": stat, "bonus": bonus }); console.log(data); let result = stat === "error" ? "error" : 'Course complete!

+' + bonus + ' ' + stat + '

'; $this.parent().parent().html(result); if (document.getElementById("repeat-" + pet)) { $("#repeat-" + pet).on("click", function () { $(this).prop("disabled", true); startCourse(pet, stat) }); } } }); } function startCourse(pet, course) { setTimeout(function () { $.ajax({ type: "POST", url: process_url, async: false, data: { "type": "start", "course_type": course, "pet_name": pet }, success: function (data) { let error = data.includes("Error:") ? "Error: " + data.split("Error: ")[1].split("")[0] : "successful"; console.log({ "Pet": pet, "Course": course, "Status": error }); location.reload(); } }); }, 1000); } function getItemsFromSDB(array) { return new Promise(resolve => { let postData = {}; let itemCount = {}; for (let i = 0; i < array.length; i++) { let id = itemID[array[i]]; if (!itemCount[id]) { itemCount[id] = 0; } itemCount[id]++; for (let item in itemCount) { if (itemCount[item] > 0) { postData["back_to_inv[" + id + "]"] = itemCount[item]; } } } postData["category"] = "0"; postData["offset"] = "0"; if (PIN) { postData["pin"] = PIN; } $.ajax({ type: "POST", url: "/process_safetydeposit.phtml?checksub=scan", async: false, data: postData, success: function (data) { resolve("Done!"); } }); }) } //

Woohoo!

Congratulations! PETNAME now has increased Defence!!!

//

Woohoo!

Congratulations! PETNAME now has increased Strength!!!

*** SUPER BONUS - You went up 2 points!! ***

//
[3 / 10] Food Club : Success