RNNCode

TriunesWillPlugin

Aug 24th, 2019
187
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Mod TriunesWillPlugin (Added Oculus) , Original : https://www.ownedcore.com/forums/diablo-3/turbohud/turbohud-community-plugins/797748-int-extended-triuneswillplugin.html
  2. // Ground Decorators & Timers for Triune's Will circles from Season 18 buff.
  3.  
  4. using Turbo.Plugins.Default;
  5. using System.Linq;
  6.  
  7. namespace Turbo.Plugins.Extended.Actors
  8. {
  9.     public class TriunesWillPlugin : BasePlugin, IInGameWorldPainter
  10.     {
  11.         public WorldDecoratorCollection LoveDecorator { get; set; }
  12.         public WorldDecoratorCollection DeterminationDecorator { get; set; }
  13.         public WorldDecoratorCollection CreationDecorator { get; set; }
  14.         public WorldDecoratorCollection OculusDecorator { get; set; }
  15.        
  16.         public WorldDecoratorCollection LoveInsideDecorator { get; set; }
  17.         public WorldDecoratorCollection DeterminationInsideDecorator { get; set; }
  18.         public WorldDecoratorCollection CreationInsideDecorator { get; set; }
  19.         public WorldDecoratorCollection OculusInsideDecorator { get; set; }
  20.  
  21.         public bool EnableLove { get; set; }
  22.         public bool EnableDetermination { get; set; }
  23.         public bool EnableCreation { get; set; }
  24.         public bool EnableInsideMarker { get; set; }
  25.        
  26.         private float _CircleRadius { get; set; } = 0f;
  27.         private float _InsideRadius { get; set; } = 0f;
  28.        
  29.        
  30.         public IFont DescriptionText1 { get; set; }
  31.         public IFont DescriptionText2 { get; set; }
  32.         public bool EnableDescription { get; set; }
  33.        
  34.         public float CircleRadius
  35.         {
  36.             get { return _CircleRadius; }  
  37.             set
  38.             {
  39.                 if (value == _CircleRadius || value < 9f)   // We will not do anything if the user assigns an invalid value, or if this value matches the current one
  40.                     return;
  41.  
  42.                 _CircleRadius = value;      // We update the value
  43.                 InitDecoratorsCircle();     // Redefine Decorators
  44.             }
  45.         }
  46.         public float InsideRadius
  47.         {
  48.             get { return _InsideRadius; }
  49.             set
  50.             {
  51.                 if (value == _InsideRadius || value < 1f)
  52.                     return;
  53.  
  54.                 _InsideRadius = value;
  55.                 InitDecoratorsInside();
  56.             }
  57.         }
  58.        
  59.         private bool _ReplaceOculusOriginal { get; set; } = false;
  60.         public bool ReplaceOculusOriginal
  61.         {
  62.             get { return _ReplaceOculusOriginal; }
  63.             set
  64.             {
  65.                 _ReplaceOculusOriginal = value;
  66.                 if (_ReplaceOculusOriginal) Hud.TogglePlugin<OculusPlugin>(false);
  67.             }
  68.         }
  69.  
  70.         public TriunesWillPlugin()
  71.         {
  72.             Enabled = true;        
  73.         }
  74.        
  75.         public override void Load(IController hud)
  76.         {
  77.             base.Load(hud);
  78.        
  79.             EnableLove = true;      // Damage Circle
  80.             EnableCreation = true;  // CDR Circle
  81.             EnableDetermination = true; // RCR Circle          
  82.             EnableInsideMarker = true;  // Additional Circle Decorator when you are in it
  83.  
  84.             CircleRadius = 10f; //minimum 9f
  85.             InsideRadius = 10f; //minimum 1f
  86.            
  87.             ReplaceOculusOriginal = false;
  88.            
  89.             EnableDescription = true;
  90.            
  91.             DescriptionText1 = Hud.Render.CreateFont("tahoma", 10f, 255,255,255,255, false, false, 128, 0, 0, 0, true) ;
  92.             DescriptionText2 = Hud.Render.CreateFont("tahoma", 7f, 255,255,255,255, true, false, 128, 0, 0, 0, true) ;
  93.         }
  94.                
  95.         private void InitDecoratorsCircle()
  96.         {
  97.             LoveDecorator = new WorldDecoratorCollection(
  98.                 new GroundCircleDecorator(Hud)
  99.                 {
  100.                     Brush = Hud.Render.CreateBrush(255, 255, 0, 128, -2),
  101.                     Radius = CircleRadius,
  102.                 },
  103.                 new GroundLabelDecorator(Hud)
  104.                 {
  105.                     CountDownFrom = 7,
  106.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 255, 96, 255, true, false, 128, 0, 0, 0, true),
  107.                 },
  108.                 new GroundTimerDecorator(Hud)
  109.                 {
  110.                     CountDownFrom = 7,
  111.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  112.                     BackgroundBrushFill = Hud.Render.CreateBrush(164, 192, 0, 0, 0),
  113.                     Radius = 30,
  114.                 },
  115.                 new MapShapeDecorator(Hud)
  116.                 {
  117.                     ShapePainter = new CircleShapePainter(Hud),
  118.                     Brush = Hud.Render.CreateBrush(255, 255, 0, 128, -1f),
  119.                     ShadowBrush = Hud.Render.CreateBrush(48, 0, 0, 0, 1),
  120.                     Radius = CircleRadius - 1,
  121.                 }
  122.             );
  123.  
  124.             CreationDecorator = new WorldDecoratorCollection(
  125.                 new GroundCircleDecorator(Hud)
  126.                 {
  127.                     Brush = Hud.Render.CreateBrush(255, 64, 200, 144, -2),
  128.                     Radius = CircleRadius,
  129.                 },
  130.                 new GroundLabelDecorator(Hud)
  131.                 {
  132.                     CountDownFrom = 7,
  133.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 96, 230, 196, true, false, 128, 0, 0, 0, true),
  134.                 },
  135.                 new GroundTimerDecorator(Hud)
  136.                 {
  137.                     CountDownFrom = 7,
  138.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  139.                     BackgroundBrushFill = Hud.Render.CreateBrush(164, 0, 192, 192, 0),
  140.                     Radius = 30,
  141.                 },
  142.                 new MapShapeDecorator(Hud)
  143.                 {
  144.                     ShapePainter = new CircleShapePainter(Hud),
  145.                     Brush = Hud.Render.CreateBrush(255, 64, 200, 144, -1f),
  146.                     ShadowBrush = Hud.Render.CreateBrush(48, 0, 0, 0, 1),
  147.                     Radius = CircleRadius - 1,
  148.                 }
  149.             );
  150.  
  151.             DeterminationDecorator = new WorldDecoratorCollection(
  152.                 new GroundCircleDecorator(Hud)
  153.                 {
  154.                     Brush = Hud.Render.CreateBrush(255, 164, 150, 32, -2), // Dark Blue 0, 64, 255
  155.                     Radius = CircleRadius,
  156.                 },
  157.                 new GroundLabelDecorator(Hud)
  158.                 {
  159.                     CountDownFrom = 7,
  160.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 200, 200, 96, true, false, 128, 0, 0, 0, true), // Dark Blue 96, 96, 255
  161.                 },
  162.                 new GroundTimerDecorator(Hud)
  163.                 {
  164.                     CountDownFrom = 7,
  165.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  166.                     BackgroundBrushFill = Hud.Render.CreateBrush(164, 164, 164, 0, 0), // Dark Blue 0, 0, 192
  167.                     Radius = 30,
  168.                 },
  169.                 new MapShapeDecorator(Hud)
  170.                 {
  171.                     ShapePainter = new CircleShapePainter(Hud),
  172.                     Brush = Hud.Render.CreateBrush(255, 164, 150, 32, -1f),
  173.                     ShadowBrush = Hud.Render.CreateBrush(48, 0, 0, 0, 1),
  174.                     Radius = CircleRadius - 1,
  175.                 }
  176.             );
  177.             OculusDecorator = new WorldDecoratorCollection(
  178.                 new GroundCircleDecorator(Hud)
  179.                 {
  180.                     Brush = Hud.Render.CreateBrush(255, 128, 255, 0, -2),
  181.                     Radius = CircleRadius,
  182.                 },
  183.                 new GroundLabelDecorator(Hud)
  184.                 {
  185.                     CountDownFrom = 7,
  186.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 96, 255, 96, true, false, 128, 0, 0, 0, true),
  187.                 },
  188.                 new GroundTimerDecorator(Hud)
  189.                 {
  190.                     CountDownFrom = 7,
  191.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  192.                     BackgroundBrushFill = Hud.Render.CreateBrush(200, 0, 192, 0, 0),
  193.                     Radius = 30,
  194.                 },
  195.                 new MapShapeDecorator(Hud)
  196.                 {
  197.                     ShapePainter = new CircleShapePainter(Hud),
  198.                     Brush = Hud.Render.CreateBrush(255, 128, 255, 0, -1f),
  199.                     ShadowBrush = Hud.Render.CreateBrush(48, 0, 0, 0, 1),
  200.                     Radius = CircleRadius - 1,
  201.                 }
  202.             );         
  203.         }
  204.         private void InitDecoratorsInside()
  205.         {
  206.             LoveInsideDecorator = new WorldDecoratorCollection(
  207.                 new GroundCircleDecorator(Hud)
  208.                 {
  209.                     Brush = Hud.Render.CreateBrush(255, 150, 0, 0, -2, SharpDX.Direct2D1.DashStyle.Dash),
  210.                     Radius = InsideRadius,
  211.                 }
  212.             );
  213.      
  214.             CreationInsideDecorator = new WorldDecoratorCollection(
  215.                 new GroundCircleDecorator(Hud)
  216.                 {
  217.                     Brush = Hud.Render.CreateBrush(255, 0, 80, 150, -2, SharpDX.Direct2D1.DashStyle.Dash),
  218.                     Radius = InsideRadius,
  219.                 }
  220.             );
  221.      
  222.             DeterminationInsideDecorator = new WorldDecoratorCollection(
  223.                 new GroundCircleDecorator(Hud)
  224.                 {
  225.                     Brush = Hud.Render.CreateBrush(255, 120, 80, 0, -2, SharpDX.Direct2D1.DashStyle.Dash), // Dark Blue 0, 64, 255
  226.                     Radius = InsideRadius,
  227.                 }
  228.             );
  229.             OculusInsideDecorator = new WorldDecoratorCollection(
  230.                 new GroundCircleDecorator(Hud)
  231.                 {
  232.                     Brush = Hud.Render.CreateBrush(255, 0, 140, 0, -2, SharpDX.Direct2D1.DashStyle.Dash),
  233.                     Radius = InsideRadius,
  234.                 }
  235.             );         
  236.         }  
  237.        
  238.         public void PaintWorld(WorldLayer layer)
  239.         {
  240.             if (layer != WorldLayer.Ground) return;
  241.             if (Hud.Game.IsInTown) return;
  242.                
  243.             bool Inside = false;
  244.             float CoordX, CoordY;
  245.            
  246.             if (EnableLove)
  247.             {
  248.                 var love = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, 483606) == 1).OrderBy(d => d.CentralXyDistanceToMe);
  249.                 if (EnableInsideMarker && Hud.Game.Me.Powers.BuffIsActive(483606, 2))   {   Inside = true;  }
  250.                 foreach (var actor in love)
  251.                 {
  252.                     LoveDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  253.                     LoveDecorator.Paint(WorldLayer.Map, actor, actor.FloorCoordinate, null);
  254.                     if (EnableDescription)
  255.                     {
  256.                         DescriptionText1.DrawText(DescriptionText1.GetTextLayout("DMG"),actor.FloorCoordinate.ToScreenCoordinate().X - 15 ,actor.FloorCoordinate.ToScreenCoordinate().Y + 30);
  257.                         Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out CoordX, out CoordY);
  258.                         DescriptionText2.DrawText(DescriptionText2.GetTextLayout("D"),CoordX - 5 , CoordY - 8);
  259.                     }                  
  260.                     if (Inside) { LoveInsideDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  261.                 }
  262.             }
  263.  
  264.             if (EnableCreation)
  265.             {
  266.                 var creation = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_7_Visual_Effect_None, 483606) == 1).OrderBy(d => d.CentralXyDistanceToMe);
  267.                 if (EnableInsideMarker && Hud.Game.Me.Powers.BuffIsActive(483606, 8))   {   Inside = true;  }
  268.                 foreach (var actor in creation)
  269.                 {
  270.                     CreationDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  271.                     CreationDecorator.Paint(WorldLayer.Map, actor, actor.FloorCoordinate, null);
  272.                     if (EnableDescription)
  273.                     {
  274.                         DescriptionText1.DrawText(DescriptionText1.GetTextLayout("CDR"),actor.FloorCoordinate.ToScreenCoordinate().X - 15 ,actor.FloorCoordinate.ToScreenCoordinate().Y + 30);
  275.                         Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out CoordX, out CoordY);
  276.                         DescriptionText2.DrawText(DescriptionText2.GetTextLayout("C"),CoordX  - 5 , CoordY - 8 );
  277.                     }                  
  278.                     if (Inside) { CreationInsideDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  279.                 }
  280.             }
  281.  
  282.             if (EnableDetermination)
  283.             {
  284.                 var determination = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_6_Visual_Effect_None, 483606) == 1).OrderBy(d => d.CentralXyDistanceToMe);
  285.                 if (EnableInsideMarker && Hud.Game.Me.Powers.BuffIsActive(483606, 5) )  {   Inside = true;  }
  286.                 foreach (var actor in determination)
  287.                 {
  288.                     DeterminationDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  289.                     DeterminationDecorator.Paint(WorldLayer.Map, actor, actor.FloorCoordinate, null);
  290.                     if (EnableDescription)
  291.                     {
  292.                         DescriptionText1.DrawText(DescriptionText1.GetTextLayout("RSR"),actor.FloorCoordinate.ToScreenCoordinate().X - 15 ,actor.FloorCoordinate.ToScreenCoordinate().Y + 30);
  293.                         Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out CoordX, out CoordY);
  294.                         DescriptionText2.DrawText(DescriptionText2.GetTextLayout("R"),CoordX - 5 , CoordY - 8 );
  295.                     }                  
  296.                     if (Inside) { DeterminationInsideDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }         
  297.                 }
  298.             }
  299.             if (ReplaceOculusOriginal)
  300.             {
  301.                 var actors = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, 402461) == 1).OrderBy(d => d.CentralXyDistanceToMe);
  302.                 if (EnableInsideMarker && Hud.Game.Me.Powers.BuffIsActive(402461, 2))   {   Inside = true;  }
  303.                 foreach (var actor in actors)
  304.                 {
  305.                     OculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  306.                     OculusDecorator.Paint(WorldLayer.Map, actor, actor.FloorCoordinate, null);
  307.                     if (EnableDescription)
  308.                     {
  309.                         DescriptionText1.DrawText(DescriptionText1.GetTextLayout("OCU"),actor.FloorCoordinate.ToScreenCoordinate().X - 15 ,actor.FloorCoordinate.ToScreenCoordinate().Y + 30);
  310.                         Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out CoordX, out CoordY);
  311.                         DescriptionText2.DrawText(DescriptionText2.GetTextLayout("O"),CoordX  - 5 , CoordY - 8 );
  312.                     }                      
  313.                     if (Inside) { OculusInsideDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  314.                 }
  315.             }
  316.         }
  317.     }
  318. }
RAW Paste Data