Permalink
Find file
e3187a1 Sep 22, 2016
235 lines (203 sloc) 7.73 KB
if myHero.charName ~= "Khazix" then return end
require("OpenPredict")
local KMenu = Menu("Khazix", "Khazix")
KMenu:SubMenu("Combo", "Combo")
KMenu.Combo:Boolean("Q","Use Q",true)
KMenu.Combo:Boolean("W","Use W",true)
KMenu.Combo:Boolean("E","Use E",true)
KMenu.Combo:Boolean("R","Use R",true)
KMenu.Combo:Key("Combo1", "Combo Key", 32)
local WStats = {speed = 1700, width = 73, delay = 0.25, range = 1025}
local EStats = {speed = 2000, width = 75, delay = 0.25, range = 700}
if GetCastName(myHero,_E) == "KhazixELong" then
EStats.range = 900
end
local khaPassive = GotBuff(myHero,"KhazixPDamage")
local IsAA = false
OnProcessSpell(function(unit,spell)
if unit == myHero then
if spell.name:lower():find("attack") then
IsAA = true
end
end
end)
OnProcessSpellComplete(function(unit,spell)
if unit == myHero then
if spell.name:lower():find("attack") then
IsAA = false
if KMenu.Combo.Combo1:Value() and GetObjectType(spell.target) == Obj_AI_Hero then
local looksLikeHydraToMe
local titan = GetItemSlot(myHero,3748)
if GetItemSlot(myHero,3077) > 0 then
looksLikeHydraToMe = GetItemSlot(myHero,3077)
elseif GetItemSlot(myHero,3074) > 0 then
looksLikeHydraToMe = GetItemSlot(myHero,3074)
end
if looksLikeHydraToMe ~= nil and looksLikeHydraToMe > 0 then
if CanUseSpell(myHero,looksLikeHydraToMe) == READY then
CastSpell(looksLikeHydraToMe)
end
end
if titan > 0 then
if CanUseSpell(myHero,titan) == READY then
CastSpell(titan)
DelayAction(function()
AttackUnit(spell.target)
end, 0.03)
end
end
end
end
end
end)
OnAnimation(function(unit,animation)
if unit == myHero then
--print(animation)
if animation == "Run" then
IsAA = false
end
if animation == "Evo2E" then
EStats.range = 900
end
end
end)
-- go ingame and get the kha buff name :^)
OnUpdateBuff(function(unit,buff)
if unit == myHero then
--print(buff.Name)
if buff.Name == "KhazixPDamage" then
khaPassive = true
end
end
end)
OnRemoveBuff(function(unit,buff)
if unit == myHero then
--print(buff.Name) no, you did it already its "KhazixPDamage"
if buff.Name == "KhazixPDamage" then
khaPassive = false
end
end
end)
---ISOLATION ---
----------------
local iso = {}
local onLoop = Callback.Add("ObjectLoop", function(o) ObjectLoop(o) end)
DelayAction(function()
Callback.Del("ObjectLoop",onLoop)
end,0.25)
function ObjectLoop(o)
if GetDistance(GetOrigin(o)) < 3000 then
if GetObjectBaseName(o):lower():find("khazix_base_q") then
if GetObjectBaseName(o):lower():find("indicator.troy") then
table.insert(iso, o)
end
end
end
end
OnCreateObj(function(o)
if GetDistance(o) < 3000 then
if GetObjectBaseName(o):lower():find("khazix_base_q") then
if GetObjectBaseName(o):lower():find("indicator.troy") then
table.insert(iso, o)
end
end
end
end)
OnDeleteObj(function(o)
if GetDistance(o) < 3000 then
if GetObjectBaseName(o):lower():find("khazix_base_q") then
if GetObjectBaseName(o):lower():find("indicator.troy") then
for i,v in pairs(iso) do
if GetDistance(GetOrigin(v),GetOrigin(o)) < 10 then
table.remove(iso,i)
end
end
end
end
end
end)
function IsIsolated(unit)
local isolation = false
for i,v in pairs(iso) do
if GetDistance(GetOrigin(unit),GetOrigin(v)) < 10 then
isolation = true
end
end
return isolation
end
----------------
local DPS = 0
local function GetQDMG(target)
if IsIsolated(target) == true then
-- EVOLVED ISOLATION PHYSICAL DAMAGE: 91 / 123.5 / 156 / 188.5 / 221 + [10 - 180](based on level) (+ 260% Bonus AD)
return CalcDamage(myHero,target, 58.5 + 32.5*GetCastLevel(myHero,_Q) + GetBonusDmg(myHero)*2.6 + 10*GetLevel(myHero), 0)
else
-- PHYSICAL DAMAGE: 70 / 95 / 120 / 145 / 170 (+ 120% Bonus AD)
return CalcDamage(myHero,target, 45 + 25*GetCastLevel(myHero,_Q) + GetBonusDmg(myHero)*1.2 , 0)
end
end
OnDraw(function()
local target = GetCurrentTarget()
if ValidTarget(target, 1400) and GetCurrentHP(target) + GetDmgShield(target) <= DPS then
local hppos = GetHPBarPos(target)
DrawText("Killable",22,hppos.x + 35,hppos.y+ 24,ARGB(255,135,219,129))
end
end)
----------------
OnTick(function()
local target = GetCurrentTarget()
-- DAMAGE CALC --
local qDMG = 0
local wDMG = 0
local eDMG = 0
local aaDMG = CalcDamage(myHero,target,GetBaseDamage(myHero) + GetBonusDmg(myHero), 0)
local passiveDMG = 0
if khaPassive == true then
passiveDMG = CalcDamage(myHero,target, 0, (({[1]=15,[2]=20,[3]=25,[4]=35,[5]=45,[6]=55,[7]=65,[8]=75,[9]=85,[10]=95,[11]=110,[12]=125,[13]=140,[14]=150,[15]=160,[16]=170,[17]=180,[18]=190})[GetLevel(myHero)]) + GetBonusAP(myHero)*0.5)
end
if Ready(_Q) then
qDMG = GetQDMG(target)
end
if Ready(_W) then
-- PHYSICAL DAMAGE: 80 / 110 / 140 / 170 / 200 (+ 100% Bonus AD)
wDMG = CalcDamage(myHero,target, 50 + 30*GetCastLevel(myHero,_W) + GetBonusDmg(myHero) , 0 )
end
if Ready(_E) then
-- PHYSICAL DAMAGE: 65 / 100 / 135 / 170 / 205 (+ 20% Bonus AD)
eDMG = CalcDamage(myHero,target, 30 + 35*GetCastLevel(myHero,_E) + GetBonusDmg(myHero)*.2 , 0 )
end
DPS = qDMG + wDMG + eDMG + aaDMG + passiveDMG
-----------------
if KMenu.Combo.Combo1:Value() then
local ghost = GetItemSlot(myHero,3142)
if ValidTarget(target,400) and ghost > 0 and Ready(ghost) then
CastSpell(ghost)
end
if KMenu.Combo.Q:Value() and Ready(_Q) and ValidTarget(target, GetCastRange(myHero,_Q) + GetHitBox(target)/2) then
if IsAA == false or IsIsolated(target) == true then
CastTargetSpell(target, _Q)
end
end
if KMenu.Combo.W:Value() and Ready(_W) and ValidTarget(target, WStats.range) and IsAA == false then
local WPred = GetPrediction(target, WStats)
-- W has minnion collision :mCollision()
if WPred.hitChance >= 0.2 and not WPred:mCollision(1) then
CastSkillShot(_W, WPred.castPos)
end
end
-- I would add here a check in how many enemies you jump in I dont think that you want to jump in into 5 enemies
-- GetDistance(myHero,target) > 325
if KMenu.Combo.E:Value() and Ready(_E) and ValidTarget(target, EStats.range) and IsAA == false and GetDistance(myHero,target) > GetCastRange(myHero,_Q) + GetHitBox(target)/2 then
local EPred = GetCircularAOEPrediction(target, EStats)
if EnemiesAround(EPred.castPos, 500) < 5 and AlliesAround(EPred.castPos, EStats.range) < EnemiesAround(EPred.castPos, 500) then
if EPred.hitChance >= 0.4 then
CastSkillShot(_E, EPred.castPos)
end
end
end
-- random numbers that I like to use | It will activate if your passive is off for the passive reset or if there are more than 2 enemies around you
if KMenu.Combo.R:Value() and Ready(_R) and ValidTarget(target, 400) and ( ( khaPassive == false and GetCurrentHP(target) > GetQDMG(target) + DPS ) or EnemiesAround(GetOrigin(myHero), 500) > 2 ) and IsAA == false then
CastSpell(3)
end
end
end)