HaKache

ExtendedOculusPlugin

Aug 27th, 2019 (edited)
1,126
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ExtendedOculusPlugin (Original by Zy)
  2. // Ground Decorators & Timers for Oculus Ring circles.
  3. // In Party GR, shows the closest Oculus to the Trashkiller/Bosskiller and if he's inside Oculus.
  4. // In Solo GR & Outside GR, shows additional decorator when you're standing inside Oculus.
  5.  
  6. using System.Linq;
  7. using Turbo.Plugins.Default;
  8.  
  9. namespace Turbo.Plugins.Extended.Actors
  10. {
  11.     public class ExtendedOculusPlugin : BasePlugin, ICustomizer, IInGameWorldPainter
  12.     {
  13.     public WorldDecoratorCollection InsideMarkerDecorator { get; set; }
  14.     public WorldDecoratorCollection OculusDecorator { get; set; }
  15.     public WorldDecoratorCollection CloseOculusDecorator { get; set; }
  16.     public WorldDecoratorCollection InsideOculusDecorator { get; set; }
  17.  
  18.     public float CircleRadius { get; set; }
  19.     public float InsideRadius { get; set; }
  20.     public bool EnableDpsMarker { get; set; }
  21.     public bool EnableInsideMarker { get; set; }
  22.  
  23.         public ExtendedOculusPlugin()
  24.         {
  25.             Enabled = true;
  26.         EnableDpsMarker = true; // Closest & Inside Decorators for Meta DPS in Party GR
  27.         EnableInsideMarker = true;  // Additional Circle Decorator when you are in it
  28.         }
  29.  
  30.         public void Customize()
  31.         {
  32.     // Disable Default OculusPlugin
  33.     Hud.GetPlugin<OculusPlugin>().Enabled = false;
  34.         }
  35.  
  36.         public override void Load(IController hud)
  37.         {
  38.         base.Load(hud);
  39.  
  40.         CircleRadius = 10.0f; // Change the radius of the circle decorator
  41.         InsideRadius = 10.0f; // Change the radius of the additional "inside marker"
  42.  
  43.         InsideMarkerDecorator = new WorldDecoratorCollection(
  44.                 new GroundCircleDecorator(Hud)
  45.                 {
  46.                     Brush = Hud.Render.CreateBrush(255, 0, 130, 0, -2, SharpDX.Direct2D1.DashStyle.Dash),
  47.                     Radius = InsideRadius,
  48.                 }
  49.                 );
  50.  
  51.             OculusDecorator = new WorldDecoratorCollection(
  52.                 new GroundCircleDecorator(Hud)
  53.                 {
  54.                     Brush = Hud.Render.CreateBrush(255, 128, 205, 0, -2),
  55.                     Radius = CircleRadius,
  56.                 },
  57.                 new GroundLabelDecorator(Hud)
  58.                 {
  59.                     CountDownFrom = 7,
  60.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 96, 255, 96, true, false, 128, 0, 0, 0, true),
  61.                 },
  62.                 new GroundTimerDecorator(Hud)
  63.                 {
  64.                     CountDownFrom = 7,
  65.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  66.                     BackgroundBrushFill = Hud.Render.CreateBrush(200, 0, 192, 0, 0),
  67.                     Radius = 30,
  68.                 }
  69.                 );
  70.  
  71.             CloseOculusDecorator = new WorldDecoratorCollection(
  72.                 new GroundCircleDecorator(Hud)
  73.                 {
  74.                     Brush = Hud.Render.CreateBrush(255, 0, 100, 200, -2),
  75.                     Radius = CircleRadius,
  76.                 },
  77.                 new GroundLabelDecorator(Hud)
  78.                 {
  79.                     CountDownFrom = 7,
  80.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 96, 255, 96, true, false, 128, 0, 0, 0, true),
  81.                 },
  82.                 new GroundTimerDecorator(Hud)
  83.                 {
  84.                     CountDownFrom = 7,
  85.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  86.                     BackgroundBrushFill = Hud.Render.CreateBrush(200, 0, 192, 0, 0),
  87.                     Radius = 30,
  88.                 }
  89.                 );
  90.  
  91.             InsideOculusDecorator = new WorldDecoratorCollection(
  92.                 new GroundCircleDecorator(Hud)
  93.                 {
  94.                     Brush = Hud.Render.CreateBrush(255, 220, 0, 0, -2),
  95.                     Radius = CircleRadius,
  96.                 },
  97.                 new GroundLabelDecorator(Hud)
  98.                 {
  99.                     CountDownFrom = 7,
  100.                     TextFont = Hud.Render.CreateFont("tahoma", 11, 255, 96, 255, 96, true, false, 128, 0, 0, 0, true),
  101.                 },
  102.                 new GroundTimerDecorator(Hud)
  103.                 {
  104.                     CountDownFrom = 7,
  105.                     BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
  106.                     BackgroundBrushFill = Hud.Render.CreateBrush(200, 0, 192, 0, 0),
  107.                     Radius = 30,
  108.                 }
  109.                 );
  110.  
  111.         }
  112.  
  113.         public void PaintWorld(WorldLayer layer)
  114.         {
  115.             if (Hud.Game.IsInTown) return;
  116.  
  117.             bool BossAlive = (Hud.Game.AliveMonsters.Count(m => m.SnoMonster.Priority == MonsterPriority.boss) > 0);
  118.  
  119.             IWorldCoordinate DpsPosition = Hud.Game.Players.First().FloorCoordinate;
  120.         bool DpsHasOculus = Hud.Game.Players.First().Powers.BuffIsActive(Hud.Sno.SnoPowers.OculusRing.Sno) ? true : false;
  121.             int DpsIngame = 0;
  122.  
  123.             foreach (var player in Hud.Game.Players)
  124.             {
  125.  
  126.     if (DpsIngame == 0) {
  127.  
  128.         if (!BossAlive) {
  129.                 if (player.Offense.AreaDamageBonus >= 110)
  130.                 {
  131.                     DpsPosition = player.FloorCoordinate;
  132.             DpsHasOculus = player.Powers.BuffIsActive(Hud.Sno.SnoPowers.OculusRing.Sno) ? true : false;
  133.                     DpsIngame++;
  134.                 }
  135.                 if (player.Powers.BuffIsActive(Hud.Sno.SnoPowers.TheBarber.Sno) && player.Offense.AreaDamageBonus < 110)
  136.                 {
  137.                     DpsPosition = player.FloorCoordinate;
  138.             DpsHasOculus = player.Powers.BuffIsActive(Hud.Sno.SnoPowers.OculusRing.Sno) ? true : false;
  139.                     DpsIngame++;
  140.                 }
  141.                 }
  142.  
  143.         if (BossAlive) {
  144.                 if (player.Powers.BuffIsActive(Hud.Sno.SnoPowers.BaneOfTheStrickenPrimary.Sno))
  145.                 {
  146.                     DpsPosition = player.FloorCoordinate;
  147.             DpsHasOculus = player.Powers.BuffIsActive(Hud.Sno.SnoPowers.OculusRing.Sno) ? true : false;
  148.                     DpsIngame++;
  149.                 }
  150.                 }
  151.  
  152.         }
  153.     }
  154.  
  155.             float mindist = float.MaxValue;
  156.         bool Inside = false;
  157.  
  158.             var actors = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, Hud.Sno.SnoPowers.OculusRing.Sno) == 1).OrderBy(d => d.CentralXyDistanceToMe);
  159.  
  160.         if (EnableInsideMarker && Hud.Game.Me.Powers.BuffIsActive(402461, 2)) { Inside = true; }
  161.  
  162.             if (actors.Count() > 0) // Null check
  163.             {
  164.                 var closest = actors.First();
  165.  
  166.  
  167.                 foreach (var actor in actors)
  168.                 {
  169.                     float dist = actor.FloorCoordinate.XYDistanceTo(DpsPosition);
  170.                     if (dist < mindist) { closest = actor; mindist = dist; }
  171.                 }
  172.  
  173.  
  174.                 foreach (var actor in actors)
  175.                 {
  176.  
  177.  
  178.         // In Party GR : Draw DPS closest and DPS inside decorators if there is a DPS identified.
  179.  
  180.                     if (Hud.Game.SpecialArea == SpecialArea.GreaterRift && EnableDpsMarker && Hud.Game.NumberOfPlayersInGame > 1)
  181.                     {
  182.             if (DpsIngame == 1) {
  183.                         if (actor == closest)
  184.                         {
  185.                             if (mindist <= 13.3f && DpsHasOculus)
  186.                             { InsideOculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null); }
  187.                             if (mindist > 13.3f && actors.Count() > 0)
  188.                             { CloseOculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null); }
  189.                         }
  190.                         else
  191.                         {
  192.                 OculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  193.             }
  194.             }
  195.  
  196.             else
  197.             {
  198.             OculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  199.             if (Inside) { InsideMarkerDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  200.             }
  201.  
  202.                     }
  203.  
  204.         // In Party GR : Draw base decorators if EnableDpsMarker option disabled.
  205.  
  206.                     if (Hud.Game.SpecialArea == SpecialArea.GreaterRift && !EnableDpsMarker && Hud.Game.NumberOfPlayersInGame > 1)
  207.                     {
  208.             OculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  209.             if (Inside) { InsideMarkerDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  210.             }
  211.  
  212.         // In Solo GR : Draw base decorators.
  213.  
  214.                     if (Hud.Game.SpecialArea == SpecialArea.GreaterRift && Hud.Game.NumberOfPlayersInGame == 1)
  215.                     {
  216.             OculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  217.             if (Inside) { InsideMarkerDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  218.             }
  219.  
  220.         // Outside GR : Draw base decorators.
  221.  
  222.                     if (Hud.Game.SpecialArea != SpecialArea.GreaterRift)
  223.                     {
  224.             OculusDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
  225.             if (Inside) { InsideMarkerDecorator.Paint(layer, actor, actor.FloorCoordinate, null); Inside = false; }
  226.             }
  227.  
  228.                 }
  229.             }
  230.         }
  231.     }
  232. }
RAW Paste Data