--^^^^^^^^^^^^^^^^ArthasDK's AutoLevelUP Queue v1.3^^^^^^^^^^^^^^^^
-- Put Abilities in the Queue Using the Shift Menu/Sprite/Chat so enjoy
-- May bug but should not i tested it a lot.
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if myHero.charName == "Udyr" or myHero.charName == "Khazix" then PrintChat("Sorry, Auto Levelup Queue does not work with that champion!") return end
require "AllClass"
local queue={}
local spellcounts={5,5,5,3}
local beforeLevelUp={0,0,0,0}
local afterLevelUp={0,0,0,0}
local levelUpRequired= false
local popFromQueue= false
local needToDelete =-1
local moveKey=string.byte('M')
local firstTimeadd444= true
local SpriteTable={nil,nil,nil,nil}
local iconUnderSprite={nil,nil,nil,nil}
local SpriteVisible={false,false,false,false}
local SpriteWorkDone={false,false,false,false}
local x,y=0,0
local uiSettings = {}
function OnLoad()
spellcounts[1]=5-player:GetSpellData(SPELL_1).level
spellcounts[2]=5-player:GetSpellData(SPELL_2).level
spellcounts[3]=5-player:GetSpellData(SPELL_3).level
spellcounts[4]=3-player:GetSpellData(SPELL_4).level
PrintChat(">> Loaded AutoSkillLevelUp Queue by ArthasDK")
replaceTable(beforeLevelUp,1,player:GetSpellData(SPELL_1).level )
replaceTable(beforeLevelUp,2,player:GetSpellData(SPELL_2).level )
replaceTable(beforeLevelUp,3,player:GetSpellData(SPELL_3).level )
replaceTable(beforeLevelUp,4,player:GetSpellData(SPELL_4).level )
ArthasDKMenu = scriptConfig("Auto Level Queue", "ArthasDK AutoLevelQueue")
ArthasDKMenu:addParam("showQueue", "Show Queue", SCRIPT_PARAM_ONOFF, true)
ArthasDKMenu:addParam("useMenu", "Use Menu Mode", SCRIPT_PARAM_ONOFF, false)
ArthasDKMenu:addParam("useSprite", "Use Sprite Mode", SCRIPT_PARAM_ONOFF, true)
ArthasDKMenu:addParam("add444", "Always level R when possible", SCRIPT_PARAM_ONOFF, false)
if ArthasDKMenu.useMenu then
ArthasDKMenu:addParam("addQ", "Add 'Q' to Queue", SCRIPT_PARAM_ONOFF, false)
ArthasDKMenu:addParam("addW", "Add 'W' to Queue", SCRIPT_PARAM_ONOFF, false)
ArthasDKMenu:addParam("addE", "Add 'E' to Queue", SCRIPT_PARAM_ONOFF, false)
if ArthasDKMenu.add444== false then ArthasDKMenu:addParam("addR", "Add 'R' to Queue", SCRIPT_PARAM_ONOFF, false) end
ArthasDKMenu:addParam("addQPriority", "Add 'Q's in Priority", SCRIPT_PARAM_ONOFF, false)
ArthasDKMenu:addParam("addWPriority", "Add 'W's in Priority", SCRIPT_PARAM_ONOFF, false)
ArthasDKMenu:addParam("addEPriority", "Add 'E's in Priority", SCRIPT_PARAM_ONOFF, false)
if ArthasDKMenu.add444== false then ArthasDKMenu:addParam("addRPriority", "Add 'R's in Priority", SCRIPT_PARAM_ONOFF, false) end
end
ArthasDKMenu:addParam("resetQueue", "Reset The Queue", SCRIPT_PARAM_ONKEYDOWN, false, string.byte('L'))
ArthasDKMenu.addQPriority = false
ArthasDKMenu.addWPriority = false
ArthasDKMenu.addEPriority = false
ArthasDKMenu.addRPriority = false
ArthasDKMenu.addQ = false
ArthasDKMenu.addW = false
ArthasDKMenu.addE = false
ArthasDKMenu.addR = false
ArthasDKMenu.resetQueue= false
if ArthasDKMenu.add444== true then
insertSkilltoQueue(queue,4,3)
firstTimeadd444=false
end
loadSprites()
if file_exists(tostring(LIB_PATH.."arthasdkui.cfg")) then
uiSettings = assert(loadfile(tostring(LIB_PATH.."arthasdkui.cfg")))()
x,y = uiSettings.x, uiSettings.y
end
end
function writeConfig()
local file = io.open(tostring(LIB_PATH.."arthasdkui.cfg"), "w")
if file then
file:write(tostring("return { x = "..tostring(x)..", y = "..tostring(y).."}"))
file:close()
end
end
function loadSprites()
local size = "32"
if file_exists(LIB_PATH.."../../Sprites/SidasUI/"..myHero:GetSpellData(_Q).name:lower().."_"..size.."_result.dds") then
SpriteTable[1] = createSprite("/SidasUI/"..myHero:GetSpellData(_Q).name:lower().."_"..size.."_result.dds")
else
SpriteTable[1] = createSprite("/SidasUI/UI_game_spell_description_Unknow_result.dds")
end
if file_exists(LIB_PATH.."../../Sprites/SidasUI/"..myHero:GetSpellData(_W).name:lower().."_"..size.."_result.dds") then
SpriteTable[2] = createSprite("/SidasUI/"..myHero:GetSpellData(_W).name:lower().."_"..size.."_result.dds")
else
SpriteTable[2] = createSprite("/SidasUI/UI_game_spell_description_Unknow_result.dds")
end
if file_exists(LIB_PATH.."../../Sprites/SidasUI/"..myHero:GetSpellData(_E).name:lower().."_"..size.."_result.dds") then
SpriteTable[3] = createSprite("/SidasUI/"..myHero:GetSpellData(_E).name:lower().."_"..size.."_result.dds")
else
SpriteTable[3] = createSprite("/SidasUI/UI_game_spell_description_Unknow_result.dds")
end
if file_exists(LIB_PATH.."../../Sprites/SidasUI/"..myHero:GetSpellData(_R).name:lower().."_"..size.."_result.dds") then
SpriteTable[4] = createSprite("/SidasUI/"..myHero:GetSpellData(_R).name:lower().."_"..size.."_result.dds")
else
SpriteTable[4] = createSprite("/SidasUI/UI_game_spell_description_Unknow_result.dds")
end
end
function OnWndMsg(msg,key)
if msg == WM_LBUTTONDOWN then --and IsKeyDown(16) then
if iconUnderSprite[1] then insertSkilltoQueue(queue,1,1)
elseif iconUnderSprite[2] then insertSkilltoQueue(queue,2,1)
elseif iconUnderSprite[3] then insertSkilltoQueue(queue,3,1)
elseif iconUnderSprite[4] then insertSkilltoQueue(queue,4,1)
end
end
if msg == WM_RBUTTONDOWN then --and IsKeyDown(17) then
if iconUnderSprite[1] then insertSkilltoQueue(queue,1,5)
elseif iconUnderSprite[2] then insertSkilltoQueue(queue,2,5)
elseif iconUnderSprite[3] then insertSkilltoQueue(queue,3,5)
elseif iconUnderSprite[4] then insertSkilltoQueue(queue,4,3)
end
end
if key==moveKey then
x,y = GetCursorPos().x,GetCursorPos().y
writeConfig()
end
SC__OnWndMsg(msg,key)
end
function replaceTable(Table,i,value)
if i <= #Table then
table.remove(Table,i)
table.insert(Table,i,value)
end
end
function rightShift(Table,pos)
for i=pos,#Table-1,1 do
Table[i]=Table[i+1]
end
Table[#Table]=0
end
function FindFirstOccurenceOf(Table,item)
for i=1,#Table,1 do
if Table[i]==item then return i end
end
return -1
end
function insertSkilltoQueue(Table,item,numberOfTimes)
if Table and item>=1 and item <=4 and numberOfTimes>0 then
if numberOfTimes >1 and tonumber (spellcounts[item]) >0 then
numberOfTimes = spellcounts[item]
for i =1,numberOfTimes,1 do
table.insert(queue,item)
spellcounts[item]= tonumber(spellcounts[item])-1
end
if spellcounts[item] ==0 and ArthasDKMenu.useSprite then
SpriteWorkDone[item]=true
end
end
if numberOfTimes ==1 and tonumber (spellcounts[item]) >0 then
table.insert(queue,item)
spellcounts[item]= tonumber(spellcounts[item])-1
if spellcounts[item] ==0 and ArthasDKMenu.useSprite then
SpriteWorkDone[item]=true
end
elseif numberOfTimes ==1 and tonumber (spellcounts[item]) ==0 then
numberOfTimes=0
end
local tempString=""
if item==1 then tempString="Q"
elseif item==2 then tempString="W"
elseif item==3 then tempString="E"
else tempString="R" end
if ArthasDKMenu.add444== true and item ==4 then
elseif numberOfTimes>0 then PrintChat("Pushed "..tempString.."x"..tostring(numberOfTimes).."!")
end
end
end
function OnSendChat(text)
if text == ".4" or text==".R" or text ==".r" then
BlockChat()
insertSkilltoQueue(queue,4,1)
elseif text == ".3" or text==".E" or text ==".e" then
BlockChat()
insertSkilltoQueue(queue,3,1)
elseif text == ".2" or text==".W" or text ==".w" then
BlockChat()
insertSkilltoQueue(queue,2,1)
elseif text == ".1" or text==".q" or text ==".Q" then
BlockChat()
insertSkilltoQueue(queue,1,1)
elseif text == "!1" or text=="!q" or text =="!Q" then
BlockChat()
insertSkilltoQueue(queue,1,5)
elseif text == "!2" or text=="!w" or text =="!W" then
BlockChat()
insertSkilltoQueue(queue,2,5)
elseif text == "!3" or text=="!E" or text =="!E" then
BlockChat()
insertSkilltoQueue(queue,3,5)
elseif text == "!4" or text=="!r" or text =="!R" then
BlockChat()
insertSkilltoQueue(queue,4,3)
end
end
function OnTick()
if ArthasDKMenu.useSprite== true then
for i=1,4,1 do
iconUnderSprite[i] = SpriteTable[i] and CursorIsUnder(x+40*(i-1)+2*(i-1),y, 32, 32) and SpriteVisible[i]
end
end
if ArthasDKMenu.resetQueue== true then
for i=1,#queue,1 do
table.remove (queue)
end
spellcounts[1]=5-player:GetSpellData(SPELL_1).level
spellcounts[2]=5-player:GetSpellData(SPELL_2).level
spellcounts[3]=5-player:GetSpellData(SPELL_3).level
spellcounts[4]=3-player:GetSpellData(SPELL_4).level
PrintChat("Cleared the Queue")
if ArthasDKMenu.add444== true then
insertSkilltoQueue(queue,4,3)
end
ArthasDKMenu.resetQueue= false
end
if ArthasDKMenu.add444== true and firstTimeadd444 == true then
spellcounts[4]=3-player:GetSpellData(SPELL_4).level
for j=1,3,1 do
for i=1,#queue,1 do
if queue[i]==4 then
table.remove(queue,i)
j=j+1
end
end
end
local noOfTimes=spellcounts[4]
for i=1,noOfTimes,1 do
table.insert(queue,1,4)
spellcounts[4]= tonumber(spellcounts[4])-1
end
SpriteWorkDone[4]=true
firstTimeadd444= false
elseif ArthasDKMenu.add444== false and firstTimeadd444== false then
for j=1,3,1 do
for i=1,#queue,1 do
if queue[i]==4 then
table.remove(queue,i)
j=j+1
end
end
end
spellcounts[4]=3-player:GetSpellData(SPELL_4).level
SpriteWorkDone[4]=false
firstTimeadd444= true
end
if ArthasDKMenu.addQ ==true then
insertSkilltoQueue(queue,1,1)
ArthasDKMenu.addQ = false
end
if ArthasDKMenu.addW ==true then
insertSkilltoQueue(queue,2,1)
ArthasDKMenu.addW = false
end
if ArthasDKMenu.addE ==true then
insertSkilltoQueue(queue,3,1)
ArthasDKMenu.addE = false
end
if ArthasDKMenu.addR ==true and ArthasDKMenu.add444== false then
insertSkilltoQueue(queue,4,1)
ArthasDKMenu.addR = false
end
if ArthasDKMenu.addQPriority ==true then
insertSkilltoQueue(queue,1,5)
ArthasDKMenu.addQPriority = false
end
if ArthasDKMenu.addWPriority ==true then
insertSkilltoQueue(queue,2,5)
ArthasDKMenu.addWPriority = false
end
if ArthasDKMenu.addEPriority ==true then
insertSkilltoQueue(queue,3,5)
ArthasDKMenu.addEPriority = false
end
if ArthasDKMenu.addRPriority ==true and ArthasDKMenu.add444== false then
insertSkilltoQueue(queue,4,3)
ArthasDKMenu.addRPriority = false
end
if player:GetSpellData(SPELL_1).level + player:GetSpellData(SPELL_2).level + player:GetSpellData(SPELL_3).level + player:GetSpellData(SPELL_4).level < player.level and #queue>0 then
levelUpRequired = true
end
if levelUpRequired== true then
for i=1,#queue,1 do
LevelSpell(tonumber(queue[i])-1)
end
popFromQueue= true
levelUpRequired=false
end
if popFromQueue== true then
replaceTable(afterLevelUp,1,player:GetSpellData(SPELL_1).level )
replaceTable(afterLevelUp,2,player:GetSpellData(SPELL_2).level )
replaceTable(afterLevelUp,3,player:GetSpellData(SPELL_3).level )
replaceTable(afterLevelUp,4,player:GetSpellData(SPELL_4).level )
for i=1,4,1 do
if beforeLevelUp[i]~=afterLevelUp[i] then
needToDelete=i
end
end
end
if needToDelete>0 then
PrintChat("Leveled UP : Ability"..tostring(tonumber(needToDelete)))
local index=FindFirstOccurenceOf(queue,needToDelete)
rightShift(queue,index)
replaceTable(beforeLevelUp,1,player:GetSpellData(SPELL_1).level )
replaceTable(beforeLevelUp,2,player:GetSpellData(SPELL_2).level )
replaceTable(beforeLevelUp,3,player:GetSpellData(SPELL_3).level )
replaceTable(beforeLevelUp,4,player:GetSpellData(SPELL_4).level )
popFromQueue=false
needToDelete=-1
end
end
function PrintTable(Table)
local String=""
for i=1,#Table do
if Table[i] ~= 0 then
if ArthasDKMenu.add444== false then
String=String..tostring(Table[i]).." "
end
if Table[i] ~= 4 and ArthasDKMenu.add444== true then
String=String..tostring(Table[i]).." "
end
end
end
return String
end
function noOfNonZeroElements(Table)
local result=0
if #Table == 0 then return 0 end
for i=1,#Table do
if Table[i] ~= 0 then result=result+1 end
end
return result
end
function OnDraw()
if ArthasDKMenu.showQueue == true and noOfNonZeroElements(queue) < 1 then DrawText("Please insert atleast one element in the Queue.", 25, 0, 25, 0xFF00ff00) end
if ArthasDKMenu.showQueue == true and noOfNonZeroElements(queue)>0 and player.level < 18 then DrawText("Printing the Contents of queue :"..PrintTable(queue), 25, 0, 0, 0xFF00ff00) end
if ArthasDKMenu.showQueue == true and player.level == 18 then DrawText("All Done :)!! ty for using", 25, 0, 0, 0xFF00ff00) end
if ArthasDKMenu.useSprite then
for i=1,4,1 do
if SpriteTable[i] and SpriteWorkDone[i]==false then
SpriteTable[i]:Draw(x+40*(i-1)+2*(i-1),y,0xFF)
SpriteVisible[i]= true
end
if SpriteTable[i] and SpriteWorkDone[i]==true then
SpriteTable[i]:Release()
SpriteVisible[i]= false
end
end
end
SC__OnDraw()
end
Comments