SHARE
TWEET

TimeLeftSkillBar

RNNCode Dec 5th, 2019 (edited) 231 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using Turbo.Plugins.Default;
  2. using System;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using SharpDX;
  6.  
  7. namespace Turbo.Plugins.RNN
  8. {
  9.     public class TimeLeftSkillBar : BasePlugin, IInGameTopPainter
  10.     {
  11.         public Dictionary<uint,uint> ReplaceSno { get; set; }      
  12.         public Dictionary<uint,int> FixedIndex { get; set; }
  13.         public List<uint> ExcludeAll { get; set; }     
  14.         public Dictionary<uint,List<int>> ExcludeThis { get; set; }
  15.         public IFont TimeLeftFont { get; set; }
  16.        
  17.         public TimeLeftSkillBar()
  18.         {
  19.             Enabled = true;
  20.         }
  21.  
  22.         public override void Load(IController hud)
  23.         {
  24.             base.Load(hud);
  25.             Order = 31001;
  26.  
  27.             TimeLeftFont  = Hud.Render.CreateFont("arial", 8, 255, 0, 255, 0, true, false, 255, 0, 0, 0, true);
  28.            
  29.             ReplaceSno = new Dictionary<uint,uint>             
  30.             {          
  31.                 {375049, 375050},   // Mantra Salvación        (Monk)
  32.                 {375082, 375083},   // Mantra Reprensión   (Monk)
  33.                 {373143, 373154},   // Mantra Curación     (Monk)
  34.                 {375088, 375089},   // Mantra Convicción   (Monk)
  35.                 {362102, 362118},   // Aliado Místico      (Monk)
  36.                
  37.                 {342281, 342284},   // Ley Valor        (Crus)
  38.                 {342280, 342286},   // Ley Justicia     (Crus)
  39.                 {342279, 342299},   // Ley Esperanza    (Crus)             
  40.             };
  41.            
  42.             FixedIndex = new Dictionary<uint,int>           // Default Skill Index. Por defecto se muestran el primer indice con timeleft > 0 , aquí se puede fijar un indice concreto para la habilidad
  43.             {                      
  44.                 {130738, 3},    // Marcado Para Morir (DH)             
  45.                            
  46.                 { 79528, 0},    // Tolerancia Dolor (Barb)
  47.                 { 96296, 9},    // Torbellino       (Barb)
  48.  
  49.                 {462255, 3},    // Parasitar (Necro)
  50.                
  51.                 {317076, 6},    // Santuario Interior   (Monk)
  52.                
  53.                 {375050, 1},    // Mantra Salvación        (Monk)
  54.                 {375083, 1},    // Mantra Reprensión   (Monk)
  55.                 {373154, 1},    // Mantra Curación     (Monk)
  56.                 {375089, 2},    // Mantra Convicción   (Monk)
  57.  
  58.                 {342284, 4},    // Ley Valor        (Crus)
  59.                 {342286, 4},    // Ley Justicia     (Crus)
  60.                 {342299, 4},    // Ley Esperanza    (Crus) 
  61.                 {325216, 0},    // Justicia         (Crus) //  o excluir 7
  62.                 {286510, 1},    // Fulminar         (Crus) //  o excluir 14
  63.                 {239042, 4},    // Ataque de barrido(Crus) //  o excluir 0
  64.                 {266951, 2},    // Escudo Bendito   (Crus) //  o excluir 7             
  65.                 {291804, 0},    // Piel Férrea     (Crus) //  o excluir 3     
  66.  
  67.                 {134872, 2},    // Arconte      (Wiz)
  68.                
  69.                 {117402, 4},    // Trance Vudú         (WD) // o excluir 1,3,2
  70.                 {108506, 3},    // Rafaga de espiritus  (WD) // o excluir el 1
  71.             };
  72.                
  73.             ExcludeAll = new List<uint>  // Ignore Skill index (all)
  74.             {
  75.                  93395, // Rayo de Hielo    (Wiz)  // o excluir 6
  76.                   1765, // Electrocutar     (Wiz)  // o excluir 1
  77.                  91549, // Desintegrar      (Wiz)  // o excluir 10
  78.                 134456, // Rafaga           (Wiz)  // o excluir 2,8,9
  79.                
  80.                 462089,     //Mago esqueletico (Necro)
  81.                
  82.                  77649,     // Multishot        (DH)
  83.                 129216,     // Abrojos          (DH)
  84.                 131325,     // Flecha Elemental (DH)
  85.                 129217,     // Centinela        (DH)
  86.                
  87.                 362102,     // Aliado Místico   (Monk)            
  88.                 362118,     // Aliado Místico R (Monk)
  89.                  95940,     // Puños del trueno (Monk)
  90.                 121442,     // Vuelo del Dragón (Monk)
  91.                
  92.                 266766,     // Martillo Bendito (Crus)
  93.                 273941,     // Consagración        (Crus), index 0 y 8  pero no parecen útiles   
  94.  
  95.                 105963,     // Murciélagos     (WD) o excluir index 4
  96.             };
  97.            
  98.             ExcludeThis = new Dictionary<uint,List<int>>    // Ignore skill Index (list)   
  99.             {                          
  100.                 {460757, new List<int>{5} },    // Devorar          (Necro)  
  101.                 {453563, new List<int>{8} },    // Abosorver sangre (Necro)
  102.                            
  103.                 {159169, new List<int>{2} },    // Arrollar         (Barb) ( active index = 0 , 1 )
  104.                
  105.                 { 97110, new List<int>{0,2} }// Senda cien puños    (Monk) ( active index = 1 y 4 )
  106.                 {312736, new List<int>{0} },    // embestida        (monk) ( active index = 3 ,2 , 4)
  107.             };                     
  108.         }
  109.  
  110.         public void TimeLeftDraw( ActionKey key , double TimeLeftSec )
  111.         {
  112.             var ui = Hud.Render.GetPlayerSkillUiElement(key);
  113.             var rect = new RectangleF((float)Math.Round(ui.Rectangle.X) + 0.5f, (float)Math.Round(ui.Rectangle.Y) + 0.5f, (float)Math.Round(ui.Rectangle.Width), (float)Math.Round(ui.Rectangle.Height));
  114.             string text = string.Empty;
  115.             if (TimeLeftSec < 1.0f)
  116.             {
  117.                 text = String.Format("{0:N1}",  TimeLeftSec );
  118.             }
  119.             else
  120.             {
  121.                 TimeLeftSec =  (int) (TimeLeftSec + 0.80);  // Redondeará a X si es menor  a X.20
  122.                 text = (TimeLeftSec < 60)? String.Format("{0:0}", TimeLeftSec ) : String.Format("{0:0}:{1:00}", (int) (TimeLeftSec / 60) ,  TimeLeftSec % 60 ) ;
  123.             }
  124.             var textLayout = TimeLeftFont.GetTextLayout(text) ;
  125.             TimeLeftFont.DrawText(textLayout, rect.X + ((rect.Width - (float)Math.Ceiling(textLayout.Metrics.Width))/2), rect.Y + (((rect.Height / 2.5f) - textLayout.Metrics.Height)/2));                 
  126.         }  
  127.        
  128.         public void PaintTopInGame(ClipState clipState)
  129.         {
  130.             if (Hud.Render.UiHidden)   return;
  131.             if (clipState != ClipState.BeforeClip)   return;
  132.             if ((Hud.Game.MapMode == MapMode.WaypointMap) || (Hud.Game.MapMode == MapMode.ActMap) || (Hud.Game.MapMode == MapMode.Map))  return;
  133.            
  134.             foreach (var skill in Hud.Game.Me.Powers.CurrentSkills)
  135.             {  
  136.                 IBuff buff = null ;
  137.                 if (ReplaceSno.TryGetValue(skill.CurrentSnoPower.Sno, out var sno))
  138.                 {
  139.                     buff = Hud.Game.Me.Powers.AllBuffs.FirstOrDefault(b => b.SnoPower.Sno == sno );        
  140.                 }
  141.                 else { buff = skill.Buff; }
  142.                 if (buff == null) continue;            
  143.                 if (buff.Active)                   
  144.                 {
  145.                     if (FixedIndex.TryGetValue(buff.SnoPower.Sno, out var index))  // Por si queremos fijar el índice para determinadas habilidades.
  146.                     {
  147.                         if (buff.TimeLeftSeconds[index] > 0)
  148.                         {
  149.                             TimeLeftDraw( skill.Key, buff.TimeLeftSeconds[index]);     
  150.                         }
  151.                     }
  152.                     else  if (!ExcludeAll.Contains(buff.SnoPower.Sno))  // Habilidades para las que no se mostrará ningún timeleft , salvo si se prefijó
  153.                     {      
  154.                         bool skip = ExcludeThis.ContainsKey(buff.SnoPower.Sno) ? true:false;
  155.                         for (int i = 0; i < buff.TimeLeftSeconds.Length ;i++)
  156.                         {
  157.                             if (buff.TimeLeftSeconds[i] > 0)
  158.                             {
  159.                                 if (skip && ExcludeThis[buff.SnoPower.Sno].Contains(i)) continue;   // Para excluir determinados indices en las comparaciones                      
  160.                                 TimeLeftDraw( skill.Key, buff.TimeLeftSeconds[i] );    
  161.                                 break;     
  162.                             }
  163.                         }
  164.                     }                      
  165.                 }  
  166.             }
  167.         }
  168.     }
  169. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top