Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Based on Battle INF item handler http:// pastebin.com/N8yf8QYb
- */
- /*global ScriptAPI, API, items*/
- (function (ScriptAPI, API, items) {
- 'use strict';
- var rarityToGrind = 5, // This rarity & lower is merged & sold
- raritiesToSave = [5, 6], // These rarities are merged with exactly matching items
- rarityToSell = 0, // This rarity & lower is simply sold if it has no other use
- defaultTimeout = 60, // Timeout for notifications
- allowAging = 3, // 1 ages inventory, 2 ages equipped items, 3 ages both
- showNotifications = [false, true, false, false, true]; // [ grind, save, sell, keep, watch ]
- function getInventory() { // Get inventory items
- return ScriptAPI.$user.inventory.items;
- }
- function getEquipment() { // Get equipped items
- return ScriptAPI.$user.character.equipment;
- }
- function showSummary(item, showPlus) { // Show a summary of an item
- var parts = [
- '\ud83c\udfe0' + item.mod, // Area
- '\u2606' + item.rarity, // Rarity
- item.name // Name
- ];
- if (showPlus) {
- parts.push('+' + item.plus);
- }
- return parts.join(' ');
- }
- function notify(message, timeout) { // Create a notification
- API.notifications.create(message, timeout || defaultTimeout);
- }
- function watch(item) { // Determine the best values for items
- var key = 'best',
- data = localStorage.getItem(key),
- stats = item.original ? item.original.stats : item.stats,
- filteredStats = {},
- isBest = false,
- maxKey,
- i;
- data = data ? JSON.parse(data) : {};
- if (!data.hasOwnProperty(item.mod)) {
- data[item.mod] = {};
- }
- if (!data[item.mod].hasOwnProperty(item.rarity)) {
- data[item.mod][item.rarity] = {};
- }
- if (!data[item.mod][item.rarity].hasOwnProperty(item.name)) {
- data[item.mod][item.rarity][item.name] = {};
- }
- for (i in stats) {
- if (stats.hasOwnProperty(i)) {
- if (stats[i] > 0) {
- filteredStats[i] = stats[i];
- if (!maxKey || stats[i] > stats[maxKey]) {
- maxKey = i;
- }
- }
- }
- }
- if (!data[item.mod][item.rarity][item.name].hasOwnProperty(maxKey) || stats[maxKey] >= data[item.mod][item.rarity][item.name][maxKey]) {
- isBest = true;
- for (i in filteredStats) {
- if (filteredStats.hasOwnProperty(i)) {
- data[item.mod][item.rarity][item.name][i] = filteredStats[i];
- }
- }
- }
- localStorage.setItem(key, JSON.stringify(data));
- if (isBest && item.rarity >= 6 && showNotifications[4]) {
- notify('\ud83d\udc4d ' + showSummary(item) + ' (' + filteredStats[maxKey] + ')');
- console.log(showSummary(item), filteredStats);
- }
- return isBest && filteredStats;
- }
- function sell(item) { // Sell an item
- if (showNotifications[2]) {
- notify('\u2604 ' + showSummary(item));
- }
- ScriptAPI.$userService.sellItem(item); // Sell item
- return true;
- }
- function keep(item) { // Keep an item
- if (showNotifications[3]) {
- notify('\u2764 ' + showSummary(item));
- }
- return true;
- }
- function craft(primary, secondary, option) { // Craft items
- var tmp;
- if (primary.ts > secondary.ts) { // Ensures primary is older than secondary
- tmp = primary;
- primary = secondary;
- secondary = tmp;
- }
- if (primary.rarity < secondary.rarity) { // Ensures primary is rarer than secondary
- tmp = primary;
- primary = secondary;
- secondary = tmp;
- }
- // Notify
- if (option === 1 && showNotifications[0]) {
- notify('\u267A ' + showSummary(primary) + ' \u2190 ' + showSummary(secondary));
- }
- if (option === 2 && showNotifications[1]) {
- notify('\u2726 ' + showSummary(primary, true) + ' \u2190 ' + showSummary(secondary, true));
- }
- ScriptAPI.$craftingService.craftItems(primary, secondary); // Craft item
- return primary;
- }
- function grind(item) { // Grind item with another in inventory
- var items = getInventory(),
- i;
- for (i = 0; i < items.length; i++) {
- if ((items[i] !== item) && (items[i].rarity <= rarityToGrind) && !items[i].lock) {
- ScriptAPI.$userService.sellItem(craft(items[i], item, 1)); // Grind items & sell result
- return true;
- }
- }
- }
- function merge(item) { // Merge with a similar item in inventory or equipped
- var items = getInventory().concat(getEquipment()),
- i;
- for (i = 0; i < items.length; i++) {
- if ((items[i] !== item) && (items[i].rarity === item.rarity) && (items[i].name === item.name) && (items[i].mod === item.mod) && (items[i].plus + item.plus < (5 * item.rarity + 5)) && !items[i].lock) {
- craft(items[i], item, 2); // Merge items
- return true;
- }
- }
- }
- function aging(setting) {
- var items,
- i;
- if (setting === 1) { // Age items in inventory
- items = getInventory();
- } else if (setting === 2) { // Age equipped items
- items = getEquipment();
- } else if (setting === 3) { // Age all items
- items = getEquipment().concat(getInventory());
- }
- if (items) {
- for (i = 0; i < items.length; i++) {
- ScriptAPI.$craftingService.ageUpItem(items[i]);
- }
- }
- }
- // Handle new item
- items.forEach(function (item) {
- var isDone = false;
- // Check if this item is the best possible item for its type
- watch(item);
- // Checks if item meets requirements for merging
- if (raritiesToSave.indexOf(item.rarity) >= 0) {
- isDone = merge(item);
- }
- // Check if item meets requirements for grinding
- if (!isDone && item.rarity <= rarityToGrind) {
- isDone = grind(item);
- }
- // Checks if item meets requirements for selling
- if (!isDone && (item.rarity <= rarityToSell)) {
- isDone = sell(item);
- }
- // If no function has been run, item will be kept
- if (!isDone) {
- isDone = keep(item);
- }
- });
- // Triggers item aging function
- if (allowAging > 0) {
- aging(allowAging);
- }
- }(ScriptAPI, API, items));
Advertisement
Add Comment
Please, Sign In to add comment