arthasdk icon

AutoLevelUP Queue 1.3b

arthasdk | PRO | 01/04/13 04:12:00 AM UTC | 0 ⭐ | 112 👁️ | Never ⏰ | []
Lua |

12.69 KB

|

None

|

0 👍

/

0 👎

--^^^^^^^^^^^^^^^^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

Comments