RNNCode

TrialsOfTempestsIcon

Jul 29th, 2020 (edited)
423
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Versión adaptada a Movable plugins system: https://www.ownedcore.com/forums/showthread.php?t=908809&p=4231469#post4231469
  2. using Turbo.Plugins.Default;  
  3. using System;
  4. using System.Linq;    
  5. using System.Collections.Generic;
  6. using System.Threading;
  7. using Turbo.Plugins.Razor.Movable;
  8. using System.Drawing;
  9.  
  10. namespace Turbo.Plugins.RNN
  11. {        
  12.     public class TrialsOfTempestsIcon : BasePlugin, ICustomizer, INewAreaHandler, IAfterCollectHandler, IMovable    //, IInGameTopPainter
  13.     {      
  14.         private uint[] Textures { get; set; } = new uint[7] { 3405442230, 2639019912, 4122635698, 1541236666, 3513867492, 928374825, 569405584};  // 0,1, 2-Fuego, 3-Frío, 4-Veneno, 5-Físico, 6-Rayos
  15.         private IBrush[] Brushes { get; set; }
  16.         private ITexture TextureBG { get; set; }   
  17.         private long[] timers { get; set; } = new long[] {0,0,0,0};
  18.         private float SizeIconWidth  { get; set; }
  19.         private float SizeIconHeight  { get; set; }
  20.         private float _SizeIconWidth  { get; set; }
  21.         private float _SizeIconHeight  { get; set; }       
  22.  
  23.         private bool[] valid { get; set; } = new bool[] {false,false,false,false};
  24.         private long[] tvalid { get; set; } = new long[] {0,0,0,0};
  25.         private int MyIndex { get; set; } = -1;
  26.         private int TotalPlayers { get; set; } = 0;
  27.                
  28.         private SharpDX.DirectWrite.TextLayout layout { get; set; } = null;  
  29.         private IFont FontDefault { get; set; }
  30.         private IFont FontStacks1 { get; set; }
  31.         private IFont FontStacksY { get; set; }
  32.         private IFont FontStacksG { get; set; }
  33.         private IFont FontCounter { get; set; }
  34.         private IFont FontCounter10 { get; set; }
  35.        
  36.        
  37.         private IFont FontTimeLeft { get; set; }
  38.         private IBrush BrushBorder { get; set; }
  39.         private IBrush BrushMin { get; set; }
  40.        
  41.         public bool PortraitMe { get; set; }
  42.         public bool PortraitOthers { get; set; }
  43.         public float OffsetX  { get; set; }
  44.         public float OffsetY  { get; set; }
  45.         public float OffsetXPortrait  { get; set; }
  46.         public float OffsetYPortrait  { get; set; }
  47.  
  48.         public float Opacity { get; set; }     
  49.         public float SizeMultiplier  { get; set; }
  50.        
  51.        
  52.         public bool OnlyGR { get; set; }
  53.         public bool OnlyMe { get; set; }
  54.         public bool VisibleFar { get; set; }
  55.  
  56.         public bool SoundEnabledProc { get; set; }
  57.         public bool SoundEnabledLast10 { get; set; }
  58.         public string FileSoundProc { get; set; }
  59.         public string FileSoundLast10 { get; set; }
  60.        
  61.         private int TicksLast10 { get; set; } = 0;
  62.        
  63.         public TrialsOfTempestsIcon()
  64.         {
  65.             Enabled = true;    
  66.         }
  67.            
  68.         public override void Load(IController hud)
  69.         {
  70.             base.Load(hud);
  71.             Order = 30001;
  72.  
  73.             OnlyGR = false;
  74.             OnlyMe = false;
  75.             VisibleFar = true;      // Keep showing the icon of the players who are far away: the data will freeze, at this distance the values ​​are not updated
  76.            
  77.             PortraitMe = true;      // Show icon near portrait or next to our character (for Me)
  78.             PortraitOthers = true;  // Show icon near portrait or next to our character (for Others Players)
  79.             OffsetX  = +0.020f;     // To modify the position of the icon. Reference point: character  
  80.             OffsetY  = -0.020f;
  81.             OffsetXPortrait  = -0.009f; // To modify the position of the icon. Reference point: portrait   
  82.             OffsetYPortrait  = +0.042f;
  83.            
  84.             Opacity = 0.85f;
  85.             SizeMultiplier = 0.75f;
  86.  
  87.             SoundEnabledProc = false;
  88.             SoundEnabledLast10 = false;
  89.             FileSoundProc = "notification_5.wav";  // File to be played when a player proc . It must be in the Sounds\ folder
  90.             FileSoundLast10 = "notification_6.wav";  // File to be played 10 seconds before an effect occurs. It must be in the Sounds\ folder
  91.            
  92.             TextureBG = Hud.Texture.GetTexture(3144819863);
  93.             _SizeIconWidth = TextureBG.Width * Hud.Window.Size.Height/1200.0f * 0.90f;
  94.             _SizeIconHeight = TextureBG.Height * Hud.Window.Size.Height/1200.0f;
  95.        
  96.             var tr = 1.0f;
  97.             BrushBorder = Hud.Render.CreateBrush( 255, 255, 255, 255, tr);
  98.             Brushes = new IBrush[7] // 0,1, 2-Fuego, 3-Frío, 4-Veneno, 5-Físico, 6-Rayos         
  99.             {
  100.                 BrushBorder,
  101.                 BrushBorder,
  102.                 Hud.Render.CreateBrush( 255, 255, 0, 0, tr),
  103.                 BrushBorder,
  104.                 Hud.Render.CreateBrush( 255, 0, 255, 0, tr),
  105.                 Hud.Render.CreateBrush( 255, 80, 80, 80, tr),
  106.                 Hud.Render.CreateBrush( 255, 0, 128, 255, tr),                     
  107.             };
  108.             BrushMin = Hud.Render.CreateBrush( 255, 0, 255, 0, 2);
  109.         }
  110.            
  111.         public void Customize()
  112.         {      
  113.             SizeIconWidth = _SizeIconWidth * SizeMultiplier;
  114.             SizeIconHeight = _SizeIconHeight * SizeMultiplier;
  115.             ResizeFonts(SizeMultiplier);
  116.         }
  117.        
  118.         public void ResizeFonts(float r)
  119.         {
  120.             FontStacks1 = Hud.Render.CreateFont("tahoma", 8f * r, 255, 255, 255, 255, false, false, 255, 0, 0, 0, true);
  121.             FontStacksY = Hud.Render.CreateFont("tahoma", 8f * r, 255, 255, 255, 0, false, false, 255, 0, 0, 0, true);
  122.             FontStacksG = Hud.Render.CreateFont("tahoma", 8f * r, 255, 195, 195, 195, false, false, 255, 0, 0, 0, true);
  123.             FontCounter = Hud.Render.CreateFont("tahoma", 9f * r, 255, 255, 255, 255, false, false, 255, 0, 0, 0, true);
  124.             FontCounter10 = Hud.Render.CreateFont("tahoma", 9f * r, 255, 0, 255, 0, false, false, 255, 0, 0, 0, true);
  125.             FontTimeLeft = Hud.Render.CreateFont("tahoma", 8f * r, 255, 0, 255, 0, false, false, 255, 0, 0, 0, true);              
  126.         }
  127.  
  128.         public void OnNewArea(bool newGame, ISnoArea area)
  129.         {
  130.             if (newGame || (MyIndex != Hud.Game.Me.Index) )
  131.             {
  132.                 MyIndex = Hud.Game.Me.Index;
  133.                 TotalPlayers = Hud.Game.NumberOfPlayersInGame;             
  134.                 for (var i = 0; i < 4; i++) { valid[i] = false; tvalid[i] = 0; }
  135.                 TicksLast10 = Hud.Game.CurrentGameTick;
  136.             }
  137.         }
  138.        
  139.         public void Play_Sound(string Sonido)
  140.         {
  141.             var playSonido = Hud.Sound.LoadSoundPlayer(Sonido);            
  142.             ThreadPool.QueueUserWorkItem(state =>
  143.             {
  144.                 try  { playSonido.PlaySync(); }
  145.                 catch (Exception)  {   }
  146.             }   );
  147.         }
  148.  
  149.         public void AfterCollect()  
  150.         {
  151.             if (!Hud.Game.IsInGame) return;    
  152.             if (TotalPlayers != Hud.Game.NumberOfPlayersInGame)
  153.             {
  154.                 TotalPlayers = Hud.Game.NumberOfPlayersInGame;
  155.                 for (var i = 0; i < 4; i++) { valid[i] = false; tvalid[i] = 0; }
  156.             }              
  157.         }
  158.  
  159.         public void OnRegister(MovableController mover)
  160.         {
  161.             //if (Hud.Game.Me.Powers.BuffIsActive(484426))  // Jugando en temporada
  162.             {
  163.                 RectangleF r = new RectangleF(
  164.                     (PortraitMe)?Hud.Game.Me.PortraitUiElement.Rectangle.X + Hud.Window.Size.Width * OffsetXPortrait:Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().X + Hud.Window.Size.Width * OffsetX ,
  165.                     (PortraitMe)?Hud.Game.Me.PortraitUiElement.Rectangle.Y + Hud.Window.Size.Height * OffsetYPortrait:Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().Y + Hud.Window.Size.Height * OffsetY,
  166.                     SizeIconWidth,
  167.                     SizeIconHeight
  168.                 );
  169.                 mover.CreateArea(
  170.                     this,
  171.                     "Self", //area name
  172.                     r,     //position + dimensions
  173.                     true, //enabled at start?
  174.                     true, //save changes to config file?
  175.                     ResizeMode.On, //resizable?
  176.                     ClipState.BeforeClip
  177.                 ); 
  178.             }          
  179.         }
  180.        
  181.         public void PaintArea(MovableController mover, MovableArea area, float deltaX = 0, float deltaY = 0)
  182.         {
  183.             if (!Hud.Game.IsInGame) return;
  184.             if (OnlyGR && !Hud.Game.Me.InGreaterRift) return;
  185.             if (Hud.Game.Me.Powers.BuffIsActive(484426))  // Jugando en temporada
  186.             {
  187.                 var players = Hud.Game.Players.Where(p => (p.Powers.GetBuff(484426) != null) && (p.IsMe || (!OnlyMe && (p.HasValidActor || VisibleFar))) )
  188.                                 .OrderBy(p => tvalid[p.Index]);
  189.                 bool Search = true;
  190.                 foreach(var player in players)
  191.                 {
  192.                     var buff = player.Powers.GetBuff(484426);
  193.                     float x, y;
  194.                     if (player.IsMe)
  195.                     {
  196.                         x = area.Rectangle.X + deltaX;  y = area.Rectangle.Y + deltaY;
  197.                         if (SizeIconWidth != area.Rectangle.Width || SizeIconHeight != area.Rectangle.Height)
  198.                         {
  199.                             //if (SizeIconWidth != area.Rectangle.Width && SizeIconHeight != area.Rectangle.Height)
  200.                             {                          
  201.                                 var w = area.Rectangle.Width / _SizeIconWidth;
  202.                                 var h = area.Rectangle.Height / _SizeIconHeight;
  203.                                 var rs = (float) Math.Round((w < h)?w:h, 3);
  204.                                 ResizeFonts(rs);
  205.                             }                                                      
  206.                             SizeIconWidth = area.Rectangle.Width; SizeIconHeight = area.Rectangle.Height;
  207.                             //Hud.Sound.Speak("Trials");
  208.                         }                  
  209.                     }
  210.                     else
  211.                     {
  212.                         if (PortraitOthers)
  213.                         {
  214.                             x = player.PortraitUiElement.Rectangle.X + Hud.Window.Size.Width * OffsetXPortrait; y = player.PortraitUiElement.Rectangle.Y + Hud.Window.Size.Height * OffsetYPortrait;   
  215.                         }
  216.                         else
  217.                         {
  218.                             x = player.FloorCoordinate.ToScreenCoordinate().X + Hud.Window.Size.Width * OffsetX; y = player.FloorCoordinate.ToScreenCoordinate().Y + Hud.Window.Size.Height * OffsetY;
  219.                         }  
  220.                     }
  221.                    
  222.                     TextureBG.Draw(x, y, SizeIconWidth, SizeIconHeight, Opacity);
  223.                     (player.HasValidActor?Hud.Texture.BuffFrameTexture:Hud.Texture.DebuffFrameTexture).Draw(x, y, SizeIconWidth, SizeIconHeight, Opacity);
  224.                    
  225.                     double t = 0 ;
  226.                    
  227.                     if (player.HasValidActor)
  228.                     {
  229.                         t = buff.TimeLeftSeconds[1];                       
  230.                         if (valid[player.Index] == false)
  231.                         {
  232.                             valid[player.Index] = true;
  233.                             tvalid[player.Index] = Hud.Game.CurrentRealTimeMilliseconds - (long) (buff.TimeElapsedSeconds[1] * 1000d);
  234.                         }
  235.                        
  236.                         layout = FontStacks1.GetTextLayout(buff.IconCounts[8].ToString());                     
  237.                         FontStacks1.DrawText(layout, x + ((SizeIconWidth - (float)Math.Ceiling(layout.Metrics.Width))/1.17f), y + ((SizeIconHeight - (float)Math.Ceiling(layout.Metrics.Height))/1.1f) );
  238.  
  239.                         FontDefault = FontStacksG;                     
  240.                         for(int i = 2; i < 7; i++ )
  241.                         {
  242.                             var ti = buff.TimeLeftSeconds[i];
  243.                             if (ti > 0)
  244.                             {                          
  245.                                 layout = FontTimeLeft.GetTextLayout(ti.ToString( (ti < 1)? "F1" : "F0") );
  246.                                 FontTimeLeft.DrawText(layout, x + ((SizeIconWidth - (float)Math.Ceiling(layout.Metrics.Width))/7.0f), y + ((SizeIconHeight - (float)Math.Ceiling(layout.Metrics.Height))/1.1f) );
  247.                                 Hud.Texture.GetTexture(Textures[i]).Draw(x + 0.08f * SizeIconWidth, y + 0.08f * SizeIconHeight, SizeIconHeight * 0.28f, SizeIconHeight * 0.28f, 1.0f);
  248.                                 Brushes[i].DrawRectangle(x + 0.08f * SizeIconWidth, y + 0.08f * SizeIconHeight, SizeIconHeight * 0.28f, SizeIconHeight * 0.28f);
  249.                                 FontDefault = FontStacksY;
  250.                                 if ((buff.TimeElapsedSeconds[i] < 1) && (Hud.Game.CurrentRealTimeMilliseconds > timers[player.Index]))
  251.                                 {
  252.                                     tvalid[player.Index] = Hud.Game.CurrentRealTimeMilliseconds - (long) (buff.TimeElapsedSeconds[1] * 1000d);
  253.                                     timers[player.Index] = (long) ti * 1000 + Hud.Game.CurrentRealTimeMilliseconds;
  254.                                     if (SoundEnabledProc && Hud.Game.Me.InGreaterRiftRank > 0)   
  255.                                     {                                      
  256.                                         Play_Sound(FileSoundProc);
  257.                                     }                                  
  258.                                 }                              
  259.                                 break;
  260.                             }
  261.                         }
  262.                         layout = FontDefault.GetTextLayout(buff.IconCounts[9].ToString());                     
  263.                         FontDefault.DrawText(layout, x + ((SizeIconWidth - (float)Math.Ceiling(layout.Metrics.Width))/1.17f), y + ((SizeIconHeight - (float)Math.Ceiling(layout.Metrics.Height))/13.0f) );
  264.                            
  265.                     }
  266.                     else
  267.                     {
  268.                         if (valid[player.Index] == true) { valid[player.Index] = false; }
  269.                         if (tvalid[player.Index] == 0) continue;
  270.                         //t = 90 - ( ((Hud.Game.CurrentRealTimeMilliseconds - tvalid[player.Index]) / 1000d) % 90 );   // Replaced to avoid possible problem with OrderBy(p => tvalid[p.Index])
  271.                         if ((Hud.Game.CurrentRealTimeMilliseconds - tvalid[player.Index]) > 90000)
  272.                             tvalid[player.Index] = tvalid[player.Index] + 90000 * (int) ((Hud.Game.CurrentRealTimeMilliseconds - tvalid[player.Index]) /90000);
  273.                         t = 90 - ((Hud.Game.CurrentRealTimeMilliseconds - tvalid[player.Index]) / 1000d);                                          
  274.                     }
  275.  
  276.                     if (t < 10)  
  277.                     {
  278.                         FontDefault = FontCounter10;
  279.                         if (Search && player.HasValidActor) // use "if (Search)" to consider the far players for the green frame and the sound (last 10s)
  280.                         {
  281.                             Search = false;
  282.                             if (Hud.Game.NumberOfPlayersInGame > 1)  BrushMin.DrawRectangle(x + 1,y + 1,SizeIconWidth -2,SizeIconHeight -2);
  283.                             if (SoundEnabledLast10 && t > 9 && TicksLast10 < Hud.Game.CurrentGameTick && Hud.Game.Me.InGreaterRiftRank > 0)  // 1s=60 ticks. Highly recommended add check t>(1...9)
  284.                             {
  285.                                 Play_Sound(FileSoundLast10);
  286.                                 TicksLast10 = Hud.Game.CurrentGameTick + (int)(t * 60d);  //
  287.                             }
  288.                         }                      
  289.                     }  
  290.                     else { FontDefault = FontCounter; }
  291.                    
  292.                     if (t < 1.0f) //layout = FontCounter.GetTextLayout(t.ToString( (t < 1)? "F1" : "F0") );
  293.                     {
  294.                         layout = FontDefault.GetTextLayout(String.Format("{0:N1}", t));    
  295.                     }
  296.                     else
  297.                     {
  298.                         layout = FontDefault.GetTextLayout((t < 60)? String.Format("{0:0}", t ) : String.Format("{0:0}:{1:00}", (int) (t/60),  t%60 )) ;
  299.                     }      
  300.                     FontDefault.DrawText(layout, x + ((SizeIconWidth - (float)Math.Ceiling(layout.Metrics.Width))/2.0f), y + ((SizeIconHeight - (float)Math.Ceiling(layout.Metrics.Height))/2.0f) );                   
  301.                 }
  302.             }      
  303.         }          
  304.     }
  305. }
RAW Paste Data