-- XD
if myHero.charName ~= "Zed" then return end
function Check(file_name)
local file_found=io.open(file_name, "r")
if file_found==nil then
return false
else
return true
end
return file_found
end
function Rename(from, to)
if Check(from) then
os.rename(from, to)
else
return nil
end
end
local ScriptName = "ZedCore"
printMessage = function(message) print("" .. ScriptName .. ": " .. message .. "") end
-- Rename(LIB_PATH.."SourceLib_Fix.lua", "SourceLibk.lua")
if Check(LIB_PATH.."SourceLibk.lua") then
require 'SourceLibk'
else
printMessage("Cant check SourceLibk. Download lastest version")
UPDATE_HOST = "raw.github.com"
UPDATE_PATH = "/kej1191/anonym/master/Common/SourceLibk.lua" .. "?rand="..math.random(1,10000)
UPDATE_URL = "https://"..UPDATE_HOST..UPDATE_PATH
DownloadFile(UPDATE_URL, LIB_PATH .. "SourceLibk.lua", function() printMessage("Successfully Download, please reload!") end)
return
end
local VERSION = 1.6
SimpleUpdater("[ZedCore]", VERSION, "raw.github.com" , "/UnrealCore/GithubForBotOfLegends/master/Script/ZedCore/ZedCore.lua" , SCRIPT_PATH .. "ZedCore.lua" , "/UnrealCore/GithubForBotOfLegends/master/Script/ZedCore/ZedCore.version" ):CheckUpdate()
local DangerousList = {
"AatroxQ",
"AhriSeduce",
"CurseoftheSadMummy",
"InfernalGuardian",
"EnchantedCrystalArrow",
"AzirR",
"BrandWildfire",
"CassiopeiaPetrifyingGaze",
"DariusExecute",
"DravenRCast",
"EvelynnR",
"EzrealTrueshotBarrage",
"Terrify",
"GalioIdolOfDurand",
"GarenR",
"GravesChargeShot",
"HecarimUlt",
"LissandraR",
"LuxMaliceCannon",
"UFSlash",
"AlZaharNetherGrasp",
"OrianaDetonateCommand",
"LeonaSolarFlare",
"SejuaniGlacialPrisonStart",
"SonaCrescendo",
"VarusR",
"GragasR",
"GnarR",
"FizzMarinerDoom",
"SyndraR",
}
local DONOTCASTDURINGHASTHISBUFFES = {
"JudicatorIntervention",
"UndyingRange",
}
local SpellType = {
Line = "SkillshotLine",
MissileLine = "SkillshotMissileLine",
Circular = "SkillshotCircle",
Cone = "SkillshotCone",
Arc = "SkillshotArc",
Ring = "SkillshotRing",
}
local OWM = OrbWalkManager(ScriptName)
local STS = SimpleTS()
local DLib = DamageLib()
local CM = DrawManager()
function OrbwalkToPosition(position)
if position ~= nil then
if OWM.MMALoad then
_G.moveToCursor(position.x, position.z)
elseif _G.AutoCarry and _G.AutoCarry.Orbwalker and OWM.RebornLoad then
_G.AutoCarry.Orbwalker:OverrideOrbwalkLocation(position)
elseif OWM.NOLLoad then
OWM.NOL:ForcePosition(position)
end
else
if OWM.MMALoad then
return
elseif _G.AutoCarry and _G.AutoCarry.Orbwalker and OWM.RebornLoad then
_G.AutoCarry.Orbwalker:OverrideOrbwalkLocation(nil)
end
end
end
function Contain(table, value)
for _, v in ipairs(table) do
if(v == value)then
return true
end
end
return false
end
function Extends(v1, v2, v3)
return Vector(v1) + (Vector(v2) - Vector(v1)):normalized() * (GetDistance(v1, v2)+v3)
end
function GetNearObjectCount(source, range, objects)
local count = 0
for _, o in ipairs(objects) do
if(GetDistance(o, source) < range) then
count = count + 1
end
end
return count
end
function GetMyTryeRange()
return myHero.range+GetDistance(myHero.minBBox)/2 + 40
end
function OnLoad()
Main = Main()
end
function OnWndMsg(msg, wParam)
Main:OnWndMsg(msg, wParam)
end
class("Main")
function Main:__init()
self:Initialization()
self.shadowdelay = 0
self.delayw = 500
end
function Main:Initialization()
self.Q = Spell(_Q, 900)
self.Q:SetSkillshot(SKILLSHOT_LINEAR, 50, 0.25, 1700)
self.W = Spell(_W, 550)
self.E = Spell(_E, 270)
self.R = Spell(_R, 650)
self.QCollision = Collision(self.Q.range, 1700, 0.25, 50)
self.LastCast = nil
self.Shadow = {}
self.LBClicked = false
self.minionTable = minionManager(MINION_ENEMY, 1400, myHero, MINION_SORT_MAXHEALTH_DEC)
self.jungleTable = minionManager(MINION_JUNGLE, 1400, myHero, MINION_SORT_MAXHEALTH_DEC)
CM:CreateCircle(myHero, self.Q.range, 1, {100, 255, 0, 0}, "Draw Q range")
CM:CreateCircle(myHero, self.W.range, 1, {100, 255, 0, 0}, "Draw W range")
CM:CreateCircle(myHero, self.E.range, 1, {100, 255, 0, 0}, "Draw E range")
CM:CreateCircle(myHero, self.R.range, 1, {100, 255, 0, 0}, "Draw R range")
DLib:RegisterDamageSource(_Q, _PHYSICAL, 75, 40, _PHYSICAL, _BONUS_AD, 1, function() return myHero:CanUseSpell(_Q) end)
DLib:RegisterDamageSource(_E, _PHYSICAL, 60, 30, _PHYSICAL, _BONUS_AD, 0.9, function() return myHero:CanUseSpell(_E) end)
DLib:RegisterDamageSource(_R, _PHYSICAL, 0, 0, _PHYSICAL, _AD, 1, function() return myHero:CanUseSpell(_R) end, function() return 0 end)
DLib:RegisterDamageSource(_Bilge, _MAGIC, 100, 0, _MAGIC, _AP, 0, function() return self.Blade:IsReady() end)
-- self.IgniteSlot = GetSummonerSlot("summonerdot")
-- _IGNITE = self.IgniteSlot
self.IGNITE = IGNITE()
self.Config = scriptConfig(ScriptName, ScriptName)
self.Config:addSubMenu("OrbWalk", "OrbWalk")
OWM:AddToMenu(self.Config.OrbWalk)
self.Config:addSubMenu("TargetSelecter", "TargetSelecter")
STS:AddToMenu(self.Config.TargetSelecter)
self.Config:addSubMenu("DamageLib", "DamageLib")
DLib:AddToMenu(self.Config.DamageLib, {_Q, _E, _R})
self.Config:addSubMenu("Draw", "Draw")
CM:AddToMenu(self.Config.Draw)
self.Config:addSubMenu("Combo", "Combo")
self.Config.Combo:addParam("UseW", "Use W", SCRIPT_PARAM_LIST, 2, {"Following", "Always", "Off"})
self.Config.Combo:addParam("UseIgnite", "Use Ignite", SCRIPT_PARAM_ONOFF, true)
self.Config.Combo:addParam("UseUlt", "Use Ultimate", SCRIPT_PARAM_ONOFF, true)
self.Config.Combo:addParam("TheLine", "Line Combo", SCRIPT_PARAM_ONKEYDOWN, false, string.byte('T'))
self.Config:addSubMenu("Harass", "Harass")
self.Config.Harass:addParam("longhar", "Long Poke", SCRIPT_PARAM_ONKEYTOGGLE, false, string.byte('U'))
--self.Config.Harass:addParam("UseItem", "Use Tiamat/Hydra", SCRIPT_PARAM_ONOFF, true)
self.Config.Harass:addParam("UseW", "Use W", SCRIPT_PARAM_ONOFF, true)
self.Config:addSubMenu("LineClear", "LineClear")
--self.Config.LineClear:addParam("UseItem", "Use Hydra/Tiamat", SCRIPT_PARAM_ONOFF, true)
self.Config.LineClear:addParam("UseQ", "Use Q LineClear", SCRIPT_PARAM_ONOFF, true)
self.Config.LineClear:addParam("UseE", "Use E LineClear", SCRIPT_PARAM_ONOFF, true)
self.Config.LineClear:addParam("Energy", "Energy >", SCRIPT_PARAM_SLICE, 45, 1, 100)
self.Config:addSubMenu("LastHit", "LastHit")
self.Config.LastHit:addParam("UseQ", "Use Q LastHit", SCRIPT_PARAM_ONOFF, true)
self.Config.LastHit:addParam("UseE", "Use E LastHit", SCRIPT_PARAM_ONOFF, true)
self.Config.LastHit:addParam("Energy", "Energy >", SCRIPT_PARAM_SLICE, 45, 1, 100)
self.Config:addSubMenu("JungleClear", "JungleClear")
self.Config.JungleClear:addParam("UseQ", "Use Q JungleClear", SCRIPT_PARAM_ONOFF, true)
self.Config.JungleClear:addParam("UseW", "Use W JungleClear", SCRIPT_PARAM_ONOFF, true)
self.Config.JungleClear:addParam("UseE", "Use E JungleClear", SCRIPT_PARAM_ONOFF, true)
self.Config.JungleClear:addParam("Energy", "Energy >", SCRIPT_PARAM_SLICE, 45, 1, 100)
self.Config:addSubMenu("Misc", "Misc")
self.Config.Misc:addParam("UseIgnite", "Use Ignite Killsteal", SCRIPT_PARAM_ONOFF, true)
self.Config.Misc:addParam("UseQ", "Use Q Killsteal", SCRIPT_PARAM_ONOFF, true)
self.Config.Misc:addParam("UseE", "Use E Killsteal", SCRIPT_PARAM_ONOFF, true)
self.Config.Misc:addParam("AutoE", "Auto E", SCRIPT_PARAM_ONOFF, true)
self.Config.Misc:addParam("rdodge", "R Dodge Dangerous", SCRIPT_PARAM_ONOFF, true)
for _, e in ipairs(GetEnemyHeroes()) do
name = e:GetSpellData(_R).name;
if(Contain(DangerousList, name))then
self.Config.Misc:addParam("dl"..name, "Dodge "..name, SCRIPT_PARAM_ONOFF, true)
end
end
self.Config:addSubMenu("BlackList", "bl")
for _, enemy in ipairs(GetEnemyHeroes())do
self.Config.bl:addParam("bl" .. enemy.charName, "use r to " .. enemy.charName, SCRIPT_PARAM_ONOFF, true)
end
self.Config:addSubMenu("SS", "SS")
self.Q:AddToMenu(self.Config.SS)
AddTickCallback(function() self:OnTick() end)
AddProcessSpellCallback(function(unit, spell) self:OnProcessSpell(unit, spell) end)
AddCreateObjCallback(function(obj) self:OnCreateObj(obj) end)
AddDrawCallback(function() self:OnDraw() end)
AddAnimationCallback(function(unit, anim) self:Anim(unit, anim) end)
-- AddOnWndMsgCallback(function(msg, wParam) self:OnWndMsg(msg, wParam) end)
-- AdvancedCallback:bind('OnTowerFocus', function(tower, unit) self:OnTowerFocus(tower,unit) end)
end
function Main:Anim(unit, anim)
if unit.team == myHero.team and unit.name == "Shadow" then
if(anim:lower():find("idle"))then
table.insert(self.Shadow, unit)
end
if(anim:lower():find("death"))then
for i = 1, #self.Shadow do
if(Vector(self.Shadow[i]) == Vector(unit))then
table.remove(self.Shadow, i)
end
end
end
end
-- print(unit.name.." : "..anim..)
end
function Main:OnTowerFocus(tower, unit)
if tower == nil or unit == nil or tower.team ~= myHero.team or unit.team == myHero.team then return end
if myHero:GetDistance(unit) <= self.Q.range then
self.targetUnderTurret = unit
self.turrent = tower
end
end
function Main:OnProcessSpell(unit, spell)
if(unit.type ~= myHero.type)then return end
if(unit.team ~= myHero.team)then
if(self.Config.Misc.rdodge and self.R:IsReady() and self:UltStat() == 1 and self.Config.Misc["dl"..spell.name])then
if(Contain(DangerousList, spell.name) and (GetDistance(unit) < 650 or GetDistance(spell.endPos) <= 250))then
if(spell.name == "SyndraR")then
self.clockon = GetTickCount() + 150
self.countdanger = countdanger + 1;
else
target = STS:GetTarget(640)
if(target ~= nil)then
self.R:Cast(target)
end
end
end
end
end
if(unit.isMe and spell.name == "zedult")then
self.tickock = GetTickCount() + 200;
end
-- if(unit.isMe)then
-- self.LastCast = spell
-- end
if(spell.name == self.R:GetName())then
self.rpos = Vector(spell.startPos)
end
end
function Main:OnCreateObj(obj)
if(obj.name == "Shadow")then
table.insert(self.Shadow, obj)
end
end
function Main:OnWndMsg(msg, wParam)
if msg == 513 then
-- print("Mouse Left Click")
self.LBClicked = true
elseif msg == 514 then
-- print("Mouse Left Release")
self.LBClicked = false
end
end
function Main:OnDraw()
-- if self.Config.DamageLib.DrawPredictedHealth then
-- for _, enemy in ipairs(GetEnemyHeroes())do
-- self:DrawIndicator(enemy)
-- end
-- end
if self.Config.Misc.rdodge then
DrawText("R with evade dangerous spell : <" .. tostring(self.LBClicked) .. "> just click mouse left button", 18, 100, 100, ARGB(255, 0, 255, 0) )
end
end
function Main:OnTick()
if(OWM:IsComboMode())then
self:Combo()
end
if(self.Config.Combo.TheLine)then
self:TheLine()
end
if(OWM:IsHarassMode())then
self:Harass()
end
if(OWM:IsClearMode())then
self:JungleClear()
self:LineClear()
end
if(OWM:IsLastHitMode())then
self:LastHit()
end
-- if(self.LastCast ~= nil and self.LastCast.name == self.R:GetName() and self.Shadow ~= nil )then
-- self.rpos = Vector(self.Shadow)
-- end
self:Killsteal()
end
function Main:GetComboDamage(enemy)
damage = 0
if self.Q:IsReady() then
pos = self.Q:GetPrediction(enemy)
if( self:CountHits( Vector( pos ), GetEnemyHeroes() ) > 0 )then
damage = damage + DLib:CalcComboDamage(enemy, {_Q})/2
else
damage = damage + DLib:CalcComboDamage(enemy, {_Q})
end
end
if self.Config.Combo.UseW and self.W:IsReady() and GetDistance(enemy) < self.W.range + GetMyTryeRange() then
damage = damage + getDmg("AD", enemy, myHero)
end
if self.Config.Misc.AutoE and self.E:IsReady() then
damage = damage + DLib:CalcComboDamage(enemy, {_E})
end
multiplier = self.R:GetLevel()*0.1 + 0.2
if self.Config.Combo.UseUlt and self.R:IsReady() then
damage = damage + DLib:CalcComboDamage(enemy, {_R})
if self.Q:IsReady() then
damage = damage + DLib:CalcComboDamage(enemy, {_Q}) * multiplier
end
if self.E:IsReady() then
damage = damage + DLib:CalcComboDamage(enemy, {_E}) * multiplier
end
end
return damage
end
function Main:CountHits(points, objects)
-- result = 0
-- for i = 1, #points+1 do
-- point = points[i]
-- endPoint = self:GetQCardDrawEndPoints(myHero, position)
-- for k = 1, 3 do
-- local pointSegment, pointLine, isOnSegment = VectorPointProjectionOnLineSegment(myHero, endPoint[k], )
-- end
-- end
result = 0
-- poly = Polygon()
from = Vector(myHero)
to = Vector(points)
From = from + ( from - to ):normalized()
FromL = From + ( to - from ):perpendicular():normalized() * 25
FromR = From + ( to - from ):perpendicular2():normalized() * 25
To = to + ( to - from ):normalized()
ToL = To + ( to - from ):perpendicular():normalized() * 25
ToR = To + ( to - from ):perpendicular2():normalized() * 25
StartL = WorldToScreen(D3DXVECTOR3(FromL.x, FromL.y, FromL.z))
StartR = WorldToScreen(D3DXVECTOR3(FromR.x, FromR.y, FromR.z))
EndL = WorldToScreen(D3DXVECTOR3(ToL.x, ToL.y, ToL.z))
EndR = WorldToScreen(D3DXVECTOR3(ToR.x, ToR.y, ToR.z))
poly = Polygon( Point(StartL.x, StartL.y), Point(StartR.x, StartR.y), Point(EndL.x, EndL.Y), Point(EndR.x, EndR.y) )
for _, object in ipairs(objects) do
if object.valid and objects.dead and GetDistance(object) < self.Q.range then
objScreen = WorldToScreen(D3DXVECTOR3(object.x, object.y, object.z))
objPoint = Point(objScreen.x, objScreen.y)
if poly:contains(objPoint) then
result = result + 1
end
end
end
return result
end
function Main:Combo()
local target = GetTarget() or STS:GetTarget(1400)
if target == nil then return end
local overkill = DLib:CalcComboDamage(target, {_Q, _E}) + getDmg("AD", target , myHero) * 2
if(self.Config.Combo.UseUlt and not self:IsBlackList(target) and not self.LBClicked and self.R:IsReady() and self:UltStat() == 1 and not self:CanDamaged(target) and (overkill > target.health or (not self.W:IsReady() and DLib:CalcSpellDamage(target, _Q) < target.health and GetDistance(target) > 400)))then
if((GetDistance(target) > 700 and target.ms > myHero.ms or GetDistance(Vector(target)) > 800 )) then
self:CastW(target);
self.W:Cast()
end
-- print("CastR")
CastSpell(_R, target)
-- self.R:Cast(target);
else
if(target ~= nil and self.Config.Combo.UseIgnite and self.IgniteSlot ~= nil and self.IGNITE:IsReady())then
if(self:GetComboDamage(target) > target.health or HasBuff(target, "zedulttargetmark"))then
self.IGNITE:Cast(target)
end
end
if(target~= nil and self:ShadowStage() == 1 and self.Config.Combo.UseW < 3 and GetDistance(target) > 400 and GetDistance(target) < 1300)then
self:CastW(target)
elseif target ~= nil and self:ShadowStage() == 1 and self.Config.Combo.UseW < 2 and GetDistance(target) < 400 and GetDistance(target) < 1300 then
self:CastW(target)
end
if(target ~= nil and self:ShadowStage() == 2 and self.Config.Combo.UseW and GetDistance(Vector(self:WShadow())) < GetDistance(Vector(target)))then
self.W:Cast()
end
-- self:UseItem(target)
self:CastE()
self:CastQ(target)
end
end
function Main:TheLine()
local target = GetTarget() or STS:GetTarget(1400)
if(target == nil)then
-- OrbwalkToPosition(mousePos)
myHero:MoveTo(mousePos.x, mousePos.z)
else
myHero:MoveTo(mousePos.x, mousePos.z)
-- OrbwalkToPosition(target)
end
if target == nil then return end
if(not self.R:IsReady() or GetDistance(target) >= 640 ) then return end
if(self:UltStat() == 1 ) then CastSpell(_R, target) end
linepos = Extends(target, myHero, -500)
if(target ~= nil and not self:CanDamaged(target) and self:ShadowStage() == 1 and self:UltStat() == 2)then --
-- self:UseItem(target);
-- if(self.LastCast.name ~= self.W:GetName())then
self.W:Cast(linepos.x, linepos.z);
self:CastE()
self:CastQ(target)
-- if(target ~= nil and Config.Combo.UseIgnite and self.IgniteSlot ~= nil and self.IGNITE:IsReady())then
-- self.IGNITE:Cast(target)
-- end
-- end
end
if(target ~= nil and self:WShadow() ~= nil and self:UltStat() == 2 and GetDistance(target) > 250 and GetDistance(Vector(self:WShadow()), target) < GetDistance(target))then
self.W:Cast()
end
end
function Main:Harass()
local target = GetTarget() or STS:GetTarget(1400)
if target == nil then return end
if(target and self.Config.Harass.longhar and self.Q:IsReady() and self.W:IsReady() and myHero.mana > myHero:GetSpellData(_Q).mana + myHero:GetSpellData(_W).mana and GetDistance(target) > 850 and GetDistance(target) < 1400 ) then
self:CastW(target)
end
if(target and (self:ShadowStage() == 2 or not self.W:IsReady() or not self.Config.Harass.UseW) and self.Q:IsReady() and (GetDistance(target) <= 900 or GetDistance(self:WShadow(), target) <= 900))then
self:CastQ(target)
end
if(target and self.W:IsReady() and self.Q:IsReady() and self.Config.Harass.UseW and myHero.mana > myHero:GetSpellData(_Q).mana + myHero:GetSpellData(_W).mana)then
if(GetDistance(target)<750)then
self:CastW(target)
end
end
self:CastE()
end
function Main:LineClear()
self.minionTable:update()
mana = myHero.mana >= (myHero.maxMana*self.Config.LineClear.Energy/100)
if(not mana)then return end
if(self.Q:IsReady() and self.Config.LineClear.UseQ)then
pos, hit = GetBestLineFarmPosition(self.Q.range, 50, self.minionTable.objects)
-- print(hit)
if(hit >= 3)then
self.Q:SetSourcePosition(myHero)
self.Q:Cast(pos.x, pos.z)
else
for _, m in ipairs(self.minionTable.objects) do
if(not (GetMyTryeRange() > GetDistance(m)) and m.health < 0.75*DLib:CalcSpellDamage(m, _Q))then
self.Q:Cast(pos.x, pos.z)
end
end
end
end
if(self.E:IsReady() and self.Config.LineClear.UseE)then
value = GetNearObjectCount(myHero, self.E.range, self.minionTable.objects)
if(value > 2)then
self.E:Cast()
else
for _, m in ipairs(self.minionTable.objects) do
if(not (GetMyTryeRange() > GetDistance(m)) and m.health < 0.75*DLib:CalcSpellDamage(m, _E))then
self.E:Cast()
end
end
end
end
end
function Main:LastHit()
self.minionTable:update()
mana = myHero.mana >= (myHero.maxMana*self.Config.LastHit.Energy/100)
if not mana then return end
for _, minion in ipairs(self.minionTable.objects)do
if(self.Config.LastHit.UseQ and self.Q:IsReady() and GetDistance(minion) < self.Q.range and minion.health < 0.75 * getDmg("Q", minion, myHero))then --DLib:CalcSpellDamage(minion, _Q)
self.Q:SetSourcePosition(myHero)
self.Q:Cast(minion)
end
if(self.Config.LastHit.UseQ and self.E:IsReady() and GetDistance(minion) < self.E.range and minion.health < 0.75 * getDmg("E", minion, myHero))then -- DLib:CalcSpellDamage(minion, _E)
self.E:Cast()
end
end
end
function Main:UnderTowerFarm()
if self.targetUnderTurret ~= nil and self.targetUnderTurret.dead then
self.targetUnderTurret = nil
self.turrent = nil
end
end
function Main:JungleClear()
self.jungleTable:update()
mana = myHero.mana >= (myHero.maxMana*self.Config.JungleClear.Energy/100)
if(#self.jungleTable.objects>0 and mana )then
mob = self.jungleTable.objects[1]
if(self.W:IsReady() and self.Q:IsReady() and GetDistance(mob) < self.Q.range)then
self.W:Cast(Vector(mob).x, Vector(mob).z)
end
if(self.Q:IsReady() and GetDistance(mob) < self.Q.range )then
self:CastQ(mob)
end
if(self.E:IsReady() and GetDistance(mob) < self.E.range )then
self.E:Cast()
end
end
end
function Main:Killsteal()
targets = GetCustomTargetTable()
if #targets == 0 then return end
for _, target in ipairs(targets) do
if target == nil then return end
if(target.valid and self.Config.Misc.UseIgnite and self.IGNITE:IsReady())then
if(self.IGNITE:GetDamage(target) > target.health and GetDistance(target) <= self.IGNITE.range)then
self.IGNITE:Cast(target)
end
end
if(target.valid and not target.dead and self.Q:IsReady() and self.Config.Misc.UseQ and getDmg("Q", target, myHero) > target.health)then
if(GetDistance(target) <= self.Q.range)then
self.Q:SetSourcePosition(Vector(myHero))
self.Q:Cast(target)
elseif (self.WShadow() ~= nil and GetDistance(self.WShadow(), target) <= self.Q.range )then
self.Q:SetSourcePosition(Vector(self.WShadow()))
self.Q:Cast(target)
elseif (self.RShadow() ~= nil and GetDistance(self.RShadow(), target) <= self.Q.range )then
self.Q:SetSourcePosition(Vector(self.RShadow()))
self.Q:Cast(target)
end
end
if(target.valid and not target.dead and self.E:IsReady() and self.Config.Misc.UseE)then
if getDmg("E", target, myHero) > target.health then
if GetDistance(target) <= self.E.range then
self.E:Cast()
else
shadows = self:NearShadow(target, self.E.range)
if shadows ~= nil then
for _, shadow in ipairs(shadows) do
if GetDistance(shadow) <= self.E.range then
self.E:Cast()
end
end
end
end
end
-- if(DLib:CalcSpellDamage(target, _E) > t.health and (GetDistance(target) <= self.E.range or GetDistance(target, self:WShadow()) <= self.E.range))then
-- self.E:Cast()
-- end
end
end
end
function GetCustomTargetTable()
_t = {}
for _, enemy in ipairs(GetEnemyHeroes()) do
if(GetDistance(enemy) < 2000)then
table.insert(_t, enemy)
end
end
table.sort(_t, function(a, b) return a.health < b.health end)
return _t
end
function Main:UltStat()
if(self.R:GetName() == "ZedR")then
return 1
end
return 2
end
function Main:ShadowStage()
if(self.W:GetName() == "ZedW")then
return 1
end
return 2
end
function Main:IsBlackList(target)
return self.Config.bl["bl" .. target.charName]
end
function Main:CanDamaged(target)
for _, buff in ipairs(DONOTCASTDURINGHASTHISBUFFES) do
if (HasBuff(target, buff)) then return true end
end
return false
end
function Main:NearShadow(object, range)
if self.Shadow == nil then return end
if #self.Shadow == 0 then return end
result = {}
for _, data in ipairs(self.Shadow) do
if(GetDistance(data, object) < range) then
table.insert(result, data)
end
end
if #result == 0 then return nil end
return result
end
function Main:WShadow()
if self.Shadow == nil then return nil end
if #self.Shadow == 0 then return nil end
for _, data in ipairs(self.Shadow)do
if(data and data.valid and Vector(data) ~= Vector(self.rpos) and data.name == "Shadow") then return data end
end
return nil
end
function Main:RShadow()
if self.Shadow == nil then return nil end
if #self.Shadow == 0 then return nil end
for _, data in ipairs(self.Shadow)do
if(data and data.valid and Vector(data) == Vector(self.rpos) and data.name == "Shadow") then return data end
end
return nil
end
function Main:CastW(target)
if(self.delayw >= GetTickCount() - self.shadowdelay or self:ShadowStage() ~= 1 or HasBuff(target, "zedulttargetmark") and self.R:IsReady()) then return end
local wPos = nil
if GetDistance(target) < self.W.range then
wPos = Extends(myHero, target, GetDistance(myHero, target))
else
wPos = Extends(target, myHero, -200)
end
self.W:Cast(wPos.x, wPos.z)
self.shadowndelay = GetTickCount()
end
function Main:CastQ(target)
if not self.Q:IsReady() then return end
local WShadow = self:WShadow()
if(WShadow ~= nil and GetDistance(WShadow) <= 900 and GetDistance(target) > 450) then
self.Q:SetSourcePosition(Vector(WShadow))
self.Q:Cast(target)
else
self.Q:SetSourcePosition(Vector(myHero))
if(GetDistance(target) < 900)then
self.Q:Cast(target)
end
end
end
function Main:CastE()
if not self.E:IsReady() then return end
if(GetNearObjectCount(myHero, self.E.range, GetEnemyHeroes()) > 0)then
self.E:Cast()
end
if(self:WShadow() ~= nil and GetNearObjectCount(self:WShadow(), self.E.range, GetEnemyHeroes()) > 0 )then
self.E:Cast()
end
end
function IgniteDamage()
return 50 + 20 * myHero.level
end
class('IGNITE')
function IGNITE:__init()
self.slot = GetSummonerSlot("summonerdot")
self.range = 600
end
function IGNITE:IsReady()
if self.slot == nil then return false end
return myHero:CanUseSpell(self.slot) == READY
end
function IGNITE:GetDamage(target)
return 50 + 20 * myHero.level
end
function IGNITE:Cast(target)
CastSpell(self.slot, target)
end