Advertisement
axyd

InventoryAndStashPlugin.cs

May 17th, 2019
1,062
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 24.05 KB | None | 0 0
  1. // InventoryAndStashPlugin.cs "$Revision: 865 $" "$Date: 2019-01-24 18:33:04 +0200 (to, 24 tammi 2019) $"
  2. //modded by rambo99jose on 20190517@2340
  3.  
  4. using System;
  5. using System.Globalization;
  6. using System.Linq;
  7. using Turbo.Plugins;
  8. using Turbo.Plugins.Default;
  9.  
  10. namespace Turbo.Plugins.JarJar.DefaultUI
  11. {
  12.     public class InventoryAndStashPlugin : BasePlugin, ICustomizer, IInGameTopPainter
  13.     {
  14.         // NOTE that this draws to same places as original InventoryAndStashPlugin!
  15.  
  16.         public bool ShowImportantEnabled { get; set; } = true;
  17.         public bool ShowGreenStarEnabled { get; set; } = true;
  18.         public bool ShowRedStarEnabled { get; set; } = false;
  19.  
  20.         public bool HoradricCacheEnabled { get; set; } = true;
  21.         public bool CanCubedEnabled { get; set; } = false;
  22.  
  23.         public string StarChar { get; set; } = "\u2605";            // black star
  24.         public string FollowerChar { get; set; } = "\uD83D\uDEE1";  // shield
  25.         public string RecycleChar { get; set; } = "\u267A";         // recycling symbol
  26.         public string NoticeChar { get; set; } = "\u25CF";          // black circle
  27.         public string CubeChar { get; set; } = "\u2622";            // radioactive sign
  28.  
  29.         public IFont LooksGoodFont { get; set; }
  30.         public IFont LooksBadFont { get; set; }
  31.         public IFont FollowerFont { get; set; }
  32.         public IFont RecycleFont { get; set; }
  33.         public IFont CubeFont { get; set; }
  34.         public IFont NoticeFont { get; set; }
  35.         public IFont AncientRankFont { get; set; }
  36.         public IFont PrimalRankFont { get; set; }
  37.         public IFont SocketedLegendaryGemRankFont { get; set; }
  38.         public IFont HoradricCacheFont { get; set; }
  39.         public IFont QuantityFont { get; set; }
  40.  
  41.         public Func<IItem, ItemKeepDecision> GetItemKeepDecision;
  42.  
  43.         public IBrush InventoryLockBorderBrush { get; set; }
  44.  
  45.         //readonly StopWatch _stopper = StopWatch.StartNew();
  46.         private IWatch _stopper;
  47.  
  48.         public InventoryAndStashPlugin() { Enabled = true; }
  49.  
  50.         public void Customize()
  51.         {
  52.             // Disable original InventoryAndStashPlugin & Co.!
  53.             Hud.TogglePlugin<Turbo.Plugins.Default.InventoryAndStashPlugin>(false);
  54.             Hud.TogglePlugin<Turbo.Plugins.Default.HoveredItemInfoPlugin>(false);
  55.         }
  56.  
  57.         public override void Load(IController hud)
  58.         {
  59.             base.Load(hud);
  60.            
  61.             _stopper = Hud.Time.CreateAndStartWatch();
  62.  
  63.             LooksGoodFont = Hud.Render.CreateFont("arial", 9, 255, 0, 255, 0, false, false, true);      // Bright green (lime)
  64.             LooksBadFont = Hud.Render.CreateFont("arial", 9, 255, 204, 0, 0, false, false, true);       // Red
  65.             FollowerFont = Hud.Render.CreateFont("arial", 7, 255, 51, 204, 166, false, false, true);    // Green-blue
  66.             RecycleFont = Hud.Render.CreateFont("arial", 10, 255, 255, 128, 0, true, false, true);      // Orange
  67.             CubeFont = Hud.Render.CreateFont("arial", 10, 128, 255, 255, 0, true, false, true);         // Yellow (with alpha)
  68.             NoticeFont = Hud.Render.CreateFont("arial", 11, 255, 255, 0, 255, true, false, false);      // Bright violet
  69.             NoticeFont.SetShadowBrush(128, 0, 0, 0, true);
  70.  
  71.             GetItemKeepDecision = (item) =>
  72.             {
  73.                 return item.KeepDecision;   // Default behaviour is like random decisions!
  74.             };
  75.  
  76.             HoradricCacheFont = Hud.Render.CreateFont("tahoma", 8, 255, 255, 255, 255, false, false, false);
  77.             HoradricCacheFont.SetShadowBrush(128, 0, 0, 0, true);
  78.             AncientRankFont = Hud.Render.CreateFont("arial", 7, 255, 0, 0, 0, true, false, 220, 227, 153, 25, true);
  79.             PrimalRankFont = Hud.Render.CreateFont("arial", 7, 255, 0, 0, 0, true, false, 180, 255, 64, 64, true);
  80.             SocketedLegendaryGemRankFont = Hud.Render.CreateFont("arial", 7, 255, 0, 0, 0, true, false, false);
  81.             SocketedLegendaryGemRankFont.SetShadowBrush(128, 240, 240, 64, true);
  82.             QuantityFont = Hud.Render.CreateFont("tahoma", 8, 255, 200, 200, 200, false, false, false);
  83.             QuantityFont.SetShadowBrush(128, 0, 0, 0, true);
  84.  
  85.             InventoryLockBorderBrush = Hud.Render.CreateBrush(100, 0, 150, 200, -1.6f);
  86.         }
  87.  
  88.         private int stashPage, stashTab, stashTabAbs;
  89.         private float rv;
  90.  
  91.         public void PaintTopInGame(ClipState clipState)
  92.         {
  93.             if (clipState != ClipState.Inventory) return;
  94.  
  95.             stashTab = Hud.Inventory.SelectedStashTabIndex;
  96.             stashPage = Hud.Inventory.SelectedStashPageIndex;
  97.             stashTabAbs = stashTab + stashPage * Hud.Inventory.MaxStashTabCountPerPage;
  98.  
  99.             rv = 32.0f / 600.0f * Hud.Window.Size.Height;
  100.  
  101.             if ((Hud.Inventory.InventoryLockArea.Width > 0) && (Hud.Inventory.InventoryLockArea.Height > 0))
  102.             {
  103.                 var rect = Hud.Inventory.GetRectInInventory(Hud.Inventory.InventoryLockArea.X, Hud.Inventory.InventoryLockArea.Y, Hud.Inventory.InventoryLockArea.Width, Hud.Inventory.InventoryLockArea.Height);
  104.                 InventoryLockBorderBrush.DrawRectangle(rect.X, rect.Y, rect.Width, rect.Height);
  105.             }
  106.             var items = Hud.Game.Items.Where(x => x.Location != ItemLocation.Merchant && x.Location != ItemLocation.Floor);
  107.             foreach (var item in items)
  108.             {
  109.                 if (item.Location == ItemLocation.Stash)
  110.                 {
  111.                     var tabIndex = item.InventoryY / 10;
  112.                     if (tabIndex != stashTabAbs) continue;
  113.                 }
  114.                 if ((item.InventoryX < 0) || (item.InventoryY < 0)) continue;
  115.  
  116.                 var rect = Hud.Inventory.GetItemRect(item);
  117.                 if (rect == System.Drawing.RectangleF.Empty) continue;
  118.  
  119.                 if (item.ItemsInSocket != null) DrawItemSocketedLegendaryGemRank(item, rect);
  120.                 if (item.AncientRank >= 1) DrawItemAncientRank(item, rect);
  121.                 DrawItemHoradricCache(item, rect);
  122.                 if (CanCubedEnabled) DrawItemCanCubed(item, rect);
  123.  
  124.                 // New paint logic.
  125.                 if (item.Location == ItemLocation.Stash || item.Location == ItemLocation.Inventory)
  126.                 {
  127.                     if (item.Unidentified ||
  128.                         !item.IsLegendary ||
  129.                         item.SnoItem.Kind == ItemKind.gem ||
  130.                         item.SnoItem.Kind == ItemKind.uberstuff ||
  131.                         item.SnoItem.Kind == ItemKind.potion ||
  132.                         item.SnoItem.MainGroupCode == "gems_unique" ||
  133.                         item.SnoItem.MainGroupCode == "riftkeystone" ||
  134.                         item.SnoItem.MainGroupCode == "healthpotions" ||
  135.                         item.SnoItem.MainGroupCode == "consumable" ||
  136.                         item.SnoItem.MainGroupCode == "horadriccache")
  137.                     {
  138.                         continue;
  139.                     }
  140.                 }
  141.                 if (ShowImportantEnabled || ShowGreenStarEnabled || ShowRedStarEnabled)
  142.                 {
  143.                     if ((item.SnoItem.NameEnglish == "Puzzle Ring" || item.SnoItem.NameEnglish == "Bovine Bardiche") && RecycleFont != null)
  144.                     {
  145.                         ShowStar(rect, RecycleChar, RecycleFont, false);
  146.                         continue;
  147.                     }
  148.                     string starChar = StarChar;
  149.                     bool? armorySet = null;
  150.                     // Check cube items only in inventory.
  151.                     if (item.Location == ItemLocation.Inventory)
  152.                     {
  153.                         if (Cube.Any(x => x == item.SnoItem.NameEnglish))
  154.                         {
  155.                             if (item.SnoItem.CanKanaiCube)
  156.                             {
  157.                                 if (!armorySet.HasValue) armorySet = checkArmorySets(item);
  158.                                 // CanCanai animation.
  159.                                 var cubeTexture = Hud.Texture.KanaiCubeTexture;
  160.                                 var h = cubeTexture.Height * 0.6f / 1200.0f * Hud.Window.Size.Height;
  161.                                 var rh = h;
  162.                                 var mod = armorySet.Value ? 1 : (_stopper.ElapsedMilliseconds % 1000);
  163.                                 var ratio = 0.8f + 1.2f / 1000.0f * (mod < 500 ? mod : 1000 - mod);
  164.                                 rh *= ratio;
  165.  
  166.                                 var x = rect.Right - h * 0.80f - ((rh - h) / 2);
  167.                                 var y = rect.Top - h * 0.20f - ((rh - h) / 2);
  168.                                 cubeTexture.Draw(x, y, rh, rh, 1);
  169.                                 starChar = null;
  170.                             }
  171.                         }
  172.                         if (item.SnoItem.CanKanaiCube && Hud.Game.Me.IsCubed(item.SnoItem))
  173.                         {
  174.                             if (items.Where(x => x.Location != ItemLocation.Inventory && x.SnoItem.NameEnglish == item.SnoItem.NameEnglish).Count() == 0)
  175.                             {
  176.                                 // This has been cubed and is only in inventory, typically we do not want to save it - blinking.
  177.                                 if (!armorySet.HasValue) armorySet = checkArmorySets(item);
  178.                                 var mod = armorySet.Value ? 0 : (_stopper.ElapsedMilliseconds % 1500);
  179.                                 if (mod < 750) ShowStar(rect, CubeChar, CubeFont, false);
  180.                                 starChar = null;
  181.                             }
  182.                         }
  183.                     }
  184.                     if (starChar != null)
  185.                     {
  186.                         bool halfSize = item.Location == ItemLocation.Waist;
  187.                         if (ShowImportantEnabled)
  188.                         {
  189.                             string itemMainStat = GetMainStatName(item);
  190.                             if (Important.Any(x => x.Name == item.SnoItem.NameEnglish
  191.                                 && (x.MainStat == itemMainStat || x.MainStat == MAINSTAT_NONE)))
  192.                             {
  193.                                 // Important item with our main stat (or wildcard).
  194.                                 if (item.Location == ItemLocation.Stash || item.Location == ItemLocation.Inventory)
  195.                                 {
  196.                                     // Check Follower gear first.
  197.                                     if (Follower.Any(x => x == item.SnoItem.NameEnglish))
  198.                                     {
  199.                                         ShowStar(rect, FollowerChar, FollowerFont, halfSize);
  200.                                         continue;
  201.                                     }
  202.                                     ShowStar(rect, NoticeChar, NoticeFont, halfSize);
  203.                                     continue;
  204.                                 }
  205.                                 // Show important equipped items with good/bad color.
  206.                                 starChar = NoticeChar;
  207.                                 if (GetItemKeepDecision(item) == ItemKeepDecision.LooksGood)
  208.                                 {
  209.                                     ShowStar(rect, starChar, ShowGreenStarEnabled ? LooksGoodFont : NoticeFont, halfSize);
  210.                                 }
  211.                                 else
  212.                                 {
  213.                                     ShowStar(rect, starChar, ShowRedStarEnabled ? LooksBadFont : NoticeFont, halfSize);
  214.                                 }
  215.                             }
  216.                         }
  217.                         ItemKeepDecision keepDecision = GetItemKeepDecision(item);
  218.                         if (ShowGreenStarEnabled)
  219.                         {
  220.                             if (keepDecision == ItemKeepDecision.LooksGood) ShowStar(rect, starChar, LooksGoodFont, halfSize);
  221.                         }
  222.                         if (ShowRedStarEnabled)
  223.                         {
  224.                             if (keepDecision != ItemKeepDecision.LooksGood) ShowStar(rect, starChar, LooksBadFont, halfSize);
  225.                         }
  226.                     }
  227.                 }
  228.             }
  229.         }
  230.  
  231.         void ShowStar(System.Drawing.RectangleF rect, string symbol, IFont font, bool halfSize)
  232.         {
  233.             // Top right corner.
  234.             var textLayout = font.GetTextLayout(symbol);
  235.             font.DrawText(textLayout, rect.Right - rv / 15.0f - textLayout.Metrics.Width, rect.Top - rv / (halfSize ? 8.75f : 17.5f));
  236.         }
  237.  
  238.         private void DrawItemSocketedLegendaryGemRank(IItem item, System.Drawing.RectangleF rect)
  239.         {
  240.             var legendaryGem = item.ItemsInSocket.FirstOrDefault(x => x.Quality == ItemQuality.Legendary && x.JewelRank > -1);
  241.             if (legendaryGem == null) return;
  242.  
  243.             var jewelRank = legendaryGem.JewelRank;
  244.             if (jewelRank > -1)
  245.             {
  246.                 var text = jewelRank.ToString("D", CultureInfo.InvariantCulture);
  247.                 var layout = SocketedLegendaryGemRankFont.GetTextLayout(text);
  248.                 SocketedLegendaryGemRankFont.DrawText(layout, rect.X, rect.Y);
  249.             }
  250.         }
  251.  
  252.         private void DrawItemAncientRank(IItem item, System.Drawing.RectangleF rect)
  253.         {
  254.             var ancientRank = item.AncientRank;
  255.             var caldesannRank = item.CaldesannRank;
  256.             var font = ancientRank == 1 ? AncientRankFont : PrimalRankFont;
  257.             string text;
  258.             if (caldesannRank == 0)
  259.             {
  260.                 text = ancientRank == 1 ? "A" : "P";
  261.             }
  262.             else
  263.             {
  264.                 text = caldesannRank.ToString("D", CultureInfo.InvariantCulture);
  265.             }
  266.             var textLayout = font.GetTextLayout(text);
  267.             font.DrawText(textLayout, rect.Right - rv / 15.0f - textLayout.Metrics.Width, rect.Bottom - rv / 35.0f - textLayout.Metrics.Height);
  268.         }
  269.  
  270.         private void DrawItemCanCubed(IItem item, System.Drawing.RectangleF rect)
  271.         {
  272.             if ((item.Location != ItemLocation.Inventory) && (item.Location != ItemLocation.Stash)) return;
  273.             var allowCube = item.SnoItem.CanKanaiCube && !Hud.Game.Me.IsCubed(item.SnoItem);
  274.             if (allowCube && !item.IsInventoryLocked)
  275.             {
  276.                 var cubeTexture = Hud.Texture.KanaiCubeTexture;
  277.                 var h = cubeTexture.Height * 0.6f / 1200.0f * Hud.Window.Size.Height;
  278.                 var rh = h;
  279.                 var mod = (_stopper.ElapsedMilliseconds % 1000);
  280.                 var ratio = 0.8f + 1.2f / 1000.0f * (mod < 500 ? mod : 1000 - mod);
  281.                 rh *= ratio;
  282.  
  283.                 var x = rect.Right - h * 0.80f - ((rh - h) / 2);
  284.                 var y = rect.Top - h * 0.20f - ((rh - h) / 2);
  285.                 cubeTexture.Draw(x, y, rh, rh, 1);
  286.             }
  287.         }
  288.  
  289.         private void DrawItemHoradricCache(IItem item, System.Drawing.RectangleF rect)
  290.         {
  291.             if (!HoradricCacheEnabled) return;
  292.             if (item.SnoItem.MainGroupCode != "horadriccache") return;
  293.  
  294.             var text = "";
  295.             if (item.SnoItem.Code.Contains("A1")) text = "A1";
  296.             if (item.SnoItem.Code.Contains("A2")) text = "A2";
  297.             if (item.SnoItem.Code.Contains("A3")) text = "A3";
  298.             if (item.SnoItem.Code.Contains("A4")) text = "A4";
  299.             if (item.SnoItem.Code.Contains("A5")) text = "A5";
  300.             if (item.SnoItem.Code.Contains("Act1")) text = "A1";
  301.             if (item.SnoItem.Code.Contains("Act2")) text = "A2";
  302.             if (item.SnoItem.Code.Contains("Act3")) text = "A3";
  303.             if (item.SnoItem.Code.Contains("Act4")) text = "A4";
  304.             if (item.SnoItem.Code.Contains("Act5")) text = "A5";
  305.             if (item.SnoItem.Code.Contains("Hard")) text += ": H";
  306.             if (item.SnoItem.Code.Contains("Expert")) text += ": E";
  307.             if (item.SnoItem.Code.Contains("Master")) text += ": M";
  308.  
  309.             if (item.SnoItem.Code.Contains("T13")) text += ": T13";
  310.             else if (item.SnoItem.Code.Contains("T12")) text += ": T12";
  311.             else if (item.SnoItem.Code.Contains("T11")) text += ": T11";
  312.             else if (item.SnoItem.Code.Contains("T10")) text += ": T10";
  313.             else if (item.SnoItem.Code.Contains("T9")) text += ": T9";
  314.             else if (item.SnoItem.Code.Contains("T8")) text += ": T8";
  315.             else if (item.SnoItem.Code.Contains("T7")) text += ": T7";
  316.             else if (item.SnoItem.Code.Contains("T6")) text += ": T6";
  317.             else if (item.SnoItem.Code.Contains("T5")) text += ": T5";
  318.             else if (item.SnoItem.Code.Contains("T4")) text += ": T4";
  319.             else if (item.SnoItem.Code.Contains("T3")) text += ": T3";
  320.             else if (item.SnoItem.Code.Contains("T2")) text += ": T2";
  321.             else if (item.SnoItem.Code.Contains("T1")) text += ": T1";
  322.  
  323.             if (item.SnoItem.Code.Contains("Torment13")) text += ": T13";
  324.             else if (item.SnoItem.Code.Contains("Torment12")) text += ": T12";
  325.             else if (item.SnoItem.Code.Contains("Torment11")) text += ": T11";
  326.             else if (item.SnoItem.Code.Contains("Torment10")) text += ": T10";
  327.             else if (item.SnoItem.Code.Contains("Torment9")) text += ": T9";
  328.             else if (item.SnoItem.Code.Contains("Torment8")) text += ": T8";
  329.             else if (item.SnoItem.Code.Contains("Torment7")) text += ": T7";
  330.             else if (item.SnoItem.Code.Contains("Torment6")) text += ": T6";
  331.             else if (item.SnoItem.Code.Contains("Torment5")) text += ": T5";
  332.             else if (item.SnoItem.Code.Contains("Torment4")) text += ": T4";
  333.             else if (item.SnoItem.Code.Contains("Torment3")) text += ": T3";
  334.             else if (item.SnoItem.Code.Contains("Torment2")) text += ": T2";
  335.             else if (item.SnoItem.Code.Contains("Torment1")) text += ": T1";
  336.  
  337.             if (text != null)
  338.             {
  339.                 var textLayout = HoradricCacheFont.GetTextLayout(text);
  340.                 HoradricCacheFont.DrawText(textLayout, rect.Right - rv / 20.0f - textLayout.Metrics.Width, rect.Bottom - rv / 70.0f - textLayout.Metrics.Height);
  341.             }
  342.         }
  343.  
  344.         bool checkArmorySets(IItem item)
  345.         {
  346.             for (int i = 0; i < Hud.Game.Me.ArmorySets.Length; ++i)
  347.             {
  348.                 var set = Hud.Game.Me.ArmorySets[i];
  349.                 if (set.ContainsItem(item))
  350.                 {
  351.                     return true;
  352.                 }
  353.             }
  354.             return false;
  355.         }
  356.  
  357.         public const string MAINSTAT_DEX = "DEX";
  358.         public const string MAINSTAT_INT = "INT";
  359.         public const string MAINSTAT_STR = "STR";
  360.         public const string MAINSTAT_NONE = "---";
  361.         public const string NAME_DEX = "Dexterity_Item";
  362.         public const string NAME_INT = "Intelligence_Item";
  363.         public const string NAME_STR = "Strength_Item";
  364.  
  365.         static string GetMainStatName(IItem item)
  366.         {
  367.             if (item != null && item.Perfections != null)
  368.             {
  369.                 foreach (IItemPerfection perfection in item.Perfections)
  370.                 {
  371.                     string code = perfection.Attribute.Code;
  372.                     if (code == NAME_DEX) return MAINSTAT_DEX;
  373.                     if (code == NAME_INT) return MAINSTAT_INT;
  374.                     if (code == NAME_STR) return MAINSTAT_STR;
  375.                 }
  376.             }
  377.             return MAINSTAT_NONE;
  378.         }
  379.  
  380.         public class ImportantItem
  381.         {
  382.             public readonly string Name;
  383.             public readonly string MainStat;
  384.  
  385.             public ImportantItem(string name, string mainStat)
  386.             {
  387.                 Name = name;
  388.                 MainStat = mainStat;
  389.             }
  390.         }
  391.  
  392.         static ImportantItem important(string name)
  393.         {
  394.             return new ImportantItem(name, MAINSTAT_NONE);
  395.         }
  396.         static ImportantItem DEX_ITEM(string name)
  397.         {
  398.             return new ImportantItem(name, MAINSTAT_DEX);
  399.         }
  400.         static ImportantItem INT_ITEM(string name)
  401.         {
  402.             return new ImportantItem(name, MAINSTAT_INT);
  403.         }
  404.         static ImportantItem STR_ITEM(string name)
  405.         {
  406.             return new ImportantItem(name, MAINSTAT_STR);
  407.         }
  408.  
  409.         public static string[] Follower = new string[]
  410.         {
  411.             // These important items have "shield" marker in place on star!
  412.             "Thunderfury, Blessed Blade of the Windseeker",
  413.             "Eun-jang-do",
  414.             "Freeze of Deflection",
  415.             "Defender of Westmarch",
  416.             "Lidless Wall",
  417.             "The Ess of Johan",
  418.             "Overwhelming Desire",
  419.             "Wyrdward",
  420.             "Oculus Ring",
  421.             "Justice Lantern",
  422.             "Enchanting Favor",
  423.         };
  424.  
  425.         public static ImportantItem[] Important = new ImportantItem[]
  426.         {
  427.             important("Ring of Royal Grandeur"),    // Reduces the number of items needed for set bonuses by 1 (to a minimum of 2)
  428.             important("Unity"),                     // All damage taken is split between wearers of this item
  429.             // Barbarian HotA
  430.             STR_ITEM("Immortal King's Triumph"),
  431.             STR_ITEM("Immortal King's Eternal Reign"),
  432.             STR_ITEM("Immortal King's Irons"),
  433.             STR_ITEM("Immortal King's Tribal Binding"),
  434.             STR_ITEM("Immortal King's Stature"),
  435.             STR_ITEM("Immortal King's Stride"),
  436.             STR_ITEM("Fury of the Ancients"),
  437.             STR_ITEM("Bracers of the First Men"),
  438.             STR_ITEM("Magefist"),
  439.             STR_ITEM("The Traveler's Pledge"),
  440.             STR_ITEM("The Compass Rose"),
  441.             STR_ITEM("Convention of Elements"),
  442.             STR_ITEM("Little Rogue"),
  443.             STR_ITEM("The Slanderer"),
  444.  
  445.             // Follower - Templar
  446.             // See: https://www.icy-veins.com/d3/follower-skills-and-gearing-patch-2-6-1
  447.             STR_ITEM("Thunderfury, Blessed Blade of the Windseeker"),
  448.             STR_ITEM("Eun-jang-do"),
  449.             STR_ITEM("Freeze of Deflection"),
  450.             STR_ITEM("Defender of Westmarch"),
  451.             STR_ITEM("Lidless Wall"),
  452.             STR_ITEM("The Ess of Johan"),
  453.             STR_ITEM("Overwhelming Desire"),
  454.             STR_ITEM("Wyrdward"),
  455.             STR_ITEM("Oculus Ring"),
  456.             STR_ITEM("Justice Lantern"),
  457.             STR_ITEM("Enchanting Favor"),
  458.             /*
  459.             // Speedrun items
  460.             important("Goldwrap"),                  // On gold pickup: Gain armor for 5 seconds equal to the amount picked up
  461.             important("Goldskin"),                  // +100% Extra Gold, Chance for enemies to drop gold when you hit them
  462.             important("Custerian Wristguards"),     // Picking up gold grants experience
  463.             important("Gladiator Gauntlets"),       // After earning a massacre bonus, gold rains from sky
  464.             important("Kymbo's Gold"),              // +75–100% Extra Gold, Picking up gold heals you for an amount equal to the gold that was picked up
  465.             // Monk - Inna Exploding Palm
  466.             DEX_ITEM("Lefebvre's Soliloquy"),
  467.             DEX_ITEM("Bindings of the Lesser Gods"),
  468.             DEX_ITEM("Gungdo Gear"),
  469.             DEX_ITEM("The Crudest Boots"),
  470.             DEX_ITEM("The Fist of Az'Turrasq"),
  471.             // Wizard
  472.             INT_ITEM("Hergbrash's Binding"),
  473.             INT_ITEM("Ancient Parthan Defenders"),
  474.             INT_ITEM("Deathwish"),
  475.             INT_ITEM("Etched Sigil"),
  476.             */
  477.         };
  478.  
  479.         public static string[] Cube = new string[]
  480.         {
  481.             "Ring of Royal Grandeur",
  482.             "Unity",
  483.             // Barbarian HotA
  484.             "The Gavel of Judgment",
  485.             "Magefist", "Aquila Cuirass",
  486.             "Band of Might", "Unity",
  487.             /*
  488.             // Demon Hunter
  489.             "Aquila Cuirass",
  490.             // Witch Doctor
  491.             "The Grin Reaper",
  492.             "Quetzalcoatl",
  493.             "Staff of Chiroptera",
  494.             // Wizard
  495.             "The Grand Vizier",
  496.             "Nilfur's Boast",
  497.             "Halo of Arlyse",
  498.             */
  499.         };
  500.     }
  501. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement