local EAB={ Name="ExtraActionBar", Author="Bizzarrus", AuthorServer="Draiochta", Version="2.00", DBM=false, MaxLists=0, ActionBarsMax=0, ChosenBar=0, ChosenField=0, ActuellClass="", ChoosedListVariant="", CopyFieldData=false, Bag={},--Save für InventoryIndex(II) Default={ ActionBars={ [""]={ --Different classes { --Different Bars fieldmax = 20, maxrow = 20, scale = 1, alpha = 1, Show = true, ShowTriangel = true, Lock = false, HideEmpty = false, Space = 0, ShowSymbol=3, Fields = { { [1]="",--key1 [2]="",--key2 [3]=0,--Spell-Type/Macro-Pos/Item-Value [4]=0,--Spell-ID [5]="",--Skill/Item/Macro [6]="",--Macro-Name/Item-Name ["GLOW"]="NO", }, }, }, ["DEFAULTBINDINGS"]={--Hier werden die Default bindings dieses Modusses gespeichert }, }, }, }, }; local Sol = LibStub("Sol"); local lastReply=""; local lastRepeat=""; local lastBar=0; local NewBinding=0; local fixFocus=10;--In den ersten 10 Sekunden muss unser Feld anvisiert werden. Dies dient zum reparieren eines Buggs! local loadedFocus; local lastDragedTyp=0; local lastDragedID=0; local moveFor=0; local moveback=0; local turnLe=0; local turnRi=0; local moveLe=0; local moveRi=0; local lastDraged=0; local lastKey=""; local lastKeyTime=0; local lastFocus; local onWheel=false; _G["EAB"]=EAB; --Alte Bindings: EAB.bindings={"MOVEFORWARD","MOVEBACKWARD","STRAFELEFT","STRAFERIGHT","TURNLEFT","TURNRIGHT","JUMP","SITORSTAND","TOGGLEAUTORUN","TOGGLERUN","TOGGLESHEATH", "FOLLOWTARGET","SCREENSHOT","PUSHTOTALK","TOGGLEBACKPACK","TOGGLECHARACTER0","TOGGLECHARACTER1","TOGGLECHARACTER2","TOGGLECHARACTER3","TOGGLECHARACTER4", "TOGGLECHARACTER5","TOGGLESPELLBOOK","TOGGLEQUESTBOOK","TOGGLEGUILD","TOGGLEINSTANCERECORD","TOGGLEPARTERFRAME","TOGGLESOCIALFRAME","TOGGLEBLACKLISTFRAME", "TOGGLEHATEFRIEND","TOGGLESEARCHGROUP","TOGGLECHARTBOOK","TOGGLEBEAUTYSTUDIO","TOGGLEITEMMALL","TOGGLEBULLETINBOARD","TOGGLEWORLDMAP","TOGGLEAREAMAP", "TOGGLENPCTRACK","TOGGLETEACHING","TOGGLEGAMEHELP","TOGGLESORTSCOREBOARD","TOGGLEDRAWOUTRUNE","TOGGLESKILLSUIT","TOGGLETUTORIALEXPLAIN","TOGGLEFPSTEXT", "TOGGLEUI","TOGGLEGAMEMENU","TOGGLENPCNAME","TOGGLEHEALTH","TOGGLEPLATES","OPENCHAT","REPLY","REPEAT","CHATPAGEUP","CHATPAGEDOWN","CHATTOP","CHATBOTTOM", "CHAT_PARTY","CHAT_GUILD","CHAT_SAY","CHAT_YELL","CHAT_ZONE","MINIMAPZOOMIN","MINIMAPZOOMOUT","TARGETNEARESTENEMY","TARGETPREVIOUSENEMY","TARGETNEARESTFRIEND", "TARGETPREVIOUSFRIEND","TARGETSELF","TARGETPARTY1","TARGETPARTY2","TARGETPARTY3","TARGETPARTY4","TARGETPARTY5","TARGETPLAYERPET","TARGETPARTY1PET", "TARGETPARTY2PET","TARGETPARTY3PET","TARGETPARTY4PET","TARGETPARTY5PET","ASSISTTARGET","RAIDTARGET1","RAIDTARGET2","RAIDTARGET3","RAIDTARGET4","RAIDTARGET5", "RAIDTARGET6","RAIDTARGET7","RAIDTARGET8","ACTIONBAR1BUTTON1","ACTIONBAR1BUTTON2","ACTIONBAR1BUTTON3","ACTIONBAR1BUTTON4","ACTIONBAR1BUTTON5", "ACTIONBAR1BUTTON6","ACTIONBAR1BUTTON7","ACTIONBAR1BUTTON8","ACTIONBAR1BUTTON9","ACTIONBAR1BUTTON10","ACTIONBAR1BUTTON11","ACTIONBAR1BUTTON12", "ACTIONBAR1BUTTON13","ACTIONBAR1BUTTON14","ACTIONBAR1BUTTON15","ACTIONBAR1BUTTON16","ACTIONBAR1BUTTON17","ACTIONBAR1BUTTON18","ACTIONBAR1BUTTON19", "ACTIONBAR1BUTTON20","ACTIONBAR2BUTTON1","ACTIONBAR2BUTTON2","ACTIONBAR2BUTTON3","ACTIONBAR2BUTTON4","ACTIONBAR2BUTTON5","ACTIONBAR2BUTTON6", "ACTIONBAR2BUTTON7","ACTIONBAR2BUTTON8","ACTIONBAR2BUTTON9","ACTIONBAR2BUTTON10","ACTIONBAR2BUTTON11","ACTIONBAR2BUTTON12","ACTIONBAR2BUTTON13", "ACTIONBAR2BUTTON14","ACTIONBAR2BUTTON15","ACTIONBAR2BUTTON16","ACTIONBAR2BUTTON17","ACTIONBAR2BUTTON18","ACTIONBAR2BUTTON19","ACTIONBAR2BUTTON20", "ACTIONBAR3BUTTON1","ACTIONBAR3BUTTON2","ACTIONBAR3BUTTON3","ACTIONBAR3BUTTON4","ACTIONBAR3BUTTON5","ACTIONBAR3BUTTON6","ACTIONBAR3BUTTON7", "ACTIONBAR3BUTTON8","ACTIONBAR3BUTTON9","ACTIONBAR3BUTTON10","ACTIONBAR3BUTTON11","ACTIONBAR3BUTTON12","ACTIONBAR3BUTTON13","ACTIONBAR3BUTTON14", "ACTIONBAR3BUTTON15","ACTIONBAR3BUTTON16","ACTIONBAR3BUTTON17","ACTIONBAR3BUTTON18","ACTIONBAR3BUTTON19","ACTIONBAR3BUTTON20","ACTIONBAR4BUTTON1", "ACTIONBAR4BUTTON2","ACTIONBAR4BUTTON3","ACTIONBAR4BUTTON4","ACTIONBAR4BUTTON5","ACTIONBAR4BUTTON6","ACTIONBAR4BUTTON7","ACTIONBAR4BUTTON8", "ACTIONBAR4BUTTON9","ACTIONBAR4BUTTON10","ACTIONBAR4BUTTON11","ACTIONBAR4BUTTON12","ACTIONBAR4BUTTON13","ACTIONBAR4BUTTON14","ACTIONBAR4BUTTON15", "ACTIONBAR4BUTTON16","ACTIONBAR4BUTTON17","ACTIONBAR4BUTTON18","ACTIONBAR4BUTTON19","ACTIONBAR4BUTTON20","PETACTIONBARBUTTON1","PETACTIONBARBUTTON2", "PETACTIONBARBUTTON3","PETACTIONBARBUTTON4","PETACTIONBARBUTTON5","PETACTIONBARBUTTON6","PETACTIONBARBUTTON7","PETACTIONBARBUTTON8","PETACTIONBARBUTTON9", "PETACTIONBARBUTTON10","EXTRAACTIONBUTTON1","EXTRAACTIONBUTTON2","EXTRAACTIONBUTTON3","EXTRAACTIONBUTTON4","EXTRAACTIONBUTTON5","EXTRAACTIONBUTTON6", "EXTRAACTIONBUTTON7","EXTRAACTIONBUTTON8","EXTRAACTIONBUTTON9","EXTRAACTIONBUTTON10",}; local function RoundNumber(num,ak)--num: Zahl zu runden, ak: stellen nach komma(standart 0) Bsp: round(5.117,1)-->5.1 round(5.117,2)-->5.12 num=tonumber(num); ak=tonumber(ak); if(num==nil)then return 0; end if(ak==nil)then ak=0; end local multi=1; for n=1,ak do if(ak~=0)then multi=multi*10; end end num=num*multi; local regnum=num-math.floor(num); if(regnum>=0.5)then num=num+1; end num=math.floor(num); num=num/multi; return num; end function EAB_Load(this) this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("UNIT_CLASS_CHANGED"); local ii=1; repeat ii=ii+1; until(getglobal("EAB_ActionBar_"..ii)==nil) ii=ii-1; EAB.ActionBarsMax=ii; end function EAB_Event(this,event,arg1,arg2,arg3,arg4) if(event=="VARIABLES_LOADED")then if(not EAB_Settings or EAB_Settings.Version~=EAB.Version or EAB.DBM==true)then EAB_Settings=EAB.Default; EAB_Settings.Version=EAB.Version; SendSystemChat(EAB.Name.." found a new version("..EAB.Version.."), datas are resetted!"); else SendSystemChat(EAB.Name.." was loaded"); end EAB_SetII(); EAB.ActuellClass=""; local cl,scl=UnitClassToken("player"); if(cl==nil)then cl=""; end if(scl==nil)then scl=""; end EAB.ActuellClass=string.upper(cl)..string.lower(scl); local acl=EAB_GetClassCombinations(); for a=1,table.maxn(acl)do if(EAB_Settings.ActionBars[acl[a]]==nil)then EAB_Settings.ActionBars[acl[a]]={}; end for n=1,EAB.ActionBarsMax do if(EAB_Settings.ActionBars[acl[a]][n]==nil)then EAB_Settings.ActionBars[acl[a]][n]={fieldmax=20,maxrow=20,scale=1,alpha=1,Show=true,ShowTriangel=true,Lock=false,HideEmpty=false,Space=0,ShowSymbol=3,Fields={{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",["GLOW"]="NO"}}}; end end for n=1,table.maxn(EAB_Settings.ActionBars[acl[a]]) do if(EAB_Settings.ActionBars[acl[a]][n] and EAB_Settings.ActionBars[acl[a]][n]["Fields"]==nil)then EAB_Settings.ActionBars[acl[a]][n]["Fields"]={}; end if(EAB_Settings.ActionBars[acl[a]][n] and table.maxn(EAB_Settings.ActionBars[acl[a]][n]["Fields"])<20)then for b=1,20 do EAB_Settings.ActionBars[acl[a]][n]["Fields"][b]={[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",["GLOW"]="NO"}; end end end end if (AddonManager) then EAB_Minimap:Hide(); local RegisterTable={ name = EAB.Name, description = "This addon add new, seperate config-able actionbars :)", category = "Interface", configFrame = EAB_Config, slashCommands = tostring(SLASH_EAB1)..", "..tostring(SLASH_EAB2), version = EAB.Version, author = EAB.Author.."("..EAB.AuthorServer..")", icon = "Interface/Addons/ExtraActionBars/Textures/Minimap/Icon.tga", miniButton=EAB_Minimap_AM, }; if AddonManager.RegisterAddonTable then AddonManager.RegisterAddonTable(RegisterTable); else AddonManager.RegisterAddon(RegisterTable.name,RegisterTable.description,RegisterTable.icon,RegisterTable.configFrame,RegisterTable.slashCommands,RegisterTable.miniButton,RegisterTable.onClickScript,RegisterTable.version,RegisterTable.author); end else EAB_Minimap_AM:Hide(); end --Hooks: Sol.hooks.Hook(EAB.Name, "DragSkillButton", EAB_DragSkillButton);--Hook for functionaly drag and drop system from skillframe Sol.hooks.Hook(EAB.Name, "ToggleUIFrame", EAB_ToggleUIFrame); -- Sol.hooks.Hook(EAB.Name, "SkillSuitFrame_Right1.__uiLuaOnDragBegin__",EAB_SkillSuit1_Drag); Sol.hooks.Hook(EAB.Name,"ScrollBannerFrame_AddMessage",EAB_ScrollBannerFrame_AddMessage); --Initialze: UIDropDownMenu_Initialize(EAB_Config_BarConfig_CopyViewFromList_Choose,EAB_IniChooseList); UIDropDownMenu_Initialize(EAB_Config_BarConfig_Glows,EAB_ChooseGlows); UIDropDownMenu_Initialize(EAB_Config_BarConfig_FieldConfig_Glow,EAB_ChoosGlow); --Initialze functions: EAB_LoadBars(); --CheckSaves: local func,err=loadfile("Interface/Addons/ExtraActionBars/LUA/CheckSaves.lua"); if(not err)then dofile("Interface/Addons/ExtraActionBars/LUA/CheckSaves.lua"); end else if(event=="UNIT_CLASS_CHANGED")then EAB.ActuellClass=""; local cl,scl=UnitClassToken("player"); if(cl==nil)then cl=""; end if(scl==nil)then scl=""; end EAB.ActuellClass=string.upper(cl)..string.lower(scl); if(EAB_Settings.ActionBars[EAB.ActuellClass]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass]={}; end for n=1,EAB.ActionBarsMax do if(EAB_Settings.ActionBars[EAB.ActuellClass][n]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][n]={fieldmax=20,maxrow=20,scale=1,alpha=1,Show=true,Fields={{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}}}; end end for n=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass]) do if(EAB_Settings.ActionBars[EAB.ActuellClass][n] and EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"]={}; end if(EAB_Settings.ActionBars[EAB.ActuellClass][n] and table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"])<20)then for a=1,20 do EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"][a]={[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}; end end end EAB_LoadDatas("ActionBars",EAB.ChosenBar); EAB_LoadDefaultBindings(); EAB_LoadBars(); end end end function EAB_Update(etime) if(EAB_Settings)then --Functions: EAB_SetTextAll(); EAB_Save(); EAB_UpdateMacro(etime); --Bars: local row=1; local colm=1; local lastlist=0; for i=1,(20*EAB_GetLines()) do local n=math.mod(i,20); if(n<1)then n=20; end local list=math.floor((i-1)/20)+1; local this=getglobal("EAB_ActionBar_"..list.."_Button"..n); local fieldmax=20; local maxrow=20; local scale=1; local alpha=1; local space=0; fieldmax=EAB_Settings.ActionBars[EAB.ActuellClass][list]["fieldmax"]; maxrow=EAB_Settings.ActionBars[EAB.ActuellClass][list]["maxrow"]; scale=EAB_Settings.ActionBars[EAB.ActuellClass][list]["scale"]; alpha=EAB_Settings.ActionBars[EAB.ActuellClass][list]["alpha"]; space=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Space"]; if(space==nil)then space=0; end if(this~=nil)then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Show"]==true)then if(n<=fieldmax)then if(n>1)then if(row1)then sx=maxrow else sx=row end sy=colm bar:SetSize(sx*this:GetWidth()+9,sy*this:GetHeight()+5); bar:Show(); if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowTriangel"]~=nil)then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowTriangel"]==true)then getglobal("EAB_ActionBar_"..list.."_ButtonEX"):Show(); else getglobal("EAB_ActionBar_"..list.."_ButtonEX"):Hide(); end else EAB_DebugMSG("problem with list "..list,true); EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowTriangel"]=true; end end if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["HideEmpty"]==true and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][5]=="")then this:Hide(); end else getglobal("EAB_ActionBar_"..list):Hide(); end end end if(fixFocus>0)then fixFocus=fixFocus-etime; if(fixFocus<0)then fixFocus=0; end end end local Focus=GetKeyboardFocus();--GuildBoardFrameDate_DescEdit if(fixFocus>0)then EAB_Keybindings:SetFocus(); elseif(fixFocus==0)then if(Focus~=EAB_Keybindings)then loadedFocus=Focus; end fixFocus=-1; elseif(fixFocus<0 and Focus==EAB_Keybindings)then if(loadedFocus and loadedFocus:IsVisible())then local lp=loadedFocus; local _lp; local _x,_y=0,0; repeat _lp=lp; lp=lp:GetParent(); local p,rp,rt,x,y=_lp:GetAnchor(); local np,nrp,nrt,nx,ny=lp:GetAnchor(); local w,h=_lp:GetSize(); local nw,nh=lp:GetSize(); if(string.find(rp,"TOP")~=nil)then _y=_y+y; elseif(string.find(rp,"BOTTOM")~=nil)then _y=_y+y-nh; else _y=_y+y-(nh/2); end if(string.find(rp,"LEFT")~=nil)then _x=_x+x; elseif(string.find(rp,"RIGHT")~=nil)then _x=_x+x-nw; else _x=_x+x-(nw/2); end if(string.find(p,"TOP")~=nil)then _y=_y+y; elseif(string.find(p,"BOTTOM")~=nil)then _y=_y+y-h; else _y=_y+y-(h/2); end if(string.find(p,"LEFT")~=nil)then _x=_x+x; elseif(string.find(p,"RIGHT")~=nil)then _x=_x+x-w; else _x=_x+x-(w/2); end until(lp:GetParent()==nil) local w,h=UIParent:GetSize(); if(_x>=0 and _x<=w-loadedFocus:GetWidth() and _y>=0 and _y<=h-loadedFocus:GetHeight())then--Feld im Sichtbaren Bereich loadedFocus:SetFocus(); end end loadedFocus=nil; end if((not Focus or Focus==EAB_Keybindings or (loadedFocus and Focus==loadedFocus)) and (not KeyDefineFrame or KeyDefineFrame:IsVisible()==false) and (not AskNumberFrame or AskNumberFrame:IsVisible()==false))then EAB_Keybindings:SetFocus(); elseif(Focus==EAB_Keybindings)then Focus:ClearFocus(); Focus=nil; end if(lastKeyTime~=0)then local lastlastKey=lastKeyTime; lastKeyTime=lastKeyTime-etime; if(lastlastKey<0)then lastKeyTime=math.abs(lastKeyTime); elseif(lastKeyTime<=0)then lastKeyTime=0; lastKey=""; end end end function EAB_UpdateBarItem(list,id) local oldname="EAB_ActionBar_"..list.."_Button"..id; local name=oldname.."Icon"; local Usetexture=false; if(list==nil or id==nil or EAB.ActuellClass==nil)then return; end local cl,scl=UnitClassToken("player"); if(cl==nil)then cl=""; end if(scl==nil)then scl=""; end EAB.ActuellClass=string.upper(cl)..string.lower(scl); if(EAB_Settings.ActionBars[EAB.ActuellClass]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass]={}; end for n=1,EAB.ActionBarsMax do if(EAB_Settings.ActionBars[EAB.ActuellClass][n]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][n]={fieldmax=20,maxrow=20,scale=1,alpha=1,Show=true,Fields={{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}}}; end end for n=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass]) do if(EAB_Settings.ActionBars[EAB.ActuellClass][n] and EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"]={}; end if(EAB_Settings.ActionBars[EAB.ActuellClass][n] and table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"])<20)then for a=1,20 do EAB_Settings.ActionBars[EAB.ActuellClass][n]["Fields"][a]={[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}; end end end if(EAB_Settings.ActionBars[EAB.ActuellClass] and EAB_Settings.ActionBars[EAB.ActuellClass][list] and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"] and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id] and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5])then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="skill")then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]~=0 and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]~=0)then local sname, _, icon, _, rank, typ, upgradeCost, isSkillable, isAvailable = GetSkillDetail(tonumber(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]),tonumber(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4])); getglobal(name):SetTexture(icon); Usetexture=true; local total,remaning=GetSkillCooldown(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3],EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]); CooldownFrame_SetTime(getglobal(oldname.."Cooldown"),total,remaning); local dis=UnitDistance("target"); if(isAvailable==true and remaning<=0)then getglobal(oldname.."Invalid"):Hide(); else getglobal(oldname.."Invalid"):Show(); end if(EAB_CheckGlow(EAB.ActuellClass,list,id,icon)==true)then getglobal(oldname.."_Active"):SetTexture("Interface/addons/ExtraActionBars/Textures/Glows/"..tostring(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id]["GLOW"])..".tga"); getglobal(oldname.."_Active"):Show(); else getglobal(oldname.."_Active"):Hide(); end else getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/Transparent.tga"); Usetexture=false; getglobal(oldname.."Invalid"):Hide(); getglobal(oldname.."_Active"):Hide(); end elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="item")then local num=EAB_GetBagPosByName(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]); if(num~=nil)then local inventoryIndex,icon,Itname,itemCount,locked,invalid=GetBagItemInfo(num); local total,remaning=GetBagItemCooldown(num); if(icon and icon~="")then CooldownFrame_SetTime(getglobal(oldname.."Cooldown"),total,remaning); if(remaning<=0)then getglobal(oldname.."Invalid"):Hide(); else getglobal(oldname.."Invalid"):Show(); end getglobal(name):SetTexture(icon); Usetexture=true; itemCount=EAB_GetItemCount(num); if(itemCount>1)then getglobal(oldname.."Count"):SetText(itemCount); getglobal(oldname.."Count"):Show(); end if(EAB_CheckGlow(EAB.ActuellClass,list,id,icon)==true)then getglobal(oldname.."_Active"):SetTexture("Interface/addons/ExtraActionBars/Textures/Glows/"..tostring(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id]["GLOW"])..".tga"); getglobal(oldname.."_Active"):Show(); else getglobal(oldname.."_Active"):Hide(); end else getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/NoItem.tga"); getglobal(oldname.."Invalid"):Hide(); Usetexture=true; end else getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/NoItem.tga"); Usetexture=true; getglobal(oldname.."Invalid"):Hide(); getglobal(oldname.."Count"):SetText(""); getglobal(oldname.."_Active"):Hide(); end elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="macro")then local num=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]; if(num>0 and num<50)then local idicon,mname,body=GetMacroInfo(num); if(idicon and type(idicon)=="number")then local icon=GetMacroIconInfo(idicon); local total,remaning=EAB_GetMacroCooldown(body,num); CooldownFrame_SetTime(getglobal(oldname.."Cooldown"),total,remaning); if(remaning<=0)then getglobal(oldname.."Invalid"):Hide(); else getglobal(oldname.."Invalid"):Show(); end getglobal(name):SetTexture(icon); Usetexture=true; if(EAB_CheckGlow(EAB.ActuellClass,list,id,icon)==true)then getglobal(oldname.."_Active"):SetTexture("Interface/addons/ExtraActionBars/Textures/Glows/"..tostring(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id]["GLOW"])..".tga"); getglobal(oldname.."_Active"):Show(); else getglobal(oldname.."_Active"):Hide(); end else getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/Transparent.tga"); Usetexture=false; getglobal(oldname.."Count"):SetText(""); getglobal(oldname.."Invalid"):Hide(); getglobal(oldname.."_Active"):Hide(); end else getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/Transparent.tga"); Usetexture=false; getglobal(oldname.."Count"):SetText(""); getglobal(oldname.."Invalid"):Hide(); getglobal(oldname.."_Active"):Hide(); end else getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/Transparent.tga"); Usetexture=false; getglobal(oldname.."Count"):SetText(""); getglobal(oldname.."Invalid"):Hide(); getglobal(oldname.."_Active"):Hide(); end if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][1]~="" or EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][2]~="")then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][1]~="")then getglobal(oldname.."Hotkey"):SetText(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][1]); else getglobal(oldname.."Hotkey"):SetText(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][2]); end else getglobal(oldname.."Hotkey"):SetText(""); end else--Sicherheit bei speicherfehlern o.ä. getglobal(name):SetTexture("Interface/Addons/ExtraActionBars/Textures/Transparent.tga"); Usetexture=false; getglobal(oldname.."Count"):SetText(""); getglobal(oldname.."Invalid"):Hide(); getglobal(oldname.."Hotkey"):SetText(""); getglobal(oldname.."_Active"):Hide(); end local symbol=getglobal(oldname.."_EAB"); if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowSymbol"]==3)then symbol:Show(); elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowSymbol"]==2)then if(Usetexture==true)then symbol:Hide(); else symbol:Show(); end else symbol:Hide(); end end function EAB_CheckGlow(a,b,c,texture) if(a==nil or b==nil or c==nil or EAB_Settings.ActionBars[a]==nil or EAB_Settings.ActionBars[a][b]==nil or EAB_Settings.ActionBars[a][b]["Fields"]==nil)then return false; end if(texture==nil)then texture=""; end local field=EAB_Settings.ActionBars[a][b]["Fields"][c]; if(field==nil)then return false; end local name=""; if(field[5]=="skill")then local sname, _, icon, _, rank, typ, upgradeCost, isSkillable, isAvailable = GetSkillDetail(tonumber(field[3]),tonumber(field[4])); if(icon==texture)then name=sname; end elseif(field[5]=="item")then name=field[6]; elseif(field[5]=="macro")then local num=field[3]; if(num>0 and num<50)then local idicon,mname,body=GetMacroInfo(num); local ins,rem=EAB_GetMacroCooldown(body,num); if(rem>0)then -- EAB_DebugMSG("glow:true, a:"..a.." b:"..b.." c:"..c.." texture:"..texture.." ->macro,num:"..num,true); return true; else return false; end end end if(name~="")then for n=1,40 do local buff=UnitBuff("player",n); if(buff~=nil)then if(string.find(buff,name)~=nil)then return true; end end end end return false; end function EAB_DragStartStop(start,this) local name=string.gsub(string.gsub(this:GetName(),"_ButtonEX",""),"EAB_ActionBar_",""); EAB_DebugMSG("name:"..name.." fullname:"..this:GetName(),true); list=tonumber(name,10); if(start==true)then lastDraged=list; else lastDraged=0; end end function EAB_CheckPos(list) if(list~=lastDraged)then return; end local frame=getglobal("EAB_ActionBar_"..list); local p,rp,rt,x,y=frame:GetAnchor(); local wi,hi=frame:GetSize(); local sc=EAB_Settings.ActionBars[EAB.ActuellClass][list]["scale"]; wi=wi*sc; hi=hi*sc; local cx,cy=x,y; for i=1,EAB_GetLines() do if(i~=list)then local this=getglobal("EAB_ActionBar_"..i); local ip,irp,irt,ix,iy=this:GetAnchor(); local iwi,ihi=this:GetSize(); local isc=EAB_Settings.ActionBars[EAB.ActuellClass][i]["scale"]; iwi=iwi*isc; ihi=ihi*isc; EAB_DebugMSG("i:"..i.." x:"..x.." y:"..y.." wi:"..wi.." hi:"..hi.." sc:"..sc.." cx:"..cx.." cy:"..cy.." ix:"..ix.." iy:"..iy.." iwi:"..iwi.." ihi:"..ihi.." isc:"..isc,true); if(irp==rp and irt==rt)then if(math.abs(x-ix)<=4 and y>=iy-hi and y<=iy+ihi)then cx=ix; end if(math.abs((x+wi)-ix)<=4 and y>=iy-hi and y<=iy+ihi)then cx=ix-wi; end if(math.abs(x-(ix+iwi))<=4 and y>=iy-hi and y<=iy+ihi)then cx=ix+iwi; end if(math.abs(y-iy)<=4 and x>=ix-wi and x<=ix+iwi)then cy=iy; end if(math.abs((y+hi)-iy)<=4 and x>=ix-wi and x<=ix+iwi)then cy=iy-hi; end if(math.abs(y-(iy+ihi))<=4 and x>=ix-wi and x<=ix+iwi)then cy=iy+ihi; end end end end if(cx~=x or cy~=y)then frame:ClearAllAnchors(); frame:SetAnchor(p,rp,rt,cx,cy); end end function EAB_Save() if(EAB_Settings and EAB_Settings.ActionBars)then if(not EAB_Settings.ActionBars[EAB.ActuellClass])then EAB_Settings.ActionBars[EAB.ActuellClass]={{fieldmax = 20,maxrow = 20,scale = 1,alpha = 1, Show = true,ShowTriangel = true,Fields = {{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",},},},["DEFAULTBINDINGS"]={},}; end if(not EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar])then EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]={fieldmax = 20,maxrow = 20,scale = 1,alpha = 1, Show = true,ShowTriangel = true,Lock=false,HideEmpty=false,Space=0,ShowSymbol=3,Fields = {{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",},},}; end end if(EAB_Settings and EAB_Settings.ActionBars and EAB_Settings.ActionBars[EAB.ActuellClass] and EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar])then EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Show"]=EAB_Config_BarConfig_Show:IsChecked(); EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["ShowTriangel"]=EAB_Config_BarConfig_ShowTriangel:IsChecked(); EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Lock"]=EAB_Config_BarConfig_Lock:IsChecked(); EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["HideEmpty"]=EAB_Config_BarConfig_HideEmpty:IsChecked(); -- EAB_DebugMSG("saved,class:"..EAB.ActuellClass.." bar:"..EAB.ChosenBar.." check:"..tostring(EAB_Config_BarConfig_ShowTriangel:IsChecked()),true); end --check saves: local func,err=loadfile("Interface/Addons/ExtraActionBars/LUA/CheckSaves.lua"); if(not err)then dofile("Interface/Addons/ExtraActionBars/LUA/CheckSaves.lua"); end SaveVariablesPerCharacter("EAB_Settings"); end function EAB_SaveBarPos(this,xx,yy) local list=0; local name=string.gsub(string.gsub(this:GetName(),"_ButtonEX",""),"EAB_ActionBar_",""); EAB_DebugMSG("name:"..name.." fullname:"..this:GetName(),true); list=tonumber(name,10); if(list~=nil and EAB_Settings.ActionBars[EAB.ActuellClass][list])then EAB_Settings.ActionBars[EAB.ActuellClass][list]["X"]=xx; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Y"]=yy; end end function EAB_LoadBars() for list=1,EAB_GetLines() do if(EAB_Settings.ActionBars[EAB.ActuellClass][list] and EAB_Settings.ActionBars[EAB.ActuellClass][list]["X"] and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Y"])then local this=getglobal("EAB_ActionBar_"..list); local p,rp,rt,ox,oy=this:GetAnchor(); this:ClearAllAnchors(); this:SetAnchor(p,rp,rt,EAB_Settings.ActionBars[EAB.ActuellClass][list]["X"],EAB_Settings.ActionBars[EAB.ActuellClass][list]["Y"]); end end end function EAB_Tooltip(this,abb) local name,id,list; if(name==nil)then name=this:GetName(); end if(id==nil)then id=tonumber(this:GetID()); end if(list==nil and id)then list=0; local _name=string.gsub(string.gsub(name,"Button"..tostring(id),""),"EAB_ActionBar_",""); for n=1,string.len(_name)do if(string.sub(_name,n,n)=="_")then list=tonumber(string.sub(_name,0,n-1)); break; end end end EAB_DebugMSG("abb:"..tostring(abb).." list:"..tostring(list).." id:"..tostring(id).." name:"..tostring(name),true); GameTooltip:SetOwner(this,"ANCHOR_BOTTOM",0,0); GameTooltip:ClearAllAnchors(); GameTooltip:SetAnchor("BOTTOMLEFT","TOPLEFT",this,0,0); if(abb and list and abb==true and EAB_Settings and EAB_Settings.ActionBars and EAB_Settings.ActionBars[EAB.ActuellClass] and EAB_Settings.ActionBars[EAB.ActuellClass][list] and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id])then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="skill")then GameTooltip:SetSkillItem(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3],EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]); GameTooltip:Show(); elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="item")then local num=EAB_GetBagPosByName(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]); GameTooltip:SetBagItem(GetBagItemInfo(num)); GameTooltip:Show(); elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="macro")then local name=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]; if(name and name~="")then GameTooltip:SetText(tostring(name)); GameTooltip:AddLine("|cffff0000WARNING: If you start macros from here, after a \"/wait\" this macro won't be able to cast spells anymore!"); GameTooltip:Show(); end end else if(name=="EAB_Minimap")then GameTooltip:SetText(EAB.Name); GameTooltip:AddLine("Leftclick to open configuration menu"); GameTooltip:AddLine("You can move this button if you use shift+richgt mouse button"); elseif(name=="EAB_Config_Link")then GameTooltip:SetText("Author"); GameTooltip:AddLine("Here you can send a message to "..EAB.Author); GameTooltip:AddLine("|cffffff00This work only on "..EAB.AuthorServer); else GameTooltip:SetText(EAB.Name); GameTooltip:AddLine("Leftclick to open configuration menu"); end GameTooltip:Show(); end end function EAB_SkillDetails(typ,id) --Unfertig! Weiteres benötigt Lib! local sname, _, icon, _, rank, typ, upgradeCost, isSkillable, isAvailable = GetSkillDetail(tonumber(typ),tonumber(id)); if(UnitExists("target"))then local dis=UnitDistance("target"); end end function EAB_SetTextAll() EAB_Config_BarConfig_Maxrow_Text :SetText("Length"); EAB_Config_BarConfig_Fieldmax_Text :SetText("Fields"); EAB_Config_BarConfig_Scale_Text :SetText("Scale"); EAB_Config_BarConfig_Alpha_Text :SetText("Alpha"); EAB_Config_BarConfig_Space_Text :SetText("Space between fields"); EAB_Config_BarConfig_CopyViewFromList_Call_Text :SetText("Start copy"); EAB_Config_BarConfig_CopyViewFromList_Text :SetText("Copy settings from list"); EAB_Config_BarConfig_FieldConfig_Text :SetText("Hotkeys"); EAB_Config_Text :SetText(EAB.Name.." by "..EAB.Author.."("..EAB.AuthorServer..")"); EAB_Config_BarConfig_Show_Text :SetText("Show actionbar"); EAB_Config_BarConfig_ShowTriangel_Text :SetText("Show triangel"); EAB_Config_ShowKeyDefineFrame_Text :SetText("Default key define window"); EAB_Config_BarConfig_Lock_Text :SetText("Lock bar"); EAB_Config_BarConfig_HideEmpty_Text :SetText("Hide empty fields"); EAB_Config_BarConfig_ShowSymbol_Text :SetText("Show EAB symbol in bar"); if(EAB_Settings and EAB_Settings.ActionBars and EAB_Settings.ActionBars[EAB.ActuellClass] and EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar])then EAB_Config_BarConfig_Maxrow_Value :SetText(tostring(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["maxrow"])); EAB_Config_BarConfig_Fieldmax_Value :SetText(tostring(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["fieldmax"])); EAB_Config_BarConfig_Scale_Value :SetText(RoundNumber(100*EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["scale"],1).."%"); EAB_Config_BarConfig_Alpha_Value :SetText(RoundNumber(100*EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["alpha"],1).."%"); EAB_Config_BarConfig_Space_Value :SetText(tostring(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Space"])); if(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["ShowSymbol"]==3)then EAB_Config_BarConfig_ShowSymbol_Value :SetText("Show allways"); elseif(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["ShowSymbol"]==2)then EAB_Config_BarConfig_ShowSymbol_Value :SetText("Show if empty"); else EAB_Config_BarConfig_ShowSymbol_Value :SetText("Hide allways"); end end UIDropDownMenu_SetText(EAB_Config_BarConfig_CopyViewFromList_Choose,"Aviable lists"); UIDropDownMenu_SetText(EAB_Config_BarConfig_Glows,"Glows from list"); UIDropDownMenu_SetText(EAB_Config_BarConfig_FieldConfig_Glow,"Field glow"); end function EAB_DragSkillButton(typ,id,...)--the "..." is only if any systems make there more variables lastDragedTyp=typ; lastDragedID=id; Sol.hooks.GetOriginalFn(EAB.Name,"DragSkillButton")(typ,id,...); end function EAB_ToggleUIFrame(this,...)--the "..." is only if any systems make there more variables if(this~=nil and ((type(this)=="string" and this=="EAB_Config") or (type(this)=="table" and this==EAB_Config)))then EAB_ActuellList(this:GetName().."_ActionBarList"); end Sol.hooks.GetOriginalFn(EAB.Name,"ToggleUIFrame")(this,...); end function EAB_SetBindingKey(cmd,key1,key2,abb,...)--the "..." is only if any systems make there more variables if(not abb or type(abb)~="boolean" or abb~=true)then--Die zusätzlcieh Variable "abb" zeigt, ob von EAB ausgeführt oder vom Standardsystem! EAB_DeleatFromMyBingings(key1,key2); end Sol.hooks.GetOriginalFn(EAB.Name,"SetBindingKey")(cmd,key1,key2,abb,...); if(EAB.ChosenField)then EAB_LoadDatas("Fields",EAB.ChosenField); end end function EAB_SaveBindingKey(...) Sol.hooks.GetOriginalFn(EAB.Name, "SaveBindingKey")(...); EAB_SaveDefaultBindings(); end function EAB_GetLines() if(EAB.MaxLists==0)then local ii=1; repeat ii=ii+1; until(getglobal("EAB_ActionBar_"..ii)==nil) ii=ii-1; EAB.MaxLists=ii; end return EAB.MaxLists; end function EAB_DebugMSG(msg,deb) if(not deb)then deb=false; end if(not msg)then msg=""; end if(deb==true and EAB.DBM==true)then DEFAULT_CHAT_FRAME:AddMessage("|cffb0b0b0EAB|r:"..msg); elseif(deb==false)then --Send msgs only one time: if(EAB.MSG==nil)then EAB.MSG={}; end if(EAB.MSG[msg]==nil)then EAB.MSG[msg]=true; elseif(EAB.MSG[msg]==true)then return; end DEFAULT_CHAT_FRAME:AddMessage(msg); end end function EAB_CheckKey(key,key1,key2,woe) if(not key)then return false; end if(not woe or woe==false)then if(IsAltKeyDown())then key="ALT+"..key; end if(IsShiftKeyDown())then key="SHIFT+"..key; end if(IsCtrlKeyDown())then key="CTRL+"..key; end key1=string.upper(tostring(key1)); key2=string.upper(tostring(key2)); if(key1 and key==key1)then return true; end if(key2 and key==key2)then return true; end else local oldkey=key; if(string.find(key1,"ALT")~=nil or string.find(key2,"ALT")~=nil)then if(IsAltKeyDown())then key="ALT+"..key; end key1=string.upper(tostring(key1)); key2=string.upper(tostring(key2)); if(key1 and key==key1)then return true; end if(key2 and key==key2)then return true; end end key=oldkey; if(string.find(key1,"SHIFT")~=nil or string.find(key2,"SHIFT")~=nil)then if(IsShiftKeyDown())then key="SHIFT+"..key; end key1=string.upper(tostring(key1)); key2=string.upper(tostring(key2)); if(key1 and key==key1)then return true; end if(key2 and key==key2)then return true; end end key=oldkey; if(string.find(key1,"CTRL")~=nil or string.find(key2,"CTRL")~=nil)then if(IsCtrlKeyDown())then key="CTRL+"..key; end key1=string.upper(tostring(key1)); key2=string.upper(tostring(key2)); if(key1 and key==key1)then return true; end if(key2 and key==key2)then return true; end end end return false; end function EAB_Scroll(this,delta) if(not this)then return; end delta=(-1)*(delta/math.abs(delta));--return only 1 or -1! EAB_DebugMSG("scroll:"..delta,true); if(this.EABOffset==nil)then this.EABOffset=0; end this.EABOffset=this.EABOffset+delta; EAB_ActuellList(this); end function EAB_UncheckAll(this) EAB_DebugMSG("Uncheck "..this:GetName(),true); local name=this:GetName(); for n=1,15 do getglobal(name.."_"..n):SetChecked(false); end this.check={}; end function EAB_ValueChange(this) local list=EAB.ChosenBar; if(list<=0)then return; end local val=this:GetValue(); if(string.find(string.lower(this:GetName()),"fieldmax")~=nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["fieldmax"]=val; elseif(string.find(string.lower(this:GetName()),"maxrow")~=nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["maxrow"]=val; elseif(string.find(string.lower(this:GetName()),"scale")~=nil)then if(math.abs(val-1)<=0.03 and onWheel==false)then val=1; end EAB_Settings.ActionBars[EAB.ActuellClass][list]["scale"]=val; elseif(string.find(string.lower(this:GetName()),"alpha")~=nil)then if(math.abs(val-1)<=0.03 and onWheel==false)then val=1; end EAB_Settings.ActionBars[EAB.ActuellClass][list]["alpha"]=val; elseif(string.find(string.lower(this:GetName()),"space")~=nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["Space"]=val; elseif(string.find(string.lower(this:GetName()),"showsymbol")~=nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowSymbol"]=val; end if(onWheel==true)then onWheel=false; end end function EAB_ListObjClick(this) local par=this:GetParent(); if(par.check==nil)then par.check={}; end if(par.EABOnce~=nil and par.EABOnce==true)then par.check={}; end--Save only one, if EABOnce==true! local id=string.gsub(this:GetName(),par:GetName().."_",""); if(this:IsChecked()==true and par.EABOffset)then par.check[id+par.EABOffset]=true; elseif(par.EABOffset)then par.check[id+par.EABOffset]=false; end local ofs=par.EABOffset; local nid=id; if(this:IsChecked()==false)then nid=0; ofs=0; end if(par:GetName()=="EAB_Config_ActionBarList")then EAB.ChosenBar=nid+ofs; if(lastBar~=EAB.ChosenBar)then lastBar=EAB.ChosenBar; EAB.ChosenField=0; EAB_UncheckAll(EAB_Config_BarConfig_FieldList); end elseif(par:GetName()=="EAB_Config_BarConfig_FieldList")then EAB.ChosenField=nid+ofs; end EAB_ActuellList(par); end function EAB_SetGlows(glow,bar,field) EAB_DebugMSG("glow:"..tostring(glow).." type:"..type(glow).." bar:"..tostring(bar).." type:"..type(bar).." field:"..tostring(field).." type:"..type(field),true); if(type(glow)=="number")then local glows={ [1]="NO", [2]="BLUE", [3]="GREEN", [4]="BLACK", [5]="RED", [6]="WHITE", }; glow=glows[glow]; end if(glow==nil)then glow="NO"; end glow=tostring(glow); field=tonumber(tostring(field)); bar=tonumber(tostring(bar)); if(bar==nil)then bar=EAB.ChosenBar; end if(field==nil and EAB_Settings.ActionBars[EAB.ActuellClass][bar]~=nil)then for n=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"]) do EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][n]["GLOW"]=glow; end elseif(EAB_Settings.ActionBars[EAB.ActuellClass][bar]~=nil and EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][field]~=nil)then EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][field]["GLOW"]=glow; end end function EAB_GetGlowAll(bar,glow,field) if(glow==nil)then glow="NO"; end glow=tostring(glow); if(bar~=nil and EAB_Settings.ActionBars[EAB.ActuellClass][bar]~=nil)then if(field==nil)then for n=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"])do if(EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][n]["GLOW"]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][n]["GLOW"]="NO"; end if(EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][n]["GLOW"]~=glow)then return false; end end else field=tonumber(field); if(field~=nil and EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][field]~=nil)then if(EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][field]["GLOW"]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][field]["GLOW"]="NO"; end if(EAB_Settings.ActionBars[EAB.ActuellClass][bar]["Fields"][field]["GLOW"]~=glow)then return false; end end end end return true; end function EAB_ChooseGlows() local menuitem={}; local glows={ ["NO"]="no", ["BLUE"]="Blue", ["GREEN"]="Green", ["BLACK"]="Black", ["RED"]="Red", ["WHITE"]="White", }; local glowsnum={ [1]="NO", [2]="BLUE", [3]="GREEN", [4]="BLACK", [5]="RED", [6]="WHITE", }; for n=1,table.maxn(glowsnum)do local a=glowsnum[n]; local b=tostring(glows[a]); menuitem.text=b; menuitem.func=function(btn) EAB_SetGlows(btn:GetID()); end; if(EAB_GetGlowAll(EAB.ChosenBar,a)==true)then menuitem.checked=true; else menuitem.checked=nil; end UIDropDownMenu_AddButton(menuitem,UIDROPDOWNMENU_MENU_LEVEL); end end function EAB_ChoosGlow() local menuitem={}; local glows={ ["NO"]="no", ["BLUE"]="Blue", ["GREEN"]="Green", ["BLACK"]="Black", ["RED"]="Red", ["WHITE"]="White", }; local glowsnum={ [1]="NO", [2]="BLUE", [3]="GREEN", [4]="BLACK", [5]="RED", [6]="WHITE", }; for n=1,table.maxn(glowsnum)do local a=glowsnum[n]; local b=tostring(glows[a]); menuitem.text=b; menuitem.func=function(btn) EAB_SetGlows(btn:GetID(),EAB.ChosenBar,EAB.ChosenField); end; if(EAB_GetGlowAll(EAB.ChosenBar,a,EAB.ChosenField)==true)then menuitem.checked=true; else menuitem.checked=nil; end UIDropDownMenu_AddButton(menuitem,UIDROPDOWNMENU_MENU_LEVEL); end end function EAB_IniChooseList() local menuitem={}; local DefaultList=false; if(EAB.ChoosedListVariant==EAB.ActuellClass)then EAB.ChoosedListVariant=""; end for a,b in pairs(EAB_Settings.ActionBars)do local cl,scl="",""; if(string.sub(a,1,1)~="$" and string.len(a)>0 and EAB.ActuellClass~=a)then local last=""; for n=1,string.len(a)do local sub=string.sub(a,n,n); if(string.lower(sub)==sub and string.lower(last)~=last)then cl=string.sub(a,0,n-1); scl=string.upper(string.sub(a,n,string.len(a))); end last=sub; end cl=string.upper(string.sub(cl,1,1))..string.lower(string.sub(cl,2,string.len(cl))); scl=string.upper(string.sub(scl,1,1))..string.lower(string.sub(scl,2,string.len(scl))); cl=EAB_GetRealClassNameByToken(cl); scl=EAB_GetRealClassNameByToken(scl); if(string.gsub(scl," ","")~="")then scl="/"..scl; end if(string.gsub(cl," ","")~="")then menuitem.text=cl..scl; menuitem.a=a; menuitem.func=function(button) local text=button:GetText(); local ntext=""; for n=1,string.len(text)do if(string.sub(text,n,n)=="/")then local tcl=EAB_GetTokenByRealClassName(string.sub(text,0,n-1)); local tscl=EAB_GetTokenByRealClassName(string.sub(text,n+1,string.len(text))); ntext=string.upper(tcl)..string.lower(tscl); end end EAB.ChoosedListVariant=ntext; end if(a==EAB.ChoosedListVariant)then menuitem.checked=true; else menuitem.checked=nil; end UIDropDownMenu_AddButton(menuitem,UIDROPDOWNMENU_MENU_LEVEL); end elseif(string.len(string.gsub(a," ",""))<=0 and DefaultList==false and EAB.ActuellClass~=a)then DefaultList=true; menuitem.text="Default"; menuitem.func=function() EAB.ChoosedListVariant=""; end if(a==EAB.ChoosedListVariant)then menuitem.checked=true; else menuitem.checked=nil; end UIDropDownMenu_AddButton(menuitem,UIDROPDOWNMENU_MENU_LEVEL); menuitem.text="Copy also field data"; menuitem.func=function() if(EAB.CopyFieldData==true)then EAB.CopyFieldData=false; else EAB.CopyFieldData=true; end end if(EAB.CopyFieldData==true)then menuitem.checked=true; else menuitem.checked=nil; end UIDropDownMenu_AddButton(menuitem,UIDROPDOWNMENU_MENU_LEVEL); end end end function EAB_CallChooseList() if(EAB_Settings.ActionBars[EAB.ChoosedListVariant]==nil)then return; end EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant]["DEFAULTBINDINGS"]; for list=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass])do if(EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]~=nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["fieldmax"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["fieldmax"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["maxrow"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["maxrow"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["scale"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["scale"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["alpha"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["alpha"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Show"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Show"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["X"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["X"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Y"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Y"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Lock"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Lock"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["HideEmpty"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["HideEmpty"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Space"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Space"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowTriangel"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["ShowTriangel"]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["ShowSymbol"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["ShowSymbol"]; if(EAB.CopyFieldData==true)then for n=1,20 do EAB_DeleatFromDefaultBindings(EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][1]); EAB_DeleatFromDefaultBindings(EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][2]); EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][1]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][1]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][2]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][2]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][3]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][3]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][4]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][4]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][5]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][5]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][6]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n][6]; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n]["GLOW"]=EAB_Settings.ActionBars[EAB.ChoosedListVariant][list]["Fields"][n]["GLOW"]; end end end end EAB_LoadDatas("ActionBars",EAB.ChosenBar); end function EAB_SaveDefaultBindings() if(not EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"])then EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"]={}; end for n=1,table.maxn(EAB.bindings)do local key1,key2=GetBindingKey(EAB.bindings[n]); if(not EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]])then EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]]={}; end EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]]["key1"]=key1; EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]]["key2"]=key2; end end function EAB_LoadDefaultBindings() if(not EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"])then EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"]={}; end for n=1,table.maxn(EAB.bindings)do if(EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]])then SetBindingKey(EAB.bindings[n],EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]]["key1"],EAB_Settings.ActionBars[EAB.ActuellClass]["DEFAULTBINDINGS"][EAB.bindings[n]]["key2"]); end end SaveBindingKey(); end function EAB_DeleatFromDefaultBindings(key) for n=1,table.maxn(EAB.bindings)do local key1,key2=GetBindingKey(EAB.bindings[n]); if(key1 and key1==key)then key1=""; elseif(key2 and key2==key)then key2=""; end SetBindingKey(EAB.bindings[n],key1,key2,true);--overwrite all bindings, partly with old data! end EAB_DeleatFromMyBingings(key); SaveBindingKey(); end function EAB_DeleatFromMyBingings(key1,key2) if(not key1)then key1=""; end if(not key2)then key2=""; end local b=EAB_Settings.ActionBars[EAB.ActuellClass]; for c=1,table.maxn(b)do for d=1,table.maxn(b[c]["Fields"])do if(b[c]["Fields"][d][1]==key1 or b[c]["Fields"][d][1]==key2)then b[c]["Fields"][d][1]=""; end if(b[c]["Fields"][d][2]==key1 or b[c]["Fields"][d][2]==key2)then b[c]["Fields"][d][2]=""; end end end end function EAB_ChangeBinding(this) if(type(this)=="string" and NewBinding>0)then if(IsAltKeyDown())then this="alt+"..this; elseif(IsShiftKeyDown())then this="shift+"..this; elseif(IsCtrlKeyDown())then this="ctrl+"..this; end EAB_DeleatFromDefaultBindings(this); local list=EAB.ChosenBar; if(list<=0)then return; end local id=EAB.ChosenField; if(EAB_Settings.ActionBars[EAB.ActuellClass][list]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]={fieldmax = 20,maxrow = 20,scale = 1,alpha = 1,Show = true,Fields = {{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",},},}; end if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id]={[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}; end EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][tonumber(NewBinding)]=this; getglobal("EAB_Config_BarConfig_FieldConfig_KeyBinding"..NewBinding.."_Text"):SetText(this); EAB_DebugMSG("new:"..this.." list:"..list.." id:"..id.." Binding:"..NewBinding,true); NewBinding=-1; EAB_LoadDatas("Fields",EAB.ChosenField); elseif(this~=nil)then if(NewBinding==0)then NewBinding=this:GetID(); EAB_DebugMSG("Bind:"..this:GetName().." id:"..tostring(this:GetID()),true); getglobal("EAB_Config_BarConfig_FieldConfig_KeyBinding"..NewBinding.."_Text"):SetText(""); else getglobal("EAB_Config_BarConfig_FieldConfig_KeyBinding"..NewBinding.."_Text"):SetText("~?~"); NewBinding=0; end end end function EAB_LoadDatas(typ,id) EAB_DebugMSG("typ:"..typ.." id:"..id,true); if(typ=="ActionBars")then if(EAB_Settings and EAB_Settings.ActionBars and EAB_Settings.ActionBars[EAB.ActuellClass] and EAB_Settings.ActionBars[EAB.ActuellClass][id])then EAB_Config_BarConfig_Fieldmax:SetValue(EAB_Settings.ActionBars[EAB.ActuellClass][id]["fieldmax"]); EAB_Config_BarConfig_Maxrow:SetValue(EAB_Settings.ActionBars[EAB.ActuellClass][id]["maxrow"]); EAB_Config_BarConfig_Scale:SetValue(EAB_Settings.ActionBars[EAB.ActuellClass][id]["scale"]); EAB_Config_BarConfig_Alpha:SetValue(EAB_Settings.ActionBars[EAB.ActuellClass][id]["alpha"]); EAB_Config_BarConfig_Space:SetValue(EAB_Settings.ActionBars[EAB.ActuellClass][id]["Space"]); EAB_Config_BarConfig_ShowSymbol:SetValue(EAB_Settings.ActionBars[EAB.ActuellClass][id]["ShowSymbol"]); EAB_Config_BarConfig_Show:SetChecked(EAB_Settings.ActionBars[EAB.ActuellClass][id]["Show"]); EAB_Config_BarConfig_ShowTriangel:SetChecked(EAB_Settings.ActionBars[EAB.ActuellClass][id]["ShowTriangel"]); EAB_Config_BarConfig_HideEmpty:SetChecked(EAB_Settings.ActionBars[EAB.ActuellClass][id]["HideEmpty"]); EAB_Config_BarConfig_Lock:SetChecked(EAB_Settings.ActionBars[EAB.ActuellClass][id]["Lock"]); end else if(EAB.ChosenBar>0)then if(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]={fieldmax=20,maxrow=20,scale=1,alpha=1,Show=true,Fields={{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",},},}; end if(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"]={{[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}}; end if(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"][id]==nil)then EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"][id]={[1]="",[2]="",[3]=0,[4]=0,[5]="",[6]="",}; end if(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"][id][1]~="")then EAB_Config_BarConfig_FieldConfig_KeyBinding1_Text:SetText(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"][id][1]); else EAB_Config_BarConfig_FieldConfig_KeyBinding1_Text:SetText("~?~"); end if(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"][id][2]~="")then EAB_Config_BarConfig_FieldConfig_KeyBinding2_Text:SetText(EAB_Settings.ActionBars[EAB.ActuellClass][EAB.ChosenBar]["Fields"][id][2]); else EAB_Config_BarConfig_FieldConfig_KeyBinding2_Text:SetText("~?~"); end end end end function EAB_GetListData(this) local maxn=0; local maxoff=0; if(this==nil)then return; end if(this:GetName()=="EAB_Config_ActionBarList")then maxn=EAB.ActionBarsMax; elseif(this:GetName()=="EAB_Config_BarConfig_FieldList")then maxn=20; end maxoff=maxn-15; if(maxn<0)then maxn=0; end if(maxoff<0)then maxoff=0; end return maxoff,maxn; end function EAB_ActuellList(this) if(type(this)=="string")then this=getglobal(this); end EAB_DebugMSG("Actuell List:"..this:GetName(),true); if(this.EABOffset==nil)then this.EABOffset=0; end if(this.EABOffset<0)then this.EABOffset=0; end local maxoff,maxn=EAB_GetListData(this); if(this.EABOffset>maxoff)then this.EABOffset=maxoff; end --Hide not needed lists: local name=this:GetName(); for n=1,15 do getglobal(name.."_"..n):Show(); if(n+this.EABOffset>maxn)then getglobal(name.."_"..n):Hide(); end end --Here: actuell List! local preText=""; local aftText=""; if(this:GetName()=="EAB_Config_ActionBarList")then preText="Actionbar"; elseif(this:GetName()=="EAB_Config_BarConfig_FieldList")then preText="Field"; end if(this.check)then local show=false; local shown=0; for n=1,table.maxn(this.check)do if(this.check[n]==true)then show=true; shown=n; end end if(this:GetName()=="EAB_Config_ActionBarList")then if(show==true)then EAB_Config_BarConfig:Show(); EAB_LoadDatas("ActionBars",shown); EAB_Config_BarConfig_FieldConfig:Hide(); if(EAB_Config_BarConfig_FieldList.check)then for a=1,table.maxn(EAB_Config_BarConfig_FieldList.check)do if(EAB_Config_BarConfig_FieldList.check[a]==true)then EAB_Config_BarConfig_FieldConfig:Show(); end end end else EAB_Config_BarConfig:Hide(); EAB_Config_BarConfig_FieldConfig:Hide(); end elseif(this:GetName()=="EAB_Config_BarConfig_FieldList")then if(show==true)then EAB_Config_BarConfig_FieldConfig:Show(); EAB_LoadDatas("Fields",shown); else EAB_Config_BarConfig_FieldConfig:Hide(); end end end if(preText~="" and string.sub(preText,string.len(preText),string.len(preText))~=" ")then preText=preText.." "; end if(aftText~="" and string.sub(aftText,string.len(aftText),string.len(aftText))~=" ")then aftText=aftText.." "; end --SetTexts: for n=1,15 do getglobal(name.."_"..n.."_Text"):SetText(preText..n+this.EABOffset..aftText); local id=n+this.EABOffset; if(this.check and this.check[id])then getglobal(name.."_"..n):SetChecked(this.check[id]); else getglobal(name.."_"..n):SetChecked(false); end end end function EAB_ConfigShow(this) EAB_ActuellList(this:GetName().."_ActionBarList"); end function EAB_KeyUp(this,key) EAB_DebugMSG(tostring(key),true); if(not key)then return; end local foundID=0; --Neue Bindings: if(EAB_Settings~=nil and EAB_Settings.ActionBars~=nil)then for list=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass])do if(EAB_Settings.ActionBars[EAB.ActuellClass][list]~=nil)then for n=1,table.maxn(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"])do local key1=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][1]; local key2=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][n][2]; if((key1 or key2) and foundID==0)then if(EAB_CheckKey(key,key1,key2)==true)then foundID=n; ilist=list; local name="EAB_ActionBar_"..list.."_Button"..n; EAB_FieldDownUp(name,"up"); end end end end end end local bindings={ "MOVEFORWARD","MOVEBACKWARD","STRAFELEFT","STRAFERIGHT","TURNLEFT","TURNRIGHT","PUSHTOTALK", "ACTIONBAR1BUTTON1","ACTIONBAR1BUTTON2","ACTIONBAR1BUTTON3","ACTIONBAR1BUTTON4","ACTIONBAR1BUTTON5", "ACTIONBAR1BUTTON6","ACTIONBAR1BUTTON7","ACTIONBAR1BUTTON8","ACTIONBAR1BUTTON9","ACTIONBAR1BUTTON10","ACTIONBAR1BUTTON11","ACTIONBAR1BUTTON12", "ACTIONBAR1BUTTON13","ACTIONBAR1BUTTON14","ACTIONBAR1BUTTON15","ACTIONBAR1BUTTON16","ACTIONBAR1BUTTON17","ACTIONBAR1BUTTON18","ACTIONBAR1BUTTON19", "ACTIONBAR1BUTTON20","ACTIONBAR2BUTTON1","ACTIONBAR2BUTTON2","ACTIONBAR2BUTTON3","ACTIONBAR2BUTTON4","ACTIONBAR2BUTTON5","ACTIONBAR2BUTTON6", "ACTIONBAR2BUTTON7","ACTIONBAR2BUTTON8","ACTIONBAR2BUTTON9","ACTIONBAR2BUTTON10","ACTIONBAR2BUTTON11","ACTIONBAR2BUTTON12","ACTIONBAR2BUTTON13", "ACTIONBAR2BUTTON14","ACTIONBAR2BUTTON15","ACTIONBAR2BUTTON16","ACTIONBAR2BUTTON17","ACTIONBAR2BUTTON18","ACTIONBAR2BUTTON19","ACTIONBAR2BUTTON20", "ACTIONBAR3BUTTON1","ACTIONBAR3BUTTON2","ACTIONBAR3BUTTON3","ACTIONBAR3BUTTON4","ACTIONBAR3BUTTON5","ACTIONBAR3BUTTON6","ACTIONBAR3BUTTON7", "ACTIONBAR3BUTTON8","ACTIONBAR3BUTTON9","ACTIONBAR3BUTTON10","ACTIONBAR3BUTTON11","ACTIONBAR3BUTTON12","ACTIONBAR3BUTTON13","ACTIONBAR3BUTTON14", "ACTIONBAR3BUTTON15","ACTIONBAR3BUTTON16","ACTIONBAR3BUTTON17","ACTIONBAR3BUTTON18","ACTIONBAR3BUTTON19","ACTIONBAR3BUTTON20","ACTIONBAR4BUTTON1", "ACTIONBAR4BUTTON2","ACTIONBAR4BUTTON3","ACTIONBAR4BUTTON4","ACTIONBAR4BUTTON5","ACTIONBAR4BUTTON6","ACTIONBAR4BUTTON7","ACTIONBAR4BUTTON8", "ACTIONBAR4BUTTON9","ACTIONBAR4BUTTON10","ACTIONBAR4BUTTON11","ACTIONBAR4BUTTON12","ACTIONBAR4BUTTON13","ACTIONBAR4BUTTON14","ACTIONBAR4BUTTON15", "ACTIONBAR4BUTTON16","ACTIONBAR4BUTTON17","ACTIONBAR4BUTTON18","ACTIONBAR4BUTTON19","ACTIONBAR4BUTTON20","PETACTIONBARBUTTON1","PETACTIONBARBUTTON2", "PETACTIONBARBUTTON3","PETACTIONBARBUTTON4","PETACTIONBARBUTTON5","PETACTIONBARBUTTON6","PETACTIONBARBUTTON7","PETACTIONBARBUTTON8","PETACTIONBARBUTTON9", "PETACTIONBARBUTTON10","EXTRAACTIONBUTTON1","EXTRAACTIONBUTTON2","EXTRAACTIONBUTTON3","EXTRAACTIONBUTTON4","EXTRAACTIONBUTTON5","EXTRAACTIONBUTTON6", "EXTRAACTIONBUTTON7","EXTRAACTIONBUTTON8","EXTRAACTIONBUTTON9","EXTRAACTIONBUTTON10", }; for n=1,table.maxn(bindings)do local key1,key2=GetBindingKey(bindings[n]); if(string.find(bindings[n],"MOVE")==nil and string.find(bindings[n],"STRAFE")==nil or string.find(bindings[n],"TURN")==nil)then if(EAB_CheckKey(key,key1,key2)==true)then EAB_ReDoDefaultBinding(bindings[n]); break; end else if(EAB_CheckKey(key,key1,key2,true)==true)then EAB_ReDoDefaultBinding(bindings[n]); break; end end end end function EAB_ReDoDefaultBinding(bind) if(string.find(bind,"ACTIONBAR")~=nil or string.find(bind,"ACTIONBUTTON")~=nil)then--action bars EAB_DebugMSG("Achtion",true); if(string.find(bind,"PETACTION")~=nil)then--Pet action bar local insg=tonumber(string.gsub(bind,"PETACTIONBARBUTTON","")); UsePetAction(insg); elseif(string.find(bind,"EXTRAACTION")~=nil)then--extra action bar local insg=tonumber(string.gsub(bind,"EXTRAACTIONBUTTON","")); ExtraActionButton_Click(insg); else--normal action bar EAB_DebugMSG("normal",true); local str=string.gsub(bind,"ACTIONBAR",""); local list=string.sub(str,1,1); local field=string.sub(str,8,string.len(str)); EAB_DebugMSG("str:"..str.." list:"..list.." field:"..field,true); if(tonumber(list)==nil)then list=0; end if(tonumber(field)==nil)then field=0; end local insg=(tonumber(list)-1)*20+tonumber(field); EAB_DebugMSG("insg:"..insg,true); ActionButtonUp(insg); end end end function EAB_FieldDownUp(name,typ) local this=getglobal(name); local id,llist; if(id==nil)then id=this:GetID(); end if(llist==nil)then llist=0; local _name=string.gsub(string.gsub(name,"Button"..id,""),"EAB_ActionBar_",""); for n=1,string.len(_name)do if(string.sub(_name,n,n)=="_")then llist=tonumber(string.sub(_name,0,n-1)); break; end end end if(llist==nil)then return; end local oldname=name; name=name.."_Press"; EAB_DebugMSG("do:"..typ.." for:"..name,true); if(typ=="up")then getglobal(name):Hide(); --Hier: Funktion aufrufen! if(NewBinding==0 and (not CursorHasItem() or CursorHasItem()==""))then EAB_DebugMSG("do functions, llist:"..llist.." id:"..id,true); if(EAB_Settings.ActionBars[EAB.ActuellClass][llist] and EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"] and EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][5])then EAB_DebugMSG("step 1",true); if(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][5]=="skill")then if(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][3]~=0 and EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][4]~=0)then EAB_DebugMSG("step 2 - accept",true); UseSkill(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][3],EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][4]); local total,remaning=GetSkillCooldown(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][3],EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][4]); CooldownFrame_SetTime(getglobal(oldname.."Cooldown"),total,remaning); EAB_DebugMSG("skill and cooldown setted, set to:"..oldname.."Cooldown total:"..total.." remaning:"..remaning,true); end elseif(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][5]=="item")then EAB_DebugMSG("step 2 - accept",true); UseItemByName(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][6]); elseif(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][5]=="macro")then EAB_DoMacro(EAB_Settings.ActionBars[EAB.ActuellClass][llist]["Fields"][id][3]); end end elseif(NewBinding==-1)then NewBinding=0; end elseif(typ=="down")then getglobal(name):Show(); end end function EAB_GetSkillIDByPos(list,id) local link=GetSkillHyperLink(list,id); link=string.gsub(link,"|Hskill:",""); local numstr=""; for n=1,string.len(link)do if(string.sub(link,n,n)==" " and numstr=="")then numstr=string.sub(link,0,n-1); end end -- EAB_DebugMSG("numstr:"..numstr.." link:"..string.gsub(link,"|","/").." type:"..list.." id:"..id,true); return numstr; end function EAB_GetSkillPosByID(id) EAB_DebugMSG("Search for "..id,true); for a=1,4 do for b=1,50 do if(GetSkillDetail(a,b) and GetSkillDetail(a,b)~=nil)then EAB_DebugMSG("a:"..a.." b:"..b.." fid:\""..EAB_GetSkillIDByPos(a,b).."\" id:"..id,true); if(tostring(id)==tostring(EAB_GetSkillIDByPos(a,b)))then EAB_DebugMSG("found at "..a.."/"..b,true); return a,b; end end end end return nil,nil; end function EAB_GetClassCombinations() local classes={}; local combinations={}; local maxnum=GetNumClasses(); for n=1,maxnum do if(GetPlayerClassInfo(n))then local class,token,lv,cep,mep,cdep=GetPlayerClassInfo(n); table.insert(classes,token); end end for n=1,table.maxn(classes)do table.insert(combinations,string.upper(classes[n])); end local function SearchOnList(list,text) if(type(list)=="table" and type(text)=="string")then for n=1,table.maxn(list)do if(list[n]==text)then return true; end end end return false; end for a=1,table.maxn(classes)do for b=1,table.maxn(classes)do if(classes[a]~=classes[b] and SearchOnList(combinations,string.upper(classes[a])..string.lower(classes[b]))==false)then table.insert(combinations,string.upper(classes[a])..string.lower(classes[b])); end end end return combinations; end function EAB_GetRealClassNameByToken(name) if(type(name)~="string")then return; end local maxnum=GetNumClasses(); for n=1,maxnum do if(GetPlayerClassInfo(n))then local class,token,lv,cep,mep,cdep=GetPlayerClassInfo(n); if(string.upper(name)==string.upper(token))then class=string.upper(string.sub(class,1,1))..string.lower(string.sub(class,2,string.len(class))); return class; end end end return name; end function EAB_GetTokenByRealClassName(token) if(type(token)~="string")then return token; end local maxnum=GetNumClasses(); for n=1,maxnum do if(GetPlayerClassInfo(n))then local name,class,lv,cep,mep,cdep=GetPlayerClassInfo(n); if(string.upper(name)==string.upper(token))then class=string.upper(string.sub(class,1,1))..string.lower(string.sub(class,2,string.len(class))); return class; end end end return token; end function EAB_GetMacroCooldown(str,num) local lines=EAB_GetMacroLines(str); local insg=0; for n=1,table.maxn(lines)do if(string.lower(string.sub(lines[n],0,5))=="/wait")then local tim=string.sub(lines[n],7,string.len(lines[n])); if(tonumber(tim)~=nil)then insg=insg+tim; end end end local rem=0; if(EAB.WorkMakros and type(EAB.WorkMakros)=="table")then for n=1,table.maxn(EAB.WorkMakros)do if(EAB.WorkMakros[n]["ID"]==num and rem==0)then rem=EAB.WorkMakros[n]["WAIT"]; end end end return insg,rem; end function EAB_GetMacroLines(str) local lines={}; local lastPoint=0; local instring=false; for n=1,string.len(str)do if(string.find(string.sub(str,n,n+1),"\"")~=nil)then--don't register \n in a string if(instring==true)then instring=false; else instring=true; end end if(string.find(string.sub(str,n,n+1),"\n")~=nil and instring==false)then if(string.len(string.gsub(string.gsub(string.sub(str,lastPoint,n),"\n","")," ",""))>0)then table.insert(lines,string.sub(str,lastPoint,n)); -- EAB_DebugMSG("line "..table.maxn(lines)..":"..string.gsub(string.sub(str,lastPoint,n),"\n"," * "),true); end lastPoint=n+1; end end if(string.len(string.gsub(string.sub(str,lastPoint,string.len(str))," ",""))>0)then table.insert(lines,string.sub(str,lastPoint,string.len(str))); end return lines; end function EAB_DoMacro(num,str) if(not str)then--start macro --make macro work space: if(not EAB.WorkMakros)then EAB.WorkMakros={}; end icnum,name,body=GetMacroInfo(num); EAB_DebugMSG("body:"..string.gsub(body,"\n"," * "),true); local lines=EAB_GetMacroLines(body); table.insert(EAB.WorkMakros,{["ID"]=num,["WAIT"]=0,["LINES"]={},}); EAB.WorkMakros[table.maxn(EAB.WorkMakros)]["LINES"]=lines; --do first line: for n=1,table.maxn(EAB.WorkMakros[table.maxn(EAB.WorkMakros)]["LINES"])do if(type(EAB.WorkMakros[table.maxn(EAB.WorkMakros)]["LINES"][n])=="string" and EAB.WorkMakros[table.maxn(EAB.WorkMakros)]["LINES"]~="")then EAB_DoMacro(table.maxn(EAB.WorkMakros),EAB.WorkMakros[table.maxn(EAB.WorkMakros)]["LINES"][n]); return; else table.remove(EAB.WorkMakros[table.maxn(EAB.WorkMakros)]["LINES"],n); n=n-1; end end else--work each macroline if(EAB.WorkMakros[num]["WAIT"]==0 and string.len(string.gsub(str," ",""))>0)then if(string.lower(string.sub(str,0,5))~="/wait" or tonumber(string.sub(str,7,string.len(str)))==nil)then ExecuteMacroLine(str); else EAB.WorkMakros[num]["WAIT"]=tonumber(string.sub(str,7,string.len(str))); end table.remove(EAB.WorkMakros[num]["LINES"],1); if(table.maxn(EAB.WorkMakros[num]["LINES"])>0)then EAB_DoMacro(num,EAB.WorkMakros[num]["LINES"][1]); else table.remove(EAB.WorkMakros,num); end elseif(EAB.WorkMakros[num]["WAIT"]==0)then table.remove(EAB.WorkMakros[num]["LINES"],1); if(table.maxn(EAB.WorkMakros[num]["LINES"])>0)then EAB_DoMacro(num,EAB.WorkMakros[num]["LINES"][1]); else table.remove(EAB.WorkMakros,num); end end end end function EAB_UpdateMacro(etime) if(EAB.WorkMakros and type(EAB.WorkMakros)=="table" and table.maxn(EAB.WorkMakros)>0)then for n=1,table.maxn(EAB.WorkMakros)do if(EAB.WorkMakros[n]["WAIT"] and EAB.WorkMakros[n]["WAIT"]>0 and table.maxn(EAB.WorkMakros[n]["LINES"])>0)then EAB.WorkMakros[n]["WAIT"]=EAB.WorkMakros[n]["WAIT"]-etime; if(EAB.WorkMakros[n]["WAIT"]<=0)then EAB.WorkMakros[n]["WAIT"]=0; EAB_DoMacro(n,EAB.WorkMakros[n]["LINES"][1]); end end end end end function EAB_GetItemCount(num) local _,_,name=GetBagItemInfo(num); local count=0; for n=1,180 do local _,_,iname,icount=GetBagItemInfo(n); if(iname==name)then count=count+icount; end end return count; end function EAB_GetBagNumByName(name) for n=1,180 do local BINum,_,BIName=GetBagItemInfo(n); if(BIName==name)then return BINum; end end return nil; end function EAB_GetBagPosByName(name) for n=1,180 do local _,_,BIName=GetBagItemInfo(n); if(BIName==name)then return n; end end return nil; end function EAB_SetII() for n=1,180 do local ii=GetBagItemInfo(n); EAB.Bag[n]=ii; end end function EAB_GetBagIndexByII(ii) if(not ii)then return; end for n=1,table.maxn(EAB.Bag)do if(EAB.Bag[n]==ii)then return n; end end end function EAB_Click(this) local name=this:GetName(); local id=this:GetID(); local list=0; local _name=string.gsub(string.gsub(name,"Button"..id,""),"EAB_ActionBar_",""); for n=1,string.len(_name)do if(string.sub(_name,n,n)=="_")then list=tonumber(string.sub(_name,0,n-1)); break; end end if(list==nil)then return; end EAB_DebugMSG("list:"..tostring(list).." id:"..id,true); if(CursorHasItem())then EAB_Drag(this, list, id, name); end end function EAB_Drag(this, list, id, name) if(name==nil)then name=this:GetName(); end if(id==nil)then id=this:GetID(); end if(list==nil)then list=0; local _name=string.gsub(string.gsub(name,"Button"..id,""),"EAB_ActionBar_",""); for n=1,string.len(_name)do if(string.sub(_name,n,n)=="_")then list=tonumber(string.sub(_name,0,n-1)); break; end end end if(list==nil)then return; end if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Lock"]==true)then return; end if(CursorHasItem())then --NewDrop: local newDropTyp,newDropID,newTyp,newName=0,0,"",""; if(lastDragedTyp~=0 and lastDragedID~=0 and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="skill")then newDropTyp=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]; newDropID=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]; newTyp="skill"; elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="item")then newName=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]; newTyp="item"; elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="macro")then newDropTyp=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]; newName=EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]; newTyp="macro"; end EAB_DebugMSG("NewDrop: DropTyp:"..newDropTyp.." DropID:"..newDropID.." Typ:"..newTyp.." Name:"..newName.." CursorItemTyp:"..CursorItemType(),true); --OldDrop: if(CursorItemType()=="skill" or CursorItemType()=="macro")then if(CursorItemType()=="skill")then EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]=lastDragedTyp; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]=lastDragedID; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]="skill"; else local num=GetCursorItemInfo(); if(num>0 and num<50 and HasMacro(num))then icnum,name,body=GetMacroInfo(num); EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]=num; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]="macro"; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]=name; end end elseif(CursorItemType()=="bag")then local bp=EAB_GetBagIndexByII(GetCursorItemInfo()); EAB_DebugMSG("Item:"..tostring(bp),true); if(bp and bp>0)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]="item"; local _,_,name=GetBagItemInfo(bp); EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]=name; EAB_DebugMSG("Item name:"..name,true); end elseif(CursorItemType()=="action")then local sid=GetCursorItemInfo()-1; local a,b=EAB_GetSkillPosByID(sid); if(a~=nil and b~=nil)then--Skill EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]=a; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]=b; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]="skill"; elseif(sid<49)then--Macro local num=sid+1; if(num>0 and num<50 and HasMacro(num))then icnum,name,body=GetMacroInfo(num); EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]=num; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]="macro"; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]=name; end elseif(sid>200000 and sid<490000)then--Item! local num=EAB_GetBagPosByName(TEXT("Sys"..sid.."_name")); if(num)then EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]=TEXT("Sys"..sid.."_name"); EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]="item"; end end elseif(CursorItemType()=="SkillPlate")then --SkillSuitFrame_Right1 end --DeleatItem: EAB_DebugMSG("Deleat",true); if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="skill" or EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="macro")then DeleteCursorItem(); elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="item")then local num=EAB_GetBagNumByName(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]); if(num~=nil)then PickupBagItem(num); end end --GetNewDrop if(newTyp~="")then EAB_DebugMSG("SetNew",true); if(newTyp=="skill")then DragSkillButton(newDropTyp,newDropID); elseif(newTyp=="item")then local num=EAB_GetBagNumByName(newName); if(num~=nil)then PickupBagItem(num); end elseif(newTyp=="macro")then icnum,name,body=GetMacroInfo(newDropTyp); if(HasMacro(newDropTyp) and name==newName)then PickupMacroItem(newDropTyp); end end end else if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="skill" or EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="macro")then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="skill")then if(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]~=0 and EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]~=0)then DragSkillButton(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3],EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]); end elseif(HasMacro(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]))then PickupMacroItem(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]); end EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][3]=0; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][4]=0; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=""; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]=""; elseif(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=="item")then local num=EAB_GetBagNumByName(EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]); if(num~=nil)then PickupBagItem(num); end EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][6]=""; EAB_Settings.ActionBars[EAB.ActuellClass][list]["Fields"][id][5]=""; end end end SLASH_EAB1="/eab"; SLASH_EAB2="/extraactionbar"; SlashCmdList["EAB"]=function() ToggleUIFrame(EAB_Config); end