--^^^^^^^^^^^^^^^^ArthasDK's AutoLevelUP Queue v1.3b^^^^^^^^^^^^^^^^ -- 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" SpriteTable[1] = GetSprite (("/SidasUI/"..myHero:GetSpellData(_Q).name:lower().."_"..size.."_result.dds"),("Q_default.dds")) SpriteTable[2] = GetSprite (("/SidasUI/"..myHero:GetSpellData(_W).name:lower().."_"..size.."_result.dds"),("W_default.dds")) SpriteTable[3] = GetSprite (("/SidasUI/"..myHero:GetSpellData(_E).name:lower().."_"..size.."_result.dds"),("E_default.dds")) SpriteTable[4] = GetSprite (("/SidasUI/"..myHero:GetSpellData(_R).name:lower().."_"..size.."_result.dds"),("R_default.dds")) 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 if ArthasDKMenu.useSprite then for i=1,4,1 do if spellcounts[i]>0 then SpriteWorkDone[i]=false end end 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 if ArthasDKMenu.add444 == false then for i=1,#Table do if Table[i] ~= 0 then result=result+1 end end else for i=1,#Table do if Table[i] ~= 0 and Table[i] ~=4 then result=result+1 end 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