ak77now

SidasAutoCarryPlugin - Riven

Jun 26th, 2014
3,389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 33.87 KB | None | 0 0
  1. --[[
  2. 4.4.2 Riven
  3.  
  4. This is script based on Sida'Riven , Bilbao & Mr Articuno ,Apple's Riven,
  5. and this: https://github.com/pqmailer/BoL_Scripts/blob/master/Reborn%20Plugins/Riven.lua
  6.  
  7. ]]
  8.  
  9. if myHero.charName ~= "Riven" then return end
  10.  
  11. require 'VPrediction'
  12. require 'SOW'
  13. require "AoE_Skillshot_Position"
  14. require "spellDmg"
  15. --class 'Plugin'
  16.  
  17. -- Constants --
  18. local QREADY, WREADY, EREADY, RREADY = false, false, false, false
  19. local ignite, igniteReady = nil, nil
  20. local ts = nil
  21. local VP = nil
  22. local qOff, wOff, eOff, rOff = 0,0,0,0
  23. local abilitySequence = {1, 2, 3, 1, 1, 4, 1, 3, 1, 3, 4, 3, 3, 2, 2, 4, 2, 2}
  24. local Ranges = { Q = 260 + 100, W = 250, E = 325, R = 880 , AA = 250}
  25. local AnimationCancel =
  26. {
  27.     [1]=function() myHero:MoveTo(mousePos.x,mousePos.z) end, --"Move"
  28.     [2]=function() SendChat('/l') end, --"Laugh"
  29.     [3]=function() SendChat('/d') end, --"Dance"
  30.     [4]=function() SendChat('/t') end, --"Taunt"
  31.     [5]=function() SendChat('/j') end, --"joke"
  32.     [6]=function() end,
  33. }
  34.  
  35. local QREADY, WREADY, EREADY, RREADY= false, false, false, false
  36. local BRKSlot, DFGSlot, HXGSlot, BWCSlot, TMTSlot, RAHSlot, RNDSlot, YGBSlot = nil, nil, nil, nil, nil, nil, nil, nil
  37. local BRKREADY, DFGREADY, HXGREADY, BWCREADY, TMTREADY, RAHREADY, RNDREADY, YGBREADY = false, false, false, false, false, false, false, false
  38.  
  39. -------------
  40. --aq
  41. local QData = {Count = 0, Next = 0, Last = 0}
  42. local RData = {Start = 0, Up = false}
  43. local Passive = {Count = 0, Last = 0}
  44. --local Skills, Keys, Items, Data, Jungle, Helper, MyHero, Minions, Crosshair, Orbwalker = AutoCarry.Helper:GetClasses()
  45.  
  46. --aq
  47.  
  48. local qCount = 0
  49. --local target
  50.  
  51. local   QREADY = (myHero:CanUseSpell(_Q) == READY)
  52. local   WREADY = (myHero:CanUseSpell(_W) == READY)
  53. local   EREADY = (myHero:CanUseSpell(_E) == READY)
  54. local   RREADY = (myHero:CanUseSpell(_R) == READY)
  55.  
  56.  
  57. --[[ Constants ]]--
  58. local qRange, qDelay, qSpeed, qWidth = 500, 0.25, 800, 60
  59.  
  60. local QRadius = 112.5
  61. local WRange = 260
  62. local ERange = 800
  63. local RRange = 900
  64. local BRKid, DFGid, EXECid, YOGHid, RANOid, BWCid, HXGid = 3153, 3128, 3123, 3142, 3143, 3144, 3146
  65. local BRKSlot, DFGSlot, EXECSlot, YOGHSlot, RANOSlot, BWCSlot, HXGSlot = nil, nil, nil, nil, nil, nil, nil
  66. local ts = TargetSelector(TARGET_LOW_HP,ERange+100)
  67.  
  68. --[[Global Vars]]--
  69.     ToInterrupt = {}
  70.     InteruptionSpells = {
  71.         { charName = "FiddleSticks",    spellName = "Crowstorm"},
  72.         { charName = "MissFortune",     spellName = "MissFortuneBulletTime"},
  73.         { charName = "Nunu",            spellName = "AbsoluteZero"},
  74.         { charName = "Caitlyn",         spellName = "CaitlynAceintheHole"},
  75.         { charName = "Katarina",        spellName = "KatarinaR"},
  76.         { charName = "Karthus",         spellName = "FallenOne"},
  77.         { charName = "Malzahar",        spellName = "AlZaharNetherGrasp"},
  78.         { charName = "Galio",           spellName = "GalioIdolOfDurand"},
  79.         { charName = "Darius",          spellName = "DariusExecute"},
  80.         { charName = "MonkeyKing",      spellName = "MonkeyKingSpinToWin"},
  81.         { charName = "Vi",              spellName = "ViR"},
  82.         { charName = "Shen",            spellName = "ShenStandUnited"},
  83.         { charName = "Urgot",           spellName = "UrgotSwap2"},
  84.         { charName = "Pantheon",        spellName = "Pantheon_GrandSkyfall_Jump"},
  85.         { charName = "Lucian",          spellName = "LucianR"},
  86.         { charName = "Braum",           spellName = "BraumR"},
  87.     }
  88.     --[[/Global Vars]]--
  89.  
  90. function PluginOnLoad()
  91.    
  92.     print("<font color = \"#33CCCC\">Riven 4.4.2")
  93.      AutoCarry.PluginMenu = scriptConfig("Riven", "Riven")
  94.     AutoCarry.PluginMenu:addParam("EQ", "EQ Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
  95. --  AutoCarry.PluginMenu:addParam("AQ", "AQ Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
  96.     AutoCarry.PluginMenu:addParam("StunCheck", "Auto W in range", SCRIPT_PARAM_ONOFF, false)
  97.     AutoCarry.PluginMenu:addParam("autoParry", "Auto Parry", SCRIPT_PARAM_ONOFF, true) 
  98. --  AutoCarry.PluginMenu:addParam("fullcombo", "QWE Combo", SCRIPT_PARAM_ONOFF, true)  
  99.     AutoCarry.PluginMenu:addParam("Killsteal", "KS with R2", SCRIPT_PARAM_ONOFF, true)
  100.     AutoCarry.PluginMenu:addParam("KS", "KS with R Combo", SCRIPT_PARAM_ONOFF, true)
  101.     AutoCarry.PluginMenu:addParam("Escape", "Flee to Mouse", SCRIPT_PARAM_ONKEYDOWN, false, string.byte('X'))  
  102.     AutoCarry.PluginMenu:addParam("qMode", "Q Mode", SCRIPT_PARAM_LIST, 1, { "Smart Q", "Mouse Q", "Enemy Q", "Custom Q" })
  103.     AutoCarry.PluginMenu:addParam("cstqrange", "Custom Q Mode range from enemy",SCRIPT_PARAM_SLICE, 0, -100, 200)
  104.     AutoCarry.PluginMenu:addParam("draw", "Draw range", SCRIPT_PARAM_ONOFF, true)
  105.        
  106.  
  107.     initComponents()
  108.     AddInteruptMenu()
  109.    
  110.  
  111.     --_PREDICTION = VPrediction()
  112.     --_SOW = SOW(_PREDICTION)
  113.     --_SOW:RegisterAfterAttackCallback(AfterAttack)
  114.    
  115.    
  116. end
  117.  
  118. function initComponents()
  119.     -- VPrediction Start
  120.     VP = VPrediction()
  121.     Orbwalkeri = SOW(VP)
  122.     -- Target Selector
  123.     ts = TargetSelector(TARGET_LOW_HP,ERange+100)
  124.    
  125.     Menu = scriptConfig("Riven Laneclear & Jungleclear", "RivenBLMA")
  126.    
  127.     Menu:addSubMenu("["..myHero.charName.." - Orbwalker]", "SOWorb")
  128.     Orbwalkeri:LoadToMenu(Menu.SOWorb)
  129.    
  130.     Menu:addSubMenu("["..myHero.charName.." - Laneclear]", "Laneclear")
  131.     Menu.Laneclear:addParam("lclr", "Laneclear Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
  132.     Menu.Laneclear:addParam("useClearW", "Use W in Laneclear", SCRIPT_PARAM_ONOFF, true)
  133.     Menu.Laneclear:addParam("useClearE", "Use E in Laneclear", SCRIPT_PARAM_ONOFF, true)
  134.    
  135.     Menu:addSubMenu("["..myHero.charName.." - Jungleclear]", "Jungleclear")
  136.     Menu.Jungleclear:addParam("jclr", "Jungleclear Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
  137.     Menu.Jungleclear:addParam("useClearW", "Use W in Jungleclear", SCRIPT_PARAM_ONOFF, true)
  138.     Menu.Jungleclear:addParam("useClearE", "Use E in Jungleclear", SCRIPT_PARAM_ONOFF, true)
  139.    
  140.     Menu:addSubMenu("["..myHero.charName.." - Additionals]", "Ads")
  141.     Menu.Ads:addParam("cancel", "Animation Cancel", SCRIPT_PARAM_LIST, 1, { "Move","Laugh","Dance","Taunt","joke","Nothing" })
  142.     AddProcessSpellCallback(function(unit, spell)
  143.         animationCancel(unit,spell)
  144.     end)
  145.  
  146.     ts.name = "Focus"
  147.  
  148.     Skills, Keys, Items, Data, Jungle, Helper, MyHero, Minions, Crosshair, Orbwalker = AutoCarry.Helper:GetClasses()
  149.     enemyMinions = minionManager(MINION_ENEMY, 360, myHero, MINION_SORT_MAXHEALTH_DEC)
  150.     allyMinions = minionManager(MINION_ALLY, 360, myHero, MINION_SORT_MAXHEALTH_DEC)
  151.     jungleMinions = minionManager(MINION_JUNGLE, 360, myHero, MINION_SORT_MAXHEALTH_DEC)
  152. end
  153.  
  154. function PluginOnTick()
  155.  
  156.     if myHero:CanUseSpell(_Q) ~= READY and os.clock() > QData.Last + 1
  157.     then QData.Count = 0
  158.     end
  159.        
  160.     ts:update()
  161.     enemyMinions:update()
  162.     allyMinions:update()
  163.     jungleMinions:update()
  164.     CDHandler()
  165.     AutoFarm()
  166.    
  167.      --ULT--
  168.     DodajUlti()
  169.  
  170.     AutoCarry.SkillsCrosshair.range = 900
  171.    
  172.     DFGSlot, HXGSlot, BWCSlot, SheenSlot, TrinitySlot, LichBaneSlot, BRKSlot, TMTSlot, RAHSlot, RNDSlot, STDSlot = GetInventorySlotItem(3128), GetInventorySlotItem(3146), GetInventorySlotItem(3144), GetInventorySlotItem(3057), GetInventorySlotItem(3078), GetInventorySlotItem(3100), GetInventorySlotItem(3153), GetInventorySlotItem(3077), GetInventorySlotItem(3074), GetInventorySlotItem(3143), GetInventorySlotItem(3131)
  173.     QREADY = (myHero:CanUseSpell(_Q) == READY)
  174.     WREADY = (myHero:CanUseSpell(_W) == READY)
  175.     EREADY = (myHero:CanUseSpell(_E) == READY)
  176.     RREADY = (myHero:CanUseSpell(_R) == READY)
  177.     DFGREADY = (DFGSlot ~= nil and myHero:CanUseSpell(DFGSlot) == READY)
  178.     HXGREADY = (HXGSlot ~= nil and myHero:CanUseSpell(HXGSlot) == READY)
  179.     BWCREADY = (BWCSlot ~= nil and myHero:CanUseSpell(BWCSlot) == READY)
  180.     BRKREADY = (BRKSlot ~= nil and myHero:CanUseSpell(BRKSlot) == READY)
  181.     TMTREADY = (TMTSlot ~= nil and myHero:CanUseSpell(TMTSlot) == READY)
  182.     RAHREADY = (RAHSlot ~= nil and myHero:CanUseSpell(RAHSlot) == READY)
  183.     RNDREADY = (RNDSlot ~= nil and myHero:CanUseSpell(RNDSlot) == READY)
  184.     STDREADY = (STDSlot ~= nil and myHero:CanUseSpell(STDSlot) == READY)
  185.     IREADY = (ignite ~= nil and myHero:CanUseSpell(ignite) == READY)
  186.  
  187.     TiamatSlot = GetInventorySlotItem(3077)
  188.     RavenousHydraSlot = GetInventorySlotItem(3074)
  189.  
  190.         target = AutoCarry.GetAttackTarget()
  191.         local vectorX,y,vectorZ = (Vector(myHero) - Vector(mousePos)):normalized():unpack()
  192.         local satchelDistance = 50
  193.         local posX = myHero.x + (vectorX * satchelDistance)
  194.         local posZ = myHero.z + (vectorZ * satchelDistance)
  195.            
  196.     if Menu.Laneclear.lclr then
  197.         LaneClear()
  198.     end
  199.    
  200.     if Menu.Jungleclear.jclr then
  201.         JungleClear()
  202.     end
  203.  
  204.     if AutoCarry.PluginMenu.Escape then
  205.       Escape()
  206.     end
  207.  
  208.     if  AutoCarry.PluginMenu.StunCheck then
  209.       StunCheck()
  210.     end
  211.  
  212.     if AutoCarry.PluginMenu.EQ then
  213.       EQ()
  214.     end
  215.    
  216.     if AutoCarry.PluginMenu.Killsteal then
  217.     R2()
  218.     end
  219.  
  220.     if AutoCarry.PluginMenu.KS and RREADY then
  221.     KS()
  222.     end
  223.  
  224.     E1()
  225.      --KS
  226.     if myHero:GetSpellData(_R).level ~= 0 then
  227.         for i=1, heroManager.iCount do
  228.             local enemy = heroManager:GetHero(i)
  229.             if enemy.team ~= myHero.team and enemy ~= nil then
  230.                 local PDamage = getDmg("P",enemy,myHero)
  231.                 local ADamage = getDmg("AD",enemy,myHero)
  232.                 local QDamage = getDmg("Q",enemy,myHero)
  233.                 local WDamage = getDmg("W",enemy,myHero)
  234.                 local RDamage = getDmg("R",enemy,myHero)
  235.                 --local F = (ADamage+QDamage+PDamage)*3+RDamage
  236.                 local RF = ((ADamage*1.2)+PDamage+QDamage)*3+RDamage
  237.                     if TargetValid(enemy) then
  238.                     --KS
  239.                    
  240.                     if (ADamage+QDamage+PDamage)*2+ADamage > enemy.health and GetDistance(enemy) < 3000 then
  241.                     PrintFloatText(enemy,0,"EQ combo to Kill")                         
  242.  
  243.                     elseif (ADamage+QDamage+PDamage)*3 > enemy.health and GetDistance(enemy) < 3000 then
  244.                     PrintFloatText(enemy,0,"3AQ to Kill")                  
  245.        
  246.  
  247.                     elseif WDamage+(ADamage+QDamage+PDamage)*3 > enemy.health and GetDistance(enemy) < 3000 then
  248.                     PrintFloatText(enemy,0,"3AQ+W to Kill")                                    
  249.                    
  250.                     elseif RF > enemy.health and GetDistance(enemy) < 3000 then
  251.                     PrintFloatText(enemy,0,"R+3AQ to Kill")                
  252.                     end                
  253.                    
  254.                 end
  255.             end
  256.         end
  257.     end
  258.            
  259.            
  260.     for i=1, heroManager.iCount do
  261.         local enemy = heroManager:GetHero(i)
  262.         if enemy.team ~= myHero.team and enemy ~= nil then 
  263.           if GetDistance(enemy) <= 1200 and not enemy.dead  then
  264.  
  265.           end
  266.         end
  267.     end
  268.  
  269.  
  270.         --QW KS
  271.         for i=1, heroManager.iCount do
  272.             local enemy = heroManager:GetHero(i)
  273.             if enemy.team ~= myHero.team and enemy ~= nil then
  274.                 local PDamage = getDmg("P",enemy,myHero)
  275.                 local ADamage = getDmg("AD",enemy,myHero)          
  276.                 local QDamage = getDmg("Q",enemy,myHero)
  277.                 local WDamage = getDmg("W",enemy,myHero)
  278.                 local RDamage = getDmg("R",enemy,myHero)
  279.                     if TargetValid(enemy) then                                                 
  280.                     if PDamage+ADamage+WDamage > enemy.health and GetDistance(enemy) < WRange then
  281.                     StunCheck()
  282.                     end
  283.                     if WDamage*3  > enemy.health and GetDistance(enemy) < WRange then
  284.                     ItemUsage(target)
  285.                     StunCheck()
  286.                     end                    
  287.  
  288.                     if WDamage+ADamage+PDamage > enemy.health and GetDistance(enemy) < 600 and GetDistance(enemy) > 400 and EREADY and WREADY then                                  
  289.                      CastSpell(_E, enemy.x, enemy.z)
  290.                      ItemUsage(target)
  291.                      StunCheck()
  292.                     end
  293.  
  294.  
  295.                     if WDamage+ADamage+PDamage > enemy.health and GetDistance(enemy) < 600 and GetDistance(enemy) > 400 and EREADY and WREADY then                                  
  296.                      CastSpell(_E, enemy.x, enemy.z)
  297.                      ItemUsage(target)
  298.                      StunCheck()
  299.                     end
  300.  
  301.                     if WDamage*3 > enemy.health and GetDistance(enemy) < 600 and GetDistance(enemy) > 400 and EREADY and WREADY then                                  
  302.                      CastSpell(_E, enemy.x, enemy.z)
  303.                      ItemUsage(target)
  304.                      StunCheck()
  305.                     end                    
  306.                    
  307.                 end
  308.             end
  309.         end    
  310.  
  311.         --AQ combo
  312.         if (AutoCarry.MainMenu.AutoCarry or AutoCarry.MainMenu.MixedMode) then
  313.         for i=1, heroManager.iCount do
  314.         local enemy = heroManager:GetHero(i)
  315.         if enemy.team ~= myHero.team and enemy ~= nil then 
  316.           if not enemy.dead then
  317. --        if GetDistance(enemy) <= qRange and not enemy.dead then        
  318.               AQ()
  319.             end
  320.           end      
  321.  
  322.         end    
  323.         end        
  324.        
  325. end
  326. function E1()
  327.  
  328.  target = AutoCarry.GetAttackTarget()
  329.   if target ~= nil and target.dead == false then
  330.     if not  EREADY and GetDistance(Target) < 700  then
  331.       ItemUsage(target)
  332.     end
  333.   end
  334.  
  335. end
  336.  
  337. function AQ()
  338.  
  339.     local MovePos = Vector(myHero) + 400 * (Vector(mousePos) - Vector(myHero)):normalized()
  340.     local AARange = target and AARange(target)
  341.     local Target = Crosshair:GetTarget()    
  342.     --CastSpell(_Q, mousePos.x,mousePos.z) 
  343.     target = AutoCarry.GetAttackTarget()
  344.     if target ~= nil and target.dead == false then
  345.    
  346.         if ValidTarget(Target) then
  347.        
  348.         local vectorX,y,vectorZ = (Vector(myHero) - Vector(mousePos)):normalized():unpack()
  349.         local satchelDistance = 0.000000000001
  350.         local posX = myHero.x + (vectorX * satchelDistance)
  351.         local posZ = myHero.z + (vectorZ * satchelDistance)
  352.         local CustomX = target.x + AutoCarry.PluginMenu.cstqrange
  353.         local CustomZ = target.z + AutoCarry.PluginMenu.cstqrange
  354.  
  355.        
  356.             if Riventricleavesound() and GetDistance(Target) < 190 and QREADY then
  357.                 myHero:Attack(target)
  358.               --DelayAction(function() myHero:Attack(Target) end, 0.08)
  359.             end
  360.            
  361.        
  362.                 if Orbwalker:IsAfterAttack() and GetTickCount() > QData.Next then
  363. --              if Orbwalker:IsAfterAttack() and GetTickCount() > QData.Next and GetDistance(Target) < qRange then
  364.                 --myHero:MoveTo(posX, posZ)
  365.                 --Orbwalkeri:DisableAttacks()
  366.              
  367.                   if AutoCarry.PluginMenu.qMode == 1 then
  368.                     for i=1, heroManager.iCount do
  369.                         local target = heroManager:GetHero(i)
  370.                         if ValidTarget(target, 350) then
  371.                             if myHero:CanUseSpell(_Q) == READY then        
  372.                             local CastPosition,  HitChance,  Position = VP:GetLineCastPosition(target, qDelay, qWidth, qRange, qSpeed, myHero, false)
  373.                                 Orbwalkeri:DisableAttacks()
  374.                                 CastSpell(_Q, CastPosition.x, CastPosition.z)
  375.                                 SendChat("/d")
  376.                                 DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.18)
  377.                                 Orbwalkeri:EnableAttacks()
  378.                                 DelayAction(function() Orbwalkeri:resetAA() end, 0.07)
  379.                                 --QData.Next =  Orbwalker:GetNextAttackTime() -100
  380.                                 if TargetHaveBuff("riventricleavesoundone", myHero) then
  381.                                 QData.Next =  Orbwalker:GetNextAttackTime() -150     -- modify this number to make your AQ speed faster
  382.                                 end
  383.                                 QData.Next =  Orbwalker:GetNextAttackTime() -320     -- modify this number to make your AQ speed faster                        
  384.                                
  385.                                
  386.                                 DelayAction(function() myHero:Attack(target) end, 0.06)
  387.                                 DelayAction(function() myHero:MoveTo(posX, posZ) end, 0.08)
  388.  
  389.                             end
  390.                         end
  391.                     end                      
  392.                   end
  393.              
  394.                   if AutoCarry.PluginMenu.qMode == 2 then
  395.                     CastSpell(_Q, mousePos.x,mousePos.z)
  396.                     SendChat("/d")
  397.                     DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.2)
  398.                     DelayAction(function() Orbwalkeri:resetAA() end, 0.18)
  399.                     QData.Next =  Orbwalker:GetNextAttackTime()        
  400.                   end  
  401.  
  402.                   if AutoCarry.PluginMenu.qMode == 3 then
  403.                     CastSpell(_Q, Target.x, Target.z)
  404.                     SendChat("/d")
  405.                     DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.2)
  406.                     DelayAction(function() Orbwalkeri:resetAA() end, 0.18)
  407.                     QData.Next =  Orbwalker:GetNextAttackTime()
  408.                   end
  409.  
  410.                   if AutoCarry.PluginMenu.qMode == 4 then
  411.                     CastSpell(_Q, CustomX, CustomZ)
  412.                     SendChat("/d")
  413.                     DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.2)
  414.                     DelayAction(function() Orbwalkeri:resetAA() end, 0.18)
  415.                     QData.Next =  Orbwalker:GetNextAttackTime()
  416.                   end                
  417.                
  418.                 --[[
  419.                 if TargetHaveBuff("riventricleavesoundone", myHero) then
  420.                      QData.Next = Orbwalker:GetNextAttackTime() - 150
  421.                      elseif TargetHaveBuff("riventricleavesoundone", myHero) then                
  422.                      QData.Next = Orbwalker:GetNextAttackTime() + 100
  423.                      elseif TargetHaveBuff("riventricleavesoundone", myHero) then                
  424.                      QData.Next = Orbwalker:GetNextAttackTime() + 100
  425.                     end
  426.                 ]]--
  427.                 end
  428.                
  429.         end
  430.     end
  431. end
  432.  
  433. function AARange(target)
  434.     return myHero.range + VP:GetHitBox(myHero) + VP:GetHitBox(target)
  435. end
  436. function InRange(target)
  437.     return GetDistanceSqr(target.visionPos, myHero.visionPos) < AARange(target) * AARange(target)
  438. end
  439.  
  440.  
  441. function CDHandler()
  442.     -- Spells
  443.     QREADY = (myHero:CanUseSpell(_Q) == READY)
  444.     WREADY = (myHero:CanUseSpell(_W) == READY)
  445.     EREADY = (myHero:CanUseSpell(_E) == READY)
  446.     RREADY = (myHero:CanUseSpell(_R) == READY)
  447.     -- Items
  448.     tiamatSlot = GetInventorySlotItem(3077)
  449.     hydraSlot = GetInventorySlotItem(3074)
  450.     youmuuSlot = GetInventorySlotItem(3142)
  451.     bilgeSlot = GetInventorySlotItem(3144)
  452.     bladeSlot = GetInventorySlotItem(3153)
  453.    
  454.     tiamatReady = (tiamatSlot ~= nil and myHero:CanUseSpell(tiamatSlot) == READY)
  455.     hydraReady = (hydraSlot ~= nil and myHero:CanUseSpell(hydraSlot) == READY)
  456.     youmuuReady = (youmuuSlot ~= nil and myHero:CanUseSpell(youmuuSlot) == READY)
  457.     bilgeReady = (bilgeSlot ~= nil and myHero:CanUseSpell(bilgeSlot) == READY)
  458.     bladeReady = (bladeSlot ~= nil and myHero:CanUseSpell(bladeSlot) == READY)
  459.     -- Summoners
  460.     if myHero:GetSpellData(SUMMONER_1).name:find("SummonerDot") then
  461.         ignite = SUMMONER_1
  462.     elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerDot") then
  463.         ignite = SUMMONER_2
  464.     end
  465.     igniteReady = (ignite ~= nil and myHero:CanUseSpell(ignite) == READY)
  466. end
  467.  
  468. function LaneClear()
  469.         local MovePos = Vector(myHero) + 400 * (Vector(mousePos) - Vector(myHero)):normalized()
  470.         local vectorX,y,vectorZ = (Vector(myHero) - Vector(mousePos)):normalized():unpack()
  471.         local satchelDistance = 50
  472.         local posX = myHero.x + (vectorX * satchelDistance)
  473.         local posZ = myHero.z + (vectorZ * satchelDistance)
  474.         -- myHero:MoveTo(posX, posZ)   
  475.  
  476.  
  477.    for i, target in pairs(enemyMinions.objects) do
  478.    
  479.             if Riventricleavesound()  and GetDistance(target) < 190 and QREADY then
  480.             myHero:Attack(target)
  481.             end
  482.            
  483.         if Menu.Laneclear.useClearE and EREADY and ValidTarget(target, Ranges.E) then
  484.             --ItemUsage(target)
  485.             CastSpell(_E, target.x, target.z)
  486.         end
  487.                 if QREADY and Orbwalker:IsAfterAttack() and GetTickCount() > QData.Next and  GetDistance(target) < qRange then
  488.                  CastSpell(_Q, target.x, target.z)
  489.                  DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.15)
  490.                  DelayAction(function() Orbwalkeri:resetAA() end, 0.25)
  491.                                 if TargetHaveBuff("riventricleavesoundone", myHero) then
  492.                                 QData.Next =  Orbwalker:GetNextAttackTime()  -150 ---150
  493.                                 end
  494.                                 QData.Next =  Orbwalker:GetNextAttackTime()  -300  --300
  495.                 end    
  496.  
  497.     end
  498.    
  499.     if myHero:CanUseSpell(_Q) == READY then
  500.         for index, minion in pairs(enemyMinions.objects) do
  501.             if  minion.health <= getDmg("Q", minion, myHero) and GetDistance(minion)< 400 then         
  502.                 CastSpell(_Q, minion.x, minion.z)
  503.                 DelayAction(function() Orbwalkeri:resetAA() end, 0.25)
  504.                 return
  505.             end
  506.         end
  507.     end
  508.  
  509.     if myHero:CanUseSpell(_W) == READY then
  510.         for index, minion in pairs(enemyMinions.objects) do
  511.             if  minion.health <= getDmg("W", minion, myHero) and GetDistance(minion)< 200 then         
  512.                 CastSpell(_W)
  513.                 return
  514.             end
  515.         end
  516.     end
  517.  
  518.     if tiamatReady then
  519.         for index, minion in pairs(enemyMinions.objects) do
  520.             if  minion.health <= getDmg("TIAMAT", minion, myHero) and GetDistance(minion)< 200 then        
  521.                 CastSpell(tiamatSlot)
  522.                 return
  523.             end
  524.         end
  525.     end
  526.    
  527.     if hydraReady then
  528.         for index, minion in pairs(enemyMinions.objects) do
  529.             if  minion.health <= getDmg("HYDRA", minion, myHero) and GetDistance(minion)< 200 then         
  530.                 CastSpell(hydraSlot)
  531.                 return
  532.             end
  533.         end
  534.     end
  535.  
  536. end
  537.  
  538. function JungleClear()
  539.     local MovePos = Vector(myHero) + 400 * (Vector(mousePos) - Vector(myHero)):normalized()
  540.         local vectorX,y,vectorZ = (Vector(myHero) - Vector(mousePos)):normalized():unpack()
  541.         local satchelDistance = 50
  542.         local posX = myHero.x + (vectorX * satchelDistance)
  543.         local posZ = myHero.z + (vectorZ * satchelDistance)
  544.         -- myHero:MoveTo(posX, posZ)   
  545.  
  546.     for i, target in pairs(jungleMinions.objects) do
  547.         if target ~= nil then
  548.                 ItemUsage(target)
  549.             if Riventricleavesound()  and GetDistance(target) < 190 and QREADY then
  550.             myHero:Attack(target)
  551.             end
  552.    
  553.                 if QREADY and Orbwalker:IsAfterAttack() and GetTickCount() > QData.Next and  GetDistance(target) < qRange then
  554.                  CastSpell(_Q, target.x, target.z)
  555.                  ItemUsage(target)
  556.                  DelayAction(function() Orbwalkeri:resetAA() end, 0.25)
  557.                  DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.15)
  558.                                 if TargetHaveBuff("riventricleavesoundone", myHero) then
  559.                                 QData.Next =  Orbwalker:GetNextAttackTime() -150
  560.                                 end
  561.                                 QData.Next =  Orbwalker:GetNextAttackTime() -300
  562.              
  563.                 end
  564.  
  565.                  if not QREADY and Menu.Jungleclear.useClearW and WREADY and ValidTarget(target, Ranges.W) and Orbwalker:IsAfterAttack() then
  566.                  ItemUsage(target)
  567.                  CastSpell(_W)
  568.                  end
  569.                  
  570.                  if not QREADY and Menu.Jungleclear.useClearE and EREADY and Orbwalker:IsAfterAttack() then
  571.                   CastSpell(_E, target.x, target.z)
  572.                  end               
  573.  
  574.         end
  575.     end
  576.    
  577.     if myHero:CanUseSpell(_Q) == READY then
  578.         for index, minion in pairs(enemyMinions.objects) do
  579.             if  minion.health <= getDmg("Q", minion, myHero) and GetDistance(minion)< 400 then         
  580.                 CastSpell(_Q, minion.x, minion.z)
  581.                 return
  582.             end
  583.         end
  584.     end    
  585. end
  586.  
  587. function AutoFarm()
  588.    Target = AutoCarry.GetAttackTarget()
  589. --Orbwalkeri:Attack(target)
  590. --Orbwalkeri:CanAttack()  Orbwalker:
  591. --_MyHero:AttacksEnabled(canAttack)
  592.  
  593.    
  594.    if tiamatReady then
  595.         for index, minion in pairs(enemyMinions.objects) do
  596.             if  minion.health <= getDmg("TIAMAT", minion, myHero)*0.9 and GetDistance(minion)< 150 then        
  597.                 CastSpell(tiamatSlot)
  598.                 return
  599.             end
  600.         end
  601.     end
  602.    
  603.     if hydraReady then
  604.         for index, minion in pairs(enemyMinions.objects) do
  605.             if  minion.health <= getDmg("HYDRA", minion, myHero)*0.9 and GetDistance(minion)< 150 then         
  606.                 CastSpell(hydraSlot)
  607.                 return
  608.             end
  609.         end
  610.     end    
  611.    
  612. end
  613.  
  614. -- Auto Ignite --
  615.  
  616. function HealthCheck(unit, HealthValue)
  617.     if unit.health > (unit.maxHealth * (HealthValue/100)) then
  618.         return true
  619.     else
  620.         return false
  621.     end
  622. end
  623.  
  624. function animationCancel(unit, spell)
  625.     if not unit.isMe then return end
  626.  
  627.     if spell.name == 'RivenTriCleave' then -- _Q
  628.         DelayAction(function() Orbwalkeri:resetAA() end, 0.25)
  629.         AnimationCancel[Menu.Ads.cancel]()
  630.     else
  631.         if spell.name == 'RivenMartyr' then -- _W
  632.             AnimationCancel[Menu.Ads.cancel]()
  633.         else
  634.             if spell.name == 'RivenFeint' then -- _E
  635.                 AnimationCancel[Menu.Ads.cancel]()
  636.             else
  637.                 if spell.name == 'RivenFengShuiEngine' then -- _R first cast
  638.                     AnimationCancel[Menu.Ads.cancel]()
  639.                 else
  640.                     if spell.name == 'rivenizunablade' then -- _R Second cast
  641.                         AnimationCancel[Menu.Ads.cancel]()
  642.                     end
  643.                 end
  644.             end
  645.         end
  646.     end
  647. end
  648.  
  649. function ItemUsage(target)
  650.  
  651.     if DFGREADY then CastSpell(DFGSlot, target) end
  652.     if HXGREADY then CastSpell(HXGSlot, target) end
  653.     if BWCREADY then CastSpell(BWCSlot, target) end
  654.     if BRKREADY then CastSpell(BRKSlot, target) end
  655.     if TMTREADY then CastSpell(TMTSlot) end
  656.     if RAHREADY then CastSpell(RAHSlot) end
  657.     if RNDREADY then CastSpell(RNDSlot) end
  658.     --[[
  659.     if TMTREADY and GetDistance(target) < 385 then CastSpell(TMTSlot) end
  660.     if RAHREADY and GetDistance(target) < 385 then CastSpell(RAHSlot) end
  661.     if RNDREADY and GetDistance(target) < 385 then CastSpell(RNDSlot) end
  662.       ]]--
  663. end
  664.  
  665. function AddInteruptMenu()
  666.     Menu:addSubMenu('Interuptions', 'inter')
  667.         Menu.inter:addParam("inter1", "Interupt skills", SCRIPT_PARAM_ONOFF, false)
  668.         Menu.inter:addParam("inter2", "------------------------------", SCRIPT_PARAM_INFO, "")
  669.         for i, enemy in ipairs(GetEnemyHeroes()) do
  670.             for _, champ in pairs(InteruptionSpells) do
  671.                 if enemy.charName == champ.charName then
  672.                     table.insert(ToInterrupt, {charName = champ.charName, spellName = champ.spellName})
  673.                 end
  674.             end
  675.         end
  676.         if #ToInterrupt > 0 then
  677.             for _, Inter in pairs(ToInterrupt) do
  678.                 Menu.inter:addParam(Inter.spellName, "Stop "..Inter.charName.." "..Inter.spellName, SCRIPT_PARAM_ONOFF, true)
  679.             end
  680.         else
  681.             Menu.inter:addParam("bilbao", "No supported skills to interupt.", SCRIPT_PARAM_INFO, "")
  682.         end
  683. end
  684.  
  685. function PluginOnProcessSpell(unit, spell)
  686.   target = AutoCarry.GetAttackTarget()
  687.                
  688.    
  689.     if Menu.inter.inter1 and myHero:CanUseSpell(_W) == READY then
  690.         if #ToInterrupt > 0 then
  691.             for _, Inter in pairs(ToInterrupt) do
  692.                 if spell.name == Inter.spellName and unit.team ~= myHero.team then
  693.                     if Menu.inter[Inter.spellName] then
  694.                         if ValidTarget(unit, Ranges.W) and GetDistance(unit.visionPos, myHero.visionPos) < Ranges.W then
  695.                             CastSpell(_W)
  696.                         end
  697.                     end
  698.                 end
  699.             end
  700.         end
  701.     end
  702.  
  703. ----------------------------
  704.    
  705.     if AutoCarry.PluginMenu.autoParry  then
  706.         if unit and unit.type == myHero.type and spell.target == myHero then
  707.             for i=1, #Abilities do
  708.                 if (spell.name == Abilities[i] or spell.name:find(Abilities[i]) ~= nil) then                   
  709.                     if getDmg("AD", myHero, unit) >= (myHero.maxHealth*0.01) or getDmg("AD", myHero, unit) >= (myHero.health*0.01)  then
  710.                         if GetDistance(target)<260 then
  711.                         CastSpell(_W)
  712.                         CastSpell(_E, target.x, target.z)
  713.                         else
  714.                         CastSpell(_E, target.x, target.z)
  715.                         end
  716.                     end
  717.                 end
  718.             end
  719.         end
  720.     end
  721.  
  722. end
  723.  
  724. Abilities = {
  725. "GarenSlash2", "SiphoningStrikeAttack", "LeonaShieldOfDaybreakAttack", "RenektonExecute","IreliaEquilibriumStrike","ShenVorpalStar","PantheonQ",
  726. "ShyvanaDoubleAttackHit", "DariusNoxianTacticsONHAttack", "TalonNoxianDiplomacyAttack", "Parley", "MissFortuneRicochetShot", "RicochetAttack", "jaxrelentlessattack", "Attack"
  727. }
  728.  
  729. --[[    Parry   ]]--
  730.  
  731. function EQ()
  732.  
  733.     target = AutoCarry.GetAttackTarget()
  734.  
  735.     if target ~= nil and QREADY and target.dead == false and GetDistance(target) > 600 and GetDistance(target) < 650 then
  736.  
  737.         local   QREADY = (myHero:CanUseSpell(_Q) == READY)
  738.         local   WREADY = (myHero:CanUseSpell(_W) == READY)
  739.         local   EREADY = (myHero:CanUseSpell(_E) == READY)
  740.         local   RREADY = (myHero:CanUseSpell(_R) == READY)
  741.  
  742.                     if  EREADY and QREADY then
  743.                      --CastSpell(_E, target.x, target.z)
  744.                      CastSpell(_E, target.x, target.z)
  745.                      ---SendChat("/d")
  746.                      
  747.                      DelayAction(function()
  748.                      CastSpell(_Q, target.x, target.z)
  749.                      SendChat("/d")
  750.                      end, 0.19)  
  751.                      
  752.                      
  753.    
  754.                     end
  755.  
  756.     end                
  757. end
  758.  
  759. function Escape()
  760.       myHero:MoveTo(mousePos.x,mousePos.z)
  761.     local   QREADY = (myHero:CanUseSpell(_Q) == READY)
  762.     local   WREADY = (myHero:CanUseSpell(_W) == READY)
  763.     local   EREADY = (myHero:CanUseSpell(_E) == READY)
  764.     local   RREADY = (myHero:CanUseSpell(_R) == READY)
  765.  
  766.                     if EREADY and QREADY then
  767.                      CastSpell(_E, mousePos.x, mousePos.z)
  768.                      DelayAction(function() CastSpell(_Q, mousePos.x, mousePos.z) SendChat("/d") end, 0.21)        
  769.                      
  770.                     elseif EREADY and not QREADY then
  771.                      CastSpell(_E, mousePos.x, mousePos.z)
  772.                     elseif not EREADY and QREADY then
  773.                     DelayAction(function() CastSpell(_Q, mousePos.x, mousePos.z) SendChat("/d")  end, 0.19)                              
  774.                     end    
  775.        
  776. end
  777.  
  778. function StunCheck()
  779.     if not myHero.dead and myHero:CanUseSpell(_W) == READY then
  780.         for i=1, heroManager.iCount do
  781.             local enemy = heroManager:GetHero(i)
  782.             if not enemy.dead and enemy.team ~= myHero.team and enemy ~= nil then
  783.                 if GetDistance(enemy) < 260 then
  784.                     --ItemUsage(target)
  785.                     DelayAction(function()CastSpell(_W) end, 0.1)                          
  786.                 end
  787.                
  788.             end
  789.         end
  790.     end
  791. end
  792.  
  793.  
  794. function R2()
  795.     if myHero:GetSpellData(_R).level ~= 0 and myHero:CanUseSpell(_R) == READY then
  796.         for i=1, heroManager.iCount do
  797.             local enemy = heroManager:GetHero(i)
  798.             if enemy.team ~= myHero.team and enemy ~= nil then
  799.                 local RDamage = getDmg("R",enemy,myHero)*1.1
  800.                     if TargetValid(enemy) then
  801.                     if RDamage > enemy.health and GetDistance(enemy) < RRange and GetDistance(enemy) > 260 then
  802.                             if not enemy.dead then
  803.                             CastSpell(_R, enemy.x, enemy.z)
  804.                             CastSpell(_R, enemy.x, enemy.z)
  805.                         end
  806.                    
  807.                     end
  808.                 end
  809.             end
  810.         end
  811.     end
  812.  
  813.     if myHero:GetSpellData(_R).level ~= 0 and myHero:CanUseSpell(_R) == READY then
  814.         for i=1, heroManager.iCount do
  815.             local enemy = heroManager:GetHero(i)
  816.             if enemy.team ~= myHero.team and enemy ~= nil then
  817.                 local RDamage = getDmg("R",enemy,myHero)*1.5
  818.                     if TargetValid(enemy) then
  819.                     if RDamage > enemy.health and GetDistance(enemy) < 260 then
  820.                             if not enemy.dead then
  821.                             CastSpell(_R, enemy.x, enemy.z)
  822.                             CastSpell(_R, enemy.x, enemy.z)
  823.                         end
  824.                    
  825.                     end
  826.                 end
  827.             end
  828.         end
  829.     end
  830.    
  831. end
  832.  
  833.  
  834.  
  835. function KS()
  836. local   QREADY = (myHero:CanUseSpell(_Q) == READY)
  837. local   WREADY = (myHero:CanUseSpell(_W) == READY)
  838. local   EREADY = (myHero:CanUseSpell(_E) == READY)
  839. local   RREADY = (myHero:CanUseSpell(_R) == READY)
  840.  
  841.  
  842.     if myHero:GetSpellData(_R).level ~= 0 and myHero:CanUseSpell(_R) == READY and myHero:CanUseSpell(_E) == READY and not Riventricleavesound() then
  843.         for i=1, heroManager.iCount do
  844.             local enemy = heroManager:GetHero(i)
  845.             if enemy.team ~= myHero.team and enemy ~= nil then
  846.                 local PDamage = getDmg("P",enemy,myHero)
  847.                 local ADamage = getDmg("AD",enemy,myHero)          
  848.                 local QDamage = getDmg("Q",enemy,myHero)
  849.                 local WDamage = getDmg("W",enemy,myHero)
  850.                 local RDamage = getDmg("R",enemy,myHero)
  851.                 local F = (ADamage+QDamage+PDamage)*3+RDamage
  852.                 local RF = ((ADamage*1.2)+PDamage+QDamage)*3+RDamage
  853.                     if TargetValid(enemy) then
  854.  
  855.                     if RDamage*0.8 > enemy.health and GetDistance(enemy) < 650 and QREADY and WREADY and EREADY and RREADY then                
  856.                      CastSpell(_E, target.x, target.z)
  857.                      ItemUsage(target)                   
  858.                      if TMTREADY then CastSpell(TMTSlot) end
  859.                      if RAHREADY then CastSpell(RAHSlot) end
  860.                      CastSpell(_R)
  861.                     end
  862.  
  863.                     if RF > enemy.health and GetDistance(enemy) < 420 and QREADY and WREADY and EREADY and RREADY then                
  864.                      CastSpell(_E, target.x, target.z)
  865.                      ItemUsage(target)               
  866.                      if TMTREADY then CastSpell(TMTSlot) end
  867.                      if RAHREADY then CastSpell(RAHSlot) end
  868.                      CastSpell(_R)
  869.                     end                
  870.                    
  871.    
  872.                     if WDamage+RDamage > enemy.health and GetDistance(enemy) < 260 and WREADY and RREADY then                                                        
  873.                      StunCheck()
  874.                      CastSpell(_R)           
  875.                     end
  876.                  
  877.                     -- ((myHero.health / myHero.maxHealth) < (Target.health / Target.maxHealth))
  878.  
  879.                     if F > enemy.health and GetDistance(enemy) < 430 and QREADY and WREADY and EREADY and RREADY then                                  
  880.                      CastSpell(_E, target.x, target.z)
  881.                      ItemUsage(target)
  882.                      DelayAction(function() CastSpell(_R) end, 0.08)
  883.                      DelayAction(function() CastSpell(_R) end, 0.18)
  884.                      DelayAction(function() CastSpell(_R) end, 0.25)
  885.                      DelayAction(function() CastSpell(_R) end, 0.3)
  886.  
  887.              
  888.                  
  889.                     end
  890.                    
  891.                 end
  892.             end
  893.         end
  894.     end
  895. end
  896.  
  897.  
  898.  
  899. function TargetValid(target)
  900.     if target ~= nil and target.dead == false and target.team == TEAM_ENEMY and target.visible == true then
  901.         return true
  902.     else
  903.         return false
  904.     end
  905. end
  906.  
  907. --[[
  908. function Plugin:GetQRadius()
  909.     if RData.Up then
  910.         if QData.Count == 2 then
  911.             return 112.5
  912.         else
  913.             return 150
  914.         end
  915.     else
  916.         if QData.Count == 2 then
  917.             return 200
  918.         else
  919.             return 162.5
  920.         end
  921.     end
  922. end
  923. ]]--
  924.  
  925.  function OnAnimation(unit,animation)  
  926.  
  927.     if unit.isMe and animation:find("Spell1a") then
  928.         qCount = 1
  929.     elseif unit.isMe and animation:find("Spell1b") then
  930.         qCount = 2
  931.     elseif unit.isMe and animation:find("Spell1c") then
  932.         qCount = 3
  933.     end
  934.    
  935. end
  936.  
  937.  
  938. function DodajUlti()
  939.     if myHero.level == 6 or myHero.level == 11 or myHero.level == 16 then
  940.       LevelSpell(_R)
  941.     end
  942. end
  943.  
  944. function PluginOnGainBuff(unit, buff)
  945.     if unit.isMe then
  946.         if buff.name == "rivenpassiveaaboost" then
  947.             Passive.Count = buff.stack
  948.             Passive.Last = GetTickCount()
  949.         elseif buff.name == "RivenFengShuiEngine" then
  950.             RData.Start = os.clock()
  951.             RData.Up = true
  952.         elseif buff.name == "riventricleavesoundone" then
  953.             DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.15)
  954.             QData.Count = 1
  955.             QData.Last = os.clock()
  956.            
  957.         elseif buff.name == "riventricleavesoundtwo" then
  958.             DelayAction(function() Orbwalker:ResetAttackTimer() end, 0.15)
  959.             QData.Count = 2
  960.             QData.Last = os.clock()
  961.            
  962.         elseif buff.name == "riventricleavesoundthree" then
  963.             QData.Count = 3
  964.             QData.Last = os.clock()
  965.         end
  966.     end
  967. end
  968. function PluginOnUpdateBuff(unit, buff)
  969.     if unit.isMe then
  970.         if buff.name == "rivenpassiveaaboost" then
  971.             Passive.Count = buff.stack
  972.             Passive.Last = GetTickCount()
  973.         end
  974.     end
  975. end
  976. function PluginOnLoseBuff(unit, buff)
  977.     if unit.isMe then
  978.         if buff.name == "rivenpassiveaaboost" then
  979.             Passive.Count = 0
  980.             Passive.Last = GetTickCount()
  981.         elseif buff.name == "RivenFengShuiEngine" then
  982.             RData.Up = false
  983.         end
  984.     end
  985. end
  986.  
  987. function Riventricleavesound()
  988.    return TargetHaveBuff("riventricleavesoundone", myHero) or TargetHaveBuff("riventricleavesoundtwo", myHero) or TargetHaveBuff("riventricleavesoundthree", myHero)
  989. end
  990.  
  991. function PluginOnDraw()
  992.  
  993.     if AutoCarry.PluginMenu.draw then
  994.     if myHero:CanUseSpell(_Q) == READY and myHero:CanUseSpell(_E) == READY then
  995.     DrawCircle(myHero.x, myHero.y, myHero.z, 600, 0xFF0000)
  996.     DrawCircle(myHero.x, myHero.y, myHero.z, 650, 0xFF0000)
  997.     else
  998.     DrawCircle(myHero.x, myHero.y, myHero.z, 600, 0x992D3D)
  999.     DrawCircle(myHero.x, myHero.y, myHero.z, 650, 0x992D3D)
  1000.     end
  1001.     DrawCircle(myHero.x, myHero.y, myHero.z, 190, 0x992D3D)
  1002.     if myHero:CanUseSpell(_E) == READY then
  1003.     DrawCircle(myHero.x, myHero.y, myHero.z, 400, 0x003C9D)
  1004.     end
  1005.     end
  1006. end
  1007.  
  1008. --AutoCarry.CanMove = false
  1009.  --TargetHaveBuff("rivenpassiveaaboost", myHero)
  1010.  --TargetHaveBuff("riventricleavesoundtwo", myHero)
Advertisement
Add Comment
Please, Sign In to add comment