Advertisement
Hekili

Untitled

May 27th, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.69 KB | None | 0 0
  1.  
  2.  
  3.  
  4. local now = GetTime()
  5. local current = 30
  6.  
  7. local state = Hekili.s
  8. state.reset()
  9. state.applyBuff( "breath_of_sindragosa" )
  10.  
  11. local rpEvents = {
  12.    mainhand = {
  13.       last = now - 1,
  14.       interval = 2.6,
  15.       delta = function () return state.talent.runic_attenuation.enabled and 1 or 0 end,
  16.    },
  17.    offhand = {
  18.       last = now - 2,
  19.       interval = 2.6,
  20.       delta = function () return state.talent.runic_attenuation.enabled and 1 or 0 end,
  21.    },
  22.    breath = {
  23.       aura = 'breath_of_sindragosa',
  24.       last = function () return state.query_time + floor( state.query_time - state.buff.breath_of_sindragosa.applied ) end,
  25.       interval = 1,
  26.       delta = function () return state.buff.breath_of_sindragosa.up and -15 or 0 end,
  27.       stop = function ( amt ) return amt < 15 end,
  28.    }
  29. }
  30.  
  31.  
  32. local events = {}
  33.  
  34. local function esort( a, b )
  35.    return a.next < b.next
  36. end
  37.  
  38. local function timeToResource( amt )
  39.    
  40.    if current > amt then return 0 end
  41.    
  42.    -- Wipe old information from our working table.
  43.    for i, event in ipairs( events ) do
  44.       table.wipe( event )
  45.    end
  46.    local count = 0
  47.    
  48.    -- Load current values
  49.    for k, v in pairs( rpEvents ) do
  50.      
  51.       local delta = v.delta()
  52.      
  53.       if delta ~= 0 and ( not v.aura or state.aura[ v.aura ].up ) then
  54.          print(k)
  55.          count = count + 1
  56.          events[ count ] = events[ count ] or {}
  57.          events[ count ].last = type( v.last ) == 'function' and v.last() or v.last
  58.          events[ count ].interval = type( v.interval ) == 'function' and v.interval() or v.interval
  59.          
  60.          events[ count ].next = events[ count ].last + events[ count ].interval
  61.          events[ count ].delta = delta
  62.          events[ count ].type = k
  63.          events[ count ].stop = v.stop
  64.       end
  65.    end
  66.    
  67.    if #events == 0 then print( "e0" );return 3600 end
  68.    
  69.    table.sort( events, esort )
  70.    
  71.    local max_iter = 60
  72.    local max_time = 60
  73.    
  74.    local iter = 0
  75.    local time = 0
  76.    
  77.    while( iter < max_iter and time - state.query_time < max_time ) do
  78.       local e = events[1]
  79.      
  80.       if e.next - state.query_time > max_time then
  81.          return 3600
  82.       end
  83.      
  84.       if e.stop and e.stop( current ) then
  85.          table.remove( events, 1 )
  86.       else
  87.          time = e.next
  88.          iter = iter + 1
  89.          current = current + e.delta
  90.          
  91.          print( iter, e.type, e.next, current )
  92.          
  93.          if current >= amt then
  94.             return time - state.query_time
  95.          end
  96.          
  97.          e.next = e.next + e.interval
  98.       end
  99.      
  100.       table.sort( events, esort )
  101.      
  102.    end
  103.    
  104.    return 3600
  105. end
  106.  
  107.  
  108. print( timeToResource( 40 ) )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement