if myHero.charName ~= "Jhin" then return end local LoLVer = "7.4" local ScrVer = 6 local function Jhin_Update(data) if tonumber(data) > ScrVer then PrintChat("[Shulepin][Jhin] New version found! " .. data) PrintChat("[Shulepin][Jhin] Downloading update, please wait...") DownloadFileAsync("https://raw.githubusercontent.com/BluePrinceEB/GoS/master/Jhin.lua", SCRIPT_PATH .. "Jhin.lua", function() PrintChat("[Shulepin][Jhin] Update Complete, please 2x F6!") return end) else PrintChat("[Shulepin][Jhin] No updates found!") end end GetWebResultAsync("https://raw.githubusercontent.com/BluePrinceEB/GoS/master/Jhin.version", Jhin_Update) require("GoSWalk") local GPred = _G.gPred local Config = MenuConfig("Jhin", "Jhin | Artisan Killer") local sp = {[0]="Q",[1]="W",[2]="E",[3]="R"} local CCType = { [5] = "Stun", [8] = "Taunt", [11] = "Snare", [21] = "Fear", [22] = "Charm", [24] = "Suppression", } local Mark = false local Reload = false local UltOn = false local Minions = {} local Skin_Table = {["Jhin"] = {"Classic", "High Noon"}} local LvL_Table = { [1] = {_Q,_E,_W,_Q,_Q,_R,_Q,_E,_Q,_E,_R,_E,_E,_W,_W,_R,_W,_W}, [2] = {_Q,_W,_E,_Q,_Q,_R,_Q,_W,_Q,_W,_R,_W,_W,_E,_E,_R,_E,_E} } local Q = { range = 600 } local W = { range = 2550, radius = 20 , speed = 5000, delay = 0.75, type = "line", col = {"minion","champion"}} local E = { range = 750 , radius = 150 , speed = 1600, delay = 0.85, type = "circular", col = {"minion","champion"}} local R = { range = 3500 , radius = 40 , speed = 4500, delay = 0.2, type = "line", col = {"minion","champion"}} Config:SubMenu("C", "Combat Settings") Config.C:Boolean("Q", "Use Q", true) Config.C:Boolean("W", "Use W", true) Config.C:Boolean("E", "Use E", true) Config.C:KeyBinding("CKey", "Combat Key", string.byte(" ")) Config.C:SubMenu("AS", "Advanced Settings") Config.C.AS:Boolean("W", "Use W on Immobile", true) Config.C.AS:Boolean("E", "Use E on Immobile", true) Config.C.AS:DropDown("QMode", "Q Cast Mode", 2, {"Always", "After Attack"}) Config:SubMenu("U", "Ultimate Settings") Config.U:KeyBinding("TapKey", "R Tap Key", string.byte("T")) Config.U:KeyBinding("CancelKey", "R Cancel Key", string.byte("G")) Config:SubMenu("M", "Mixed Settings") Config.M:Boolean("Q", "Use Q", true) Config.M:Boolean("W", "Use W", true) Config.M:Boolean("E", "Use E", true) Config.M:Slider("Mana", "Min. Mana(%) For Mixed Mode", 50, 0, 100, 1) Config.M:KeyBinding("MKey", "Mixed Key", string.byte("C")) Config:SubMenu("L", "LastHit Settings") Config.L:Boolean("Q", "Use Q", true) Config.L:Slider("Mana", "Min. Mana(%) For LastHit Mode", 50, 0, 100, 1) Config.L:KeyBinding("LKey", "LastHit Key", string.byte("X")) Config:SubMenu("W", "WaveClear Settings") Config.W:Boolean("Q", "Use Q", true) Config.W:Boolean("E", "Use E", true) Config.W:Slider("Mana", "Min. Mana(%) For WaveClear Mode", 50, 0, 100, 1) Config.W:KeyBinding("WKey", "WaveClear Key", string.byte("V")) Config:SubMenu("E", "Extra Settings") Config.E:SubMenu("K", "KillSteal Settings") Config.E.K:Boolean("Q", "Use Q", true) Config.E.K:Boolean("W", "Use W", true) Config.E:SubMenu("D", "Drawings") Config.E.D:Boolean("Q", "Draw Q Range", true) Config.E.D:Boolean("W", "Draw W Range", true) Config.E.D:Boolean("E", "Draw E Range", true) Config.E.D:Boolean("R", "Draw R Range", true) Config.E.D:Boolean("RM", "Draw R Range on Minimap", true) Config.E.D:Boolean("HP", "Draw Damage Indicator", true) Config.E:SubMenu("Skin", "Skin Changer") Config.E.Skin:DropDown('skin',"Select A Skin:", 1, Skin_Table[myHero.charName], function(model) HeroSkinChanger(myHero, model - 1) print(Skin_Table[myHero.charName][model] .." ".. myHero.charName .. " Loaded!") end, true) Config.E:SubMenu("H", "Hit Chance") for s = 1, 3, 1 do Config.E.H:DropDown("H"..sp[s], "Spell: "..sp[s], 1, {"Low","Medium","High"}) end Config.E:SubMenu("LvL", "Auto LvLUp") Config.E.LvL:Boolean("E", "Enabled") Config.E.LvL:Slider("SL", "Start at X LvL", 2, 1, 18) Config.E.LvL:DropDown("S", "Sequence", 2, {"Q-E-W", "Q-W-E"}) Config:Info("i", "Script Version: "..LoLVer) Config:Info("i", "By Shulepin") local function Mode() if IOW_Loaded then return IOW:Mode() elseif DAC_Loaded then return DAC:Mode() elseif PW_Loaded then return PW:Mode() elseif GoSWalkLoaded and GoSWalk.CurrentMode then return ({"Combo", "Harass", "LaneClear", "LastHit"})[GoSWalk.CurrentMode+1] elseif AutoCarry_Loaded then return DACR:Mode() elseif _G.SLW_Loaded then return SLW:Mode() elseif EOW_Loaded then return EOW:Mode() end return "" end local function Jhin_CalcDmg(spell, target) local dmg = { [_Q] = 25+25*GetCastLevel(myHero, _Q) + GetBonusDmg(myHero)*((25+5*GetCastLevel(myHero, _Q))/100) + GetBonusAP(myHero)*.6, [_W] = 15+35*GetCastLevel(myHero, _W) + GetBonusDmg(myHero)*.5, [_E] = -40+60*GetCastLevel(myHero, _E) + GetBonusDmg(myHero)*1.2 + GetBonusAP(myHero), ["R1"] = -20+60*GetCastLevel(myHero, _R) + GetBonusDmg(myHero)*.2*(1 +(100 - GetPercentHP(target))), ["R2"] = -20+60*GetCastLevel(myHero, _R) + GetBonusDmg(myHero)*.2*(1 +(100 - GetPercentHP(target)))*2 } return dmg[spell] end local function Jhin_LvL() if GetLevelPoints(myHero) > 0 and Config.E.LvL.E:Value() and GetLevel(myHero) >= Config.E.LvL.SL:Value() then DelayAction(function() LevelSpell(LvL_Table[Config.E.LvL.S:Value()][GetLevel(myHero)+1-GetLevelPoints(myHero)]) end, math.random(0.250, 0.850)) end end local function Jhin_GetHPBarPos(enemy) local barPos = GetHPBarPos(enemy) local BarPosOffsetX = -50 local BarPosOffsetY = 46 local CorrectionY = 39 local StartHpPos = 31 local StartPos = Vector(barPos.x , barPos.y, 0) local EndPos = Vector(barPos.x + 108 , barPos.y , 0) return Vector(StartPos.x, StartPos.y, 0), Vector(EndPos.x, EndPos.y, 0) end local function Jhin_DrawLineHPBar(damage, text, unit, team) if unit.dead or not unit.visible then return end local p = WorldToScreen(0, Vector(unit.x, unit.y, unit.z)) local thedmg = 0 local line = 2 local linePosA = { x = 0, y = 0 } local linePosB = { x = 0, y = 0 } local TextPos = { x = 0, y = 0 } if damage >= unit.health then thedmg = unit.health - 1 text = "KILLABLE!" else thedmg = damage text = "Possible Damage" end thedmg = math.round(thedmg) local StartPos, EndPos = Jhin_GetHPBarPos(unit) local Real_X = StartPos.x + 24 local Offs_X = (Real_X + ((unit.health - thedmg) / unit.maxHealth) * (EndPos.x - StartPos.x - 2)) if Offs_X < Real_X then Offs_X = Real_X end local mytrans = 350 - math.round(255*((unit.health-thedmg)/unit.maxHealth)) if mytrans >= 255 then mytrans=254 end local my_bluepart = math.round(400*((unit.health-thedmg)/unit.maxHealth)) if my_bluepart >= 255 then my_bluepart=254 end if team then linePosA.x = Offs_X - 24 linePosA.y = (StartPos.y-(30+(line*15))) linePosB.x = Offs_X - 24 linePosB.y = (StartPos.y+10) TextPos.x = Offs_X - 20 TextPos.y = (StartPos.y-(30+(line*15))) else linePosA.x = Offs_X-125 linePosA.y = (StartPos.y-(30+(line*15))) linePosB.x = Offs_X-125 linePosB.y = (StartPos.y-15) TextPos.x = Offs_X-122 TextPos.y = (StartPos.y-(30+(line*15))) end DrawLine(linePosA.x, linePosA.y, linePosB.x, linePosB.y , 2, ARGB(mytrans, 255, my_bluepart, 0)) DrawText(tostring(thedmg).." "..tostring(text), 15, TextPos.x, TextPos.y , ARGB(mytrans, 255, my_bluepart, 0)) end local function Jhin_HitChance(m, s) if m["H"..sp[s]]:Value() == 1 then return 0 elseif m["H"..sp[s]]:Value() == 2 then return .45 elseif m["H"..sp[s]]:Value() == 3 then return .7 end end local function Jhin_IssueOrder(Order) if (Order.flag == 2 or Order.flag == 3) and UltOn == true then BlockOrder() end end local function Jhin_SpellCast(spell) for i = 0, 2, 1 do if UltOn == true and spell.spellID == i then BlockCast() end end end local function Jhin_PS(unit, spell) if not unit or not spell then return end if unit.isMe and spell.name == "JhinR" then UltOn = true end end local function Jhin_UpdateBuff(unit, buff) if not unit or not buff then return end if unit.isMe and buff.Name == "JhinPassiveReload" then Reload = true end if not unit.isMe and unit.team ~= myHero.team and CCType[buff.Type] then if myHero:CanUseSpell(_W) == READY and GetDistance(unit) <= W.range and Config.C.AS.W:Value() then CastSkillShot(_W, unit) end if myHero:CanUseSpell(_E) == READY and GetDistance(unit) <= E.range and Config.C.AS.E:Value() then CastSkillShot(_E, unit) end end end local function Jhin_RemoveBuff(unit, buff) if not unit or not buff then return end if unit.isMe and buff.Name == "JhinPassiveReload" then Reload = false end end local function Jhin_CastQ(target, range) if myHero:CanUseSpell(_Q) == READY and ValidTarget(target, range) then CastTargetSpell(target, _Q) end end local function Jhin_CastW(target, range) if myHero:CanUseSpell(_W) == READY and ValidTarget(target, range) and GotBuff(target, "jhinespotteddebuff") > 0 then local P = GPred:GetPrediction(target,myHero,W,false,false) if P and P.HitChance >= Jhin_HitChance(Config.E.H, 1) then CastSkillShot(_W, P.CastPosition) end end end local function Jhin_CastW2(target, range) if myHero:CanUseSpell(_W) == READY and ValidTarget(target, range) then local P = GPred:GetPrediction(target,myHero,W,false,false) if P and P.HitChance >= Jhin_HitChance(Config.E.H, 1) then CastSkillShot(_W, P.CastPosition) end end end local function Jhin_CastE(target, range) if myHero:CanUseSpell(_E) == READY and ValidTarget(target, range) then local P = GPred:GetPrediction(target,myHero,E,false,false) if P and P.HitChance >= Jhin_HitChance(Config.E.H, 2) then CastSkillShot(_E, P.CastPosition) end end end local function Jhin_CastR(target, range) if myHero:CanUseSpell(_R) == READY and myHero:GetSpellData(_R).name == "JhinR" and ValidTarget(target, range) then CastSkillShot(_R, target) end end local function Jhin_CastRMis(target, range) if myHero:CanUseSpell(_R) == READY and myHero:GetSpellData(_R).name == "JhinRShot" and ValidTarget(target, range) then local P = GPred:GetPrediction(target,myHero,R,false,false) if P and P.HitChance >= Jhin_HitChance(Config.E.H, 3) then CastSkillShot(_R, P.CastPosition) end end end local function Jhin_PSC(unit, spell) if not unit or not spell then return end if unit.isMe and spell.name:lower():find("attack") and (Mode() == "Combo" or Config.C.CKey:Value()) then local target = GetCurrentTarget() if Config.C.AS.QMode:Value() == 2 and Config.C.Q:Value() then Jhin_CastQ(target, Q.range) end if Config.C.E:Value() then Jhin_CastE(target, E.range) end end end local function EnemyMinionsAround(range, pos) local Count = 0 if pos == nil then return 0 end for _, M in pairs(Minions) do if GetDistance(pos, M) < range then Count = Count + 1 end end return Count end local function Jhin_Update() Jhin_LvL() if myHero:GetSpellData(_R).name == "JhinRShot" then UltOn = true else UltOn = false end if Config.U.CancelKey:Value() then UltOn = false DelayAction(function() MoveToXYZ(GetMousePos()) end, 0.050) end if Reload == true and (Mode() == "Combo" or Config.C.CKey:Value()) then local target = GetCurrentTarget() Jhin_CastQ(target, Q.range) end for _, M in pairs(minionManager.objects) do if M.valid and M.alive and M.team == MINION_ENEMY and GetDistance(myHero, M) < W.range then Minions[M.networkID] = M else Minions[M.networkID] = nil end end end local function Jhin_Combo(target) if Mode() == "Combo" or Config.C.CKey:Value() then if Config.C.Q:Value() and Config.C.AS.QMode:Value() == 1 then Jhin_CastQ(target, Q.range) end if Config.C.W:Value() then Jhin_CastW(target, W.range) end end end local function Jhin_Mixed(target) if (Mode() == "Harass" or Config.M.MKey:Value()) and GetPercentMP(myHero) >= Config.M.Mana:Value() then if Config.M.Q:Value() then Jhin_CastQ(target, Q.range) end if Config.M.W:Value() then Jhin_CastW(target, W.range) end if Config.M.E:Value() then Jhin_CastE(target, E.range) end end end local function Jhin_WaveClear() if (Mode() == "LaneClear" or Config.W.WKey:Value()) and GetPercentMP(myHero) >= Config.W.Mana:Value() then for _, M in pairs(Minions) do if GetDistance(M) < Q.range and Config.W.Q:Value() then CastTargetSpell(M, _Q) end if EnemyMinionsAround(300, M) > 3 and GetDistance(M) < E.range and Config.W.E:Value() then CastSkillShot(_E, M) end end end end local function Jhin_KillSteal() for _, target in pairs(GetEnemyHeroes()) do if GetCurrentHP(target) + GetDmgShield(target) < CalcDamage(myHero, target, Jhin_CalcDmg(_Q, target) ,0) and Config.E.K.Q:Value() then Jhin_CastQ(target, Q.range) end if GetCurrentHP(target) + GetDmgShield(target) < CalcDamage(myHero, target, Jhin_CalcDmg(_W, target) ,0) and Config.E.K.W:Value() then Jhin_CastW2(target, W.range) end end end local function Jhin_LastHit() if (Mode() == "LastHit" or Config.L.LKey:Value()) and GetPercentMP(myHero) >= Config.L.Mana:Value() then for _, M in pairs(Minions) do if GetDistance(M) < Q.range and Config.L.Q:Value() and GetCurrentHP(M) < Jhin_CalcDmg(_Q, M) then CastTargetSpell(M, _Q) end end end end local function Jhin_TapKey(target, KeyMenu) if KeyMenu then Jhin_CastR(target, R.range) Jhin_CastRMis(target, R.range) end end local function Jhin_Draw() if not myHero.dead then local Hero = GetOrigin(myHero) if myHero:CanUseSpell(_Q) == READY and Config.E.D.Q:Value() then DrawCircle(Hero,Q.range,1,255,ARGB(80,220,220,220)) end if myHero:CanUseSpell(_W) == READY and Config.E.D.W:Value() then DrawCircle(Hero,W.range,1,255,ARGB(80,220,220,220)) end if myHero:CanUseSpell(_E) == READY and Config.E.D.E:Value() then DrawCircle(Hero,E.range,1,255,ARGB(80,220,220,220)) end if myHero:CanUseSpell(_R) == READY and Config.E.D.R:Value() then DrawCircle(Hero,R.range,1,255,ARGB(80,220,220,220)) end end for i, Enemy in pairs(GetEnemyHeroes()) do if not Enemy.dead and Enemy.visible and Config.E.D.HP:Value() then local dmg = GetBonusDmg(myHero)+GetBaseDamage(myHero) if myHero:CanUseSpell(_Q) == READY and not Enemy.dead then dmg = dmg + CalcDamage(myHero, Enemy, Jhin_CalcDmg(_Q, Enemy), 0) end if myHero:CanUseSpell(_W) == READY and not Enemy.dead then dmg = dmg + CalcDamage(myHero, Enemy, Jhin_CalcDmg(_W, Enemy), 0) end if myHero:CanUseSpell(_E) == READY and not Enemy.dead then dmg = dmg + CalcDamage(myHero, Enemy, Jhin_CalcDmg(_E, Enemy), 0) end if Ready(_R) and not Enemy.dead then dmg = dmg + CalcDamage(myHero, Enemy, Jhin_CalcDmg("R1", Enemy)*3, 0) + CalcDamage(myHero, Enemy, Jhin_CalcDmg("R2", Enemy), 0) end Jhin_DrawLineHPBar(dmg, "", Enemy, Enemy.team) end end end local function Jhin_Draw2() if not myHero.dead then local Hero = GetOrigin(myHero) if myHero:CanUseSpell(_R) == READY and Config.E.D.RM:Value() then DrawCircleMinimap(Hero,R.range,1,10,GoS.White) end end end local function Jhin_Tick() if not myHero.dead then local target = GetCurrentTarget() Jhin_Update() Jhin_Combo(target) Jhin_Mixed(target) Jhin_WaveClear() Jhin_LastHit() Jhin_KillSteal() Jhin_TapKey(target, Config.U.TapKey:Value()) end end OnLoad(function() OnTick(Jhin_Tick) OnIssueOrder(Jhin_IssueOrder) OnSpellCast(Jhin_SpellCast) OnProcessSpell(Jhin_PS) OnUpdateBuff(Jhin_UpdateBuff) OnRemoveBuff(Jhin_RemoveBuff) OnProcessSpellComplete(Jhin_PSC) OnDraw(Jhin_Draw) OnDrawMinimap(Jhin_Draw2) print("[Shulepin][Jhin] Successfully Loaded!") print("[Shulepin][Jhin] Current Version: "..LoLVer) print("[Shulepin][Jhin] Have Fun, "..GetUser().." !") end)