Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Sida's Auto Carry: Revamped


Rekomendowane odpowiedzi

Opublikowano

790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Opublikowano

 

 

--[[
Sida's Auto Carry: Revamped
v4.9
]]--


--[[ Configuration ]]--


local AutoCarryKey = 32
local LastHitKey = string.byte("X")
local MixedModeKey = string.byte("C")
local LaneClearKey = string.byte("V")


------------ > Don't touch anything below here < --------------


--[[ Vars ]] --
local projSpeed = 0
local startAttackSpeed = 0.665
local attackDelayOffset = 600
local lastAttack = 0
local projAt = 0
local Skills
local enemyMinions
local allyMinions
local lastEnemy
local lastRange
local killableMinion
local pluginMinion
local minionInfo = {}
local incomingDamage = {}
local jungleMobs = {}
local turretMinion = {timeToHit = 0, obj = nil}
local isMelee = myHero.range < 300
local movementStopped = false
local hasPlugin = false
local nextClick = 500
local TimedMode = false
local Tristana = false
local hudDisabled = false
local ChampInfo = {}
local useVIPCol = false
local lastAttacked = nil
local previousWindUp = 0
local previousAttackCooldown = 0
_G.AutoCarry = _G




--[[ Global Vars : Can be used by plugins ]]--
AutoCarry.Orbwalker = nil
AutoCarry.SkillsCrosshair = nil
AutoCarry.CanMove = true
AutoCarry.CanAttack = true
AutoCarry.MainMenu = nil
AutoCarry.PluginMenu = nil
AutoCarry.EnemyTable = nil
AutoCarry.shotFired = false
AutoCarry.OverrideCustomChampionSupport = false
AutoCarry.CurrentlyShooting = false


--[[ Global Functions ]]--
function getTrueRange()
    return myHero.range + GetDistance(myHero.minBBox)
end


function attackEnemy(enemy)
    if CustomAttackEnemy then CustomAttackEnemy(enemy) return end
    if enemy.dead or not enemy.valid or not AutoCarry.CanAttack then return end
    myHero:Attack(enemy)
    lastAttacked = enemy
    AutoCarry.shotFired = true
end


function getHitBoxRadius(target)
    return GetDistance(target.minBBox, target.maxBBox)/2
end


function timeToShoot()
    return (GetTickCount() + GetLatency()/2 > lastAttack + previousAttackCooldown)
end


function attackedSuccessfully()
    projAt = GetTickCount()
    if OnAttacked then OnAttacked() end
end


function heroCanMove()
    return (GetTickCount() + GetLatency()/2 > lastAttack + previousWindUp + 20 + 30)
end


function setMovement()
    if GetDistance(mousePos) <= AutoCarry.MainMenu.HoldZone and (AutoCarry.MainMenu.AutoCarry or AutoCarry.MainMenu.LastHit or AutoCarry.MainMenu.MixedMode or AutoCarry.MainMenu.LaneClear) then
        if not movementStopped then
            myHero:HoldPosition()
            movementStopped = true
        end
        AutoCarry.CanMove = false
    else
        movementStopped = false
        AutoCarry.CanMove = true
    end
end


function moveToCursor(range)
    if not disableMovement and AutoCarry.CanMove then
        local moveDist = 480 + (GetLatency()/10)
        if not range then
            if isMelee and AutoCarry.Orbwalker.target and AutoCarry.Orbwalker.target.type == myHero.type and GetDistance(AutoCarry.Orbwalker.target) < 80 then
                attackEnemy(AutoCarry.Orbwalker.target)
                return
            elseif GetDistance(mousePos) < moveDist and GetDistance(mousePos) > 100 then
                moveDist = GetDistance(mousePos)
            end
        end
        local moveSqr = math.sqrt((mousePos.x - myHero.x)^2+(mousePos.z - myHero.z)^2)
        local moveX = myHero.x + (range and range or moveDist)*((mousePos.x - myHero.x)/moveSqr)
        local moveZ = myHero.z + (range and range or moveDist)*((mousePos.z - myHero.z)/moveSqr)
        if StreamingMenu.MinRand > StreamingMenu.MaxRand then
            PrintChat("You must set Max higher than Min in streaming menu")
        elseif StreamingMenu.ShowClick and GetTickCount() > nextClick then
            if StreamingMenu.Colour == 0 then
                ShowGreenClick(mousePos)
            else
                ShowRedClick(mousePos)
            end
            nextClick = GetTickCount() + math.random(StreamingMenu.MinRand, StreamingMenu.MaxRand)
        end
        myHero:MoveTo(moveX, moveZ)
    end
end


--[[ Orbwalking ]]--


function OrbwalkingOnLoad()
    AutoCarry.Orbwalker = TargetSelector(TARGET_LOW_HP_PRIORITY, getTrueRange(), DAMAGE_PHYSICAL, false)
    AutoCarry.Orbwalker:SetBBoxMode(true)
    AutoCarry.Orbwalker:SetDamages(0, myHero.totalDamage, 0)
    AutoCarry.Orbwalker.name = "AutoCarry"
    lastRange = getTrueRange()
    if ChampInfo ~= nil then
         if ChampInfo.projSpeed ~= nil then
             projSpeed = ChampInfo.projSpeed
         end
    end
end


function OrbwalkingOnTick()
    AutoCarry.Orbwalker.targetSelected = AutoCarry.MainMenu.Focused
    if GetTickCount() + GetLatency()/2 > lastAttack + previousWindUp + 20 and GetTickCount() + GetLatency()/2 < lastAttack + previousWindUp + 400 then attackedSuccessfully() end
    isMelee = myHero.range < 300
    if myHero.range ~= lastRange then
            AutoCarry.Orbwalker.range = myHero.range
            lastRange = myHero.range
    end
    AutoCarry.Orbwalker:update()
end


function OrbwalkingOnProcessSpell(unit, spell)
    if myHero.dead then return end


    if unit.isMe and (spell.name:lower():find("attack") or isSpellAttack(spell.name)) and not isNotAttack(spell.name) then
        lastAttack = GetTickCount() - GetLatency()/2
        previousWindUp = spell.windUpTime*1000
        previousAttackCooldown = spell.animationTime*1000
    elseif unit.isMe and refreshAttack(spell.name) then
        lastAttack = GetTickCount() - GetLatency()/2 - previousAttackCooldown
    end
end


function refreshAttack(spellName)
    return (
        --Blitzcrank
        spellName == "PowerFist"
        --Darius
        or spellName == "DariusNoxianTacticsONH"
        --Nidalee
        or spellName == "Takedown"
        --Sivir
        or spellName == "Ricochet"
        --Teemo
        or spellName == "BlindingDart"
        --Vayne
        or spellName == "VayneTumble"
        --Jax
        or spellName == "JaxEmpowerTwo"
        --Mordekaiser
        or spellName == "MordekaiserMaceOfSpades"
        --Nasus
        or spellName == "SiphoningStrikeNew"
        --Rengar
        or spellName == "RengarQ"
        --Wukong
        or spellName == "MonkeyKingDoubleAttack"
        --Yorick
        or spellName == "YorickSpectral"
        --Vi
        or spellName == "ViE"
        --Garen
        or spellName == "GarenSlash3"
        --Hecarim
        or spellName == "HecarimRamp"
        --XinZhao
        or spellName == "XenZhaoComboTarget"
        --Leona
        or spellName == "LeonaShieldOfDaybreak"
        --Shyvana
        or spellName == "ShyvanaDoubleAttack"
        or spellName == "shyvanadoubleattackdragon"
        --Talon
        or spellName == "TalonNoxianDiplomacy"
        --Trundle
        or spellName == "TrundleTrollSmash"
        --Volibear
        or spellName == "VolibearQ"
        --Poppy
        or spellName == "PoppyDevastatingBlow"
    )
end


function isSpellAttack(spellName)
    return (
        --Ashe
        spellName == "frostarrow"
        --Caitlyn
        or spellName == "CaitlynHeadshotMissile"
        --Kennen
        or spellName == "KennenMegaProc"
        --Quinn
        or spellName == "QuinnWEnhanced"
        --Trundle
        or spellName == "TrundleQ"
        --XinZhao
        or spellName == "XenZhaoThrust"
        or spellName == "XenZhaoThrust2"
        or spellName == "XenZhaoThrust3"
        --Garen
        or spellName == "GarenSlash2"
        --Renekton
        or spellName == "RenektonExecute"
        or spellName == "RenektonSuperExecute"
        --Yi
        or spellName == "MasterYiDoubleStrike"
    )
end
function isNotAttack(spellName)
    return (
        --Shyvana
        spellName == "shyvanadoubleattackdragon"
        or spellName == "ShyvanaDoubleAttack"
        --MonkeyKing
        or spellName == "MonkeyKingDoubleAttack"
        --JarvanIV
        --or spellName == "JarvanIVCataclysmAttack"
        --or spellName == "jarvanivcataclysmattack"
    )
end


function OrbwalkingOnDraw()
        if DisplayMenu.target and AutoCarry.Orbwalker.target ~= nil then
                for j=0, 5 do
                        DrawCircle(AutoCarry.Orbwalker.target.x, AutoCarry.Orbwalker.target.y, AutoCarry.Orbwalker.target.z, 100 + j, 0x00FF00)
                end
                DrawCircle(AutoCarry.Orbwalker.target.x, AutoCarry.Orbwalker.target.y, AutoCarry.Orbwalker.target.z, GetDistance(AutoCarry.Orbwalker.target, AutoCarry.Orbwalker.target.minBBox), 0xFFFFFF)
        elseif DisplayMenu.target and AutoCarry.SkillsCrosshair.target then
                for j=0, 5 do
                        DrawCircle(AutoCarry.SkillsCrosshair.target.x, AutoCarry.SkillsCrosshair.target.y, AutoCarry.SkillsCrosshair.target.z, 100 + j, 0x990000)
                end
                DrawCircle(AutoCarry.SkillsCrosshair.target.x, AutoCarry.SkillsCrosshair.target.y, AutoCarry.SkillsCrosshair.target.z, GetDistance(AutoCarry.SkillsCrosshair.target, AutoCarry.SkillsCrosshair.target.minBBox), 0xFFFFFF)
        end
end


function EnemyInRange(enemy)
        if ValidBBoxTarget(enemy, getTrueRange()) then
                return true
        end
    return false
end


--[[ Last Hitting ]]--


function LastHitOnLoad()
    minionInfo[(myHero.team == 100 and "Blue" or "Red").."_Minion_Basic"] = { aaDelay = 400, projSpeed = 0 }
    minionInfo[(myHero.team == 100 and "Blue" or "Red").."_Minion_Caster"] = { aaDelay = 484, projSpeed = 0.68 }
    minionInfo[(myHero.team == 100 and "Blue" or "Red").."_Minion_Wizard"] = { aaDelay = 484, projSpeed = 0.68 }
    minionInfo[(myHero.team == 100 and "Blue" or "Red").."_Minion_MechCannon"] = { aaDelay = 365, projSpeed = 1.18 }
    minionInfo.obj_AI_Turret = { aaDelay = 150, projSpeed = 1.14 }
   
    for i = 0, objManager.maxObjects do
        local obj = objManager:getObject(i)
        for _, mob in pairs(getJungleMobs()) do
            if obj and obj.valid and obj.name:find(mob) then
                table.insert(jungleMobs, obj)
            end
        end
    end
end


function LastHitOnTick()
    if AutoCarry.MainMenu.LastHit or AutoCarry.MainMenu.MixedMode or AutoCarry.MainMenu.LaneClear then
        enemyMinions:update()
        allyMinions:update()
    end
end


function LastHitOnProcessSpell(object, spell)
    if not isMelee and isAllyMinionInRange(object) then
        for i,minion in pairs(enemyMinions.objects) do
            if ValidTarget(minion) and minion ~= nil and GetDistance(minion, spell.endPos) < 3 then
                if object ~= nil and (minionInfo[object.charName] or object.type == "obj_AI_turret") then
                    incomingDamage[object.name] = getNewAttackDetails(object, minion)
                end
                --if object.type == "obj_AI_Turret" and object.team == myHero.team then
                    --if FarmMenu.Predict then
                            --handleTurretShot(object, minion)
                    --end
                --end
            end
        end
    end
end


function LastHitOnCreateObj(obj)
    for _, mob in pairs(getJungleMobs()) do
        if obj.name:find(mob) then
            table.insert(jungleMobs, obj)
        end
    end
end


function LastHitOnDeleteObj(obj)
    for i, mob in pairs(getJungleMobs()) do
        if obj and obj.valid and mob and mob.valid and obj.name:find(mob.name) then
            table.remove(jungleMobs, i)
        end
    end
end


function getJungleMinion()
    for _, mob in pairs(jungleMobs) do
        if ValidTarget(mob) and GetDistance(mob) <= getTrueRange() then return mob end
    end
    return nil
end


function LastHitOnDraw()
    if DisplayMenu.minion and enemyMinions.objects[1] and ValidTarget(enemyMinions.objects[1]) and not isMelee then
        DrawCircle(enemyMinions.objects[1].x, enemyMinions.objects[1].y, enemyMinions.objects[1].z, 100, 0x19A712)
    end
end


function getTimeToHit(enemy, speed)
    return (( GetDistance(enemy) / speed ) + GetLatency()/2)
end


function isAllyMinionInRange(minion)
    if minion ~= nil and minion.team == myHero.team
        and (minion.type == "obj_AI_Minion" or minion.type == "obj_AI_Turret")
        and GetDistance(minion) <= 2000 then return true
    else return false end
end


function getMinionDelay(minion)
    return ( minion.type == "obj_AI_Turret" and minionInfo.obj_AI_Turret.aaDelay or minionInfo[minion.charName].aaDelay )
end


function getMinionProjSpeed(minion)
    return ( minion.type == "obj_AI_Turret" and minionInfo.obj_AI_Turret.projSpeed or minionInfo[minion.charName].projSpeed )
end


function minionSpellStillViable(attack)
    if attack == nil then return false end
    local sourceMinion = getAllyMinion(attack.sourceName)
    local targetMinion = getEnemyMinion(attack.targetName)
    if sourceMinion == nil or targetMinion == nil then return false end
    if sourceMinion.dead or targetMinion.dead or GetDistance(sourceMinion, attack.origin) > 3 then return false else return true end
end


function getAllyMinion(name)
    for i, minion in pairs(allyMinions.objects) do
        if minion ~= nil and minion.valid and minion.name == name then
            return minion
        end
    end
    return nil
end


function getEnemyMinion(name)
    for i, minion in pairs(enemyMinions.objects) do
        if minion ~= nil and ValidTarget(minion) and minion.name == name then
            return minion
        end
    end
    return nil
end


function isSameMinion(minion1, minion2)
    if minion1.networkID == minion2.networkID then return true
    else return false end
end


function getMinionTimeToHit(minion, attack)
    local sourceMinion = getAllyMinion(attack.sourceName)
    return ( attack.speed == 0 and ( attack.delay ) or ( attack.delay + GetDistance(sourceMinion, minion) / attack.speed ) )
end


function getNewAttackDetails(source, target)
    return {
            sourceName = source.name,
            targetName = target.name,
            damage = source:CalcDamage(target),
            started = GetTickCount(),
            origin = { x = source.x, z = source.z },
            delay = getMinionDelay(source),
            speed = getMinionProjSpeed(source),
            sourceType = source.type}
end


function getPredictedDamage(counter, minion, attack)
    if not minionSpellStillViable(attack) then
        incomingDamage[counter] = nil
    elseif isSameMinion(minion, getEnemyMinion(attack.targetName)) then
        local myTimeToHit = getTimeToHit(minion, projSpeed)
        minionTimeToHit = getMinionTimeToHit(minion, attack)
        if GetTickCount() >= (attack.started + minionTimeToHit) then
            incomingDamage[counter] = nil
        elseif GetTickCount() + myTimeToHit > attack.started + minionTimeToHit then
            return attack.damage
        end
    end
    return 0
end


function getKillableCreep(iteration)
    if isMelee then return meleeLastHit() end
    local minion = enemyMinions.objects[iteration]
    if minion ~= nil then
        local distanceToMinion = GetDistance(minion)
        local predictedDamage = 0
        if distanceToMinion < getTrueRange() then
            if FarmMenu.Predict then
                for l, attack in pairs(incomingDamage) do
                    predictedDamage = predictedDamage + getPredictedDamage(l, minion, attack)
                end
            end
            local myDamage = myHero:CalcDamage(minion, myHero.totalDamage) + getBonusLastHitDamage(minion) + LastHitPassiveDamage()
            myDamage = (MasteryMenu.Executioner and myDamage * 1.05 or myDamage)
            myDamage = myDamage - 10
            --if minion.health - predictedDamage <= 0 then
                    --return getKillableCreep(iteration + 1)
            if minion.health + 1.2 - predictedDamage < myDamage then
                    return minion
            --elseif minion.health + 1.2 - predictedDamage < myDamage + (0.5 * predictedDamage) then
            --        return nil
            end
        end
    end
    return nil
end


function getBonusLastHitDamage(minion)
    if PluginBonusLastHitDamage then
        return PluginBonusLastHitDamage(minion)
    elseif BonusLastHitDamage then
        return BonusLastHitDamage(minion)
    else
        return 0
    end
end


function meleeLastHit()
        for _, minion in pairs(enemyMinions.objects) do
                local aDmg = getDmg("AD", minion, myHero)
                if GetDistance(minion) <= (myHero.range + 75) then
                        if minion.health < aDmg then
                                return minion
                        end
                end
        end
end


function LastHitPassiveDamage(minion)
        if PluginLastHitPassiveDamage then return PluginLastHitPassiveDamage(minion) end
        local bonus = 0
        if GetInventoryHaveItem(3153) then
                if ValidTarget(minion) then
                        bonus = minion.health / 20
                        if bonus >= 60 then
                                bonus = 60
                        end
                end
        end
        bonus = bonus + (MasteryMenu.Butcher * 2)
        bonus = (MasteryMenu.Spellblade and bonus + (myHero.ap * 0.05) or 0)
        return bonus
end


function getHighestMinion()
    if GetTarget() ~= nil then
        local currentTarget = GetTarget()
        local validTarget = false
        validTarget = ValidTarget(currentTarget, getTrueRange(), player.enemyTeam)
        if validTarget and (currentTarget.type == "obj_BarracksDampener" or currentTarget.type == "obj_HQ" or currentTarget.type == "obj_AI_Turret") then
            return currentTarget
        end
    end


    local highestHp = {obj = nil, hp = 0}
    for _, tMinion in pairs(enemyMinions.objects) do
        if GetDistance(tMinion) <= getTrueRange() and tMinion.health > highestHp.hp then
                highestHp = {obj = tMinion, hp = tMinion.health}
        end
    end
    return highestHp.obj
end


function getPredictedDamageOnMinion(minion)
        local predictedDamage = 0
        if minion ~= nil then
                local distanceToMinion = GetDistance(minion)
                if distanceToMinion < getTrueRange() then
                        for l, attack in pairs(incomingDamage) do
                                if attack.sourceType ~= "obj_AI_Turret" then
                                        predictedDamage = predictedDamage + getPredictedDamage(l, minion, attack)
                                end
                        end
                end
        end
        return predictedDamage
end


function handleTurretShot(turret, minion)
        local dmg = turret:CalcDamage(minion)
        local myDmg = myHero:CalcDamage(minion, myHero.totalDamage) + (BonusLastHitDamage and BonusLastHitDamage(minion) or 0) + LastHitPassiveDamage()
        myDmg = (MasteryMenu.Executioner and myDmg * 1.05 or myDmg)
        local predic = getPredictedDamageOnMinion(minion)
        if minion.health > myDmg + dmg + predic and minion.health < (myDmg * 2) + dmg + predic then
                turretMinion = {timeToHit = minionInfo.obj_AI_Turret.aaDelay + GetDistance(turret, minion) / minionInfo.obj_AI_Turret.projSpeed, obj = minion }
        end
end


--[[ Abilities ]]--
function SkillsOnLoad()
        Skills = getSpellList()
        if Skills == nil then
                AutoCarry.SkillsCrosshair = TargetSelector(TARGET_LOW_HP_PRIORITY, 0, DAMAGE_PHYSICAL, false)
                return
        end
        local maxRange = 0
        for _, skill in pairs(Skills) do
                if skill.range > maxRange then maxRange = skill.range end
        end
        AutoCarry.SkillsCrosshair = TargetSelector(TARGET_LOW_HP_PRIORITY, maxRange, DAMAGE_PHYSICAL, false)
end


function SkillsOnTick()
        if Skills == nil then return end
        local target = AutoCarry.GetAttackTarget()
        if ValidTarget(target) and target.type == myHero.type then
                for _, skill in pairs(Skills) do
                if (AutoCarry.MainMenu.AutoCarry and SkillsMenu[skill.configName.."AutoCarry"]) or
                        (AutoCarry.MainMenu.MixedMode and SkillsMenu[skill.configName.."MixedMode"]) then
                                if not skill.reset or (skill.reset and GetTickCount() < projAt + 400) then
                                        if skill.skillShot then
                                                AutoCarry.CastSkillshot(skill, target)
                                        elseif skill.reqTarget == false and not skill.atMouse then
                                                CastSelf(skill, target)
                                        elseif skill.reqTarget == false and skill.atMouse then
                                                CastMouse(skill)
                                        else
                                                CastTargettedSpell(skill, target)
                                        end
                                end
                        end
                end
        end
end


AutoCarry.GetCollision = function (skill, source, destination)
    if VIP_USER and useVIPCol then
        local col = Collision(skill.range, skill.speed*1000, skill.delay/1000, skill.width)
        return col:GetMinionCollision(source, destination)
    else
        return willHitMinion(destination, skill.width)
    end
end


AutoCarry.CastSkillshot = function (skill, target)
    if VIP_USER then
        pred = TargetPredictionVIP(skill.range, skill.speed*1000, skill.delay/1000, skill.width)
    elseif not VIP_USER then
        pred = TargetPrediction(skill.range, skill.speed, skill.delay, skill.width)
    end
    local predPos = pred:GetPrediction(target)
    if predPos and GetDistance(predPos) <= skill.range then
        if VIP_USER and pred:GetHitChance(target) > SkillsMenu.hitChance/100 then
            if not skill.minions or not AutoCarry.GetCollision(skill, myHero, predPos) then
                CastSpell(skill.spellKey, predPos.x, predPos.z)
            end
        elseif not VIP_USER then
            if not skill.minions or not AutoCarry.GetCollision(skill, myHero, predPos) then
                CastSpell(skill.spellKey, predPos.x, predPos.z)
            end
        end
    end
end


AutoCarry.GetPrediction = function(skill, target)
    if VIP_USER then
        pred = TargetPredictionVIP(skill.range, skill.speed*1000, skill.delay/1000, skill.width)
    elseif not VIP_USER then
        pred = TargetPrediction(skill.range, skill.speed, skill.delay, skill.width)
    end
    return pred:GetPrediction(target)
end


AutoCarry.IsValidHitChance = function(skill, target)
    if VIP_USER then
        pred = TargetPredictionVIP(skill.range, skill.speed*1000, skill.delay/1000, skill.width)
        return pred:GetHitChance(target) > SkillsMenu.hitChance/100 and true or false
    elseif not VIP_USER then
        return true
    end
end


AutoCarry.GetNextAttackTime = function()
    return (lastAttack + previousAttackCooldown) - GetLatency()/2
end


function CastTargettedSpell(skill, target)
        if GetDistance(target) <= skill.range then
                CastSpell(skill.spellKey, target)
        end
end


function CastMouse(skill)
        CastSpell(skill.spellKey, mousePos.x, mousePos.z)
end


function CastSelf(skill, target)
        if not skill.forceRange or (skill.forceRange and GetDistance(target) - (skill.forceToHitBox and GetDistance(target, target.minBBox) or 0) <= skill.range) then
                CastSpell(skill.spellKey)
        end
end


function getPrediction(speed, delay, target)
        if target == nil then return nil end
        local travelDuration = (delay + GetDistance(myHero, target)/speed)
        travelDuration = (delay + GetDistance(GetPredictionPos(target, travelDuration))/speed)
        travelDuration = (delay + GetDistance(GetPredictionPos(target, travelDuration))/speed)
        travelDuration = (delay + GetDistance(GetPredictionPos(target, travelDuration))/speed)
        return GetPredictionPos(target, travelDuration)
end


function willHitMinion(predic, width)
    for _, minion in pairs(enemyMinions.objects) do
        if minion ~= nil and minion.valid and string.find(minion.name,"Minion_") == 1 and minion.team ~= player.team and minion.dead == false then
            if predic ~= nil then
                ex = player.x
                ez = player.z
                tx = predic.x
                tz = predic.z
                dx = ex - tx
                dz = ez - tz
                if dx ~= 0 then
                    m = dz/dx
                    c = ez - m*ex
                end
                mx = minion.x
                mz = minion.z
                distanc = (math.abs(mz - m*mx - c))/(math.sqrt(m*m+1))
                if distanc < width and math.sqrt((tx - ex)*(tx - ex) + (tz - ez)*(tz - ez)) > math.sqrt((tx - mx)*(tx - mx) + (tz - mz)*(tz - mz)) then
                    return true
                end
            end
        end
    end
    return false
end


--[[ Champion Specific ]]--


function LoadCustomChampionSupport()
            -- >> Vayne << --
    if myHero.charName == "Vayne" then
            function BonusLastHitDamage()
                    if myHero:GetSpellData(_Q).level > 0 and myHero:CanUseSpell(_Q) == SUPRESSED then
                return math.round( ((0.05*myHero:GetSpellData(_Q).level) + 0.25 )*myHero.totalDamage )
            end
                    return 0
            end


            -- >> Teemo << --
    elseif myHero.charName == "Teemo" then
            function BonusLastHitDamage()
                    if myHero:GetSpellData(_E).level > 0 then
                return math.floor( (myHero:GetSpellData(_E).level * 10) + (myHero.ap * 0.3) )
            end
                    return 0
            end
            -- >> Corki << --
    elseif myHero.charName == "Corki" then
            function BonusLastHitDamage()
                    return myHero.totalDamage/10
            end


            -- >> Miss Fortune << --
    elseif myHero.charName == "MissFortune" then
            function BonusLastHitDamage()
                    if myHero:GetSpellData(_W).level > 0 then
                            return (4+2*myHero:GetSpellData(_W).level) + (myHero.ap/20)
                    end
                    return 0
            end


            -- >> Varus << --
    elseif myHero.charName == "Varus" then
            function BonusLastHitDamage()
                    if myHero:GetSpellData(_W).level > 0 then
                            return (6 + (myHero:GetSpellData(_W).level * 4) + (myHero.ap * 0.25))
                    end
                    return 0
            end


            -- >> Caitlyn << --
    elseif myHero.charName == "Caitlyn" then
            local headShotPart
            function CustomOnCreateObj(obj)
                    if GetDistance(obj) < 100 and obj.name:lower():find("caitlyn_headshot_rdy") then
                            headShotPart = obj
                    end
            end


            function BonusLastHitDamage(minion)
                    if headShotPart and headShotPart.valid and minion and ValidTarget(minion) then
                            return myHero:CalcDamage(minion, myHero.totalDamage) * 1.5
                    end
                    return 0
            end


            -- >> Tristana << --
    elseif myHero.charName == "Tristana" then
            function CustomOnTick()
                    Skills[2].range = myHero.range
            end


            -- >> KogMaw << --
    elseif myHero.charName == "KogMaw" then
            function CustomOnTick()
                    Skills[2].range = getTrueRange() + 110 + (myHero:GetSpellData(_W).level * 20)
                    if myHero:GetSpellData(_R).level == 1 then
                            Skills[4].range = 1400
                    elseif myHero:GetSpellData(_R).level == 2 then
                            Skills[4].range = 1700
                    elseif myHero:GetSpellData(_R).level == 3 then
                            Skills[4].range = 2200
                    end
            end


            -- >> Twisted Fate << --
    elseif myHero.charName == "TwistedFate" then
            local tfLastUse = 0
            TFConfig = scriptConfig("Sida's Auto Carry: Twisted Fate Edition", "autocarrytf")
            TFConfig:addParam("selectgold", "Select Gold", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("W"))
            TFConfig:addParam("selectblue", "Select Blue", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("E"))
            TFConfig:addParam("selectred", "Select Red", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
            TFConfig:addParam("qStunned", "Auto Q Stunned Enemies", SCRIPT_PARAM_ONOFF, true)


            function CustomOnTick()
                    PickACard()
                    if TFConfig.qStunned then
                            for _, enemy in pairs(AutoCarry.EnemyTable) do
                                    if ValidTarget(enemy) and not enemy.canMove and GetDistance(enemy) < 1350 then
                                            CastSpell(_Q, enemy.x, enemy.z)
                                    end
                            end
                    end
            end


            function PickACard()
                    if myHero:CanUseSpell(_W) == READY and GetTickCount()-tfLastUse <= 2300 then
                            if myHero:GetSpellData(_W).name == selected then CastSpellEx(_W) end
                    end
                    if myHero:CanUseSpell(_W) == READY and GetTickCount()-tfLastUse >= 2400 then
                            if TFConfig.selectgold then selected = "goldcardlock"
                            elseif TFConfig.selectblue then selected = "bluecardlock"
                            elseif TFConfig.selectred then selected = "redcardlock"
                            else return end
                            CastSpellEx(_W)
                            tfLastUse = GetTickCount()
                    end
            end


            -- >> Draven << --
    elseif myHero.charName == "Draven" then
            local reticles = {}
            local qStacks = 0
            local closestReticle
            local qBuff = 0
            local stopped = false
            local qRad = 150
            disableRangeDraw = true
            local qParticles = {"Draven_Q_mis",
                                            "Draven_Q_mis_bloodless",
                                            "Draven_Q_mis_shadow",
                                            "Draven_Q_mis_shadow_bloodless",
                                            "Draven_Qcrit_mis",
                                            "Draven_Qcrit_mis_bloodless",
                                            "Draven_Qcrit_mis_shadow",
                                            "Draven_Qcrit_mis_shadow_bloodless" }


            DravenConfig = scriptConfig("Sida's Auto Carry: Draven Edition", "autocarrdraven")
            DravenConfig:addParam("HoldRange", "Stand MPCforum", SCRIPT_PARAM_SLICE, 130, 0, 450, 0)
            DravenConfig:addParam("CatchRange", "Catch Axe Range", SCRIPT_PARAM_SLICE, 575, 0, 2000, 0)
            DravenConfig:addParam("AutoW", "Keep W Buff Active Against Enemy", SCRIPT_PARAM_ONOFF, true)
            DravenConfig:addParam("AutoCarry", "Use / Catch Axes: Auto Carry Mode", SCRIPT_PARAM_ONOFF, true)
            DravenConfig:addParam("LastHit", "Use / Catch Axes: Last Hit Mode", SCRIPT_PARAM_ONOFF, true)
            DravenConfig:addParam("LaneClear", "Use / Catch Axes: Lane Clear Mode", SCRIPT_PARAM_ONOFF, true)
            DravenConfig:addParam("MixedMode", "Use / Catch Axes: Mixed Mode Mode", SCRIPT_PARAM_ONOFF, true)
            DravenConfig:addParam("Reminder", "Display Reminder Text", SCRIPT_PARAM_ONOFF, true)


            function Move(pos)
                    local moveSqr = math.sqrt((pos.x - myHero.x)^2+(pos.z - myHero.z)^2)
                    local moveX = myHero.x + 200*((pos.x - myHero.x)/moveSqr)
                    local moveZ = myHero.z + 200*((pos.z - myHero.z)/moveSqr)
                    myHero:MoveTo(moveX, moveZ)
            end


            function CustomOnProcessSpell(unit, spell)
                    if unit.isMe and spell.name == "dravenspinning" then
                            qStacks = qStacks + 1
                    end
            end


            function CustomOnCreateObj(obj)
                    if obj.name == "Draven_Q_buf.troy" then
                            qBuff = qBuff + 1
                    end


                    for _, particle in pairs(qParticles) do
                             if obj ~= nil and obj.valid and obj.name:lower():find(particle:lower()) and GetDistance(obj) < 333 then
                                    attackedSuccessfully()
                             end
                    end


                    if obj ~= nil and obj.name ~= nil and obj.x ~= nil and obj.z ~= nil then
                if obj.name == "Draven_Q_reticle_self.troy" then
                    table.insert(reticles, {object = obj, created = GetTickCount()})
                elseif obj.name == "draven_spinning_buff_end_sound.troy" then
                    qStacks = 0
                end
            end
            end


            function CustomOnDeleteObj(obj)
                    if obj.name == "Draven_Q_reticle_self.troy" then
                            if GetDistance(obj) > qRad then
                                    qStacks = qStacks - 1
                            end
                            for i, reticle in ipairs(reticles) do
                                    if obj and obj.valid and reticle.object and reticle.object.valid and obj.x == reticle.object.x and obj.z == reticle.object.z then
                                            table.remove(reticles, i)
                                    end
                            end
                    elseif obj.name == "Draven_Q_buf.troy" then
                            qBuff = qBuff - 1
                    end
            end


            function axesActive()
                    if (AutoCarry.MainMenu.AutoCarry and DravenConfig.AutoCarry)
                    or (AutoCarry.MainMenu.LastHit and DravenConfig.LastHit)
                    or (AutoCarry.MainMenu.MixedMode and DravenConfig.MixedMode)
                    or (AutoCarry.MainMenu.LaneClear and DravenConfig.LaneClear) then
                            return true
                    end
                    return false
            end


            function CustomAttackEnemy(enemy)
                    if enemy.dead or not enemy.valid or disableAttacks then return end
                    if axesActive() and GetDistance(mousePos) <= DravenConfig.CatchRange then
                            if qStacks < 2 then CastSpell(_Q) end
                    end
                    myHero:Attack(enemy)
                    AutoCarry.shotFired = true
            end


            function CustomOnTick()
                    if myHero.dead then return end
                    if (AutoCarry.MainMenu.AutoCarry or AutoCarry.MainMenu.MixedMode) and DravenConfig.AutoW and ValidTarget(AutoCarry.Orbwalker.target) and not TargetHaveBuff("dravenfurybuff" , myHero) then
                            CastSpell(_W)
                    end


                    for _, particle in pairs(reticles) do
                            if closestReticle and closestReticle.object.valid and particle.object and particle.object.valid then
                                    if GetDistance(particle.object) > GetDistance(closestReticle.object) then
                                            closestReticle = particle
                                    end
                            else
                                    closestReticle = particle
                            end
                    end


                    if GetDistance(mousePos) <= DravenConfig.HoldRange and axesActive() then
                            if not stopped then
                                    myHero:HoldPosition()
                                    stopped = true
                            end
                            disableMovement = true
                    else
                            stopped = false
                    end


                    function doMovement()
                            disableMovement = true
                            disableAttacks = true
                            if myHero.canMove then Move({x = closestReticle.object.x, z = closestReticle.object.z}) end
                    end


                    if axesActive() and closestReticle and closestReticle.object and closestReticle.object.valid then
                            if GetDistance(mousePos) <= DravenConfig.CatchRange and ((AutoCarry.MainMenu.AutoCarry and ShouldCatch(closestReticle.object)) or (not AutoCarry.MainMenu.AutoCarry)) then
                                    if GetDistance(closestReticle.object) > qRad then
                                            doMovement()
                                    else
                                            disableMovement = true
                                            disableAttacks = false
                                    end
                            else
                                    disableMovement = false
                                    disableAttacks = false
                            end
                    elseif GetDistance(mousePos) <= DravenConfig.HoldRange then
                            disableMovement = true
                            disableAttacks = false
                    else
                            disableMovement = false
                            disableAttacks = false
                    end
            end


            function ShouldCatch(reticle)
                    local enemy
                    if AutoCarry.Orbwalker.target ~= nil then enemy = AutoCarry.Orbwalker.target
                    elseif AutoCarry.SkillsCrosshair.target ~= nil then enemy = AutoCarry.SkillsCrosshair.target
                    else return true end
                    if not reticle then return false end
                    if GetDistance(mousePos, enemy) > GetDistance(enemy) then
                            if GetDistance(reticle, enemy) < GetDistance(enemy) then
                                    return false
                            end
                            return true
                    else
                            local closestEnemy
                            for _, thisEnemy in pairs(AutoCarry.EnemyTable) do
                                    if not closestEnemy then closestEnemy = thisEnemy
                                    elseif GetDistance(thisEnemy) < GetDistance(closestEnemy) then closestEnemy = thisEnemy end
                            end
                            if closestEnemy then
                                    local predPos = getPrediction(1.9, 100, closestEnemy)
                                    if not predPos then return true end
                                    if GetDistance(reticle, predPos) > getTrueRange() + getHitBoxRadius(closestEnemy) then
                                            return false
                                    end
                                    return true
                            else
                                    return true
                            end
                    end
            end


            function BonusLastHitDamage(minion)
                    if myHero:GetSpellData(_Q).level > 0 and qBuff > 0 then
                        return ((myHero.damage + myHero.addDamage) * (0.35 + (0.1 * myHero:GetSpellData(_Q).level)))
                    end
                    return 0
            end


            function CustomOnDraw()
                    DrawCircle(myHero.x, myHero.y, myHero.z, DravenConfig.HoldRange, 0xFFFFFF)
                    DrawCircle(myHero.x, myHero.y, myHero.z, DravenConfig.HoldRange-1, 0xFFFFFF)
                    DrawCircle(myHero.x, myHero.y, myHero.z, DravenConfig.CatchRange-1, 0x19A712)


                    if axesActive() and DravenConfig.Reminder then
                            if GetDistance(mousePos) <= DravenConfig.HoldRange then
                                    DrawText("Holding Position & Catching",16,100, 100, 0xFF00FF00)
                            elseif GetDistance(mousePos) <= DravenConfig.CatchRange then
                                    DrawText("Orbwalking & Catching",16,100, 100, 0xFF00FF00)
                            else
                                    DrawText("Only Orbwalking",16,100, 100, 0xFF00FF00)
                            end
                    end
            end


    end
end
--[[ Items ]]--
local items =
    {
        {name = "Blade of the Ruined King", menu = "BRK", id=3153, range = 450, reqTarget = true, slot = nil },
        {name = "Bilgewater Cutlass", menu = "BWC", id=3144, range = 450, reqTarget = true, slot = nil },
        {name = "Deathfire Grasp", menu = "DFG", id=3128, range = 750, reqTarget = true, slot = nil },
        {name = "Hextech Gunblade", menu = "HGB", id=3146, range = 400, reqTarget = true, slot = nil },
        {name = "Ravenous Hydra", menu = "RSH", id=3074, range = 350, reqTarget = false, slot = nil},
        {name = "Sword of the Divine", menu = "STD", id=3131, range = 350, reqTarget = false, slot = nil},
        {name = "Tiamat", menu = "TMT", id=3077, range = 350, reqTarget = false, slot = nil},
        {name = "Entropy", menu = "ETR", id=3184, range = 350, reqTarget = false, slot = nil},
        {name = "Youmuu's Ghostblade", menu = "YGB", id=3142, range = 350, reqTarget = false, slot = nil}
    }
       
function UseItemsOnTick()
    if AutoCarry.Orbwalker.target then
        for _,item in pairs(items) do
            item.slot = GetInventorySlotItem(item.id)
            if item.slot ~= nil then
                if item.reqTarget and GetDistance(AutoCarry.Orbwalker.target) <= item.range and item.menu ~= "BRK" then
                    CastSpell(item.slot, AutoCarry.Orbwalker.target)
                elseif item.reqTarget and GetDistance(AutoCarry.Orbwalker.target) <= item.range and item.menu == "BRK" then
                    if myHero.health <= myHero.maxHealth*0.65 or GetDistance(AutoCarry.Orbwalker.target) > 400 then
                        CastSpell(item.slot, AutoCarry.Orbwalker.target)
                    end
                elseif not item.reqTarget then
                    CastSpell(item.slot)
                end
            end
        end
    end
end


function SetMuramana()
    if AutoCarry.Orbwalker.target ~= nil and ItemMenu.muraMana and not MuramanaIsActive() and (AutoCarry.MainMenu.AutoCarry or AutoCarry.MainMenu.MixedMode) then
        MuramanaOn()
    elseif AutoCarry.Orbwalker.target == nil and ItemMenu.muraMana and MuramanaIsActive() then
        MuramanaOff()
    end
end


--[[ Summoner Spells ]]--
 local ignite, barrier, healthBefore, healthBeforeTimer, nextUpdate, nextCheck = nil, nil, 0, 0, 0, 0, 0


 function SummonerOnLoad()
         ignite = (player:GetSpellData(SUMMONER_1).name == "SummonerDot" and SUMMONER_1 or (player:GetSpellData(SUMMONER_2).name == "SummonerDot" and SUMMONER_2 or nil))
         barrier = (player:GetSpellData(SUMMONER_1).name == "SummonerBarrier" and SUMMONER_1 or (player:GetSpellData(SUMMONER_2).name == "SummonerBarrier" and SUMMONER_2 or nil))
 end


function SummonerOnTick()
        if ignite and SummonerMenu.Ignite and myHero:CanUseSpell(ignite) == READY then
                for _, enemy in pairs(GetEnemyHeroes()) do
                        if ValidTarget(enemy, 600) and enemy.health <= 50 + (20 * player.level) then
                                CastSpell(ignite, enemy)
                        end
                end
        end
        if barrier and SummonerMenu.Barrier and myHero:CanUseSpell(barrier) == READY then
                if GetTickCount() >= nextCheck then
                        local co = ((myHero.health / myHero.maxHealth * 100) - 20)*(0.3-0.1)/(100-20)+0.1
                        local proc = myHero.maxHealth * co
                        if healthBefore - myHero.health > proc and myHero.health < myHero.maxHealth * 0.3 then
                                CastSpell(barrier)
                        end
                        nextCheck = GetTickCount() + 100
                        if GetTickCount() >= nextUpdate then
                                healthBefore = myHero.health
                                healthBeforeTimer = GetTickCount()
                                nextUpdate = GetTickCount() + 1000
                        end
                end
        end
end


--[[ Plugins ]]--
if FileExist(LIB_PATH .."SidasAutoCarryPlugin - "..myHero.charName..".lua") then
        hasPlugin = true
end


AutoCarry.GetAttackTarget = function(isCaster)
    if not isCaster and ValidTarget(AutoCarry.Orbwalker.target) then
        return AutoCarry.Orbwalker.target
    else
        AutoCarry.SkillsCrosshair:update()
        return AutoCarry.SkillsCrosshair.target
    end
end


AutoCarry.GetKillableMinion = function()
    return killableMinion
end


AutoCarry.GetMinionTarget = function()
    if killableMinion then
        return killableMinion
    elseif pluginMinion then
        return pluginMinion
    else
        return nil
    end
end


AutoCarry.EnemyMinions = function()
    return enemyMinions
end


AutoCarry.AllyMinions = function()
    return allyMinions
end


AutoCarry.GetJungleMobs = function()
    return jungleMobs
end


AutoCarry.GetLastAttacked = function()
    return lastAttacked
end


function OnApplyParticle(Unit, Particle)
    if PluginOnApplyParticle then PluginOnApplyParticle(Unit, Particle) end
end


--[[ Callbacks ]]--
function OnLoad()
        enemyMinions = minionManager(MINION_ENEMY, 2000, player, MINION_SORT_HEALTH_ASC)
        allyMinions = minionManager(MINION_ALLY, 2000, player, MINION_SORT_HEALTH_ASC)
        if getChampTable()[myHero.charName] then
            ChampInfo = getChampTable()[myHero.charName]
        end
        OrbwalkingOnLoad()
        SkillsOnLoad()
        LastHitOnLoad()
        SummonerOnLoad()
        AutoCarry.EnemyTable = GetEnemyHeroes()
        PriorityOnLoad()
        setMenus()
        StreamingMenu.DisableDrawing = false
        if VIP_USER and PerformanceMenu.VipCol then
            require "Collision"
            PrintChat(">> Sida's Auto Carry: VIP Collision Enabled")
            useVIPCol = true
        end
        if PluginOnLoad then PluginOnLoad() end
        if not AutoCarry.OverrideCustomChampionSupport then LoadCustomChampionSupport() end
        if CustomOnLoad then CustomOnLoad() end
        PrintChat(">> Sida's Auto Carry: Revamped!")
end


function OnTick()
        OrbwalkingOnTick()
        LastHitOnTick()
        SkillsOnTick()
        SummonerOnTick()
        setMovement()
        SetMuramana()
        if PluginOnTick then PluginOnTick() end
        AutoCarry.CurrentlyShooting = (GetTickCount() + GetLatency()/2 < lastAttack + previousWindUp + 20 + 30)
        if StreamingMenu.DisableDrawing and not hudDisabled then
            for i = 0, 10 do
                PrintChat("")
            end
            hudDisabled = true
            DisableOverlay()
        end
        if (AutoCarry.MainMenu.AutoCarry and ItemMenu.UseItemsAC) or (AutoCarry.MainMenu.LastHit and ItemMenu.UseItemsLastHit) or (AutoCarry.MainMenu.MixedMode and ItemMenu.UseItemsMixed) then
                 UseItemsOnTick()
        end
       
        if AutoCarry.MainMenu.AutoCarry then
                if AutoCarry.Orbwalker.target ~= nil and EnemyInRange(AutoCarry.Orbwalker.target) then
                        if timeToShoot() and AutoCarry.CanAttack then
                                attackEnemy(AutoCarry.Orbwalker.target)
                        elseif heroCanMove() then
                                moveToCursor()
                        end
                elseif heroCanMove() then
                        moveToCursor()
                end
        end
       
        if AutoCarry.MainMenu.LastHit then
                if not ValidTarget(killableMinion) then killableMinion = getKillableCreep(1) end
                if ValidTarget(killableMinion) and timeToShoot() and AutoCarry.CanAttack then
                        attackEnemy(killableMinion)
                --elseif ValidTarget(turretMinion.obj) and timeToShoot() and AutoCarry.CanAttack and turretMinion.timeToHit > getTimeToHit(turretMinion.obj, projSpeed) then
                  -- attackEnemy(turretMinion.obj)
                elseif heroCanMove() and FarmMenu.moveLastHit then
                        moveToCursor()
                end
        end
       
        if AutoCarry.MainMenu.MixedMode then
                if AutoCarry.Orbwalker.target ~= nil and EnemyInRange(AutoCarry.Orbwalker.target) then
                        if timeToShoot() and AutoCarry.CanAttack then
                                attackEnemy(AutoCarry.Orbwalker.target)
                        elseif heroCanMove() then
                                moveToCursor()
                        end
                else
                        if not ValidTarget(killableMinion) then killableMinion = getKillableCreep(1) end
                        if ValidTarget(killableMinion) and timeToShoot() and AutoCarry.CanAttack then
                                attackEnemy(killableMinion)
                        elseif heroCanMove() and FarmMenu.moveMixed then
                                moveToCursor()
                        end
                end
        end
       
        if AutoCarry.MainMenu.LaneClear then
            if not ValidTarget(killableMinion) then killableMinion = getKillableCreep(1) end
            if ValidTarget(killableMinion) and timeToShoot() and AutoCarry.CanAttack then
                    attackEnemy(killableMinion)
            else
                local tMinion = getHighestMinion()
                if tMinion and ValidTarget(tMinion) and timeToShoot() and AutoCarry.CanAttack then
                    pluginMinion = tMinion
                    attackEnemy(tMinion)
                else
                    if PerformanceMenu.JungleFarm then
                        local tMinion = getJungleMinion()
                        if tMinion and ValidTarget(tMinion) and timeToShoot() and AutoCarry.CanAttack then
                            pluginMinion = tMinion
                            attackEnemy(tMinion)
                        elseif heroCanMove() and FarmMenu.moveClear then
                            moveToCursor()
                        end    
                    elseif heroCanMove() and FarmMenu.moveClear then
                            moveToCursor()
                    end
                end
            end
        end
       
         if CustomOnTick then CustomOnTick() end
end


function OnProcessSpell(unit, spell)
    OrbwalkingOnProcessSpell(unit, spell)
    LastHitOnProcessSpell(unit, spell)
    if CustomOnProcessSpell then CustomOnProcessSpell(unit, spell) end
    if PluginOnProcessSpell then PluginOnProcessSpell(unit, spell) end
end


function OnCreateObj(obj)
    if myHero.dead or ChampInfo == nil then return end
        if PerformanceMenu.JungleFarm then LastHitOnCreateObj(obj) end
        if CustomOnCreateObj then CustomOnCreateObj(obj) end
        if PluginOnCreateObj then PluginOnCreateObj(obj) end
end


function OnDeleteObj(obj)
        if PerformanceMenu.JungleFarm then LastHitOnDeleteObj(obj) end
        if CustomOnDeleteObj then CustomOnDeleteObj(obj) end
        if PluginOnDeleteObj then PluginOnDeleteObj(obj) end
end


function OnAnimation(unit, animation)
    if PluginOnAnimation then PluginOnAnimation(unit, animation) end
end        


--function OnSendPacket(packet)
--    if PluginOnSendPacket then PluginOnSendPacket(packet) end
--end        


function OnDraw()
    if not DisplayMenu.disableAllDrawing then
        if DisplayMenu.myRange and not disableRangeDraw then
                DrawCircle(myHero.x, myHero.y, myHero.z, getTrueRange(), 0x19A712)
        end
        DrawCircle(myHero.x, myHero.y, myHero.z, AutoCarry.MainMenu.HoldZone, 0xFFFFFF)
        OrbwalkingOnDraw()
        LastHitOnDraw()
        if CustomOnDraw then CustomOnDraw() end
        if PluginOnDraw then PluginOnDraw() end
    end
end


function OnWndMsg(msg, key)
    if PluginOnWndMsg then PluginOnWndMsg(msg, key) end
end


--[[ Data ]]--
function getChampTable()
    return {
        Ahri = { projSpeed = 1.6},
        Anivia = { projSpeed = 1.05},
        Annie = { projSpeed = 1.0},
        Ashe = { projSpeed = 2.0},
        Brand = { projSpeed = 1.975},
        Caitlyn = { projSpeed = 2.5},
        Cassiopeia = { projSpeed = 1.22},
        Corki = { projSpeed = 2.0},
        Draven = { projSpeed = 1.4},
        Ezreal = { projSpeed = 2.0},
        FiddleSticks = { projSpeed = 1.75},
        Graves = { projSpeed = 3.0},
        Heimerdinger = { projSpeed = 1.4},
        Janna = { projSpeed = 1.2},
        Jayce = { projSpeed = 2.2},
        Karma = { projSpeed = 1.2},
        Karthus = { projSpeed = 1.25},
        Kayle = { projSpeed = 1.8},
        Kennen = { projSpeed = 1.35},
        KogMaw = { projSpeed = 1.8},
        Leblanc = { projSpeed = 1.7},
        Lucian = { projSpeed = 2.0},
        Lulu = { projSpeed = 2.5},
        Lux = { projSpeed = 1.55},
        Malzahar = { projSpeed = 1.5},
        MissFortune = { projSpeed = 2.0},
        Morgana = { projSpeed = 1.6},
        Nidalee = { projSpeed = 1.7},
        Orianna = { projSpeed = 1.4},
        Quinn = { projSpeed = 1.85},
        Ryze = { projSpeed = 2.4},
        Sivir = { projSpeed = 1.4},
        Sona = { projSpeed = 1.6},
        Soraka = { projSpeed = 1.0},
        Swain = { projSpeed = 1.6},
        Syndra = { projSpeed = 1.2},
        Teemo = { projSpeed = 1.3},
        Tristana = { projSpeed = 2.25},
        TwistedFate = { projSpeed = 1.5},
        Twitch = { projSpeed = 2.5},
        Urgot = { projSpeed = 1.3},
        Vayne = { projSpeed = 2.0},
        Varus = { projSpeed = 2.0},
        Veigar = { projSpeed = 1.05},
        Viktor = { projSpeed = 2.25},
        Vladimir = { projSpeed = 1.4},
        Xerath = { projSpeed = 1.2},
        Ziggs = { projSpeed = 1.5},
        Zilean = { projSpeed = 1.25},
        Zyra = { projSpeed = 1.7},
    }
end


function getSpellList()
        local spellArray = nil
        if myHero.charName == "Ezreal" then
                spellArray = {
                { spellKey = _Q, range = 1100, speed = 2.0, delay = 250, width = 70, configName = "mysticShot", displayName = "Q (Mystic Shot)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                { spellKey = _W, range = 1050, speed = 1.6, delay = 250, width = 90, configName = "essenceFlux", displayName = "W (Essence Flux)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "KogMaw" then
                spellArray = {
                { spellKey = _Q, range = 625, speed = 1.3, delay = 260, width = 200, configName = "causticSpittle", displayName = "Q (Caustic Spittle)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = true },
                { spellKey = _W, range = 625, speed = 1.3, delay = 260, width = 200, configName = "bioArcaneBarrage", displayName = "W (Bio-Arcane Barrage)", enabled = true, forceRange = true, forceToHitBox = true, skillShot = false, minions = false, reset = false, reqTarget = false },
                { spellKey = _E, range = 850, speed = 1.3, delay = 260, width = 200, configName = "voidOoze", displayName = "E (Void Ooze)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                { spellKey = _R, range = 1700, speed = math.huge, delay = 1000, width = 200, configName = "livingArtillery", displayName = "R (Living Artillery)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Sivir" then
                spellArray = {
                { spellKey = _Q, range = 1000, speed = 1.33, delay = 250, width = 120, configName = "boomerangBlade", displayName = "Q (Boomerang Blade)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                { spellKey = _W, range = getTrueRange(), speed = 1, delay = 0, width = 200, configName = "Ricochet", displayName = "W (Ricochet)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = true },
                }
        elseif myHero.charName == "Graves" then
                spellArray = {
                { spellKey = _Q, range = 750, speed = 2, delay = 250, width = 200, configName = "buckShot", displayName = "Q (Buck Shot)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                { spellKey = _W, range = 700, speed = 1400, delay = 300, width = 500, configName = "smokeScreen", displayName = "W (Smoke Screen)", enabled = false, skillShot = true, minions = false, reset = false, reqTarget = true },
                { spellKey = _E, range = 580, speed = 1450, delay = 250, width = 200, configName = "quickDraw", displayName = "E (Quick Draw)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = false, atMouse = true },
                }
        elseif myHero.charName == "Caitlyn" then
                spellArray = {
                { spellKey = _Q, range = 1300, speed = 2.1, delay = 625, width = 100, configName = "piltoverPeacemaker", displayName = "Q (Piltover Peacemaker)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Corki" then
                spellArray = {
                { spellKey = _Q, range = 600, speed = 2, delay = 200, width = 500, configName = "phosphorusBomb", displayName = "Q (Phosphorus Bomb)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                { spellKey = _R, range = 1225, speed = 2, delay = 200, width = 50, configName = "missileBarrage", displayName = "R (Missile Barrage)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Teemo" then
                spellArray = {
                { spellKey = _Q, range = 580, speed = 2, delay = 0, width = 200, configName = "blindingDart", displayName = "Q (Blinding Dart)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "TwistedFate" then
                spellArray = {
                { spellKey = _Q, range = 1200, speed = 1.45, delay = 250, width = 200, configName = "wildCards", displayName = "Q (Wild Cards)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Vayne" then
                spellArray = {
                { spellKey = _Q, range = 580, speed = 1.45, delay = 250, width = 200, configName = "tumble", displayName = "Q (Tumble)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = false, atMouse = true },
                { spellKey = _R, range = 580, speed = 1.45, delay = 250, width = 200, configName = "finalHour", displayName = "R (Final Hour)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = false},
                }
        elseif myHero.charName == "MissFortune" then
                spellArray = {
                { spellKey = _Q, range = 650, speed = 1.45, delay = 250, width = 200, configName = "doubleUp", displayName = "Q (Double Up)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = true},
                { spellKey = _W, range = 580, speed = 1.45, delay = 250, width = 200, configName = "impureShots", displayName = "W (Impure Shots)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = false},
                { spellKey = _E, range = 800, speed = math.huge, delay = 500, width = 500, configName = "makeItRain", displayName = "E (Make It Rain)", enabled = false, skillShot = true, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Tristana" then
                spellArray = {
                { spellKey = _Q, range = 580, speed = 1.45, delay = 250, width = 200, configName = "rapidFire", displayName = "Q (Rapid Fire)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = false},
                { spellKey = _E, range = 550, speed = 1.45, delay = 250, width = 200, configName = "explosiveShot", displayName = "E (Explosive Shot)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = true},
                }
        elseif myHero.charName == "Draven" then
                spellArray = {
                { spellKey = _E, range = 950, speed = 1.37, delay = 300, width = 130, configName = "standAside", displayName = "E (Stand Aside)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true},
                }
        --[[ Added Champs ]]
        elseif myHero.charName == "Kennen" then
                spellArray = {
                { spellKey = _Q, range = 1050, speed = 1.65, delay = 180, width = 80, configName = "thunderingShuriken", displayName = "Q (Thundering Shuriken)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Ashe" then
                spellArray = {
                { spellKey = _W, range = 1200, speed = 2.0, delay = 120, width = 85, configName = "Volley", displayName = "W (Volley)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Syndra" then
                spellArray = {
                { spellKey = _Q, range = 800, speed = math.huge, delay = 400, width = 100, configName = "darkSphere", displayName = "Q (Dark Sphere)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Jayce" then
                spellArray = {
                { spellKey = _Q, range = 1600, speed = 2.0, delay = 350, width = 90, configName = "shockBlast", displayName = "Q (Shock Blast)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Nidalee" then
                spellArray = {
                { spellKey = _Q, range = 1500, speed = 1.3, delay = 125, width = 80, configName = "javelinToss", displayName = "Q (Javelin Toss)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        --[[elseif myHero.charName == "Varus" then
spellArray = {
{ spellKey = _E, range = 925, speed = 1.75, delay = 240, width = 235, configName = "hailofArrows", displayName = "E (Hail of Arrows)", enabled = true, skillShot = true, minions = false, reset = false, reqTarget = true },
}]]
        elseif myHero.charName == "Quinn" then
                spellArray = {
                { spellKey = _Q, range = 1050, speed = 1.55, delay = 220, width = 90, configName = "blindingAssault", displayName = "Q (Blinding Assault)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                --{ spellKey = _E, range = 725, speed = 1.45, delay = 250, width = nil, configName = "vault", displayName = "E (Vault)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = true},
                }
        elseif myHero.charName == "LeeSin" then
                spellArray = {
                { spellKey = _Q, range = 975, speed = 1.5, delay = 250, width = 70, configName = "sonicWave", displayName = "Q (Sonic Wave)", enabled = true, skillShot = true, minions = true, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Gangplank" then
                spellArray = {
                { spellKey = _Q, range = 625, speed = 1.45, delay = 250, width = 200, configName = "parley", displayName = "Q (Parley)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = true},
                }
        elseif myHero.charName == "Twitch" then
                spellArray = {
                { spellKey = _W, range = 950, speed = 1.4, delay = 250, width = 275, configName = "venomCask", displayName = "W (Venom Cask)", enabled = false, skillShot = true, minions = false, reset = false, reqTarget = true },
                }
        elseif myHero.charName == "Darius" then
            spellArray = {
            { spellKey = _W, range = 300, speed = 2, delay = 0, width = 200, configName = "cripplingStrike", displayName = "W (Crippling Strike)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }    
        elseif myHero.charName == "Hecarim" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "rampage", displayName = "Q (Rampage)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Warwick" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "hungeringStrike", displayName = "Q (Hungering Strike)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = true },
            }    
        elseif myHero.charName == "MonkeyKing" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "crushingBlow", displayName = "Q (Crushing Blow)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }        
        elseif myHero.charName == "Poppy" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "devastatingBlow", displayName = "Q (Devastating Blow)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }    
        elseif myHero.charName == "Talon" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "noxianDiplomacy", displayName = "Q (Noxian Diplomacy)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Nautilus" then
            spellArray = {
            { spellKey = _W, range = 300, speed = 2, delay = 0, width = 200, configName = "titansWrath", displayName = "W (Titans Wrath)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }        
        elseif myHero.charName == "Gangplank" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "parlay", displayName = "Q (Parlay)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = true },
            }        
        elseif myHero.charName == "Vi" then
            spellArray = {
            { spellKey = _E, range = 300, speed = 2, delay = 0, width = 200, configName = "excessiveForce", displayName = "E (Excessive Force)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Rengar" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "savagery", displayName = "Q (Savagery)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Trundle" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "chomp", displayName = "Q (Chomp)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }                    
        elseif myHero.charName == "Leona" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "shieldOfDaybreak", displayName = "Q (Shield Of Daybreak)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Fiora" then
            spellArray = {
            { spellKey = _E, range = 300, speed = 2, delay = 0, width = 200, configName = "burstOfSpeed", displayName = "E (Burst Of Speed)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }        
        elseif myHero.charName == "Blitzcrank" then
            spellArray = {
            { spellKey = _E, range = 300, speed = 2, delay = 0, width = 200, configName = "powerFist", displayName = "E (Power Fist)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Shyvana" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "twinBlade", displayName = "Q (Twin Blade)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Renekton" then
            spellArray = {
            { spellKey = _W, range = 300, speed = 2, delay = 0, width = 200, configName = "ruthless Predator", displayName = "W (Ruthless Predator)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }            
        elseif myHero.charName == "Jax" then
            spellArray = {
            { spellKey = _W, range = 300, speed = 2, delay = 0, width = 200, configName = "empower", displayName = "W (Empower)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }        
        elseif myHero.charName == "XinZhao" then
            spellArray = {
            { spellKey = _Q, range = 300, speed = 2, delay = 0, width = 200, configName = "threeTalonStrike", displayName = "Q (Three Talon Strike)", enabled = true, skillShot = false, minions = true, reset = true, reqTarget = false },
            }        
        elseif myHero.charName == "Nunu" then
            spellArray = {
            { spellKey = _E, range = GetSpellData(_E).range, speed = 1.45, delay = 250, width = 200, configName = "showball", displayName = "E (Snowball)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = true},
            }
        elseif myHero.charName == "Khazix" then
            spellArray = {
            { spellKey = _Q, range = GetSpellData(_Q).range, speed = 1.45, delay = 250, width = 200, configName = "tasteTheirFear", displayName = "Q (Taste Their Fear)", enabled = true, skillShot = false, minions = false, reset = true, reqTarget = true},
            }
        elseif myHero.charName == "Shen" then
            spellArray = {
            { spellKey = _Q, range = GetSpellData(_Q).range, speed = 1.45, delay = 250, width = 200, configName = "vorpalBlade", displayName = "Q (Vorpal Blade)", enabled = true, skillShot = false, minions = false, reset = false, reqTarget = true},
            }
        end
return spellArray
end


local priorityTable = {


    AP = {
        "Annie", "Ahri", "Akali", "Anivia", "Annie", "Brand", "Cassiopeia", "Diana", "Evelynn", "FiddleSticks", "Fizz", "Gragas", "Heimerdinger", "Karthus",
        "Kassadin", "Katarina", "Kayle", "Kennen", "Leblanc", "Lissandra", "Lux", "Malzahar", "Mordekaiser", "Morgana", "Nidalee", "Orianna",
        "Rumble", "Ryze", "Sion", "Swain", "Syndra", "Teemo", "TwistedFate", "Veigar", "Viktor", "Vladimir", "Xerath", "Ziggs", "Zyra", "MasterYi",
    },
    Support = {
        "Alistar", "Blitzcrank", "Janna", "Karma", "Leona", "Lulu", "Nami", "Nunu", "Sona", "Soraka", "Taric", "Thresh", "Zilean",
    },


    Tank = {
        "Amumu", "Chogath", "DrMundo", "Galio", "Hecarim", "Malphite", "Maokai", "Nasus", "Rammus", "Sejuani", "Shen", "Singed", "Skarner", "Volibear",
        "Warwick", "Yorick", "Zac",
    },


    AD_Carry = {
        "Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "KogMaw", "MissFortune", "Pantheon", "Quinn", "Shaco", "Sivir",
        "Talon", "Tristana", "Twitch", "Urgot", "Varus", "Vayne", "Zed",


    },


    Bruiser = {
        "Aatrox", "Darius", "Elise", "Fiora", "Gangplank", "Garen", "Irelia", "JarvanIV", "Jax", "Khazix", "LeeSin", "Nautilus", "Nocturne", "Olaf", "Poppy",
        "Renekton", "Rengar", "Riven", "Shyvana", "Trundle", "Tryndamere", "Udyr", "Vi", "MonkeyKing", "XinZhao",
    },


}


function SetPriority(table, hero, priority)
        for i=1, #table, 1 do
                if hero.charName:find(table[i]) ~= nil then
                        TS_SetHeroPriority(priority, hero.charName)
                end
        end
end


function arrangePrioritys()
        for i, enemy in ipairs(AutoCarry.EnemyTable) do
                SetPriority(priorityTable.AD_Carry, enemy, 1)
                SetPriority(priorityTable.AP, enemy, 2)
                SetPriority(priorityTable.Support, enemy, 3)
                SetPriority(priorityTable.Bruiser, enemy, 4)
                SetPriority(priorityTable.Tank, enemy, 5)
        end
end


function PriorityOnLoad()
        if heroManager.iCount < 10 then
                PrintChat(" >> Too few champions to arrange priority")
        else
                TargetSelector(TARGET_LOW_HP_PRIORITY, 0)
                arrangePrioritys()
        end
end


function getJungleMobs()
        return {"Dragon6.1.1", "Worm12.1.1", "GiantWolf8.1.3", "wolf8.1.1", "wolf8.1.2", "AncientGolem7.1.1", "YoungLizard7.1.2", "YoungLizard7.1.3", "Wraith9.1.3", "LesserWraith9.1.1", "LesserWraith9.1.2",
        "LesserWraith9.1.4", "LizardElder10.1.1", "YoungLizard10.1.2", "YoungLizard10.1.3", "Golem11.1.2", "SmallGolem11.1.1", "GiantWolf2.1.3", "wolf2.1.1",
        "wolf2.1.2", "AncientGolem1.1.1", "YoungLizard1.1.2", "YoungLizard1.1.3", "Wraith3.1.3", "LesserWraith3.1.1", "LesserWraith3.1.2", "LesserWraith3.1.4",
        "LizardElder4.1.1", "YoungLizard4.1.2", "YoungLizard4.1.3", "Golem5.1.2", "SmallGolem5.1.1"}
end


--[[ Menus ]]--
function setMenus()
    mainMenu()
    skillsMenu()
    itemMenu()
    displayMenu()
    permaMenu()
    masteryMenu()
    farmMenu()
    summonerMenu()
    streamingMenu()
    performanceMenu()
    pluginMenu()
end


function itemMenu()
    ItemMenu = scriptConfig("Sida's Auto Carry: Items", "sidasacitems")
    ItemMenu:addParam("sep", "-- Settings --", SCRIPT_PARAM_INFO, "")
    ItemMenu:addParam("UseItemsAC", "Use Items With AutoCarry", SCRIPT_PARAM_ONOFF, true)
    ItemMenu:addParam("UseItemsLastHit", "Use Items With Harass", SCRIPT_PARAM_ONOFF, true)
    ItemMenu:addParam("UseItemsMixed", "Use Items With Mixed Mode", SCRIPT_PARAM_ONOFF, true)
    ItemMenu:addParam("sep2", "-- Items --", SCRIPT_PARAM_INFO, "")
    for _, item in ipairs(items) do
            ItemMenu:addParam(item.menu, "Use "..item.name, SCRIPT_PARAM_ONOFF, true)
    end
    ItemMenu:addParam("muraMana", "Use Muramana", SCRIPT_PARAM_ONOFF, true)
end


function mainMenu()
    AutoCarry.MainMenu = scriptConfig("Sida's Auto Carry: Settings", "sidasacmain")
    AutoCarry.MainMenu:addParam("AutoCarry", "Auto Carry", SCRIPT_PARAM_ONKEYDOWN, false, AutoCarryKey)
    AutoCarry.MainMenu:addParam("LastHit", "Last Hit", SCRIPT_PARAM_ONKEYDOWN, false, LastHitKey)
    AutoCarry.MainMenu:addParam("MixedMode", "Mixed Mode", SCRIPT_PARAM_ONKEYDOWN, false, MixedModeKey)
    AutoCarry.MainMenu:addParam("LaneClear", "Lane Clear", SCRIPT_PARAM_ONKEYDOWN, false, LaneClearKey)
    AutoCarry.MainMenu:addParam("Focused", "Prioritise Selected Target", SCRIPT_PARAM_ONOFF, false)
    AutoCarry.MainMenu:addParam("HoldZone", "Stand Still And Shoot Range", SCRIPT_PARAM_SLICE, 0, 0, getTrueRange(), 0)
    AutoCarry.MainMenu:addTS(AutoCarry.Orbwalker)
end


function skillsMenu()
    SkillsMenu = scriptConfig("Sida's Auto Carry: Skills", "sidasacskills")
    if Skills then
        SkillsMenu:addParam("sep", "-- Auto Carry Skills --", SCRIPT_PARAM_INFO, "")
        for _, skill in ipairs(Skills) do
            SkillsMenu:addParam(skill.configName.."AutoCarry", "Use "..skill.displayName, SCRIPT_PARAM_ONOFF, true)
        end
        SkillsMenu:addParam("sep2", "-- Mixed Mode Skills --", SCRIPT_PARAM_INFO, "")
        for _, skill in ipairs(Skills) do
            SkillsMenu:addParam(skill.configName.."MixedMode", "Use "..skill.displayName, SCRIPT_PARAM_ONOFF, true)
        end
    else
        SkillsMenu:addParam("sep", myHero.charName.." does not have any supported skills", SCRIPT_PARAM_INFO, "")
    end
    if VIP_USER then
        SkillsMenu:addParam("hitChance", "Ability Hitchance", SCRIPT_PARAM_SLICE, 60, 0, 100, 0)
    end
end


function displayMenu()
    DisplayMenu = scriptConfig("Sida's Auto Carry: Display", "sidasacdisplay")
    DisplayMenu:addParam("disableAllDrawing", "Disable All Drawing", SCRIPT_PARAM_ONOFF, false)
    DisplayMenu:addParam("myRange", "Attack Range Circle", SCRIPT_PARAM_ONOFF, true)
    DisplayMenu:addParam("target", "Circle Around Target", SCRIPT_PARAM_ONOFF, true)
    DisplayMenu:addParam("minion", "Circle Next Minion To Last Hit", SCRIPT_PARAM_ONOFF, true)
    DisplayMenu:addParam("sep", "-- Always Display (Requires Reload) --", SCRIPT_PARAM_INFO, "")
    DisplayMenu:addParam("AutoCarry", "Auto Carry Hotkey Status", SCRIPT_PARAM_ONOFF, true)
    DisplayMenu:addParam("LastHit", "Last Hit Hotkey Status", SCRIPT_PARAM_ONOFF, true)
    DisplayMenu:addParam("MixedMode", "Mixed Mode Hotkey Status", SCRIPT_PARAM_ONOFF, true)
    DisplayMenu:addParam("LaneClear", "Lane Clear Hotkey Status", SCRIPT_PARAM_ONOFF, true)
end


function permaMenu()
    if DisplayMenu.AutoCarry then AutoCarry.MainMenu:permaShow("AutoCarry") end
    if DisplayMenu.LastHit then AutoCarry.MainMenu:permaShow("LastHit") end
    if DisplayMenu.MixedMode then AutoCarry.MainMenu:permaShow("MixedMode") end
    if DisplayMenu.LaneClear then AutoCarry.MainMenu:permaShow("LaneClear") end
end


function masteryMenu()
    MasteryMenu = scriptConfig("Sida's Auto Carry: Masteries", "sidasacmasteries")
    MasteryMenu:addParam("Butcher", "Butcher", SCRIPT_PARAM_SLICE, 0, 0, 2, 0)
    MasteryMenu:addParam("Spellblade", "Spellblade", SCRIPT_PARAM_ONOFF, false)
    MasteryMenu:addParam("Executioner", "Executioner", SCRIPT_PARAM_ONOFF, false)
end


function farmMenu()
    FarmMenu = scriptConfig("Sida's Auto Carry: Farming", "sidasacfarming")
    FarmMenu:addParam("Predict", "Predict Minion Damage", SCRIPT_PARAM_ONOFF, true)
    FarmMenu:addParam("moveLastHit", "Move To Mouse Last Hit Farming", SCRIPT_PARAM_ONOFF, true)
    FarmMenu:addParam("moveMixed", "Move To Mouse Mixed Mode Farming", SCRIPT_PARAM_ONOFF, true)
    FarmMenu:addParam("moveClear", "Move To Mouse Lane Clear Farming", SCRIPT_PARAM_ONOFF, true)
end


function summonerMenu()
    SummonerMenu = scriptConfig("Sida's Auto Carry: Summoner Spells", "sidasacsummoner")
    SummonerMenu:addParam("Ignite", "Ignite Killable Enemies", SCRIPT_PARAM_ONOFF, true)
    SummonerMenu:addParam("Barrier", "Auto Barrier Upon High Damage", SCRIPT_PARAM_ONOFF, true)
end


function streamingMenu()
    StreamingMenu = scriptConfig("Sida's Auto Carry: Streaming", "sidasacstreaming")
    StreamingMenu:addParam("ShowClick", "Show Click Marker", SCRIPT_PARAM_ONOFF, true)
    StreamingMenu:addParam("MinRand", "Minimum Time Between Clicks", SCRIPT_PARAM_SLICE, 150, 0, 1000, 0)
    StreamingMenu:addParam("MaxRand", "Maximum Time Between Clicks", SCRIPT_PARAM_SLICE, 650, 0, 1000, 0)
    StreamingMenu:addParam("Colour", "0 = Green, 1 = Red", SCRIPT_PARAM_SLICE, 0, 0, 1, 0)
    StreamingMenu:addParam("DisableDrawing", "Streaming Mode", SCRIPT_PARAM_ONOFF, true)
end


function performanceMenu()
    PerformanceMenu = scriptConfig("Sida's Auto Carry: Performance", "sidasacperformance")
    PerformanceMenu:addParam("sep", "-- Can Cause FPS Lag! --", SCRIPT_PARAM_INFO, "")
    PerformanceMenu:addParam("VipCol", "Use VIP Collision (Requires Reload!)", SCRIPT_PARAM_ONOFF, false)
    PerformanceMenu:addParam("JungleFarm", "Enable Jungle Clearing", SCRIPT_PARAM_ONOFF, false)
end


function pluginMenu()
    if hasPlugin then
        AutoCarry.PluginMenu = scriptConfig("Sida's Auto Carry: "..myHero.charName.." Plugin", "sidasacplugin"..myHero.charName)
        require("SidasAutoCarryPlugin - "..myHero.charName)
        PrintChat(">> Sida's Auto Carry: Loaded "..myHero.charName.." plugin!")
    end
end

 

 

tsmet.png

Opublikowano

A jeszcze jakotś się aktywuje czy nie trzeba troszkę nie ogarniam 1 raz w to się bawie :_:.


790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Opublikowano

 

A jeszcze jakotś się aktywuje czy nie trzeba troszkę nie ogarniam 1 raz w to się bawie :_:.

 

 

 

Na bolu dajesz ptaszka (zaznaczasz) i jak wszedleś do gry wciskając Shift masz tam różne opcje :).

Dawniej Mounthains... :/

Opublikowano

Na bolu dajesz ptaszka (zaznaczasz) i jak wszedleś do gry wciskając Shift masz tam różne opcje :).

Nie działa?:C

790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Opublikowano
 

Zapisałeś jako .lua ?

 
nw co robię nie tak ( jak coś robię to 1 raz)

790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Opublikowano

Rozumiem że skrypt wkleiłeś do Edytora w BoL'u, Masz jakąś informacje na czacie? (po włączeniu gry)

Opublikowano

Rozumiem że skrypt wkleiłeś do Edytora w BoL'u, Masz jakąś informacje na czacie? (po włączeniu gry)

Nie, dodam że mam win XP może na xp nie działa?

790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Opublikowano
 

Wcisnałeś F9 w grze?

 
 
 
 
takie czerwone coś po bokach mi się zrobiło jak kliknąłem F9
 
tak btw nie mam vipa (może przez to?)

790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Opublikowano

tak jak @up,

BoL dla free jest off do 8/04, Musisz trochę poczekać :)

Opublikowano

tak jak @up,

BoL dla free jest off do 8/04, Musisz trochę poczekać :)

A no chyba że tak to kupuje vipa (jak byś mógł na pw mi napisać jakie skrypty się opłaca itp by było miło)

Temat do zamknięcia.

790331421158480286162.png

 

i5 2500k 

msi z77a gd 55

Ballistix x2 4gb

r9 270x 4gb

Thermaltake 530w

gladius m25

seagate 1tb

 

 

 

 

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...