Guest User

NW Prof Bot

a guest
Mar 21st, 2015
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 272.20 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Neverwinter gateway - Professions Robot
  3. // @description Automatically selects professions for empty slots
  4. // @namespace https://greasyfork.org/scripts/7061-neverwinter-gateway-professions-robot/
  5. // @include http://gateway*.playneverwinter.com/*
  6. // @include https://gateway*.playneverwinter.com/*
  7. // @include http://gateway.*.perfectworld.eu/*
  8. // @include https://gateway.*.perfectworld.eu/*
  9. // @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js
  10. // @resource jqUI_CSS http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/cupertino/jquery-ui.css
  11. // @originalAuthor Mustex/Bunta
  12. // @modifiedBy NW gateway Professions Bot Developers & Contributors
  13.  
  14. /*
  15. === NW Gateway Professions Bot Developers
  16. - Bluep, Numberb, mac-nw, Phr33d0m, BigRedBrent, noonereally, WloBeb
  17.  
  18. === NW Gateway Professions Bot Contributors
  19. - Kakoura, Nametaken, rotten_mind, Frankescript, dlebedynskyi
  20. */
  21.  
  22. // @version 2.0
  23. // @license http://creativecommons.org/licenses/by-nc-sa/3.0/us/
  24. // @grant GM_getValue
  25. // @grant GM_setValue
  26. // @grant GM_listValues
  27. // @grant GM_deleteValue
  28. // @grant GM_addStyle
  29. // @grant GM_getResourceText
  30. // ==/UserScript==
  31.  
  32. /* RELEASE NOTES
  33. 2.0
  34. - Additional UI changes.
  35. - Added resetable counters for refined AD.
  36. - Added stuck task trap (repeatition trap and restart). Thanks WloBeb
  37. - Added profession profiles by dlebedynskyi.
  38. 1.10.2RC1 for Greasyfork
  39. - UI improvement
  40. - removed "Save Task" & "Clear Task" buttons, on current build they do nothing
  41. - replaced JAVA string search(partially) for better multilingual support(tooltip translation not included)
  42. - reverted tasklist order to old(cosmetic change)
  43. - Replaced defaultTasklist with tasklist
  44. - Clear saved settings before re-saving
  45. - Added leadership asset auto buy
  46. - Improvements for AD transfer and reports to console log
  47. - added missing asset names
  48. - Added "Leadership XP" use second tasklist
  49. - Added "Gateway_Reward" collection
  50. - Added vendoring Rank 3 enchantments and runestones to UI
  51. - Added "Vendor all Altar Node skill kits" to UI
  52. - Edited vendoring rank 1 and rank 2 enchantments
  53. 1.10.1
  54. - Patern undefined bug fix
  55. 1.10.0 - Release Candidate
  56. - Vendor exclude filter has now higher "Safeguards" (it still might need added some unbound items eg. Glyphs, potions, etc)
  57. - Added vendor safeguards
  58. - Separated autovendor and profession items vendor
  59. - SCA daily reward collection by cycling through all configured characters (leaving SCA page will cancel the collection)
  60. - Multi URL support for testing
  61. - Support for gatewaytest, RU gateway (gateway.nw.ru.perfectworld.eu) and regular gateway
  62. 1.05.0.1k
  63. - RC2 for ver. 1.0.05.2
  64. - Added vendoring to UI
  65. - Added vendoring "safety" setting what check item is "unbound"
  66. - Code clearing
  67. 1.05.0.1j
  68. - RC1 for ver. 1.05.0.2
  69. - Rebuild sell items selection method making it more comprehensive
  70. - Vendoring function now use array to vendor item objects
  71. - Updated vendoring list
  72. - Sell all runestones and enchantments rank 1 & rank 2
  73. - Limit, altars 80, skill kits 50, healing potions T 1 - 3 10
  74. - Re-edited warning "Tooltip"- selecting "what skill kit character not need" when selling
  75. - Merged back the split of the pause function
  76. - Added a parameter to specify pause/unpause/toggle (defaults to toggle as in original behavior)
  77. - Tasklist updates
  78. BETA 1.05.0.1i
  79. - Edited "sell items" list
  80. - Edited/added WARNING´s on tooltip
  81. BETA 1.05.0.1h
  82. - Added "sell skill kits", works same as "open_rewards" (experimental, inventory cleaning needs more specific "sell filter" and event what trigger "sell")
  83. - Changed switching character and completing character task logic, trying prevent wrong task execution after switch
  84. - Refined "save settings" function
  85. - WinterEvent tasklist got new additions
  86. 1.05.01G
  87. - Github release
  88. 1.05.0.1f
  89. - Minor tasklist updates
  90. - Added button "open all(99)", opens rewardchest
  91. - Fixed "open rewardchest" disconnect issues(need furter testing, RM)
  92. - Fixed unnecessary ZEX visit´s
  93. -
  94. 1.05.0.1e
  95. - Info page updates for non-compatible browser/XXXmonkey
  96. 1.05.0.1d
  97. - WinterEvent tasks added
  98. - Added AD transfer automation
  99. - Settings Panel UI: Increased size and implemented two columns for options to minimize vertical length. Also implemented new radio and button styles.
  100. 1.05.0.1c
  101. - UI feature: Limit the gateway popup notification messages that appear at the top of the screen to a max of 2 notifications. The oldest (first) notification will always be removed when reaching the limit.
  102. 1.05.0.1b
  103. - Added Reward Chest Opening Option
  104. - Added All button when selling from inventory
  105. - Added condition check for profession slot input val > 0 when processing tasks
  106. 1.05.0.1 (v1, mod 5)
  107. - Started with bluep's edits (https://greasyfork.org/en/forum/discussion/270/x)
  108. - Edited back in leadership asset priority (https://greasyfork.org/en/forum/discussion/comment/7213/#Comment_7213)
  109. - Edited in Jewelcrafting for Mod5 (https://greasyfork.org/en/forum/discussion/comment/6930/#Comment_6930)
  110. - Modified the default leadership tasks to prioritize AD generation (feel free to rever)
  111. /* End Bunta's Edits?
  112. 1.0.0.3
  113. - Fix some gem trading tasks not being filtered correctly
  114. - Add check for gateway disconnected
  115. 1.0.0.2
  116. - Fix leadership tasks not creating assets correctly
  117. - Add option to save task lists per character (experimental)
  118. 1.0.0.1
  119. - Rewrite script using client.dataModel methods to massively improve reliability and performance (thanks Msc)
  120. - AD refining will now only attempt to refine if you are able to collect diamonds
  121. - Change task lists to use exact task names so no ambiguity exists (no longer requires excluderare option)
  122. - Asset resources are now trained as needed (only for required slots)
  123. 0.3.0.5
  124. - Fix resources not buying correctly in all cases
  125. - Fix pause button state saving correctly in firefox
  126. 0.3.0.4
  127. - Add page timeout reloading functions outside of main function (thanks Kreese and Frabtik)
  128. - Add check to ensure tasks are being started for the correct character
  129. - Alter next run resolve function to use delay parameter to allow for unique delay timers to be used in certain cases
  130. 0.3.0.3
  131. - Fix ingredient task selection to correctly iterate through all ingredient tasks
  132. - Alter character selection to pick only exact character name matches
  133. - Update leadership tasks
  134. 0.3.0.2
  135. - Exclude alchemy from rare task exclusions due to Aqua Regia (thanks Eversor)
  136. - Reduce GM_setValue calls to avoid tampermonkey failing to save settings (thanks miah)
  137. 0.3.0.1
  138. - Altered mutichar selector to be faster (thanks miah)
  139. - Updated rare tasks selector (thanks Traktor)
  140. - Add option to refine AD during character switching (thanks Eversor)
  141. - Added some level 20 gather tasks
  142. - Increased supply buying to 100 units
  143. 0.3.0.0
  144. - Added Multi-Character support
  145. - Added function to clear all saved settings for script
  146. - Remove disable sound functionality (now configurable in gateway)
  147. 0.2.0.1.8
  148. - Added pause button to allow easy on/off switching
  149. 0.2.0.1.7
  150. - Added option to enable/disable filling optional asset slots
  151. - Added batch potions tasks to be skipped in ingredient selection
  152. - Added timer to reload page if stuck loading for too long
  153. - Added option to disable page sounds
  154. - Updated license to by-nc-sa
  155. 0.2.0.1.6
  156. - Add configurable option for excluding rare tasks
  157. 0.2.0.1.5
  158. - Add ability to specify specific level for tasks and configure same named artificing resource tasks to request correct level of task
  159. - Remove purchase notification that never times out
  160. 0.2.0.1.4
  161. - Added functionality to purchase required resources from gateway shop
  162. 0.2.0.1.3
  163. - Add Artificing and Weaponsmithing to Robot
  164. (Artificing will not work properly yet as all three tiers of gather and craft tasks have the same task name)
  165. 0.2.0.1.2
  166. - Update reload process
  167. - Fix optional asset selector with gateway update
  168. 0.2.0.1.1
  169. - Simplify asset selection after they fixed bug in previous gateway update
  170. - Update level 20 leadership tasks
  171. - Update with changes in Mustex's script (version 15)
  172. * Added a secondary timer that will reload the gateway every few hours. This should help with disconnects from the server
  173. * Implemented tooltips for settings panel
  174. 0.1.9.1.15
  175. - Repeat task reordering for +2 armor
  176. 0.1.9.1.14
  177. - Fix selection of assets after gateway update
  178. - Skip intensive gather tasks added after gateway update
  179. 0.1.9.1.13
  180. - Change ordering of tasks and ingredient checks
  181. The purpose of this is to allow crafting of +4 armors if you have +2 ingredients in your inv but to not create them if you don't.
  182. Creating the ingredients for them is less efficient than crafting ingredients for pants but is more efficient if you already have the ingredients from earlier tasks.
  183. 0.1.9.1.12
  184. - Optimise crafting tasks for highest exp/min gains due to ingredient requirements
  185. 0.1.9.1.11
  186. - Add extra craft tasks for when residuum runs out
  187. 0.1.9.1.10
  188. - Only allow rare tasks to be selected for Leadership
  189. This avoids craft loops where higher quality rare crafts require ingredients with the same name
  190. 0.1.9.1.9
  191. - Alter craft tasks to favour armor to optimise inventory space
  192. 0.1.9.1.8
  193. - Fix script restart bug when no tasks found
  194. 0.1.9.1.7
  195. - Update search string for Potions (After the task names for elxiirs have been changed)
  196. - Remove logon error skips to avoid logons sometimes failing on first load (ensure logon details are correct!)
  197. 0.1.9.1.6
  198. - Update tasks for all professions
  199. - Update ingredient search lists for all professions
  200. 0.1.9.1.5
  201. - Fix regular expression used in potion ingredient search
  202. 0.1.9.1.4
  203. - Alter default timeouts (makes script a lot more stable and less prone to errors)
  204. - Remove unused variable
  205. - Add extra logging for task ingredient searches
  206. 0.1.9.1.3
  207. - Fix bug with required resource checks getting stuck on non craftable resources
  208. 0.1.9.1.2
  209. - Added method to check for required task ingredients and choose tasks to create them
  210. Method is currently hard coded to specify certain search strings for ingredient types
  211. Currently working for all Alchemy tasks
  212. There is a current problem that if you have the required potion ingredient but it is in your belt slots
  213. the task is uncraftable but the ingredients show as available and it will not craft a new one
  214. 0.1.9.1
  215. - Update with changes in Mustex's script (version 12)
  216. * Added tasks for Platesmithing, Leatherworking, Tailoring
  217. * Added detection for the gateway being down
  218. 0.1.8.3.8
  219. - Update asset selection to avoid using coloured assets in junk slots for leadership
  220. 0.1.8.3.7
  221. - Update leadership tasks table due to task reward/duration alterations
  222. 0.1.8.3.6
  223. - Add option to enable/disable automation process
  224. - Update alchemy tasks some more
  225. 0.1.8.3.5
  226. - Add ability to select from multiple tasks with same name (eg Alchemical Research)
  227. - Add craft options for alchemy potions (need to be manually switched since they use the same ingredients)
  228. 0.1.8.3.4
  229. - Add alchemy tasks up to level 20
  230. 0.1.8.3.3
  231. - Change task slot selection to be user configurable options in settings window
  232. - Add level 1 alchemical research
  233. 0.1.8.3.2
  234. - Added ability to specify how many tasks of each profession to train multiple professions at once
  235. - Updated mailsmithing level 0 tasks
  236. 0.1.8.3.1
  237. - Changed asset selection to only update Junk assets
  238. - Leadership asset selection for bronze tier picks lowest asset first
  239. - Modified Leadership tasks
  240. 0.1.8.3
  241. - Tweaked Leadership tasks grid
  242. - Added task grid for Alchemy (Partial)
  243. 0.1.8.2
  244. - onsave handlers for settings are now called before the settings values are saved
  245. - Added onsave handler for console to enable/disable using the window console
  246. 0.1.8.1
  247. - Added checking for errors (using the window title) and will navigate back to the main login page if autologin is enabled
  248. 0.1.8
  249. - Added popup for altering settings
  250. - Settings are saved to script cache
  251. - Added mailsmithing tasks to task grid
  252. 0.1.7
  253. - Added lower level leadership tasks to grid
  254. - Added hiring tasks to leadership task
  255. - Uses saved values to determine which profession type to level (Defaults to Leadership, currently no way to change it)
  256. 0.1.5
  257. - Is now able to recover from missing assets
  258. - Uses a configurable grid to determine what the next task is to complete
  259. 0.1.0
  260. - Is now able to select some hard coded leadership tasks
  261. - Can now collect from any completed slot
  262. */
  263.  
  264. // Make sure it's running on the main page, no frames
  265. if (window.self !== window.top) {
  266. throw "";
  267. }
  268. var current_Gateway = _select_Gateway(); // edited by RottenMind
  269. // Set global console variables
  270. var fouxConsole = {
  271. log : function () {},
  272. info : function () {},
  273. error : function () {},
  274. warn : function () {}
  275.  
  276. };
  277. var console = unsafeWindow.console || fouxConsole;
  278. var chardiamonds = {};
  279. var chargold = {};
  280. var definedTask = {};
  281. var antiInfLoopTrap = { // without this script sometimes try to start the same task in infinite loop (lags?)
  282. prevCharName:"unknown", // character name which recently launched a task
  283. prevTaskName:"unknown", // name of the task previously launched
  284. startCounter:0, // how many times the same character starts the same task
  285. currCharName:"unknown", // character name which try to launch new task
  286. currTaskName:"unknown", // name of the new task to launch
  287. trapActivation:15 // number of repetition to activation trap
  288. };
  289. // Page Reloading function
  290. // Every second the page is idle or loading is tracked
  291. var loading_reset = false; // Enables a periodic reload if this is toggled on by the Auto Reload check box on the settings panel
  292. var s_paused = false; // extend the paused setting to the Page Reloading function
  293.  
  294. // Include JqueryUI CSS
  295. var jqUI_CssSrc = GM_getResourceText("jqUI_CSS");
  296. /*jqUI_CssSrc = jqUI_CssSrc.replace (/url\(images\//g, "url(http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/dark-hive/images/");*/
  297. jqUI_CssSrc = jqUI_CssSrc.replace(/url\(images\//g, "url(http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/cupertino/images/");
  298. jqUI_CssSrc = jqUI_CssSrc.replace(/font-size: 1\.1em/g, "font-size: 0.9em");
  299. GM_addStyle(jqUI_CssSrc);
  300.  
  301. // RottenMind (start), multi Url support
  302. function _select_Gateway() { // Check for Gateway used to
  303. if (window.location.href.indexOf("gatewaytest") > -1) { // detect gatewaytest Url
  304. console.log("GatewayTEST detected");
  305. return "http://gatewaytest.playneverwinter.com";
  306. } else if (window.location.href.indexOf("nw.ru.perfectworld") > -1) {
  307. console.log("GatewayRU detected");
  308. return "http://gateway.nw.ru.perfectworld.eu";
  309. } else { // must go somewhere
  310. console.log("Gateway detected");
  311. return "http://gateway.playneverwinter.com";
  312. }
  313. }
  314. // RottenMind (END)
  315.  
  316. (function () {
  317. var $ = unsafeWindow.$;
  318.  
  319. //MAC-NW
  320. $.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {
  321. var found = 'found';
  322. var $this = $(this.selector);
  323. var $elements = $this.not(function () {
  324. return $(this).data(found);
  325. }).each(handler).data(found, true);
  326. if (!isChild) {
  327. (window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] = window.setInterval(function () {
  328. $this.waitUntilExists(handler, shouldRunHandlerOnce, true);
  329. }, 500);
  330. } else if (shouldRunHandlerOnce && $elements.length) {
  331. window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
  332. }
  333. return $this;
  334. }
  335. // MAC-NW - Wait for tooltip to come up so we can alter the list
  336. $('.tooltip-menu button').waitUntilExists(function () {
  337. // Tooltip has open menu itemtooltip
  338. 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'))
  339. try {
  340. var thisItem = eval("client.dataModel.model." + $('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').attr('data-url-silent').split("=")[1]);
  341. if (thisItem.count > 1) {
  342. if (thisItem.count >= 99)
  343. thisItem.count = 99;
  344. var openAllClick = "for (i = 1; i <= " + thisItem.count + "; i++){ window.setTimeout(function () {client.sendCommand('GatewayInventory_OpenRewardPack', '" + thisItem.uid + "');}, 500); }";
  345. $('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>\
  346. <button class="&nbsp;" onclick="' + openAllClick + '">Open All (' + thisItem.count + ')</button></div>');
  347. //$('a.nav-dungeons').trigger('click'); window.setTimeout(function(){ $('a.nav-inventory').trigger('click'); },2000);
  348. }
  349. } catch (e) {
  350. console.log("ERROR: Did not succeed to add open all tooltip.");
  351. }
  352. });
  353.  
  354. $('.vendor-quantity-block span.attention').waitUntilExists(function () {
  355. if ($('.vendor-quantity-block span.attention span').length)
  356. $('.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="$(\'.modal-confirm input\').val(\'' + $(".vendor-quantity-block span.attention span").text() + '\');">All (' + $(".vendor-quantity-block span.attention span").text() + ')</button></div>');
  357. });
  358.  
  359. $('div.notification div.messages li').waitUntilExists(function () {
  360. if ($("div.notification div.messages li").length > 2)
  361. $("div.notification div.messages li").eq(0).remove();
  362. });
  363.  
  364. // Always disable SCA tutorial if its active
  365. $('#help-dimmer.help-cont.whenTutorialActive').waitUntilExists(function () {
  366. client.toggleHelp();
  367. });
  368.  
  369. //MAC-NW
  370.  
  371. var state_loading = 0; // If "Page Loading" takes longer than 30 seconds, reload page (maybe a javascript error)
  372. var state_loading_time = 30; // default of 30 seconds
  373. var state_idle = 0; // If the page is idle for longer than 60 seconds, reload page (maybe a javascript error)
  374. var state_idle_time = 120; // default of 120 seconds
  375. var reload_hours = [2, 5, 8, 11, 14, 17, 20, 23]; // logout and reload every three hours - 2:29 - 5:29 - 8:29 - 11:29 - 14:29 - 17:29 - 20:29 - 23:29
  376. var last_location = ""; // variable to track reference to page URL
  377. var reload_timer = setInterval(function () {
  378. if (!s_paused) {
  379. if (antiInfLoopTrap.startCounter >= antiInfLoopTrap.trapActivation) {
  380. unsafeWindow.location.href = current_Gateway;
  381. return;
  382. }
  383. if (loading_reset) {
  384. var loading_date = new Date();
  385. var loading_sec = Number(loading_date.getSeconds());
  386. var loading_min = Number(loading_date.getMinutes());
  387. var loading_hour = Number(loading_date.getHours());
  388. if (reload_hours.indexOf(loading_hour) >= 0 && loading_min == 29 && loading_sec < 2) {
  389. console.log("Auto Reload");
  390. unsafeWindow.location.href = current_Gateway;
  391. return;
  392. }
  393. }
  394.  
  395. // check for errors
  396. if ($("title").text().match(/Error/) || $("div.modal-content h3").text().match(/Disconnected/)) {
  397. console.log("Error detected - relogging");
  398. unsafeWindow.location.href = current_Gateway;
  399. return;
  400. }
  401.  
  402. if ($("div.loading-image:visible").length) {
  403. last_location = location.href;
  404. state_idle = 0;
  405. if (state_loading >= state_loading_time) {
  406. console.log("Page Loading too long");
  407. state_loading = 0;
  408. location.reload();
  409. } else {
  410. state_loading++;
  411. console.log("Page Loading ...", state_loading + "s");
  412. }
  413. }
  414. // TODO: Add check for gateway disconnected
  415. //<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>
  416.  
  417.  
  418. /* Can't use idle check with dataModel methods
  419. else if (location.href == last_location) {
  420. state_loading = 0;
  421. if (state_idle >= state_idle_time) {
  422. console.log("Page Idle too long");
  423. state_idle = 0;
  424. unsafeWindow.location.href = current_Gateway ; // edited by RottenMind
  425. }
  426. else {
  427. state_idle++;
  428. // comment out to avoid console spam
  429. //console.log("Page Idle ...", state_idle + "s");
  430. }
  431. }
  432. */
  433. else {
  434. last_location = location.href;
  435. state_loading = 0;
  436. state_idle = 0;
  437. }
  438. }
  439. }, 1000);
  440. })();
  441.  
  442. (function () {
  443.  
  444. /**
  445. * Add a string of CSS to the main page
  446. *
  447. * @param {String} cssString The CSS to add to the main page
  448. */
  449. function AddCss(cssString) {
  450. var head = document.getElementsByTagName('head')[0];
  451. if (!head)
  452. return;
  453. var newCss = document.createElement('style');
  454. newCss.type = "text/css";
  455. newCss.innerHTML = cssString;
  456. head.appendChild(newCss);
  457. }
  458. function countLeadingSpaces(str) {
  459. return str.match(/^(\s*)/)[1].length;
  460. }
  461.  
  462. var image_pause = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAY" +
  463. "AAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2" +
  464. "ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG" +
  465. "8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNR" +
  466. "NYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMBy" +
  467. "H/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAI" +
  468. "Cd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOE" +
  469. "AuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dX" +
  470. "Lh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJ" +
  471. "iYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PE" +
  472. "WhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJh" +
  473. "GLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+" +
  474. "AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlT" +
  475. "Ksz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKm" +
  476. "Av1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIB" +
  477. "BKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3" +
  478. "GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7E" +
  479. "irAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJy" +
  480. "KTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksq" +
  481. "Zs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZl" +
  482. "mDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5" +
  483. "Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVV" +
  484. "gqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU" +
  485. "2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2" +
  486. "KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVx" +
  487. "rqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri" +
  488. "6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxb" +
  489. "zwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppS" +
  490. "TbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo" +
  491. "5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8" +
  492. "Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLK" +
  493. "cRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p" +
  494. "7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc" +
  495. "+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+H" +
  496. "p8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw" +
  497. "34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8Yu" +
  498. "ZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIh" +
  499. "OOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hC" +
  500. "epkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa" +
  501. "7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZL" +
  502. "Vy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wt" +
  503. "VCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZt" +
  504. "Jm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkV" +
  505. "PRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvtt" +
  506. "Xa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fc" +
  507. "J3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5Sv" +
  508. "NUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2" +
  509. "+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3d" +
  510. "vfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/c" +
  511. "GhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0Z" +
  512. "jRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0" +
  513. "Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgA" +
  514. "ABdvkl/FRgAAAZ9JREFUeNqU0z+LE2EQBvDfvsuZ3IkoFzSJiuCfeAkWFmJnkz5wjVjlK4i" +
  515. "tnR9BrP0E4uewE/bQwKko2CjR88+BuSMhycbm3RjjNk41z7szz8w8O5Motzqu4iwW+Ir3+L" +
  516. "YemKzh07iLGziJPL4HjPAKz3FcRnAJD3AKXzBb+b7ABhr4jscYQhoDzuBhrDQsIU9iNz9j7" +
  517. "G28wLQg6OMyhrVaLd3Z2dFoNBwdHdna2tJut9XrdZPJJIzH4xHOo4rXAU3cjJXTfr8vyzJZ" +
  518. "lul2u3q9nizL7O3t2d3dLbr+jFvYDuiggjlMp9Nl3/P53Gw2W+IVfxZFbgecw7SYOc/zZUK" +
  519. "e5//gNU22QxRu4f9tgSTE5ThRkIQQ/kifJJIk+QuvJKc4DHizOsLm5uYyoVKpqFarS7zipx" +
  520. "jjXUF5P4o5bDabodVqgcFgIE1TnU4H7O/vOzg4yHEBL/G0IGjgUVzXX1GXMsvjIm3E+B/FI" +
  521. "o3wEXfi7zkuRFoVLBYKeIJPZcd0EfdwLc5ZaLMR/bd4Fm+l9BoLu44rsd0FDuM5f1gP/D0A" +
  522. "BNp57TyT3+MAAAAASUVORK5CYII=";
  523. var image_play = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYA" +
  524. "AAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2Z" +
  525. "pbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8" +
  526. "igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRN" +
  527. "YAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH" +
  528. "/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAIC" +
  529. "d+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEA" +
  530. "uyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXL" +
  531. "h4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJi" +
  532. "YuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEW" +
  533. "hkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhG" +
  534. "Lc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+A" +
  535. "XuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTK" +
  536. "sz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmA" +
  537. "v1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBB" +
  538. "KLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3G" +
  539. "oRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7Ei" +
  540. "rAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyK" +
  541. "TqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZ" +
  542. "s0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlm" +
  543. "DJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5O" +
  544. "l9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVg" +
  545. "qtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2" +
  546. "epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2K" +
  547. "ruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxr" +
  548. "qpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6" +
  549. "qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbz" +
  550. "wdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppST" +
  551. "bmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5" +
  552. "WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8W" +
  553. "uw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKc" +
  554. "RpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7" +
  555. "ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+" +
  556. "9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp" +
  557. "8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw3" +
  558. "4MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZ" +
  559. "lnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhO" +
  560. "OJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCe" +
  561. "pkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7" +
  562. "OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLV" +
  563. "y0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtV" +
  564. "CuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJ" +
  565. "m6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVP" +
  566. "RU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttX" +
  567. "a1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ" +
  568. "3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvN" +
  569. "UyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+" +
  570. "UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dv" +
  571. "fN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cG" +
  572. "hYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0Zj" +
  573. "RoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0K" +
  574. "f7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAA" +
  575. "Bdvkl/FRgAAAYZJREFUeNqk08+KklEYBvDf9+lIEYZDZQ0OIrQZahEuBoLuQqiWIl5BG2k5" +
  576. "W5dzA15AF9EFJOiiRRNkSIw4lTAfCQNmzrToOIkc2nRW5z3n/fe8z/Mm4mcfD3EfCb5hhC/" +
  577. "bjsmWXcJLPMJNLMP7DhY4wRt8jyWo4hVu4Qyrjf8rpKGjJY7xCXLB4TZeB/ssBCaRTn+ggG" +
  578. "d4h4s0fDRQxAy5arWq0+nEZpMiQx7P1w938SRUzkGWZbrdrsFgoFarxZJ8xWPspzgIuH+tP" +
  579. "ZbLpfl8rl6vG41GWq3WdpLLAOUgxb0QfI05Sf7CT9NUr9fT7/dVKpXNmSxRSv3nSQOn+UDV" +
  580. "H86urq9Wq5V2u+3w8NBkMrFB6w7O80EcFyHJCgqFgmKxaDgcajQaxuNxrPBPnORC8IOgvgx" +
  581. "puVw2nU41m01ZlsUGuIf3eJtsCOko0DjbEFgsuBQYOMJs7bjABzzFndDVZUTKe8E+xmlsmX" +
  582. "bxIsC5sZ5J6GiBj/9aptg67wafc3yOrfPvAQDwi2sWVdJBsgAAAABJRU5ErkJggg==";
  583. var image_prefs = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQC" +
  584. "AMAAAAoLQ9TAAAAllBMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3No" +
  585. "aGhsaWdramlycG1meY98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrq" +
  586. "koZy3t7fIx8bKyMHT0c3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/" +
  587. "f5+PgAAABrL3yvAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTA" +
  588. "QCanBgAAAAHdElNRQfWBRoFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+" +
  589. "/8+RsTExDDpIe3ijfSJ/hx9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g" +
  590. "1oMGmW7YZ6hnCYexKTPVkXivuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDz" +
  591. "WdWHfmAAAAAElFTkSuQmCC";
  592. var image_close = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQC" +
  593. "AQAAAC1+jfqAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfW" +
  594. "BRkTNhxuPxLkAAAAHXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAE" +
  595. "KSURBVCjPhdGxSgNBFAXQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohY" +
  596. "UgbGKQyFjErNv52nObe19wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6" +
  597. "Zfr9u25MIj6Jl4cmSIPBWrq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNX" +
  598. "pBQpI8GJDTR050zkNzK0bMMZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd" +
  599. "6bgwxkmTMIotWKpwrfBkZl7uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz" +
  600. "85FH/WkOkaHQAAAABJRU5ErkJggg==";
  601.  
  602. // Setup global closure variables
  603. var $ = unsafeWindow.jQuery;
  604. var timerHandle = 0;
  605. var dfdNextRun = $.Deferred();
  606. var charcurrent = 0; // current character counter
  607. var chartimers = {};
  608. var delay = {
  609. SHORT : 1000,
  610. MEDIUM : 5000,
  611. LONG : 30000,
  612. MINS : 300000,
  613. DEFAULT : 10000, // default delay
  614. TIMEOUT : 60000, // delay for cycle processing timeout
  615. };
  616.  
  617. /*
  618. * Tasklist can be modified to configure the training you want to perform.
  619. * The configurable options window sets how many profession slots you want to use for each profession.
  620. * The level array below for each professions specifies the tasks you want to learn at each crafting level.
  621. * Each craft slot will pick the first task that meets requirements.
  622. * See http://pastebin.com/VaGntEha for Task Name Map.
  623. * Some names above do not match, use below code to check:
  624. * var tasks = client.dataModel.model.craftinglist['craft_' + profname].entries.filter(function(entry) { return entry.def && entry.def.displayname == taskname; }); tasks[0].def.name;
  625. */
  626.  
  627. definedTask["Leadership"] = {
  628. taskListName : "Leadership", // Friendly name used at the UI
  629. taskName : "Leadership", // String used at the gateway
  630. taskDefaultPriority : 2, // Priority to allocate free task slots: 0 - High, 1 - Medium, 2 - Low
  631. taskActive : true,
  632. taskDefaultSlotNum : 9,
  633. taskDescription : "",
  634. profiles : [{
  635. profileName : "AD",
  636. isProfileActive : true,
  637. level : {
  638. 0 : ["Leadership_Tier0_Intro_1"],
  639. 1 : ["Leadership_Tier0_Intro_5", "Leadership_Tier0_Intro_4", "Leadership_Tier0_Intro_3", "Leadership_Tier0_Intro_2"],
  640. 2 : ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
  641. 3 : ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
  642. 4 : ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
  643. 5 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  644. 6 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  645. 7 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  646. 8 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  647. 9 : ["Leadership_Tier1_4_Protect", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  648. // Begin prioritizing "Battle Undead"
  649. 10 : ["Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  650. 11 : ["Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  651. 12 : ["Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  652. // Add "protect diamonds rare" and the patrol quest as a backup
  653. 13 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  654. 14 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  655. 15 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  656. // AD Production mode: Spellplague + Battle Undead
  657. 16 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  658. 17 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  659. 18 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  660. 19 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", "Leadership_Tier2_12_Taxes", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  661. // 20
  662. 20 : ["Leadership_Tier3_20r_Master2", "Leadership_Tier3_20r_Master1", "Leadership_Tier3_20r_Master3", "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"],
  663. },
  664. }, {
  665. profileName : "XP",
  666. isProfileActive : true,
  667. level : {
  668. 0 : ["Leadership_Tier0_Intro_1"],
  669. 1 : ["Leadership_Tier0_Intro_5", "Leadership_Tier0_Intro_4", "Leadership_Tier0_Intro_3", "Leadership_Tier0_Intro_2"],
  670. 2 : ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
  671. 3 : ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
  672. 4 : ["Leadership_Tier1_Feedtheneedy", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training"],
  673. 5 : ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  674. 6 : ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  675. 7 : ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  676. 8 : ["Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  677. 9 : ["Leadership_Tier1_5_Explore", "Leadership_Tier2_9_Chart", "Leadership_Tier1_4_Protect"],
  678. 10 : ["Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  679. 11 : ["Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  680. 12 : ["Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore", "Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty"],
  681. 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"],
  682. 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"],
  683. 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"],
  684. 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"],
  685. 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"],
  686. 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"],
  687. 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"],
  688. 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_16_Fight", "Leadership_Tier2_10_Battle", "Leadership_Tier3_13_Patrol"],
  689. },
  690. }, {
  691. profileName : "Resource/AD",
  692. isProfileActive : true,
  693. level : {
  694. 0 : ["Leadership_Tier0_Intro_1"],
  695. 1 : ["Leadership_Tier0_Intro_5", "Leadership_Tier0_Intro_4", "Leadership_Tier0_Intro_3", "Leadership_Tier0_Intro_2"],
  696. 2 : ["Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training", "Leadership_Tier1_Feedtheneedy"],
  697. 3 : ["Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training", "Leadership_Tier1_Feedtheneedy"],
  698. 4 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_2_Guardduty", "Leadership_Tier1_2_Training", "Leadership_Tier1_Feedtheneedy"],
  699. 5 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  700. 6 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  701. 7 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  702. 8 : ["Leadership_Tier1_4_Protect", "Leadership_Tier1_5_Explore", "Leadership_Tier1_2_Guardduty"],
  703. 9 : ["Leadership_Tier1_4_Protect", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  704. // Begin prioritizing "Battle Undead"
  705. 10 : ["Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  706. 11 : ["Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier2_11r_Escortgoods", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  707. 12 : ["Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier2_11r_Escortgoods", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  708. // Add "protect diamonds rare" and the patrol quest as a backup
  709. 13 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  710. 14 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  711. 15 : ["Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier2_10_Battle", "Leadership_Tier1_4_Protect", "Leadership_Tier3_13_Patrol", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  712. // DL Production mode: Raid mines Deliver
  713. 16 : ["Leadership_Tier3_16r_Buildshelters", "Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_16_Fight", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  714. 17 : ["Leadership_Tier3_16r_Buildshelters", "Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_17_Deliver", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  715. 18 : ["Leadership_Tier3_16r_Buildshelters", "Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_17r_Raidmines", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", , "Leadership_Tier3_17_Deliver", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  716. 19 : ["Leadership_Tier3_16r_Buildshelters", "Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_17r_Raidmines", "Leadership_Tier3_13_Patrol", "Leadership_Tier3_17_Deliver", , "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  717. // 20
  718. 20 : ["Leadership_Tier3_20r_Master2", "Leadership_Tier3_20r_Master1", "Leadership_Tier3_20r_Master3",
  719. "Leadership_Tier3_20_Destroy", "Leadership_Tier3_13r_Protectdiamonds", "Leadership_Tier3_16r_Buildshelters",
  720. "Leadership_Tier3_13_Patrol", "Leadership_Tier3_15_Rescue", "Leadership_Tier3_19_Acquire",
  721. "Leadership_Tier2_12_Taxes", "Leadership_Tier3_17_Deliver", "Leadership_Tier2_9_Chart", "Leadership_Tier1_5_Explore"],
  722. },
  723. }
  724. ]
  725. };
  726.  
  727. definedTask["Winter Event"] = {
  728. taskListName : "WinterEvent",
  729. taskName : "WinterEvent",
  730. taskDefaultPriority : 1,
  731. taskDefaultSlotNum : 0,
  732. taskActive : true,
  733. taskDescription : "",
  734. profiles : [{
  735. profileName : "default",
  736. isProfileActive : true,
  737. level : {
  738. 0 : ["Event_Winter_Tier0_Intro"],
  739. 1 : ["Event_Winter_Tier1_Rankup", /*"Event_Winter_Tier1_Shiny_Lure",*/
  740. "Event_Winter_Tier1_Refine", "Event_Winter_Tier1_Gather"],
  741. 2 : ["Event_Winter_Tier1_Rankup_2", /*"Event_Winter_Tier1_Fishingpole_Blue","Event_Winter_Tier1_Shiny_Lure_Mass",*/
  742. "Event_Winter_Tier1_Refine_2", "Event_Winter_Tier1_Gather_2"],
  743. 3 : [/*"Event_Winter_Tier1_Heros_Feast","Event_Winter_Tier1_Lightwine","Event_Winter_Tier1_Sparkliest_Gem","Event_Winter_Tier1_Mesmerizing_Lure",*/
  744. "Event_Winter_Tier1_Gather_3"],
  745. },
  746. }
  747. ]
  748. };
  749.  
  750. definedTask["Siege Event"] = {
  751. taskListName : "SiegeEvent",
  752. taskName : "Event_Siege",
  753. taskDefaultPriority : 1,
  754. taskDefaultSlotNum : 0,
  755. taskActive : true,
  756. taskDescription : "",
  757. profiles : [{
  758. profileName : "default",
  759. isProfileActive : true,
  760. level : {
  761. 0 : ["Event_Siege_Tier0_Intro"], // Hire a Siege Master
  762. //1:["Event_Siege_Tier1_Donate_Minorinjury"], // Create Defense Supplies from Minor Injury Kits
  763. //1:["Event_Siege_Tier1_Donate_Injury"], // Create Defense Supplies from Injury Kits
  764. //1:["Event_Siege_Tier1_Donate_Majorinjury"], // Create Defense Supplies from Major Injury Kits
  765. //1:["Event_Siege_Tier1_Donate_Altar_10"], // Create Defense Supplies from 10 Portable Altars
  766. //1:["Event_Siege_Tier1_Donate_Altar_50"], // Create Defense Supplies from 50 Portable Altars
  767. //1:["Event_Siege_Tier1_Donate_Resources_T2"], // Create Defense Supplies from Tier 2 crafting resources
  768. //1:["Event_Siege_Tier1_Donate_Resources_T3"], // Create Defense Supplies from Tier 3 crafting resources
  769. 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"],
  770. },
  771. }
  772. ]
  773. };
  774.  
  775. definedTask["Black Ice Shaping"] = {
  776. taskListName : "BlackIce",
  777. taskName : "BlackIce",
  778. taskDefaultPriority : 1,
  779. taskDefaultSlotNum : 0,
  780. taskActive : true,
  781. taskDescription : "",
  782. profiles : [{
  783. profileName : "default",
  784. isProfileActive : true,
  785. level : {
  786. 1 : ["Blackice_Tier1_Process_Blackice"],
  787. 2 : ["Blackice_Tier1_Process_Blackice"],
  788. 3 : ["Blackice_Tier1_Process_Blackice"],
  789. /*
  790. 1:["Forge Hammerstone Pick","Gather Raw Black Ice","Truesilver Pick Grip","Process Raw Black Ice","Upgrade Chillwright","Hire an additional Chillwright"],
  791. 2:["Forge Hammerstone Pick","Gather Raw Black Ice","Truesilver Pick Grip","Process Raw Black Ice","Upgrade Chillwright","Hire an additional Chillwright"],
  792. 3:["Forge Hammerstone Pick","Gather Raw Black Ice","Truesilver Pick Grip","Process Raw Black Ice","Upgrade Chillwright","Hire an additional Chillwright"],
  793. */
  794. },
  795. }
  796. ]
  797. };
  798.  
  799. definedTask["Jewelcrafting"] = {
  800. taskListName : "Jewelcrafting",
  801. taskName : "Jewelcrafting",
  802. taskDefaultPriority : 1,
  803. taskDefaultSlotNum : 0,
  804. taskActive : true,
  805. taskDescription : "",
  806. profiles : [{
  807. profileName : "default",
  808. isProfileActive : true,
  809. level : {
  810. 0 : ["Jewelcrafting_Tier0_Intro"],
  811. 1 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  812. 2 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  813. 3 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  814. 4 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  815. 5 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  816. 6 : ["Jewelcrafting_Tier1_Neck_Misc_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  817. 7 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  818. 8 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  819. 9 : ["Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  820. 10 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  821. 11 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  822. 12 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  823. 13 : ["Jewelcrafting_Tier2_Neck_Misc_2", "Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  824. 14 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  825. 15 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  826. 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"],
  827. 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"],
  828. 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"],
  829. 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"],
  830. 20 : ["Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier1_Refine_Basic"],
  831. },
  832. }, {
  833. profileName : "craft neck",
  834. isProfileActive : true,
  835. level : {
  836. 0 : ["Jewelcrafting_Tier0_Intro"],
  837. 1 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  838. 2 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  839. 3 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  840. 4 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  841. 5 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  842. 6 : ["Jewelcrafting_Tier1_Neck_Misc_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  843. 7 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  844. 8 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  845. 9 : ["Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  846. 10 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  847. 11 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  848. 12 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  849. 13 : ["Jewelcrafting_Tier2_Neck_Misc_2", "Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  850. 14 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  851. 15 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  852. 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"],
  853. 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"],
  854. 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"],
  855. 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"],
  856. //first purple neck. then purple ring. fallback to neck
  857. 20 : ["Jewelcrafting_Tier3_Neck_Offense_4_Purple", "Jewelcrafting_Tier3_Neck_Defense_4_Purple",
  858. "Jewelcrafting_Tier3_Ring_Offense_4_Purple", "Jewelcrafting_Tier3_Ring_Defense_4_Purple", "Jewelcrafting_Tier3_Ring_Misc_4_Purple",
  859. "Jewelcrafting_Tier3_Neck_Offense_3",
  860. "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier1_Refine_Basic"],
  861. },
  862. }, {
  863. profileName : "craft rings",
  864. isProfileActive : true,
  865. level : {
  866. 0 : ["Jewelcrafting_Tier0_Intro"],
  867. 1 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  868. 2 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  869. 3 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  870. 4 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  871. 5 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  872. 6 : ["Jewelcrafting_Tier1_Neck_Misc_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  873. 7 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  874. 8 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  875. 9 : ["Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  876. 10 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  877. 11 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  878. 12 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  879. 13 : ["Jewelcrafting_Tier2_Neck_Misc_2", "Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  880. 14 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  881. 15 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  882. 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"],
  883. 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"],
  884. 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"],
  885. 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"],
  886. //first purple rings. then purple neck. fallback to rings
  887. 20 : ["Jewelcrafting_Tier3_Ring_Offense_4_Purple", "Jewelcrafting_Tier3_Ring_Defense_4_Purple", "Jewelcrafting_Tier3_Ring_Misc_4_Purple",
  888. "Jewelcrafting_Tier3_Neck_Offense_4_Purple", "Jewelcrafting_Tier3_Neck_Defense_4_Purple",
  889. "Jewelcrafting_Tier3_Ring_Offense_3",
  890. "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier1_Refine_Basic"],
  891. }
  892. }, {
  893. profileName : "craft purples only",
  894. isProfileActive : true,
  895. level : {
  896. 0 : ["Jewelcrafting_Tier0_Intro"],
  897. 1 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  898. 2 : ["Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  899. 3 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Offense_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  900. 4 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  901. 5 : ["Jewelcrafting_Tier1_Neck_Offense_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  902. 6 : ["Jewelcrafting_Tier1_Neck_Misc_1", "Jewelcrafting_Tier1_Waist_Misc_1", "Jewelcrafting_Tier1_Refine_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  903. 7 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  904. 8 : ["Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  905. 9 : ["Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Waist_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  906. 10 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  907. 11 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  908. 12 : ["Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Neck_Offense_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  909. 13 : ["Jewelcrafting_Tier2_Neck_Misc_2", "Jewelcrafting_Tier2_Waist_Misc_2", "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  910. 14 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  911. 15 : ["Jewelcrafting_Tier3_Waist_Offense_3", "Jewelcrafting_Tier3_Refine_Basic", "Jewelcrafting_Tier3_Gather_Basic", "Jewelcrafting_Tier2_Gather_Basic", "Jewelcrafting_Tier1_Gather_Basic"],
  912. 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"],
  913. 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"],
  914. 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"],
  915. 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"],
  916. //first purple rings. then purple neck. fallback to refine
  917. 20 : ["Jewelcrafting_Tier3_Ring_Offense_4_Purple", "Jewelcrafting_Tier3_Ring_Defense_4_Purple", "Jewelcrafting_Tier3_Ring_Misc_4_Purple",
  918. "Jewelcrafting_Tier3_Neck_Offense_4_Purple", "Jewelcrafting_Tier3_Neck_Defense_4_Purple",
  919. //"Jewelcrafting_Tier3_Ring_Offense_3",
  920. "Jewelcrafting_Tier2_Refine_Basic", "Jewelcrafting_Tier1_Refine_Basic"],
  921. }
  922. }
  923. ]
  924. };
  925.  
  926. definedTask["Mailsmithing"] = {
  927. taskListName : "Mailsmithing",
  928. taskName : "Armorsmithing_Med",
  929. taskDefaultPriority : 1,
  930. taskDefaultSlotNum : 0,
  931. taskActive : true,
  932. taskDescription : "",
  933. profiles : [{
  934. profileName : "default",
  935. isProfileActive : true,
  936. level : {
  937. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  938. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  939. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  940. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  941. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  942. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  943. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  944. 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"],
  945. 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"],
  946. 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"],
  947. 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"],
  948. 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"],
  949. 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"],
  950. 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"],
  951. 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"],
  952. 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"],
  953. 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"],
  954. 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"],
  955. 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"],
  956. 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"],
  957. 20 : ["Med_Armorsmithing_Tier2_Refine_Basic"],
  958. //19:["Chain Armor +4","Fancy Chain Pants","Fancy Chain Shirt","Chain Helm +4","Ornate Chain Pants","Upgrade Blacksmith","Upgrade Prospector","Hire an additional Prospector"],
  959. //20:["Forge Steel Rings and Scales"],
  960. }
  961. }, {
  962. profileName : "craft Chain Gambeson",
  963. isProfileActive : true,
  964. level : {
  965. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  966. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  967. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  968. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  969. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  970. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  971. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  972. 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"],
  973. 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"],
  974. 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"],
  975. 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"],
  976. 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"],
  977. 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"],
  978. 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"],
  979. 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"],
  980. 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"],
  981. 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"],
  982. 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"],
  983. 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"],
  984. 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"],
  985. 20 : [
  986. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  987. //purple chain DC
  988. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  989. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  990. //purple scale gwf
  991.  
  992. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  993. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  994. //DC
  995.  
  996. "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2", "Med_Armorsmithing_Tier3_Chain_Shirt2",
  997. "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Pants2_Set2",
  998.  
  999. //
  1000. "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2", "Med_Armorsmithing_Tier3_Scale_Shirt2",
  1001. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1002. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1003. },
  1004. }, {
  1005. profileName : "craft Chain Shirt",
  1006. isProfileActive : true,
  1007. level : {
  1008. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1009. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1010. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1011. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1012. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1013. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1014. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1015. 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"],
  1016. 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"],
  1017. 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"],
  1018. 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"],
  1019. 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"],
  1020. 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"],
  1021. 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"],
  1022. 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"],
  1023. 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"],
  1024. 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"],
  1025. 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"],
  1026. 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"],
  1027. 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"],
  1028. 20 : [
  1029. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1030. //purple chain DC
  1031. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1032. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1033. //purple scale gwf
  1034.  
  1035. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1036. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1037. //DC
  1038.  
  1039. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1040. "Med_Armorsmithing_Tier3_Chain_Pants2_Set2", "Med_Armorsmithing_Tier3_Chain_Pants2",
  1041.  
  1042. //
  1043. "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2", "Med_Armorsmithing_Tier3_Scale_Shirt2",
  1044. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1045. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1046. },
  1047. }, {
  1048. profileName : "craft Chain Pants",
  1049. isProfileActive : true,
  1050. level : {
  1051. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1052. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1053. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1054. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1055. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1056. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1057. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1058. 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"],
  1059. 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"],
  1060. 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"],
  1061. 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"],
  1062. 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"],
  1063. 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"],
  1064. 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"],
  1065. 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"],
  1066. 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"],
  1067. 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"],
  1068. 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"],
  1069. 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"],
  1070. 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"],
  1071. 20 : [
  1072. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1073. //purple chain DC
  1074. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1075. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1076. //purple scale gwf
  1077.  
  1078. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1079. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1080. //DC
  1081. "Med_Armorsmithing_Tier3_Chain_Pants2_Set2", "Med_Armorsmithing_Tier3_Chain_Pants2",
  1082. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1083. //
  1084. "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2", "Med_Armorsmithing_Tier3_Scale_Shirt2",
  1085. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1086. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1087. },
  1088. }, {
  1089. profileName : "craft Chain Trousers",
  1090. isProfileActive : true,
  1091. level : {
  1092. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1093. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1094. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1095. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1096. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1097. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1098. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1099. 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"],
  1100. 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"],
  1101. 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"],
  1102. 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"],
  1103. 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"],
  1104. 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"],
  1105. 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"],
  1106. 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"],
  1107. 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"],
  1108. 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"],
  1109. 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"],
  1110. 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"],
  1111. 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"],
  1112. 20 : [
  1113. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1114. //purple chain DC
  1115. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1116. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1117. //purple scale gwf
  1118.  
  1119. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1120. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1121. //DC
  1122. "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Pants2_Set2",
  1123. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1124. //
  1125. "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2", "Med_Armorsmithing_Tier3_Scale_Shirt2",
  1126. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1127. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1128. },
  1129. }, {
  1130. profileName : "craft Scale Gambeson",
  1131. isProfileActive : true,
  1132. level : {
  1133. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1134. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1135. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1136. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1137. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1138. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1139. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1140. 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"],
  1141. 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"],
  1142. 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"],
  1143. 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"],
  1144. 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"],
  1145. 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"],
  1146. 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"],
  1147. 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"],
  1148. 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"],
  1149. 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"],
  1150. 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"],
  1151. 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"],
  1152. 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"],
  1153. 20 : [
  1154. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1155. //purple chain DC
  1156. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1157. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1158. //purple scale gwf
  1159. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1160. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1161. //
  1162. "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2", "Med_Armorsmithing_Tier3_Scale_Shirt2",
  1163. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1164. //DC
  1165. "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Pants2_Set2",
  1166. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1167.  
  1168. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1169. },
  1170. }, {
  1171. profileName : "craft Scale Shirt",
  1172. isProfileActive : true,
  1173. level : {
  1174. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1175. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1176. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1177. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1178. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1179. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1180. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1181. 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"],
  1182. 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"],
  1183. 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"],
  1184. 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"],
  1185. 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"],
  1186. 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"],
  1187. 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"],
  1188. 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"],
  1189. 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"],
  1190. 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"],
  1191. 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"],
  1192. 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"],
  1193. 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"],
  1194. 20 : [
  1195. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1196. //purple chain DC
  1197. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1198. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1199. //purple scale gwf
  1200. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1201. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1202. //
  1203. "Med_Armorsmithing_Tier3_Scale_Shirt2", "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2",
  1204. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1205. //DC
  1206. "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Pants2_Set2",
  1207. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1208.  
  1209. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1210. },
  1211. }, {
  1212. profileName : "craft Scale Pants",
  1213. isProfileActive : true,
  1214. level : {
  1215. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1216. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1217. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1218. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1219. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1220. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1221. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1222. 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"],
  1223. 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"],
  1224. 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"],
  1225. 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"],
  1226. 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"],
  1227. 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"],
  1228. 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"],
  1229. 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"],
  1230. 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"],
  1231. 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"],
  1232. 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"],
  1233. 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"],
  1234. 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"],
  1235. 20 : [
  1236. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1237. //purple scale gwf
  1238. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1239. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1240. //purple chain DC
  1241. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1242. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1243. //
  1244. "Med_Armorsmithing_Tier3_Scale_Pants2", "Med_Armorsmithing_Tier3_Scale_Pants2_Set2",
  1245. "Med_Armorsmithing_Tier3_Scale_Shirt2", "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2",
  1246. //DC
  1247. "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Pants2_Set2",
  1248. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1249.  
  1250. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1251. },
  1252. }, {
  1253. profileName : "craft Scale Trousers",
  1254. isProfileActive : true,
  1255. level : {
  1256. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1257. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1258. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1259. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1260. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1261. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1262. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1263. 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"],
  1264. 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"],
  1265. 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"],
  1266. 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"],
  1267. 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"],
  1268. 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"],
  1269. 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"],
  1270. 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"],
  1271. 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"],
  1272. 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"],
  1273. 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"],
  1274. 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"],
  1275. 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"],
  1276. 20 : [
  1277. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1278. //purple scale gwf
  1279. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1280. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1281. //purple chain DC
  1282. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1283. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1284. //
  1285. "Med_Armorsmithing_Tier3_Scale_Pants2_Set2", "Med_Armorsmithing_Tier3_Scale_Pants2",
  1286. "Med_Armorsmithing_Tier3_Scale_Shirt2_Set2", "Med_Armorsmithing_Tier3_Scale_Shirt2",
  1287. //DC
  1288. "Med_Armorsmithing_Tier3_Chain_Pants2", "Med_Armorsmithing_Tier3_Chain_Pants2_Set2",
  1289. "Med_Armorsmithing_Tier3_Chain_Shirt2", "Med_Armorsmithing_Tier3_Chain_Shirt2_Set2",
  1290.  
  1291. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1292. },
  1293. }, {
  1294. profileName : "craft purple only",
  1295. isProfileActive : true,
  1296. level : {
  1297. 0 : ["Med_Armorsmithing_Tier0_Intro"],
  1298. 1 : ["Med_Armorsmithing_Tier1_Gather_Basic"],
  1299. 2 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Pants_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1300. 3 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1301. 4 : ["Med_Armorsmithing_Tier1_Chain_Armor_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1302. 5 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1303. 6 : ["Med_Armorsmithing_Tier1_Chain_Armor_Set_1", "Med_Armorsmithing_Tier1_Chain_Boots_Set_1", "Med_Armorsmithing_Tier1_Gather_Basic"],
  1304. 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"],
  1305. 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"],
  1306. 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"],
  1307. 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"],
  1308. 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"],
  1309. 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"],
  1310. 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"],
  1311. 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"],
  1312. 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"],
  1313. 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"],
  1314. 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"],
  1315. 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"],
  1316. 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"],
  1317. 20 : [
  1318. "Med_Armorsmithing_Tier3_Trade_Hammer_Purple", "Med_Armorsmithing_Tier3_Trade_Tongs_Purple", "Med_Armorsmithing_Tier3_Trade_Chisel_Purple",
  1319. //purple chain DC
  1320. "Med_Armorsmithing_Tier3_Chain_Shirt_Special_2", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special_2",
  1321. "Med_Armorsmithing_Tier3_Chain_Pants_Special_2", "Med_Armorsmithing_Tier3_Chain_Trousers_Special_2",
  1322. //purple scale gwf
  1323. "Med_Armorsmithing_Tier3_Scale_Shirt_Special_2", "Med_Armorsmithing_Tier3_Scale_Gambeson_Special_2",
  1324. "Med_Armorsmithing_Tier3_Scale_Trousers_Special_2", "Med_Armorsmithing_Tier3_Scale_Pants_Special_2",
  1325. //basic chain DC
  1326. "Med_Armorsmithing_Tier3_Chain_Shirt_Special", "Med_Armorsmithing_Tier3_Chain_Gambeson_Special",
  1327. "Med_Armorsmithing_Tier3_Chain_Trousers_Special", "Med_Armorsmithing_Tier3_Chain_Pants_Special",
  1328. //basic scale GWF
  1329. /*"Med_Armorsmithing_Tier3_Scale_Shirt_Special", "Med_Armorsmithing_Tier3_Scale_Trousers_Special",
  1330. "Med_Armorsmithing_Tier3_Scale_Pants_Special", "Med_Armorsmithing_Tier3_Scale_Trousers_Special",*/
  1331. "Med_Armorsmithing_Tier2_Refine_Basic"],
  1332. },
  1333. }
  1334. ]
  1335. };
  1336.  
  1337. definedTask["Platesmithing"] = {
  1338. taskListName : "Platesmithing",
  1339. taskName : "Armorsmithing_Heavy",
  1340. taskDefaultPriority : 1,
  1341. taskDefaultSlotNum : 0,
  1342. taskActive : true,
  1343. taskDescription : "",
  1344. profiles : [{
  1345. profileName : "default",
  1346. isProfileActive : true,
  1347. level : {
  1348. 0 : ["Hvy_Armorsmithing_Tier0_Intro"],
  1349. 1 : ["Hvy_Armorsmithing_Tier1_Plate_Boots_1", "Hvy_Armorsmithing_Tier1_Plate_Shirt_1", "Hvy_Armorsmithing_Tier1_Gather_Basic"],
  1350. 2 : ["Hvy_Armorsmithing_Tier1_Plate_Armor_1", "Hvy_Armorsmithing_Tier1_Plate_Pants_1", "Hvy_Armorsmithing_Tier1_Gather_Basic"],
  1351. 3 : ["Hvy_Armorsmithing_Tier1_Plate_Armor_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier1_Gather_Basic"],
  1352. 4 : ["Hvy_Armorsmithing_Tier1_Plate_Armor_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier1_Gather_Basic"],
  1353. 5 : ["Hvy_Armorsmithing_Tier1_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier1_Gather_Basic"],
  1354. 6 : ["Hvy_Armorsmithing_Tier1_Plate_Armor_Set_1", "Hvy_Armorsmithing_Tier1_Plate_Boots_Set_1", "Hvy_Armorsmithing_Tier1_Gather_Basic"],
  1355. 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"],
  1356. 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"],
  1357. 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"],
  1358. 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"],
  1359. 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"],
  1360. 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"],
  1361. 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"],
  1362. 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"],
  1363. 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"],
  1364. 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"],
  1365. 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"],
  1366. 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"],
  1367. 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"],
  1368. 20 : ["Hvy_Armorsmithing_Tier2_Refine_Basic"],
  1369. //19:["Plate Armor +4","Fancy Plate Pants","Fancy Plate Shirt","Plate Helm +4","Ornate Plate Pants","Upgrade Armorer","Upgrade Miner","Hire an additional Miner"],
  1370. //20:["Forge Steel Plates"],
  1371. },
  1372. }
  1373. ]
  1374. };
  1375.  
  1376. definedTask["Leatherworking"] = {
  1377. taskListName : "Leatherworking",
  1378. taskName : "Leatherworking",
  1379. taskDefaultPriority : 1,
  1380. taskDefaultSlotNum : 0,
  1381. taskActive : true,
  1382. taskDescription : "",
  1383. profiles : [{
  1384. profileName : "default",
  1385. isProfileActive : true,
  1386. level : {
  1387. 0 : ["Leatherworking_Tier0_Intro_1"],
  1388. 1 : ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier1_Gather_Basic"],
  1389. 2 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1", "Leatherworking_Tier1_Gather_Basic"],
  1390. 3 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1391. 4 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1392. 5 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1393. 6 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1394. 7 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt", "Leatherworking_Tier1_Gather_Basic"],
  1395. 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"],
  1396. 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"],
  1397. 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"],
  1398. 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"],
  1399. 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"],
  1400. 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"],
  1401. 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"],
  1402. 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"],
  1403. 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"],
  1404. 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"],
  1405. 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"],
  1406. 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"],
  1407. 20 : ["Leatherworking_Tier2_Refine_Basic"],
  1408. //19:["Leather Armor +4","Fancy Leather Pants","Fancy Leather Shirt","Leather Helm +4","Ornate Leather Pants","Upgrade Tanner","Upgrade Skinner","Hire an additional Skinner"],
  1409. //20:["Cure Tough Pelts"],
  1410. },
  1411. }, {
  1412. profileName : "craft purples only",
  1413. isProfileActive : true,
  1414. level : {
  1415. 0 : ["Leatherworking_Tier0_Intro_1"],
  1416. 1 : ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier1_Gather_Basic"],
  1417. 2 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1", "Leatherworking_Tier1_Gather_Basic"],
  1418. 3 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1419. 4 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1420. 5 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1421. 6 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1422. 7 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt", "Leatherworking_Tier1_Gather_Basic"],
  1423. 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"],
  1424. 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"],
  1425. 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"],
  1426. 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"],
  1427. 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"],
  1428. 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"],
  1429. 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"],
  1430. 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"],
  1431. 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"],
  1432. 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"],
  1433. 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"],
  1434. 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"],
  1435. //purples first. shirts > tunics > pants.
  1436. 20 : ["Leatherworking_Tier3_Leather_Shirt_Special_3_Set3", "Leatherworking_Tier3_Leather_Shirt_Special_2", "Leatherworking_Tier3_Leather_Tunic_Special_2",
  1437. "Leatherworking_Tier3_Leather_Pants_Special_2", "Leatherworking_Tier3_Leather_Pants_Special_2",
  1438.  
  1439. "Leatherworking_Tier3_Refine_Basic", "Leatherworking_Tier3_Gather_Basic"]
  1440. },
  1441. }, {
  1442. profileName : "craft Shirts",
  1443. isProfileActive : true,
  1444. level : {
  1445. 0 : ["Leatherworking_Tier0_Intro_1"],
  1446. 1 : ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier1_Gather_Basic"],
  1447. 2 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1", "Leatherworking_Tier1_Gather_Basic"],
  1448. 3 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1449. 4 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1450. 5 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1451. 6 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1452. 7 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt", "Leatherworking_Tier1_Gather_Basic"],
  1453. 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"],
  1454. 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"],
  1455. 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"],
  1456. 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"],
  1457. 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"],
  1458. 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"],
  1459. 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"],
  1460. 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"],
  1461. 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"],
  1462. 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"],
  1463. 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"],
  1464. 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"],
  1465. //purples first. shirts > tunics > pants.
  1466. 20 : ["Leatherworking_Tier3_Leather_Shirt_Special_3_Set3", "Leatherworking_Tier3_Leather_Shirt_Special_2", "Leatherworking_Tier3_Leather_Tunic_Special_2",
  1467. "Leatherworking_Tier3_Leather_Pants_Special_2", "Leatherworking_Tier3_Leather_Pants_Special_2",
  1468. // Shirt //Tunic
  1469. "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Shirt2_Set2",
  1470. "Leatherworking_Tier3_Leather_Pants2_Set2", "Leatherworking_Tier3_Leather_Pants2",
  1471. "Leatherworking_Tier3_Refine_Basic",
  1472. "Leatherworking_Tier3_Gather_Basic"]
  1473. },
  1474. }, {
  1475. profileName : "craft Tunic",
  1476. isProfileActive : true,
  1477. level : {
  1478. 0 : ["Leatherworking_Tier0_Intro_1"],
  1479. 1 : ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier1_Gather_Basic"],
  1480. 2 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1", "Leatherworking_Tier1_Gather_Basic"],
  1481. 3 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1482. 4 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1483. 5 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1484. 6 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1485. 7 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt", "Leatherworking_Tier1_Gather_Basic"],
  1486. 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"],
  1487. 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"],
  1488. 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"],
  1489. 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"],
  1490. 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"],
  1491. 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"],
  1492. 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"],
  1493. 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"],
  1494. 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"],
  1495. 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"],
  1496. 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"],
  1497. 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"],
  1498. //purples first. shirts > tunics > pants.
  1499. 20 : ["Leatherworking_Tier3_Leather_Tunic_Special_2", "Leatherworking_Tier3_Leather_Shirt_Special_3_Set3", "Leatherworking_Tier3_Leather_Shirt_Special_2",
  1500. "Leatherworking_Tier3_Leather_Pants_Special_2", "Leatherworking_Tier3_Leather_Pants_Special_2",
  1501.  
  1502. "Leatherworking_Tier3_Leather_Shirt2_Set2", "Leatherworking_Tier3_Leather_Shirt2",
  1503. "Leatherworking_Tier3_Leather_Pants2_Set2", "Leatherworking_Tier3_Leather_Pants2",
  1504. "Leatherworking_Tier3_Refine_Basic",
  1505. "Leatherworking_Tier3_Gather_Basic"]
  1506. },
  1507. }, {
  1508. profileName : "craft Trousers",
  1509. isProfileActive : true,
  1510. level : {
  1511. 0 : ["Leatherworking_Tier0_Intro_1"],
  1512. 1 : ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier1_Gather_Basic"],
  1513. 2 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1", "Leatherworking_Tier1_Gather_Basic"],
  1514. 3 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1515. 4 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1516. 5 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1517. 6 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1518. 7 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt", "Leatherworking_Tier1_Gather_Basic"],
  1519. 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"],
  1520. 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"],
  1521. 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"],
  1522. 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"],
  1523. 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"],
  1524. 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"],
  1525. 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"],
  1526. 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"],
  1527. 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"],
  1528. 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"],
  1529. 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"],
  1530. 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"],
  1531. //purples firsts. pants >shirts > tunics.
  1532. 20 : ["Leatherworking_Tier3_Leather_Pants_Special_2", "Leatherworking_Tier3_Leather_Pants_Special_2",
  1533. "Leatherworking_Tier3_Leather_Shirt_Special_3_Set3", "Leatherworking_Tier3_Leather_Shirt_Special_2", "Leatherworking_Tier3_Leather_Tunic_Special_2",
  1534. "Leatherworking_Tier3_Leather_Pants2_Set2", "Leatherworking_Tier3_Leather_Pants2",
  1535. "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Shirt2_Set2",
  1536. "Leatherworking_Tier3_Refine_Basic", "Leatherworking_Tier3_Gather_Basic"]
  1537. },
  1538. }, {
  1539. profileName : "craft Pants",
  1540. isProfileActive : true,
  1541. level : {
  1542. 0 : ["Leatherworking_Tier0_Intro_1"],
  1543. 1 : ["Leatherworking_Tier1_Leather_Boots_1", "Leatherworking_Tier1_Leather_Shirt_1", "Leatherworking_Tier1_Gather_Basic"],
  1544. 2 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Pants_1", "Leatherworking_Tier1_Gather_Basic"],
  1545. 3 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1546. 4 : ["Leatherworking_Tier1_Leather_Armor_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1547. 5 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1548. 6 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier1_Leather_Boots_Set_1", "Leatherworking_Tier1_Gather_Basic"],
  1549. 7 : ["Leatherworking_Tier1_Leather_Armor_Set_1", "Leatherworking_Tier2_Leather_Boots_Set_1", "Leatherworking_Tier2_Leather_Shirt", "Leatherworking_Tier1_Gather_Basic"],
  1550. 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"],
  1551. 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"],
  1552. 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"],
  1553. 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"],
  1554. 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"],
  1555. 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"],
  1556. 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"],
  1557. 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"],
  1558. 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"],
  1559. 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"],
  1560. 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"],
  1561. 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"],
  1562. //purples firsts. pants >shirts > tunics.
  1563. 20 : ["Leatherworking_Tier3_Leather_Pants_Special_2", "Leatherworking_Tier3_Leather_Pants_Special_2",
  1564. "Leatherworking_Tier3_Leather_Shirt_Special_3_Set3", "Leatherworking_Tier3_Leather_Shirt_Special_2", "Leatherworking_Tier3_Leather_Tunic_Special_2",
  1565.  
  1566. "Leatherworking_Tier3_Leather_Pants2", "Leatherworking_Tier3_Leather_Pants2_Set2",
  1567. "Leatherworking_Tier3_Leather_Shirt2", "Leatherworking_Tier3_Leather_Shirt2_Set2",
  1568. "Leatherworking_Tier3_Refine_Basic", "Leatherworking_Tier3_Gather_Basic"]
  1569. },
  1570. }
  1571. ]
  1572. };
  1573.  
  1574. definedTask["Tailoring"] = {
  1575. taskListName : "Tailoring",
  1576. taskName : "Tailoring",
  1577. taskDefaultPriority : 1,
  1578. taskDefaultSlotNum : 0,
  1579. taskActive : true,
  1580. taskDescription : "",
  1581. profiles : [{
  1582. profileName : "default",
  1583. isProfileActive : true,
  1584. level : {
  1585. 0 : ["Tailoring_Tier0_Intro"],
  1586. 1 : ["Tailoring_Tier1_Cloth_Boots_1", "Tailoring_Tier1_Cloth_Shirt_1", "Tailoring_Tier1_Gather_Basic"],
  1587. 2 : ["Tailoring_Tier1_Cloth_Armor_1", "Tailoring_Tier1_Cloth_Pants_1", "Tailoring_Tier1_Gather_Basic"],
  1588. 3 : ["Tailoring_Tier1_Cloth_Armor_1", "Tailoring_Tier1_Cloth_Boots_Set_1", "Tailoring_Tier1_Gather_Basic"],
  1589. 4 : ["Tailoring_Tier1_Cloth_Armor_1", "Tailoring_Tier1_Cloth_Boots_Set_1", "Tailoring_Tier1_Gather_Basic"],
  1590. 5 : ["Tailoring_Tier1_Cloth_Armor_Set_1", "Tailoring_Tier1_Cloth_Boots_Set_1", "Tailoring_Tier1_Gather_Basic"],
  1591. 6 : ["Tailoring_Tier1_Cloth_Armor_Set_1", "Tailoring_Tier1_Cloth_Boots_Set_1", "Tailoring_Tier1_Gather_Basic"],
  1592. 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"],
  1593. 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"],
  1594. 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"],
  1595. 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"],
  1596. 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"],
  1597. 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"],
  1598. 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"],
  1599. 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"],
  1600. 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"],
  1601. 16 : ["Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier1_Gather_Basic"],
  1602. 17 : ["Tailoring_Tier3_Cloth_Armor_Set_1", "Tailoring_Tier3_Cloth_Pants2_Set2", "Tailoring_Tier3_Cloth_Shirt2", "Tailoring_Tier3_Cloth_Helm_Set_1", "Tailoring_Tier1_Gather_Basic"],
  1603. 18 : ["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2", "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"],
  1604. 19 : ["Tailoring_Tier3_Cloth_Armor_Set_3", "Tailoring_Tier3_Cloth_Armor_Set_2", "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"],
  1605. 20 : ["Tailoring_Tier2_Refine_Basic"],
  1606. //19:["Cloth Robes +4","Fancy Cloth Pants","Fancy Cloth Shirt","Cloth Cap +4","Ornate Cloth Pants","Upgrade Outfitter","Upgrade Weaver","Hire an additional Weaver"],
  1607. //20:["Weave Cotton Cloth"],
  1608. },
  1609. }
  1610. ]
  1611. };
  1612.  
  1613. definedTask["Artificing"] = {
  1614. taskListName : "Artificing",
  1615. taskName : "Artificing",
  1616. taskDefaultPriority : 1,
  1617. taskDefaultSlotNum : 0,
  1618. taskActive : true,
  1619. taskDescription : "",
  1620. profiles : [{
  1621. profileName : "default",
  1622. isProfileActive : true,
  1623. level : {
  1624. 0 : ["Artificing_Tier0_Intro_1"],
  1625. 1 : ["Artificing_Tier1_Pactblade_Convergence_1", "Artificing_Tier1_Symbol_Virtuous_1", "Artificing_Tier1_Gather_Basic"],
  1626. 2 : ["Artificing_Tier1_Pactblade_Convergence_1", "Artificing_Tier1_Icon_Virtuous_1", "Artificing_Tier1_Gather_Basic"],
  1627. 3 : ["Artificing_Tier1_Pactblade_Convergence_1", "Artificing_Tier1_Icon_Virtuous_1", "Artificing_Tier1_Gather_Basic"],
  1628. 4 : ["Artificing_Tier1_Pactblade_Convergence_2", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier1_Gather_Basic"],
  1629. 5 : ["Artificing_Tier1_Pactblade_Convergence_2", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier1_Gather_Basic"],
  1630. 6 : ["Artificing_Tier1_Pactblade_Convergence_2", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier1_Gather_Basic"],
  1631. 7 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1632. 8 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1633. 9 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1634. 10 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1635. 11 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1636. 12 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1637. 13 : ["Artificing_Tier2_Pactblade_Temptation_3", "Artificing_Tier1_Icon_Virtuous_2", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1638. 14 : ["Artificing_Tier3_Pactblade_Temptation_4", "Artificing_Tier3_Icon_Virtuous_4", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1639. 15 : ["Artificing_Tier3_Pactblade_Temptation_4", "Artificing_Tier3_Icon_Virtuous_4", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1640. 16 : ["Artificing_Tier3_Pactblade_Temptation_4", "Artificing_Tier3_Icon_Virtuous_4", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1641. 17 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1642. 18 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1643. 19 : ["Artificing_Tier3_Pactblade_Temptation_5", "Artificing_Tier3_Icon_Virtuous_5", "Artificing_Tier3_Refine_Basic", "Artificing_Tier2_Refine_Basic", "Artificing_Tier1_Gather_Basic"],
  1644. 20 : ["Artificing_Tier2_Refine_Basic"],
  1645. //19:["Virtuous Icon +5","Upgrade Engraver","Upgrade Carver","Hire an additional Carver"],
  1646. //20:["7:Craft Ornamental metal and Carved Wood"],
  1647. },
  1648. }
  1649. ]
  1650. };
  1651.  
  1652. definedTask["Weaponsmithing"] = {
  1653. taskListName : "Weaponsmithing",
  1654. taskName : "Weaponsmithing",
  1655. taskDefaultPriority : 1,
  1656. taskDefaultSlotNum : 0,
  1657. taskActive : true,
  1658. taskDescription : "",
  1659. profiles : [{
  1660. profileName : "default",
  1661. isProfileActive : true,
  1662. level : {
  1663. 0 : ["Weaponsmithing_Tier0_Intro"],
  1664. 1 : ["Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1665. 2 : ["Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1666. 3 : ["Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1667. 4 : ["Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1668. 5 : ["Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1669. 6 : ["Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1670. 7 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1671. 8 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1672. 9 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1673. 10 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1674. 11 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1675. 12 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1676. 13 : ["Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1677. 14 : ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1678. 15 : ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1679. 16 : ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1680. 17 : ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1681. 18 : ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1682. 19 : ["Weaponsmithing_Tier3_Dagger_4", "Weaponsmithing_Tier2_Dagger_3", "Weaponsmithing_Tier1_Dagger_2", "Weaponsmithing_Tier1_Dagger_1", "Weaponsmithing_Tier1_Gather_Basic"],
  1683. 20 : ["Weaponsmithing_Tier2_Refine_Basic"],
  1684. //19:["Dagger+4","Upgrade Grinder","Upgrade Smelter","Hire an additional Smelter"],
  1685. //20:["Craft Steel Blades and Barausk Hafts"],
  1686. },
  1687. }
  1688. ]
  1689. };
  1690.  
  1691. definedTask["Alchemy"] = {
  1692. taskListName : "Alchemy",
  1693. taskName : "Alchemy",
  1694. taskDefaultPriority : 1,
  1695. taskDefaultSlotNum : 0,
  1696. taskActive : true,
  1697. taskDescription : "",
  1698. profiles : [{
  1699. profileName : "default",
  1700. isProfileActive : true,
  1701. level : {
  1702. 0 : ["Alchemy_Tier0_Intro_1"],
  1703. 1 : ["Alchemy_Tier1_Experiment_Rank2", "Alchemy_Tier1_Experimentation_Rank1", "Alchemy_Tier1_Refine_Special"],
  1704. 2 : ["Alchemy_Tier1_Experiment_Rank3", "Alchemy_Tier1_Experimentation_Rank2", "Alchemy_Tier1_Refine_Special"],
  1705. 3 : ["Alchemy_Tier1_Experiment_Rank4", "Alchemy_Tier1_Experimentation_Rank3", "Alchemy_Tier1_Refine_Special"],
  1706. 4 : ["Alchemy_Tier1_Experiment_Rank5", "Alchemy_Tier1_Experimentation_Rank4", "Alchemy_Tier1_Refine_Special"],
  1707. 5 : ["Alchemy_Tier1_Experiment_Rank6", "Alchemy_Tier1_Experimentation_Rank5", "Alchemy_Tier1_Refine_Special"],
  1708. 6 : ["Alchemy_Tier1_Experiment_Rank7", "Alchemy_Tier1_Experimentation_Rank6", "Alchemy_Tier1_Refine_Special"],
  1709. 7 : ["Alchemy_Tier2_Experiment_Rank08", "Alchemy_Tier2_Experimentation_Rank07", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1710. 8 : ["Alchemy_Tier2_Experiment_Rank09", "Alchemy_Tier2_Experimentation_Rank08", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1711. 9 : ["Alchemy_Tier2_Experiment_Rank10", "Alchemy_Tier2_Experimentation_Rank09", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1712. 10 : ["Alchemy_Tier2_Experiment_Rank11", "Alchemy_Tier2_Experimentation_Rank10", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1713. 11 : ["Alchemy_Tier2_Experiment_Rank12", "Alchemy_Tier2_Experimentation_Rank11", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1714. 12 : ["Alchemy_Tier2_Experiment_Rank13", "Alchemy_Tier2_Experimentation_Rank12", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1715. 13 : ["Alchemy_Tier2_Experiment_Rank14", "Alchemy_Tier2_Experimentation_Rank13", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1716. 14 : ["Alchemy_Tier3_Experiment_Rank15", "Alchemy_Tier3_Experimentation_Rank14", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1717. 15 : ["Alchemy_Tier3_Experiment_Rank16", "Alchemy_Tier3_Experimentation_Rank15", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1718. 16 : ["Alchemy_Tier3_Experiment_Rank17", "Alchemy_Tier3_Experimentation_Rank16", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1719. 17 : ["Alchemy_Tier3_Experiment_Rank18", "Alchemy_Tier3_Experimentation_Rank17", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1720. 18 : ["Alchemy_Tier3_Experiment_Rank19", "Alchemy_Tier3_Experimentation_Rank18", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1721. 19 : ["Alchemy_Tier3_Experiment_Rank20", "Alchemy_Tier3_Experimentation_Rank19", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier2_Refine_Basic", "Alchemy_Tier1_Refine_Special"],
  1722. //20:["Alchemy_Tier3_Experimentation_Rank20"],
  1723. //19:["Alchemical Research","Rank 20 ","Upgrade Mixologist","Upgrade Apothecary","Hire an additional Apothecary"],
  1724. //20:["Alchemy_Tier2_Aquavitae_2"],,"Alchemy_Tier3_Potency_Potion_Major"
  1725. 20 : ["Alchemy_Tier3_Experimentation_Rank20", "Alchemy_Tier3_Potency_Potion_Major", "Alchemy_Tier3_Protection_Potion_Major", "Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier3_Gather_Components"],
  1726. },
  1727. },
  1728. {
  1729. profileName : "Protection",
  1730. isProfileActive: true,
  1731. level: {
  1732. 0: ["Alchemy_Tier0_Intro_1"],
  1733. 1: ["Alchemy_Tier1_Experiment_Rank2", "Alchemy_Tier1_Experimentation_Rank1"],
  1734. 2: ["Alchemy_Tier1_Experiment_Rank3", "Alchemy_Tier1_Experimentation_Rank2"],
  1735. 3: ["Alchemy_Tier1_Experiment_Rank4", "Alchemy_Tier1_Experimentation_Rank3"],
  1736. 4: ["Alchemy_Tier1_Experiment_Rank5", "Alchemy_Tier1_Experimentation_Rank4"],
  1737. 5: ["Alchemy_Tier1_Experiment_Rank6", "Alchemy_Tier1_Experimentation_Rank5"],
  1738. 6: ["Alchemy_Tier1_Experiment_Rank7", "Alchemy_Tier1_Experimentation_Rank6"],
  1739. 7: ["Alchemy_Tier2_Experiment_Rank08", "Alchemy_Tier2_Experimentation_Rank07"],
  1740. 8: ["Alchemy_Tier2_Experiment_Rank09", "Alchemy_Tier2_Experimentation_Rank08"],
  1741. 9: ["Alchemy_Tier2_Experiment_Rank10", "Alchemy_Tier2_Experimentation_Rank09"],
  1742. 10: ["Alchemy_Tier2_Experiment_Rank11", "Alchemy_Tier2_Experimentation_Rank10"],
  1743. 11: ["Alchemy_Tier2_Experiment_Rank12", "Alchemy_Tier2_Experimentation_Rank11"],
  1744. 12: ["Alchemy_Tier2_Experiment_Rank13", "Alchemy_Tier2_Experimentation_Rank12"],
  1745. 13: ["Alchemy_Tier2_Experiment_Rank14", "Alchemy_Tier2_Experimentation_Rank13"],
  1746. 14: ["Alchemy_Tier3_Experiment_Rank15", "Alchemy_Tier3_Experimentation_Rank14"],
  1747. 15: ["Alchemy_Tier3_Experiment_Rank16", "Alchemy_Tier3_Experimentation_Rank15"],
  1748. 16: ["Alchemy_Tier3_Experiment_Rank17", "Alchemy_Tier3_Experimentation_Rank16"],
  1749. 17: ["Alchemy_Tier3_Experiment_Rank18", "Alchemy_Tier3_Experimentation_Rank17"],
  1750. 18: ["Alchemy_Tier3_Experiment_Rank19", "Alchemy_Tier3_Experimentation_Rank18"],
  1751. 19: ["Alchemy_Tier3_Experiment_Rank20", "Alchemy_Tier3_Experimentation_Rank19"],
  1752. 20:["Alchemy_Tier3_Experimentation_Rank20","Alchemy_Tier3_Protection_Potion_Major", "Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier3_Gather_Components"],
  1753. //19:["Alchemical Research","Rank 20 Experimentation","Upgrade Mixologist","Upgrade Apothecary","Hire an additional Apothecary"],
  1754. //20:["Alchemy_Tier2_Aquavitae_2"],,"Alchemy_Tier3_Potency_Potion_Major"
  1755. //20: ["Alchemy_Tier3_Protection_Potion_Major", "Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier3_Gather_Components"],
  1756. },
  1757. },
  1758. {
  1759. profileName : "Potency",
  1760. isProfileActive: true,
  1761. level: {
  1762. 0: ["Alchemy_Tier0_Intro_1"],
  1763. 1: ["Alchemy_Tier1_Experiment_Rank2", "Alchemy_Tier1_Experimentation_Rank1"],
  1764. 2: ["Alchemy_Tier1_Experiment_Rank3", "Alchemy_Tier1_Experimentation_Rank2"],
  1765. 3: ["Alchemy_Tier1_Experiment_Rank4", "Alchemy_Tier1_Experimentation_Rank3"],
  1766. 4: ["Alchemy_Tier1_Experiment_Rank5", "Alchemy_Tier1_Experimentation_Rank4"],
  1767. 5: ["Alchemy_Tier1_Experiment_Rank6", "Alchemy_Tier1_Experimentation_Rank5"],
  1768. 6: ["Alchemy_Tier1_Experiment_Rank7", "Alchemy_Tier1_Experimentation_Rank6"],
  1769. 7: ["Alchemy_Tier2_Experiment_Rank08", "Alchemy_Tier2_Experimentation_Rank07"],
  1770. 8: ["Alchemy_Tier2_Experiment_Rank09", "Alchemy_Tier2_Experimentation_Rank08"],
  1771. 9: ["Alchemy_Tier2_Experiment_Rank10", "Alchemy_Tier2_Experimentation_Rank09"],
  1772. 10: ["Alchemy_Tier2_Experiment_Rank11", "Alchemy_Tier2_Experimentation_Rank10"],
  1773. 11: ["Alchemy_Tier2_Experiment_Rank12", "Alchemy_Tier2_Experimentation_Rank11"],
  1774. 12: ["Alchemy_Tier2_Experiment_Rank13", "Alchemy_Tier2_Experimentation_Rank12"],
  1775. 13: ["Alchemy_Tier2_Experiment_Rank14", "Alchemy_Tier2_Experimentation_Rank13"],
  1776. 14: ["Alchemy_Tier3_Experiment_Rank15", "Alchemy_Tier3_Experimentation_Rank14"],
  1777. 15: ["Alchemy_Tier3_Experiment_Rank16", "Alchemy_Tier3_Experimentation_Rank15"],
  1778. 16: ["Alchemy_Tier3_Experiment_Rank17", "Alchemy_Tier3_Experimentation_Rank16"],
  1779. 17: ["Alchemy_Tier3_Experiment_Rank18", "Alchemy_Tier3_Experimentation_Rank17"],
  1780. 18: ["Alchemy_Tier3_Experiment_Rank19", "Alchemy_Tier3_Experimentation_Rank18"],
  1781. 19: ["Alchemy_Tier3_Experiment_Rank20", "Alchemy_Tier3_Experimentation_Rank19"],
  1782. 20:["Alchemy_Tier3_Experimentation_Rank20","Alchemy_Tier3_Potency_Potion_Major", "Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier3_Gather_Components"],
  1783. //19:["Alchemical Research","Rank 20 Experimentation","Upgrade Mixologist","Upgrade Apothecary","Hire an additional Apothecary"],
  1784. //20:["Alchemy_Tier2_Aquavitae_2"],,"Alchemy_Tier3_Potency_Potion_Major"
  1785. //20: ["Alchemy_Tier3_Protection_Potion_Major", "Alchemy_Tier2_Aquaregia", "Alchemy_Tier3_Refine_Basic", "Alchemy_Tier3_Gather_Components"],
  1786. },
  1787. }
  1788. ]
  1789. };
  1790.  
  1791. // Load Settings
  1792. var settingnames = [
  1793. {name: 'paused', title: 'Pause Script', def: false, type: 'checkbox', pane:'main', tooltip: 'Disable All Automation'},
  1794. {name: 'debug', title: 'Enable Debug', def: false, type: 'checkbox', pane:'main', tooltip: 'Enable all debug output to console', onsave: function (newValue, oldValue) {
  1795. console = newValue ? unsafeWindow.console || fouxConsole : fouxConsole;
  1796. }},
  1797. {name: 'optionals', title: 'Fill Optional Assets', def: true, type: 'checkbox', pane:'prof', tooltip: 'Enable to include selecting the optional assets of tasks'},
  1798. {name: 'autopurchase', title: 'Auto Purchase Resources', def: true, type: 'checkbox', pane:'prof', tooltip: 'Automatically purchase required resources from gateway shop (100 at a time)'},
  1799. {name: 'trainassets', title: 'Train Assets', def: true, type: 'checkbox', pane:'prof', tooltip: 'Enable training/upgrading of asset worker resources'},
  1800. {name: 'skippatrol', title: 'Skip Patrol task if > 10 calims', def: true, type: 'checkbox', pane:'prof', tooltip: 'Skip "Patrol the Mines" leadership task if there are more than 10 mining claims in the inventory'},
  1801. {name: 'refinead', title: 'Refine AD', def: true, type: 'checkbox', pane:'main', tooltip: 'Enable refining of AD on character switch'},
  1802. {name: 'openrewards', title: 'Open Reward Chests', def: false, type: 'checkbox', pane:'main', tooltip: 'Enable opeing of leadership chests on character switch'}, //MAC-NW
  1803. {name: 'autoreload', title: 'Auto Reload', def: false, type: 'checkbox', pane:'main', tooltip: 'Enabling this will reload the gateway periodically. (Ensure Auto Login is enabled)'},
  1804. {name: 'autovendor_junk', title: 'Auto Vendor junk..', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all (currently) winterfest fireworks+lanterns'}, //MAC-NW
  1805. {name: 'autovendor_kits_altars_limit', title: 'Vendor/Maintain Altar Node Kit Stacks', def: false, type: 'checkbox', pane:'vend', 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
  1806. {name: 'autovendor_kits_altars_all', title: 'Vendor All Altar Node Kit Stacks', def: false, type: 'checkbox', pane:'vend', tooltip: 'Sell ALL skill kits Altars.'}, // RottenMind
  1807. {name: 'autovendor_profresults', title: 'Vendor/Maintain Prof Crafted Levelup Items', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor off Tier 1 to 5 items produced and reused for leveling crafting professions.'},
  1808. {name: 'autovendor_pots1', title: 'Auto Vendor minor potions (lvl 1)', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all minor potions (lvl 1) found in player bags'}, //MAC-NW
  1809. {name: 'autovendor_pots2', title: 'Auto Vendor lesser potions (lvl 15)', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all lesser potions (lvl 15) found in player bags'}, //MAC-NW
  1810. {name: 'autovendor_pots3', title: 'Auto Vendor potions (lvl 30)', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all potions (lvl 30) found in player bags'}, //MAC-NW
  1811. {name: 'autovendor_pots4', title: 'Auto Vendor greater potions (lvl 45)', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all greater potions (lvl 45) found in player bags'}, //MAC-NW
  1812. {name: 'autovendor_rank1', title: 'Auto Vendor enchants & runes Rank 1', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all Rank 1 enchantments & runestones found in player bags'}, //MAC-NW
  1813. {name: 'autovendor_rank2', title: 'Auto Vendor enchants & runes Rank 2', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all Rank 2 enchantments & runestones found in player bags'}, //MAC-NW
  1814. {name: 'autovendor_rank3', title: 'Auto Vendor enchants & runes Rank 3', def: false, type: 'checkbox', pane:'vend', tooltip: 'Vendor all Rank 3 enchantments & runestones found in player bags'}, // edited by RottenMind
  1815. {name: 'autologin', title: 'Attempt to login automatically', def: false, type: 'checkbox', pane:'main', tooltip: 'Automatically attempt to login to the neverwinter gateway site', border: true},
  1816. {name: 'nw_username', title: 'Neverwinter Username', def: '', type: 'text', pane:'main', tooltip: ''},
  1817. {name: 'nw_password', title: 'Neverwinter Password', def: '', type: 'password', pane:'main', tooltip: ''},
  1818. // MAC-NW AD Consolidation
  1819. {name: 'autoexchange', title: 'Consolidate AD via ZEX', def: false, type: 'checkbox', pane:'bank', tooltip: 'Automatically attempt to post, cancel and withdraw AD via ZEX and consolidate to designated character', border: true},
  1820. {name: 'bankchar', title: 'Character Name of Banker', def: '', type: 'text', pane:'bank', tooltip: 'Enter name of the character to hold account AD'},
  1821. {name: 'banktransmin', title: 'Min AD for Transfer', def: '22000', type: 'text', pane:'bank', tooltip: 'Enter minimum AD limit for it to be cosidered for transfer off a character'},
  1822. {name: 'bankcharmin', title: 'Min Character balance', def: '8000', type: 'text', pane:'bank', tooltip: 'Enter the amount of AD to always keep available on characters'},
  1823. {name: 'banktransrate', title: 'AD per Zen Rate (in zen)', def: '300', type: 'text', pane:'bank', tooltip: 'Enter default rate to use for transfering through ZEX'},
  1824. {name: 'charcount', title: 'Enter number of characters to use (Save and Apply to update settings form)', def: '2', type: 'text', pane:'main', tooltip: 'Enter number of characters to use (Save and Apply to update settings form)', border: true},
  1825. // MAC-NW
  1826. ];
  1827.  
  1828. // Load local settings cache (unsecured)
  1829. var settings = {};
  1830. for (var i = 0; i < settingnames.length; i++) {
  1831. // Ignore label types
  1832. if (settingnames[i].type === 'label') {
  1833. continue;
  1834. }
  1835. settings[settingnames[i].name] = GM_getValue(settingnames[i].name, settingnames[i].def);
  1836. // call the onsave for the setting if it exists
  1837. if (typeof(settingnames[i].onsave) === "function") {
  1838. console.log("Calling 'onsave' for", settingnames[i].name);
  1839. settingnames[i].onsave(settings[settingnames[i].name], settings[settingnames[i].name]);
  1840. }
  1841. }
  1842.  
  1843. if (settings["charcount"] < 1) {
  1844. settings["charcount"] = 1;
  1845. }
  1846. if (settings["charcount"] > 99) {
  1847. settings["charcount"] = 99;
  1848. }
  1849.  
  1850. // Profession priority list by order
  1851. var tasklist = [
  1852. definedTask["Leadership"],
  1853. definedTask["Jewelcrafting"],
  1854. definedTask["Alchemy"],
  1855. definedTask["Weaponsmithing"],
  1856. definedTask["Artificing"],
  1857. definedTask["Mailsmithing"],
  1858. definedTask["Platesmithing"],
  1859. definedTask["Leatherworking"],
  1860. definedTask["Tailoring"],
  1861. definedTask["Black Ice Shaping"],
  1862. definedTask["Winter Event"],
  1863. definedTask["Siege Event"],
  1864.  
  1865. ];
  1866.  
  1867. var priorityOptions = [{name: 'high', value: 0},{name: 'medium', value: 1},{name: 'low', value: 2}];
  1868. var optionalsOptions = [{name: 'no', value: 0},{name: 'yes', value: 1}];
  1869.  
  1870. var charSettings = [];
  1871. for (var i = 0; i < settings["charcount"]; i++) {
  1872. charSettings.push({name: 'nw_charname' + i, title: 'Character', def: 'Character ' + (i + 1), type: 'text', tooltip: 'Characters Name'});
  1873. tasklist.forEach(function(task) {
  1874. var profileNames = [];
  1875. task.profiles.forEach( function(profile) { if (profile.isProfileActive) profileNames.push({name: profile.profileName, value: profile.profileName}); } );
  1876. //charSettings.push({name: task["taskListName"] + i, title: task["taskListName"], profileNames: profileNames, def: task["taskDefaultSlotNum"] , type: 'text', tooltip: 'Number of slots to assign to ' + task["taskListName"]});
  1877. charSettings.push({name: task.taskListName + i, title: task.taskListName, def: task.taskDefaultSlotNum , type: 'text', type2: 'task', tooltip: 'Number of slots to assign to ' + task.taskListName, pane: "tasks"});
  1878. charSettings.push({name: task.taskListName + i + '_profile', title: task.taskListName + '_profile', options: profileNames, def: profileNames[0].value, type: 'select', type2: 'task-property', tooltip: '', pane: "tasks"});
  1879. charSettings.push({name: task.taskListName + i + '_priority', title: task.taskListName + '_priority', options: priorityOptions, def: task.taskDefaultPriority , type: 'select', type2: 'task-property', tooltip: '', pane: "tasks"});
  1880. charSettings.push({name: task.taskListName + i + '_optionals', title: task.taskListName + '_optionals', options: optionalsOptions, def: 0 , type: 'select', type2: 'task-property', tooltip: '', pane: "tasks"});
  1881. });
  1882.  
  1883. charSettings.push({name: 'test' + i, title: 'test', def: 1, type: 'text', tooltip: 'test', pane:"settings"});
  1884. }
  1885.  
  1886. for (var i = 0; i < charSettings.length; i++) {
  1887. settings[charSettings[i].name] = GM_getValue(charSettings[i].name, charSettings[i].def);
  1888. }
  1889.  
  1890. var refineCounters = JSON.parse(GM_getValue("refineCounters", "{}"));
  1891. if (!refineCounters) {
  1892. console.log('refineCounters couldn\'t be retrieved, reseting.');
  1893. refineCounters = {};
  1894. };
  1895.  
  1896. // Page Settings
  1897. var PAGES = Object.freeze({
  1898. LOGIN : {
  1899. name : "Login",
  1900. path : "div#login"
  1901. },
  1902. GUARD : {
  1903. name : "Account Guard",
  1904. path : "div#page-accountguard"
  1905. },
  1906. });
  1907.  
  1908. /**
  1909. * Uses the page settings to determine which page is currently displayed
  1910. */
  1911. function GetCurrentPage() {
  1912. for each(var page in PAGES) {
  1913. if ($(page["path"]).filter(":visible").length) {
  1914. return page;
  1915. }
  1916. }
  1917. }
  1918.  
  1919. /**
  1920. * Logs in to gateway
  1921. * No client.dataModel exists at this stage
  1922. */
  1923. function page_LOGIN() {
  1924. //if (!$("form > p.error:visible").length && settings["autologin"]) {
  1925. // No previous log in error - attempt to log in
  1926. console.log("Setting username");
  1927. $("input#user").val(settings["nw_username"]);
  1928. console.log("Setting password");
  1929. $("input#pass").val(settings["nw_password"]);
  1930. console.log("Clicking Login Button");
  1931. $("div#login > input").click();
  1932. //}
  1933. dfdNextRun.resolve(delay.LONG);
  1934. }
  1935.  
  1936. /**
  1937. * Action to perform on account guard page
  1938. */
  1939. function page_GUARD() {
  1940. // Do nothing on the guard screen
  1941. dfdNextRun.resolve(delay.LONG);
  1942. }
  1943.  
  1944. /* !!!test (on login)
  1945. characters = []
  1946. console.log(client.dataModel.model.loginInfo.choices);
  1947. var tempChars = JSON.parse( GM_getValue("characters", "{}") );
  1948. if(!tempChars) {
  1949. console.log('JSON.parse failed - The stored value for "characters" is likely to be corrupted.');
  1950. };
  1951. client.dataModel.model.loginInfo.choices.forEach( function (char) {
  1952. console.log(char.name);
  1953. })
  1954. */
  1955.  
  1956. /**
  1957. * Collects rewards for tasks or starts new tasks
  1958. * Function is called once per new task and returns true if an action is created
  1959. * If no action is started function returns false to switch characters
  1960. */
  1961. function processCharacter() {
  1962. // Switch to professions page to show task progression
  1963. unsafeWindow.location.hash = "#char(" + encodeURI(unsafeWindow.client.getCurrentCharAtName()) + ")/professions";
  1964.  
  1965. // Collect rewards for completed tasks and restart
  1966. if (unsafeWindow.client.dataModel.model.ent.main.itemassignments.complete) {
  1967. unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.forEach(function (entry) {
  1968. if (entry.hascompletedetails) {
  1969. unsafeWindow.client.professionTaskCollectRewards(entry.uassignmentid);
  1970. }
  1971. });
  1972. dfdNextRun.resolve();
  1973. return true;
  1974. }
  1975.  
  1976. // Check for available slots and start new task
  1977. console.log("Looking for empty slots.");
  1978. if (unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.filter(function (entry) {
  1979. return (!entry.islockedslot && !entry.uassignmentid);
  1980. }).length) {
  1981. // Go through the professions to assign tasks until specified slots filled
  1982. console.log("Prioritizing task lists.");
  1983. var charTaskList = tasklist
  1984. .filter(function (task) {
  1985. return (settings[task.taskListName] > 0);
  1986. })
  1987. .sort(function (a, b) {
  1988. return (settings[a.taskListName + '' + charcurrent + '_priority'] - settings[b.taskListName + charcurrent + '_priority']);
  1989. });
  1990.  
  1991. console.log("Attempting to fill the slot.");
  1992. for (var i = 0; i < charTaskList.length; i++) {
  1993. var currentTasks = unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.filter(function (entry) {
  1994. return entry.category == charTaskList[i].taskName;
  1995. });
  1996. if (currentTasks.length < settings[charTaskList[i].taskListName]) {
  1997. unsafeWindow.client.professionFetchTaskList('craft_' + charTaskList[i].taskName);
  1998. window.setTimeout(function () {
  1999. createNextTask(charTaskList[i], 0);
  2000. }, delay.SHORT);
  2001. return true;
  2002. }
  2003. }
  2004. console.log("All task counts assigned");
  2005. } else {
  2006. console.log("No available task slots");
  2007. }
  2008.  
  2009. // TODO: Add code to get next task finish time
  2010. chartimers[charcurrent] = getNextFinishedTask();
  2011.  
  2012. // Add diamond count
  2013. chardiamonds[charcurrent] = unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds;
  2014. console.log(settings["nw_charname" + charcurrent] + "'s", "Astral Diamonds:", chardiamonds[charcurrent]);
  2015. // Add gold count
  2016. chargold[charcurrent] = parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.gold);
  2017. return false;
  2018. }
  2019.  
  2020. /**
  2021. * Switch to a character's swordcoast adventures and collect the daily reward
  2022. */
  2023. function processSwordCoastDailies(_charStartIndex) {
  2024. var _accountName = unsafeWindow.client.dataModel.model.loginInfo.publicaccountname;
  2025. var _charIndex = (!_charStartIndex || parseInt(_charStartIndex) > (charSettings.length + 1) || parseInt(_charStartIndex) < 0)
  2026. ? 0 : parseInt(_charStartIndex);
  2027. var _fullCharName = settings["nw_charname" + _charIndex] + '@' + _accountName;
  2028. var _hasLoginDaily = 0;
  2029. var _isLastChar = false;
  2030. var _scaHashMatch = /\/adventures$/;
  2031. if (!settings["paused"])
  2032. PauseSettings("pause");
  2033.  
  2034. // Switch to professions page to show task progression
  2035. if (!_scaHashMatch.test(unsafeWindow.location.hash)) {
  2036. return;
  2037. } else if (unsafeWindow.location.hash != "#char(" + encodeURI(_fullCharName) + ")/adventures") {
  2038. unsafeWindow.location.hash = "#char(" + encodeURI(_fullCharName) + ")/adventures";
  2039. }
  2040.  
  2041. if (settings["nw_charname" + (_charIndex + 1)] === undefined)
  2042. _isLastChar = true;
  2043.  
  2044. WaitForState("").done(function () {
  2045. try {
  2046. _hasLoginDaily = client.dataModel.model.gatewaygamedata.dailies.left.logins;
  2047. } catch (e) {
  2048. // TODO: Use callback function
  2049. window.setTimeout(function () {
  2050. processSwordCoastDailies(_charIndex);
  2051. }, delay.SHORT);
  2052. return;
  2053. }
  2054.  
  2055. console.log("Checking SCA Dialy for", _fullCharName, "...");
  2056.  
  2057. // Do SCA daily dice roll if the button comes up
  2058. WaitForState(".daily-dice-intro").done(function () {
  2059. $(".daily-dice-intro button").trigger('click');
  2060. WaitForState(".daily-awards-button").done(function () {
  2061. $(".daily-awards-button button").trigger('click');
  2062. });
  2063. });
  2064.  
  2065. // If Dice roll dialog is non existant
  2066. WaitForNotState(".modal-window.daily-dice").done(function () {
  2067. if (_isLastChar) {
  2068. window.setTimeout(function () {
  2069. PauseSettings("unpause");
  2070. }, 3000);
  2071. } else {
  2072. window.setTimeout(function () {
  2073. processSwordCoastDailies(_charIndex + 1);
  2074. }, 3000);
  2075. }
  2076. });
  2077. });
  2078. }
  2079.  
  2080. /**
  2081. * Finds the task finishing next & returns the date or NULL otherwise
  2082. *
  2083. * @return {Date} / {null}
  2084. */
  2085. function getNextFinishedTask() {
  2086. var tmpNext,
  2087. next = null;
  2088. unsafeWindow.client.dataModel.model.ent.main.itemassignments.assignments.forEach(function (entry) {
  2089. if (entry.uassignmentid) {
  2090. tmpNext = new Date(entry.ufinishdate);
  2091. if (!next || tmpNext < next) {
  2092. next = tmpNext;
  2093. }
  2094. }
  2095. });
  2096. if (next) {
  2097. console.log("Next finished task at " + next.toLocaleString());
  2098. } else {
  2099. console.log("No next finishing date found!!");
  2100. }
  2101. return next;
  2102. }
  2103.  
  2104. /**
  2105. * Iterative approach to finding the next task to assign to an open slot.
  2106. *
  2107. * @param {Array} prof The tasklist for the profession being used
  2108. * @param {int} i The current task number being attempted
  2109. */
  2110. function createNextTask(prof, i) {
  2111. // TODO: Use callback function
  2112. 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) {
  2113. console.log('Task list not loaded for:', prof.taskName);
  2114. window.setTimeout(function () {
  2115. createNextTask(prof, i);
  2116. }, delay.SHORT);
  2117. return false;
  2118. }
  2119.  
  2120. // Check level
  2121. var level = unsafeWindow.client.dataModel.model.ent.main.itemassignmentcategories.categories.filter(function (entry) {
  2122. return entry.name == prof.taskName;
  2123. })[0].currentrank;
  2124. var profile = prof.profiles.filter(function (profile) {
  2125. return profile.profileName == settings[prof.taskListName + charcurrent + '_profile'];
  2126. });
  2127. console.log('Selecting profile: ' + profile[0].profileName);
  2128. var list = profile[0].level[level];
  2129. if (list.length <= i) {
  2130. console.log("Nothing Found");
  2131. switchChar();
  2132. return false;
  2133. }
  2134. console.log(prof.taskName, "is level", level);
  2135. console.log("createNextTask", list.length, i);
  2136.  
  2137. var taskName = list[i];
  2138. console.log("Searching for task:", taskName);
  2139.  
  2140. // Search for task to start
  2141. var task = searchForTask(taskName, prof.taskName);
  2142.  
  2143. /** TODO: Use this code once below can be replaced properly
  2144. if (task === null) {
  2145. console.log("Skipping task selection to purchase resources");
  2146. dfdNextRun.resolve();
  2147. }
  2148. else if (task) {
  2149. startTask(task);
  2150. dfdNextRun.resolve();
  2151. }
  2152. else {
  2153. console.log('Finding next task');
  2154. createNextTask(prof, i+1);
  2155. }
  2156. **/
  2157.  
  2158. // Finish createNextTask function
  2159. if (task === null) {
  2160. console.log("Skipping task selection to purchase resources");
  2161. dfdNextRun.resolve();
  2162. return true;
  2163. }
  2164. if (task) {
  2165. antiInfLoopTrap.currTaskName = task.def.name;
  2166. antiInfLoopTrap.currCharName = unsafeWindow.client.getCurrentCharAtName();
  2167. task = '/professions-tasks/' + prof.taskName + '/' + task.def.name;
  2168. console.log('Task Found');
  2169. unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')' + task);
  2170. WaitForState("div.page-professions-taskdetails").done(function () {
  2171. // Click all buttons and select an item to use in the slot
  2172. var def = $.Deferred();
  2173. var buttonList = $('.taskdetails-assets:eq(1)').find("button");
  2174. if (buttonList.length && settings["optionals"] && settings[prof.taskName + charcurrent + '_optionals']) {
  2175. SelectItemFor(buttonList, 0, def, prof);
  2176. } else {
  2177. def.resolve();
  2178. }
  2179. def.done(function () {
  2180. // All items are populated
  2181. console.log("Items Populated");
  2182. // Click the Start Task Button
  2183. //Get the start task button if it is enabled
  2184. var enabledButton = $(".footer-professions-taskdetails .button.epic:not('.disabled') button");
  2185. if (enabledButton.length) {
  2186. console.log("Clicking Start Task Button");
  2187. enabledButton.trigger('click');
  2188. WaitForState("").done(function () {
  2189. // Done
  2190. dfdNextRun.resolve(delay.SHORT);
  2191. });
  2192. if (antiInfLoopTrap.prevCharName == antiInfLoopTrap.currCharName && antiInfLoopTrap.prevTaskName == antiInfLoopTrap.currTaskName) {
  2193. antiInfLoopTrap.startCounter++;
  2194. console.log(antiInfLoopTrap.prevCharName + " starts " + antiInfLoopTrap.prevTaskName + " " + antiInfLoopTrap.startCounter + " time in row");
  2195. } else {
  2196. antiInfLoopTrap.prevCharName = antiInfLoopTrap.currCharName;
  2197. antiInfLoopTrap.prevTaskName = antiInfLoopTrap.currTaskName;
  2198. antiInfLoopTrap.startCounter = 1;
  2199. }
  2200. if (antiInfLoopTrap.startCounter >= 10) {
  2201. console.log("Restart needed: " + (antiInfLoopTrap.trapActivation-antiInfLoopTrap.startCounter) + " loop circuits to restart");
  2202. }
  2203. return true;
  2204. } else { // Button not enabled, something required was probably missing
  2205. // Go back
  2206. $(".footer-professions-taskdetails .button button.resetWindow").trigger('click');
  2207. WaitForState("").done(function () {
  2208. // continue with the next one
  2209. console.log('Finding next task');
  2210. createNextTask(prof, i + 1);
  2211. });
  2212. }
  2213. });
  2214. });
  2215. } else {
  2216. console.log('Finding next task');
  2217. createNextTask(prof, i + 1);
  2218. }
  2219. }
  2220. /** Count resouce in bags
  2221. *
  2222. * @param {string} name The name of resource
  2223. */
  2224. function countResource(name) {
  2225. var count = 0;
  2226. var _bags = unsafeWindow.client.dataModel.model.ent.main.inventory.bags;
  2227. console.log("Checking bags for " + name);
  2228. $.each(_bags, function (bi, bag) {
  2229. bag.slots.forEach(function (slot) {
  2230. if (slot && slot.name === name) {
  2231. count = count + slot.count;
  2232. }
  2233. });
  2234. });
  2235. return count;
  2236. }
  2237.  
  2238. /**
  2239. * Checks task being started for requirements and initiates beginning task if found
  2240. *
  2241. * @param {string} taskname The name of the task being started
  2242. * @param {string} profname The name of the profession being used
  2243. * @param {Deferred} dfd Deferred object to process on return
  2244. */
  2245. function searchForTask(taskname, profname) {
  2246. // Return first object that matches exact craft name
  2247. // edited by WloBeb - start Patrol the Mines task only if char has less than 10 Mining Claims
  2248. if (settings["skippatrol"] && taskname == "Leadership_Tier3_13_Patrol" && countResource("Crafting_Resource_Mining_Claim") >= 10) {
  2249. console.log("Too many Mining Claims: skiping");
  2250. return false;
  2251. }
  2252.  
  2253. var thisTask = unsafeWindow.client.dataModel.model.craftinglist['craft_' + profname].entries.filter(function (entry) {
  2254. return entry.def && entry.def.name == taskname;
  2255. })[0];
  2256.  
  2257. // 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
  2258. if (!thisTask) {
  2259. console.log('Could not find task for:', taskname);
  2260. return false;
  2261. }
  2262.  
  2263. // start task if requirements are met
  2264. if (!thisTask.failedrequirementsreasons.length) {
  2265. return thisTask;
  2266. }
  2267.  
  2268. // Too high level
  2269. if (thisTask.failslevelrequirements) {
  2270. console.log("Task level is too high:", taskname);
  2271. return false;
  2272. }
  2273.  
  2274. var searchItem = null;
  2275. var searchAsset = false;
  2276.  
  2277. // Check for and buy missing armor & weapon leadership assets
  2278. if (thisTask.failsresourcesrequirements && profname == "Leadership" && settings["autopurchase"]) {
  2279. var failedAssets = thisTask.required.filter(function (entry) {
  2280. return !entry.fillsrequirements;
  2281. });
  2282. var failedArmor = failedAssets.filter(function (entry) {
  2283. return entry.categories.indexOf("Armor") >= 0;
  2284. });
  2285. var failedWeapon = failedAssets.filter(function (entry) {
  2286. return entry.categories.indexOf("Weapon") >= 0;
  2287. });
  2288. if (failedArmor.length || failedWeapon.length) {
  2289. var _buyResult = false;
  2290. var _charGold = unsafeWindow.client.dataModel.model.ent.main.currencies.gold;
  2291. var _charSilver = unsafeWindow.client.dataModel.model.ent.main.currencies.silver;
  2292. var _charCopper = unsafeWindow.client.dataModel.model.ent.main.currencies.copper;
  2293. var _charCopperTotal = _charCopper + (_charSilver * 100) + (_charGold * 10000);
  2294.  
  2295. // Buy Leadership Armor Asset
  2296. if (failedArmor.length && _charCopperTotal >= 10000) {
  2297. console.log("Buying leadership asset:", failedArmor[0].icon);
  2298. _buyResult = buyTaskAsset(18);
  2299. unsafeWindow.client.professionFetchTaskList("craft_Leadership");
  2300. }
  2301. // Buy Leadership Infantry Weapon Asset
  2302. else if (failedWeapon.length && _charCopperTotal >= 5000) {
  2303. console.log("Buying leadership asset:", failedWeapon[0].icon);
  2304. _buyResult = buyTaskAsset(4);
  2305. unsafeWindow.client.professionFetchTaskList("craft_Leadership");
  2306. }
  2307. if (_buyResult === false)
  2308. return false;
  2309. else
  2310. return null;
  2311. }
  2312. }
  2313.  
  2314. // Missing assets or ingredients
  2315. if (thisTask.failsresourcesrequirements) {
  2316. var failedAssets = thisTask.required.filter(function (entry) {
  2317. return !entry.fillsrequirements;
  2318. });
  2319.  
  2320. // Missing required assets
  2321. if (failedAssets.length) {
  2322. var failedCrafter = failedAssets.filter(function (entry) {
  2323. return entry.categories.indexOf("Person") >= 0;
  2324. });
  2325.  
  2326. // Train Assets
  2327. if (failedCrafter.length && settings["trainassets"]) {
  2328. console.log("Found required asset:", failedCrafter[0].icon);
  2329. searchItem = failedCrafter[0].icon;
  2330. searchAsset = true;
  2331. } else {
  2332. // TODO: Automatically purchase item assets from shop
  2333. console.log("Not enough assets for task:", taskname);
  2334. return false;
  2335. }
  2336. }
  2337. // Check for craftable ingredients items and purchasable profession resources (from vendor)
  2338. else {
  2339. var failedResources = thisTask.consumables.filter(function (entry) {
  2340. return entry.required && !entry.fillsrequirements;
  2341. });
  2342.  
  2343. // Check first required ingredient only
  2344. // If it fails to buy or craft task cannot be completed anyway
  2345. // If it succeeds script will search for tasks anew
  2346. var itemName = failedResources[0].hdef.match(/\[(\w+)\]/)[1];
  2347.  
  2348. // Buy purchasable resources if auto-purchase setting is enabled
  2349. if (settings["autopurchase"] && itemName.match(/^Crafting_Resource_(Charcoal|Rocksalt|Spool_Thread|Porridge|Solvent|Brimstone|Coal|Moonseasalt|Quicksilver|Spool_Threadsilk)$/)) {
  2350. // returns null if successful (task will try again) and false if unsuccessful (task will be skipped)
  2351. return buyResource(itemName);
  2352. }
  2353. // Matched profession auto-purchase item found but auto-purchase is not enabled
  2354. else if (!settings["autopurchase"] && itemName.match(/^Crafting_Resource_(Charcoal|Rocksalt|Spool_Thread|Porridge|Solvent|Brimstone|Coal|Moonseasalt|Quicksilver|Spool_Threadsilk)$/)) {
  2355. console.log("Purchasable resource required:", itemName, "for task:", taskname, ". Recommend enabling Auto Purchase Resources.");
  2356. return false;
  2357. }
  2358. // craftable ingredient set to search for
  2359. else {
  2360. console.log("Found required ingredient:", itemName);
  2361. searchItem = itemName;
  2362. }
  2363. }
  2364. }
  2365.  
  2366. // either no craftable items/assets found or other task requirements are not met
  2367. // Skip crafting ingredient tasks for Leadership
  2368. if (searchItem === null || !searchItem.length || (profname == 'Leadership' && !searchAsset && !searchItem.match(/Crafting_Asset_Craftsman/))) {
  2369. console.log("Failed to resolve item requirements for task:", taskname);
  2370. return false;
  2371. }
  2372.  
  2373. // Generate list of available tasks to search ingredients/assets from
  2374. console.log("Searching ingredient tasks for:", profname);
  2375. var taskList = unsafeWindow.client.dataModel.model.craftinglist['craft_' + profname].entries.filter(function (entry) {
  2376. // remove header lines first to avoid null def
  2377. if (entry.isheader) {
  2378. return false;
  2379. }
  2380.  
  2381. // Too high level
  2382. if (entry.failslevelrequirements) {
  2383. return false;
  2384. }
  2385.  
  2386. // Rewards do not contain item we want to make
  2387. if (searchAsset) {
  2388. if (entry.def.icon != searchItem || !entry.def.name.match(/Recruit/) || entry.def.requiredrank > 14) {
  2389. return false;
  2390. }
  2391. } else {
  2392. if (!(entry.rewards.some(function (itm) {
  2393. try {
  2394. return itm.hdef.match(/\[(\w+)\]/)[1] == searchItem;
  2395. } catch (e) {}
  2396. }))) {
  2397. return false;
  2398. }
  2399. }
  2400.  
  2401. // Skip mass production tasks
  2402. if (entry.def.displayname.match(/^(Batch|Mass|Deep|Intensive) /)) {
  2403. return false;
  2404. }
  2405.  
  2406. // Skip trading tasks
  2407. if (entry.def.displayname.match(/rading$/)) {
  2408. return false;
  2409. }
  2410.  
  2411. // Skip looping Transmute tasks
  2412. if (entry.def.displayname.match(/^(Transmute|Create) /)) {
  2413. return false;
  2414. }
  2415.  
  2416. return true;
  2417. });
  2418.  
  2419. if (!taskList.length) {
  2420. console.log("No ingredient tasks found for:", taskname, searchItem);
  2421. return false;
  2422. }
  2423.  
  2424. // Use more efficient Empowered task for Aqua if available.
  2425. if ((searchItem == "Crafting_Resource_Aquavitae" || searchItem == "Crafting_Resource_Aquaregia") && taskList.length > 1) {
  2426. taskList.shift();
  2427. }
  2428.  
  2429. // Should really only be one result now but lets iterate through anyway.
  2430. for (var i = 0; i < taskList.length; i++) {
  2431. console.log("Attempting search for ingredient task:", taskList[i].def.name);
  2432. var task = searchForTask(taskList[i].def.name, profname);
  2433. if (task === null || task) {
  2434. return task;
  2435. }
  2436. }
  2437. return false;
  2438. }
  2439.  
  2440. /** --------- MAC-NW : Unused old function
  2441. * Fills resource slots and begins a profession task
  2442. *
  2443. * @param {string} taskDetail The craftindetail object for the task to be started
  2444. function startTask(taskDetail) {
  2445. return;
  2446.  
  2447. unsafeWindow.client.professionFetchTaskDetail(taskDetail.def.name);
  2448. //client.dataModel.addDefaultResources();
  2449. client.professionStartAssignment(taskDetail.def.name);
  2450. }*/
  2451.  
  2452. /**
  2453. * Selects the highest level asset for the i'th button in the list. Uses an iterative approach
  2454. * in order to apply a sufficient delay after the asset is assigned
  2455. *
  2456. * @param {Array} The list of buttons to use to click and assign assets for
  2457. * @param {int} i The current iteration number. Will select assets for the i'th button
  2458. * @param {Deferred} jQuery Deferred object to resolve when all of the assets have been assigned
  2459. */
  2460. function SelectItemFor(buttonListIn, i, def, prof) {
  2461. buttonListIn[i].click();
  2462. WaitForState("").done(function () {
  2463.  
  2464. 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
  2465. var $persons = $("div.modal-item-list a").has("img[src*='_Follower_']");
  2466. var quality = [".Special", ".Gold", ".Silver", ".Bronze"];
  2467. var ic,
  2468. $it;
  2469.  
  2470. var clicked = false;
  2471.  
  2472. // Try to avoid using up higher rank assets needlessly
  2473. if (prof.taskName === "Leadership") {
  2474. var mercenarys = $('div.modal-item-list a.Bronze img[src*="Crafting_Follower_Leader_Generic_T1_01"]').parent().parent();
  2475. var guards = $('div.modal-item-list a.Bronze img[src*="Crafting_Follower_Leader_Guard_T2_01"]').parent().parent();
  2476. var footmen = $('div.modal-item-list a.Bronze img[src*="Crafting_Follower_Leader_Private_T2_01"]').parent().parent();
  2477.  
  2478. if (mercenarys.length) {
  2479. clicked = true;
  2480. mercenarys[0].click();
  2481. } else if (guards.length) {
  2482. clicked = true;
  2483. guards[0].click();
  2484. } else if (footmen.length) {
  2485. clicked = true;
  2486. footmen[0].click();
  2487. }
  2488. }
  2489.  
  2490. // check resources & assets for best quality, in descending order
  2491. for (ic in quality) {
  2492. $it = $assets.filter(quality[ic]);
  2493. if ($it.length) {
  2494. $it[0].click();
  2495. clicked = true;
  2496. break;
  2497. }
  2498. }
  2499.  
  2500. // if no asset was selected, check for persons for best speed, in descending order
  2501. if (!clicked) {
  2502. for (ic in quality) {
  2503. $it = $persons.filter(quality[ic]);
  2504. if ($it.length) {
  2505. $it[0].click();
  2506. clicked = true;
  2507. break;
  2508. }
  2509. }
  2510. }
  2511.  
  2512. // if nothing was found at all, return immediately (skip other optional slots)
  2513. if (!clicked) {
  2514. $("button.close-button").trigger('click');
  2515. console.log("Nothing more to click..");
  2516. WaitForState("").done(function () {
  2517. // Let main loop continue
  2518. def.resolve();
  2519. });
  2520. }
  2521.  
  2522. console.log("Clicked item");
  2523. WaitForState("").done(function () {
  2524. // Get the new set of select buttons created since the other ones are removed when the asset loads
  2525. var buttonList = $('.taskdetails-assets:eq(1)').find("button");
  2526. if (i < buttonList.length - 1) {
  2527. SelectItemFor(buttonList, i + 1, def, prof);
  2528. } else {
  2529. // Let main loop continue
  2530. def.resolve();
  2531. }
  2532. });
  2533. });
  2534. }
  2535.  
  2536. /* ################# original
  2537. function SelectItemFor(buttonListIn, i, def, prof) {
  2538. buttonListIn[i].click();
  2539. WaitForState("").done(function() {
  2540. var specialItems = $("div.modal-item-list a.Special");
  2541. var goldItems = $("div.modal-item-list a.Gold");
  2542. var silverItems = $("div.modal-item-list a.Silver");
  2543. var bronzeItems = $("div.modal-item-list a.Bronze");
  2544. var clicked = false;
  2545. // Try to avoid using up higher rank assets needlessly
  2546. if (prof.taskName === "Leadership") {
  2547. var mercenarys = $("div.modal-item-list a.Bronze:contains('Mercenary')");
  2548. var guards = $("div.modal-item-list a.Bronze:contains('Guard')");
  2549. var footmen = $("div.modal-item-list a.Bronze:contains('Footman')");
  2550. if (mercenarys.length) { clicked = true; mercenarys[0].click(); }
  2551. else if (guards.length) { clicked = true; guards[0].click(); }
  2552. else if (footmen.length) { clicked = true; footmen[0].click(); }
  2553. }
  2554. // TODO: add remaining professions in the same way for bronze tier assets.
  2555. if (!clicked) {
  2556. // Click the highest slot
  2557. if (specialItems.length) { specialItems[0].click(); }
  2558. else if (goldItems.length) { goldItems[0].click(); }
  2559. else if (silverItems.length) { silverItems[0].click(); }
  2560. else if (bronzeItems.length) { bronzeItems[0].click(); }
  2561. else { $("button.close-button").click(); }
  2562. }
  2563. console.log("Clicked item");
  2564. WaitForState("").done(function() {
  2565. // Get the new set of select buttons created since the other ones are removed when the asset loads
  2566. var buttonList = $("h3:contains('Optional Assets:')").closest("div").find("button");
  2567. if (i < buttonList.length - 1) {
  2568. SelectItemFor(buttonList, i+1, def, prof);
  2569. }
  2570. else {
  2571. // Let main loop continue
  2572. def.resolve();
  2573. }
  2574. });
  2575. });
  2576. }
  2577. */
  2578.  
  2579. /**
  2580. * Will buy a given purchasable resource
  2581. *
  2582. * @param {String} item The data-tt-item id of the Resource to purchase
  2583. */
  2584. function buyResource(item) {
  2585. var _resourceID = {
  2586. Crafting_Resource_Charcoal : 0,
  2587. Crafting_Resource_Rocksalt : 1,
  2588. Crafting_Resource_Spool_Thread : 2,
  2589. Crafting_Resource_Porridge : 3,
  2590. Crafting_Resource_Solvent : 4,
  2591. Crafting_Resource_Brimstone : 5,
  2592. Crafting_Resource_Coal : 6,
  2593. Crafting_Resource_Moonseasalt : 7,
  2594. Crafting_Resource_Quicksilver : 8,
  2595. Crafting_Resource_Spool_Threadsilk : 9,
  2596. };
  2597. var _resourceCost = {
  2598. Crafting_Resource_Charcoal : 30,
  2599. Crafting_Resource_Rocksalt : 30,
  2600. Crafting_Resource_Spool_Thread : 30,
  2601. Crafting_Resource_Porridge : 30,
  2602. Crafting_Resource_Solvent : 20,
  2603. Crafting_Resource_Brimstone : 100,
  2604. Crafting_Resource_Coal : 500,
  2605. Crafting_Resource_Moonseasalt : 500,
  2606. Crafting_Resource_Quicksilver : 500,
  2607. Crafting_Resource_Spool_Threadsilk : 500,
  2608. };
  2609. var _charGold = unsafeWindow.client.dataModel.model.ent.main.currencies.gold;
  2610. var _charSilver = unsafeWindow.client.dataModel.model.ent.main.currencies.silver;
  2611. var _charCopper = unsafeWindow.client.dataModel.model.ent.main.currencies.copper;
  2612. var _charCopperTotal = _charCopper + (_charSilver * 100) + (_charGold * 10000);
  2613. var _resourcePurchasable = Math.floor(_charCopperTotal / _resourceCost[item]);
  2614. // Limit resource purchase to 50 quantity
  2615. var _purchaseCount = (_resourcePurchasable >= 50) ? 50 : _resourcePurchasable;
  2616.  
  2617. if (_purchaseCount < 1) {
  2618. // Not enough gold for 1 resource
  2619. console.log("Purchasing profession resources failed for:", item);
  2620. return false;
  2621. } else {
  2622. // Make purchase
  2623. console.log("Purchasing profession resources:", _purchaseCount + "x", item, ". Total copper available:", _charCopperTotal, ". Spending ", (_purchaseCount * _resourceCost[item]), "copper.");
  2624. unsafeWindow.client.sendCommand("GatewayVendor_PurchaseVendorItem", {
  2625. vendor : 'Nw_Gateway_Professions_Merchant',
  2626. store : 'Store_Crafting_Resources',
  2627. idx : _resourceID[item],
  2628. count : _purchaseCount
  2629. });
  2630. WaitForState("button.closeNotification").done(function () {
  2631. $("button.closeNotification").trigger('click');
  2632. });
  2633. return null;
  2634. }
  2635. }
  2636.  
  2637. /** DRAFT
  2638. * Will buy a missing leadership assets
  2639. *
  2640. * @param {String} item reference from assetID
  2641. */
  2642. function buyTaskAsset(_itemNo) {
  2643. var _returnHast = unsafeWindow.location.hash;
  2644. unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')/professions/vendor');
  2645. WaitForState("").done(function () {
  2646. if ($('span.alert-red button[data-url-silent="/professions/vendor/Store_Crafting_Assets/' + _itemNo + '"]').length) {
  2647. return false;
  2648. } else if ($('button[data-url-silent="/professions/vendor/Store_Crafting_Assets/' + _itemNo + '"]').length) {
  2649. $('button[data-url-silent="/professions/vendor/Store_Crafting_Assets/' + _itemNo + '"]').trigger('click');
  2650. WaitForState(".modal-confirm button").done(function () {
  2651. $('.modal-confirm button').eq(1).trigger('click');
  2652. unsafeWindow.location.hash = _returnHast;
  2653. return null;
  2654. });
  2655. }
  2656. });
  2657. }
  2658.  
  2659. // Function used to check exchange data model and post calculated AD/Zen for transfer if all requirements are met
  2660. function postZexOffer() {
  2661. // Make sure the exchange data is loaded to model
  2662. if (unsafeWindow.client.dataModel.model.exchangeaccountdata) {
  2663. // Check that there is atleast 1 free zex order slot
  2664. if (unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.length < 5) {
  2665. // Place the order
  2666. var charDiamonds = parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds);
  2667. var ZenRate = parseInt(settings["banktransrate"]);
  2668. var ZenQty = Math.floor((charDiamonds - parseInt(settings["bankcharmin"])) / ZenRate);
  2669. ZenQty = (ZenQty > 5000) ? 5000 : ZenQty;
  2670. console.log("Posting Zex buy listing for " + ZenQty + " ZEN at the rate of " + ZenRate + " AD/ZEN. AD remainder: " + charDiamonds + " - " + (ZenRate * ZenQty) + " = " + (charDiamonds - (ZenRate * ZenQty)));
  2671. unsafeWindow.client.createBuyOrder(ZenQty, ZenRate);
  2672.  
  2673. } else {
  2674. console.log("Zen Max Listings Reached (5). Skipping Zex Posting..");
  2675. }
  2676. } else {
  2677. console.log("Zen Exchange data did not load in time for transfer. Skipping Zex Posting..");
  2678. }
  2679. }
  2680.  
  2681. // Function used to check exchange data model and withdraw listed orders that use the settings zen transfer rate
  2682. function withdrawZexOffer() {
  2683. // Make sure the exchange data is loaded to model
  2684. if (unsafeWindow.client.dataModel.model.exchangeaccountdata) {
  2685. if (unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.length >= 1) {
  2686.  
  2687. var charDiamonds = parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds);
  2688. var ZenRate = parseInt(settings["banktransrate"]);
  2689.  
  2690. // cycle through the zex listings
  2691. unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders.forEach(function (item) {
  2692. // find any buy orders in the list with our set zen rate
  2693. if (parseInt(item.price) == ZenRate && item.ordertype == "Buy") {
  2694. // cancel/withdraw the order
  2695. client.withdrawOrder(item.orderid);
  2696. console.log("Withdrawing Zex listing for " + item.quantity + " ZEN at the rate of " + item.price + " . Total value in AD: " + item.totaltc);
  2697. }
  2698. });
  2699.  
  2700. } else {
  2701. console.log("No listings found on Zex. Skipping Zex Withrdaw..");
  2702. }
  2703. } else {
  2704. console.log("Zen Exchange data did not load in time for transfer. Skipping Zex Withrdaw..");
  2705. }
  2706. }
  2707.  
  2708. // MAC-NW
  2709.  
  2710. function vendorItemsLimited(_items) {
  2711. var _pbags = client.dataModel.model.ent.main.inventory.playerbags;
  2712. var _delay = 400;
  2713. var _sellCount = 0;
  2714. var _classType = unsafeWindow.client.dataModel.model.ent.main.classtype;
  2715. var _bagCount = unsafeWindow.client.dataModel.model.ent.main.inventory.playerbags.length;
  2716. var _bagUsed = 0;
  2717. var _bagUnused = 0;
  2718. var _tmpBag = [];
  2719. var _profitems = [];
  2720. // Pattern for items to leave out of auto vendoring (safeguard)
  2721. var _excludeItems = /(Gemfood|Gem_Upgrade_Resource|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 17.01.2015
  2722.  
  2723. if (settings["autovendor_profresults"]) {
  2724. /** Profession leveling result item cleanup logic for T1-4 crafted results
  2725. * Created by RM on 14.1.2015.
  2726. * 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".
  2727. * Items on list must be checked and tested.
  2728. */
  2729. /*#1, Tier3, end list, sell allways all, "TierX" is here "TX" !!*/
  2730. /*_profitems[_profitems.length] = {
  2731. pattern : /^Crafted_(Jewelcrafting_Waist_Offense_3|Jewelcrafting_Neck_Defense_3|Jewelcrafting_Waist_Defense_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)$/,
  2732. limit : 0,
  2733. count : 0
  2734. };*/// moved to selljunk filter, RottenMind
  2735. /*#2, Tier2 - tier3 mixed, upgrade, sell if inventory full, "TierX" is here "TX" */
  2736. _profitems[_profitems.length] = {
  2737. pattern : /^Crafted_(Jewelcrafting_Neck_Misc_2|Jewelcrafting_Waist_Misc_2|Med_Armorsmithing_T3_Chain_Pants|Med_Armorsmithing_T3_Chain_Shirt|Hvy_Armorsmithing_T3_Plate_Pants|Hvy_Armorsmithing_T3_Plate_Shirt|Leatherworking_T3_Leather_Pants|Leatherworking_T3_Leather_Shirt|Tailoring_T3_Cloth_Shirt|Tailoring_T3_Cloth_Pants||Artificing_T3_Pactblade_Temptation_4|Artificing_T3_Icon_Virtuous_4|Weaponsmithing_T2_Dagger_3|Weaponsmithing_T2_Dagger_3)$/,
  2738. limit : 0,
  2739. count : 0
  2740. };
  2741. /*#3, Tier2, upgrade, sell if inventory full, "TierX" is here "TX" */
  2742. _profitems[_profitems.length] = {
  2743. pattern : /^Crafted_(Jewelcrafting_Neck_Offense_2|Jewelcrafting_Waist_Offense_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|Hvy_Armorsmithing_T2_Plate_Boots_Set_1|Hvy_Armorsmithing_T2_Plate_Shirt_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|Tailoring_T2_Cloth_Armor_Set_1|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)$/,
  2744. limit : 0,
  2745. count : 0
  2746. };
  2747. /*#4, Tier1, upgrade, sell if inventory full, "TierX" is here "TX" */
  2748. _profitems[_profitems.length] = {
  2749. pattern : /^Crafted_(Jewelcrafting_Neck_Misc_1|Jewelcrafting_Waist_Misc_1|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_T1_Cloth_Pants_1|Tailoring_T1_Cloth_Boots_Set_1|Artificing_T1_Pactblade_Convergence_2|Artificing_T1_Icon_Virtuous_2|Weaponsmithing_T1_Dagger_1)$/,
  2750. limit : 0,
  2751. count : 0
  2752. };
  2753. /*#5, Tier0, upgrade, sell if inventory full, taskilist "Tier1" is here "empty" or "_" must replace (_T1_|_)*/
  2754. _profitems[_profitems.length] = {
  2755. pattern : /^Crafted_(Jewelcrafting_Waist_Offense_1|Jewelcrafting_Neck_Offense_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|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)$/,
  2756. limit : 0,
  2757. count : 0
  2758. };
  2759. }
  2760.  
  2761. $.each(_pbags, function (bi, bag) {
  2762. bag.slots.forEach(function (slot) {
  2763. // Match unused slots
  2764. if (slot === null || !slot || slot === undefined) {
  2765. _bagUnused++;
  2766. }
  2767. // Match items to exclude from auto vendoring, dont add to _tmpBag: Exclude pattern list - bound - Epic Quality - Blue Quality
  2768. else if (_excludeItems.test(slot.name) || slot.bound || slot.rarity == "Special" || slot.rarity == "Gold") {
  2769. _bagUsed++;
  2770. }
  2771. // Match everything else
  2772. else {
  2773. if (settings["autovendor_profresults"]) {
  2774. for (i = 0; i < _profitems.length; i++) {
  2775. if (_profitems[i].pattern.test(slot.name))
  2776. _profitems[i].count++;
  2777. }
  2778. }
  2779. _tmpBag[_tmpBag.length] = slot;
  2780. _bagUsed++;
  2781. }
  2782. });
  2783. });
  2784.  
  2785. if (settings["autovendor_profresults"]) {
  2786. _tmpBag.forEach(function (slot) {
  2787. for (i = 0; i < _profitems.length; i++) { // edited by RottenMind
  2788. if (slot && _profitems[i].pattern.test(slot.name) && Inventory_bagspace() <= 7) { // !slot.bound && _profitems[i].count > 3 &&, edited by RottenMind
  2789. var vendor = {
  2790. vendor : "Nw_Gateway_Professions_Merchant"
  2791. };
  2792. vendor.id = slot.uid;
  2793. vendor.count = 1;
  2794. console.log('Selling', vendor.count, slot.name, 'to vendor.');
  2795. window.setTimeout(function () {
  2796. client.sendCommand('GatewayVendor_SellItemToVendor', vendor);
  2797. }, _delay);
  2798. _profitems[i].count--;
  2799. break;
  2800. }
  2801. }
  2802. });
  2803. }
  2804.  
  2805. _tmpBag.forEach(function (slot) {
  2806. for (i = 0; i < _items.length; i++) {
  2807. var _Limit = (parseInt(_items[i].limit) > 99) ? 99 : _items[i].limit;
  2808. if (slot && _items[i].pattern.test(slot.name) && !slot.bound) {
  2809. // Node Kits vendor logic for restricted bag space
  2810. if (settings["autovendor_kits_altars_limit"] && /^Item_Consumable_Skill/.test(slot.name)) {
  2811. if (_bagCount < 2 || _bagUnused < 6 ||
  2812. (slot.name == "Item_Consumable_Skill_Dungeoneering" && (_classType == "Player_Guardian" || _classType == "Player_Greatweapon")) ||
  2813. (slot.name == "Item_Consumable_Skill_Arcana" && (_classType == "Player_Controller" || _classType == "Player_Scourge")) ||
  2814. (slot.name == "Item_Consumable_Skill_Religion" && _classType == "Player_Devoted") ||
  2815. (slot.name == "Item_Consumable_Skill_Thievery" && _classType == "Player_Trickster") ||
  2816. (slot.name == "Item_Consumable_Skill_Nature" && _classType == "Player_Archer")) {
  2817. _Limit = 0;
  2818. }
  2819. }
  2820. // Sell Items
  2821. if (slot.count > _Limit) {
  2822. _sellCount++;
  2823. var vendor = {
  2824. vendor : "Nw_Gateway_Professions_Merchant"
  2825. };
  2826. vendor.id = slot.uid;
  2827. vendor.count = slot.count - _Limit;
  2828. console.log('Selling', vendor.count, slot.name, 'to vendor.');
  2829. window.setTimeout(function () {
  2830. client.sendCommand('GatewayVendor_SellItemToVendor', vendor);
  2831. }, _delay);
  2832. _delay = _delay + 400;
  2833. break;
  2834. }
  2835. }
  2836. }
  2837. });
  2838.  
  2839. return _sellCount;
  2840. }
  2841.  
  2842. function switchChar() {
  2843.  
  2844. if (settings["refinead"]) {
  2845. var _currencies = unsafeWindow.client.dataModel.model.ent.main.currencies;
  2846. if (_currencies.diamondsconvertleft && _currencies.roughdiamonds) {
  2847. var refined_diamonds;
  2848. if (_currencies.diamondsconvertleft < _currencies.roughdiamonds) {
  2849. refined_diamonds = _currencies.diamondsconvertleft
  2850. } else {
  2851. refined_diamonds = _currencies.roughdiamonds
  2852. }
  2853. chardiamonds[charcurrent] += refined_diamonds
  2854. console.log("Refining AD for", settings["nw_charname" + charcurrent] + ":", refined_diamonds);
  2855. console.log(settings["nw_charname" + charcurrent] + "'s", "Astral Diamonds:", chardiamonds[charcurrent]);
  2856. unsafeWindow.client.sendCommand('Gateway_ConvertNumeric', 'Astral_Diamonds');
  2857. WaitForState("button.closeNotification").done(function () {
  2858. $("button.closeNotification").click();
  2859. });
  2860. refineCounters[settings["nw_charname" + charcurrent]] += refined_diamonds;
  2861. updateCounters(false);
  2862. }
  2863. }
  2864.  
  2865. // MAC-NW -- AD Consolidation
  2866. if (settings["autoexchange"]) {
  2867.  
  2868. // Check that we dont take money from the character assigned as the banker // Zen Transfer / Listing
  2869. if (settings["bankchar"] != unsafeWindow.client.dataModel.model.ent.main.name) {
  2870. // Check the required min AD amount on character
  2871. if (settings["banktransmin"] && settings["bankcharmin"] && parseInt(unsafeWindow.client.dataModel.model.ent.main.currencies.diamonds) >= (parseInt(settings["banktransmin"]) + parseInt(settings["bankcharmin"]))) {
  2872. // Check that the rate is not less than the min & max
  2873. if (settings["banktransrate"] && parseInt(settings["banktransrate"]) >= 50 && parseInt(settings["banktransrate"]) <= 500) {
  2874. window.setTimeout(postZexOffer, delay.SHORT);
  2875. } else {
  2876. console.log("Zen transfer rate does not meet the minimum (50) or maximum (500). Skipping Zex Posting..");
  2877. }
  2878. } else {
  2879. console.log("Character does not have minimum AD balance to do funds transfer. Skipping Zex Posting..");
  2880. }
  2881. }
  2882.  
  2883. } else {
  2884. console.log("Zen Exchange AD transfer not enabled. Skipping Zex Posting..");
  2885. }
  2886.  
  2887. if (settings["openrewards"]) {
  2888. var _pbags = unsafeWindow.client.dataModel.model.ent.main.inventory.playerbags;
  2889. var _cRewardPat = /Reward_Item_Chest|Gateway_Rewardpack/;
  2890. console.log("Opening Rewards");
  2891. $.each(_pbags, function (bi, bag) {
  2892. bag.slots.forEach(function (slot) {
  2893. if (slot && _cRewardPat.test(slot.name)) {
  2894. if (slot.count >= 99)
  2895. slot.count = 99;
  2896. for (i = 1; i <= slot.count; i++) {
  2897. window.setTimeout(function () {
  2898. client.sendCommand('GatewayInventory_OpenRewardPack', slot.uid);
  2899. }, 500);
  2900. }
  2901. }
  2902. });
  2903. });
  2904. }
  2905.  
  2906. // Check Vendor Options & Vendor matched items
  2907. vendorJunk();
  2908.  
  2909. // MAC-NW (endchanges)
  2910.  
  2911. console.log("Switching Characters");
  2912.  
  2913. var chardelay,
  2914. chardate = null,
  2915. nowdate = new Date();
  2916. nowdate = nowdate.getTime();
  2917. for (var cc = 0; cc < settings["charcount"]; cc++) {
  2918. if (chartimers[cc] != null) {
  2919. console.log("Date found for " + settings["nw_charname" + cc]);
  2920. if (!chardate || chartimers[cc] < chardate) {
  2921. chardate = chartimers[cc];
  2922. charcurrent = cc;
  2923. chardelay = chardate.getTime() - nowdate - unsafeWindow.client.getServerOffsetSeconds() * 1000;
  2924. if (chardelay < delay.SHORT) {
  2925. chardelay = delay.SHORT;
  2926. }
  2927. }
  2928. } else {
  2929. charcurrent = cc;
  2930. chardelay = delay.SHORT;
  2931. chardate = null;
  2932. console.log("No date found for " + settings["nw_charname" + cc] + ", switching now.");
  2933. break;
  2934. }
  2935. }
  2936.  
  2937. // Count AD & Gold
  2938. var curdiamonds = 0;
  2939. var curgold = 0;
  2940. for (var cc = 0; cc < settings["charcount"]; cc++) {
  2941. if (chardiamonds[cc] != null) {
  2942. curdiamonds += Math.floor(chardiamonds[cc] / 50) * 50;
  2943. }
  2944.  
  2945. if (chargold[cc] != null) {
  2946. curgold += chargold[cc];
  2947. }
  2948. }
  2949.  
  2950. console.log("Next run for " + settings["nw_charname" + charcurrent] + " in " + parseInt(chardelay / 1000) + " seconds.");
  2951. $("#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, ",") + "<br />Gold: " + curgold + "</h3>");
  2952. GM_setValue("charcurrent", charcurrent);
  2953. dfdNextRun.resolve(chardelay);
  2954. }
  2955. /**
  2956. * Waits for the loading symbol to be hidden.
  2957. *
  2958. * @return {Deferred} A jQuery defferred object that will be resolved when loading is complete
  2959. */
  2960. function WaitForLoad() {
  2961. return WaitForState("");
  2962. }
  2963. /**
  2964. * Creates a deferred object that will be resolved when the state is reached
  2965. *
  2966. * @param {string} query The query for the state to wait for
  2967. * @return {Deferred} A jQuery defferred object that will be resolved when the state is reached
  2968. */
  2969. function WaitForState(query) {
  2970. var dfd = $.Deferred();
  2971. window.setTimeout(function () {
  2972. AttemptResolve(query, dfd);
  2973. }, delay.SHORT); // Doesn't work without a short delay
  2974. return dfd;
  2975. }
  2976. function WaitForNotState(query) {
  2977. var dfd = $.Deferred();
  2978. window.setTimeout(function () {
  2979. AttemptNotResolve(query, dfd);
  2980. }, delay.SHORT); // Doesn't work without a short delay
  2981. return dfd;
  2982. }
  2983. /**
  2984. * Will continually test for the given query state and resolve the given deferred object when the state is reached
  2985. * and the loading symbol is not visible
  2986. *
  2987. * @param {string} query The query for the state to wait for
  2988. * @param {Deferred} dfd The jQuery defferred object that will be resolved when the state is reached
  2989. */
  2990. function AttemptResolve(query, dfd) {
  2991. if ((query === "" || $(query).length) && $("div.loading-image:visible").length === 0) {
  2992. dfd.resolve();
  2993. } else {
  2994. window.setTimeout(function () {
  2995. AttemptResolve(query, dfd);
  2996. }, delay.SHORT); // Try again in a little bit
  2997. }
  2998. }
  2999. /* Opposite of AttemptResolve, will try to resolve query until it doesn't resolve. */
  3000. function AttemptNotResolve(query, dfd) {
  3001. if (!$(query).length && $("div.loading-image:visible").length === 0) {
  3002. dfd.resolve();
  3003. } else {
  3004. window.setTimeout(function () {
  3005. AttemptNotResolve(query, dfd);
  3006. }, delay.SHORT); // Try again in a little bit
  3007. }
  3008. }
  3009. /**
  3010. * The main process loop:
  3011. * - Determine which page we are on and call the page specific logic
  3012. * - When processing is complete, process again later
  3013. * - Use a short timer when something changed last time through
  3014. * - Use a longer timer when waiting for tasks to complete
  3015. */
  3016. function process() {
  3017. // Make sure the settings button exists
  3018. addSettings();
  3019.  
  3020. // Enable/Disable the unconditional page reload depending on settings
  3021. loading_reset = settings["autoreload"];
  3022.  
  3023. // Check if timer is paused
  3024. s_paused = settings["paused"]; // let the Page Reloading function know the pause state
  3025. if (settings["paused"]) {
  3026. // Just continue later - the deferred object is still set and nothing will resolve it until we get past this point
  3027. var timerHandle = window.setTimeout(function () {
  3028. process();
  3029. }, delay.DEFAULT);
  3030. return;
  3031. }
  3032.  
  3033. // Check for Gateway down
  3034. if (window.location.href.indexOf("gatewaysitedown") > -1) {
  3035. // Do a long delay and then retry the site
  3036. console.log("Gateway down detected - relogging in " + (delay.MINS / 1000) + " seconds");
  3037. window.setTimeout(function () {
  3038. unsafeWindow.location.href = current_Gateway; // edited by RottenMind
  3039. }, delay.MINS);
  3040. return;
  3041. }
  3042.  
  3043. // Check for login or account guard and process accordingly
  3044. var currentPage = GetCurrentPage();
  3045. if (currentPage == PAGES.LOGIN) {
  3046. page_LOGIN();
  3047. return;
  3048. } else if (currentPage == PAGES.GUARD) {
  3049. page_GUARD();
  3050. return;
  3051. }
  3052.  
  3053. window.setTimeout(function () {
  3054. loginProcess();
  3055. }, delay.SHORT);
  3056.  
  3057. // Continue again later
  3058. dfdNextRun.done(function (delayTimer) {
  3059. dfdNextRun = $.Deferred();
  3060. timerHandle = window.setTimeout(function () {
  3061. process();
  3062. }, typeof delayTimer !== 'undefined' ? delayTimer : delay.DEFAULT);
  3063. });
  3064. }
  3065.  
  3066. function loginProcess() {
  3067. // Get logged on account details
  3068. var accountName;
  3069. try {
  3070. accountName = unsafeWindow.client.dataModel.model.loginInfo.publicaccountname;
  3071. } catch (e) {
  3072. // TODO: Use callback function
  3073. window.setTimeout(function () {
  3074. loginProcess();
  3075. }, delay.SHORT);
  3076. return;
  3077. }
  3078.  
  3079. // Check if timer is paused again to avoid starting new task between timers
  3080. s_paused = settings["paused"]; // let the Page Reloading function know the pause state
  3081. if (settings["paused"]) {
  3082. // Just continue later - the deferred object is still set and nothing will resolve it until we get past this point
  3083. var timerHandle = window.setTimeout(function () {
  3084. process();
  3085. }, delay.DEFAULT);
  3086. return;
  3087. }
  3088.  
  3089. if (accountName) {
  3090. // Model should be available at this point, trying to use
  3091. // console.log(client.dataModel.model.loginInfo.choices);
  3092. // to load char data (only for counters for now)
  3093. tempList = {};
  3094. client.dataModel.model.loginInfo.choices.forEach(function (char) {
  3095. if (char.name == "Author")
  3096. return;
  3097. tempList[char.name] = (refineCounters[char.name]) ? (refineCounters[char.name]) : 0;
  3098. });
  3099. refineCounters = tempList;
  3100. GM_setValue("refineCounters", JSON.stringify(refineCounters));
  3101. //console.log(refineCounters);
  3102.  
  3103. // load current character position and values
  3104. charcurrent = GM_getValue("charcurrent", 0);
  3105. for (var i = 0; i < (charSettings.length / settings["charcount"]); i++) {
  3106. j = i + (charcurrent * charSettings.length / settings["charcount"]);
  3107. settings[charSettings[j].name.replace(new RegExp(charcurrent + "$"), '')] = settings[charSettings[j].name];
  3108. }
  3109.  
  3110. var charName = settings["nw_charname"];
  3111. var fullCharName = charName + '@' + accountName;
  3112.  
  3113. if (unsafeWindow.client.getCurrentCharAtName() != fullCharName) {
  3114. loadCharacter(fullCharName);
  3115. return;
  3116. }
  3117.  
  3118. // Try to start tasks
  3119. if (processCharacter()) {
  3120. return;
  3121. }
  3122.  
  3123. // Switch characters as necessary
  3124. switchChar();
  3125. }
  3126. }
  3127.  
  3128. function loadCharacter(charname) {
  3129. // Load character and restart next load loop
  3130. console.log("Loading gateway script for", charname);
  3131. unsafeWindow.client.dataModel.loadEntityByName(charname);
  3132.  
  3133. // MAC-NW -- AD Consolidation -- Banker Withdraw Secion
  3134. try {
  3135. var testChar = unsafeWindow.client.dataModel.model.ent.main.name;
  3136. unsafeWindow.client.dataModel.fetchVendor('Nw_Gateway_Professions_Merchant');
  3137. console.log("Loaded datamodel for", charname);
  3138. } catch (e) {
  3139. // TODO: Use callback function
  3140. window.setTimeout(function () {
  3141. loadCharacter(charname);
  3142. }, delay.SHORT);
  3143. return;
  3144. }
  3145.  
  3146. if (settings["autoexchange"]) {
  3147.  
  3148. unsafeWindow.client.dataModel.fetchExchangeAccountData();
  3149.  
  3150. try {
  3151. var testExData = unsafeWindow.client.dataModel.model.exchangeaccountdata.openorders;
  3152. console.log("Loaded zen exchange data for", charname);
  3153. } catch (e) {
  3154. // TODO: Use callback function
  3155. window.setTimeout(function () {
  3156. loadCharacter(charname);
  3157. }, delay.SHORT);
  3158. return;
  3159. }
  3160.  
  3161. // Check to see if this is the designated banker character
  3162. if (settings["bankchar"] == unsafeWindow.client.dataModel.model.ent.main.name) {
  3163. // This is the banker -- withdraw any buy listings that match the transfer rate set in panel
  3164. window.setTimeout(withdrawZexOffer, delay.MEDIUM);
  3165. // withdraw the balance from exchange
  3166. window.setTimeout(function () {
  3167. if (parseInt(client.dataModel.model.exchangeaccountdata.readytoclaimescrow) > 0) {
  3168. client.sendCommand("GatewayExchange_ClaimTC", client.dataModel.model.exchangeaccountdata.readytoclaimescrow);
  3169. console.log("Attempting to withdraw exchange balancees... ClaimTC: " + client.dataModel.model.exchangeaccountdata.readytoclaimescrow);
  3170. }
  3171. if (parseInt(client.dataModel.model.exchangeaccountdata.readytoclaimmtc) > 0) {
  3172. client.sendCommand("GatewayExchange_ClaimMTC", client.dataModel.model.exchangeaccountdata.readytoclaimmtc);
  3173. console.log("Attempting to withdraw exchange balancees... ClaimMT: " + client.dataModel.model.exchangeaccountdata.readytoclaimmtc);
  3174. }
  3175.  
  3176. }, delay.SHORT);
  3177. }
  3178.  
  3179. WaitForState("button.closeNotification").done(function () {
  3180. $("button.closeNotification").click();
  3181. });
  3182.  
  3183. unsafeWindow.client.dataModel.loadEntityByName(charname);
  3184.  
  3185. } else {
  3186. console.log("Zen Exchange AD transfer not enabled. Skipping Zex Posting..");
  3187. }
  3188. // MAC-NW
  3189.  
  3190. // MAC-NW -- Moved Professoin Merchant loading here with testing/waiting to make sure it loads
  3191. try {
  3192. var testProfMerchant = client.dataModel.model.vendor.items;
  3193. console.log("Loaded profession merchant for", charname);
  3194. } catch (e) {
  3195. // TODO: Use callback function
  3196. window.setTimeout(function () {
  3197. loadCharacter(charname);
  3198. }, delay.SHORT);
  3199. return;
  3200. }
  3201.  
  3202. // Check Vendor Options & Vendor matched items
  3203. vendorJunk();
  3204.  
  3205. dfdNextRun.resolve();
  3206. }
  3207.  
  3208. function addSettings() {
  3209. if ($("#settingsButton").length)
  3210. return;
  3211. // Add the required CSS
  3212. AddCss("\
  3213. #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;}\
  3214. #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;}\
  3215. /* MAC-NW -- Put Panel at a higher layer than status window */ \
  3216. /*#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: 550px;max-height:750px;font: 12px sans-serif; text-align: left; display: block; z-index: 1001;}*/\
  3217. #settingsPanel{position: fixed; overflow: auto; right: 0px; top: 0px; width: 550px;max-height:750px;font: 12px sans-serif; text-align: left; display: block; z-index: 1001;}\
  3218. #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;}\
  3219. #settingsPanelButtonContainer {background: none repeat scroll 0% 0% rgb(204, 204, 204); border-top: 1px solid rgb(102, 102, 102);padding: 3px;text-align:center} \
  3220. #settingsPanel label.purple {font-weight:bold;color:#7C37F6}\
  3221. #settingsPanel label.blue {font-weight:bold;color:#007EFF}\
  3222. #settingsPanel label.green {font-weight:bold;color:#8AFF00}\
  3223. #settingsPanel label.white {font-weight:bold;color:#FFFFFF}\
  3224. #charPanel {width:98%;max-height:550px;overflow:auto;display:block;padding:3px;}\
  3225. #charPanel div div ul li { display: inline-block; width: 48%; }\
  3226. .inventory-container {float: left; clear: none; width: 270px; margin-right: 20px;}\
  3227. #prinfopane {position: fixed; top: 5px; left: 200px; display: block; z-index: 1000;}\
  3228. .prh3 {padding: 5px; height: auto!important; width: auto!important; background-color: rgba(0, 0, 0, 0.7);}\
  3229. .custom-radio{width:16px;height:16px;display:inline-block;position:relative;z-index:1;top:3px;background-color:#fff;margin:0 4px 0 2px;}\
  3230. .custom-radio:hover{background-color:black;} .custom-radio.selected{background-color:red;} .custom-radio-selected-text{color:darkred;font-weight:500;}\
  3231. .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}\
  3232. #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;}\
  3233. .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}\
  3234. #settingsPanel input[type='button'].button-green{background:#1cb841; margin: 2px 20px 2px 2px;}\
  3235. #settingsPanel input[type='button'].button-red{background:#ca3c3c; margin: 2px 2px 2px 2px;}\
  3236. #settingsPanel input[type='button'].button-yellow{background:#df7514; margin: 2px 2px 2px 2px;}\
  3237. #settingsPanel input[type='button'].button-blue{background:#42b8dd; margin: 2px 2px 2px 2px;}\
  3238. .charSettingsTab { overflow: auto; }\
  3239. .charSettingsTab div { overflow: auto; }\
  3240. #rcounters ul li span { display: inline-block; min-width: 125px; }\
  3241. ");
  3242.  
  3243. // Add settings panel to page body
  3244. $("body").append(
  3245. '<div id="settingsPanel" class="ui-widget-content">\
  3246. <div id="settings_title">\
  3247. <img src=' + image_prefs + ' style="float: left; vertical-align: text-bottom;"\>\
  3248. <img id="settings_close" src=' + image_close + ' title="Click to hide preferences" style="float: right; vertical-align: text-bottom; cursor: pointer; display: block;"\>\
  3249. <span style="margin:3px">Settings</span>\
  3250. </div>\
  3251. <form style="margin: 0px; padding: 0px">\
  3252. <div id="main_tabs">\
  3253. <ul>\
  3254. </ul>\
  3255. </div>\
  3256. </form>\
  3257. </div>');
  3258.  
  3259. $("div#main_tabs").tabs();
  3260. var tabs = {
  3261. main : 'General settings',
  3262. prof : 'Professions',
  3263. vend : 'Vendor options',
  3264. bank : 'AD Consolidation'
  3265. };
  3266. for (var key in tabs) {
  3267. var tabs_num = $("div#main_tabs > ul > li").length + 1;
  3268. $("div#main_tabs > ul").append(
  3269. "<li><a href='#main_tab" + tabs_num + "'>" + tabs[key] + "</a></li>");
  3270.  
  3271. var tab = $("<div id='main_tab" + tabs_num + "'></div>");
  3272. $("div#main_tabs").append(tab);
  3273.  
  3274. // Add each setting input
  3275. var settingsList = $('<ul style="list-style: none outside none; min-height: 300px; max-height: 500px; overflow: auto; margin: 3px; padding: 0px;"></ul>');
  3276. var settingListToAdd = settingnames.filter(function (element) {
  3277. return (element.pane == key);
  3278. });
  3279.  
  3280. for (var i = 0; i < settingListToAdd.length; i++) {
  3281. var id = 'settings_' + settingListToAdd[i].name;
  3282. var indent = (countLeadingSpaces(settingListToAdd[i].title) >= 1) ? 1 : 0;
  3283. /*if ((settingnames[i].type == 'text' && settingnames[i-1].type == 'checkbox') || (settingnames[i-1] && settingnames[i].type == 'checkbox' && settingnames[i-1].type == 'text'))
  3284. settingsList.append('<li style="margin-left:0em; width: 48%; display: inline-block;"/>&nbsp;</li>')*/
  3285. var border = "";
  3286. if (settingListToAdd[i].border)
  3287. border = "border-top: #000 solid 1px;"
  3288. switch (settingListToAdd[i].type) {
  3289. case "checkbox":
  3290. var _checkWidth = "48%";
  3291. /*
  3292. if (i < 9)
  3293. _checkWidth = "31%";
  3294. */
  3295. if (settingListToAdd[i].border)
  3296. _checkWidth = "98%";
  3297. settingsList.append('<li title="' + settingListToAdd[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="' + settingListToAdd[i].class + '" for="' + id + '">' + settingListToAdd[i].title + '</label></li>')
  3298. settingsList.find('#' + id).prop('checked', settings[settingListToAdd[i].name]);
  3299. break;
  3300. case "text":
  3301. if (settingListToAdd[i].border)
  3302. _inputkWidth = "95%; padding: 10px";
  3303. else
  3304. _inputkWidth = "46%";
  3305. settingsList.append('<li title="' + settingListToAdd[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; margin-top:1em; width: ' + _inputkWidth + '; display: inline-block;"<label class="' + settingListToAdd[i].class + '" for="' + id + '">' + settingListToAdd[i].title + '</label><input style="margin:4px; padding: 2px; min-width: 80%;" name="' + id + '" id="' + id + '" type="text" /></li>')
  3306. settingsList.find('#' + id).val(settings[settingListToAdd[i].name]);
  3307. break;
  3308. case "password":
  3309. settingsList.append('<li title="' + settingListToAdd[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; margin-top:1em; width: 46%; display: inline-block;"' + settingListToAdd[i].class + '" for="' + id + '">' + settingListToAdd[i].title + '</label><input style="margin:4px; padding: 2px; min-width: 80%;" name="' + id + '" id="' + id + '" type="password" /></li>')
  3310. settingsList.find('#' + id).val(settings[settingListToAdd[i].name]);
  3311. break;
  3312. case "select":
  3313. settingsList.append('<li title="' + settingListToAdd[i].tooltip + '" style="' + border + 'padding-left:' + indent + 'em; width: 48%; display: inline-block;"' + settingListToAdd[i].class + '" style="padding-left:4px" for="' + id + '">' + settingListToAdd[i].title + '</label><select style="margin:4px" name="' + id + '" id="' + id + '" /></li>')
  3314. var options = settingListToAdd[i].opts;
  3315. var select = $('#' + id);
  3316. for (var j = 0; j < options.length; j++) {
  3317. if (settings[settingListToAdd[i].name] == options[j].path)
  3318. select.append('<option value="' + options[j].path + '" selected="selected">' + options[j].name + '</option>');
  3319. else
  3320. select.append('<option value="' + options[j].path + '">' + options[j].name + '</option>');
  3321. }
  3322. break;
  3323. case "label":
  3324. settingsList.append('<li title="' + settingListToAdd[i].tooltip + '" style="' + border + 'margin-left:' + indent + 'em;><label class="' + settingListToAdd[i].class + '">' + settingListToAdd[i].title + '</label></li>')
  3325. break;
  3326. }
  3327. }
  3328. $(tab).append(settingsList);
  3329. };
  3330.  
  3331. var tabs_num = $("div#main_tabs > ul > li").length + 1;
  3332. $("div#main_tabs > ul").append("<li><a href='#main_tab" + tabs_num + "'>Refine Counters</a></li>");
  3333. var tab = $("<div id='main_tab" + tabs_num + "'><div id='rcounters'></div></div>");
  3334. $("div#main_tabs").append(tab);
  3335.  
  3336. $("div#main_tabs").tabs("refresh");
  3337. $("div#main_tabs").tabs("option", "active", 0);
  3338.  
  3339. // Add character settings for each char
  3340.  
  3341.  
  3342. var addText = '<div id="charSettingsAccordion">';
  3343. for (var i = 0; i < settings["charcount"]; i++) {
  3344.  
  3345. addText += [
  3346. '<h3>' + settings["nw_charname" + i] + '</h3>',
  3347. '<div id="charContainer' + i + '">',
  3348. ].join('');
  3349.  
  3350. var k = 0 + (i * charSettings.length / settings["charcount"]);
  3351. var id = 'settings_' + charSettings[k].name;
  3352. addText += '<span title="' + charSettings[k].tooltip + '"><input style="margin:4px; padding: 2px;" name="' + id + '" id="' + id + '" type="text" /></span>';
  3353.  
  3354. addText += [
  3355. '<div class="charSettingsTabs">',
  3356. '<ul>',
  3357. '<li><a href="#charSettingsTab-1-' + i + '">Tasks</a></li>',
  3358. '<li><a href="#charSettingsTab-2-' + i + '">Char Settings</a></li>',
  3359. '</ul>',
  3360. '<div id="charSettingsTab-1-' + i + '" class="charSettingsTab">',
  3361. '<table><thead><tr><th>Task name</th><th># of slots</th><th>profile</th><th>priority</th><th>Optional Assets?</th></tr></thead><tbody>'
  3362. ].join('');
  3363.  
  3364. // tasks
  3365. setPerChar = (charSettings.length / settings["charcount"]);
  3366. charTaskSettings = charSettings.slice(i * setPerChar, (i + 1) * setPerChar).filter(function (element) {
  3367. return element.pane == 'tasks';
  3368. });
  3369. var k = 0;
  3370. while (k < (charTaskSettings.length)) {
  3371. if (charTaskSettings[k].type2 == 'task') {
  3372. addText += '<tr>';
  3373. }
  3374. do {
  3375. id = 'settings_' + charTaskSettings[k].name;
  3376. switch (charTaskSettings[k].type) {
  3377. case "checkbox":
  3378. continue;
  3379. break;
  3380. case "text":
  3381. addText += '<td>';
  3382. addText += '<label style=" overflow:hidden; min-width: 100px; display: inline-block; " class="' + charTaskSettings[k].class + '" for="' + id + '">' + charTaskSettings[k].title + '</label>';
  3383. addText += '</td><td><input maxlength="2" size="1" style="margin: 4px; padding: 2px;" name="' + id + '" id="' + id + '" type="text" /></td>';
  3384. break;
  3385. case "select":
  3386. addText += '<td><select style="margin: 4px; padding: 2px;" name="' + id + '" id="' + id + '">';
  3387. charTaskSettings[k].options.forEach(function (option) {
  3388. addText += '<option value = "' + option.value + '" ' + ((settings[charTaskSettings[k].name] == option.value) ? ' selected="selected" ' : '') + '>' + option.name + '</option>';
  3389. });
  3390. addText += '</select></td>';
  3391. break;
  3392. case "label":
  3393. break;
  3394. default:
  3395. break;
  3396.  
  3397. }
  3398. k++;
  3399. } while (k < charTaskSettings.length && (charTaskSettings[k].type2 != 'task'));
  3400. addText += '</tr>';
  3401. }
  3402. addText += '</tbody></table>\
  3403. </div>';
  3404.  
  3405. // Settings Tab
  3406. addText += '<div id="charSettingsTab-2-' + i + '" class="charSettingsTab" >';
  3407. setPerChar = (charSettings.length / settings["charcount"]);
  3408. charTaskSettings = charSettings.slice(i * setPerChar, (i + 1) * setPerChar).filter(function (element) {
  3409. return element.pane == 'settings';
  3410. });
  3411.  
  3412. for (var k = 0; k < (charTaskSettings.length); k++) {
  3413. id = 'settings_' + charTaskSettings[k].name;
  3414. switch (charTaskSettings[k].type) {
  3415. case "checkbox":
  3416. continue;
  3417. break;
  3418. case "text":
  3419. addText += '<li><label style=" overflow:hidden; min-width: 100px; display: inline-block; " class="' + charTaskSettings[k].class + '" for="' + id + '">' + charTaskSettings[k].title + '</label>';
  3420. addText += '<input maxlength="2" size="1" style="margin: 4px; padding: 2px;" name="' + id + '" id="' + id + '" type="text" /></li>';
  3421. break;
  3422. case "select":
  3423. addText += '<li><label style=" overflow:hidden; min-width: 100px; display: inline-block; " class="' + charTaskSettings[k].class + '" for="' + id + '">' + charTaskSettings[k].title + '</label>';
  3424. addText += '<select style="margin: 4px; padding: 2px;" name="' + id + '" id="' + id + '">';
  3425. charTaskSettings[k].options.forEach(function (option) {
  3426. addText += '<option value = "' + option.value + '" ' + ((settings[charTaskSettings[k].name] == option.value) ? ' selected="selected" ' : '') + '>' + option.name + '</option>';
  3427. });
  3428. addText += '</select></li>';
  3429. break;
  3430. case "label":
  3431. break;
  3432. default:
  3433. break;
  3434.  
  3435. }
  3436. }
  3437. addText += '</ul></div>'; // tab 2 ';
  3438.  
  3439. addText += '</div>'; // charSettingsTabs
  3440. addText += '</div>'; // charContainer
  3441. }
  3442. addText += '\
  3443. </div>\
  3444. ';
  3445. $("#settingsPanel form").append(addText);
  3446.  
  3447. // Add values to character input fields
  3448. for (var i = 0; i < charSettings.length; i++) {
  3449. var id = 'settings_' + charSettings[i].name;
  3450. $('#' + id).val(settings[charSettings[i].name]);
  3451. }
  3452.  
  3453. // Add save/cancel buttons to panel
  3454. $("#settingsPanel form").append('\
  3455. <div id="settingsPanelButtonContainer">\
  3456. <input id="settings_save" class="button-blue pure-button" type="button" value="Save and Apply">\
  3457. <input id="settings_close" class="button-yellow pure-button" type="button" value="Close">\
  3458. <input id="settings_sca" class="button-red pure-button" type="button" value="Cycle SCA">\
  3459. </div>');
  3460.  
  3461. $(function () {
  3462. $("#charSettingsAccordion").accordion({
  3463. heightStyle : "content",
  3464. autoHeight : false,
  3465. clearStyle : true,
  3466. active : false,
  3467. collapsible : true,
  3468. });
  3469. $(".charSettingsTabs").tabs();
  3470. });
  3471.  
  3472. updateCounters(false);
  3473.  
  3474. // Add open settings button to page
  3475. $("body").append('<div id="settingsButton"><img src="' + image_prefs + '" title="Click to show preferences" style="cursor: pointer; display: block;"></div>');
  3476.  
  3477. // Add pause button to page
  3478. $("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>');
  3479.  
  3480. // Add info pane
  3481. $("body").append("<div id='prinfopane' class='header-newrelease'>");
  3482.  
  3483. // Add the javascript
  3484. $("#settingsPanel").hide();
  3485. $("#settingsButton").click(function () {
  3486. $("#settingsButton").hide();
  3487. $("#pauseButton").hide();
  3488. $("#settingsPanel").show();
  3489. });
  3490. $("#settings_close,settings_cancel").click(function () {
  3491. $("#settingsButton").show();
  3492. $("#pauseButton").show();
  3493. $("#settingsPanel").hide();
  3494. });
  3495. $("#pauseButton").click(PauseSettings);
  3496.  
  3497. // Use setTimeout to workaround permission issues when calling GM functions from main window
  3498. $("#settings_save").click(function () {
  3499. setTimeout(function () {
  3500. SaveSettings();
  3501. }, 0)
  3502. });
  3503. $("#settings_sca").click(function () {
  3504. $("#settings_close").trigger("click");
  3505. unsafeWindow.location.hash = unsafeWindow.location.hash.replace(/\)\/.+/, ')' + "/adventures");
  3506. processSwordCoastDailies();
  3507. });
  3508.  
  3509. $('#update-content-inventory-bags-0 .bag-header').waitUntilExists(function () {
  3510. if ($('#update-content-inventory-bags-0 .bag-header div').length && !$('#update-content-inventory-bags-0 .bag-header div.autovendor').length) {
  3511. $('#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>');
  3512. $("button#nwprofs-autovendor").on("click", vendorJunk);
  3513. }
  3514. });
  3515. }
  3516.  
  3517. function PauseSettings(_action) {
  3518. if (_action != "pause" || _action != "unpause")
  3519. _action = "toggle";
  3520. if (_action == "toggle")
  3521. settings["paused"] = !settings["paused"];
  3522. if (_action == "pause")
  3523. settings["paused"] = true;
  3524. if (_action == "unpause")
  3525. settings["paused"] = false;
  3526. setTimeout(function () {
  3527. GM_setValue("paused", settings["paused"]);
  3528. }, 0);
  3529. $("#settings_paused").prop("checked", settings["paused"]);
  3530. $("#pauseButton img").attr("src", (settings["paused"] ? image_play : image_pause));
  3531. $("#pauseButton img").attr("title", "Click to " + (settings["paused"] ? "resume" : "pause") + " task script");
  3532. }
  3533.  
  3534. function SaveSettings() {
  3535. var charcount = settings["charcount"];
  3536.  
  3537. // Delete all saved settings
  3538. var keys = GM_listValues();
  3539. for (i = 0; i < keys.length; i++) {
  3540. var key = keys[i];
  3541. GM_deleteValue(key);
  3542. }
  3543.  
  3544. // Get each value from the UI
  3545. for (var i = 0; i < settingnames.length; i++) {
  3546. var name = settingnames[i].name;
  3547. var el = $('#settings_' + name);
  3548. var value = false;
  3549. switch (settingnames[i].type) {
  3550. case "checkbox":
  3551. value = el.prop("checked");
  3552. break;
  3553. case "text":
  3554. value = el.val();
  3555. break;
  3556. case "password":
  3557. value = el.val();
  3558. break;
  3559. case "select":
  3560. value = el.val();
  3561. break;
  3562. case "label": // Labels don't have values
  3563. continue;
  3564. }
  3565. if (typeof(settingnames[i].onsave) === "function") {
  3566. console.log("Calling 'onsave' for", name);
  3567. settingnames[i].onsave(value, settings[name]);
  3568. }
  3569. // Save to local cache
  3570. if (settings[name] !== value) {
  3571. settings[name] = value;
  3572. }
  3573. // Save to GM cache
  3574. GM_setValue(name, value);
  3575. }
  3576.  
  3577. // Get character settings from UI
  3578. for (var i = 0; i < charSettings.length; i++) {
  3579. if (charSettings[i].type == 'void') {
  3580. continue;
  3581. }
  3582. var name = charSettings[i].name;
  3583. var el = $('#settings_' + name);
  3584. var value = el.val();
  3585. // Save to local cache
  3586. if (settings[name] !== value) {
  3587. settings[name] = value;
  3588. }
  3589. // Save to GM cache
  3590. GM_setValue(name, value);
  3591. }
  3592.  
  3593. // If character numbers have changed reload page
  3594. if (charcount != settings["charcount"]) {
  3595. console.log("Reloading gateway to update character count");
  3596. unsafeWindow.location.href = current_Gateway; // edited by RottenMind
  3597. return;
  3598. }
  3599.  
  3600. // Close the panel
  3601. $("#settingsButton").show();
  3602. $("#pauseButton img").attr("src", (settings["paused"] ? image_play : image_pause));
  3603. $("#pauseButton img").attr("title", "Click to " + (settings["paused"] ? "resume" : "pause") + " task script");
  3604. $("#pauseButton").show();
  3605. $("#settingsPanel").hide();
  3606. }
  3607.  
  3608. function updateCounters(reset) {
  3609. var html = '<ul>';
  3610. var total = 0;
  3611. Object.keys(refineCounters).forEach(function (key) {
  3612. if (reset)
  3613. refineCounters[key] = 0;
  3614. html += '<li><span>' + key + '</span> - ' + refineCounters[key] + '</li>';
  3615. total += refineCounters[key];
  3616. });
  3617. html += "</ul>"
  3618. html += "<div style='margin: 5px 0;'> Total: " + total + "</div>";
  3619. html += "<button>Reset</button>";
  3620. $('#rcounters').html(html);
  3621.  
  3622. $('#rcounters button').button();
  3623. $('#rcounters button').click(function () {
  3624. updateCounters(true);
  3625. });
  3626. }
  3627.  
  3628. function vendorJunk(evnt) {
  3629. var _vendorItems = [];
  3630. var _sellCount = 0;
  3631. if (settings["autovendor_kits_altars_limit"]) {
  3632. _vendorItems[_vendorItems.length] = {
  3633. pattern : /^Item_Consumable_Skill/,
  3634. limit : 50
  3635. };
  3636. _vendorItems[_vendorItems.length] = {
  3637. pattern : /^Item_Portable_Altar$/,
  3638. limit : 80
  3639. };
  3640. }
  3641. if (settings["autovendor_kits_altars_all"]) {
  3642. _vendorItems[_vendorItems.length] = {
  3643. pattern : /^Item_Portable_Altar$/,
  3644. limit : 0
  3645. };
  3646. _vendorItems[_vendorItems.length] = {
  3647. pattern : /^Item_Consumable_Skill/,
  3648. limit : 0
  3649. };
  3650. }
  3651. if (settings["autovendor_rank1"]) {
  3652. _vendorItems[_vendorItems.length] = {
  3653. pattern : /^T1_Enchantment/,
  3654. limit : 0
  3655. };
  3656. _vendorItems[_vendorItems.length] = {
  3657. pattern : /^T1_Runestone/,
  3658. limit : 0
  3659. };
  3660. }
  3661. if (settings["autovendor_rank2"]) {
  3662. _vendorItems[_vendorItems.length] = {
  3663. pattern : /^T2_Enchantment/,
  3664. limit : 0
  3665. };
  3666. _vendorItems[_vendorItems.length] = {
  3667. pattern : /^T2_Runestone/,
  3668. limit : 0
  3669. };
  3670. }
  3671. if (settings["autovendor_rank3"]) {
  3672. _vendorItems[_vendorItems.length] = {
  3673. pattern : /^T3_Enchantment/,
  3674. limit : 0
  3675. };
  3676. _vendorItems[_vendorItems.length] = {
  3677. pattern : /^T3_Runestone/,
  3678. limit : 0
  3679. };
  3680. }
  3681. if (settings["autovendor_pots1"]) {
  3682. _vendorItems[_vendorItems.length] = {
  3683. pattern : /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)$/,
  3684. limit : 0
  3685. };
  3686. }
  3687. if (settings["autovendor_pots2"]) {
  3688. _vendorItems[_vendorItems.length] = {
  3689. pattern : /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)_2$/,
  3690. limit : 0
  3691. };
  3692. }
  3693. if (settings["autovendor_pots3"]) {
  3694. _vendorItems[_vendorItems.length] = {
  3695. pattern : /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)_3$/,
  3696. limit : 0
  3697. };
  3698. }
  3699. if (settings["autovendor_pots4"]) {
  3700. _vendorItems[_vendorItems.length] = {
  3701. pattern : /^Potion_(Healing|Tidespan|Force|Fortification|Reflexes|Accuracy|Rejuvenation)_4$/,
  3702. limit : 0
  3703. };
  3704. }
  3705. if (settings["autovendor_junk"]) {
  3706. _vendorItems[_vendorItems.length] = {
  3707. pattern : /^Item_Snowworks_/,
  3708. limit : 0
  3709. }; // Winter Festival fireworks small & large
  3710. _vendorItems[_vendorItems.length] = {
  3711. pattern : /^Item_Skylantern/,
  3712. limit : 0
  3713. }; // Winter Festival skylantern
  3714. _vendorItems[_vendorItems.length] = {
  3715. pattern : /^Item_Partypopper/,
  3716. limit : 0
  3717. }; // Party Poppers
  3718. _vendorItems[_vendorItems.length] = {
  3719. pattern : /^Item_Fireworks/,
  3720. limit : 0
  3721. }; // Fireworks
  3722. _vendorItems[_vendorItems.length] = {
  3723. pattern : /^Object_Plate_/,
  3724. limit : 0
  3725. };
  3726. _vendorItems[_vendorItems.length] = {
  3727. pattern : /^Object_Decoration_/,
  3728. limit : 0
  3729. };
  3730. _vendorItems[_vendorItems.length] = {
  3731. pattern : /_Green_T[1-5]_Unid$/,
  3732. limit : 0
  3733. }; // Unidentified Green Gear
  3734. }
  3735. // edited by RottenMind
  3736. if (settings["autovendor_profresults"]) {
  3737. _vendorItems[_vendorItems.length] = {
  3738. pattern : /^Crafted_(Jewelcrafting_Waist_Offense_3|Jewelcrafting_Neck_Defense_3|Jewelcrafting_Waist_Defense_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)$/,
  3739. limit : 0
  3740. };
  3741. }
  3742. // edited by RottenMind
  3743. if (_vendorItems.length > 0) {
  3744. console.log("Attempting to vendor selected items...");
  3745. _sellCount = vendorItemsLimited(_vendorItems);
  3746. if (_sellCount > 0 && !evnt) {
  3747. var _sellWait = _sellCount * 1000;
  3748. PauseSettings("pause");
  3749. window.setTimeout(function () {
  3750. PauseSettings("unpause");
  3751. }, _sellWait);
  3752. }
  3753. }
  3754. }
  3755.  
  3756. /** Start, Helpers added by users.
  3757. * Adds fetures, options to base script and can be easily removed if needed
  3758. * Add description so anyone can see if they can use Function somewhere
  3759. * Use "brackets" around function start and end //yourname
  3760. */
  3761. //RottenMind, returns inventory space, use Inventory_bagspace(); gives current free bags slots, from MAC-NW function
  3762. function Inventory_bagspace() {
  3763. var _pbags = client.dataModel.model.ent.main.inventory.playerbags;
  3764. var _bagUnused = 0;
  3765. $.each(_pbags, function (bi, bag) {
  3766. bag.slots.forEach(function (slot) {
  3767. if (slot === null || !slot || slot === undefined) {
  3768. _bagUnused++;
  3769. }
  3770. });
  3771. });
  3772. return _bagUnused;
  3773. }
  3774. //RottenMind
  3775. /** End, Helpers added by users.*/
  3776.  
  3777. // Add the settings button and start a process timer
  3778. addSettings();
  3779. timerHandle = window.setTimeout(function () {
  3780. process();
  3781. }, delay.SHORT);
  3782. })();
Add Comment
Please, Sign In to add comment