Skip to content

Instantly share code, notes, and snippets.

Created May 12, 2015 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save anonymous/f167f97bfdefa2b10002 to your computer and use it in GitHub Desktop.
Save anonymous/f167f97bfdefa2b10002 to your computer and use it in GitHub Desktop.
runs infinite SCA for last character on Gateway bot list.
// ==UserScript==
// @name Neverwinter gateway - Professions Robot
// @description Automatically selects professions for empty slots
// @include http://gateway*.playneverwinter.com/*
// @include https://gateway*.playneverwinter.com/*
// @include http://gateway.*.perfectworld.eu/*
// @include https://gateway.*.perfectworld.eu/*
// @originalAuthor Mustex/Bunta
// @modifiedBy NW gateway Professions Bot Developers & Contributors
// @version 1.10.06.10 SCA Tier-3
// @license http://creativecommons.org/licenses/by-nc-sa/3.0/us/
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_listValues
// @grant GM_deleteValue
// ==/UserScript==
// Make sure it's running on the main page, no frames
if (window.self !== window.top) {
throw "";
}
var current_Gateway = _select_Gateway(); // edited by RottenMind
// Set global console variables
var fouxConsole = {log: function () {
}, info: function () {
}, error: function () {
}, warn: function () {
}};
var console = unsafeWindow.console || fouxConsole;
var chardelay = 0;
var chardate = null;
var chardiamonds = {};
var definedTask = {};
var startedTask = {}; // stores information about previous (character, taskname, and counter) and currently started task
startedTask["lastTaskChar"] = "";
startedTask["lastTaskName"] = "";
startedTask["lastTaskCount"] = 0;
// Page Reloading function
// Every second the page is idle or loading is tracked
var loading_reset = false; // Enables a periodic reload if this is toggled on by the Auto Reload check box on the settings panel
var s_paused = false; // extend the paused setting to the Page Reloading function
// RottenMind (start), multi Url support
function _select_Gateway() { // Check for Gateway used to
if (window.location.href.indexOf("gatewaytest") > -1) { // detect gatewaytest Url
//console.log("GatewayTEST detected");
return "http://gatewaytest.playneverwinter.com";
}
else if (window.location.href.indexOf("nw.ru.perfectworld") > -1) {
//console.log("GatewayRU detected");
return "http://gateway.nw.ru.perfectworld.eu";
}
else { // must go somewhere
//console.log("Gateway detected");
return "http://gateway.playneverwinter.com";
}
}
// RottenMind (END)
(function () {
var $ = unsafeWindow.$;
//MAC-NW
$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {
var found = 'found';
var $this = $(this.selector);
var $elements = $this.not(function () {
return $(this).data(found);
}).each(handler).data(found, true);
if (!isChild) {
(window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] = window.setInterval(function () {
$this.waitUntilExists(handler, shouldRunHandlerOnce, true);
}, 500);
} else if (shouldRunHandlerOnce && $elements.length) {
window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
}
return $this;
}
// MAC-NW - Wait for tooltip to come up so we can alter the list
$('.tooltip-menu button').waitUntilExists(function () {
// Tooltip has open menu itemtooltip
if ($('button.tooltip-menu button[data-url-silent^="/inventory/item-open"]') && !$('.tooltip-menu div.tooltip-openall').length && !$('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').hasClass('disabled'))
try {
var thisItem = eval("client.dataModel.model." + $('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').attr('data-url-silent').split("=")[1]);
if (thisItem.count > 1) {
if (thisItem.count >= 99)
thisItem.count = 99;
var openAllClick = "for (i = 1; i <= " + thisItem.count + "; i++){ window.setTimeout(function () {client.sendCommand('GatewayInventory_OpenRewardPack', '" + thisItem.uid + "');}, 500); }";
$('div.tooltip-menu').append('<div class="input-field button menu tooltip-openall"><div class="input-bg-left"></div><div class="input-bg-mid"></div><div class="input-bg-right"></div>\
<button class="&nbsp;" onclick="' + openAllClick + '">Open All (' + thisItem.count + ')</button></div>');
//$('a.nav-dungeons').trigger('click'); window.setTimeout(function(){ $('a.nav-inventory').trigger('click'); },2000);
}
} catch (e) {
//console.log("ERROR: Did not succeed to add open all tooltip.");
}
});
$('.vendor-quantity-block span.attention').waitUntilExists(function () {
if ($('.vendor-quantity-block span.attention span').length)
$('.vendor-quantity-block span.attention').replaceWith('<div class="input-field button"><div class="input-bg-left"></div><div class="input-bg-mid"></div><div class="input-bg-right"></div><button onclick="$(\'input[name=inventorySellQty]\').val(\'' + $(".vendor-quantity-block span.attention span").text() + '\');">All (' + $(".vendor-quantity-block span.attention span").text() + ')</button></div>');
});
$('div.notification div.messages li').waitUntilExists(function () {
if ($("div.notification div.messages li").length > 2)
$("div.notification div.messages li").eq(0).remove();
});
// Always disable SCA tutorial if its active
/*$('#help-dimmer.help-cont.whenTutorialActive').waitUntilExists(function () {
client.toggleHelp();
});*/
//MAC-NW
var state_loading = 0; // If "Page Loading" takes longer than 30 seconds, reload page (maybe a javascript error)
var state_loading_time = 30; // default of 30 seconds
var state_idle = 0; // If the page is idle for longer than 60 seconds, reload page (maybe a javascript error)
var state_idle_time = 120; // default of 120 seconds
var reload_hours = [2, 6, 10, 14, 18, 22, 23]; // logout and reload every three hours - 2:29 - 6:29 - 10:29 - 14:29 - 18:29 - 22:29 - 23:29
var last_location = ""; // variable to track reference to page URL
var reload_timer = setInterval(function () {
if (!s_paused) {
if (startedTask["lastTaskCount"] >= 20) {
unsafeWindow.location.href = current_Gateway;
return;
}
if (loading_reset) {
var loading_date = new Date();
var loading_sec = Number(loading_date.getSeconds());
var loading_min = Number(loading_date.getMinutes());
var loading_hour = Number(loading_date.getHours());
if (reload_hours.indexOf(loading_hour) >= 0 && loading_min == 29 && loading_sec < 2) {
//console.log("Auto Reload");
unsafeWindow.location.href = current_Gateway; // edited by RottenMind
return;
}
}
// check for errors
if ($("title").text().match(/Error/) || $("div.modal-content h3").text().match(/Disconnected/)) {
//console.log("Error detected - relogging");
unsafeWindow.location.href = current_Gateway; // edited by RottenMind
return;
}
if ($("div.loading-image:visible").length) {
last_location = location.href;
state_idle = 0;
if (state_loading >= state_loading_time) {
//console.log("Page Loading too long");
state_loading = 0;
location.reload(true);
}
else {
state_loading++;
//console.log("Page Loading ...", state_loading + "s");
}
}
// TODO: Add check for gateway disconnected
//<div class="modal-content" id="modal_content"><h3>Disconnected from Gateway</h3><p>You have been disconnected.</p><button type="button" class="modal-button" onclick="window.location.reload(true);">Close</button>
/* Can't use idle check with dataModel methods
else if (location.href == last_location) {
state_loading = 0;
if (state_idle >= state_idle_time) {
//console.log("Page Idle too long");
state_idle = 0;
unsafeWindow.location.href = current_Gateway ; // edited by RottenMind
} else {
state_idle++;
// comment out to avoid console spam
////console.log("Page Idle ...", state_idle + "s");
}}
*/
else {
last_location = location.href;
state_loading = 0;
state_idle = 0;
}
}
}, 1000);
})();
(function () {
/**
* Add a string of CSS to the main page
* @param {String} cssString The CSS to add to the main page
*/
function AddCss(cssString) {
var head = document.getElementsByTagName('head')[0];
if (!head)
return;
var newCss = document.createElement('style');
newCss.type = "text/css";
newCss.innerHTML = cssString;
head.appendChild(newCss);
}
function countLeadingSpaces(str) {
return str.match(/^(\s*)/)[1].length;
}
var image_pause = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAY" +
"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" +
"BNp57TyT3+MAAAAASUVORK5CYII=";
var image_play = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYA" +
"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";
var image_prefs = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQC" +
"AMAAAAoLQ9TAAAAllBMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3No" +
"aGhsaWdramlycG1meY98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrq" +
"koZy3t7fIx8bKyMHT0c3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/" +
"f5+PgAAABrL3yvAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTA" +
"QCanBgAAAAHdElNRQfWBRoFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+" +
"/8+RsTExDDpIe3ijfSJ/hx9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g" +
"1oMGmW7YZ6hnCYexKTPVkXivuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDz" +
"WdWHfmAAAAAElFTkSuQmCC";
var image_close = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQC" +
"AQAAAC1+jfqAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfW" +
"BRkTNhxuPxLkAAAAHXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAE" +
"KSURBVCjPhdGxSgNBFAXQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohY" +
"UgbGKQyFjErNv52nObe19wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6" +
"Zfr9u25MIj6Jl4cmSIPBWrq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNX" +
"pBQpI8GJDTR050zkNzK0bMMZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd" +
"6bgwxkmTMIotWKpwrfBkZl7uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz" +
"85FH/WkOkaHQAAAABJRU5ErkJggg==";
// Setup global closure variables
var $ = unsafeWindow.jQuery;
var timerHandle = 0;
var dfdNextRun = $.Deferred();
var charcurrent = 0; // current character counter
var chartimers = {};
var settingwipe = false; // Use to wipe stored settings
var delay = {
SHORT: 1000,
MEDIUM: 5000,
LONG: 30000,
MINS: 300000,
DEFAULT: 10000, // default delay
TIMEOUT: 60000, // delay for cycle processing timeout
};
var failedProf = [];
var taskSlots = [];
var slotsByProf = {};
var charNameList = []; // better place
/*
* Tasklist can be modified to configure the training you want to perform.
* The configurable options window sets how many profession slots you want to use for each profession.
* The level array below for each professions specifies the tasks you want to learn at each crafting level.
* Each craft slot will pick the first task that meets requirements.
* See http://pastebin.com/VaGntEha for Task Name Map.
* Updated list, see http://pastebin.com/inR0Hwv0
* Tools,
* Tasknames extraction, https://greasyfork.org/en/scripts/7977-nw-profession-names
* Inventory listing, https://greasyfork.org/en/scripts/8506-nw-inventory-names
* Some names above do not match, use below code to check:
* var tasks = client.dataModel.model.craftinglist['craft_' + profname].entries.filter(function(entry) { return entry.def && entry.def.displayname == taskname; }); tasks[0].def.name;
*/
definedTask["Leadership"] = {
// modded to prioritize RAD production, added low level task for speeding up levelling up
taskListName: "Leadership",
taskName: "Leadership",
level: {
0: ["Leadership_Tier0_Intro_1"],
1: ["Leadership_Tier0_Intro_5", "Leadership_Tier0_Intro_4", "Leadership_Tier0_Intro_3", "Leadership_Tier0_Intro_2"],
2: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
3: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
4: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
5: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
6: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
7: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
8: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
9: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore"],
// Begin prioritizing "Battle Undead"
10: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore"],
11: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore"],
12: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore"],
// Add "protect diamonds rare" and the patrol quest as a backup
13: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier3_13_Patrol", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore"],
14: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier3_13_Patrol", "Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore"],
15: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier1_4r_Gatherdiamonds", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier1_4_Protect", "Leadership_Tier3_15r_Raidtreasury", "Leadership_Tier1_5_Explore"],
// Production mode: Spellplague + Battle Undead
16: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol","Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier3_16_Fight", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_15r_Raidtreasury", "Leadership_Tier1_5_Explore"],
17: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol","Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier3_16_Fight", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_15r_Raidtreasury", "Leadership_Tier1_5_Explore"],
18: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol","Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier3_16_Fight", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_15r_Raidtreasury", "Leadership_Tier1_5_Explore"],
19: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_13_Patrol","Leadership_Tier2_12_Taxes", "Leadership_Tier2_10r_Seekmaps", "Leadership_Tier2_9_Chart", "Leadership_Tier3_16_Fight", "Leadership_Tier2_8r_Givehome", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_15r_Raidtreasury", "Leadership_Tier1_5_Explore"],
20: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_20r_Master2",
"Leadership_Tier3_20r_Master1","Leadership_Tier3_20r_Master3","Leadership_Tier3_20_Destroy",
"Leadership_Tier2_12_Taxes", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_16_Fight",
"Leadership_Tier2_10_Battle", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
21: ["Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier3_20r_Master2",
"Leadership_Tier3_20r_Master1","Leadership_Tier3_20r_Master3","Leadership_Tier3_20_Destroy", "Leadership_Tier4_21_Protectmagic",
"Leadership_Tier2_12_Taxes", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_16_Fight",
"Leadership_Tier2_10_Battle", "Leadership_Tier2_9_Chart","Leadership_Tier1_5_Explore"],
22: ["Leadership_Tier4_22r_Capturebandithq", "Leadership_Tier3_13r_Protectdiamonds",
"Leadership_Tier3_20r_Master2", "Leadership_Tier3_20r_Master1",
"Leadership_Tier3_20r_Master3", "Leadership_Tier3_20_Destroy", "Leadership_Tier4_21_Protectmagic",
"Leadership_Tier2_12_Taxes", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_16_Fight",
"Leadership_Tier2_10_Battle", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
23: ["Leadership_Tier4_22r_Capturebandithq", "Leadership_Tier3_13r_Protectdiamonds",
"Leadership_Tier3_20r_Master2", "Leadership_Tier3_20r_Master1","Leadership_Tier3_20r_Master3",
"Leadership_Tier3_20_Destroy", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_12_Taxes",
"Leadership_Tier4_21_Protectmagic","Leadership_Tier3_13_Patrol","Leadership_Tier3_16_Fight",
"Leadership_Tier2_10_Battle", "Leadership_Tier2_9_Chart","Leadership_Tier1_5_Explore"],
24: ["Leadership_Tier4_22r_Capturebandithq", "Leadership_Tier3_13r_Protectdiamonds",
"Leadership_Tier4_24r_Killdragon","Leadership_Tier3_20r_Master2","Leadership_Tier3_20r_Master1",
"Leadership_Tier3_20r_Master3", "Leadership_Tier3_20_Destroy", "Leadership_Tier2_12_Taxes",
"Leadership_Tier4_21_Protectmagic","Leadership_Tier3_13_Patrol","Leadership_Tier3_16_Fight",
"Leadership_Tier2_10_Battle", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
25: ["Leadership_Tier4_25r_Huntexperiment","Leadership_Tier4_22r_Capturebandithq",
"Leadership_Tier3_13r_Protectdiamonds","Leadership_Tier4_24r_Killdragon",
"Leadership_Tier3_20r_Master2", "Leadership_Tier3_20r_Master1","Leadership_Tier3_20r_Master3",
"Leadership_Tier3_20_Destroy","Leadership_Tier2_12_Taxes", "Leadership_Tier4_25_Battleelementalcultists",
"Leadership_Tier4_21_Protectmagic", "Leadership_Tier3_13_Patrol","Leadership_Tier3_16_Fight",
"Leadership_Tier2_10_Battle", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
},
};
definedTask["Leadership XP"] = {
taskListName: "Leadership_XP",
taskName: "Leadership",
level: {
0: ["Leadership_Tier0_Intro_1"],
1: ["Leadership_Tier0_Intro_5", "Leadership_Tier0_Intro_4", "Leadership_Tier0_Intro_3", "Leadership_Tier0_Intro_2"],
2: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
3: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
4: ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
5: ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
6: ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
7: ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
8: ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
9: ["Leadership_Tier1_5_Explore", "Leadership_Tier2_9_Chart", "Leadership_Tier1_4_Protect"],
10: ["Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
11: ["Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
12: ["Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
13: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
14: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
15: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
16: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
17: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
18: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
19: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier3_13_Training", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
20: ["Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart","Leadership_Tier1_5_Explore", "Leadership_Tier3_13_Training", "Leadership_Tier1_4_Protect", "Leadership_Tier2_7_Training"],
// 20: ["Leadership_Tier3_13_Patrol","Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_20r_Master2", "Leadership_Tier3_20r_Master1", "Leadership_Tier3_20r_Master3", "Leadership_Tier3_20_Destroy", "Leadership_Tier2_12_Taxes", "Leadership_Tier3_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol"],
21: ["Leadership_Tier4_21_Protectmagic","Leadership_Tier4_21_Training","Leadership_Tier2_9_Chart","Leadership_Tier1_5_Explore","Leadership_Tier3_13_Patrol"],
22: ["Leadership_Tier4_22_Guardclerics","Leadership_Tier4_21_Training","Leadership_Tier2_9_Chart","Leadership_Tier1_5_Explore","Leadership_Tier3_13_Patrol"],
23: ["Leadership_Tier4_21_Protectmagic","Leadership_Tier4_22_Guardclerics","Leadership_Tier4_21_Protectmagic","Leadership_Tier4_21_Training","Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
24: ["Leadership_Tier4_24_Wizardsseneschal","Leadership_Tier4_22_Guardclerics","Leadership_Tier4_21_Protectmagic","Leadership_Tier4_21_Training","Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
25: ["Leadership_Tier4_25r_Huntexperiment", "Leadership_Tier4_21_Protectmagic", "Leadership_Tier4_24_Wizardsseneschal","Leadership_Tier4_22_Guardclerics","Leadership_Tier4_22_Guardclerics","Leadership_Tier4_25_Battleelementalcultists", "Leadership_Tier3_20_Destroy", "Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_12_Taxes", "Leadership_Tier3_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
},
};
definedTask["Winter Event"] = {
taskListName: "WinterEvent",
taskName: "WinterEvent",
level: {
/*
0:["Event_Winter_Tier1_Heros_Feast, Event_Winter_Tier1_Lightwine, Event_Winter_Tier1_Sparkliest_Gem"],
1:["Event_Winter_Tier1_Heros_Feast, Event_Winter_Tier1_Lightwine, Event_Winter_Tier1_Sparkliest_Gem"],
2:["Event_Winter_Tier1_Heros_Feast, Event_Winter_Tier1_Lightwine, Event_Winter_Tier1_Sparkliest_Gem"],
3:["Event_Winter_Tier1_Heros_Feast, Event_Winter_Tier1_Lightwine, Event_Winter_Tier1_Sparkliest_Gem"],
*/
0: ["Event_Winter_Tier0_Intro"],
1: ["Event_Winter_Tier1_Rankup", /*"Event_Winter_Tier1_Shiny_Lure",*/"Event_Winter_Tier1_Refine", "Event_Winter_Tier1_Gather"],
2: ["Event_Winter_Tier1_Rankup_2", /*"Event_Winter_Tier1_Fishingpole_Blue","Event_Winter_Tier1_Shiny_Lure_Mass",*/"Event_Winter_Tier1_Refine_2", "Event_Winter_Tier1_Gather_2"],
3: [/*"Event_Winter_Tier1_Heros_Feast","Event_Winter_Tier1_Lightwine","Event_Winter_Tier1_Sparkliest_Gem","Event_Winter_Tier1_Mesmerizing_Lure",*/"Event_Winter_Tier1_Gather_3"],
},
};
definedTask["Siege Event"] = {
taskListName: "Event_Siege",
taskName: "Event_Siege",
level: {
0:["Event_Siege_Tier0_Intro"], // Hire a Siege Master
1:["Event_Siege_Tier1_Donate_Majorinjury", "Event_Siege_Tier1_Donate_Injury", "Event_Siege_Tier1_Donate_Resources_T3", "Event_Siege_Tier1_Donate_Resources_T2"],
/*
0: ["Event_Siege_Tier0_Intro"], // Hire a Siege Master
//1:["Event_Siege_Tier1_Donate_Minorinjury"], // Create Defense Supplies from Minor Injury Kits
//1:["Event_Siege_Tier1_Donate_Injury"], // Create Defense Supplies from Injury Kits
//1:["Event_Siege_Tier1_Donate_Majorinjury"], // Create Defense Supplies from Major Injury Kits
//1:["Event_Siege_Tier1_Donate_Altar_10"], // Create Defense Supplies from 10 Portable Altars
//1:["Event_Siege_Tier1_Donate_Altar_50"], // Create Defense Supplies from 50 Portable Altars
//1:["Event_Siege_Tier1_Donate_Resources_T2"], // Create Defense Supplies from Tier 2 crafting resources
//1:["Event_Siege_Tier1_Donate_Resources_T3"], // Create Defense Supplies from Tier 3 crafting resources
1: ["Event_Siege_Tier1_Donate_Resources_T3", "Event_Siege_Tier1_Donate_Resources_T2", "Event_Siege_Tier1_Donate_Minorinjury", "Event_Siege_Tier1_Donate_Injury", "Event_Siege_Tier1_Donate_Majorinjury", "Event_Siege_Tier1_Donate_Altar_10"],
*/
},
};
definedTask["Black Ice Shaping"] = {
taskListName: "BlackIce",
taskName: "BlackIce",
level: {
1: ["Blackice_Tier1_Process_Blackice"],
2: ["Blackice_Tier1_Process_Blackice"],
3: ["Blackice_Tier1_Process_Blackice"],
4: ["Blackice_Tier1_Process_Blackice"],
5: ["Blackice_Tier1_Process_Blackice"],
/*
1:["Forge Hammerstone Pick","Gather Raw Black Ice","Truesilver Pick Grip","Process Raw Black Ice","Upgrade Chillwright","Hire an additional Chillwright"],
2:["Forge Hammerstone Pick","Gather Raw Black Ice","Truesilver Pick Grip","Process Raw Black Ice","Upgrade Chillwright","Hire an additional Chillwright"],
3:["Forge Hammerstone Pick","Gather Raw Black Ice","Truesilver Pick Grip","Process Raw Black Ice","Upgrade Chillwright","Hire an additional Chillwright"],
*/
},
};
definedTask["Jewelcrafting"] = {
taskListName: "Jewelcrafting",
taskName: "Jewelcrafting",
level: {
0: ["Jewelcrafting_Tier0_Intro"],
1: ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
2: ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
3: ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
4: ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
5: ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
6: ["Jewelcrafting_Tier1_Neck_Misc_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
7: ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
8: ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
9: ["Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
10: ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
11: ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
12: ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
13: ["Jewelcrafting_Tier2_Neck_Misc_2", "Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
14: ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
15: ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
16: ["Jewelcrafting_Tier3_Neck_Offense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
17: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
18: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
19: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
20: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
21: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
22: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
23: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
24: ["Jewelcrafting_Tier3_Neck_Defense_3", "Jewelcrafting_Tier3_Waist_Defense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
25: ["Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier1_Refine_Basic"],
},
};
definedTask["Mailsmithing"] = {
taskListName: "Mailsmithing",
taskName: "Armorsmithing_Med",
level: {
0: ["Med_Armorsmithing_Tier0_Intro"],
1: ["Med_Armorsmithing_Tier1_Gather_Basic"],
2: ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1","Med_Armorsmithing_Tier1_Gather_Basic"],
3: ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1","Med_Armorsmithing_Tier1_Gather_Basic"],
4: ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1","Med_Armorsmithing_Tier1_Gather_Basic"],
5: ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1","Med_Armorsmithing_Tier1_Gather_Basic"],
6: ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1","Med_Armorsmithing_Tier1_Gather_Basic"],
7: ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt","Med_Armorsmithing_Tier1_Gather_Basic","Med_Armorsmithing_Tier1_Gather_Basic"],
8: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_1", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt","Med_Armorsmithing_Tier1_Gather_Basic"],
9: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_1", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt","Med_Armorsmithing_Tier1_Gather_Basic"],
10: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_1", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt_2","Med_Armorsmithing_Tier1_Gather_Basic","Med_Armorsmithing_Tier1_Gather_Basic"],
11: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_2", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt_2", "Med_Armorsmithing_Tier2_Chain_Pants_1","Med_Armorsmithing_Tier1_Gather_Basic"],
12: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_2", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt_2", "Med_Armorsmithing_Tier2_Chain_Pants_1","Med_Armorsmithing_Tier1_Gather_Basic"],
13: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_2", "Med_Armorsmithing_Tier2_Chain_Boots_Set_1", "Med_Armorsmithing_Tier2_Chain_Shirt_2", "Med_Armorsmithing_Tier2_Chain_Pants_1","Med_Armorsmithing_Tier1_Gather_Basic"],
14: ["Med_Armorsmithing_Tier2_Chain_Armor_Set_1", "Med_Armorsmithing_Tier2_Chain_Pants_2", "Med_Armorsmithing_Tier3_Chain_Shirt", "Med_Armorsmithing_Tier3_Chain_Boots_Set_1","Med_Armorsmithing_Tier1_Gather_Basic"],
15: ["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Boots_Set_1","Med_Armorsmithing_Tier1_Gather_Basic"],
16: ["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
17: ["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
18: ["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
19: ["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
20: ["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
21 :["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
22 :["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
23 :["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
24 :["Med_Armorsmithing_Tier3_Chain_Armor_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Helm_Set_1", "Med_Armorsmithing_Tier3_Chain_Pants","Med_Armorsmithing_Tier1_Gather_Basic"],
25 :["Med_Armorsmithing_Tier2_Refine_Basic"],
},
};
definedTask["Platesmithing"] = {
taskListName: "Platesmithing",
taskName: "Armorsmithing_Heavy",
level: {
0: ["Hvy_Armorsmithing_Tier0_Intro"],
1: ["Hvy_Armorsmithing_Tier1_Plate_Boots_1", "Hvy_Armorsmithing_Tier1_Plate_Shirt_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
2: ["Hvy_Armorsmithing_Tier1_Plate_Armor_1", "Hvy_Armorsmithing_Tier1_Plate_Pants_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
3: ["Hvy_Armorsmithing_Tier1_Plate_Armor_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
4: ["Hvy_Armorsmithing_Tier1_Plate_Armor_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
5: ["Hvy_Armorsmithing_Tier1_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
6: ["Hvy_Armorsmithing_Tier1_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
7: ["Hvy_Armorsmithing_Tier1_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt", "Hvy_Armorsmithing_Tier2_Shield_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
8: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_1", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt","Hvy_Armorsmithing_Tier1_Gather_Basic"],
9: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_1", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt","Hvy_Armorsmithing_Tier1_Gather_Basic"],
10: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_1", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt_2","Hvy_Armorsmithing_Tier1_Gather_Basic"],
11: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_2", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt_2", "Hvy_Armorsmithing_Tier2_Plate_Pants_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
12: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_2", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt_2", "Hvy_Armorsmithing_Tier2_Plate_Pants_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
13: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_2", "Hvy_Armorsmithing_Tier2_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Shirt_2", "Hvy_Armorsmithing_Tier2_Plate_Pants_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
14: ["Hvy_Armorsmithing_Tier2_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier2_Plate_Pants_2", "Hvy_Armorsmithing_Tier3_Plate_Shirt", "Hvy_Armorsmithing_Tier3_Plate_Boots_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic"],
15: ["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Boots_Set_1","Hvy_Armorsmithing_Tier1_Gather_Basic","Hvy_Armorsmithing_Tier1_Gather_Basic"],
16: ["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
17: ["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
18: ["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
19: ["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
20: ["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
21 :["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
22 :["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
23 :["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
24 :["Hvy_Armorsmithing_Tier3_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants2", "Hvy_Armorsmithing_Tier3_Plate_Shirt2", "Hvy_Armorsmithing_Tier3_Plate_Helm_Set_1", "Hvy_Armorsmithing_Tier3_Plate_Pants","Hvy_Armorsmithing_Tier1_Gather_Basic"],
25 :["Hvy_Armorsmithing_Tier2_Refine_Basic"],
},
};
definedTask["Leatherworking"] = {
taskListName: "Leatherworking",
taskName: "Leatherworking",
level: {
0: ["Leatherworking_Tier0_Intro_1"],
1: ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1","Leatherworking_Tier1_Gather_Basic"],
2: ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1","Leatherworking_Tier1_Gather_Basic"],
3: ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1","Leatherworking_Tier1_Gather_Basic"],
4: ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1","Leatherworking_Tier1_Gather_Basic"],
5: ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1","Leatherworking_Tier1_Gather_Basic"],
6: ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1","Leatherworking_Tier1_Gather_Basic"],
7: ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt","Leatherworking_Tier1_Gather_Basic"],
8: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt","Leatherworking_Tier1_Gather_Basic"],
9: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt","Leatherworking_Tier1_Gather_Basic"],
10: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt_2","Leatherworking_Tier1_Gather_Basic"],
11: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_2", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt_2", "Leatherworking_Tier2_Leather_Pants_1","Leatherworking_Tier1_Gather_Basic"],
12: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_2", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt_2", "Leatherworking_Tier2_Leather_Pants_1","Leatherworking_Tier1_Gather_Basic"],
13: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_2", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt_2", "Leatherworking_Tier2_Leather_Pants_1","Leatherworking_Tier1_Gather_Basic"],
14: ["Leatherworking_Tier2_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Pants_2", "Ornate Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier3_Leather_Boots_Set_1","Leatherworking_Tier1_Gather_Basic"],
15: ["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Boots_Set_1","Leatherworking_Tier1_Gather_Basic"],
16: ["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
17: ["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
18: ["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
19: ["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
20: ["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
21 :["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
22 :["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
23 :["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
24 :["Leatherworking_Tier3_Leather_Armor_Set_1", "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Helm_Set_1", "Leatherworking_Tier3_Leather_Pants","Leatherworking_Tier1_Gather_Basic"],
25 :["Leatherworking_Tier2_Refine_Basic"],
},
};
definedTask["Tailoring"] = {
taskListName: "Tailoring",
taskName: "Tailoring",
level: {
0: ["Tailoring_Tier0_Intro"],
1: [ "Tailoring_Tier1_Cloth_Shirt_1","Tailoring_Tier1_Cloth_Boots_1","Tailoring_Tier1_Gather_Basic"],
2: ["Tailoring_Tier1_Cloth_Armor_1", "Tailoring_Tier1_Cloth_Pants_1","Tailoring_Tier1_Gather_Basic"],
3: ["Tailoring_Tier1_Cloth_Armor_1", "Tailoring_Tier1_Cloth_Shirt_1", "Tailoring_Tier1_Cloth_Boots_Set_1","Tailoring_Tier1_Gather_Basic"],
4: ["Tailoring_Tier1_Cloth_Armor_1", "Tailoring_Tier1_Cloth_Shirt_1", "Tailoring_Tier1_Cloth_Shirt_1", "Tailoring_Tier1_Cloth_Boots_Set_1","Tailoring_Tier1_Gather_Basic"],
5: ["Tailoring_Tier1_Cloth_Armor_Set_1", "Tailoring_Tier1_Cloth_Shirt_1", "Tailoring_Tier1_Cloth_Boots_Set_1","Tailoring_Tier1_Gather_Basic"],
6: ["Tailoring_Tier1_Cloth_Armor_Set_1", "Tailoring_Tier1_Cloth_Shirt_1", "Tailoring_Tier1_Cloth_Boots_Set_1","Tailoring_Tier1_Gather_Basic"],
7: ["Tailoring_Tier1_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt","Tailoring_Tier1_Gather_Basic","Tailoring_Tier1_Gather_Basic"],
8: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_1", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt","Tailoring_Tier1_Gather_Basic"],
9: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_1", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt","Tailoring_Tier1_Gather_Basic"],
10: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_1", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt_2","Tailoring_Tier1_Gather_Basic"],
11: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_2", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt_2", "Tailoring_Tier2_Cloth_Pants_1","Tailoring_Tier1_Gather_Basic"],
12: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_2", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt_2", "Tailoring_Tier2_Cloth_Pants_1","Tailoring_Tier1_Gather_Basic"],
13: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_2", "Tailoring_Tier2_Cloth_Boots_Set_1", "Tailoring_Tier2_Cloth_Shirt_2", "Tailoring_Tier2_Cloth_Pants_1","Tailoring_Tier1_Gather_Basic"],
14: ["Tailoring_Tier2_Cloth_Armor_Set_1", "Tailoring_Tier2_Cloth_Pants_2", "Tailoring_Tier3_Cloth_Shirt", "Tailoring_Tier3_Cloth_Boots_Set_1","Tailoring_Tier1_Gather_Basic"],
15: ["Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Boots_Set_1","Tailoring_Tier1_Gather_Basic"],
16: ["Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1","Tailoring_Tier1_Gather_Basic"],
17: ["Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1","Tailoring_Tier1_Gather_Basic"],
18: ["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
19: ["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
20: ["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
21 :["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
22 :["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
23 :["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
24 :["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2","Tailoring_Tier3_Cloth_Pants2", "Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier3_Cloth_Pants","Tailoring_Tier1_Gather_Basic"],
25 :["Tailoring_Tier2_Refine_Basic"],
},
};
definedTask["Artificing"] = {
taskListName: "Artificing",
taskName: "Artificing",
level: {
0: ["Artificing_Tier0_Intro_1"],
1: ["Artificing_Tier1_Pactblade_Convergence_1", "Artificing_Tier1_Symbol_Virtuous_1", "Artificing_Tier1_Gather_Basic"],
2: ["Artificing_Tier1_Pactblade_Convergence_1", "Artificing_Tier1_Icon_Virtuous_1", "Artificing_Tier1_Gather_Basic"],
3: ["Artificing_Tier1_Pactblade_Convergence_1", "Artificing_Tier1_Icon_Virtuous_1", "Artificing_Tier1_Gather_Basic"],
4: ["Artificing_Tier1_Pactblade_Convergence_2", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier1_Gather_Basic"],
5: ["Artificing_Tier1_Pactblade_Convergence_2", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier1_Gather_Basic"],
6: ["Artificing_Tier1_Pactblade_Convergence_2", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier1_Gather_Basic"],
7: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
8: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
9: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
10: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
11: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
12: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
13: ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
14: ["Artificing_Tier3_Pactblade_Temptation_4", "Artificing_Tier3_Icon_Virtuous_4", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
15: ["Artificing_Tier3_Pactblade_Temptation_4", "Artificing_Tier3_Icon_Virtuous_4", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
16: ["Artificing_Tier3_Pactblade_Temptation_4", "Artificing_Tier3_Icon_Virtuous_4", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
17: ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
18: ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
19: ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
20: ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
21 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
22 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
23 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
24 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
25 :["Artificing_Tier2_Refine_Basic"],
},
};
definedTask["Weaponsmithing_Axe"] = {
taskListName: "Weaponsmithing_Axe",
taskName: "Weaponsmithing",
level: {
0: ["Weaponsmithing_Tier0_Intro"],
1: ["Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
2: ["Weaponsmithing_Tier1_Greataxe_1", "Weaponsmithing_Tier1_Battleaxe_1", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
3: ["Weaponsmithing_Tier1_Greataxe_1", "Weaponsmithing_Tier1_Battleaxe_1", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
4: ["Weaponsmithing_Tier1_Greataxe_1", "Weaponsmithing_Tier1_Battleaxe_1", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
5: ["Weaponsmithing_Tier1_Greataxe_2", "Weaponsmithing_Tier1_Battleaxe_2", "Weaponsmithing_Tier1_Gather_Basic"],
6: ["Weaponsmithing_Tier1_Greataxe_2", "Weaponsmithing_Tier1_Battleaxe_2", "Weaponsmithing_Tier1_Gather_Basic"],
7: ["Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
8: ["Weaponsmithing_Tier2_Greataxe_3", "Weaponsmithing_Tier2_Battleaxe_3", "Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
9: ["Weaponsmithing_Tier2_Greataxe_3", "Weaponsmithing_Tier2_Battleaxe_3", "Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
10: ["Weaponsmithing_Tier2_Greataxe_3", "Weaponsmithing_Tier2_Battleaxe_3", "Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
11: ["Weaponsmithing_Tier2_Greataxe_3", "Weaponsmithing_Tier2_Battleaxe_3", "Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
12: ["Weaponsmithing_Tier2_Greataxe_3", "Weaponsmithing_Tier2_Battleaxe_3", "Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
13: ["Weaponsmithing_Tier2_Greataxe_3", "Weaponsmithing_Tier2_Battleaxe_3", "Weaponsmithing_Tier2_Refine_Basic", "Weaponsmithing_Tier2_Gather_Basic"],
// (we'll make 160 sets (of 2 each) "refined" resources in 133.33 hours (5.55 days) (with no speed bonuses)
14: ["Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
15: ["Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
16: ["Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
17: ["Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
// If we have Fundamental Fire or Ice, we get a bit more exp by using it (and both options are not dependancies of anything else, unlike lower levels)
18: ["Weaponsmithing_Tier3_Greataxe_Set_2", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_Set_2", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
19: ["Weaponsmithing_Tier3_Greataxe_Set_2", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_Set_2", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
20 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
21 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
22 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
23 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
24 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic", "Weaponsmithing_Tier3_Gather_Basic"],
25 :["Weaponsmithing_Tier3_Gather_Basic_Mass"],
},
};
definedTask["Weaponsmithing_Bow"] = {
taskListName: "Weaponsmithing_Bow",
taskName: "Weaponsmithing",
level: {
1: ["Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
2: ["Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
3: ["Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
4: ["Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1"],
5: ["Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
6: ["Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier1_Gather_Basic"],
7: ["Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
8: ["Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
9: ["Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
10: ["Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
11: ["Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
12: ["Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier1_Longbow_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
14: ["Weaponsmithing_Tier3_Longbow_4", "Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
15: ["Weaponsmithing_Tier3_Longbow_4", "Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
16: ["Weaponsmithing_Tier3_Longbow_4", "Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
// If we have Desert Rose, we get a bit more exp by using it (and both options are not dependancies of anything else, unlike lower levels)
17: ["Weaponsmithing_Tier3_Longbow_Set_2", "Weaponsmithing_Tier3_Longbow_4", "Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
18: ["Weaponsmithing_Tier3_Longbow_Set_2", "Weaponsmithing_Tier3_Longbow_4", "Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
19: ["Weaponsmithing_Tier3_Longbow_Set_2", "Weaponsmithing_Tier3_Longbow_4", "Weaponsmithing_Tier2_Longbow_3", "Weaponsmithing_Tier1_Longbow_2", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
20 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
21 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
22 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
23 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
24 :["Weaponsmithing_Tier3_Greatsword_Set_3", "Weaponsmithing_Tier3_Longsword_Set_3", "Weaponsmithing_Tier3_Dagger_Set_3", "Weaponsmithing_Tier3_Blades_Set_3", "Weaponsmithing_Tier3_Longbow_Set_3", "Weaponsmithing_Tier3_Greataxe_4", "Weaponsmithing_Tier3_Battleaxe_4", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
25 :["Weaponsmithing_Tier3_Gather_Basic_Mass"],
},
};
definedTask["Weaponsmithing_Dagger"] = {
taskListName: "Weaponsmithing_Dagger",
taskName: "Weaponsmithing",
level: {
0: ["Weaponsmithing_Tier0_Intro"],
1: ["Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
2: ["Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
3: ["Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
4: ["Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
5: ["Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
6: ["Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
7: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
8: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
9: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
10: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
11: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
12: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
13: ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
14: ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
15: ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
16: ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
// If we have Fundamental Ice, we get a bit more exp by using it (and both options are not dependancies of anything else, unlike lower levels)
17: ["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
18: ["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
19: ["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
20 :["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
21 :["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
22 :["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
23 :["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
24 :["Weaponsmithing_Tier3_Dagger_Set_2", "Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
25 :["Weaponsmithing_Tier3_Gather_Basic_Mass"],
},
};
definedTask["Weaponsmithing_Greatsword"] = {
taskListName: "Weaponsmithing_Greatsword",
taskName: "Weaponsmithing",
level: {
0: ["Weaponsmithing_Tier0_Intro"],
1: ["Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
2: ["Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
3: ["Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
4: ["Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
5: ["Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
6: ["Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
7: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
8: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
9: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
10: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
11: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
12: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
13: ["Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
14: ["Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
15: ["Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
16: ["Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
// If we have Fundamental Ice, we get a bit more exp by using it (and both options are not dependancies of anything else, unlike lower levels)
17: ["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
18: ["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
19: ["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
20 :["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
21 :["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
22 :["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
23 :["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
24 :["Weaponsmithing_Tier3_Greatsword_Set_2", "Weaponsmithing_Tier3_Greatsword_4", "Weaponsmithing_Tier2_Greatsword_3", "Weaponsmithing_Tier1_Greatsword_2", "Weaponsmithing_Tier1_Greatsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
25 :["Weaponsmithing_Tier3_Gather_Basic_Mass"],
},
};
definedTask["Weaponsmithing_Longsword"] = {
taskListName: "Weaponsmithing_Longsword",
taskName: "Weaponsmithing",
level: {
0: ["Weaponsmithing_Tier0_Intro"],
1: ["Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
2: ["Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
3: ["Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
4: ["Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
5: ["Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
6: ["Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier1_Gather_Basic"],
7: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
8: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
9: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
10: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
11: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
12: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
13: ["Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier2_Refine_Basic_Mass", "Weaponsmithing_Tier2_Gather_Basic_Mass"],
14: ["Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
15: ["Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
16: ["Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
// If we have Fundamental Ice, we get a bit more exp by using it (and both options are not dependancies of anything else, unlike lower levels)
17: ["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
18: ["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
19: ["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
20 :["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
21 :["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
22 :["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
23 :["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
24 :["Weaponsmithing_Tier3_Longsword_Set_2", "Weaponsmithing_Tier3_Longsword_4", "Weaponsmithing_Tier2_Longsword_3", "Weaponsmithing_Tier1_Longsword_2", "Weaponsmithing_Tier1_Longsword_1", "Weaponsmithing_Tier3_Refine_Basic_Mass", "Weaponsmithing_Tier3_Gather_Basic_Mass"],
25 :["Weaponsmithing_Tier3_Gather_Basic_Mass"],
},
};
definedTask["Alchemy"] = {
taskListName: "Alchemy",
taskName: "Alchemy",
level: {
0: ["Alchemy_Tier0_Intro_1"],
1: ["Alchemy_Tier1_Experiment_Rank2", "Alchemy_Tier1_Experimentation_Rank1"],
2: ["Alchemy_Tier1_Experiment_Rank3", "Alchemy_Tier1_Experimentation_Rank2"],
3: ["Alchemy_Tier1_Experiment_Rank4", "Alchemy_Tier1_Experimentation_Rank3"],
4: ["Alchemy_Tier1_Experiment_Rank5", "Alchemy_Tier1_Experimentation_Rank4"],
5: ["Alchemy_Tier1_Experiment_Rank6", "Alchemy_Tier1_Experimentation_Rank5"],
6: ["Alchemy_Tier1_Experiment_Rank7", "Alchemy_Tier1_Experimentation_Rank6"],
7: ["Alchemy_Tier2_Experiment_Rank08", "Alchemy_Tier2_Experimentation_Rank07"],
8: ["Alchemy_Tier2_Experiment_Rank09", "Alchemy_Tier2_Experimentation_Rank08"],
9: ["Alchemy_Tier2_Experiment_Rank10", "Alchemy_Tier2_Experimentation_Rank09"],
10: ["Alchemy_Tier2_Experiment_Rank11", "Alchemy_Tier2_Experimentation_Rank10"],
11: ["Alchemy_Tier2_Experiment_Rank12", "Alchemy_Tier2_Experimentation_Rank11"],
12: ["Alchemy_Tier2_Experiment_Rank13", "Alchemy_Tier2_Experimentation_Rank12"],
13: ["Alchemy_Tier2_Experiment_Rank14", "Alchemy_Tier2_Experimentation_Rank13"],
14: ["Alchemy_Tier3_Experiment_Rank15", "Alchemy_Tier3_Experimentation_Rank14"],
15: ["Alchemy_Tier3_Experiment_Rank16", "Alchemy_Tier3_Experimentation_Rank15"],
16: ["Alchemy_Tier3_Experiment_Rank17", "Alchemy_Tier3_Experimentation_Rank16"],
17: ["Alchemy_Tier3_Experiment_Rank18", "Alchemy_Tier3_Experimentation_Rank17"],
18: ["Alchemy_Tier3_Experiment_Rank19", "Alchemy_Tier3_Experimentation_Rank18"],
19: ["Alchemy_Tier3_Experiment_Rank20", "Alchemy_Tier3_Experimentation_Rank19"],
//20: ["Alchemy_Tier3_Protection_Potion_Major", "Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier3_Gather_Components"], //disable for mod6
20 : ["Alchemy_Tier3_Experiment_Rank21", "Alchemy_Tier3_Experimentation_Rank20"], // Enable for mod6
21 : ["Alchemy_Tier4_Experiment_Rank22", "Alchemy_Tier4_Experimentation_Rank21"],
22 : ["Alchemy_Tier4_Experiment_Rank23", "Alchemy_Tier4_Experimentation_Rank22"], //,"Alchemy_Tier4_Aquaregia_2"],
23 : ["Alchemy_Tier4_Experiment_Rank24", "Alchemy_Tier4_Experimentation_Rank23"],
24 : ["Alchemy_Tier4_Experiment_Rank25", "Alchemy_Tier4_Experimentation_Rank24"],
25 : ["Alchemy_Tier4_Experimentation_Rank25","Alchemy_Tier4_Create_Elemental_Unified","Alchemy_Tier4_Create_Elemental_Aggregate","Alchemy_Tier4_Aquaregia_2"], //"Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic","Alchemy_Tier4_Potency_Potion_Superior", "Alchemy_Tier4_Protection_Potion_Superior"],
},
};
// Load Settings
var settingnames = [
{name: 'paused', title: 'Pause Script', def: false, type: 'checkbox', tooltip: 'Disable All Automation'},
{name: 'debug', title: 'Enable Debug', def: true, type: 'checkbox', tooltip: 'Enable all debug output to console', onsave: function (newValue, oldValue) {
console = newValue ? unsafeWindow.console || fouxConsole : fouxConsole;
}},
{name: 'optionals', title: 'Fill Optional Assets', def: true, type: 'checkbox', tooltip: 'Enable to include selecting the optional assets of tasks'},
{name: 'autopurchase', title: 'Auto Purchase Resources', def: true, type: 'checkbox', tooltip: 'Automatically purchase required resources from gateway shop (100 at a time)'},
{name: 'trainassets', title: 'Train Assets', def: true, type: 'checkbox', tooltip: 'Enable training/upgrading of asset worker resources'},
//{name: 'refinead', title: 'Refine AD', def: true, type: 'checkbox', tooltip: 'Enable refining of AD on character switch'},
{name: 'openrewards', title: 'Open Reward Chests', def: false, type: 'checkbox', tooltip: 'Enable opeing of leadership chests on character switch'}, //MAC-NW
{name: 'dailySCA', title: 'Daily SCA roll', def: true, type: 'checkbox', tooltip: 'Runs daily SCA rolls when no task is near to finish'}, //MAC-NW
{name: 'autoreload', title: 'Auto Reload', def: true, type: 'checkbox', tooltip: 'Enabling this will reload the gateway periodically. (Ensure Auto Login is enabled)'},
{name: 'autovendor_junk', title: 'Vendor junk..', def: false, type: 'checkbox', tooltip: 'Vendor all (currently) winterfest fireworks+lanterns'}, //MAC-NW
{name: 'autovendor_kits_altars_limit', title: 'Maintain Altar Node Kit Stacks', def: false, type: 'checkbox', tooltip: 'Limit skill kits stacks to 50/Altars80, vendor kits unusable by class, remove all if player has one bag or full bags'}, // edited by RottenMind
{name: 'autovendor_kits_altars_all', title: 'Vendor All Altar Node Kit Stacks', def: false, type: 'checkbox', tooltip: 'Sell ALL skill kits Altars.'}, // RottenMind
{name: 'autovendor_profresults', title: 'Vendor Prof Crafted & Gathered Items', def: true, type: 'checkbox', tooltip: 'Vendor off Tier 1 to 5 items produced and reused for leveling crafting & Gathered professions items.'},
{name: 'autovendor_pots1', title: 'Vendor minor potions (lvl 1)', def: false, type: 'checkbox', tooltip: 'Vendor all minor potions (lvl 1) found in player bags'}, //MAC-NW
{name: 'autovendor_pots2', title: 'Vendor lesser potions (lvl 15)', def: false, type: 'checkbox', tooltip: 'Vendor all lesser potions (lvl 15) found in player bags'}, //MAC-NW
{name: 'autovendor_pots3', title: 'Vendor potions (lvl 30)', def: false, type: 'checkbox', tooltip: 'Vendor all potions (lvl 30) found in player bags'}, //MAC-NW
{name: 'autovendor_pots4', title: 'Vendor greater potions (lvl 45)', def: false, type: 'checkbox', tooltip: 'Vendor all greater potions (lvl 45) found in player bags'}, //MAC-NW
//{name: 'autovendor_rank1', title: 'Auto Vendor enchants & runes Rank 1', def: false, type: 'checkbox', tooltip: 'Vendor all Rank 1 enchantments & runestones found in player bags'}, //MAC-NW
{name: 'autovendor_rank2', title: 'Vendor enchants & runes Rank 1-2', def: false, type: 'checkbox', tooltip: 'Vendor all Rank 2 enchantments & runestones found in player bags'}, //MAC-NW
{name: 'autovendor_rank3', title: 'Vendor enchants & runes Rank 3', def: false, type: 'checkbox', tooltip: 'Vendor all Rank 3 enchantments & runestones found in player bags'}, // edited by RottenMind
{name: 'level_20_skip', title: 'Auto level 20', def: false, type: 'checkbox', tooltip: 'All level 20 profession slots are skipped NOT Leadership'},
{name: 'purchasePorridge', title: 'Purchase Porridge', def: true, type: 'checkbox', tooltip: 'Purchase Porridge to Advance Leadership Rank'},
{name: 'level_25_skip', title: 'Auto level 25', def: false, type: 'checkbox', tooltip: 'All level 25 profession slots are skipped NOT Leadership, supersedes skip 20'},
{name: 'easy_start', title: 'Automatic Banker', def: false, type: 'checkbox', tooltip: 'Get Banker first character etc. works best after reset, turn off if need other character.', border: true},
{name: 'nw_username', title: 'Neverwinter Username', def: '', type: 'text', tooltip: ''},
{name: 'nw_password', title: 'Neverwinter Password', def: '', type: 'password', tooltip: ''},
// MAC-NW AD Consolidation
{name: 'autoexchange', title: 'Consolidate AD via ZEX', def: false, type: 'checkbox', tooltip: 'Automatically attempt to post, cancel and withdraw AD via ZEX and consolidate to designated character', border: true},
{name: 'bankchar', title: 'Character Name of Banker', def: '', type: 'text', tooltip: 'Enter name of the character to hold account AD'},
{name: 'banktransmin', title: 'Min AD for Transfer', def: '5000', type: 'text', tooltip: 'Enter minimum AD limit for it to be cosidered for transfer off a character'},
{name: 'bankcharmin', title: 'Min Character balance', def: '600', type: 'text', tooltip: 'Enter the amount of AD to always keep available on characters'},
{name: 'banktransrate', title: 'AD per Zen Rate (in zen)', def: '300', type: 'text', tooltip: 'Enter default rate to use for transfering through ZEX'},
{name: 'charcount', title: 'Enter number of characters to use (Save and Apply to update settings form)', def: '1', type: 'text', tooltip: 'Enter number of characters to use (Save and Apply to update settings form)', border: true},
// MAC-NW
];
// Load local settings cache (unsecured)
var settings = {};
for (var i = 0; i < settingnames.length; i++) {
// Ignore label types
if (settingnames[i].type === 'label') {
continue;
}
settings[settingnames[i].name] = GM_getValue(settingnames[i].name, settingnames[i].def);
// call the onsave for the setting if it exists
if (typeof (settingnames[i].onsave) === "function") {
//console.log("Calling 'onsave' for", settingnames[i].name);
settingnames[i].onsave(settings[settingnames[i].name], settings[settingnames[i].name]);
}
}
if (settings["charcount"] < 1) {
settings["charcount"] = 1;
}
if (settings["charcount"] > 99) {
settings["charcount"] = 99;
}
// Profession priority list by order
var tasklist = [
definedTask["Winter Event"],
definedTask["Siege Event"],
definedTask["Black Ice Shaping"],
definedTask["Alchemy"],
definedTask["Weaponsmithing_Axe"],
definedTask["Artificing"],
definedTask["Jewelcrafting"],
definedTask["Mailsmithing"],
definedTask["Platesmithing"],
definedTask["Leatherworking"],
definedTask["Tailoring"],
definedTask["Leadership"],
definedTask["Leadership XP"],
];
var charSettings = [];
for (var i = 0; i < settings["charcount"]; i++) {
charSettings.push({name: 'nw_charname' + i, title: 'Character', def: 'Character ' + (i + 1), type: 'text', tooltip: 'Characters Name,(set first character name to Character 1 for Automatic char.name fill.'});
charSettings.push({name: 'WinterEvent' + i, title: 'WinterEvent', def: '0', type: 'text', tooltip: 'Number of slots to assign to WinterEvent'});
charSettings.push({name: 'Leadership' + i, title: 'Leadership', def: '9', type: 'text', tooltip: 'Number of slots to assign to Leadership'});
charSettings.push({name: 'Event_Siege' + i, title: 'Siege Event', def: '0', type: 'text', tooltip: 'Number of slots to assign to Siege Event'});
charSettings.push({name: 'BlackIce' + i, title: 'Black Ice Shaping', def: '0', type: 'text', tooltip: 'Number of slots to assign to BIS'});
charSettings.push({name: 'Alchemy' + i, title: 'Alchemy', def: '0', type: 'text', tooltip: 'Number of slots to assign to Alchemy'});
charSettings.push({name: 'Weaponsmithing_Axe' + i, title: 'Weaponsmithing/Axes', def: '0', type: 'text', tooltip: 'Number of slots to assign to Weaponsmithing/Axes'});
charSettings.push({name: 'Artificing' + i, title: 'Artificing', def: '0', type: 'text', tooltip: 'Number of slots to assign to Artificing'});
charSettings.push({name: 'Jewelcrafting' + i, title: 'Jewelcrafting', def: '0', type: 'text', tooltip: 'Number of slots to assign to Jewelcrafting'});
charSettings.push({name: 'Mailsmithing' + i, title: 'Mailsmithing', def: '0', type: 'text', tooltip: 'Number of slots to assign to Mailsmithing'});
charSettings.push({name: 'Platesmithing' + i, title: 'Platesmithing', def: '0', type: 'text', tooltip: 'Number of slots to assign to Platesmithing'});
charSettings.push({name: 'Leatherworking' + i, title: 'Leatherworking', def: '0', type: 'text', tooltip: 'Number of slots to assign to Leatherworking'});
charSettings.push({name: 'Tailoring' + i, title: 'Tailoring', def: '0', type: 'text', tooltip: 'Number of slots to assign to Tailoring'});
charSettings.push({name: 'Leadership_XP' + i, title: 'Leadership XP', def: '0', type: 'text', tooltip: 'Number of slots to assign to Leadership focused on XP'});
}
for (var i = 0; i < charSettings.length; i++) {
settings[charSettings[i].name] = GM_getValue(charSettings[i].name, charSettings[i].def);
}
function setTaskSlots() {
// The task list associated with each slot
taskSlots = [];
// The total slots for each profession, across task lists
slotsByProf = {};
for (var i = 0; i < tasklist.length; i++) slotsByProf[tasklist[i].taskName] = 0;
for (var i = 0; i < tasklist.length; i++) {
slotsByProf[tasklist[i].taskName] += parseInt(settings[tasklist[i].taskListName]);
for (var j = 0; j < settings[tasklist[i].taskListName]; j++) {
taskSlots.push(tasklist[i].taskListName);
}
}
}
// Page Settings
var PAGES = Object.freeze({
LOGIN: {name: "Login", path: "div#login"},
GUARD: {name: "Account Guard", path: "div#page-accountguard"},
});
/**
* Uses the page settings to determine which page is currently displayed
*/
function GetCurrentPage() {
for(var __kk in PAGES) {
if (!PAGES.hasOwnProperty(__kk)) continue;
var page = PAGES[__kk];
if ($(page["path"]).filter(":visible").length) {
return page;
}
}
}
/**
* Logs in to gateway
* No client.dataModel exists at this stage
*/
function page_LOGIN() {
//if (!$("form > p.error:visible").length && settings["autologin"]) {
// No previous log in error - attempt to log in
//console.log("Setting username");
$("input#user").val(settings["nw_username"]);
//console.log("Setting password");
$("input#pass").val(settings["nw_password"]);
//console.log("Clicking Login Button");
$("div#login > input").click();
//}
dfdNextRun.resolve(delay.LONG);
}
/**
* Action to perform on account guard page
*/
function page_GUARD() {
// Do nothing on the guard screen
dfdNextRun.resolve(delay.LONG);
}
/**
* Collects rewards for tasks or starts new tasks
* Function is called once per new task and returns true if an action is created
* If no action is started function returns false to switch characters
*/
function processCharacter() {
// Switch to professions page to show task progression
unsafeWindow.location.hash = "#char(" + encodeURI(unsafeWindow.client.getCurrentCharAtName()) + ")/professions";
// Collect rewards for completed tasks and restart
if (unsafeWindow.client.dataModel.model.ent.main.itemassignments.complete) {
unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.forEach(function (entry) {
if (entry.hascompletedetails) {
unsafeWindow.client.professionTaskCollectRewards(entry.uassignmentid);
}
});
dfdNextRun.resolve();
return true;
}
// Check for available slots and start new task
if (unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.filter(function (entry) {
return (!entry.islockedslot && !entry.uassignmentid);
}).length) {
// Go through the professions to assign tasks until specified slots filled
for (var i = 0; i < tasklist.length; i++) {
var prof = tasklist[i]
if (settings[prof.taskListName] > 0) { //MAC-NW
if (failedProf.length > 0 && failedProf.indexOf(prof.taskListName) > -1) {
continue;
}
// Check level
var level = unsafeWindow.client.dataModel.model.ent.main.itemassignmentcategories.categories.filter(function (entry) {
return entry.name == prof.taskName; //
})[0].currentrank;
var list = prof.level[level];
var tmpLevel = level;
while (typeof list === "undefined" && tmpLevel > 0) {
list = prof.level[--tmpLevel];
}
if (typeof list === "undefined") {
continue;
}
var currentTasksByTaskList = unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.filter(function (entry) {
// return entry.category == tasklist[i].taskName && list.indexOf(entry.hdef.match(/^@ItemAssignmentDef\[([^\]]*)\]$/)[1]) > -1;
return entry.category === prof.taskName && taskSlots[entry.slotindex] === prof.taskListName;
});
var currentTasksByProf = unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.filter(function (entry) {
return entry.category === prof.taskName;
});
var currentOpenSlots = unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.filter(function (entry) {
return entry.category === "None";
});
if (taskSlots[currentOpenSlots[0].slotindex] === prof.taskListName ||
(currentTasksByTaskList.length < settings[prof.taskListName] &&
currentTasksByProf.length < slotsByProf[prof.taskName])) {
unsafeWindow.client.professionFetchTaskList('craft_' + tasklist[i].taskName);
window.setTimeout(function () {
// todo: How do we propegate the return value of this up the stack?
createNextTask(prof, level, list, 0);
}, delay.SHORT);
return true;
}
} //MAC-NW
}
//console.log("All task counts assigned");
}
else {
//console.log("No available task slots");
}
// TODO: Add code to get next task finish time
chartimers[charcurrent] = getNextFinishedTask();
// Add diamond count
chardiamonds[charcurrent] = unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds;
//console.log(settings["nw_charname" + charcurrent] + "'s", "Astral Diamonds:", chardiamonds[charcurrent]);
return false;
}
/**
* Switch to a character's swordcoast adventures and collect the daily reward
*/
function processSwordCoastDailies(_charStartIndex, _rollStartIndex) {
var _accountName,_charIndex,_fullCharName,_rollIndex, _sca_char,_has_nextTask,_dungeon,_date,_time_reserve,_hasLoginDaily,_hasRollDaily,_hasTutorial_active, _scaHashMatch, _isLastChar;
_accountName = unsafeWindow.client.dataModel.model.loginInfo.publicaccountname;
_charIndex = (!_charStartIndex || parseInt(_charStartIndex) > (charSettings.length + 1) || parseInt(_charStartIndex) < 0) ? 0 : parseInt(_charStartIndex);
_fullCharName = settings["nw_charname" + _charIndex] + '@' + _accountName;
_rollIndex = (!_rollStartIndex || parseInt(_rollStartIndex) >(charSettings.lenght + 1) || parseInt(_rollStartIndex) < 0) ? 0 : parseInt(_rollStartIndex);
_sca_char = settings["nw_charname" + _charIndex];
_has_nextTask = parseInt(chardate.getTime());
_dungeon = "tier-3";
_date = new Date();
_time_reserve = parseInt(_date.getTime());
_hasLoginDaily = 0;
_hasRollDaily = 1; // 1 = no rolled, 0 = rolled
_isLastChar = false;
_hasTutorial_active = "undefined";
_scaHashMatch = /\/adventures$/;
/*if (!settings["paused"])
PauseSettings("pause");*/
// Switch to professions page to show task progression
if (!_scaHashMatch.test(unsafeWindow.location.hash)) {
return;
} else if (unsafeWindow.location.hash != "#char(" + encodeURI(_fullCharName) + ")/adventures") {
unsafeWindow.location.hash = "#char(" + encodeURI(_fullCharName) + ")/adventures";
}
if (settings["nw_charname" + (_charIndex + 1)] === undefined)
_isLastChar = true;
WaitForState("").done(function () {
try {
_hasLoginDaily = client.dataModel.model.gatewaygamedata.dailies.left.logins;
} catch (e) {
// TODO: Use callback function
window.setTimeout(function () {
processSwordCoastDailies(_charIndex, _rollIndex);
}, delay.SHORT);
return;
}
// check datamodel and disable Tutorial, active = "undefined", disabled = 1
try {
_hasTutorial_active = unsafeWindow.client.dataModel.model.gatewaygamedata.tutorial.all;
if (typeof _hasTutorial_active == "undefined") {
client.toggleHelp();
}
}catch(e) {}
_hasRollDaily = client.dataModel.model.gatewaygamedata.dailies.roll;
//console.log("Checking SCA Dialy for", _fullCharName, "...",_charIndex, _rollIndex, chardelay, _hasRollDaily, _has_nextTask);
if(_isLastChar) {
sca_infinite(_sca_char, _has_nextTask, _time_reserve, _dungeon);
}
if (_hasRollDaily !== 0) {
// Do SCA daily dice roll if the button comes up
WaitForState(".daily-dice-intro").done(function () {
$(".daily-dice-intro button").trigger('click');
WaitForState(".daily-awards-button").done(function () {
window.setTimeout(function() {
$(".daily-awards-button button").trigger('click');
},delay.SHORT);
});
});
_rollIndex = -1;
}
if (_rollIndex === _charIndex && _isLastChar) {GM_setValue("dailyswordcoast", 4); GM_getValue("dailyswordcoast", 0);} //console.log(" all rolls done", _isLastChar, _rollIndex, _charIndex, _hasRollDaily, _sca_char);}
else if (_rollIndex !== _charIndex && _isLastChar){GM_setValue("dailyswordcoast", 0); GM_getValue("dailyswordcoast", 0);} //console.log("some rolls are failed", _isLastChar, _rollIndex, _charIndex, _hasRollDaily);
//if (scarun){}
// If Dice roll dialog is non existant
WaitForNotState(".modal-window.daily-dice").done(function () {
if (_isLastChar) {
window.setTimeout(function () {
console.log("daily done");// PauseSettings("unpause");
}, 3000);
} else {
window.setTimeout(function () {
processSwordCoastDailies(_charIndex + 1, _rollIndex + 1);
}, 3000);
}
});
});
}
/**
* Finds the task finishing next & returns the date or NULL otherwise
*
* @return {Date} / {null}
*/
function getNextFinishedTask() {
var tmpNext, next = null;
unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.forEach(function (entry) {
if (entry.uassignmentid) {
tmpNext = new Date(entry.ufinishdate);
if (!next || tmpNext < next) {
next = tmpNext;
}
}
});
if (next) {
//console.log("Next finished task at " + next.toLocaleString());
} else {
//console.log("No next finishing date found!!");
}
return next;
}
/**
* Recursive approach to finding the next task to assign to an open slot.
*
* @param {Array} prof The tasklist for the profession being used
* @param {int} level The level of the list of tasks (either max level of character's profession, or max defined in the lists above)
* @param {Array} list The possible list of tasks to start
* @param {int} i The current task number being attempted
*/
function createNextTask(prof, level, list, i) {
// TODO: Use callback function
if (!unsafeWindow.client.dataModel.model.craftinglist || unsafeWindow.client.dataModel.model.craftinglist === null || !unsafeWindow.client.dataModel.model.craftinglist['craft_' + prof.taskName] || unsafeWindow.client.dataModel.model.craftinglist['craft_' + prof.taskName] === null) {
//console.log('Task list not loaded for:', prof.taskName);
window.setTimeout(function () {
// todo: How do we propegate the return value of this up the stack?
createNextTask(prof, level, list, i);
}, delay.SHORT);
return false;
}
/*// Check level
var level = unsafeWindow.client.dataModel.model.ent.main.itemassignmentcategories.categories.filter(function (entry) {
return entry.name == prof.taskName;
})[0].currentrank;
var list = prof.level[level];
if (list.length <= i) {
//console.log("Nothing Found");
switchChar();*/
if (list.length <= i) {
//console.log("No more possible tasks at this level to try to start", i);
//console.log("task list: ", list);
failedProf.push(prof.taskListName);
dfdNextRun.resolve(delay.SHORT);
return false;
}
//console.log(prof.taskName, "is level", level);
//console.log("createNextTask", list.length, i);
var taskName = list[i];
//console.log("Searching for task:", taskName);
// Search for task to start
var task = searchForTask(taskName, prof.taskName, level);
/** TODO: Use this code once below can be replaced properly
if (task === null) {
//console.log("Skipping task selection to purchase resources");
dfdNextRun.resolve();
}
else if (task) {
startTask(task);
dfdNextRun.resolve();
}
else {
//console.log('Finding next task');
createNextTask(prof, i+1);
}
**/
// Finish createNextTask function
if (task === null) {
//console.log("Skipping task selection to purchase resources");
dfdNextRun.resolve();
return true;
}
if (task) {
startedTask["currTaskName"] = task.def.name;
task = '/professions-tasks/' + prof.taskName + '/' + task.def.name;
//console.log('Task Found');
unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')' + task);
WaitForState("div.page-professions-taskdetails").done(function () {
// Click all buttons and select an item to use in the slot
var def = $.Deferred();
var buttonList = $('.taskdetails-assets:eq(1)').find("button");
if (buttonList.length && settings["optionals"]) {
SelectItemFor(buttonList, 0, def, prof);
}
else {
def.resolve();
}
def.done(function () {
// All items are populated
//console.log("Items Populated");
// Click the Start Task Button
//Get the start task button if it is enabled
var enabledButton = $(".footer-professions-taskdetails .button.epic:not('.disabled') button");
if (enabledButton.length) {
//console.log("Clicking Start Task Button");
enabledButton.trigger('click');
WaitForState("").done(function () {
// Done
dfdNextRun.resolve(delay.SHORT);
});
if (startedTask["lastTaskChar"] == startedTask["currTaskChar"] && startedTask["lastTaskName"] == startedTask["currTaskName"]) {
startedTask["lastTaskCount"]++;
//console.log("Task " + startedTask["lastTaskName"] + " started " + startedTask["lastTaskCount"] + " time");
} else {
startedTask["lastTaskChar"] = startedTask["currTaskChar"];
startedTask["lastTaskName"] = startedTask["currTaskName"];
startedTask["lastTaskCount"] = 1;
}
if (startedTask["lastTaskCount"] >= 15) {
//console.log("LOOP FAILURE x [", Epic_button_error() , "] times, skip to next task!!!");
$(".footer-professions-taskdetails .button button.resetWindow").trigger('click');
WaitForState("").done(function () {
createNextTask(prof, level, list, i + 1); // try create forced next task to resolve gateway bug
});
}
return true;
}
else { // Button not enabled, something required was probably missing
// Go back
$(".footer-professions-taskdetails .button button.resetWindow").trigger('click');
WaitForState("").done(function () {
// continue with the next one
//console.log('Finding next task');
// todo: How do we propegate the return value of this up the stack?
createNextTask(prof, level, list, i + 1);
});
}
});
});
}
else {
//console.log('Finding next task');
return createNextTask(prof, level, list, i + 1)
}
}
/**
* Checks task being started for requirements and initiates beginning task if found
*
* @param {string} taskname The name of the task being started
* @param {string} profname The name of the profession being used
* @param {Deferred} dfd Deferred object to process on return
*/
function searchForTask(taskname, profname, professionLevel) {
// Return first object that matches exact craft name
// skip task if proff.level20
if (settings['level_20_skip'] && profname != 'Leadership' && professionLevel > 19) {
//console.log(profname, "is level", professionLevel,"skipping.");
return false;
}if (settings['level_25_skip'] && profname != 'Leadership' && professionLevel > 24) {
//console.log(profname, "is level", professionLevel,"skipping.");
return false;
}
// edited by WloBeb - start Patrol the Mines task only if char has less than 7 Mining Claims if XP prifile limit 100 claims
var resource_limit = 10;
if (settings['Leadership_XP'] > 0) {
var resource_limit = 1000;}
if (taskname == "Leadership_Tier3_13_Patrol" && countResource("Crafting_Resource_Mining_Claim") >= resource_limit ) {
//console.log("Too many Mining Claims: skiping");
return false;
}
if (taskname == "Leadership_Tier4_21_Protectmagic" && countResource("Crafting_Resource_Clues_Bandit_Hq") >= resource_limit ) {
//console.log("Too many Clues: skiping");
return false;
}
var thisTask = unsafeWindow.client.dataModel.model.craftinglist['craft_' + profname].entries.filter(function (entry) {
return entry.def && entry.def.name == taskname;
})[0];
// If no task is returned we either have three of this task already, the task is a rare that doesn't exist currently, or we have the name wrong in tasklist
if (!thisTask) {
//console.log('Could not find task for:', taskname);
return false;
}
// start task if requirements are met
try {
if (!thisTask.failedrequirementsreasons.length) {
return thisTask;
}
} catch (e) {
Array_undefine_error();
unsafeWindow.location.href = current_Gateway;
}
// Too high level
if (thisTask.failslevelrequirements) {
//console.log("Task level is too high:", taskname);
return false;
}
var searchItem = null;
var searchAsset = false;
// Check for and buy missing armor & weapon leadership assets
if (thisTask.failsresourcesrequirements && profname == "Leadership" && settings["autopurchase"]) {
var failedAssets = thisTask.required.filter(function (entry) {
return !entry.fillsrequirements;
});
var failedArmor = failedAssets.filter(function (entry) {
return entry.categories.indexOf("Armor") >= 0;
});
var failedWeapon = failedAssets.filter(function (entry) {
return entry.categories.indexOf("Weapon") >= 0;
});
if (failedArmor.length || failedWeapon.length) {
var _buyResult = false;
var _charGold = unsafeWindow.client.dataModel.model.ent.main.currencies.gold;
var _charSilver = unsafeWindow.client.dataModel.model.ent.main.currencies.silver;
var _charCopper = unsafeWindow.client.dataModel.model.ent.main.currencies.copper;
var _charCopperTotal = _charCopper + (_charSilver*100) + (_charGold*10000);
// Buy Leadership Armor Asset
if (failedArmor.length && _charCopperTotal >= 10000) {
//console.log("Buying leadership asset:", failedArmor[0].icon);
_buyResult = buyTaskAsset(18);
unsafeWindow.client.professionFetchTaskList("craft_Leadership");
}
// Buy Leadership Infantry Weapon Asset
else if (failedWeapon.length && _charCopperTotal >= 5000) {
//console.log("Buying leadership asset:", failedWeapon[0].icon);
_buyResult = buyTaskAsset(4);
unsafeWindow.client.professionFetchTaskList("craft_Leadership");
}
if (_buyResult === false)
return false;
else
return null;
}
}
// Missing assets or ingredients
if (thisTask.failsresourcesrequirements) {
var failedAssets = thisTask.required.filter(function (entry) {
return !entry.fillsrequirements;
});
// Missing required assets
if (failedAssets.length) {
var failedCrafter = failedAssets.filter(function (entry) {
return entry.icon.indexOf("Follower") >= 0;
});
// Train Assets
if (failedCrafter.length && settings["trainassets"]) {
if (profname == 'Leadership'&& professionLevel < 3){
//console.log(profname, "level is [" + professionLevel + "], cant train workers.");
return false;
} else {
//console.log("Found required asset:", failedCrafter[0].icon);
searchItem = failedCrafter[0].icon;
searchAsset = true;
}
} else {
// TODO: Automatically purchase item assets from shop
//console.log("Not enough assets for task:", taskname);
return false;
}
}
// Check for craftable ingredients items and purchasable profession resources (from vendor)
else {
var failedResources = thisTask.consumables.filter(function (entry) {
return entry.required && !entry.fillsrequirements;
});
// Check first required ingredient only
// If it fails to buy or craft task cannot be completed anyway
// If it succeeds script will search for tasks anew
var itemName = failedResources[0].hdef.match(/\[(\w+)\]/)[1];
// Buy purchasable resources if auto-purchase setting is enabled
if (settings["autopurchase"] && itemName.match(/^Crafting_Resource_(Charcoal|Rocksalt|Spool_Thread|Porridge|Solvent|Brimstone|Coal|Moonseasalt|Quicksilver|Spool_Threadsilk)$/)) {
// returns null if successful (task will try again) and false if unsuccessful (task will be skipped)
return buyResource(itemName);
}
// Matched profession auto-purchase item found but auto-purchase is not enabled
else if (!settings["autopurchase"] && itemName.match(/^Crafting_Resource_(Charcoal|Rocksalt|Spool_Thread|Porridge|Solvent|Brimstone|Coal|Moonseasalt|Quicksilver|Spool_Threadsilk)$/)) {
//console.log("Purchasable resource required:",itemName,"for task:", taskname,". Recommend enabling Auto Purchase Resources.");
return false;
}
// craftable ingredient set to search for
else {
//console.log("Found required ingredient:", itemName);
searchItem = itemName;
}
}
}
// either no craftable items/assets found or other task requirements are not met
// Skip crafting ingredient tasks for Leadership
if (searchItem === null || !searchItem.length || (profname == 'Leadership' && !searchAsset && !searchItem.match(/Crafting_Asset_Craftsman/))) {
//console.log("Failed to resolve item requirements for task:", taskname);
return false;
}
// Generate list of available tasks to search ingredients/assets from
//console.log("Searching ingredient tasks for:", profname);
var taskList = unsafeWindow.client.dataModel.model.craftinglist['craft_' + profname].entries.filter(function (entry) {
// remove header lines first to avoid null def
if (entry.isheader) {
return false;
}
// Too high level
if (entry.failslevelrequirements) {
return false;
}
// Rewards do not contain item we want to make
if (searchAsset) {
if (entry.def.icon != searchItem || !entry.def.name.match(/Recruit/) || entry.def.requiredrank > 14) {
return false;
}
}
else {
if (!(entry.rewards.some(function (itm) {
try {
return itm.hdef.match(/\[(\w+)\]/)[1] == searchItem;
} catch (e) {
}
}))) {
return false;
}
}
// Skip Mass/Trading/looping Transmute -tasks
if (entry.def.name.match(/(_Mass|_Transmute_|_Create_|(_Gather|_Refine)_Special)/)) {
return false;
}
return true;
});
if (!taskList.length) {
//console.log("No ingredient tasks found for:", taskname, searchItem);
return false;
}
// Use more efficient Empowered task for Aqua Vitae/ Aqua Regia if available.
if (searchItem == "Crafting_Resource_Aquavitae" && taskList.length > 1) {
taskList.shift();
}
if (searchItem == "Crafting_Resource_Aquaregia" && taskList.length > 1) {
taskList.shift();
}
// Should really only be one result now but lets iterate through anyway.
for (var i = 0; i < taskList.length; i++) {
//console.log("Attempting search for ingredient task:", taskList[i].def.name);
var task = searchForTask(taskList[i].def.name, profname, professionLevel);
if (task === null || task) {
return task;
}
}
return false;
}
/** --------- MAC-NW : Unused old function
* Fills resource slots and begins a profession task
*
* @param {string} taskDetail The craftindetail object for the task to be started
function startTask(taskDetail) {
return;
unsafeWindow.client.professionFetchTaskDetail(taskDetail.def.name);
//client.dataModel.addDefaultResources();
client.professionStartAssignment(taskDetail.def.name);
}*/
/**
* Selects the highest level asset for the i'th button in the list. Uses an iterative approach
* in order to apply a sufficient delay after the asset is assigned
*
* @param {Array} The list of buttons to use to click and assign assets for
* @param {int} i The current iteration number. Will select assets for the i'th button
* @param {Deferred} jQuery Deferred object to resolve when all of the assets have been assigned
*/
function SelectItemFor(buttonListIn, i, def, prof) {
buttonListIn[i].click();
WaitForState("").done(function () {
var $assets = $("div.modal-item-list a").has("img[src*='_Resource_'],img[src*='_Assets_'],img[src*='_Tools_'],img[src*='_Tool_'],img[src*='_Jewelersloupe_'],img[src*='_Bezelpusher_']"); //edited by RottenMind
var $persons = $("div.modal-item-list a").has("img[src*='_Follower_']");
var quality = [".Special", ".Gold", ".Silver", ".Bronze"];
var ic, $it;
var clicked = false;
// Try to avoid using up higher rank assets needlessly
if (prof.taskName === "Leadership") {
var mercenarys = $('div.modal-item-list a.Bronze img[src*="Crafting_Follower_Leader_Generic_T1_01"]').parent().parent();
var guards = $('div.modal-item-list a.Bronze img[src*="Crafting_Follower_Leader_Guard_T2_01"]').parent().parent();
var footmen = $('div.modal-item-list a.Bronze img[src*="Crafting_Follower_Leader_Private_T2_01"]').parent().parent();
if (mercenarys.length) {
clicked = true;
mercenarys[0].click();
}
else if (guards.length) {
clicked = true;
guards[0].click();
}
else if (footmen.length) {
clicked = true;
footmen[0].click();
}
}
// check resources & assets for best quality, in descending order
for (ic in quality) {
$it = $assets.filter(quality[ic]);
if ($it.length) {
$it[0].click();
clicked = true;
break;
}
}
// if no asset was selected, check for persons for best speed, in descending order
if (!clicked) {
for (ic in quality) {
$it = $persons.filter(quality[ic]);
if ($it.length) {
$it[0].click();
clicked = true;
break;
}
}
}
// if nothing was found at all, return immediately (skip other optional slots)
if (!clicked) {
$("button.close-button").trigger('click');
//console.log("Nothing more to click..");
WaitForState("").done(function () {
// Let main loop continue
def.resolve();
});
}
//console.log("Clicked item");
WaitForState("").done(function () {
// Get the new set of select buttons created since the other ones are removed when the asset loads
var buttonList = $('.taskdetails-assets:eq(1)').find("button");
if (i < buttonList.length - 1) {
SelectItemFor(buttonList, i + 1, def, prof);
}
else {
// Let main loop continue
def.resolve();
}
});
});
}
/* ################# original
function SelectItemFor(buttonListIn, i, def, prof) {
buttonListIn[i].click();
WaitForState("").done(function() {
var specialItems = $("div.modal-item-list a.Special");
var goldItems = $("div.modal-item-list a.Gold");
var silverItems = $("div.modal-item-list a.Silver");
var bronzeItems = $("div.modal-item-list a.Bronze");
var clicked = false;
// Try to avoid using up higher rank assets needlessly
if (prof.taskName === "Leadership") {
var mercenarys = $("div.modal-item-list a.Bronze:contains('Mercenary')");
var guards = $("div.modal-item-list a.Bronze:contains('Guard')");
var footmen = $("div.modal-item-list a.Bronze:contains('Footman')");
if (mercenarys.length) { clicked = true; mercenarys[0].click(); }
else if (guards.length) { clicked = true; guards[0].click(); }
else if (footmen.length) { clicked = true; footmen[0].click(); }
}
// TODO: add remaining professions in the same way for bronze tier assets.
if (!clicked) {
// Click the highest slot
if (specialItems.length) { specialItems[0].click(); }
else if (goldItems.length) { goldItems[0].click(); }
else if (silverItems.length) { silverItems[0].click(); }
else if (bronzeItems.length) { bronzeItems[0].click(); }
else { $("button.close-button").click(); }
}
//console.log("Clicked item");
WaitForState("").done(function() {
// Get the new set of select buttons created since the other ones are removed when the asset loads
var buttonList = $("h3:contains('Optional Assets:')").closest("div").find("button");
if (i < buttonList.length - 1) {
SelectItemFor(buttonList, i+1, def, prof);
}
else {
// Let main loop continue
def.resolve();
}
});
});
}
*/
/**
* Will buy a given purchasable resource
*
* @param {String} item The data-tt-item id of the Resource to purchase
*/
function buyResource(item) {
if (!settings['purchasePorridge'] && item == "Crafting_Resource_Porridge") {
return false;
}
var _resourceID = {
Crafting_Resource_Charcoal: 0,
Crafting_Resource_Rocksalt: 1,
Crafting_Resource_Spool_Thread: 2,
Crafting_Resource_Porridge: 3,
Crafting_Resource_Solvent: 4,
Crafting_Resource_Brimstone: 5,
Crafting_Resource_Coal: 6,
Crafting_Resource_Moonseasalt: 7,
Crafting_Resource_Quicksilver: 8,
Crafting_Resource_Spool_Threadsilk: 9,
};
var _resourceCost = {
Crafting_Resource_Charcoal: 30,
Crafting_Resource_Rocksalt: 30,
Crafting_Resource_Spool_Thread: 30,
Crafting_Resource_Porridge: 30,
Crafting_Resource_Solvent: 20,
Crafting_Resource_Brimstone: 100,
Crafting_Resource_Coal: 500,
Crafting_Resource_Moonseasalt: 500,
Crafting_Resource_Quicksilver: 500,
Crafting_Resource_Spool_Threadsilk: 500,
};
var _charGold = unsafeWindow.client.dataModel.model.ent.main.currencies.gold;
var _charSilver = unsafeWindow.client.dataModel.model.ent.main.currencies.silver;
var _charCopper = unsafeWindow.client.dataModel.model.ent.main.currencies.copper;
var _charCopperTotal = _charCopper + (_charSilver*100) + (_charGold*10000);
var _resourcePurchasable = Math.floor(_charCopperTotal/_resourceCost[item]);
// Limit resource purchase to 50 quantity
var _purchaseCount = (_resourcePurchasable >= 50) ? 50 : _resourcePurchasable;
if (_purchaseCount < 1) {
// Not enough gold for 1 resource
//console.log("Purchasing profession resources failed for:",item);
return false;
} else {
// Make purchase
//console.log("Purchasing profession resources:", _purchaseCount + "x",item, ". Total copper available:",_charCopperTotal,". Spending ",(_purchaseCount*_resourceCost[item]),"copper.");
unsafeWindow.client.sendCommand("GatewayVendor_PurchaseVendorItem", {vendor: 'Nw_Gateway_Professions_Merchant', store: 'Store_Crafting_Resources', idx: _resourceID[item], count: _purchaseCount});
WaitForState("button.closeNotification").done(function () {
$("button.closeNotification").trigger('click');
});
return null;
}
}
/** DRAFT
* Will buy a missing leadership assets
*
* @param {String} item reference from assetID
*/
function buyTaskAsset(_itemNo) {
var _returnHast = unsafeWindow.location.hash;
unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')/professions/vendor');
WaitForState("").done(function () {
if ($('span.alert-red button[data-url-silent="/professions/vendor/Store_Crafting_Assets/' + _itemNo + '"]').length) {
return false;
} else if ($('button[data-url-silent="/professions/vendor/Store_Crafting_Assets/' + _itemNo + '"]').length)
{
$('button[data-url-silent="/professions/vendor/Store_Crafting_Assets/' + _itemNo + '"]').trigger('click');
WaitForState(".modal-confirm button").done(function () {
$('.modal-confirm button').eq(1).trigger('click');
unsafeWindow.location.hash = _returnHast;
return null;
});
}
});
}
// Function used to check exchange data model and post calculated AD/Zen for transfer if all requirements are met
function postZexOffer() {
// Make sure the exchange data is loaded to model
if (unsafeWindow.client.dataModel.model.exchangeaccountdata) {
// Check that there is atleast 1 free zex order slot
if (unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.length < 5) {
// Place the order
var exchangeDiamonds = parseInt(unsafeWindow.client.dataModel.model.exchangeaccountdata.readytoclaimescrow);
var charDiamonds = parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds);
var ZenRate = parseInt(settings["banktransrate"]);
var ZenQty = Math.floor((charDiamonds + exchangeDiamonds - parseInt(settings["bankcharmin"])) / ZenRate);
ZenQty = (ZenQty > 5000) ? 5000 : ZenQty;
//console.log("Posting Zex buy listing for " + ZenQty + " ZEN at the rate of " + ZenRate + " AD/ZEN. AD remainder: " + charDiamonds + " - " + (ZenRate * ZenQty) + " = " + (charDiamonds - (ZenRate * ZenQty)));
unsafeWindow.client.createBuyOrder(ZenQty, ZenRate);
} else {
//console.log("Zen Max Listings Reached (5). Skipping Zex Posting..");
}
} else {
//console.log("Zen Exchange data did not load in time for transfer. Skipping Zex Posting..");
}
}
// Function used to check exchange data model and withdraw listed orders that use the settings zen transfer rate
function withdrawZexOffer() {
// Make sure the exchange data is loaded to model
if (unsafeWindow.client.dataModel.model.exchangeaccountdata) {
if (unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.length >= 1) {
var charDiamonds = parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds);
var ZenRate = parseInt(settings["banktransrate"]);
// cycle through the zex listings
unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.forEach(function (item) {
// find any buy orders in the list with our set zen rate
if (parseInt(item.price) == ZenRate && item.ordertype == "Buy") {
// cancel/withdraw the order
client.withdrawOrder(item.orderid);
//console.log("Withdrawing Zex listing for " + item.quantity + " ZEN at the rate of " + item.price + " . Total value in AD: " + item.totaltc);
}
});
} else {
//console.log("No listings found on Zex. Skipping Zex Withrdaw..");
}
} else {
//console.log("Zen Exchange data did not load in time for transfer. Skipping Zex Withrdaw..");
}
}
// MAC-NW
function vendorItemsLimited(_items) {
var _charGold = unsafeWindow.client.dataModel.model.ent.main.currencies.gold;
var _pbags = client.dataModel.model.ent.main.inventory.playerbags;
var _pbags_crafting = client.dataModel.model.ent.main.inventory.tradebag; //tradebag
var _delay = 400;
var _sellCount = 0;
var _classType = unsafeWindow.client.dataModel.model.ent.main.classtype;
var _bagCount = unsafeWindow.client.dataModel.model.ent.main.inventory.playerbags.length;
var _bagUsed = 0;
var _bagUnused = 0;
var _tmpBag1 = [];
var _tmpBag2 = [];
//var _tmpBag = [];
var _profitems = [];
// Pattern for items to leave out of auto vendoring (safeguard)
var _excludeItems = /(Charcoal|Rocksalt|Spool_Thread|Porridge|Solvent|Brimstone|Coal|Moonseasalt|Quicksilver|Spool_Threadsilk|Clues_Bandit_Hq|Clothscraps_T4|Clothbolt_T4|Potion_Potency|Potion_Protection|Taffeta|Crafting_Asset|Craftsman|Aqua|Vitriol|Residuum|Shard|Crystal|District_Map|Local_Map|Bill_Of_Sale|Refugee|Asset_Tool|Tool|Gemfood|Gem_Upgrade_Resource|Crafting_Resource_Elemental|Elemental|Artifact|Hoard|Coffer|Fuse|Ward|Preservation|Armor_Enhancement|Weapon_Enhancement|T[5-9]_Enchantment|T[5-9]_Runestones|T10_Enchantment|T10_Runestones|4c_Personal|Item_Potion_Companion_Xp|Gateway_Rewardpack|Consumable_Id_Scroll|Dungeon_Delve_Key)/; // edited by RottenMind 08.03.2015
if (settings["autovendor_profresults"]) {
/** Profession leveling result item cleanup logic for T1-4 crafted results
* Created by RM on 14.1.2015.
* List contains crafted_items, based "Mustex/Bunta NW robot 1.05.0.1L crafting list, can be used making list for items what are "Auto_Vendored".
* Items on list must be checked and tested.
*/
/*#1, Tier3, end list, sell allways all, "TierX" is here "TX" !!*/
/*_profitems[_profitems.length] = {
pattern : /^Crafted_(Jewelcrafting_Waist_Offense_3|Jewelcrafting_Neck_Defense_3|Jewelcrafting_Waist_Defense_3|Hvy_Armorsmithing_Pants_3|Med_Armorsmithing_Chain_Shirt_3|Leatherworking_Shirt_3|Hvy_Armorsmithing_Shirt_3|Leatherworking_Pants_3|Med_Armorsmithing_Chain_Pants_3|Med_Armorsmithing_T3_Chain_Armor_Set_1|Med_Armorsmithing_T3_Chain_Pants2|Med_Armorsmithing_T3_Chain_Shirt2|Med_Armorsmithing_T3_Chain_Helm_Set_1|Med_Armorsmithing_T3_Chain_Pants|Med_Armorsmithing_T3_Chain_Boots_Set_1|Hvy_Armorsmithing_T3_Plate_Armor_Set_1|Hvy_Armorsmithing_T3_Plate_Pants2|Hvy_Armorsmithing_T3_Plate_Shirt2|Hvy_Armorsmithing_T3_Plate_Helm_Set_1|Hvy_Armorsmithing_T3_Plate_Boots_Set_1|Leatherworking_T3_Leather_Armor_Set_1|Leatherworking_T3_Leather_Pants2|Leatherworking_T3_Leather_Shirt2|Leatherworking_T3_Leather_Helm_Set_1|Leatherworking_T3_Leather_Boots_Set_1|Tailoring_T3_Cloth_Armor_Set_3|Tailoring_T3_Cloth_Armor_Set_2|Tailoring_T3_Cloth_Armor_Set_1|Tailoring_T3_Cloth_Pants2_Set2|Tailoring_T3_Cloth_Shirt2|Tailoring_T3_Cloth_Helm_Set_1|Artificing_T3_Pactblade_Temptation_5|Artificing_T3_Icon_Virtuous_5|Weaponsmithing_T3_Dagger_4)$/,
limit : 0,
count : 0
};*/ // moved to selljunk filter, RottenMind
/*#2, Tier2 - tier3 mixed, upgrade, sell if inventory full, "TierX" is here "TX" */
_profitems[_profitems.length] = {
pattern : /^Crafted_(Jewelcrafting_Neck_Misc_2|Jewelcrafting_Waist_Misc_2|Med_Armorsmithing_T3_Chain_Pants|Hvy_Armorsmithing_Pants_3|Med_Armorsmithing_Chain_Shirt_3|Leatherworking_Shirt_3|Hvy_Armorsmithing_Shirt_3|Leatherworking_Pants_3|Med_Armorsmithing_Chain_Pants_3||Med_Armorsmithing_T3_Chain_Shirt|Hvy_Armorsmithing_T3_Plate_Pants|Hvy_Armorsmithing_T3_Plate_Shirt|Leatherworking_T3_Leather_Pants|Leatherworking_T3_Leather_Shirt|Tailoring_Shirt_3|Tailoring_T3_Cloth_Shirt|Tailoring_T3_Cloth_Shirt_Set2|Tailoring_T3_Cloth_Pants|Tailoring_Shirt_3_Set2|Tailoring_Pants_3_Set2|Tailoring_Pants_3|Artificing_T3_Pactblade_Temptation_4|Artificing_T3_Icon_Virtuous_4|Weaponsmithing_T2_Dagger_3|Weaponsmithing_T2_Dagger_3|Weaponsmithing_T3_Greataxe_4|Weaponsmithing_T3_Battleaxe_4|Weaponsmithing_T3_Greataxe_Set_2|Weaponsmithing_T3_Battleaxe_Set_2)$/,
limit: 0,
count: 0
};
/*#3, Tier2, upgrade, sell if inventory full, "TierX" is here "TX" */
_profitems[_profitems.length] = {
pattern: /^Crafted_(Jewelcrafting_Neck_Offense_2|Jewelcrafting_Waist_Offense_2|Tailoring_T2_Cloth_Shirt|T2_Cloth_Armor_Set_2|Med_Armorsmithing_T2_Chain_Armor_Set_1|Med_Armorsmithing_T2_Chain_Pants_2|Med_Armorsmithing_T2_Chain_Boots_Set_1|Med_Armorsmithing_T2_Chain_Shirt_2|Med_Armorsmithing_T2_Chain_Pants_1|Med_Armorsmithing_T2_Chain_Shirt|Hvy_Armorsmithing_T2_Plate_Armor_Set_1|Hvy_Armorsmithing_T2_Plate_Pants_2|Crafted_Tailoring_Pants_2|Tailoring_T2_Cloth_Armor_Set_1|Crafted_Tailoring_Shirt_2 |Hvy_Armorsmithing_T2_Plate_Boots_Set_1|Hvy_Armorsmithing_T2_Plate_Shirt_2|Med_Armorsmithing_Chain_Pants_2|Hvy_Armorsmithing_T2_Plate_Pants_1|Hvy_Armorsmithing_T2_Shield_Set_1|Hvy_Armorsmithing_T2_Plate_Shirt|Leatherworking_T2_Leather_Shirt|Leatherworking_T2_Leather_Boots_Set_1|Leatherworking_T2_Leather_Shirt_2|Leatherworking_T2_Leather_Pants_1|Leatherworking_T2_Leather_Armor_Set_1|Leatherworking_T2_Leather_Pants_2|Leatherworking_Shirt_3_Set2|Tailoring_T2_Cloth_Armor_Set_1|Tailoring_Pants_2|Tailoring_T2_Cloth_Pants|Tailoring_T2_Cloth_Pants_2|Tailoring_T2_Cloth_Boots_Set_1|Tailoring_T2_Cloth_Shirt_2|Tailoring_T2_Cloth_Pants_1|Artificing_T2_Pactblade_Temptation_3|Artificing_T1_Icon_Virtuous_2|Weaponsmithing_T2_Dagger_2|Weaponsmithing_T2_Greataxe_3|Weaponsmithing_T2_Battleaxe_3)$/,
limit: 0,
count: 0
};
/*#4, Tier1, upgrade, sell if inventory full, "TierX" is here "TX" */
_profitems[_profitems.length] = {
pattern: /^Crafted_(Jewelcrafting_Neck_Misc_1|Jewelcrafting_Waist_Misc_1|Tailoring_Cloth_Shirt_1_Set2|Med_Armorsmithing_T1_Chain_Armor_Set_1|Med_Armorsmithing_T1_Chain_Boots_Set_1|Hvy_Armorsmithing_Plate_Armor_1|Hvy_Armorsmithing_T1_Plate_Armor_Set_1|Hvy_Armorsmithing_T1_Plate_Boots_Set_1|Leatherworking_T1_Leather_Boots_Set_1|Leatherworking_T1_Leather_Boots_Set_1|Leatherworking_T1_Leather_Armor_Set_1|Tailoring_T1_Cloth_Armor_1|Tailoring_Cloth_Armor_1|Tailoring_T1_Cloth_Pants_1|Tailoring_T1_Cloth_Boots_Set_1|Artificing_T1_Pactblade_Convergence_2|Artificing_T1_Icon_Virtuous_2|Weaponsmithing_T1_Dagger_1|Weaponsmithing_T2_Greataxe_2|Weaponsmithing_T2_Battleaxe_2)$/,
limit: 0,
count: 0
};
/*#5, Tier0, upgrade, sell if inventory full, taskilist "Tier1" is here "empty" or "_" must replace (_T1_|_)*/
_profitems[_profitems.length] = {
pattern: /^Crafted_(Jewelcrafting_Waist_Offense_1|Jewelcrafting_Neck_Offense_1|Tailoring_Cloth_Pants_1|Med_Armorsmithing_Chain_Boots_1|Med_Armorsmithing_Chain_Shirt_1|Med_Armorsmithing_Chain_Armor_1|Med_Armorsmithing_Chain_Pants_1|Hvy_Armorsmithing_Plate_Boots_1|Hvy_Armorsmithing_Plate_Shirt_1|Hvy_Armorsmithing_Shield_1|Leatherworking_Tier0_Intro_1|Leatherworking_Leather_Boots_1|Leatherworking_Leather_Shirt_1|Tailoring_T1_Cloth_Shirt_Set2|Leatherworking_Leather_Armor_1|Leatherworking_Leather_Pants_1|Tailoring_Cloth_Boots_1|Tailoring_Cloth_Shirt_1|Artificing_T1_Pactblade_Convergence_1|Artificing_Icon_Virtuous_1|Artificing_Symbol_Virtuous_1|Weaponsmithing_Dagger_1|Weaponsmithing_T1_Greatsword_1|Weaponsmithing_T1_Longbow_1|Weaponsmithing_T1_Greataxe_1|Weaponsmithing_T1_Battleaxe_1)$/,
limit: 0,
count: 0
};
}
$.each(_pbags, function (bi, bag) {
bag.slots.forEach(function (slot) {
// Match unused slots
if (slot === null || !slot || slot === undefined) {
_bagUnused++;
}
// Match items to exclude from auto vendoring, dont add to _tmpBag: Exclude pattern list - bound - Epic Quality - Blue Quality
else if (_excludeItems.test(slot.name) || slot.bound || slot.rarity == "Special" || slot.rarity == "Gold") {
_bagUsed++;
}
// Match everything else
else {
if (settings["autovendor_profresults"]) {
for (i = 0; i < _profitems.length; i++) {
if (_profitems[i].pattern.test(slot.name))
_profitems[i].count++;
}
}
_tmpBag1[_tmpBag1.length] = slot;
_bagUsed++;
}
});
});
if (settings["autovendor_profresults"] && _charGold < 2) { // this "gold" threshold must be global var and adjustable by users
// $.each(_pbags_crafting, function (bi, bag) {
_pbags_crafting.forEach(function (slot) {
// Match unused slots
if (slot === null || !slot || slot === undefined) {
// _bagUnused++;
}
// Match items to exclude from auto vendoring, dont add to _tmpBag: Exclude pattern list - bound - Epic Quality - Blue Quality - Green Quality(might cause problems)
else if (_excludeItems.test(slot.name) || slot.bound || slot.rarity == "Special" || slot.rarity == "Gold" || slot.rarity == "Silver") {
// _bagUsed++;
}
// Match everything else
else {
if (settings["autovendor_profresults"]) {
for (i = 0; i < _profitems.length; i++) {
if (_profitems[i].pattern.test(slot.name))
_profitems[i].count++;
}
}
_tmpBag2[_tmpBag2.length] = slot;
// _bagUsed++;
//console.log(slot.name); // tradebag debug msg
}
});
// });
}
var _tmpBag = _tmpBag1.concat(_tmpBag2);
if (settings["autovendor_profresults"]) {
_tmpBag.forEach(function (slot) {
for (i = 0; i < _profitems.length; i++) { // edited by RottenMind
if (slot && _profitems[i].pattern.test(slot.name) && Inventory_bagspace() <= 9) { // !slot.bound && _profitems[i].count > 3 &&, edited by RottenMind
var vendor = {
vendor: "Nw_Gateway_Professions_Merchant"
};
vendor.id = slot.uid;
vendor.count = 1;
//console.log('Selling', vendor.count, slot.name, 'to vendor.');
window.setTimeout(function () {
client.sendCommand('GatewayVendor_SellItemToVendor', vendor);
}, _delay);
_profitems[i].count--;
break;
}
}
});
}
_tmpBag.forEach(function (slot) {
for (i = 0; i < _items.length; i++) {
var _Limit = (parseInt(_items[i].limit) > 99) ? 99 : _items[i].limit;
if (slot && _items[i].pattern.test(slot.name) && !slot.bound) {
// Node Kits vendor logic for restricted bag space
if (settings["autovendor_kits_altars_limit"] && /^Item_Consumable_Skill/.test(slot.name)) {
if (_bagCount < 2 || _bagUnused < 6 ||
(slot.name == "Item_Consumable_Skill_Dungeoneering" && (_classType == "Player_Guardian" || _classType == "Player_Greatweapon")) ||
(slot.name == "Item_Consumable_Skill_Arcana" && (_classType == "Player_Controller" || _classType == "Player_Scourge")) ||
(slot.name == "Item_Consumable_Skill_Religion" && _classType == "Player_Devoted") ||
(slot.name == "Item_Consumable_Skill_Thievery" && _classType == "Player_Trickster") ||
(slot.name == "Item_Consumable_Skill_Nature" && _classType == "Player_Archer")
) {
_Limit = 0;
}
}
// Sell Items
if (slot.count > _Limit) {
_sellCount++;
var vendor = {
vendor: "Nw_Gateway_Professions_Merchant"
};
vendor.id = slot.uid;
vendor.count = slot.count - _Limit;
//console.log('Selling', vendor.count, slot.name, 'to vendor.');
window.setTimeout(function () {
client.sendCommand('GatewayVendor_SellItemToVendor', vendor);
}, _delay);
_delay = _delay + 400;
break;
}
}
}
});
return _sellCount;
}
function switchChar() {
failedProf = [];
setTaskSlots();
//if (settings["refinead"]) {
var _currencies = unsafeWindow.client.dataModel.model.ent.main.currencies;
if (_currencies.diamondsconvertleft && _currencies.roughdiamonds) {
var refined_diamonds;
if (_currencies.diamondsconvertleft < _currencies.roughdiamonds) {
refined_diamonds = _currencies.diamondsconvertleft
} else {
refined_diamonds = _currencies.roughdiamonds
}
chardiamonds[charcurrent] += refined_diamonds
//console.log("Refining AD for", settings["nw_charname" + charcurrent] + ":", refined_diamonds);
//console.log(settings["nw_charname" + charcurrent] + "'s", "Astral Diamonds:", chardiamonds[charcurrent]);
unsafeWindow.client.sendCommand('Gateway_ConvertNumeric', 'Astral_Diamonds');
WaitForState("button.closeNotification").done(function () {
$("button.closeNotification").click();
});
}
//}
if (settings["easy_start"]) {
get_banker();
}
// MAC-NW -- AD Consolidation
if (settings["autoexchange"]) {
// Check that we dont take money from the character assigned as the banker // Zen Transfer / Listing
if (settings["bankchar"] != unsafeWindow.client.dataModel.model.ent.main.name) {
// Check the required min AD amount on character
if (settings["banktransmin"] && settings["bankcharmin"] && parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds) >= (parseInt(settings["banktransmin"]) + parseInt(settings["bankcharmin"]))) {
// Check that the rate is not less than the min & max
if (settings["banktransrate"] && parseInt(settings["banktransrate"]) >= 50 && parseInt(settings["banktransrate"]) <= 500) {
window.setTimeout(postZexOffer, delay.SHORT);
}
// Crash ZEX Domino
if (unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.length >= 4) {
window.setTimeout(withdrawZexOffer, delay.MEDIUM);
}
else {
//console.log("Zen transfer rate does not meet the minimum (50) or maximum (500). Skipping Zex Posting..");
}
} else {
//console.log("Character does not have minimum AD balance to do funds transfer. Skipping Zex Posting..");
}
}
} else {
//console.log("Zen Exchange AD transfer not enabled. Skipping Zex Posting..");
}
if (settings["openrewards"]) {
var _pbags = unsafeWindow.client.dataModel.model.ent.main.inventory.playerbags;
var _cRewardPat = /Reward_Item_Chest|Gateway_Rewardpack/;
//console.log("Opening Rewards");
$.each(_pbags, function (bi, bag) {
bag.slots.forEach(function (slot) {
if (slot && _cRewardPat.test(slot.name)) {
if (slot.count >= 99)
slot.count = 99;
for (i = 1; i <= slot.count; i++) {
window.setTimeout(function () {
client.sendCommand('GatewayInventory_OpenRewardPack', slot.uid);
}, 500);
}
}
});
});
}
// Check Vendor Options & Vendor matched items
vendorJunk();
// MAC-NW (endchanges)
//console.log("Switching Characters");
var nowdate = new Date(); // chardelay moved global
chardate = null;
nowdate = nowdate.getTime();
for (var cc = 0; cc < settings["charcount"]; cc++) {
if (chartimers[cc] != null) {
//console.log("Date found for " + settings["nw_charname" + cc]);
if (!chardate || chartimers[cc] < chardate) {
chardate = chartimers[cc];
charcurrent = cc;
chardelay = chardate.getTime() - nowdate - unsafeWindow.client.getServerOffsetSeconds() * 1000;
if (chardelay < delay.SHORT) {
chardelay = delay.SHORT;
}
}
} else {
charcurrent = cc;
chardelay = delay.SHORT;
chardate = null;
//console.log("No date found for " + settings["nw_charname" + cc] + ", switching now.");
break;
}
}
// Count AD
var curdiamonds = 0;
for (var cc = 0; cc < settings["charcount"]; cc++) {
if (chardiamonds[cc] != null) {
curdiamonds += Math.floor(chardiamonds[cc] / 50) * 50;
}
}
//console.log("Next run for " + settings["nw_charname" + charcurrent] + " in " + parseInt(chardelay / 1000) + " seconds.");
$("#prinfopane").empty().append("<h3 class='promo-image copy-top prh3'>Professions Robot<br />Next task for " + settings["nw_charname" + charcurrent] + "<br /><span data-timer='" + chardate + "' data-timer-length='2'></span><br />Diamonds: " + curdiamonds.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + " #SCA[" + GM_getValue("dailyswordcoast", 0) + "]times." + "</h3>");
GM_setValue("charcurrent", charcurrent);
dfdNextRun.resolve(chardelay);
}
/**
* Waits for the loading symbol to be hidden.
*
* @return {Deferred} A jQuery defferred object that will be resolved when loading is complete
*/
function WaitForLoad() {
return WaitForState("");
}
/**
* Creates a deferred object that will be resolved when the state is reached
*
* @param {string} query The query for the state to wait for
* @return {Deferred} A jQuery defferred object that will be resolved when the state is reached
*/
function WaitForState(query) {
var dfd = $.Deferred();
window.setTimeout(function () {
AttemptResolve(query, dfd);
}, delay.SHORT); // Doesn't work without a short delay
return dfd;
}
function WaitForNotState(query) {
var dfd = $.Deferred();
window.setTimeout(function () {
AttemptNotResolve(query, dfd);
}, delay.SHORT); // Doesn't work without a short delay
return dfd;
}
/**
* Will continually test for the given query state and resolve the given deferred object when the state is reached
* and the loading symbol is not visible
*
* @param {string} query The query for the state to wait for
* @param {Deferred} dfd The jQuery defferred object that will be resolved when the state is reached
*/
function AttemptResolve(query, dfd) {
if ((query === "" || $(query).length) && $("div.loading-image:visible").length === 0) {
dfd.resolve();
}
else {
window.setTimeout(function () {
AttemptResolve(query, dfd);
}, delay.SHORT); // Try again in a little bit
}
}
/* Opposite of AttemptResolve, will try to resolve query until it doesn't resolve. */
function AttemptNotResolve(query, dfd) {
if (!$(query).length && $("div.loading-image:visible").length === 0) {
dfd.resolve();
}
else {
window.setTimeout(function () {
AttemptNotResolve(query, dfd);
}, delay.SHORT); // Try again in a little bit
}
}
/**
* The main process loop:
* - Determine which page we are on and call the page specific logic
* - When processing is complete, process again later
* - Use a short timer when something changed last time through
* - Use a longer timer when waiting for tasks to complete
*/
function process() {
// Make sure the settings button exists
addSettings();
// Enable/Disable the unconditional page reload depending on settings
loading_reset = settings["autoreload"];
// Check if timer is paused
s_paused = settings["paused"]; // let the Page Reloading function know the pause state
if (settings["paused"]) {
// Just continue later - the deferred object is still set and nothing will resolve it until we get past this point
var timerHandle = window.setTimeout(function () {
process();
}, delay.DEFAULT);
return;
}
// Check for Gateway down
if (window.location.href.indexOf("gatewaysitedown") > -1) {
// Do a long delay and then retry the site
//console.log("Gateway down detected - relogging in " + (delay.MINS / 1000) + " seconds");
window.setTimeout(function () {
unsafeWindow.location.href = current_Gateway; // edited by RottenMind
}, delay.MINS);
return;
}
// Check for login or account guard and process accordingly
var currentPage = GetCurrentPage();
if (currentPage == PAGES.LOGIN) {
page_LOGIN();
return;
}
else if (currentPage == PAGES.GUARD) {
page_GUARD();
return;
}
window.setTimeout(function () {
loginProcess();
}, delay.SHORT);
// Continue again later
dfdNextRun.done(function (delayTimer) {
dfdNextRun = $.Deferred();
timerHandle = window.setTimeout(function () {
process();
}, typeof delayTimer !== 'undefined' ? delayTimer : delay.DEFAULT);
});
}
function loginProcess() {
// Get logged on account details
var accountName;
try {
accountName = unsafeWindow.client.dataModel.model.loginInfo.publicaccountname;
}
catch (e) {
// TODO: Use callback function
window.setTimeout(function () {
loginProcess();
}, delay.SHORT);
return;
}
// Check if timer is paused again to avoid starting new task between timers
s_paused = settings["paused"]; // let the Page Reloading function know the pause state
if (settings["paused"]) {
// Just continue later - the deferred object is still set and nothing will resolve it until we get past this point
var timerHandle = window.setTimeout(function () {
process();
}, delay.DEFAULT);
return;
}
if (accountName) {
// load current character position and values
charcurrent = GM_getValue("charcurrent", 0);
for (var i = 0; i < (charSettings.length / settings["charcount"]); i++) {
j = i + (charcurrent * charSettings.length / settings["charcount"]);
settings[charSettings[j].name.replace(new RegExp(charcurrent + "$"), '')] = settings[charSettings[j].name];
}
var charName = settings["nw_charname"];
var fullCharName = charName + '@' + accountName;
if (charName.match(/Character/)) {
if (!settings["paused"])
PauseSettings("pause");
//console.log("Loading character list", charName);
charNameList = [];
client.dataModel.model.loginInfo.choices.forEach(function (char) {
if (char.name == "Author") return;
charNameList.push(char.name);
});
//console.log("Found names: " + charNameList);
GM_setValue("charcount", charNameList.length);
charNameList.forEach(function (name, i) {
GM_setValue("nw_charname" + i, name);
})
if (settings["paused"]) {
window.setTimeout(function () {
PauseSettings("unpause");
}, 3000);
}
window.setTimeout(function () {
unsafeWindow.location.href = current_Gateway;
}, delay.MEDIUM);
//console.log("ReStarting");
}
if (unsafeWindow.client.getCurrentCharAtName() != fullCharName) {
loadCharacter(fullCharName);
return;
}
// Try to start tasks
if (processCharacter()) {
return;
}
// Switch characters as necessary
switchChar();
}
dailySCA();
}
function loadCharacter(charname) {
// Load character and restart next load loop
//console.log("Loading gateway script for", charname);
startedTask["currTaskChar"] = charname;
unsafeWindow.client.dataModel.loadEntityByName(charname);
// MAC-NW -- AD Consolidation -- Banker Withdraw Secion
try {
var testChar = unsafeWindow.client.dataModel.model.ent.main.name;
unsafeWindow.client.dataModel.fetchVendor('Nw_Gateway_Professions_Merchant');
//console.log("Loaded datamodel for", charname);
}
catch (e) {
// TODO: Use callback function
window.setTimeout(function () {
loadCharacter(charname);
}, delay.SHORT);
return;
}
setTaskSlots();
if (settings["autoexchange"]) {
unsafeWindow.client.dataModel.fetchExchangeAccountData();
try {
var testExData = unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders;
//console.log("Loaded zen exchange data for", charname);
}
catch (e) {
// TODO: Use callback function
window.setTimeout(function () {
loadCharacter(charname);
}, delay.SHORT);
return;
}
// Check to see if this is the designated banker character
if (settings["bankchar"] == unsafeWindow.client.dataModel.model.ent.main.name) {
// This is the banker -- withdraw any buy listings that match the transfer rate set in panel
window.setTimeout(withdrawZexOffer, delay.MEDIUM);
// withdraw the balance from exchange
window.setTimeout(function () {
if (parseInt(client.dataModel.model.exchangeaccountdata.readytoclaimescrow) > 0) {
client.sendCommand("GatewayExchange_ClaimTC", client.dataModel.model.exchangeaccountdata.readytoclaimescrow);
//console.log("Attempting to withdraw exchange balancees... ClaimTC: " + client.dataModel.model.exchangeaccountdata.readytoclaimescrow);
}
if (parseInt(client.dataModel.model.exchangeaccountdata.readytoclaimmtc) > 0) {
client.sendCommand("GatewayExchange_ClaimMTC", client.dataModel.model.exchangeaccountdata.readytoclaimmtc);
//console.log("Attempting to withdraw exchange balancees... ClaimMT: " + client.dataModel.model.exchangeaccountdata.readytoclaimmtc);
}
}, delay.SHORT);
}
WaitForState("button.closeNotification").done(function () {
$("button.closeNotification").click();
});
unsafeWindow.client.dataModel.loadEntityByName(charname);
} else {
//console.log("Zen Exchange AD transfer not enabled. Skipping Zex Posting..");
}
// MAC-NW
// MAC-NW -- Moved Professoin Merchant loading here with testing/waiting to make sure it loads
try {
var testProfMerchant = client.dataModel.model.vendor.items;
//console.log("Loaded profession merchant for", charname);
}
catch (e) {
// TODO: Use callback function
window.setTimeout(function () {
loadCharacter(charname);
}, delay.SHORT);
return;
}
// Check Vendor Options & Vendor matched items
vendorJunk();
dfdNextRun.resolve();
}
function addSettings() {
if ($("#settingsButton").length)
return;
// Add the required CSS
AddCss("\
#settingsButton{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); display: block; position: fixed; overflow: auto; right: 0px; top: 0px; padding: 3px; z-index: 1000;}\
#pauseButton{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); display: block; position: fixed; overflow: auto; right: 23px; top: 0px; padding: 3px; z-index: 1000;}\
/* MAC-NW -- Put Panel at a higher layer than status window */ #settingsPanel{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); color: rgb(0, 0, 0); position: fixed; overflow: auto; right: 0px; top: 0px; width: 750px;max-height:800px;font: 12px sans-serif; text-align: left; display: block; z-index: 1001;}\
#settings_title{font-weight: bolder; background: none repeat scroll 0% 0% rgb(204, 204, 204); border-bottom: 1px solid rgb(102, 102, 102); padding: 3px;}\
#settingsPanelButtonContainer {background: none repeat scroll 0% 0% rgb(204, 204, 204); border-top: 1px solid rgb(102, 102, 102);padding: 3px;text-align:center} \
#settingsPanel label.purple {font-weight:bold;color:#7C37F6}\
#settingsPanel label.blue {font-weight:bold;color:#007EFF}\
#settingsPanel label.green {font-weight:bold;color:#8AFF00}\
#settingsPanel label.white {font-weight:bold;color:#FFFFFF}\
#charPanel {width:98%;max-height:400px;overflow:auto;display:block;padding:3px;}\
#charPanel div div ul li { display: inline-block; width: 48%; }\
.inventory-container {float: left; clear: none; width: 270px; margin-right: 20px;}\
#prinfopane {position: fixed; top: 5px; left: 200px; display: block; z-index: 1000;}\
.prh3 {padding: 5px; height: auto!important; width: auto!important; background-color: rgba(0, 0, 0, 0.7);}\
.custom-radio{width:16px;height:16px;display:inline-block;position:relative;z-index:1;top:3px;background-color:#fff;margin:0 4px 0 2px;}\
.custom-radio:hover{background-color:black;} .custom-radio.selected{background-color:red;} .custom-radio-selected-text{color:darkred;font-weight:500;}\
.custom-radio input[type='radio']{margin:1px;position:absolute;z-index:2;cursor:pointer;outline:none;opacity:0;_nofocusline:expression(this.hideFocus=true);-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);filter:alpha(opacity=0);-khtml-opacity:0;-moz-opacity:0}\
#settingsPanel input[type='button'].button-green,#settingsPanel input[type='button'].button-red,#settingsPanel input[type='button'].button-yellow,#settingsPanel input[type='button'].button-blue{color:#eff;border-radius:4px;text-shadow:0 1px 1px rgba(0,0,0,0.2);font-size:110%;font-weight:bold;}\
.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-family:inherit;font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}\
#settingsPanel input[type='button'].button-green{background:#1cb841; margin: 2px 20px 2px 2px;}\
#settingsPanel input[type='button'].button-red{background:#ca3c3c; margin: 2px 2px 2px 2px;}\
#settingsPanel input[type='button'].button-yellow{background:#df7514; margin: 2px 2px 2px 2px;}\
#settingsPanel input[type='button'].button-blue{background:#42b8dd; margin: 2px 2px 2px 2px;}\
");
// Add settings panel to page body
$("body").append(
'<div id="settingsPanel">\
<div id="settings_title">\
<img src=' + image_prefs + ' style="float: left; vertical-align: text-bottom;"\>\
<img id="settings_close" src=' + image_close + ' title="Click to hide preferences" style="float: right; vertical-align: text-bottom; cursor: pointer; display: block;"\>\
<span style="margin:3px">Settings</span>\
</div>\
<form style="margin: 0px; padding: 0px">\
<ul style="list-style: none outside none; max-height: 500px; overflow: auto; margin: 3px; padding: 0px;">\
</ul>\
</form>\
</div>'
);
// Add each setting input
var settingsList = $("#settingsPanel form ul");
for (var i = 0; i < settingnames.length; i++) {
var id = 'settings_' + settingnames[i].name;
var indent = (countLeadingSpaces(settingnames[i].title) >= 1) ? 1 : 0;
/*if ((settingnames[i].type == 'text' && settingnames[i-1].type == 'checkbox') || (settingnames[i-1] && settingnames[i].type == 'checkbox' && settingnames[i-1].type == 'text'))
settingsList.append('<li style="margin-left:0em; width: 48%; display: inline-block;"/>&nbsp;</li>')*/
var border = "";
if (settingnames[i].border)
border = "border-top: #000 solid 1px;"
switch (settingnames[i].type) {
case "checkbox":
var _checkWidth = "48%";
if (i < 9)
_checkWidth = "31%";
if (settingnames[i].border)
_checkWidth = "98%";
settingsList.append('<li title="' + settingnames[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; width: ' + _checkWidth + '; display: inline-block;"><input style="margin:4px" name="' + id + '" id="' + id + '" type="checkbox" /><label class="' + settingnames[i].class + '" for="' + id + '">' + settingnames[i].title + '</label></li>')
$('#' + id).prop('checked', settings[settingnames[i].name]);
break;
case "text":
if (settingnames[i].border)
_inputkWidth = "95%; padding: 10px";
else
_inputkWidth = "46%";
settingsList.append('<li title="' + settingnames[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; margin-top:1em; width: ' + _inputkWidth + '; display: inline-block;"<label class="' + settingnames[i].class + '" for="' + id + '">' + settingnames[i].title + '</label><input style="margin:4px; padding: 2px; min-width: 80%;" name="' + id + '" id="' + id + '" type="text" /></li>')
$('#' + id).val(settings[settingnames[i].name]);
break;
case "password":
settingsList.append('<li title="' + settingnames[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; margin-top:1em; width: 46%; display: inline-block;"' + settingnames[i].class + '" for="' + id + '">' + settingnames[i].title + '</label><input style="margin:4px; padding: 2px; min-width: 80%;" name="' + id + '" id="' + id + '" type="password" /></li>')
$('#' + id).val(settings[settingnames[i].name]);
break;
case "select":
settingsList.append('<li title="' + settingnames[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; width: 48%; display: inline-block;"' + settingnames[i].class + '" style="padding-left:4px" for="' + id + '">' + settingnames[i].title + '</label><select style="margin:4px" name="' + id + '" id="' + id + '" /></li>')
var options = settingnames[i].opts;
var select = $('#' + id);
for (var j = 0; j < options.length; j++) {
if (settings[settingnames[i].name] == options[j].path)
select.append('<option value="' + options[j].path + '" selected="selected">' + options[j].name + '</option>');
else
select.append('<option value="' + options[j].path + '">' + options[j].name + '</option>');
}
break;
case "label":
settingsList.append('<li title="' + settingnames[i].tooltip + '" style="' + border + 'margin-left:' + indent + 'em;><label class="' + settingnames[i].class + '">' + settingnames[i].title + '</label></li>')
break;
}
}
// Add character settings for each char
var addText = '\
<script type="text/javascript">\
<!--\
function click_position(obj)\
{\
change_position(obj.value)\
}\
\
function customRadio(radioName) {\
var radioButton = $( \'input[name="\'+ radioName +\'"]\');\
$(radioButton).each(function(){\
$(this).wrap( "<span class=\'custom-radio\'></span>" );\
if($(this).is(\':checked\')){\
$(this).parent().addClass("selected");\
$(this).parent().parent().addClass("custom-radio-selected-text");\
}\
});\
$(radioButton).click(function(){\
if($(this).is(\':checked\')){\
$(this).parent().addClass("selected");\
$(this).parent().parent().addClass("custom-radio-selected-text");\
}\
$(radioButton).not(this).each(function(){\
$(this).parent().removeClass("selected");\
$(this).parent().parent().removeClass("custom-radio-selected-text");\
});\
});\
}\
function change_position(val)\
{\
for (var i = 0; i < ' + settings["charcount"] + '; i++)\
{\
document.getElementById("charContainer"+i).style.display="none";\
}\
document.getElementById("charContainer"+val).style.display="block";\
}\
//-->\
</script>\
<div id="charPanel">\
<div style="width:30%;float:left;max-height:400px;overflow:auto;">\
';
for (var i = 0; i < settings["charcount"]; i++) {
addText += '\
<div><label for="value_' + i + '" style="display:block;padding-top:2px;"><input autocomplete="off" type="radio" name="radio_position" onclick="click_position(this)" id="value_' + i + '" value="' + i + '" />' + settings["nw_charname" + i] + '</label></div>\
';
}
addText += '\
</div>\
<div style="width:69%;float:right;">\
';
for (var i = 0; i < settings["charcount"]; i++) {
addText += '\
<div id="charContainer' + i + '" style="display:none">\
<ul style="list-style: none outside none; max-height: 500px; overflow: auto;">\
';
var k = 0 + (i * charSettings.length / settings["charcount"]);
var id = 'settings_' + charSettings[k].name;
addText += '<li title="' + charSettings[k].tooltip + '"><input style="margin:4px; padding: 2px;" name="' + id + '" id="' + id + '" type="text" /></li>';
for (var j = 1; j < (charSettings.length / settings["charcount"]); j++) {
k = j + (i * charSettings.length / settings["charcount"]);
if (charSettings[k].type == 'void') {
continue;
}
id = 'settings_' + charSettings[k].name;
addText += '<li title="' + charSettings[k].tooltip + '"><input maxlength="2" size="1" style="margin:4px; padding: 2px;" name="' + id + '" id="' + id + '" type="text" /><label class="' + charSettings[k].class + '" for="' + id + '">' + charSettings[k].title + '</label></li>';
}
addText += '</ul>\
</div>';
}
addText += '\
</div>\
</div>\
';
$("#settingsPanel form").append(addText);
// Add values to character input fields
for (var i = 0; i < charSettings.length; i++) {
var id = 'settings_' + charSettings[i].name;
$('#' + id).val(settings[charSettings[i].name]);
}
// Add save/cancel buttons to panel
$("#settingsPanel form").append('\
<div id="settingsPanelButtonContainer">\
<input id="settings_save" class="button-blue pure-button" type="button" value="Save and Apply">\
<input id="settings_close" class="button-yellow pure-button" type="button" value="Close">\
<input id="settings_sca" class="button-red pure-button" type="button" value="Cycle SCA">\
<input id="log_error" class="button-green pure-button" type="button" value="Log Error">\
<input id="settings_wipe" class="button-white pure-button" type="button" value="RESET all">\
</div>');
// Add open settings button to page
$("body").append('<div id="settingsButton"><img src="' + image_prefs + '" title="Click to show preferences" style="cursor: pointer; display: block;"></div>');
// Add pause button to page
$("body").append('<div id="pauseButton"><img src="' + (settings["paused"] ? image_play : image_pause) + '" title="Click to ' + (settings["paused"] ? "resume" : "pause") + ' task script" style="cursor: pointer; display: block;"></div>');
// Add info pane
$("body").append("<div id='prinfopane' class='header-newrelease'>");
// Add the javascript
$("#settingsPanel").hide();
$("#settingsButton").click(function () {
$("#settingsButton").hide();
$("#pauseButton").hide();
$("#settingsPanel").show();
});
$("#settings_close,settings_cancel").click(function () {
$("#settingsButton").show();
$("#pauseButton").show();
$("#settingsPanel").hide();
});
$("#pauseButton").click(PauseSettings);
// Use setTimeout to workaround permission issues when calling GM functions from main window
$("#settings_save").click(function () {
setTimeout(function () {
SaveSettings();
}, 0)
});
$("#settings_sca").click(function () {
$("#settings_close").trigger("click");
unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')' + "/adventures");
processSwordCoastDailies();
});
$("#log_error").click(function () {
setTimeout(function () {
var epic = GM_getValue("Epic_error", 0);
var un_def_err = GM_getValue("Undefine_error", 0)
//console.log("Button Epic fails[" + epic +"] & undefine [" + un_def_err + "].");
}, 0)
});
$("#settings_wipe").click(function() {
setTimeout(function () {
// Delete all saved settings, EXCEPT password/username
var keys = GM_listValues();
for (i = 0; i < keys.length; i++) {
var key = keys[i];
if (!key.match(/(username|password)/)) {
////console.log("do delete these", key);
GM_deleteValue(key);}
}
}, 0)
unsafeWindow.location.href = current_Gateway;
return;
});
customRadio("radio_position");
$('#update-content-inventory-bags-0 .bag-header').waitUntilExists(function () {
if ($('#update-content-inventory-bags-0 .bag-header div').length && !$('#update-content-inventory-bags-0 .bag-header div.autovendor').length) {
$('#update-content-inventory-bags-0 .bag-header').append('<div class="input-field button light autovendor"><div class="input-bg-left"></div><div class="input-bg-mid"></div><div class="input-bg-right"></div><button id="nwprofs-autovendor">Auto Vendor</button></div>');
$("button#nwprofs-autovendor").on("click", vendorJunk);
}
});
}
function PauseSettings(_action) {
if (_action != "pause" || _action != "unpause")
_action = "toggle";
if (_action == "toggle")
settings["paused"] = !settings["paused"];
if (_action == "pause")
settings["paused"] = true;
if (_action == "unpause")
settings["paused"] = false;
setTimeout(function () {
GM_setValue("paused", settings["paused"]);
}, 0);
$("#settings_paused").prop("checked", settings["paused"]);
$("#pauseButton img").attr("src", (settings["paused"] ? image_play : image_pause));
$("#pauseButton img").attr("title", "Click to " + (settings["paused"] ? "resume" : "pause") + " task script");
}
function SaveSettings() {
var charcount = settings["charcount"];
// Get each value from the UI
for (var i = 0; i < settingnames.length; i++) {
var name = settingnames[i].name;
var el = $('#settings_' + name);
var value = false;
switch (settingnames[i].type) {
case "checkbox":
value = el.prop("checked");
break;
case "text":
value = el.val();
break;
case "password":
value = el.val();
break;
case "select":
value = el.val();
break;
case "label": // Labels don't have values
continue;
}
if (typeof (settingnames[i].onsave) === "function") {
//console.log("Calling 'onsave' for", name);
settingnames[i].onsave(value, settings[name]);
}
if (settings[name] !== value) {
settings[name] = value;
} // Save to local cache
if (GM_getValue(name) !== value) {
GM_setValue(name, value);
} // Save to GM cache
}
// Get character settings from UI
for (var i = 0; i < charSettings.length; i++) {
if (charSettings[i].type == 'void') {
continue;
}
var name = charSettings[i].name;
var el = $('#settings_' + name);
var value = el.val();
// Save to local cache
if (settings[name] !== value) {
settings[name] = value;
}
// Save to GM cache
GM_setValue(name, value);
}
// If character numbers have changed reload page
if (charcount != settings["charcount"]) {
//console.log("Reloading gateway to update character count");
unsafeWindow.location.href = current_Gateway; // edited by RottenMind
return;
}
// Close the panel
$("#settingsButton").show();
$("#pauseButton img").attr("src", (settings["paused"] ? image_play : image_pause));
$("#pauseButton img").attr("title", "Click to " + (settings["paused"] ? "resume" : "pause") + " task script");
$("#pauseButton").show();
$("#settingsPanel").hide();
}
function vendorJunk(evnt) {
var _charGold = unsafeWindow.client.dataModel.model.ent.main.currencies.gold;
var _vendorItems = [];
var _sellCount = 0;
if (settings["autovendor_kits_altars_limit"]) {
_vendorItems[_vendorItems.length] = {pattern: /^Item_Consumable_Skill/, limit: 50};
_vendorItems[_vendorItems.length] = {pattern: /^Item_Portable_Altar$/, limit: 80};
}
if (settings["autovendor_kits_altars_all"]) {
_vendorItems[_vendorItems.length] = {pattern: /^Item_Portable_Altar$/, limit: 0};
_vendorItems[_vendorItems.length] = {pattern: /^Item_Consumable_Skill/, limit: 0};
}
if (settings["autovendor_rank2"]) {
_vendorItems[_vendorItems.length] = {pattern: /^T1_Enchantment/, limit: 0};
_vendorItems[_vendorItems.length] = {pattern: /^T1_Runestone/, limit: 0};
}
if (settings["autovendor_rank2"]) {
_vendorItems[_vendorItems.length] = {pattern: /^T2_Enchantment/, limit: 0};
_vendorItems[_vendorItems.length] = {pattern: /^T2_Runestone/, limit: 0};
}
if (settings["autovendor_rank3"]) {
_vendorItems[_vendorItems.length] = {pattern: /^T3_Enchantment/, limit: 0};
_vendorItems[_vendorItems.length] = {pattern: /^T3_Runestone/, limit: 0};
}
if (settings["autovendor_pots1"]) {
_vendorItems[_vendorItems.length] = {
pattern: /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)$/, limit: 0
};
}
if (settings["autovendor_pots2"]) {
_vendorItems[_vendorItems.length] = {
pattern: /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)_2$/,
limit: 0
};
}
if (settings["autovendor_pots3"]) {
_vendorItems[_vendorItems.length] = {
pattern: /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)_3$/,
limit: 0
};
}
if (settings["autovendor_pots4"]) {
_vendorItems[_vendorItems.length] = {
pattern: /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)_4$/,
limit: 0
};
}
if (settings["autovendor_junk"]) {
_vendorItems[_vendorItems.length] = {pattern: /^Item_Snowworks_/, limit: 0}; // Winter Festival fireworks small & large
_vendorItems[_vendorItems.length] = {pattern: /^Item_Skylantern/, limit: 0}; // Winter Festival skylantern
_vendorItems[_vendorItems.length] = {pattern: /^Item_Partypopper/, limit: 0}; // Party Poppers
_vendorItems[_vendorItems.length] = {pattern: /^Item_Fireworks/, limit: 0}; // Fireworks
_vendorItems[_vendorItems.length] = {pattern: /^Object_Plate_/, limit: 0};
_vendorItems[_vendorItems.length] = {pattern: /^Object_Decoration_/, limit: 0};
_vendorItems[_vendorItems.length] = {pattern: /_Green_T[1-7]_Unid$/, limit: 0}; // Unidentified Green Gear
}
if (settings["autovendor_profresults"] && _charGold < 2) { //this "gold" threshold must be global var and adjustable by users
_vendorItems[_vendorItems.length] = {
pattern : /(Crafting_Resource_Pelt)_T[1-3]$/,
limit : 10
}; //"Crafting_Resource_Ore_T1" Pelt_T1
_vendorItems[_vendorItems.length] = {
pattern : /(Resource_Wood)_T[1-3]$/,
limit : 10
}; //"Crafting_Resource_Ore_T1" Pelt_T1
_vendorItems[_vendorItems.length] = {
pattern : /(Crafting_Resource_Ore)_T[1-3]$/,
limit : 10
}; //"Crafting_Resource_Ore_T1"> Pelt_T1
//console.log("copper amount is under sale threshold", _charGold);
}
// edited by RottenMind
if (settings["autovendor_profresults"]) {
_vendorItems[_vendorItems.length] = {
pattern: /^Crafted_(Jewelcrafting_Waist_Offense_3|Jewelcrafting_Neck_Defense_3|Jewelcrafting_Waist_Defense_3|Tailoring_T3_Helm_Set_1|Med_Armorsmithing_T3_Chain_Armor_Set_1|Med_Armorsmithing_T3_Chain_Pants2|Med_Armorsmithing_T3_Chain_Shirt2|Med_Armorsmithing_T3_Chain_Helm_Set_1|Med_Armorsmithing_T3_Chain_Pants|Med_Armorsmithing_T3_Chain_Boots_Set_1|Hvy_Armorsmithing_T3_Plate_Armor_Set_1|Hvy_Armorsmithing_T3_Plate_Pants2|Hvy_Armorsmithing_T3_Plate_Shirt2|Hvy_Armorsmithing_T3_Plate_Helm_Set_1|Hvy_Armorsmithing_T3_Plate_Boots_Set_1|Leatherworking_T3_Leather_Armor_Set_1|Leatherworking_T3_Leather_Pants2|Leatherworking_T3_Leather_Shirt2|Leatherworking_T3_Leather_Helm_Set_1|Leatherworking_T3_Leather_Boots_Set_1|Tailoring_T3_Cloth_Boots_Set_1|Tailoring_T3_Cloth_Armor_Set_3|Tailoring_T3_Cloth_Armor_Set_2|Tailoring_T3_Cloth_Armor_Set_1|Tailoring_T3_Cloth_Pants2_Set2|Tailoring_T3_Cloth_Shirt2|Tailoring_T3_Cloth_Helm_Set_1|Artificing_T3_Pactblade_Temptation_5|Artificing_T3_Icon_Virtuous_5|Weaponsmithing_T3_Dagger_4|Weaponsmithing_T3_Longsword_Set_3|Weaponsmithing_T3_Mace_Set_3|Weaponsmithing_T3_Greatsword_Set_3|Weaponsmithing_T3_Dagger_Set_3|Weaponsmithing_T3_Blades_Set_3|Weaponsmithing_T3_Longbow_Set_3)$/, limit: 0};
_vendorItems[_vendorItems.length] = {
pattern: /^Potion_(Unstable|Unstable_[1-3])$/, limit : 0}; // Alchemy experience potions
}
// edited by RottenMind
if (_vendorItems.length > 0) {
//console.log("Attempting to vendor selected items...");
_sellCount = vendorItemsLimited(_vendorItems);
if (_sellCount > 0 && !evnt) {
var _sellWait = _sellCount * 1000;
PauseSettings("pause");
window.setTimeout(function () {
PauseSettings("unpause");
}, _sellWait);
}
}
}
/** Start, Helpers added by users.
* Adds fetures, options to base script and can be easily removed if needed
* Add description so anyone can see if they can use Function somewhere
* Use "brackets" around function start and end //yourname
*/
//RottenMind, returns inventory space, use Inventory_bagspace(); gives current free bags slots, from MAC-NW function
function Inventory_bagspace() {
var _pbags = client.dataModel.model.ent.main.inventory.playerbags;
var _bagUnused = 0;
$.each(_pbags, function (bi, bag) {
bag.slots.forEach(function (slot) {
if (slot === null || !slot || slot === undefined) {
_bagUnused++;
}
});
});
return _bagUnused;
}
/** Count resouce in bags
* edited by WloBeb
* @param {string} name The name of resource
*/
function countResource(name) {
var count = 0;
var _bags = unsafeWindow.client.dataModel.model.ent.main.inventory.bags;
//console.log("Checking bags for " + name);
$.each(_bags, function (bi, bag) {
bag.slots.forEach(function (slot) {
if (slot && slot.name === name) {
count = count + slot.count;
}
});
});
return count;
}
/** Report error in GM for later use
* edited by RM
*
*/
function Epic_button_error() {
var counter = GM_getValue('Epic_error', 0);
// //console.log('This script has been run ' + counter + ' times.');
GM_setValue('Epic_error', ++counter);
return counter;
}
function Array_undefine_error() {
var counter = GM_getValue('Undefine_error', 0);
// console.log('This script has been run ' + counter + ' times.');
GM_setValue('Undefine_error', ++counter);
return counter;
}
// This just set Banker to character 1 if its not him all-ready
function get_banker(){
var me = GM_getValue("nw_charname0",0);
var banker = GM_getValue("bankchar",0);
//console.log(me, banker);
if (me !== banker) {
GM_setValue('bankchar', me);
unsafeWindow.location.href = current_Gateway;
return;
}
}
/**
* Created by RM on 29.4.2015.
* Runs daily SCA -rolls in GAteway Bot
*/
function dailySCA() {
if (settings["dailySCA"]) {
var char, today, thisday, thishour, dailyroll, dateforlastroll;
char = settings["charcount"];
today = new Date();
thisday = today.getDay();
thishour = today.getHours();
dailyroll = GM_getValue("dailyswordcoast", 0);
dateforlastroll = GM_getValue("dateforlastrolls", 0);
console.log("run daily SCA"); //thisday, dateforlastroll, dailyroll, chardelay, thishour);
if (thisday !== dateforlastroll) {
GM_setValue("dateforlastrolls", thisday);
GM_setValue("dailyswordcoast", 0)
dailyroll = 0;
}
if (dailyroll < (99 || undefined) && chardelay > 10000 * char /*&& (thishour >= 14 || thishour >= 23)*/) {
unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')' + "/adventures");
processSwordCoastDailies();
dailyroll++;
GM_setValue("dailyswordcoast", dailyroll);
GM_getValue("dailyswordcoast", 0);
}
}
}
/** End, Helpers added by users.*/
// Add the settings button and start a process timer
addSettings();
timerHandle = window.setTimeout(function () {
process();
}, delay.SHORT);
/*This runs full SCA*/
//Newerwinter Gateway
function sca_infinite(sca_char, _has_nextTask,time_buffer, sca_tier) {
try {
console.log("we start run 1");
(function ($) {
var character = {
name: 'this guy',
assignments: {
filter: {
sort: 'asc|desc',
hide_abovelevel: true || false,
hide_unmetreqs: true || false
},
todo: [],
tasks: {
leadership: [],
leatherworking: [],
tailoring: [],
mailsmithing: [],
platesmithing: [],
artificing: [],
weaponsmithing: [],
alchemy: []
}
}
};
$.extend(true, {nwg: {}});
}(jQuery));
//taskPromise
(function ($) {
//$.getScript("https://rawgithub.com/KanbanSolutions/Math.uuid.js/master/Math.uuid.js");
/*!
Math.uuid.js (v1.4)
http://www.broofa.com
mailto:robert@broofa.com
Copyright (c) 2010 Robert Kieffer
Dual licensed under the MIT and GPL licenses.
*/
/*
* Generate a random uuid.
*
* USAGE: Math.uuid(length, radix)
* length - the desired number of characters
* radix - the number of allowable values for each character.
*
* EXAMPLES:
* // No arguments - returns RFC4122, version 4 ID
* >>> Math.uuid()
* "92329D39-6F5C-4520-ABFC-AAB64544E172"
*
* // One argument - returns ID of the specified length
* >>> Math.uuid(15) // 15 character ID (default base=62)
* "VcydxgltxrVZSTV"
*
* // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)
* >>> Math.uuid(8, 2) // 8 character ID (base=2)
* "01001010"
* >>> Math.uuid(8, 10) // 8 character ID (base=10)
* "47473046"
* >>> Math.uuid(8, 16) // 8 character ID (base=16)
* "098F4D35"
*/
(function () {
// Private array of chars to use
var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
Math.uuid = function (len, radix) {
var chars = CHARS, uuid = [], i;
radix = radix || chars.length;
if (len) {
// Compact form
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
// rfc4122, version 4 form
var r;
// rfc4122 requires these characters
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
// Fill in random data. At i==19 set the high bits of clock sequence as
// per rfc4122, sec. 4.1.5
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
};
// A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance
// by minimizing calls to random()
Math.uuidFast = function () {
var chars = CHARS, uuid = new Array(36), rnd = 0, r;
for (var i = 0; i < 36; i++) {
if (i == 8 || i == 13 || i == 18 || i == 23) {
uuid[i] = '-';
} else if (i == 14) {
uuid[i] = '4';
} else {
if (rnd <= 0x02) rnd = 0x2000000 + (Math.random() * 0x1000000) | 0;
r = rnd & 0xf;
rnd = rnd >> 4;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
return uuid.join('');
};
// A more compact, but less performant, RFC4122v4 solution:
Math.uuidCompact = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
})();
var Task = function (start_method, call_args) {
this.id = Math.uuidFast();// https://github.com/KanbanSolutions/Math.uuid.js
this.steps = [];
this.then(start_method, call_args);
this.finished = false;
};
Task.prototype.then = function (step_method, call_args) {
//console.log("then: " + call_args);
var defered = $.Deferred();
defered.then(this.Step(step_method, call_args));
this.steps.push(defered);
return this;
};
Task.prototype.insert = function (step_method, call_args) {
//console.log("then: " + call_args);
var defered = $.Deferred();
defered.then(this.Step(step_method, call_args));
this.steps.splice(1, 0, defered);
return this;
};
Task.prototype.Step = function (step_method, call_args) {
var self = this;
var wrap = function () {
var args = call_args || [];
//console.log("wrap for " + self.id);
if (!args.length && arguments.length) {
args = [].slice.call(arguments);
}
if (!$.isArray(args)) {
args = $.makeArray(args);
}
args.push(self);
var results = step_method.apply(self, args);
if (this.finished) return;
var delay = results === undefined || results.delay === undefined ? 0 : results.delay;
//console.log("[results=" + results + "] [steps.length=" + this.steps.length + "]");
if (results === undefined && self.steps.length === 0) {
/*
I don't know why I need to bounce out here, it fails if I don't.
*/
//console.log("exiting on thingy");
return;
}
if (results !== undefined && results.error) {
//console.log("retry needed");
self.retry.call(self, delay, step_method, args);
} else {
//console.log("no retry needed");
if (!results) results = {};
//console.log('promise: ' + call_args);
//console.log('promise: ' + args);
args = results.args || [];
args.unshift(delay);
self.steps.shift();
self.progress.apply(self, args);
}
};
return wrap;
};
Task.prototype.retry = function (delay, step_method, args) {
//console.log("retry");
this.steps.shift();
var defered = $.Deferred();
defered.then(this.Step(step_method, args));
this.steps.unshift(defered);
this.progress(delay);
return this;
};
Task.prototype.progress = function (delay) {
if (!delay) {
delay = 0;
}
var args = [].slice.call(arguments);
var self = this;
//Moving from progress
if (!($.task.executing === self.id || $.task.executing === null)) {
setTimeout(function () {
self.progress.apply(self, args);
}, Math.max(delay, 3000));
return;
}
$.task.executing = this.id;
args.shift();
var execute = function () {
//console.log("execute");
if (!self.steps.length) {
self.finish();
return;
}
var defered = self.steps[0];
defered.resolve.apply(null, args);
}
if (delay > 0) {
setTimeout(execute, delay);
} else {
requestAnimationFrame(execute);
}
return this;
};
Task.prototype.start_in = function (delay) {
if (!delay) {
delay = 0;
}
var args = [].slice.call(arguments);
var self = this;
args.shift(); //remove the delay from the args
setTimeout(function () {
self.progress.apply(self, args);
}, delay);
return this;
}
Task.prototype.finish = function () {
//console.log("finish");
var self = this;
this.steps = [];
$.task.executing = null;
this.finished = true;
requestAnimationFrame(function () {
delete self;
});
};
$.extend(true, {
task: {
create: function (start_method, call_args) {
return new Task(start_method, call_args);
},
executing: null
}
});
}(jQuery));
//switchtochar
(function ($) {
var ChangeToCharacter = function (character) {
this.characterName = character.name;
};
ChangeToCharacter.prototype.activate = function activate(task) {
if (!this.isActiveCharacter()) {
task.insert(this.openSelector.bind(this));
task.insert(this.selectCharacter.bind(this));
}
else {
console.log(this.characterName + " is currently active");
}
return {
error: false,
delay: 100
};
};
ChangeToCharacter.prototype.openSelector = function openSelector() {
// var changeCharacterText = 'Change Character'
//$('a:contains(' + changeCharacterText + ')').trigger('click');
return {
error: false,
delay: 1000
};
};
ChangeToCharacter.prototype.selectCharacter = function selectCharacter() {
var self = this;
//$('a > h4.char-list-name:contains(' + this.characterName + ')').trigger('click');
return {
error: false,
delay: 1000
};
};
ChangeToCharacter.prototype.isActiveCharacter = function isActiveCharacter() {
return $('.name-char:contains(' + this.characterName + ')').length > 0
};
$.extend(true, $.nwg, {
changeCharacter: {
create: function (character) {
return new ChangeToCharacter(character);
}
}
});
}(jQuery));
//professiontask
(function ($) {
var data = {
name: {
leadership: 'leadership',
leatherworking: 'leatherworking',
tailoring: 'tailoring',
mailsmithig: 'mailsmithing',
platesmithing: 'platesmithing',
artificing: 'artificing',
weaponsmithing: 'weaponsmithing',
},
selector: {
overview: '.professions-overview:visible',
leadership: '.professions-Leadership:visible',
leatherworking: '.professions-Leatherworking:visible',
tailoring: '.professions-Tailoring:visible',
mailsmithing: '.professionss-Armorsmithing_Med:visible',
platesmithing: '.professions-Armorsmithing_Heavy:visible',
artificing: '.professions-Artificing:visible',
alchemy: '.professions-Alchemy:visible',
weaponsmithing: '.professions-Weaponsmithing'
},
text: {
ok: 'OK',
_continue: 'Continue',
startTask: 'Start Task',
chooseTask: 'Choose Task',
collectResult: 'Collect Result',
finishNow: 'Finish Now'
}
};
var Profession = function (character) {
/*var assignments = {
filter:{
sort: 'asc|desc',
hide_abovelevel: true||false,
hide_unmetreqs: true||false
},
todo:[],
tasks:{
leadership: [],
leatherworking: [],
tailoring : [],
mailsmithing: [],
platesmithing: [],
artificing: [],
weaponsmithing: [],
alchemy:[]
}
};*/
this.character = character;
//The site has an issue with professions and going to more than 3
this.assignments = this.character.assignments;
this.assignments.todo = this.assignments.todo.slice(0, 3);
this.changeCharacter = $.nwg.changeCharacter.create(this.character);
};
Profession.prototype.make_profession_active = function (task) {
//console.log("make_profession_active");
var tab = $('.nav-professions');
if (!tab.hasClass('selected')) {
tab.trigger('click');
return {
error: false,
delay: 3000
};
}
return {
error: false,
delay: 1000
};
};
Profession.prototype.change_to_overview = function (task) {
//console.log("change_to_overview");
if (!$('.page-professions-overview').is(':visible')) {
$(data.selector.overview).trigger('click');
return {
error: false,
delay: 3000
};
}
return {
error: false,
delay: 0
};
};
Profession.prototype.check_job_progress = function (old_task) {
//console.log("check_job_progress");
var self = this;
var slots = $('.task-slot-finished');//$('.task-slot-locked, .task-slot-progress, .task-slot-finished, .task-slot-open');
slots = slots.add('.task-slot-open');
slots = slots.add('.task-slot-progress');
slots.each(function (idx, slot) {
slot = $(slot);
var time_left = slot.find('.bar-text').text();
var button_msg = slot.find('.input-field button').text();
var delay = 0,
task;
task = self.create_base_task();
if (slot.hasClass('task-slot-finished')) {
task.then(self.collect_reward.bind(self));
task.then(self.accept_reward.bind(self));
} else if (slot.hasClass('task-slot-open')) {
task.then(self.start_job.bind(self));
} else if (slot.hasClass('task-slot-progress')) {
task.then(self.start_from_progress_bar.bind(self), [slot]);
}
task.start_in(1500);
});
old_task.finish();
};
Profession.prototype.start_from_progress_bar = function start_from_progress_bar(slot, task) {
//console.log("start_from_progress_bar");
/*
This should only ever be called from check_job_progress
*/
var delay = this.getSlotDelay(slot);
var new_task = this.create_base_task();
new_task.then(this.start_job.bind(this));
new_task.start_in(delay);
task.finish();
};
Profession.prototype.start_job = function start_job(task) {
//console.log("start_job");
var job = this.assignments.todo[0];
var selector = data.selector[job];
$(selector).trigger('click');
task.then(this.assignment_filter.bind(this));
task.then(this.assignment_sort.bind(this));
task.then(this.find_assignment.bind(this), job);
task.then(this.select_assignment.bind(this));
/*
var catchEmpties = $('button:contains(' + data.text.chooseTask + ')').trigger('click');
if(catchEmpties.length >= 2){//Obviously the current will
//console.log("Found more than 2 [" + data.text.chooseTask + "]");
var new_task = this.create_base_task();
new_task.then(this.start_job.bind(this));
new_task.start_in(1500);
}
*/
return {
error: false,
delay: 3000
};
};
Profession.prototype.assignment_filter = function assignment_filter(task) {
//console.log("assignment_filter");
var filterCheckBoxes = ['hide_abovelevel', 'hide_unmetreqs'];
for (var i = 0; i < filterCheckBoxes.length; i++) {
var checkbox = filterCheckBoxes[i];
if (!$('[name=' + checkbox + ']').is(':checked')) {
//console.log("checking the box=" + checkbox);
$('input[name=' + checkbox + ']').parent().trigger('click');
} else {
//console.log("NOT checking the box=" + checkbox);
}
}
return {
error: false,
delay: 700
};
};
Profession.prototype.assignment_sort = function assignment_sort(task) {
//console.log("assignment_sort");
var selector = $('[name=sort_level]');
selector.val(this.assignments.filter.sort);
selector.trigger('change');
return {
error: false,
delay: 1500
};
};
Profession.prototype.find_assignment = function find_assignment(job, task) {
//console.log("find_assignment");
var titles = this.assignments.tasks[job];
//console.log(titles);
var assignment = undefined;
while (!assignment) {
var availableTasks = $('.task-list-entry');
for (var i = 0; i < titles.length && assignment === undefined; i++) {
var title = titles[i].trim();
//console.log("title = " + title);
var availableTask = availableTasks.find('h4:contains(' + title + ')').parents('.task-list-entry');
//console.log("availableTaskLength=" + availableTask.length );
if (availableTask.length > 0) {
//console.log("found");
assignment = availableTask.eq(0);
}
}
if (!$('.paginate_enabled_next').is(':visible') && assignment === undefined) {
//console.log("No next");
break;
} else if (assignment === undefined) {
//console.log("next");
$('.paginate_enabled_next').trigger('click');
}
}
//console.log(assignment);
var name = this.assignments.todo.shift();
this.assignments.todo.push(name);
if (!assignment) {
//console.log("assignment still null");
//console.log(assignment);
var new_task = this.create_base_task();
new_task.then(this.start_job.bind(this));
new_task.start_in(1500);
task.finish();
return;
}
return {
error: false,
delay: 3000,
args: [assignment]
};
};
Profession.prototype.select_assignment = function select_assignment(assignment, task) {
//console.log("select_assignment");
assignment.find('button:contains(' + data.text._continue + ')').trigger('click');
task.then(this.select_assets.bind(this));
return {
error: false,
delay: 3000
};
};
Profession.prototype.select_assets = function select_assets(task) {
//console.log("select_assets");
var assetsCount = $('.icon-block.large.any-crafting.Junk.empty').length;
if (assetsCount > 0) {
task.then(this.open_asset_modal.bind(this));
for (var i = 0; i < assetsCount - 1; i++) {
task.then(this.select_asset_item.bind(this));
task.then(this.open_asset_modal.bind(this));
}
task.then(this.select_asset_item.bind(this));
}
task.then(this.start_task.bind(this));
return {
error: false,
delay: 3000
};
};
Profession.prototype.open_asset_modal = function open_asset_window(task) {
//console.log("open_asset_modal");
var delay = 500;
var assets = $('.icon-block.large.any-crafting.Junk.empty');
if (assets.length > 0) {
$(assets[0]).find('button').trigger('click');
delay = 1000;
}
return {
error: false,
delay: delay
};
};
Profession.prototype.select_asset_item = function select_asset_item(task) {
//console.log("select_asset_item");
var delay = 1000;
var special = $('.modal-item-list').find('.icon-block.simple.Special');
var gold = $('.modal-item-list').find('.icon-block.simple.Gold');
var silver = $('.modal-item-list').find('.icon-block.simple.Silver');
var bronze = $('.modal-item-list').find('.icon-block.simple.Bronze');
if (special.length > 0) {
$(special[0]).trigger('click');
} else if (gold.length > 0) {
$(gold[0]).trigger('click');
} else if (silver.length > 0) {
$(silver[0]).trigger('click');
} else if (bronze.length > 0) {
$(bronze[0]).trigger('click');
}
else {
var close = $('.modal-content > .close-button');
if (close) {
close.trigger('click');
}
else {
delay = 0;
}
}
return {
error: false,
delay: delay
};
};
Profession.prototype.start_task = function start_task(task) {
//console.log("start_task");
var delay = 0;
var startBtn = $('div :not(.disabled) >button:contains(' + data.text.startTask + ')');
if (startBtn.length > 0) {
startBtn.trigger('click');
delay = this.getDelay();
}
else {
//Tried to start new when no space is available
//console.log("we're trying again in 3s");
delay = 3000;
}
//console.log(delay);
var new_task = this.create_base_task();
new_task.then(this.collect_reward.bind(this));
new_task.then(this.accept_reward.bind(this));
new_task.start_in(delay);
task.finish();
};
Profession.prototype.collect_reward = function collect_reward(task) {
//console.log("collect_reward");
var rewards = $('button:contains(' + data.text.collectResult + ')');
rewards.eq(0).trigger('click');
return {
error: false,
delay: 2000
};
};
Profession.prototype.accept_reward = function accept_reward(task) {
//console.log("accept_reward");
$('.modal-window button:contains(' + data.text.collectResult + ')').trigger('click');
var new_task = this.create_base_task();
new_task.then(this.start_job.bind(this));
new_task.start_in(3000);
task.finish();
};
Profession.prototype.create_base_task = function create_base_task() {
//console.log("create_base_task");
var self = this;
var task = $.task.create(this.changeCharacter.activate.bind(this.changeCharacter));
task.then(this.make_profession_active.bind(this));
task.then(this.change_to_overview.bind(this));
return task;
};
Profession.prototype.getDelay = function getDelay() {
var timeBarText = $('.task-duration-time').text();
var times = timeBarText.split(" ");
var hours = 0;
var minutes = 0;
var seconds = 0;
for (var i = 0; i < times.length; i++) {
var str = times[i];
if (str.indexOf('h') > 0) {
hours = parseInt(str);
}
else if (str.indexOf('m') > 0) {
minutes = parseInt(str);
}
else if (str.indexOf('s') > 0) {
seconds = parseInt(str);
}
}
minutes = hours * 60 + minutes;
seconds = minutes * 60 + seconds;
var milliseconds = (seconds * 1000) + Math.floor((Math.random() * 1000) + 1)
var d = new Date();
d.setMilliseconds(d.getMilliseconds() + milliseconds);
console.log("[task=" + $('.taskdetails-header > h2').text() + "] for " + this.character.name + " delayed for "
+ milliseconds + " ms at " + new Date().toLocaleString()
+ " resuming at " + d.toLocaleString() + " [timeText=" + timeBarText + "]");
return milliseconds;
};
Profession.prototype.getSlotDelay = function getSlotDelay(slot) {
var timeBarText = slot.find('.bar-text').text();
//console.log("timebar=" + timeBarText);
var times = timeBarText.split(" ");
var hours = 0;
var minutes = 0;
var seconds = 0;
for (var i = 0; i < times.length; i++) {
var str = times[i];
if (str.indexOf('h') > 0) {
hours = parseInt(str);
} else if (str.indexOf('m') > 0) {
minutes = parseInt(str);
} else if (str.indexOf('s') > 0) {
seconds = parseInt(str);
}
}
minutes = hours * 60 + minutes;
seconds = minutes * 60 + seconds;
var milliseconds = seconds * 1000;
var d = new Date();
d.setMilliseconds(d.getMilliseconds() + milliseconds);
console.log("[slot=" + slot.find('h4').text() + "] for " + this.character.name + " delayed for "
+ milliseconds + " ms at " + new Date().toLocaleString()
+ " resuming at " + d.toLocaleString() + " [slotText=" + timeBarText + "]");
return milliseconds + 2000;//We wait an extra bit
};
$.extend(true, $.nwg, {
profession: {
create: function (character) {
return new Profession(character);
}
}
});
}(jQuery));
//swordcoastadventure
(function ($) {
var data = {
state: {
isOverWorld: function () {
return $('.overworld-locations').is(':visible');
},
isChooseParty: function () {
return $('.page-dungeon-chooseparty').is(':visible');
},
isAdventure: function () {
return $('.dungeon-map-inner').is(':visible') && !$('.modal-window').is(':visible');
},
isSelectEncounterCompanion: function () {
return $('.encounter-party-list').is(':visible');
},
isEncounter: function () {
return $('.page-dungeon-combat').is(':visible') &&
(!$('.modal-window').is(':visible') ||
$('.modal-confirm.combat-wild > h3:contains(' + data.text.criticalHit + ')').is(':visible'));
},
isDiceRoller: function () {
return $('.combatDiceBox').is(':visible') && !$('.modal-window').is(':visible');
},
isCombatVictory: function () {
return $('.modal-confirm.combat-victory').is(':visible');
},
isModal: function () {
return $('.modal-window').is(':visible');
}
},
text: {
chooseYourParty: 'Choose Your Party',
ok: 'OK',
d20: 'D20',
criticalHit: 'Critical Hit!'
}
};
var Adventure = function (character) {
this.character = character;
this.changeCharacter = $.nwg.changeCharacter.create(this.character);
this.adventures = this.character.adv;
this.dicePicker = $.nwg.dicePicker.create(this.character, $.nwg.dicePickerBrain.create());
};
Adventure.prototype.make_adventure_active = function (task) {
$('.nav-dungeons').trigger('click');
return {
error: false,
delay: 3000
};
};
Adventure.prototype.check_adventure_state = function (task) {
console.log("check_adventure_state 1");
//var task = self.crete_base_task();
/*
if (window.self !== window.top) {
throw "";
Should only be called from the crate_base_task method
*/
if (data.state.isOverWorld()) {
console.log("isOverWorld");
task.then(this.start_adventure.bind(this))
task.then(this.confirm_adventure.bind(this));
}
else if (data.state.isChooseParty()) {
console.log("isChooseParty");
task.then(this.clear_adventure_party.bind(this));
task.then(this.select_adventure_party.bind(this));
task.then(this.comfirm_adventure_party.bind(this));
}
else if (data.state.isAdventure()) {
console.log("isAdventure");
task.then(this.select_encounter.bind(this));
}
else if (data.state.isEncounter()) {
console.log("isEncounter");
task.then(this.dicePicker.pick_die.bind(this.dicePicker));
task.then(this.clear_modal.bind(this));
task.then(this.check_adventure_state.bind(this));
}
else if (data.state.isSelectEncounterCompanion()) {
console.log("isSelectEncounterCompanion");
task.then(this.select_encounter_companion.bind(this));
}
else if (data.state.isCombatVictory()) {
console.log("isCombatVictory");
task.then(this.clear_modal.bind(this));
task.then(this.check_adventure_state.bind(this));
}
else if (data.state.isModal()) {
console.log("isModal");
task.then(this.clear_modal.bind(this));
task.then(this.check_adventure_state.bind(this));
}
//else
return {
error: false,
delay: 3000
};
};
Adventure.prototype.start_adventure = function (task) {
//console.log("start_adventure");
var curTier = this.adventures[0].tier;
//console.log("Running " + curTier);
$('a.' + curTier).trigger('click');
return {
error: false,
delay: 3000
};
};
Adventure.prototype.confirm_adventure = function (task) {
//console.log("confirm_adventure");
$('.choosePartyButton > button:contains(' + data.text.chooseYourParty + ')').trigger('click');
var new_task = this.create_base_task();
new_task.start_in(1000);
task.finish();
};
Adventure.prototype.select_adventure_party = function (task) {
//console.log("select_adventure_party");
//select adventure party member (which attemps to cancel the confirm if up THEN clears THEN selects)
var PARTY_SIZE = 4;
var adventureCompanions = this.adventures[0].companions;
var self = this;
var companionsToSelect = [];
var requiredCompanions = [];
var optionalCompanions = [];
var totalCompanionCount = $('.party-entry.full-sheet:not(.promo)').length;
var disabledCount = $('.party-entry.full-sheet.disabled:not(.training)').length;
var trainingCount = $('.party-entry.full-sheet.training').length;
var maxAvailableCount = totalCompanionCount - disabledCount;
var availableCompanions = $('.party-entry.full-sheet.available:not(.promo)>a:not(.selected)');
//console.log("available party");
//console.log(availableCompanions);
//console.log("total: " + totalCompanionCount);
//console.log("disabled: " + disabledCount);
//console.log("training: " + trainingCount);
//console.log("maxAvailable: " + maxAvailableCount);
if (adventureCompanions && adventureCompanions.length > 0 &&
totalCompanionCount > PARTY_SIZE && maxAvailableCount > PARTY_SIZE) {
//console.log("many available");
$(availableCompanions).each(function (indx, aCmp) {
var availableCompanion = $(aCmp);
var matched = false;
$(adventureCompanions).each(function (indx, cmp) {
var companion = availableCompanion.has(':contains(' + cmp.name + ')');
if (companion.length === 1) {
matched = true;
if (cmp.required) {
requiredCompanions.unshift(companion);
}
else if (!cmp.excluded) {
optionalCompanions.unshift(companion);
}
}
});
if (!matched) {
optionalCompanions.push(availableCompanion);
}
//console.log("rC=" + requiredCompanions.length + " | oC=" + optionalCompanions.length);
});
if (requiredCompanions.length + optionalCompanions.length >= PARTY_SIZE) {
for (var i = 0; i < requiredCompanions.length && i < PARTY_SIZE; i++) {
companionsToSelect.push($(requiredCompanions[i]));
}
for (var ii = 0; ii < optionalCompanions.length && ii < PARTY_SIZE && ii < PARTY_SIZE - requiredCompanions.length; ii++) {
companionsToSelect.push($(optionalCompanions[ii]));
}
}
}
else if ((totalCompanionCount <= PARTY_SIZE && disabledCount === 0) ||
(maxAvailableCount >= PARTY_SIZE)) {
//console.log("available compansions are all");
companionsToSelect = availableCompanions;
}
if (companionsToSelect.length > 0) {
for (var i = 0; i < companionsToSelect.length && i < PARTY_SIZE; i++) {
$(companionsToSelect[i]).trigger('click');
}
}
else {
//console.log("Not enough compansions available")
var delay = this.get_delay();
var new_task = this.create_base_task();
new_task.then(this.back_to_map.bind(this));
new_task.start_in(delay);
//Go to the next adventure group
task.finish();
return;
}
return {error: false, delay: 2000};
};
Adventure.prototype.back_to_map = function (task) {
$('a.chooseparty-back').trigger('click');
return {error: false, delay: 2000};
};
Adventure.prototype.clear_adventure_party = function (task) {
console.log("clear_adventure_party");
var partyCloseButtons = $('.party-entry > button.close-button');
partyCloseButtons.each(function (idx, btn) {
$(btn).trigger('click');
});
return {
error: false,
delay: 1000
};
};
Adventure.prototype.comfirm_adventure_party = function (task) {
//console.log("comfirm_adventure_party");
$('.modal-window button:contains(' + data.text.ok + ')').trigger('click');
task.then(this.start_new.bind(this));
return {
error: false,
delay: 1000
};
};
Adventure.prototype.start_new = function (old_task) {
var new_task = this.create_base_task();
new_task.start_in(1000);
old_task.finish();
}
Adventure.prototype.select_encounter = function (task) {
//console.log("select_encounter");
if ($('.dungeon-map-inner').length === 0) {
//console.log("Dungeon not ready");
return {
error: false,
delay: 1000
};
}
var encounters = $('.overlay.button:not(.complete, .exit, .boss, .stairs-down, .stairs-up)');
var stairsDown = $('.overlay.button.stairs-down');
var boss = $('.overlay.button.boss');
var exit = $('.overlay.button.exit');
var stairsUp = $('.overlay.button.stairs-up');
var oneHealthPx = parseInt($('.bar-tick-container > .bar-tick').eq(0).css('left')) + 2;// 2 for safety
var curHealthPx = parseInt($('.bar-filled.health-now').css('width'));
var encounter = undefined;
//console.log("[oneHealthPx=" + oneHealthPx + "] [curHealthPx=" + curHealthPx + "]");
if (oneHealthPx >= curHealthPx) {//We don't want to lose out lewts; bail.
if (stairsUp.length > 0) {
encounter = stairsUp.eq(0);
}
else if (exit.length > 0) {
encounter = exit.eq(0);
task.then(this.clear_modal);//OK Exit
task.then(this.clear_modal);//Accept Rewards
}
task.then(this.start_new.bind(this));
}
else {
if (encounters.length > 0) {
encounter = encounters.eq(0);
}
else if (stairsDown.length > 0) {
encounter = stairsDown.eq(0);
}
else if (boss.length > 0) {
encounter = boss.eq(0);
}
task.then(this.select_encounter_companion.bind(this));
}
encounter.trigger('click');
return {
error: false,
delay: 1000
};
};
Adventure.prototype.select_encounter_companion = function (task) {
//console.log("select_encounter_companion");
var companions = $('a.selectable');
if (companions.length >= 1) {
$('a.selectable').eq(0).trigger('click');
}
;
var new_task = this.create_base_task();
new_task.start_in(1000);
task.finish();
};
Adventure.prototype.clear_modal = function (task) {
var m = $('.modal-window');
var okBtn = m.find('button:contains(' + data.text.ok + ')')
var d20Btn = m.find('button:contains(' + data.text.d20 + ')');
if (okBtn.length === 1) {
okBtn.trigger('click');
}
if (d20Btn.length === 1) {
d20Btn.trigger('click');
}
return {
error: false,
delay: 1000
};
};
Adventure.prototype.get_delay = function (task) {
var availableCompanions = $('.party-entry.full-sheet.available:not(.promo)>a:not(.selected)');
if (availableCompanions.length >= 4) {
//The idea here is that SOME set might have the ability to run, so we need to try
return 60 * 1000;//in a minute
}
var reqStam = $('.chooseparty-stamina .number').eq(0).text();
var belowStamComp = $('.party-entry.full-sheet.disabled .party-stamina')
belowStamComp.sort(function (l, r) {
return (parseInt($(l).find('.below').text()) || 0) < (parseInt($(r).find('.below').text()) || 0);
});//Sorts lowest first
var stamDown = belowStamComp.eq(0).text().trim();
var missing = reqStam - stamDown;
if (missing <= 0) {
return 0;
}
var regenDelay = ((((missing - 1) * 8) + 1) * 60 * 1000);//Check in minutes if there's enough stamina
var d = new Date();
d.setMilliseconds(d.getMilliseconds() + regenDelay);
console.log("[Sword Coast Adventure for " + this.character.name + " delayed for "
+ regenDelay + " ms at " + new Date().toLocaleString()
+ " resuming at " + d.toLocaleString());
console.log(regenDelay);
return regenDelay;
};
Adventure.prototype.create_base_task = function create_base_task() {
//console.log("create_base_task");
var self = this;
var task = $.task.create(self.changeCharacter.activate.bind(this.changeCharacter));
task.then(self.make_adventure_active.bind(self));
task.then(self.check_adventure_state.bind(self));
return task;
};
$.extend(true, $.nwg, {
adventure: {
create: function (character) {
return new Adventure(character);
}
}
});
}(jQuery));
//dicepickertasks
(function ($) {
console.log("roll roll the Dice!!!");
var DicePicker = function (character, brain) {
this.brain = brain;
this.character = character;
this.rolling_ctr = 0;
};
DicePicker.prototype.pick_die = function (task) {
console.log("pick_die");
if (this.is_rolling()) {
//console.log("is_rolling");
//Add a check to not wait more than 10 times; instead end the task, start a new SCA task
//This will prevent getting stuck on the dice rolling screen, as has happened.
if (this.rolling_ctr++ > 10) {
return {
error: false,
delay: 1000
};
}
return {
error: true,
delay: 500 * this.rolling_ctr + 500
};
}
var die = this.brain.find_die();
if (!die) {
//console.log("no die");
return {
error: false,
delay: 1000
}
}
die.trigger('click');
task.insert(this.pick_die.bind(this));
return {
error: false,
delay: 1000
};
};
DicePicker.prototype.is_rolling = function () {
return $('.combatDiceBox').is(':visible') && !$('.modal-window').is(':visible');
};
$.extend(true, $.nwg, {
dicePicker: {
create: function (character, brain) {
return new DicePicker(character, brain);
}
}
});
}(jQuery));
//dicepickerbrains
(function ($) {
var DicePickerBrain = function () {
};
DicePickerBrain.prototype.find_die = function () {
if (this.is_critical()) {
return this.find_critical_die();
}
return this.find_tray_die();
};
DicePickerBrain.prototype.find_tray_die = function () {
var diceTray = $('.dice-tray-helper');
var use = diceTray.find('.dice.usable');
var disacard = diceTray.find('.dice.discardable');
if (use.length > 0) {
var max = 0;
var idx = -1;
use.sort(function (a, b) {
return (parseInt($(a).find('.num').text()) || 0) < (parseInt($(b).find('.num').text()) || 0);
});
return use.eq(0)
} else if (disacard.length > 0) {
return disacard.eq(0);
}
//console.log("no die found");
return undefined;
};
DicePickerBrain.prototype.find_critical_die = function () {
return $('.modal-confirm.combat-wild a.dice.usable').eq(0);
};
DicePickerBrain.prototype.is_critical = function () {
return $('.modal-confirm.combat-wild').is(':visible');
};
$.extend(true, $.nwg, {
dicePickerBrain: {
create: function () {
return new DicePickerBrain();
}
}
});
}(jQuery));
//This is my character definition
var thor = {
name: sca_char,
assignments: {
filter: {
sort: 'desc',
hide_abovelevel: true,
hide_unmetreqs: true
},
tasks: {},
todo: []
},
adv: [{
tier: sca_tier,
companions: []
}
]
};
//This starts the profession
//This starts the adventure
(function ($) {
var profTask = $.nwg.adventure.create(thor);
var task = profTask.create_base_task();
task.progress();
}(jQuery));
}catch (e) {location.reload(true); }
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment