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

[pytanie] sida auto carry vayne


mcafee

Rekomendowane odpowiedzi

Opublikowano

Witam posiadam skrypt do bola na vayne auto carry nizej go umieszcze moglby mi ktos powiedziec jak wylaczyc chodzenie za kursorem?

 


                Sida's Auto Carry: Revamped
                                v4.9
]]--
 
--[[ Configuration ]]--
 
local AutoCarryKey = 32
local LastHitKey = string.byte("K")
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 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
 
--[[ 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)
	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)
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) < 200 then 
				myHero:Attack(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"
		--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"
    )
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 = 500, reqTarget = true, slot = nil },
		{name = "Bilgewater Cutlass", menu = "BWC", id=3144, range = 500, 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
 
--[[ 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
		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 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

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},
        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("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

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...