Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // PercentCDR.cs "$Revision: 2592 $" "$Date: 2019-09-23 19:59:38 +0300 (ma, 23 syys 2019) $"
- // https://www.ownedcore.com/forums/diablo-3/turbohud/turbohud-community-plugins/796632-cdr-rcr-percent-plugin.html
- // https://pastebin.com/3s40U47n
- using System;
- using System.Globalization;
- using System.Linq;
- using SharpDX;
- using Turbo.Plugins.Default;
- namespace Turbo.Plugins.JarJar.DefaultUI
- {
- public class PercentCDR : BasePlugin, IInGameTopPainter
- {
- public bool ShowCooldownReduction { get; set; } = true;
- public bool ShowCooldownReductionItems { get; set; } = true;
- public bool ShowResourceCostReduction { get; set; } = true;
- public bool ShowResourceCostReductionItems { get; set; } = true;
- public IFont LabelHeader { get; set; }
- public IFont LabelCDR { get; set; }
- public IFont PerfectCDR { get; set; }
- public IFont LabelRCR { get; set; }
- public IFont PerfectRCR { get; set; }
- public IFont CanNotEnchantFont { get; set; }
- public float RcrOffset = 15f; // Works with tahoma 6 pt.
- public string FormatCdrRcr { get; set; } = "CDR {0:0.00} % RCR {1:0.00} %";
- public string FormatCdr { get; set; } = "CDR {0:0.00} %";
- public string FormatCdrItem { get; set; } = "{0:0}";
- public string FormatRcr { get; set; } = "RCR {0:0.00} %";
- public string FormatRcrItem { get; set; } = "{0:0}";
- public string EnchantMoreMarker { get; set; } = "+";
- public string CanNotEnchantMarker { get; set; } = "0";
- public float InventoryHeaderRatioX { get; set; } = 0.08f;
- public float InventoryHeaderRatioY { get; set; } = 0.12f;
- private float rv;
- public PercentCDR() { Enabled = true; Order = 100; }
- public override void Load(IController hud)
- {
- base.Load(hud);
- Color textColor;
- textColor = Color.White;
- LabelHeader = Hud.Render.CreateFont("tahoma", 6, 255, textColor.R, textColor.G, textColor.B, true, false, 255, 0, 0, 0, true);
- textColor = Color.White;
- LabelCDR = Hud.Render.CreateFont("tahoma", 6, 255, textColor.R, textColor.G, textColor.B, true, false, 255, 0, 0, 0, true);
- textColor = Color.LawnGreen;
- PerfectCDR = Hud.Render.CreateFont("tahoma", 6, 255, textColor.R, textColor.G, textColor.B, true, false, 255, 0, 0, 0, true);
- textColor = Color.White;
- LabelRCR = Hud.Render.CreateFont("tahoma", 6, 255, textColor.R, textColor.G, textColor.B, true, false, 255, 0, 0, 0, true);
- textColor = Color.LawnGreen;
- PerfectRCR = Hud.Render.CreateFont("tahoma", 6, 255, textColor.R, textColor.G, textColor.B, true, false, 255, 0, 0, 0, true);
- textColor = Color.Firebrick;
- CanNotEnchantFont = Hud.Render.CreateFont("tahoma", 6, 255, textColor.R, textColor.G, textColor.B, true, false, 255, 0, 0, 0, true);
- }
- public void PaintTopInGame(ClipState clipState)
- {
- if (clipState != ClipState.Inventory) return;
- if (!Hud.Game.IsInTown) return;
- var uiInv = Hud.Inventory.InventoryMainUiElement;
- if (!uiInv.Visible) return;
- var player = Hud.Game.Me;
- rv = 32.0f / 600.0f * Hud.Window.Size.Height;
- if (ShowCooldownReductionItems || ShowResourceCostReductionItems)
- {
- var equippedItems = Hud.Game.Items.Where(x => x.Location >= ItemLocation.Head && x.Location <= ItemLocation.Neck);
- foreach (var item in equippedItems)
- {
- var rect = Hud.Inventory.GetItemRect(item);
- if (rect == System.Drawing.RectangleF.Empty)
- continue;
- var cdrItem = (item.Location >= ItemLocation.RightHand && item.Location <= ItemLocation.Waist) || item.Location == ItemLocation.Shoulders ||
- (item.Location >= ItemLocation.LeftRing && item.Location <= ItemLocation.Neck);
- var code = item.SnoItem.Code;
- var rcrItem = !(code == "belt" || code == "boots" || code == "bracers" || code == "chestarmor" || code == "helm" || code == "pants");
- if (cdrItem || rcrItem)
- {
- handleItem(item, cdrItem, rcrItem, rect);
- }
- }
- }
- string labelText;
- if (ShowCooldownReduction && ShowResourceCostReduction)
- {
- labelText = string.Format(CultureInfo.InstalledUICulture, FormatCdrRcr, player.Stats.CooldownReduction * 100f, player.Stats.ResourceCostReduction * 100f);
- }
- else if (ShowCooldownReduction)
- {
- labelText = string.Format(CultureInfo.InstalledUICulture, FormatCdr, player.Stats.CooldownReduction * 100f);
- }
- else if (ShowResourceCostReduction)
- {
- labelText = string.Format(CultureInfo.InstalledUICulture, FormatRcr, player.Stats.ResourceCostReduction * 100f);
- }
- else
- {
- return;
- }
- var xCoord = uiInv.Rectangle.Left + (uiInv.Rectangle.Width * InventoryHeaderRatioX);
- var yCoord = uiInv.Rectangle.Top + (uiInv.Rectangle.Height * InventoryHeaderRatioY);
- LabelHeader.DrawText(labelText, xCoord, yCoord);
- }
- private void handleItem(IItem item, bool cdrItem, bool rcrItem, System.Drawing.RectangleF rect)
- {
- string cdrText = null;
- var cdrFont = LabelCDR;
- if (cdrItem)
- {
- var needsMore = true;
- var perfection = item.Perfections?.FirstOrDefault(x => x.Attribute.Code == "Power_Cooldown_Reduction_Percent_All");
- if (perfection != null)
- {
- var isWeapon = item.SnoItem.HasGroupCode("weapons");
- var cdr = Math.Round(perfection.Cur * 100, 3);
- var cdrTest = Math.Round(perfection.Cur * 100, 0);
- needsMore = isWeapon ? (cdrTest < 10.0) : (cdrTest < 8.0);
- cdrText = string.Format(CultureInfo.InvariantCulture, FormatCdrItem, cdr);
- if (needsMore)
- {
- var enhancedItemMod = GetEnhancedItemMod(item);
- var isEnchanted = IsEnchantedFor(enhancedItemMod, perfection.Attribute.Code);
- if (isEnchanted)
- {
- cdrText += EnchantMoreMarker;
- }
- }
- else
- {
- cdrFont = PerfectCDR;
- }
- }
- else
- {
- var enhancedItemMod = GetEnhancedItemMod(item);
- if (enhancedItemMod == null)
- {
- cdrText = EnchantMoreMarker;
- }
- else
- {
- cdrText = CanNotEnchantMarker;
- cdrFont = CanNotEnchantFont;
- }
- }
- }
- string rcrText = null;
- var rcrFont = LabelRCR;
- if (rcrItem)
- {
- var perfection = item.Perfections?.FirstOrDefault(x => x.Attribute.Code == "Resource_Cost_Reduction_Percent_All");
- if (perfection != null)
- {
- var isYang = item.SnoItem.NameEnglish == "Yang's Recurve"; // AFAIK the only exception!
- var rcr = Math.Round(perfection.Cur * 100, 3);
- var rcrTest = Math.Round(perfection.Cur * 100, 0);
- var needsMore = isYang ? (rcrTest < 50.0) : (rcrTest < 8.0);
- rcrText = string.Format(CultureInfo.InvariantCulture, FormatRcrItem, rcr);
- if (needsMore)
- {
- var enhancedItemMod = GetEnhancedItemMod(item);
- var isEnchanted = IsEnchantedFor(enhancedItemMod, perfection.Attribute.Code);
- if (isEnchanted)
- {
- rcrText += EnchantMoreMarker;
- }
- }
- else
- {
- rcrFont = PerfectRCR;
- }
- }
- else
- {
- var enhancedItemMod = GetEnhancedItemMod(item);
- if (enhancedItemMod == null)
- {
- rcrText = EnchantMoreMarker;
- }
- else
- {
- rcrText = CanNotEnchantMarker;
- rcrFont = CanNotEnchantFont;
- }
- }
- }
- // Top right corner.
- if (cdrText != null)
- {
- var layout = cdrFont.GetTextLayout(cdrText);
- cdrFont.DrawText(layout, rect.Right + (rv / 20.0f), rect.Top + (layout.Metrics.Height / 6f));
- if (RcrOffset == 0f)
- {
- RcrOffset = 1.05f * layout.Metrics.Height;
- Hud.Debug("RcrOffset " + RcrOffset.ToString());
- }
- }
- if (rcrText != null)
- {
- var layout = rcrFont.GetTextLayout(rcrText);
- rcrFont.DrawText(layout, rect.Right + (rv / 20.0f), rect.Top + (layout.Metrics.Height / 6f) + RcrOffset);
- }
- }
- private static bool IsEnchantedFor(ISnoItemMod itemMod, string code)
- {
- return itemMod != null && itemMod.Attribute.Code == code;
- }
- private static ISnoItemMod GetEnhancedItemMod(IItem item)
- {
- var affix = item.EnchantedAffixNew != 0 && item.Affixes != null ? item.Affixes.FirstOrDefault(x => x.Id == item.EnchantedAffixNew) : null;
- return affix != null && affix.Mods.Length > 0 ? affix.Mods[0] : null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement