Untitled diff

Created Diff never expires
289 removals
Words removed169
Total words2828
Words removed (%)5.98
504 lines
71 additions
Words added178
Total words2837
Words added (%)6.27
496 lines
// ==UserScript==
// ==UserScript==
// @name Neverwinter gateway - Professions Robot
// @name Neverwinter gateway - Professions Robot
// @description Automatically selects professions for empty slots
// @description Automatically selects professions for empty slots
// @namespace https://greasyfork.org/scripts/7061-neverwinter-gateway-professions-robot/
// @namespace https://greasyfork.org/scripts/7061-neverwinter-gateway-professions-robot/
// @include http://gateway*.playneverwinter.com/*
// @include http://gateway*.playneverwinter.com/*
// @include https://gateway*.playneverwinter.com/*
// @include https://gateway*.playneverwinter.com/*
// @include http://gateway.*.perfectworld.eu/*
// @include http://gateway.*.perfectworld.eu/*
// @include https://gateway.*.perfectworld.eu/*
// @include https://gateway.*.perfectworld.eu/*
// @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js
// @resource jqUI_CSS http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/cupertino/jquery-ui.css
// @originalAuthor Mustex/Bunta
// @originalAuthor Mustex/Bunta
// @modifiedBy NW gateway Professions Bot Developers & Contributors
// @modifiedBy NW gateway Professions Bot Developers & Contributors
/*
/*
=== NW Gateway Professions Bot Developers
=== NW Gateway Professions Bot Developers
- Bluep, Numberb, mac-nw, Phr33d0m, BigRedBrent,
- Bluep, Numberb, mac-nw, Phr33d0m, BigRedBrent, noonereally, WloBeb
- Noonereally, Glowing Crystalline Entity, WloBeb
=== NW Gateway Professions Bot Contributors
=== NW Gateway Professions Bot Contributors
- Kakoura, Nametaken, rotten_mind, Frankescript, dlebedynskyi
- Kakoura, Nametaken, rotten_mind, Frankescript, dlebedynskyi
*/
*/
// @version 1.10.5
// @version 2.0
// @license http://creativecommons.org/licenses/by-nc-sa/3.0/us/
// @license http://creativecommons.org/licenses/by-nc-sa/3.0/us/
// @grant GM_getValue
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_setValue
// @grant GM_listValues
// @grant GM_listValues
// @grant GM_deleteValue
// @grant GM_deleteValue
// @grant GM_addStyle
// @grant GM_getResourceText
// ==/UserScript==
// ==/UserScript==
/* RELEASE NOTES
/* RELEASE NOTES
1.10.5
2.0
- Mod6 additions
- Additional UI changes.
- Vendor list updated
- Added resetable counters for refined AD.
1.10.5PreMod6.04
- Added stuck task trap (repeatition trap and restart). Thanks WloBeb
- Leadership task updates
- Added profession profiles by dlebedynskyi.
1.10.5PreMod6.03
1.10.2RC1 for Greasyfork
- exclude list update
- UI improvement
1.10.5PreMod6.02
- removed "Save Task" & "Clear Task" buttons, on current build they do nothing
- added task selection if specific item not in inventory "Mining claim" by WloBep
- replaced JAVA string search(partially) for better multilingual support(tooltip translation not included)
- added loop counter to prevent infinite loop when "Start task" -bugged
- reverted tasklist order to old(cosmetic change)
1.10.5.1
- Replaced defaultTasklist with tasklist
- tasklist edited
- Clear saved settings before re-saving
- some other changes by user "Glowing Crystalline Entity"
- Added leadership asset auto buy
1.10.5
- Improvements for AD transfer and reports to console log
- Mod6 professions added
- added missing asset names
- added Empowered Aquaregia
- Added "Leadership XP" use second tasklist
- ZAX FIX
- Added "Gateway_Reward" collection
1.10.4
- Added vendoring Rank 3 enchantments and runestones to UI
- profession sell filter update
- Added "Vendor all Altar Node skill kits" to UI
1.10.3
- Edited vendoring rank 1 and rank 2 enchantments
- HOTFIX, setting save reverted to old to preven unwated settings wipe.
1.10.1
1.10.2
- Patern undefined bug fix
- added "check currencies" for buy resources
1.10.0 - Release Candidate
- added "Gathering" task
- Vendor exclude filter has now higher "Safeguards" (it still might need added some unbound items eg. Glyphs, potions, etc)
1.10.2RC1 for Greasyfork
- Added vendor safeguards
- UI improvement
- Separated autovendor and profession items vendor
- removed "Save Task" & "Clear Task" buttons, on current build they do nothing
- SCA daily reward collection by cycling through all configured characters (leaving SCA page will cancel the collection)
- replaced JAVA string search(partially) for better multilingual support(tooltip translation not included)
- Multi URL support for testing
- reverted tasklist order to old(cosmetic change)
- Support for gatewaytest, RU gateway (gateway.nw.ru.perfectworld.eu) and regular gateway
- Replaced defaultTasklist with tasklist
1.05.0.1k
- Clear saved settings before re-saving
- RC2 for ver. 1.0.05.2
- Added leadership asset auto buy
- Added vendoring to UI
- Improvements for AD transfer and reports to console log
- Added vendoring "safety" setting what check item is "unbound"
- added missing asset names
- Code clearing
- Added "Leadership XP" use second tasklist
1.05.0.1j
- Added "Gateway_Reward" collection
- RC1 for ver. 1.05.0.2
- Added vendoring Rank 3 enchantments and runestones to UI
- Rebuild sell items selection method making it more comprehensive
- Added "Vendor all Altar Node skill kits" to UI
- Vendoring function now use array to vendor item objects
- Edited vendoring rank 1 and rank 2 enchantments
- Updated vendoring list
1.10.1
- Sell all runestones and enchantments rank 1 & rank 2
- Patern undefined bug fix
- Limit, altars 80, skill kits 50, healing potions T 1 - 3 10
1.10.0 - Release Candidate
- Re-edited warning "Tooltip"- selecting "what skill kit character not need" when selling
- Vendor exclude filter has now higher "Safeguards" (it still might need added some unbound items eg. Glyphs, potions, etc)
- Merged back the split of the pause function
- Added vendor safeguards
- Added a parameter to specify pause/unpause/toggle (defaults to toggle as in original behavior)
- Separated autovendor and profession items vendor
- Tasklist updates
- SCA daily reward collection by cycling through all configured characters (leaving SCA page will cancel the collection)
BETA 1.05.0.1i
- Multi URL support for testing
- Edited "sell items" list
- Support for gatewaytest, RU gateway (gateway.nw.ru.perfectworld.eu) and regular gateway
- Edited/added WARNING´s on tooltip
1.05.0.1k
BETA 1.05.0.1h
- RC2 for ver. 1.0.05.2
- Added "sell skill kits", works same as "open_rewards" (experimental, inventory cleaning needs more specific "sell filter" and event what trigger "sell")
- Added vendoring to UI
- Changed switching character and completing character task logic, trying prevent wrong task execution after switch
- Added vendoring "safety" setting what check item is "unbound"
- Refined "save settings" function
- Code clearing
- WinterEvent tasklist got new additions
1.05.0.1j
1.05.01G
- RC1 for ver. 1.05.0.2
- Github release
- Rebuild sell items selection method making it more comprehensive
1.05.0.1f
- Vendoring function now use array to vendor item objects
- Minor tasklist updates
- Updated vendoring list
- Added button "open all(99)", opens rewardchest
- Sell all runestones and enchantments rank 1 & rank 2
- Fixed "open rewardchest" disconnect issues(need furter testing, RM)
- Limit, altars 80, skill kits 50, healing potions T 1 - 3 10
- Fixed unnecessary ZEX visit´s
- Re-edited warning "Tooltip"- selecting "what skill kit character not need" when selling
-
- Merged back the split of the pause function
1.05.0.1e
- Added a parameter to specify pause/unpause/toggle (defaults to toggle as in original behavior)
- Info page updates for non-compatible browser/XXXmonkey
- Tasklist updates
1.05.0.1d
BETA 1.05.0.1i
- WinterEvent tasks added
- Edited "sell items" list
- Added AD transfer automation
- Edited/added WARNING´s on tooltip
- Settings Panel UI: Increased size and implemented two columns for options to minimize vertical length. Also implemented new radio and button styles.
BETA 1.05.0.1h
1.05.0.1c
- Added "sell skill kits", works same as "open_rewards" (experimental, inventory cleaning needs more specific "sell filter" and event what trigger "sell")
- 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.
- Changed switching character and completing character task logic, trying prevent wrong task execution after switch
1.05.0.1b
- Refined "save settings" function
- Added Reward Chest Opening Option
- WinterEvent tasklist got new additions
- Added All button when selling from inventory
1.05.01G
- Added condition check for profession slot input val > 0 when processing tasks
- Github release
1.05.0.1 (v1, mod 5)
1.05.0.1f
- Started with bluep's edits (https://greasyfork.org/en/forum/discussion/270/x)
- Minor tasklist updates
- Edited back in leadership asset priority (https://greasyfork.org/en/forum/discussion/comment/7213/#Comment_7213)
- Added button "open all(99)", opens rewardchest
- Edited in Jewelcrafting for Mod5 (https://greasyfork.org/en/forum/discussion/comment/6930/#Comment_6930)
- Fixed "open rewardchest" disconnect issues(need furter testing, RM)
- Modified the default leadership tasks to prioritize AD generation (feel free to rever)
- Fixed unnecessary ZEX visit´s
/* End Bunta's Edits?
-
1.0.0.3
1.05.0.1e
- Fix some gem trading tasks not being filtered correctly
- Info page updates for non-compatible browser/XXXmonkey
- Add check for gateway disconnected
1.05.0.1d
1.0.0.2
- WinterEvent tasks added
- Fix leadership tasks not creating assets correctly
- Added AD transfer automation
- Add option to save task lists per character (experimental)
- Settings Panel UI: Increased size and implemented two columns for options to minimize vertical length. Also implemented new radio and button styles.
1.0.0.1
1.05.0.1c
- Rewrite script using client.dataModel methods to massively improve reliability and performance (thanks Msc)
- 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.
- AD refining will now only attempt to refine if you are able to collect diamonds
1.05.0.1b
- Change task lists to use exact task names so no ambiguity exists (no longer requires excluderare option)
- Added Reward Chest Opening Option
- Asset resources are now trained as needed (only for required slots)
- Added All button when selling from inventory
0.3.0.5
- Added condition check for profession slot input val > 0 when processing tasks
- Fix resources not buying correctly in all cases
1.05.0.1 (v1, mod 5)
- Fix pause button state saving correctly in firefox
- Started with bluep's edits (https://greasyfork.org/en/forum/discussion/270/x)
0.3.0.4
- Edited back in leadership asset priority (https://greasyfork.org/en/forum/discussion/comment/7213/#Comment_7213)
- Add page timeout reloading functions outside of main function (thanks Kreese and Frabtik)
- Edited in Jewelcrafting for Mod5 (https://greasyfork.org/en/forum/discussion/comment/6930/#Comment_6930)
- Add check to ensure tasks are being started for the correct character
- Modified the default leadership tasks to prioritize AD generation (feel free to rever)
- Alter next run resolve function to use delay parameter to allow for unique delay timers to be used in certain cases
/* End Bunta's Edits?
0.3.0.3
1.0.0.3
- Fix ingredient task selection to correctly iterate through all ingredient tasks
- Fix some gem trading tasks not being filtered correctly
- Alter character selection to pick only exact character name matches
- Add check for gateway disconnected
- Update leadership tasks
1.0.0.2
0.3.0.2
- Fix leadership tasks not creating assets correctly
- Exclude alchemy from rare task exclusions due to Aqua Regia (thanks Eversor)
- Add option to save task lists per character (experimental)
- Reduce GM_setValue calls to avoid tampermonkey failing to save settings (thanks miah)
1.0.0.1
0.3.0.1
- Rewrite script using client.dataModel methods to massively improve reliability and performance (thanks Msc)
- Altered mutichar selector to be faster (thanks miah)
- AD refining will now only attempt to refine if you are able to collect diamonds
- Updated rare tasks selector (thanks Traktor)
- Change task lists to use exact task names so no ambiguity exists (no longer requires excluderare option)
- Add option to refine AD during character switching (thanks Eversor)
- Asset resources are now trained as needed (only for required slots)
- Added some level 20 gather tasks
0.3.0.5
- Increased supply buying to 100 units
- Fix resources not buying correctly in all cases
0.3.0.0
- Fix pause button state saving correctly in firefox
- Added Multi-Character support
0.3.0.4
- Added function to clear all saved settings for script
- Add page timeout reloading functions outside of main function (thanks Kreese and Frabtik)
- Remove disable sound functionality (now configurable in gateway)
- Add check to ensure tasks are being started for the correct character
0.2.0.1.8
- Alter next run resolve function to use delay parameter to allow for unique delay timers to be used in certain cases
- Added pause button to allow easy on/off switching
0.3.0.3
0.2.0.1.7
- Fix ingredient task selection to correctly iterate through all ingredient tasks
- Added option to enable/disable filling optional asset slots
- Alter character selection to pick only exact character name matches
- Added batch potions tasks to be skipped in ingredient selection
- Update leadership tasks
- Added timer to reload page if stuck loading for too long
0.3.0.2
- Added option to disable page sounds
- Exclude alchemy from rare task exclusions due to Aqua Regia (thanks Eversor)
- Updated license to by-nc-sa
- Reduce GM_setValue calls to avoid tampermonkey failing to save settings (thanks miah)
0.2.0.1.6
0.3.0.1
- Add configurable option for excluding rare tasks
- Altered mutichar selector to be faster (thanks miah)
0.2.0.1.5
- Updated rare tasks selector (thanks Traktor)
- Add ability to specify specific level for tasks and configure same named artificing resource tasks to request correct level of task
- Add option to refine AD during character switching (thanks Eversor)
- Remove purchase notification that never times out
- Added some level 20 gather tasks
0.2.0.1.4
- Increased supply buying to 100 units
- Added functionality to purchase required resources from gateway shop
0.3.0.0
0.2.0.1.3
- Added Multi-Character support
- Add Artificing and Weaponsmithing to Robot
- Added function to clear all saved settings for script
(Artificing will not work properly yet as all three tiers of gather and craft tasks have the same task name)
- Remove disable sound functionality (now configurable in gateway)
0.2.0.1.2
0.2.0.1.8
- Update reload process
- Added pause button to allow easy on/off switching
- Fix optional asset selector with gateway update
0.2.0.1.7
0.2.0.1.1
- Added option to enable/disable filling optional asset slots
- Simplify asset selection after they fixed bug in previous gateway update
- Added batch potions tasks to be skipped in ingredient selection
- Update level 20 leadership tasks
- Added timer to reload page if stuck loading for too long
- Update with changes in Mustex's script (version 15)
- Added option to disable page sounds
- Updated license to by-nc-sa
0.2.0.1.6
- Add configurable option for excluding rare tasks
0.2.0.1.5
- Add ability to specify specific level for tasks and configure same named artificing resource tasks to request correct level of task
- Remove purchase notification that never times out
0.2.0.1.4
- Added functionality to purchase required resources from gateway shop
0.2.0.1.3
- Add Artificing and Weaponsmithing to Robot
(Artificing will not work properly yet as all three tiers of gather and craft tasks have the same task name)
0.2.0.1.2
- Update reload process
- Fix optional asset selector with gateway update
0.2.0.1.1
- Simplify asset selection after they fixed bug in previous gateway update
- Update level 20 leadership tasks
- Update with changes in Mustex's script (version 15)
* Added a secondary timer that will reload the gateway every few hours. This should help with disconnects from the server
* Added a secondary timer that will reload the gateway every few hours. This should help with disconnects from the server
* Implemented tooltips for settings panel
* Implemented tooltips for settings panel
0.1.9.1.15
0.1.9.1.15
- Repeat task reordering for +2 armor
- Repeat task reordering for +2 armor
0.1.9.1.14
0.1.9.1.14
- Fix selection of assets after gateway update
- Fix selection of assets after gateway update
- Skip intensive gather tasks added after gateway update
- Skip intensive gather tasks added after gateway update
0.1.9.1.13
0.1.9.1.13
- Change ordering of tasks and ingredient checks
- Change ordering of tasks and ingredient checks
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.
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.
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.
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.
0.1.9.1.12
0.1.9.1.12
- Optimise crafting tasks for highest exp/min gains due to ingredient requirements
- Optimise crafting tasks for highest exp/min gains due to ingredient requirements
0.1.9.1.11
0.1.9.1.11
- Add extra craft tasks for when residuum runs out
- Add extra craft tasks for when residuum runs out
0.1.9.1.10
0.1.9.1.10
- Only allow rare tasks to be selected for Leadership
- Only allow rare tasks to be selected for Leadership
This avoids craft loops where higher quality rare crafts require ingredients with the same name
This avoids craft loops where higher quality rare crafts require ingredients with the same name
0.1.9.1.9
0.1.9.1.9
- Alter craft tasks to favour armor to optimise inventory space
- Alter craft tasks to favour armor to optimise inventory space
0.1.9.1.8
0.1.9.1.8
- Fix script restart bug when no tasks found
- Fix script restart bug when no tasks found
0.1.9.1.7
0.1.9.1.7
- Update search string for Potions (After the task names for elxiirs have been changed)
- Update search string for Potions (After the task names for elxiirs have been changed)
- Remove logon error skips to avoid logons sometimes failing on first load (ensure logon details are correct!)
- Remove logon error skips to avoid logons sometimes failing on first load (ensure logon details are correct!)
0.1.9.1.6
0.1.9.1.6
- Update tasks for all professions
- Update tasks for all professions
- Update ingredient search lists for all professions
- Update ingredient search lists for all professions
0.1.9.1.5
0.1.9.1.5
- Fix regular expression used in potion ingredient search
- Fix regular expression used in potion ingredient search
0.1.9.1.4
0.1.9.1.4
- Alter default timeouts (makes script a lot more stable and less prone to errors)
- Alter default timeouts (makes script a lot more stable and less prone to errors)
- Remove unused variable
- Remove unused variable
- Add extra logging for task ingredient searches
- Add extra logging for task ingredient searches
0.1.9.1.3
0.1.9.1.3
- Fix bug with required resource checks getting stuck on non craftable resources
- Fix bug with required resource checks getting stuck on non craftable resources
0.1.9.1.2
0.1.9.1.2
- Added method to check for required task ingredients and choose tasks to create them
- Added method to check for required task ingredients and choose tasks to create them
Method is currently hard coded to specify certain search strings for ingredient types
Method is currently hard coded to specify certain search strings for ingredient types
Currently working for all Alchemy tasks
Currently working for all Alchemy tasks
There is a current problem that if you have the required potion ingredient but it is in your belt slots
There is a current problem that if you have the required potion ingredient but it is in your belt slots
the task is uncraftable but the ingredients show as available and it will not craft a new one
the task is uncraftable but the ingredients show as available and it will not craft a new one
0.1.9.1
0.1.9.1
- Update with changes in Mustex's script (version 12)
- Update with changes in Mustex's script (version 12)
* Added tasks for Platesmithing, Leatherworking, Tailoring
* Added tasks for Platesmithing, Leatherworking, Tailoring
* Added detection for the gateway being down
* Added detection for the gateway being down
0.1.8.3.8
0.1.8.3.8
- Update asset selection to avoid using coloured assets in junk slots for leadership
- Update asset selection to avoid using coloured assets in junk slots for leadership
0.1.8.3.7
0.1.8.3.7
- Update leadership tasks table due to task reward/duration alterations
- Update leadership tasks table due to task reward/duration alterations
0.1.8.3.6
0.1.8.3.6
- Add option to enable/disable automation process
- Add option to enable/disable automation process
- Update alchemy tasks some more
- Update alchemy tasks some more
0.1.8.3.5
0.1.8.3.5
- Add ability to select from multiple tasks with same name (eg Alchemical Research)
- Add ability to select from multiple tasks with same name (eg Alchemical Research)
- Add craft options for alchemy potions (need to be manually switched since they use the same ingredients)
- Add craft options for alchemy potions (need to be manually switched since they use the same ingredients)
0.1.8.3.4
0.1.8.3.4
- Add alchemy tasks up to level 20
- Add alchemy tasks up to level 20
0.1.8.3.3
0.1.8.3.3
- Change task slot selection to be user configurable options in settings window
- Change task slot selection to be user configurable options in settings window
- Add level 1 alchemical research
- Add level 1 alchemical research
0.1.8.3.2
0.1.8.3.2
- Added ability to specify how many tasks of each profession to train multiple professions at once
- Added ability to specify how many tasks of each profession to train multiple professions at once
- Updated mailsmithing level 0 tasks
- Updated mailsmithing level 0 tasks
0.1.8.3.1
0.1.8.3.1
- Changed asset selection to only update Junk assets
- Changed asset selection to only update Junk assets
- Leadership asset selection for bronze tier picks lowest asset first
- Leadership asset selection for bronze tier picks lowest asset first
- Modified Leadership tasks
- Modified Leadership tasks
0.1.8.3
0.1.8.3
- Tweaked Leadership tasks grid
- Tweaked Leadership tasks grid
- Added task grid for Alchemy (Partial)
- Added task grid for Alchemy (Partial)
0.1.8.2
0.1.8.2
- onsave handlers for settings are now called before the settings values are saved
- onsave handlers for settings are now called before the settings values are saved
- Added onsave handler for console to enable/disable using the window console
- Added onsave handler for console to enable/disable using the window console
0.1.8.1
0.1.8.1
- Added checking for errors (using the window title) and will navigate back to the main login page if autologin is enabled
- Added checking for errors (using the window title) and will navigate back to the main login page if autologin is enabled
0.1.8
0.1.8
- Added popup for altering settings
- Added popup for altering settings
- Settings are saved to script cache
- Settings are saved to script cache
- Added mailsmithing tasks to task grid
- Added mailsmithing tasks to task grid
0.1.7
0.1.7
- Added lower level leadership tasks to grid
- Added lower level leadership tasks to grid
- Added hiring tasks to leadership task
- Added hiring tasks to leadership task
- Uses saved values to determine which profession type to level (Defaults to Leadership, currently no way to change it)
- Uses saved values to determine which profession type to level (Defaults to Leadership, currently no way to change it)
0.1.5
0.1.5
- Is now able to recover from missing assets
- Is now able to recover from missing assets
- Uses a configurable grid to determine what the next task is to complete
- Uses a configurable grid to determine what the next task is to complete
0.1.0
0.1.0
- Is now able to select some hard coded leadership tasks
- Is now able to select some hard coded leadership tasks
- Can now collect from any completed slot
- Can now collect from any completed slot
*/
*/
// Make sure it's running on the main page, no frames
// Make sure it's running on the main page, no frames
if (window.self !== window.top) {
if (window.self !== window.top) {
throw "";
throw "";
}
}
var current_Gateway = _select_Gateway(); // edited by RottenMind
var current_Gateway = _select_Gateway(); // edited by RottenMind
// Set global console variables
// Set global console variables
var fouxConsole = {log: function () {
var fouxConsole = {
}, info: function () {
log : function () {},
}, error: function () {
info : function () {},
}, warn: function () {
error : function () {},
}};
warn : function () {}
};
var console = unsafeWindow.console || fouxConsole;
var console = unsafeWindow.console || fouxConsole;
var chardiamonds = {};
var chardiamonds = {};
var chargold = {};
var definedTask = {};
var definedTask = {};
var startedTask = {}; // stores information about previous (character, taskname, and counter) and currently started task
var antiInfLoopTrap = { // without this script sometimes try to start the same task in infinite loop (lags?)
startedTask["lastTaskChar"] = "";
prevCharName:"unknown", // character name which recently launched a task
startedTask["lastTaskName"] = "";
prevTaskName:"unknown", // name of the task previously launched
startedTask["lastTaskCount"] = 0;
startCounter:0, // how many times the same character starts the same task
currCharName:"unknown", // character name which try to launch new task
currTaskName:"unknown", // name of the new task to launch
trapActivation:15 // number of repetition to activation trap
};
// Page Reloading function
// Page Reloading function
// Every second the page is idle or loading is tracked
// Every second the page is idle or loading is tracked
var loading_reset = false; // Enables a periodic reload if this is toggled on by the Auto Reload check box on the settings panel
var loading_reset = false; // Enables a periodic reload if this is toggled on by the Auto Reload check box on the settings panel
var s_paused = false; // extend the paused setting to the Page Reloading function
var s_paused = false; // extend the paused setting to the Page Reloading function
// Include JqueryUI CSS
var jqUI_CssSrc = GM_getResourceText("jqUI_CSS");
/*jqUI_CssSrc = jqUI_CssSrc.replace (/url\(images\//g, "url(http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/dark-hive/images/");*/
jqUI_CssSrc = jqUI_CssSrc.replace(/url\(images\//g, "url(http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/cupertino/images/");
jqUI_CssSrc = jqUI_CssSrc.replace(/font-size: 1\.1em/g, "font-size: 0.9em");
GM_addStyle(jqUI_CssSrc);
// RottenMind (start), multi Url support
// RottenMind (start), multi Url support
function _select_Gateway() { // Check for Gateway used to
function _select_Gateway() { // Check for Gateway used to
if (window.location.href.indexOf("gatewaytest") > -1) { // detect gatewaytest Url
if (window.location.href.indexOf("gatewaytest") > -1) { // detect gatewaytest Url
console.log("GatewayTEST detected");
console.log("GatewayTEST detected");
return "http://gatewaytest.playneverwinter.com";
return "http://gatewaytest.playneverwinter.com";
}
} else if (window.location.href.indexOf("nw.ru.perfectworld") > -1) {
else if (window.location.href.indexOf("nw.ru.perfectworld") > -1) {
console.log("GatewayRU detected");
console.log("GatewayRU detected");
return "http://gateway.nw.ru.perfectworld.eu";
return "http://gateway.nw.ru.perfectworld.eu";
}
} else { // must go somewhere
else { // must go somewhere
console.log("Gateway detected");
console.log("Gateway detected");
return "http://gateway.playneverwinter.com";
return "http://gateway.playneverwinter.com";
}
}
}
}
// RottenMind (END)
// RottenMind (END)
(function () {
(function () {
var $ = unsafeWindow.$;
var $ = unsafeWindow.$;
//MAC-NW
//MAC-NW
$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {
$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {
var found = 'found';
var found = 'found';
var $this = $(this.selector);
var $this = $(this.selector);
var $elements = $this.not(function () {
var $elements = $this.not(function () {
return $(this).data(found);
return $(this).data(found);
}).each(handler).data(found, true);
}).each(handler).data(found, true);
if (!isChild) {
if (!isChild) {
(window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] = window.setInterval(function () {
(window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] = window.setInterval(function () {
$this.waitUntilExists(handler, shouldRunHandlerOnce, true);
$this.waitUntilExists(handler, shouldRunHandlerOnce, true);
}, 500);
}, 500);
} else if (shouldRunHandlerOnce && $elements.length) {
} else if (shouldRunHandlerOnce && $elements.length) {
window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
}
}
return $this;
return $this;
}
}
// MAC-NW - Wait for tooltip to come up so we can alter the list
// MAC-NW - Wait for tooltip to come up so we can alter the list
$('.tooltip-menu button').waitUntilExists(function () {
$('.tooltip-menu button').waitUntilExists(function () {
// Tooltip has open menu itemtooltip
// Tooltip has open menu itemtooltip
if ($('button.tooltip-menu button[data-url-silent^="/inventory/item-open"]') && !$('.tooltip-menu div.tooltip-openall').length && !$('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').hasClass('disabled'))
if ($('button.tooltip-menu button[data-url-silent^="/inventory/item-open"]') && !$('.tooltip-menu div.tooltip-openall').length && !$('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').hasClass('disabled'))
try {
try {
var thisItem = eval("client.dataModel.model." + $('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').attr('data-url-silent').split("=")[1]);
var thisItem = eval("client.dataModel.model." + $('.tooltip-menu button[data-url-silent^="/inventory/item-open"]').attr('data-url-silent').split("=")[1]);
if (thisItem.count > 1) {
if (thisItem.count > 1) {
if (thisItem.count >= 99)
if (thisItem.count >= 99)
thisItem.count = 99;
thisItem.count = 99;
var openAllClick = "for (i = 1; i <= " + thisItem.count + "; i++){ window.setTimeout(function () {client.sendCommand('GatewayInventory_OpenRewardPack', '" + thisItem.uid + "');}, 500); }";
var openAllClick = "for (i = 1; i <= " + thisItem.count + "; i++){ window.setTimeout(function () {client.sendCommand('GatewayInventory_OpenRewardPack', '" + thisItem.uid + "');}, 500); }";
$('div.tooltip-menu').append('<div class="input-field button menu tooltip-openall"><div class="input-bg-left"></div><div class="input-bg-mid"></div><div class="input-bg-right"></div>\
$('div.tooltip-menu').append('<div class="input-field button menu tooltip-openall"><div class="input-bg-left"></div><div class="input-bg-mid"></div><div class="input-bg-right"></div>\
<button class="&nbsp;" onclick="' + openAllClick + '">Open All (' + thisItem.count + ')</button></div>');
<button class="&nbsp;" onclick="' + openAllClick + '">Open All (' + thisItem.count + ')</button></div>');
//$('a.nav-dungeons').trigger('click'); window.setTimeout(function(){ $('a.nav-inventory').trigger('click'); },2000);
//$('a.nav-dungeons').trigger('click'); window.setTimeout(function(){ $('a.nav-inventory').trigger('click'); },2000);
}
}
} catch (e) {
} catch (e) {
console.log("ERROR: Did not succeed to add open all tooltip.");
console.log("ERROR: Did not succeed to add open all tooltip.");
}
}
});
});
$('.vendor-quantity-block span.attention').waitUntilExists(function () {
$('.vendor-quantity-block span.attention').waitUntilExists(function () {
if ($('.vendor-quantity-block span.attention span').length)
if ($('.vendor-quantity-block span.attention span').length)
$('.vendor-quantity-block span.attention').replaceWith('<div class="input-field button"><div class="input-bg-left"></div><div class="input-bg-mid"></div><div class="input-bg-right"></div><button onclick="$(\'input[name=inventorySellQty]\').val(\'' + $(".vendor-quantity-block span.attention span").text() + '\');">All (' + $(".vendor-quantity-block span.attention span").text() + ')</button></div>');
$('.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>');
});
});
$('div.notification div.messages li').waitUntilExists(function () {
$('div.notification div.messages li').waitUntilExists(function () {
if ($("div.notification div.messages li").length > 2)
if ($("div.notification div.messages li").length > 2)
$("div.notification div.messages li").eq(0).remove();
$("div.notification div.messages li").eq(0).remove();
});
});
// Always disable SCA tutorial if its active
// Always disable SCA tutorial if its active
$('#help-dimmer.help-cont.whenTutorialActive').waitUntilExists(function () {
$('#help-dimmer.help-cont.whenTutorialActive').waitUntilExists(function () {
client.toggleHelp();
client.toggleHelp();
});
});
//MAC-NW
//MAC-NW
var state_loading = 0; // If "Page Loading" takes longer than 30 seconds, reload page (maybe a javascript error)
var state_loading = 0; // If "Page Loading" takes longer than 30 seconds, reload page (maybe a javascript error)
var state_loading_time = 30; // default of 30 seconds
var state_loading_time = 30; // default of 30 seconds
var state_idle = 0; // If the page is idle for longer than 60 seconds, reload page (maybe a javascript error)
var state_idle = 0; // If the page is idle for longer than 60 seconds, reload page (maybe a javascript error)
var state_idle_time = 120; // default of 120 seconds
var state_idle_time = 120; // default of 120 seconds
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
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
var last_location = ""; // variable to track reference to page URL
var last_location = ""; // variable to track reference to page URL
var reload_timer = setInterval(function () {
var reload_timer = setInterval(function () {
if (!s_paused) {
if (!s_paused) {
if (startedTask["lastTaskCount"] >= 20) {
if (antiInfLoopTrap.startCounter >= antiInfLoopTrap.trapActivation) {
unsafeWindow.location.href = current_Gateway;
unsafeWindow.location.href = current_Gateway;
return;
return;
}
}
if (loading_reset) {
if (loading_reset) {
var loading_date = new Date();
var loading_date = new Date();
var loading_sec = Number(loading_date.getSeconds());
var loading_sec = Number(loading_date.getSeconds());
var loading_min = Number(loading_date.getMinutes());
var loading_min = Number(loading_date.getMinutes());
var loading_hour = Number(loading_date.getHours());
var loading_hour = Number(loading_date.getHours());
if (reload_hours.indexOf(loading_hour) >= 0 && loading_min == 29 && loading_sec < 2) {
if (reload_hours.indexOf(loading_hour) >= 0 && loading_min == 29 && loading_sec < 2) {
console.log("Auto Reload");
console.log("Auto Reload");
unsafeWindow.location.href = current_Gateway; // edited by RottenMind
unsafeWindow.location.href = current_Gateway;
return;
return;
}
}
}
}
// check for errors
// check for errors
if ($("title").text().match(/Error/) || $("div.modal-content h3").text().match(/Disconnected/)) {
if ($("title").text().match(/Error/) || $("div.modal-content h3").text().match(/Disconnected/)) {
console.log("Error detected - relogging");
console.log("Error detected - relogging");
unsafeWindow.location.href = current_Gateway; // edited by RottenMind
unsafeWindow.location.href = current_Gateway;
return;
return;
}
}
if ($("div.loading-image:visible").length) {
if ($("div.loading-image:visible").length) {
last_location = location.href;
last_location = location.href;
state_idle = 0;
state_idle = 0;
if (state_loading >= state_loading_time) {
if (state_loading >= state_loading_time) {
console.log("Page Loading too long");
console.log("Page Loading too long");
state_loading = 0;
state_loading = 0;
location.reload();
location.reload();
}
} else {
else {
state_loading++;
state_loading++;
console.log("Page Loading ...", state_loading + "s");
console.log("Page Loading ...", state_loading + "s");
}
}
}
}
// TODO: Add check for gateway disconnected
// TODO: Add check for gateway disconnected
//<div class="modal-content" id="modal_content"><h3>Disconnected from Gateway</h3><p>You have been disconnected.</p><button type="button" class="modal-button" onclick="window.location.reload(true);">Close</button>
//<div class="modal-content" id="modal_content"><h3>Disconnected from Gateway</h3><p>You have been disconnected.</p><button type="button" class="modal-button" onclick="window.location.reload(true);">Close</button>
/* Can't use idle check with dataModel methods
/* Can't use idle check with dataModel methods
else if (location.href == last_location) {
else if (location.href == last_location) {
state_loading = 0;
state_loading = 0;
if (state_idle >= state_idle_time) {
if (state_idle >= state_idle_time) {
console.log("Page Idle too long");
console.log("Page Idle too long");
state_idle = 0;
state_idle = 0;
unsafeWindow.location.href = current_Gateway ; // edited by RottenMind
unsafeWindow.location.href = current_Gateway ; // edited by RottenMind
}
}
else {
else {
state_idle++;
state_idle++;
// comment out to avoid console spam
// comment out to avoid console spam
//console.log("Page Idle ...", state_idle + "s");
//console.log("Page Idle ...", state_idle + "s");
}
}
}
}
*/
*/
else {
else {
last_location = location.href;
last_location = location.href;
state_loading = 0;
state_loading = 0;
state_idle = 0;
state_idle = 0;
}
}
}
}
}, 1000);
}, 1000);
})();
})();
(function () {
(function () {
/**
/**
* Add a string of CSS to the main page
* Add a string of CSS to the main page
*
*
* @param {String} cssString The CSS to add to the main page
* @param {String} cssString The CSS to add to the main page
*/
*/
function AddCss(cssString) {
function AddCss(cssString) {
var head = document.getElementsByTagName('head')[0];
var head = document.getElementsByTagName('head')[0];
if (!head)
if (!head)
return;
return;
var newCss = document.createElement('style');
var newCss = document.createElement('style');
newCss.type = "text/css";
newCss.type = "text/css";
newCss.innerHTML = cssString;
newCss.innerHTML = cssString;
head.appendChild(newCss);
head.appendChild(newCss);
}
}
function countLeadingSpaces(str) {
function countLeadingSpaces(str) {
return str.match(/^(\s*)/)[1].length;
return str.match(/^(\s*)/)[1].length;
}
}
var image_pause = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAY" +
var image_pause = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAY" +
"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" +
"rqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri" +
"rqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri" +
"6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxb" +
"6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxb" +
"zwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppS" +
"zwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppS" +
"TbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo" +
"TbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo" +
"5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8" +
"5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8" +
"Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLK" +
"Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLK" +
"cRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p" +
"cRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p" +
"7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc" +
"7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc" +
"+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+H" +
"+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+H" +
"p8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw" +
"p8Ib+OPzrbZfay2e1BjK
"34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8Yu" +
"ZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIh" +
"OOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW