--[[ QuickMountEquip By Robert Jenkins (Merrem@Perenolde / Flarin@Sen'Jin) Automates equipping of items when mounting/dismounting UI based on Totem Stomper by AlexYoshi ]] QME_Registered = nil; QuickMount_Version = "2.20"; QuickMount_ConfigMap = nil; QuickMount_Disabled = false; -- Current Player information... QMCP = ""; QuickMount_SavedBagFunc = nil; QuickMount_SavedInvFunc = nil; QuickMount_SavedUseFunc = nil; local combat_flag = false; local attack_button = 0; local MOUNT = 1; local UNMOUNT = 2; local QM_SET_COUNT = 2; local QM_SET_SIZE = 5; local IGNORE_SWITCH = false; local QM_NIL = -100; local QuickMount_CurrentID = QM_NIL; local QuickMount_CurrentBag = QM_NIL; local QuickMount_CurrentSlot = QM_NIL; local QuickMount_CurrentName = ""; local QuickMount_CurrentTexture = ""; local QuickMount_AutoDetect = false; function QuickMount_RegisterEvents() this:RegisterEvent("VARIABLES_LOADED") -- configuration loading if not Fetch_Frame then this:RegisterEvent("UNIT_NAME_UPDATE") -- configuration loading end this:RegisterEvent("PLAYER_AURAS_CHANGED") -- mount buff check this:RegisterEvent("ACTIONBAR_UPDATE_USABLE") -- flight path check this:RegisterEvent("PLAYER_REGEN_DISABLED") -- combat check this:RegisterEvent("PLAYER_REGEN_ENABLED") -- combat check this:RegisterEvent("DELETE_ITEM_CONFIRM") -- delete check end function QuickMount_UnregisterEvents() this:UnregisterEvent("PLAYER_AURAS_CHANGED") -- mount buff check this:UnregisterEvent("ACTIONBAR_UPDATE_USABLE") -- flight path check this:UnregisterEvent("PLAYER_REGEN_DISABLED") -- combat check this:UnregisterEvent("PLAYER_REGEN_ENABLED") -- combat check end function QuickMount_ShowUsage() QM_Print("/mountequip on | off | quiet | verbose | flightpoint [on/off] | auto-reconfig [on/off] | config | status | load profileName | save profileName | delete profileName | profiles | detect\n"); end function QuickMount_Toggle() QuickMount_Config("config"); end -- Show/hide the Main Frame function QuickMount_Config(msg) if QuickMount_CheckPlayer() == false then QM_Print("Sorry, QuickMountEquip variables aren't loaded yet."); return; end if msg == nil or msg == "" then msg = "config"; end local args = {n=0} local function helper(word) table.insert(args, word) end string.gsub(msg, "[_%w]+", helper); if args[1] == 'off' then QuickMount_Disabled = true; QM_Print("QuickMountEquip disabled."); elseif args[1] == 'on' then QuickMount_Disabled = false; QM_Print("QuickMountEquip enabled."); elseif args[1] == 'quiet' then QuickMount_ConfigMap[QMCP]["Quiet"] = true; QM_Print("QuickMountEquip verbosity off."); elseif args[1] == 'verbose' then QuickMount_ConfigMap[QMCP]["Quiet"] = false; QM_Print("QuickMountEquip verbosity on."); elseif args[1] == 'flightpoint' or args[1] == 'flightpath' then if ( args[2] == nil or args[2] == '' or ( args[2] ~= 'on' and args[2] ~= 'off' ) ) then QM_Print("Do you want to turn flightpoint checking on or off?"); else if args[2] == 'on' then QuickMount_ConfigMap[QMCP]["FlightPoint"] = true; QM_Print("QuickMountEquip Flight Point checking on."); else QuickMount_ConfigMap[QMCP]["FlightPoint"] = false; QM_Print("QuickMountEquip Flight Point checking off."); end end elseif args[1] == 'save' then if args[2] == nil or args[2] == '' then QM_Print("No profile name specified."); else QuickMount_ConfigMap["Profile" .. args[2]] = QuickMount_ConfigMap[QMCP]; QM_Print("QuickMountEquip profile '" .. args[2] .. "' saved."); end elseif args[1] == 'load' then if args[2] == nil or args[2] == '' then QM_Print("No profile name specified."); else if QuickMount_ConfigMap["Profile" .. args[2]] then local last_action = QuickMount_ConfigMap[QMCP]["last_action"]; QuickMount_ConfigMap[QMCP] = QuickMount_ConfigMap["Profile" .. args[2]]; QuickMount_ConfigMap[QMCP]["last_action"] = last_action; QM_Print("QuickMountEquip profile '" .. args[2] .. "' loaded."); else QM_Print("QuickMountEquip profile '" .. args[2] .. "' not found!"); end end elseif args[1] == 'delete' then if args[2] == nil or args[2] == '' then QM_Print("No profile name specified."); else if QuickMount_ConfigMap["Profile" .. args[2]] then QuickMount_ConfigMap["Profile" .. args[2]] = nil; QM_Print("QuickMountEquip profile '" .. args[2] .. "' deleted."); else QM_Print("QuickMountEquip profile '" .. args[2] .. "' not found!"); end end elseif args[1] == 'profiles' then QM_Print("Profiles:"); table.foreach(QuickMount_ConfigMap, function(k,v) if string.find(k, "Profile") then QM_Print(string.gsub(k, "Profile", '')) end end); elseif args[1] == 'detect' then if args[2] == nil or args[2] == '' then QM_Print("** Experimental / Advanced **"); QM_Print("Do '/mountequip detect now' to attempt to detect the name of your mount. You should be unmounted and have zero buffs when you attempt this."); QM_Print("Then do '/mountequip detect on' to use the detected mount when mounting"); QM_Print("Or '/mountequip detect off' to turn off the use of the detected mount"); QM_Print("Or '/mountequip detect clear' to clear the detected setting completely"); QM_Print("NOTE: If doing this fixes your mounting problem, please let the author know, so it can be automatically included in the next release."); elseif args[2] == 'now' then QM_Print("This will attempt to detect the name of your mount. The next buff that appears will be assumed to be your mount. This works best if you start out with zero buffs. You should mount up NOW."); QuickMount_AutoDetect = true; QuickMount_ConfigMap[QMCP]["DetectedIcon"] = nil; QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = false; elseif args[2] == 'on' then if QuickMount_ConfigMap[QMCP]["DetectedIcon"] ~= nil then QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = true; QM_Print("Auto-Detected mount option turned on"); else QM_Print("Can't turn on use of the detected icon, since detection hasn't been done yet."); end elseif args[2] == 'off' then QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = false; QM_Print("Auto-Detected mount option turned off"); elseif args[2] == 'clear' then QuickMount_ConfigMap[QMCP]["DetectedIcon"] = nil; QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = false; QM_Print("Cleared detect options."); end elseif args[1] == 'auto-reconfig' then local status = ""; if args[2] == nil or args[2] == '' then if QuickMount_ConfigMap[QMCP]["auto-reconfig"] == true then QuickMount_ConfigMap[QMCP]["auto-reconfig"] = false; status = "toggled OFF"; else QuickMount_ConfigMap[QMCP]["auto-reconfig"] = true; status = "toggled ON"; end elseif args[2] == 'on' then QuickMount_ConfigMap[QMCP]["auto-reconfig"] = true; status = "ON"; elseif args[2] == 'off' then QuickMount_ConfigMap[QMCP]["auto-reconfig"] = false; status = "OFF"; end QM_Print("Auto-reconfiguring is now " .. status); elseif args[1] == 'status' then QuickMount_ShowUsage(); local status = "QuickMountEquip is currently"; if QuickMount_Disabled == true then status = status .. " disabled"; else status = status .. " enabled"; end status = status .. ", flight point checking is"; if QuickMount_ConfigMap[QMCP]["FlightPoint"] == false then status = status .. " off"; else status = status .. " on"; end status = status .. ", use of detected mount icon "; if QuickMount_ConfigMap[QMCP]["DetectedIcon"] ~= nil then status = status .. "(" .. QuickMount_ConfigMap[QMCP]["DetectedIcon"] .. ") is"; else status = status .. "is"; end if QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] == false then status = status .. " off"; else status = status .. " on"; end status = status .. ", auto-reconfigure is"; if QuickMount_ConfigMap[QMCP]["auto-reconfig"] == false then status = status .. " off"; else status = status .. " on"; end if QuickMount_ConfigMap[QMCP]["Quiet"] == false then status = status .. ", and is in verbose mode."; else status = status .. ", and is in quiet mode."; end QM_Print(status); elseif args[1] == 'config' then -- Reset attack_button, just in case they rearranged hot keys. attack_button = 0 if ( QuickMountFrame ) then if ( QuickMountFrame:IsVisible() ) then HideUIPanel(QuickMountFrame); else ShowUIPanel(QuickMountFrame); end else QM_Print("QuickMountEquip did not load. Please check your logs/FrameXML.log file and report this error"); end else QuickMount_ShowUsage(); end end function QuickMount_CheckPlayer() if QMCP == "" then local playername; if Fetch_Frame then if not Fetch_Done then return false; else playername = Fetch_PlayerName end else playername = UnitName("player"); if playername == nil or playername == UKNOWNBEING or playername == UNKNOWNOBJECT then return false; end end QMCP = GetCVar("realmName") .. "." .. playername; -- Convert old config if QuickMount_ButtonMap ~= nil and QuickMount_ButtonMap[1] ~= nil then QuickMount_ConfigMap = {}; QuickMount_ConfigMap[QMCP] = QuickMount_ButtonMap; QuickMount_ConfigMap[QMCP]["Quiet"] = false; QuickMount_ConfigMap[QMCP]["FlightPoint"] = false; QuickMount_ConfigMap[QMCP]["auto-reconfig"] = false; end if QuickMount_ConfigMap == nil or QuickMount_ConfigMap[QMCP] == nil then QuickMount_Reset(); end if QuickMount_ConfigMap[QMCP]["FlightPoint"] == nil then QuickMount_ConfigMap[QMCP]["FlightPoint"] = false; end if QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] == nil then QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = false; end if QuickMount_ConfigMap[QMCP]["auto-reconfig"] == nil then QuickMount_ConfigMap[QMCP]["auto-reconfig"] = false; end QuickMount_UpdateAllSets(); end if QMCP == "" or QMCP == "NONE" then return false; else return true; end end -- Reset QuickMount function QuickMount_Reset() if QuickMount_CheckPlayer() == false then return; end if QuickMount_ConfigMap == nil then QuickMount_ConfigMap = {}; end QuickMount_ConfigMap[QMCP]={index=nil;}; for i=1,QM_SET_COUNT,1 do QuickMount_ConfigMap[QMCP][i]={index=nil;}; for j=1,QM_SET_SIZE,1 do QuickMount_ConfigMap[QMCP][i][j]= {id=QM_NIL;bag=QM_NIL;slot=QM_NIL;texture="";name="";}; end QuickMount_ConfigMap[QMCP]["Quiet"] = false; QuickMount_ConfigMap[QMCP]["FlightPoint"] = false; QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = false; QuickMount_ConfigMap[QMCP]["DetectedIcon"] = nil; QuickMount_ConfigMap[QMCP]["auto-reconfig"] = false; end end function QuickMount_GetBuffName(buffIndex) local x, y = GetPlayerBuff(buffIndex, "HELPFUL"); QuickMountTooltip:SetUnitBuff("player", buffIndex); local Bname = QuickMountTooltipTextLeft1:GetText(); if ( Bname ~= nil ) then return Bname; end return nil; end function QuickMount_GetItemName(bag, slot) local bagNumber = bag; local name = ""; if ( type(bagNumber) ~= "number" ) then bagNumber = tonumber(bag); end if (bagNumber <= QM_NIL) then QuickMountTooltip:SetInventoryItem("player", slot); else QuickMountTooltip:SetBagItem(bag, slot); end name = QuickMountTooltipTextLeft1:GetText(); if name == nil then name = ""; end return name; end function QuickMount_PickupContainerItem(bag, slot) local empty = true; local autoflag = false; local name = ''; -- If we are set to auto-reconfigure, and we're unmounted and they are manually swapping items, configure. if ( QuickMount_CheckPlayer() == true and IGNORE_SWITCH == false and QuickMount_ConfigMap[QMCP]["auto-reconfig"] == true and QuickMount_ConfigMap[QMCP]["last_action"] ~= true and QuickMount_CurrentBag == QM_NIL and QuickMount_CurrentName ~= '' and CursorHasItem() ) then autoflag = true; end if ( QuickMount_SavedBagFunc ) then QuickMount_SavedBagFunc(bag, slot); end local texture, itemCount, locked = GetContainerItemInfo(bag, slot); if ( texture ) then name = QuickMount_GetItemName(bag, slot) end if IGNORE_SWITCH == false and CursorHasItem() then QuickMount_PickupItem(bag, slot, name, texture) empty = false end if ( autoflag and not CursorHasItem() and name ~= nil and name ~= '') then -- Check the UNMOUNT config for this item, swap if found for i in QuickMount_ConfigMap[QMCP][UNMOUNT] do if QuickMount_ConfigMap[QMCP][UNMOUNT][i].id > 0 and QuickMount_ConfigMap[QMCP][UNMOUNT][i].name == QuickMount_CurrentName then QuickMount_PickupItem(bag, slot, name, texture); QuickMount_ConfigMap[QMCP][UNMOUNT][i] = {id=QuickMount_CurrentID,bag=QuickMount_CurrentBag,slot=QuickMount_CurrentSlot,name=QuickMount_CurrentName,texture=QuickMount_CurrentTexture}; QuickMount_UpdateSet("QuickMountButtonSet",UNMOUNT,QM_SET_SIZE); end end end if empty then QuickMount_ResetItem(); end end function QuickMount_PickupInventoryItem(slot) local empty = true; local autoflag = false; local name = ''; -- If we are set to auto-reconfigure, and we're unmounted and they are manually swapping items, configure. if ( QuickMount_CheckPlayer() == true and IGNORE_SWITCH == false and QuickMount_ConfigMap[QMCP]["auto-reconfig"] == true and QuickMount_ConfigMap[QMCP]["last_action"] ~= true and QuickMount_CurrentBag ~= QM_NIL and CursorHasItem() ) then autoflag = true; end if ( QuickMount_SavedInvFunc ) then QuickMount_SavedInvFunc(slot); end local texture = GetInventoryItemTexture("player", slot); if ( texture ) then name = QuickMount_GetItemName(QM_NIL, slot) end if IGNORE_SWITCH == false and CursorHasItem() and name ~= '' then QuickMount_PickupItem(QM_NIL, slot, name, texture) empty = false end if ( autoflag and not CursorHasItem() and name ~= nil and name ~= '') then -- Check the UNMOUNT config for this item, swap if found for i in QuickMount_ConfigMap[QMCP][UNMOUNT] do if QuickMount_ConfigMap[QMCP][UNMOUNT][i].id > 0 and QuickMount_ConfigMap[QMCP][UNMOUNT][i].name == name then QuickMount_ConfigMap[QMCP][UNMOUNT][i] = {id=QuickMount_CurrentID,bag=QuickMount_CurrentBag,slot=QuickMount_CurrentSlot,name=QuickMount_CurrentName,texture=QuickMount_CurrentTexture}; QuickMount_UpdateSet("QuickMountButtonSet",UNMOUNT,QM_SET_SIZE); end end end if empty then QuickMount_ResetItem(); end end function QuickMount_UseContainerItem(bag, slot) local empty = true; local autoflag = false; local name_before = ''; local name_after = ''; if ( bag >= 0 and QuickMount_CheckPlayer() == true and IGNORE_SWITCH == false and QuickMount_ConfigMap[QMCP]["auto-reconfig"] == true and QuickMount_ConfigMap[QMCP]["last_action"] ~= true and QuickMount_CurrentBag == QM_NIL and QuickMount_CurrentName == '' and CursorHasItem() ~= true ) then autoflag = true; -- local texture_before, itemCount_before, locked_before = GetContainerItemInfo(bag, slot); -- if ( texture_before ) then -- name_before = QuickMount_GetItemName(bag, slot) -- end end if ( QuickMount_SavedUseFunc ) then QuickMount_SavedUseFunc(bag, slot); end if ( autoflag ) then local texture_after, itemCount_after, locked_after = GetContainerItemInfo(bag, slot); if ( texture_after ) then name_after = QuickMount_GetItemName(bag, slot) end if ( not CursorHasItem() and name_before ~= name_after and name_before ~= nil and name_before ~= '' and name_after ~= nil and name_after ~= '' ) then -- Check the UNMOUNT config for this item, swap if found for i in QuickMount_ConfigMap[QMCP][UNMOUNT] do if QuickMount_ConfigMap[QMCP][UNMOUNT][i].id > 0 and QuickMount_ConfigMap[QMCP][UNMOUNT][i].name == name_after then QuickMount_PickupItem(bag, slot, name_before, texture_before); QuickMount_ConfigMap[QMCP][UNMOUNT][i] = {id=QuickMount_CurrentID,bag=QuickMount_CurrentBag,slot=QuickMount_CurrentSlot,name=QuickMount_CurrentName,texture=QuickMount_CurrentTexture}; QuickMount_UpdateSet("QuickMountButtonSet",UNMOUNT,QM_SET_SIZE); end end end end end function QuickMount_OnLoad() -- Set the header local name = this:GetName(); local header = getglobal(name.."TitleText"); if ( header ) then header:SetText("|cFFee9966Mount Equipment|r"); end QuickMount_Reset(); -- RegisterForSave("QuickMount_ConfigMap"); QuickMount_RegisterEvents(); local temp = PickupContainerItem; if ( QuickMount_HookFunction("PickupContainerItem", "QuickMount_PickupContainerItem") ) then QuickMount_SavedBagFunc = temp; end local temp = PickupInventoryItem; if ( QuickMount_HookFunction("PickupInventoryItem", "QuickMount_PickupInventoryItem") ) then QuickMount_SavedInvFunc = temp; end local temp = UseContainerItem; if ( QuickMount_HookFunction("UseContainerItem", "QuickMount_UseContainerItem") ) then QuickMount_SavedUseFunc = temp; end -- Slash Commands SlashCmdList["MOUNTEQUIP"] = function(msg) QuickMount_Config(msg); end setglobal("SLASH_MOUNTEQUIP1", "/mountequip"); QME_Registered = 0; end function QuickMount_HookFunction(func, newfunc) local oldValue = getglobal(func); if ( oldValue ~= getglobal(newfunc) ) then setglobal(func, getglobal(newfunc)); return true; end return false; end function QuickMount_ShowHelp() local helptext = getglobal("QuickMountFrameHelpText"); if helptext then helptext:SetText("Drag Equipment you want auto-equipped into the squares. (Spurs, etc.) Shift click to clear item. Items that go in the same inventory slot should 'line up'. (Boots in slot 1, Trinkets in slot 2, etc.)"); end end function QuickMount_Enable_Toggle(which) if which then QuickMount_Disabled = false; else QuickMount_Disabled = true; end end function QuickMount_Quiet_Toggle(which) QuickMount_ConfigMap[QMCP]["Quiet"] = which; end function QuickMount_FlightPoint_Toggle(which) QuickMount_ConfigMap[QMCP]["FlightPoint"] = which; end function QuickMount_UseDetectedIcon_Toggle(which) QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = which; end function QuickMount_AutoReconfig_Toggle(which) QuickMount_ConfigMap[QMCP]["auto-reconfig"] = which; end function QuickMount_OnShow() local checked; QuickMount_ShowHelp() -- Configure checkboxes if (QuickMount_Disabled == false) then checked = 1; else checked = 0; end QuickMountCheck1:SetChecked(checked); QuickMountCheck1Text:SetText("QuickMountEquip enabled."); QuickMountCheck1.myToolTip = "Check to enable QuickMountEquip."; QuickMountCheck1.ExecuteCommand = QuickMount_Enable_Toggle; if (QuickMount_ConfigMap[QMCP]["Quiet"] == true) then checked = 1; else checked = 0; end QuickMountCheck2:SetChecked(checked); QuickMountCheck2Text:SetText("Don't show equip message spam."); QuickMountCheck2.myToolTip = "Check to disable equip messages."; QuickMountCheck2.ExecuteCommand = QuickMount_Quiet_Toggle; if (QuickMount_ConfigMap[QMCP]["FlightPoint"] == true) then checked = 1; else checked = 0; end QuickMountCheck3:SetChecked(checked); QuickMountCheck3Text:SetText("Griffin / FlightPoint check enabled."); QuickMountCheck3.myToolTip = "Check to enable Griffin / FlightPoint checking.\n(Might also trigger on druid shapeshifting, or\nwhenever your attack button gets disabled outside\nof combat.)"; QuickMountCheck3.ExecuteCommand = QuickMount_FlightPoint_Toggle; if (QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] == true and QuickMount_ConfigMap[QMCP]["DetectedIcon"] ~= nil) then checked = 1; else checked = 0; end local ourIcon = QuickMount_ConfigMap[QMCP]["DetectedIcon"]; if ourIcon == nil then ourIcon = 'NOT DETECTED YET'; end QuickMountCheck4:SetChecked(checked); QuickMountCheck4Text:SetText("Use auto-detected mount icon"); QuickMountCheck4.myToolTip = "Check to enable the mount auto-detected by\n/mountequip detect\n\nCurrently: " .. ourIcon .. "\n\n** Usually shouldn't be necessary. **"; QuickMountCheck4.ExecuteCommand = QuickMount_UseDetectedIcon_Toggle; if (QuickMount_ConfigMap[QMCP]["auto-reconfig"] == true) then checked = 1; else checked = 0; end QuickMountCheck5:SetChecked(checked); QuickMountCheck5Text:SetText("Auto-reconfigure."); QuickMountCheck5.myToolTip = "Check to enable Auto-reconfiguring.\nThis will automatically reconfigure the add-on if you\nmanually swap a configured item with another.\nOnly works while unmounted and with the\nunmounted equipment line."; QuickMountCheck5.ExecuteCommand = QuickMount_AutoReconfig_Toggle; end function QuickMount_OnHide() QuickMount_DropItem(); if MYADDONS_ACTIVE_OPTIONSFRAME == this then ShowUIPanel(myAddOnsFrame); end end function QME_RegisterUltimateUI() UltimateUI_RegisterButton ( "Mount Equipment", "Auto-Equip", "|cFF00CC00QuickMountEquip|r\nAllows you to select \nequipment to be auto-equipped \nas you mount/dismount", "Interface\\Icons\\Ability_Mount_RidingHorse", QuickMount_Toggle, function() return true; -- The button is enabled end ); QME_Registered = 1; end function QuickMount_OnEvent(event) local mounted = false local sheeped = false local clogged = false if event == "VARIABLES_LOADED" then QMCP = ""; clogged = true; -- Add myAddOns support if myAddOnsList then myAddOnsList.QuickMountEquip = {name = "QuickMountEquip", description = "Automatically switches gear when you mount", version = QuickMount_Version, frame = "QuickMountFrame", optionsframe = "QuickMountFrame"}; end if( QME_Registered == 0 ) then if ( UltimateUI_RegisterButton ) then QME_RegisterUltimateUI(); end end end if event == "UNIT_NAME_UPDATE" and arg1 == "player" then QMCP = ""; clogged = true; end if QuickMount_CheckPlayer() == false then return; end if clogged == true or QuickMount_Disabled == true then return; end if event == "DELETE_ITEM_CONFIRM" then -- If the GUI frame is open, don't let them delete anything. if ( QuickMountFrame and QuickMountFrame:IsVisible() ) then QuickMount_DropItem(); end return; end if event == "PLAYER_REGEN_DISABLED" then combat_flag = true end if event == "PLAYER_REGEN_ENABLED" then combat_flag = false end -- Can't switch inventory while in combat, so ignore if in combat if combat_flag == false then local _, Pclass = UnitClass("player"); local detectedIcon = nil; for i = 1,16 do local buff_texture = UnitBuff("player", i) local debuff_texture = UnitDebuff("player", i) if QuickMount_AutoDetect == true then if buff_texture then local parts = {n=0} local function helper(word) table.insert(parts, word) end string.gsub(buff_texture, "[_%w]+", helper); QuickMount_ConfigMap[QMCP]["DetectedIcon"] = parts[parts.n]; end else if debuff_texture and string.find(debuff_texture, "Polymorph") then sheeped = true return; end if Pclass == "PALADIN" or Pclass == "WARLOCK" then -- Paladin/Warlock Mount... Hopefully no other buff uses the same texture... if buff_texture and string.find(buff_texture, "Spell_Nature_Swiftness") then mounted = true break; end end if QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] == true and QuickMount_ConfigMap[QMCP]["DetectedIcon"] ~= nil then detectedIcon = QuickMount_ConfigMap[QMCP]["DetectedIcon"]; end if buff_texture and ( string.find(buff_texture, "Mount") or string.find(buff_texture, "Foot_Kodo") or ( detectedIcon ~= nil and string.find(buff_texture, detectedIcon) ) ) then -- Make sure it isn't "Aspect of the xxx" or "Tiger's Fury" local BuffName = QuickMount_GetBuffName(i); local Skip = false; if BuffName and ( string.find(BuffName, "Aspect") or string.find(BuffName, "Aspekt") or string.find(BuffName, "Tiger's Fury") ) then Skip = true end if Skip == false then mounted = true break; end end end end if QuickMount_AutoDetect == true then if QuickMount_ConfigMap[QMCP]["DetectedIcon"] ~= nil then QuickMount_AutoDetect = false; -- QuickMount_ConfigMap[QMCP]["UseDetectedIcon"] = true; QM_Print("Detected mount icon of: " .. QuickMount_ConfigMap[QMCP]["DetectedIcon"]); end return; end -- Test for flight path. Search for an attack button and see if it's disabled. This assumes the -- only time attack is disabled outside of combat is because of flight paths. -- Whoops... Polymorph takes them out of combat, *and* disables attack. Bleh. if QuickMount_ConfigMap[QMCP]["FlightPoint"] == true and mounted == false and sheeped == false and attack_button ~= QM_NIL then if attack_button == 0 then attack_button = QM_NIL -- Search for an attack button, and remember it. for i = 1,72 do if IsAttackAction(i) then attack_button = i break; end end end if attack_button ~= QM_NIL then local isusable, mana = IsUsableAction(attack_button) if isusable == nil or isusable == false then mounted = true end end end -- Only attempt to equip if it's different from last time. if QuickMount_ConfigMap[QMCP]["last_action"] == nil or QuickMount_ConfigMap[QMCP]["last_action"] ~= mounted then QuickMount_ConfigMap[QMCP]["last_action"] = mounted local row1, row2; if mounted then row1 = MOUNT; row2 = UNMOUNT; else row1 = UNMOUNT; row2 = MOUNT; end IGNORE_SWITCH = true; items = ""; for i in QuickMount_ConfigMap[QMCP][row1] do local x, y; x = QM_NIL; y = QM_NIL; if QuickMount_ConfigMap[QMCP][row1][i].id > 0 and QuickMount_ConfigMap[QMCP][row2][i].id > 0 and QuickMount_ConfigMap[QMCP][row1][i].name ~= QuickMount_ConfigMap[QMCP][row2][i].name then -- Swap Items x, y = QuickMount_FindInvItem(QuickMount_ConfigMap[QMCP][row2][i].name, true); if CursorHasItem() then x, y = QuickMount_FindBagItem(QuickMount_ConfigMap[QMCP][row1][i].name, true); if CursorHasItem() then y = QM_NIL; AutoEquipCursorItem(); end else x, y = QuickMount_FindBagItem(QuickMount_ConfigMap[QMCP][row1][i].name, true, true); end elseif QuickMount_ConfigMap[QMCP][row1][i].id > 0 then x, y = QuickMount_FindBagItem(QuickMount_ConfigMap[QMCP][row1][i].name, true, true); end if y >= 0 then items = items .. ' "' .. QuickMount_ConfigMap[QMCP][row1][i].name .. '"'; end end if items ~= "" and QuickMount_ConfigMap[QMCP]["Quiet"] == false then QM_Print("Equipped" .. items); end IGNORE_SWITCH = false; end -- last_action end -- combat_flag end function QM_Print(msg) DEFAULT_CHAT_FRAME:AddMessage(msg); end function QuickMount_ButtonLoad() this:RegisterForDrag("LeftButton", "RightButton"); this:RegisterForClicks("LeftButtonUp", "RightButtonUp"); end function QuickMount_FindBagItem(name, pickup, equip) if name == nil then return QM_NIL, QM_NIL; end -- Look in bags. for i = 0, 4, 1 do local numSlot = GetContainerNumSlots(i); for y = 1, numSlot, 1 do if (strupper(QuickMount_GetItemName(i, y)) == strupper(name)) then if pickup or equip then PickupContainerItem(i,y); if equip then AutoEquipCursorItem(); end end return i,y; end end end return QM_NIL, QM_NIL; end function QuickMount_FindInvItem(name, pickup) if name == nil then return QM_NIL, QM_NIL; end -- Look in inventory. for i = 1, 19, 1 do if (strupper(QuickMount_GetItemName(QM_NIL, i)) == strupper(name)) then if pickup then PickupInventoryItem(i); end return QM_NIL, i; end end return QM_NIL, QM_NIL; end function QuickMount_FindItem(bag, slot, name, pickup, equip) if name == nil then return QM_NIL, QM_NIL; end -- First look where it's suggested we look. --[[ NOT WORKING... Cacheing problem? if (strupper(QuickMount_GetItemName(bag,slot)) == strupper(name)) then if pickup then if bag >= 0 then PickupContainerItem(bag,slot); else PickupInventoryItem(slot); end end return bag, slot; end ]] local x, y = QuickMount_FindBagItem(name, pickup, equip); if equip then return x, y; end if x < 0 then x, y = QuickMount_FindInvItem(name, pickup); end return x, y; end -- Erases the old button with the hand function QuickMount_SetButton(row, col) if QuickMount_CheckPlayer() == false then return; end -- Set the new button QuickMount_ConfigMap[QMCP][row][col] = {id=QuickMount_CurrentID,bag=QuickMount_CurrentBag,slot=QuickMount_CurrentSlot,name=QuickMount_CurrentName,texture=QuickMount_CurrentTexture}; QuickMount_DropItem(); QuickMount_ButtonUpdate(this); end -- Swaps the specified button into hand function QuickMount_SwapButton(row,col) if QuickMount_CheckPlayer() == false then return; end -- Store the old value if one exists local temp = nil; if ( QuickMount_ConfigMap[QMCP][row][col].id > 0 ) then temp = QuickMount_ConfigMap[QMCP][row][col]; end -- Drop the current button QuickMount_SetButton(row, col); -- Load the old one into the cursor if ( temp ) then if ( temp.id > 0 ) then local bag, slot = QuickMount_FindItem(temp.bag, temp.slot, temp.name, true); QuickMount_PickupItem(bag, slot, temp.name, temp.texture); end end end -- Button Event Handler function QuickMount_ButtonEvent(event) end -- Move the Equipment around function QuickMount_ButtonDragStart() local col, row = QuickMount_GetCurrentLocation(this); -- Pick up the current item QuickMount_SwapButton(row,col); end -- -- Swap or pick up if clicked with or without a full hand -- function QuickMount_ButtonClick(button) if QuickMount_CheckPlayer() == false then return; end local col, row = QuickMount_GetCurrentLocation(this); if IsShiftKeyDown() then QuickMount_ConfigMap[QMCP][row][col] = {id=QM_NIL;bag=QM_NIL;slot=QM_NIL;texture="";name="";}; QuickMount_ButtonUpdate(this); elseif IsAltKeyDown() then -- PrintTable(QuickMount_ConfigMap[QMCP][row][col]); else -- Pick up the current item QuickMount_SwapButton(row,col); end end function QuickMount_ButtonDragEnd() if QuickMount_CheckPlayer() == false then return; end if( QuickMount_CurrentID > 0 ) then local col, row = QuickMount_GetCurrentLocation(this); QuickMount_SwapButton(row,col); end end -- Displays the tooltip of the item in the box. function QuickMount_ButtonEnter() if QuickMount_CheckPlayer() == false then return; end local col, row = QuickMount_GetCurrentLocation(this); local id = QuickMount_ConfigMap[QMCP][row][col].id; local tooltip = QuickMount_ConfigMap[QMCP][row][col].name; if ( id > 0 ) then GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); if ( GameTooltip:SetText(tooltip) ) then this.updateTooltip = TOOLTIP_UPDATE_TIME; else this.updateTooltip = nil; end end end function QuickMount_ButtonLeave() GameTooltip:Hide(); end function QuickMount_ButtonLoad() end -- Self Texture Button function QuickMount_SetSelfTexture(button, row, col) if QuickMount_CheckPlayer() == false then return; end local name = button:GetName(); local icon = getglobal(name.."Icon"); if ( QuickMount_ConfigMap[QMCP][row] == nil ) then return end local id = QuickMount_ConfigMap[QMCP][row][col].id; if ( id > 0 ) then -- Set the pretty texture local texture = QuickMount_ConfigMap[QMCP][row][col].texture; if ( texture ) then icon:SetTexture(texture); icon:Show(); else icon:Hide(); end else icon:Hide(); end end -- Button Update function QuickMount_ButtonUpdate(button) -- Check the button if ( button == nil ) then return; end -- Uncheck it button:SetChecked("false"); local col, row = QuickMount_GetCurrentLocation(button); -- Check for errors if ( col == nil or row == nil ) then return; end -- Enable the button button:Enable(); QuickMount_SetSelfTexture(button, row, col); end function QuickMount_UpdateSet(setbasename,set,size) if set == nul then return; end for i=1,size,1 do QuickMount_ButtonUpdate(getglobal(setbasename..set..i)); end end function QuickMount_UpdateAllSets() for set=1,QM_SET_COUNT,1 do QuickMount_UpdateSet("QuickMountButtonSet",set,QM_SET_SIZE); end end -- Tracks the last item picked up function QuickMount_PickupItem(bag, slot, name, texture) QuickMount_CurrentID = 1; QuickMount_CurrentBag = bag; QuickMount_CurrentSlot = slot; QuickMount_CurrentName = name; QuickMount_CurrentTexture = texture; end function QuickMount_ResetItem() QuickMount_CurrentID = QM_NIL; QuickMount_CurrentBag = QM_NIL; QuickMount_CurrentSlot = QM_NIL; QuickMount_CurrentName = ""; QuickMount_CurrentTexture = ""; end function QuickMount_DropItem() if CursorHasItem() then if QuickMount_CurrentBag >= 0 then PickupContainerItem(QuickMount_CurrentBag,QuickMount_CurrentSlot); elseif QuickMount_CurrentSlot >= 0 then PickupInventoryItem(QuickMount_CurrentSlot); end end QuickMount_ResetItem(); end function QuickMountCheckButton_OnClick() if (this:GetChecked()) then this.ExecuteCommand(true); else this.ExecuteCommand(false); end end function QuickMountCheckButton_OnEnter() GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); if ( GameTooltip:SetText(this.myToolTip) ) then this.updateTooltip = TOOLTIP_UPDATE_TIME; else this.updateTooltip = nil; end end function QuickMountCheckButton_OnLeave() GameTooltip:Hide(); end -- Returns the current button location function QuickMount_GetCurrentLocation(object) return object:GetID(), object:GetParent():GetID(); end