Koviko

Untitled

Nov 11th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Based on Battle INF item handler http:// pastebin.com/N8yf8QYb
  3.  */
  4.  
  5. /*global ScriptAPI, API, items*/
  6. (function (ScriptAPI, API, items) {
  7.   'use strict';
  8.  
  9.   var rarityToGrind = 5, // This rarity & lower is merged & sold
  10.     raritiesToSave = [5, 6], // These rarities are merged with exactly matching items
  11.     rarityToSell = 0, // This rarity & lower is simply sold if it has no other use
  12.     defaultTimeout = 60, // Timeout for notifications
  13.     allowAging = 3, // 1 ages inventory, 2 ages equipped items, 3 ages both
  14.     showNotifications = [false, true, false, false, true]; // [ grind, save, sell, keep, watch ]
  15.  
  16.   function getInventory() { // Get inventory items
  17.     return ScriptAPI.$user.inventory.items;
  18.   }
  19.  
  20.   function getEquipment() { // Get equipped items
  21.     return ScriptAPI.$user.character.equipment;
  22.   }
  23.  
  24.   function showSummary(item, showPlus) { // Show a summary of an item
  25.     var parts = [
  26.       '\ud83c\udfe0' + item.mod, // Area
  27.       '\u2606' + item.rarity, // Rarity
  28.       item.name // Name
  29.     ];
  30.  
  31.     if (showPlus) {
  32.       parts.push('+' + item.plus);
  33.     }
  34.  
  35.     return parts.join(' ');
  36.   }
  37.  
  38.   function notify(message, timeout) { // Create a notification
  39.     API.notifications.create(message, timeout || defaultTimeout);
  40.   }
  41.  
  42.   function watch(item) { // Determine the best values for items
  43.     var key = 'best',
  44.       data = localStorage.getItem(key),
  45.       stats = item.original ? item.original.stats : item.stats,
  46.       filteredStats = {},
  47.       isBest = false,
  48.       maxKey,
  49.       i;
  50.  
  51.     data = data ? JSON.parse(data) : {};
  52.  
  53.     if (!data.hasOwnProperty(item.mod)) {
  54.       data[item.mod] = {};
  55.     }
  56.  
  57.     if (!data[item.mod].hasOwnProperty(item.rarity)) {
  58.       data[item.mod][item.rarity] = {};
  59.     }
  60.  
  61.     if (!data[item.mod][item.rarity].hasOwnProperty(item.name)) {
  62.       data[item.mod][item.rarity][item.name] = {};
  63.     }
  64.  
  65.     for (i in stats) {
  66.       if (stats.hasOwnProperty(i)) {
  67.         if (stats[i] > 0) {
  68.           filteredStats[i] = stats[i];
  69.  
  70.           if (!maxKey || stats[i] > stats[maxKey]) {
  71.             maxKey = i;
  72.           }
  73.         }
  74.       }
  75.     }
  76.  
  77.     if (!data[item.mod][item.rarity][item.name].hasOwnProperty(maxKey) || stats[maxKey] >= data[item.mod][item.rarity][item.name][maxKey]) {
  78.       isBest = true;
  79.  
  80.       for (i in filteredStats) {
  81.         if (filteredStats.hasOwnProperty(i)) {
  82.           data[item.mod][item.rarity][item.name][i] = filteredStats[i];
  83.         }
  84.       }
  85.     }
  86.  
  87.     localStorage.setItem(key, JSON.stringify(data));
  88.  
  89.     if (isBest && item.rarity >= 6 && showNotifications[4]) {
  90.       notify('\ud83d\udc4d ' + showSummary(item) + ' (' + filteredStats[maxKey] + ')');
  91.       console.log(showSummary(item), filteredStats);
  92.     }
  93.  
  94.     return isBest && filteredStats;
  95.   }
  96.  
  97.   function sell(item) { // Sell an item
  98.     if (showNotifications[2]) {
  99.       notify('\u2604 ' + showSummary(item));
  100.     }
  101.  
  102.     ScriptAPI.$userService.sellItem(item); // Sell item
  103.  
  104.     return true;
  105.   }
  106.  
  107.   function keep(item) { // Keep an item
  108.     if (showNotifications[3]) {
  109.       notify('\u2764 ' + showSummary(item));
  110.     }
  111.  
  112.     return true;
  113.   }
  114.  
  115.   function craft(primary, secondary, option) { // Craft items
  116.     var tmp;
  117.  
  118.     if (primary.ts > secondary.ts) { // Ensures primary is older than secondary
  119.       tmp = primary;
  120.       primary = secondary;
  121.       secondary = tmp;
  122.     }
  123.  
  124.     if (primary.rarity < secondary.rarity) { // Ensures primary is rarer than secondary
  125.       tmp = primary;
  126.       primary = secondary;
  127.       secondary = tmp;
  128.     }
  129.  
  130.     // Notify
  131.     if (option === 1 && showNotifications[0]) {
  132.       notify('\u267A ' + showSummary(primary) + ' \u2190 ' + showSummary(secondary));
  133.     }
  134.  
  135.     if (option === 2 && showNotifications[1]) {
  136.       notify('\u2726 ' + showSummary(primary, true) + ' \u2190 ' + showSummary(secondary, true));
  137.     }
  138.  
  139.     ScriptAPI.$craftingService.craftItems(primary, secondary); // Craft item
  140.     return primary;
  141.   }
  142.  
  143.   function grind(item) { // Grind item with another in inventory
  144.     var items = getInventory(),
  145.       i;
  146.  
  147.     for (i = 0; i < items.length; i++) {
  148.       if ((items[i] !== item) && (items[i].rarity <= rarityToGrind) && !items[i].lock) {
  149.         ScriptAPI.$userService.sellItem(craft(items[i], item, 1)); // Grind items & sell result
  150.         return true;
  151.       }
  152.     }
  153.   }
  154.  
  155.   function merge(item) { // Merge with a similar item in inventory or equipped
  156.     var items = getInventory().concat(getEquipment()),
  157.       i;
  158.  
  159.     for (i = 0; i < items.length; i++) {
  160.       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) {
  161.         craft(items[i], item, 2); // Merge items
  162.         return true;
  163.       }
  164.     }
  165.   }
  166.  
  167.   function aging(setting) {
  168.     var items,
  169.       i;
  170.  
  171.     if (setting === 1) { // Age items in inventory
  172.       items = getInventory();
  173.     } else if (setting === 2) { // Age equipped items
  174.       items = getEquipment();
  175.     } else if (setting === 3) { // Age all items
  176.       items = getEquipment().concat(getInventory());
  177.     }
  178.  
  179.     if (items) {
  180.       for (i = 0; i < items.length; i++) {
  181.         ScriptAPI.$craftingService.ageUpItem(items[i]);
  182.       }
  183.     }
  184.   }
  185.  
  186.   // Handle new item
  187.   items.forEach(function (item) {
  188.     var isDone = false;
  189.  
  190.     // Check if this item is the best possible item for its type
  191.     watch(item);
  192.  
  193.     // Checks if item meets requirements for merging
  194.     if (raritiesToSave.indexOf(item.rarity) >= 0) {
  195.       isDone = merge(item);
  196.     }
  197.  
  198.     // Check if item meets requirements for grinding
  199.     if (!isDone && item.rarity <= rarityToGrind) {
  200.       isDone = grind(item);
  201.     }
  202.  
  203.     // Checks if item meets requirements for selling
  204.     if (!isDone && (item.rarity <= rarityToSell)) {
  205.       isDone = sell(item);
  206.     }
  207.  
  208.     // If no function has been run, item will be kept
  209.     if (!isDone) {
  210.       isDone = keep(item);
  211.     }
  212.   });
  213.  
  214.   // Triggers item aging function
  215.   if (allowAging > 0) {
  216.     aging(allowAging);
  217.   }
  218. }(ScriptAPI, API, items));
Advertisement
Add Comment
Please, Sign In to add comment