-- : : i@nOrLT . ;: ., -- :s. . 6;XZst . -- .rr; ;: .rZbBF . , . . . , ;rr -- r. ;; .. ,Z#sj ., . . , ,. .,s. -- .. i: T; . ,. . r6FS. ; ,. .. .. r -- r;@Bd6HO;r5 .:, PU:r; . .. ;#@r .r -- 5B8rcbHdr;, . i@i:s, :. ;,,iEDOF@Fr ;; -- x@;:: CU;. .. .rTOdCt, . :... ,cZB@BBsrZZ2@0c: ,r -- bB0t,;@r: : LBUbHgPP; : . ;P@;CbS; sjF@E. .7. -- . r@Br, .: 5@;:r@UD5: . . .g@d;;2. sFcP6c, :. . -- rFBS;r . :..gr;jsrTDr .. . ;;DO;. ,,@HX;: : -- ;tDZc ., r;ELr.; .. , FdT; . .; i,: -- ;s0E;r ,. ;T@x;;. :. , , .6g5r; ;s, r; ;c -- .. rs2;;.., rPg5r. .; ... ., .rPgdZ.r. ..x; ;, .;7r -- rS. EOrs;.. ;nEtOc . : ., rgZirZsr .. j ;i ;r.:; -- ;i; C8Ur; jUOLUgi : .., ..;OdPF;.c; .. ;r rxr;:; ;, -- ;,; Xd8Err . jXxO5SEx, ., ,c0gHB@Zc;::. . r; .FC: X: -- .rr rUZZ;; . gTCDgXr;; sddsEEdS. .,: .r. ic ,t, -- .cr ;DC0; ,. XdEc:;2r .: jH5C6xCc .:.., .r. rL: -- . . ;s ;nOss. ,. r@dT tgc. ; j8nsrjHi .. .: .r rxC -- rc crXCr; T@;r#S;, : .cPs72;r; .. ..;;.r r;DL -- ;. ;r i@r;, :d;xB:;; ; F6t;F;i. .. ..:;:i ;s ;LrB; -- r r#d,: ; gHr;@c.r. .. ;X#sri: :, ,, ., i@; ;jrsZ -- .; ;#P6i: ,. .bCCrcj.r, ;SnFs7: ,, ,;r;r; .;5# ;c;,X: -- . i. ,.r##6r .dnnCZUgZ:r ;DOSSnr ,: ;;rFrrc;,..,ri;::;;it; .rr;;;F5 -- r. P8Xs: :rHP0O0txic sgHCXH; .;. ..;PbO@#PsrE622crrT5i:LnSttir;75OB: -- r ; r8XZ# 7BUCFS2 ;c tircDLr; . ;5j;U08B@D0SdDDbd0g7; r2r :;;t#8r -- r .r ;L#Bc; r8xCsngj.:.F5rr ;2: . Tr C#X2nindOxXS6EbBP0@s.sic@#. -- ;E .c .X@gj,:HSttsdS 0@XOt rE . .; DgZ8UFOrrdtcjEHTdPi@6 -- ;n O 2BD6L:is55CO6,gBgsXt.;:;; , . L8DXU;t7cBFCDB;ZFrbg -- i c: nPZ8ExsLxx2208OF5UC;ir ;r .. .: c0SZ:,LsxPHP#5rc;tL -- r; .c, , cZcxB@jt52SgDOCsjSiC;U,:r ; :.:iL. .6FxcjtxgZH0c;;rrE#: -- j .. ., ;ECjn8252SStFsssLxgC0c.r , ,. ,iF EDO#BSCx0DdOi ;;;LPZxcF2; -- , ,r . HnLLPnCSSt2nSFgZZiis;r ,i CdcSUjrcZxCX;;iri;.;riOO, ;ccC; -- #0. :; ,, .B2jFOSSOCOEnC2gnrxPs;cr, . :8jLnCcriC2nUCb8B@B.rxbBj ,:: 5O2@B@7 -- ,@Tr. ;X ; PtCFZn#Xg#Hx2nZ F8DFrr;; : , 5ZnPj2jsXHCxFxCFb8;;gH8#8Bd8D@PcOCinOb#@B@#L :r; -- LU.r7r,tr; idxZOj5XUnrgXn;:X8XdLF;;r ,. .: ,Hg#0Lr0HFrt8X;Ub5.:rFD8D0D#6H#@Bsrng8gOOZ0@BdOgPd2;; -- ni.rU@0# . SB;rL,r@H;;TScZLritir,c; ; . :B; CCSxrj0HFjUs;.r508@DbdbbbB@xjtXH8EUEDE0#EgPXHg0886Zc;. -- , ,. gjsi0@P; . xB5rnScPXgjjxFL .sc; .;: . : @Px6#OCrr,,;t0@B##8DDD#@@rrnt8@###H#d#0nZZUXDd#Hd0D6Exs7r: -- ;S rCi;. ,F;r;r@DT ,r. OB@DESFEx2EXZris@;; : ,, .; PBHPCLUOn.:rcS@Bbddd##88@ri#Cg@#8dXsTcnP8d8B@#DH0PD6d6D66PgFLr;.. -- ;#: ... ;r7ii, C.r@Ux.:r ;rHZs6dUOPt;bXc;;,, .. .;, :: .gs5jsncxnxFT;rUd88##HD8@riBZX@b02s7iijUBBBdDZFPHPd6Xg#H##D0HHHZZUxr -- i#; :;, F E0ni ,r DBUZHZDgTrid5; , .. ....jx: .X5xnrr7S@dr,;cFU6D##@L dPSb8PtciTCnss5CjjjXdD6PHb#8##6EE0OgggggUT -- rEr. . rs LBcFi ,L ;@UD6c2827 ;2 ;, .. . rr :ULn6Fci5@x :crLLF6d#805cFFFP82Lc555s5LLsirgB@XxZ#DgnOZ6D#b8PZSgDg5 -- ;F;,;, .rC7 ;6XHn0; ,, rSx0;.@U ;. ,,: .:. rnHH#nsZbD87 ,L5UdB8##B6Xr;XPSDD0FUtLTtSSsL7ZB88DXHPZsSjxSx26Pd8B8B#H -- ,U; .;;: cZCCr;:;bU7sg6gs . .2 L , . .. F8#dEsCB@b0;.rOPF8@##b@b5: rEd#B62cjLLnFitbLig#CDbbP5xZSn2SxxL2XPE#88O -- .Ec ;r;rcEr iPUZFCtCC0D0U . . .,.. ,,, ;PPSTCSDBU;.;TH@Hs0@db@dcr;:iXD8X5rrsOXOti;5XccLs2bBgESCFZU2sCLsTgFZ8bgx -- t6i;ri;.rZ8X6dZ5LZO6Zsii2@. . ,. . T .0 :cBr ;ir. .iEEx25O2HB. .sD@Zr;E@8B#Hr;rtCZ8BUcrtd8tsc7riZ02r7F8@HX062n5UssnFxE6d##PnC -- ;xP6xc;,iXDdd0OSCSSLTstir is;. . rnPc,ZcUCEsr5r. ;DPFx0#6X8B. rH@67rnX#FCcjn5cst0BbLrr0B@CrrirrsgP8nE8B#D6EOFUPjn8@8BBdB8UXEZ -- i; cUr: ;6B0LsUOZgdj. .,r; rb@#Hx@nis: .nBXHd88b#L;.,FB@BBD0F8#;rx6nLx2BDsrTU8HxrrrTciEOXP#B88#bHbbPUP#F2X0PXU2FtSx5s -- i@Er;: 6B5LHHOD@#jsi: ;. rcSZ6; . rPB6@02ZX,i;:c08@8@i rPsPbTtFnBgCC#8@EcrircTcgBXU#B#8D#d##b8EUbxnOXCCs5LCjTsc -- ;BEFrnr,.icSxPbdgdPU2DDs. . .. :gUgP0E0XBO sD@B88@dr:rjnbdTS5LX@8EB@8BZL77rjXCt8UP08##D#dDHd#8###ZEXCSCx5xtC5si -- iXBOjE7;r7rrsHXZUFCHdDPj. .:,: :gdgTsC252P: rD@b@@#gB8Dd6d8H0nPd888#88@DrrrridHxF8UP#bbHDd#H#6b6#8BDDUxCCxFtxsss5 -- ,5g tc., FO7 jSTn6bHL; ,. .TxTxO8EO#x CBBB@DjrLZ##UO6UH8B8@HgFUtcirrccc7Z8DL@d###06HDd###d66#0gddsxStLStsttc -- :i,,#B86gtr: :Bg5tSOPXj. ;;.;UsL0#80#B@;rB@B@X, :rsLrrL56B8HgSn25ir;riicsi;rBdXb8#Dd#DbDd6dDbDE6ZssEUC5sCjtSn52 -- 2@H@B@B@B@BECs; ;SZssx2g8@r s0sS8gsH@#c.;Cxd@C cg6r7FXcCBB2xLLUx7ritnxiLgT:ib#bD#bd#D##8E2d#8B0BHnZ0Pd#8##D8bHE -- jBEsTPBD8#88@BBSr rUjgHn@Bir6ccdSL62. C@@@@s r#BbrinZCPB8CCjjLtSUHdO6FrrP8Cx#bb##d#D#6xXDcxX#0PUd88#8b@B@B@8d0Z -- @HDtOB@8BB@DB@@B0, r. 08O8ddn;tj56D; ;bB@X;r.X@ZEOSUZHBB6LsccsSX@#UTxZt;;7@B6#8DbD#b86O5OUsCU2XntC2CFUOnXE668bdE -- xB@DdXZ5T2P88B@D@@@XSr ObPs08iTH7 ,s@B@: :s0272nSZ8B@0xcccxgD#POFZDb0r;r5tU@86DD##B0gEZSFbg5FP0ZgE#H0XZZXxCtnXF -- @BH#BBDLj;rUXBB; rH@Bbt. iBg28P@D .rE@@U ;E6Or:Csn6@BDxjrLX#8DPnTUPBBB6gsj2LT8#d#B8HZxFgxZBbxXtiriTLcr;rrixd8dF52 -- x@2HB#gnn0B@#EsTjFHZ5; .8@B@8S.:OD8@8;;O8@BHrO#ZtL2SCHB@dSCnsZ8@#6F5CEB@BELCx5CxC#B8P6Xg0ZtngtcXj;, .;txF -- F#xngD#iS0#8@8bOF5FSZ#0E#0bB@B@L:cPn.768@BD5CUFigSsX@B8XOOnFbB#OSjsX@B8ScicLtLcj6B80X2F5SUFn#; -- . ;tb6EdODdsxd0HPB#8BXjO2gBj:rcUH@B@bi,i;0BB#@L;Cs.rZFd@8@6d8XxB8EjirnB@Hxr;cnjcsxOP8B88H6EFnOr;. -- .P, @B@BbHbdOHBLZ0nEUOB8BD#6g#6Lcr, ,CB@@OgZB@DdBXrOc5nZd8XDBBDxLSZFcjU@@#TrrSDB@DgDbBbbd60DHgF0;, -- ,@BZ, :@B@8D6DDb0d8HZP;0#Z5PD#6##BDUEdZSrr ;@B@#@B@8@BBPn525FT28@6Ltn5sj5n@BSriiOBP52UXx5LTiiicttjn7, -- , rB@B@B@BB#B88D#F#gUnP@;;gD#XP08DPZdb8gCE@#nr.U@i:;irrnBB8FssTcsZ@8CCZFOZnx5cjcrrcLCUOZXZXOgg0gXSL5HC; -- ;; S@8bbBbd#bD888DcEXs7TBb;c6gHB@B@bDPPH86SCZgES@O rHSTcTgBBXris6bBBZTLctLLjcitCStxO8B@8#d8@@B@8DZ55dO; -- .; c@B86#D#d#dDDbd80Z#nXFj0P2UZUU5OOBb#d6E8DZjjn8BZ:DgE2SgU0@888@B@BdgHPEFgPFx0FUg8@@BD6#88bb##HH6#bb#Z; -- ;.X@Bd8DbDb##D8#bH8dB06802PEUFZXUsi6@D#B#gB8PnCH@86FUxC5UOP#@BP;:,cZ@8nS5CFSgHB@@B@BBbBB8bbDb##d0gPn2sj; -- : ,B@8BB8#8#b#b#8#DHbbB8B8DXns0U5XD0#88sZ88dB8HXB0#BBsccstP6@BP,.;r;rs#Ond0xCsstSOEOPH8b#b8d#D8b#EFxZnUsj. -- ;c ; S@88#8#8#8D##B8BD#b#0XZ88d6ggd0UngPZX#Pg#B#8B@d;;D@@PZZd8@BP7tnUd8Hgd@P#DEFOSCs55C5FDBD#b8#8bB#HOjisxSr; -- rr;r.;@@8#8#bb8###bDDd88dPHPntngdPg#@B@B@XEO6db88bbB0r,;t6@B@BBdSSXscCX60nP80FFxUCUUDB@b@B@D#d#B@b88B88OE2TcO . -- ;;;U HBB#8#b#8#8###8##Xd#Bbd##P6H@BBs,,:;rSgsFxdH8Bd;;:SFFtnB@Ht6FtsF0OXFZH8B@b8d2XH0HDb8@BD0#8bH#88#8#BB#SDB . -- ;; 2r.B@D8B@b88B888BD#d6UHdBgO08EgZT, ,OdDFxdB@Z.:CdnUXtr8@xtCnZOOn5UDB8XLsTLjxC5cjiriO8B@nDd#b8b#dZ0DgPOr -- r;7j:Z ;b8@B@B88B8B8B#D#B#DDbbB8BHCC ;j#88B@BBisHnxscst8B@#OZ0OFxP#BB8ZEOXFxsjTTii7ri@@iF@88b###6#ZOXXxc7, -- . : r8rx .rLOH@B@8b#bD#6DDDd8B@6UTZE. t8#n#BBBBnF2XxUU8BUsOZbB8#88#Dd0dgE2Stx2tsCSOD@#..@BB#8d8XsZOC5FHUT; -- :irg,Tg;jj;...;Tn08@b8##DbD8B@BX., . .:s#USZB@8#B@8#D8@@;cxXb8#bd0ZOnSsxT7sSUXX#DBB@L jB8#BdD#80EOXnXO6ST -- ::;P;Cj rCHZtr: :iLE@B@8#8@B@BO .rODDUDB8DB#Dd##@giH#D8bB#8HPUOCDBB8BB@B806B@;,;rB@886#b#D@8b8@8bOxE -- . :2 ;cr :rrtSr ..,c2gE600; ,jUT2#8gPPH0#D;L0g0DdP#dDHdXZSg0DgDHdFSBb ,;:s@H6#Dd#gXZEEOUXn#H@PS: -- local ScriptVersion = "v2.2" local Q = { Range = 1050, Delay = 0.50, Speed = 1200, Width = 70} local W = { Range = 950, Delay = 0.25} local E = { Range = 400, Delay = 0.25, Speed = 1100} local R = { Range = 320, Delay = 0.25} --local Qicon = "https://vignette4.wikia.nocookie.net/leagueoflegends/images/d/d5/Death_Sentence.png" --local Wicon = "https://vignette4.wikia.nocookie.net/leagueoflegends/images/4/44/Dark_Passage.png" --local Eicon = "https://vignette2.wikia.nocookie.net/leagueoflegends/images/7/71/Flay.png" --local Ricon = "https://vignette4.wikia.nocookie.net/leagueoflegends/images/c/c1/The_Box.png" local function Ready(spell) return myHero:GetSpellData(spell).currentCd == 0 and myHero:GetSpellData(spell).level > 0 and myHero:GetSpellData(spell).mana <= myHero.mana and Game.CanUseSpell(spell) == 0 end local function EnemiesAround(pos, range, team) local Count = 0 for i = 1, Game.HeroCount() do local m = Game.Hero(i) if m and m.team == 200 and not m.dead and m.pos:DistanceTo(pos, m.pos) < 125 then Count = Count + 1 end end return Count end local function IsImmobileTarget(unit) for i = 0, unit.buffCount do local buff = unit:GetBuff(i) if buff and (buff.type == 5 or buff.type == 11 or buff.type == 29 or buff.type == 24 or buff.name == "recall") and buff.count > 0 then return true end end return false end local sqrt = math.sqrt local function GetDistanceSqr(p1, p2) local dx = p1.x - p2.x local dz = p1.z - p2.z return (dx * dx + dz * dz) end local function GetDistance(p1, p2) return sqrt(GetDistanceSqr(p1, p2)) end local function GetDistance2D(p1,p2) return sqrt((p2.x - p1.x)*(p2.x - p1.x) + (p2.y - p1.y)*(p2.y - p1.y)) end local function ClosestToMouse(p1, p2) if GetDistance(mousePos, p1) > GetDistance(mousePos, p2) then return p2 else return p1 end end local function AlliesAround(pos, range, team) local Count = 0 for i = 1, Game.HeroCount() do local m = Game.Hero(i) if m and m.team == 100 and not m.dead and m.pos:DistanceTo(pos, m.pos) < 600 then Count = Count + 1 end end return Count end local function GetTarget(range) local target = nil if Orb == 1 then target = EOW:GetTarget(range) elseif Orb == 2 then target = _G.SDK.TargetSelector:GetTarget(range) elseif Orb == 3 then target = GOS:GetTarget(range) end return target end local intToMode = { [0] = "", [1] = "Combo", [2] = "Harass", [3] = "LastHit", [4] = "Clear" } local function GetMode() if Orb == 1 then return intToMode[EOW.CurrentMode] elseif Orb == 2 then if _G.SDK.Orbwalker.Modes[_G.SDK.ORBWALKER_MODE_COMBO] then return "Combo" elseif _G.SDK.Orbwalker.Modes[_G.SDK.ORBWALKER_MODE_HARASS] then return "Harass" elseif _G.SDK.Orbwalker.Modes[_G.SDK.ORBWALKER_MODE_LANECLEAR] or _G.SDK.Orbwalker.Modes[_G.SDK.ORBWALKER_MODE_JUNGLECLEAR] then return "Clear" elseif _G.SDK.Orbwalker.Modes[_G.SDK.ORBWALKER_MODE_LASTHIT] then return "LastHit" elseif _G.SDK.Orbwalker.Modes[_G.SDK.ORBWALKER_MODE_FLEE] then return "Flee" end else return GOS.GetMode() end end local _OnVision = {} function OnVision(unit) if _OnVision[unit.networkID] == nil then _OnVision[unit.networkID] = {state = unit.visible , tick = GetTickCount(), pos = unit.pos} end if _OnVision[unit.networkID].state == true and not unit.visible then _OnVision[unit.networkID].state = false _OnVision[unit.networkID].tick = GetTickCount() end if _OnVision[unit.networkID].state == false and unit.visible then _OnVision[unit.networkID].state = true _OnVision[unit.networkID].tick = GetTickCount() end return _OnVision[unit.networkID] end local visionTick = GetTickCount() function OnVisionF() if GetTickCount() - visionTick > 100 then for i,v in pairs(GetEnemyHeroes()) do OnVision(v) end end end local _OnWaypoint = {} function OnWaypoint(unit) if _OnWaypoint[unit.networkID] == nil then _OnWaypoint[unit.networkID] = {pos = unit.posTo , speed = unit.ms, time = Game.Timer()} end if _OnWaypoint[unit.networkID].pos ~= unit.posTo then _OnWaypoint[unit.networkID] = {startPos = unit.pos, pos = unit.posTo , speed = unit.ms, time = Game.Timer()} DelayAction(function() local time = (Game.Timer() - _OnWaypoint[unit.networkID].time) local speed = GetDistance2D(_OnWaypoint[unit.networkID].startPos,unit.pos)/(Game.Timer() - _OnWaypoint[unit.networkID].time) if speed > 1250 and time > 0 and unit.posTo == _OnWaypoint[unit.networkID].pos and GetDistance(unit.pos,_OnWaypoint[unit.networkID].pos) > 200 then _OnWaypoint[unit.networkID].speed = GetDistance2D(_OnWaypoint[unit.networkID].startPos,unit.pos)/(Game.Timer() - _OnWaypoint[unit.networkID].time) end end,0.05) end return _OnWaypoint[unit.networkID] end local function GetPred(unit, speed, delay) local speed = speed or math.huge local delay = delay or 0.25 local unitSpeed = unit.ms if OnWaypoint(unit).speed > unitSpeed then unitSpeed = OnWaypoint(unit).speed end if OnVision(unit).state == false then local unitPos = unit.pos + Vector(unit.pos,unit.posTo):Normalized() * ((GetTickCount() - OnVision(unit).tick)/1000 * unitSpeed) local predPos = unitPos + Vector(unit.pos,unit.posTo):Normalized() * (unitSpeed * (delay + (GetDistance(myHero.pos,unitPos)/speed))) if GetDistance(unit.pos,predPos) > GetDistance(unit.pos,unit.posTo) then predPos = unit.posTo end return predPos else if unitSpeed > unit.ms then local predPos = unit.pos + Vector(OnWaypoint(unit).startPos,unit.posTo):Normalized() * (unitSpeed * (delay + (GetDistance(myHero.pos,unit.pos)/speed))) if GetDistance(unit.pos,predPos) > GetDistance(unit.pos,unit.posTo) then predPos = unit.posTo end return predPos elseif IsImmobileTarget(unit) then return unit.pos else return unit:GetPrediction(speed,delay) end end end local castSpell = {state = 0, tick = GetTickCount(), casting = GetTickCount() - 1000, mouse = mousePos} local function CustomCast(spell, pos, delay) if pos == nil then return end if _G.EOWLoaded or _G.SDK then Control.CastSpell(spell, pos) elseif _G.GOS then local ticker = GetTickCount() if castSpell.state == 0 and ticker - castSpell.casting > delay + Game.Latency() and pos:ToScreen().onScreen then castSpell.state = 1 castSpell.mouse = mousePos castSpell.tick = ticker end if castSpell.state == 1 then if ticker - castSpell.tick < Game.Latency() then Control.SetCursorPos(pos) Control.KeyDown(spell) Control.KeyUp(spell) castSpell.casting = ticker + delay DelayAction(function() if castSpell.state == 1 then Control.SetCursorPos(castSpell.mouse) castSpell.state = 0 end end, Game.Latency()/1000) end if ticker - castSpell.casting > Game.Latency() then Control.SetCursorPos(castSpell.mouse) castSpell.state = 0 end end end end local function EnableOrb(bool) if Orb == 1 then EOW:SetMovements(bool) EOW:SetAttacks(bool) elseif Orb == 2 then _G.SDK.Orbwalker:SetMovement(bool) _G.SDK.Orbwalker:SetAttack(bool) else GOS.BlockMovement = not bool GOS.BlockAttack = not bool end end local function EnableAttack(bool) if Orb == 1 then EOW:SetAttacks(bool) elseif Orb == 2 then _G.SDK.Orbwalker:SetAttack(bool) else GOS.BlockAttack = not bool end end class "Thresh" function Thresh:__init() if _G.EOWLoaded then Orb = 1 elseif _G.SDK and _G.SDK.Orbwalker then Orb = 2 end self:LoadMenu() Callback.Add("Tick", function() self:Tick() end) Callback.Add("Draw", function() self:Draw() end) end function Thresh:LoadMenu() Tocsin = MenuElement({type = MENU, id = "ThreshTocsin", name = "ThreshTocsin"}) Tocsin:MenuElement({name = "Thresh", drop = {ScriptVersion}}) --Combo Tocsin:MenuElement({type = MENU, id = "Combo", name = "Combo Settings"}) Tocsin.Combo:MenuElement({id = "Q", name = "Use [Q]", value = true}) Tocsin.Combo:MenuElement({id = "W", name = "Use [W]", value = true}) Tocsin.Combo:MenuElement({id = "E", name = "Use [E]", value = true}) Tocsin.Combo:MenuElement({id = "Key", name = "Toggle: E Push-Pull Key", key = string.byte("T"), toggle = true}) Tocsin.Combo:MenuElement({id = "R", name = "Use [R]", value = true}) Tocsin.Combo:MenuElement({id = "ER", name = "Min enemies to use R", value = 1, min = 1, max = 5}) --Harass Tocsin:MenuElement({type = MENU, id = "Harass", name = "Harass Settings"}) Tocsin.Harass:MenuElement({id = "Q", name = "Use [Q]", value = true}) Tocsin.Harass:MenuElement({id = "E", name = "Use [E]", value = true}) Tocsin.Harass:MenuElement({id = "Mana", name = "Min Mana to Harass [%]", value = 0.30, min = 0.05, max = 1, step = 0.01}) --Flee Tocsin:MenuElement({type = MENU, id = "Flee", name = "Flee or YOLO"}) Tocsin.Flee:MenuElement({id = "E", name = "Use [E]", value = true}) Tocsin.Flee:MenuElement({id = "W", name = "Use [W]", value = true}) --Draw Tocsin:MenuElement({type = MENU, id = "Draw", name = "Draw Settings"}) Tocsin.Draw:MenuElement({id = "Q", name = "Draw [Q] Range", value = true}) Tocsin.Draw:MenuElement({id = "Push", name = "Push Toggle", value = true}) end function Thresh:Tick() if myHero.dead then return end local Mode = GetMode() if Mode == "Combo" then self:Combo() elseif Mode == "Harass" then self:Harass() elseif Mode == "Flee" then self:Flee() end end function Thresh:Combo() local target = GetTarget(1150, "AD") if not target then return end if target ~= myHero.team then if Tocsin.Combo.Q:Value() and Ready(_Q) and myHero.pos:DistanceTo(target.pos) < 1025 and myHero.pos:DistanceTo(target.pos) > 300 then self:CastQ(target) end if Tocsin.Combo.R:Value() and Ready(_R) and myHero.pos:DistanceTo(target.pos) < 320 then self:CastR(target) end if Tocsin.Combo.W:Value() and Ready(_W) then self:CastW(target) end if Tocsin.Combo.E:Value() and Ready(_E) and myHero.pos:DistanceTo(target.pos) < 420 then self:CastE(target) end end end function Thresh:Harass() local target = GetTarget(950, "AD") if myHero.mana/myHero.maxMana < Tocsin.Harass.Mana:Value() then return end if not target then return end if target ~= myHero.team then if Tocsin.Harass.E:Value() and Ready(_E) and myHero.pos:DistanceTo(target.pos) < 420 then self:CastE(target) end if Tocsin.Harass.Q:Value() and Ready(_Q) and not Ready(_E) and myHero.pos:DistanceTo(target.pos) > 300 then self:CastQ(target) end if Tocsin.Combo.W:Value() and Ready(_W) and not Ready(_Q) and not Ready(_E) then self:CastW(target) end end end function Thresh:Flee() local target = GetTarget(650, "AD") if not target then return end if myHero.pos:DistanceTo(target.pos) < 550 then EnableAttack(false) if Tocsin.Flee.E:Value() and Ready(_E) then if myHero.pos:DistanceTo(target.pos) < 480 then local pos = GetPred(target, E.Speed, 0.25 + (Game.Latency()/1000)) CustomCast(HK_E, pos, 250) end end if Tocsin.Flee.W:Value() and Ready(_W) then Control.CastSpell(HK_W) end EnableAttack(true) end end function Thresh:CastQ(target) if myHero.pos:DistanceTo(target.pos) < 1025 then if Ready(_Q) and ValidTarget(target, 1050) then if target:GetCollision(Q.Width, Q.Speed, Q.Delay) == 0 then local pos = GetPred(target, Q.Speed, 0.25 + (Game.Latency()/1000)) CustomCast(HK_Q, pos, 250) end end end end function Thresh:CastW(target) for i,ally in pairs(self.GetAllyHeroes()) do if self:IsValidTarget(ally,950) and myHero.pos:DistanceTo(ally.pos) < 950 then if not ally.isMe then for i = 1, Game.HeroCount() do local hero = Game.Hero(i) if hero.team == myHero.team and not hero.isMe and myHero.pos:DistanceTo(target.pos) < 250 then if Tocsin.Combo.W:Value() and Ready(_W) and not Ready(_Q) and not ally.isMe then EnableOrb(false) Control.CastSpell(HK_W,ally) EnableOrb(true) Control.Attack(target) end end end end end end end function Thresh:CastE(target) if myHero.pos:DistanceTo(target.pos) < 420 then if Tocsin.Combo.Key:Value() == false then local pos = GetPred(target, E.Speed, 0.25 + (Game.Latency()/1000)) CustomCast(HK_E, myHero.pos:Extended(target.pos, -100), 250) end end if myHero.pos:DistanceTo(target.pos) < 420 then if Tocsin.Combo.Key:Value() == true then local pos = GetPred(target, E.Speed, 0.25 + (Game.Latency()/1000)) CustomCast(HK_E, pos, 250) end end end function Thresh:CastR(target) local target = GetTarget(420) if self:CountEnemys(420) >= Tocsin.Combo.ER:Value() then if not target.dead and not target.isImmune then if target.distance <= 320 then Control.CastSpell(HK_R) end end end end function Thresh:CountEnemys(range) local heroesCount = 0 for i = 1,Game.HeroCount() do local enemy = Game.Hero(i) if enemy.team ~= myHero.team and enemy.valid and enemy.pos:DistanceTo(myHero.pos) < 400 then heroesCount = heroesCount + 1 end end return heroesCount end function Thresh:GetAllyHeroes() local _AllyHeroes if _AllyHeroes then return _AllyHeroes end _AllyHeroes = {} for i = 1, Game.HeroCount() do local unit = Game.Hero(i) if unit.isAlly then table.insert(_AllyHeroes, unit) end end return _AllyHeroes end function Thresh:IsValidTarget(unit,range) return unit ~= nil and unit.valid and unit.visible and not unit.dead and unit.isTargetable and not unit.isImmortal and unit.pos:DistanceTo(myHero.pos) <= 1000 end function ValidTarget(target, range) range = range and range or math.huge return target ~= nil and target.valid and target.visible and not target.dead and target.distance <= range end function Thresh:Draw() if Tocsin.Draw.Q:Value() and Ready(_Q) then Draw.Circle(myHero.pos, 1050, 3, Draw.Color(255,255, 162, 000)) end if Tocsin.Draw.Push:Value() then local textPos = myHero.pos:To2D() if Tocsin.Combo.Key:Value() then Draw.Text("Push: On", 20, textPos.x - 33, textPos.y + 60, Draw.Color(255, 000, 255, 000)) else Draw.Text("Push: Off", 20, textPos.x - 33, textPos.y + 60, Draw.Color(255, 225, 000, 000)) end end end Callback.Add("Load", function() if myHero.charName ~= "Thresh" then return end if _G[myHero.charName] then _G[myHero.charName]() print("Tocsin "..myHero.charName.." "..ScriptVersion.." Loaded") print("Combo = Q R W aa E aa, Harass = E aa Q W aa") else print ("Tocsin doesn't support "..myHero.charName.." shutting down...") return end end)