Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- CHANGELOG:
- VERSION 0.0.15:
- -- Update for 3.4.3/PTR
- VERSION 0.0.14:
- -- Added an optional argument to /randommount <flying|ground> to manually select the mount table to use
- `/randommount flying` uses the flying mount table
- `/randommount ground` uses the ground mount table
- -- Added various missing mounts:
- Blazing Hippogryph
- Blue Mechanostrider
- Brewfest Ram
- Brewfest Riding Kodo
- Emerald Raptor
- Great Elite Elekk
- Ivory Raptor
- Magic Rooster
- Merciless Nether Drake
- Striped Frostsaber
- Swift Mooncloth Carpet
- Swift Shadoweave Carpet
- Swift Spellfire Carpet
- Swift Zhevra
- Wooly White Rhino
- VERSION 0.0.13:
- -- Fix settings panel on 3.4.2/PTR
- VERSION 0.0.12:
- -- Added missing Alliance and Horde Paladin mounts
- -- Added missing Warlock mounts
- VERSION 0.0.11:
- -- Fixed internal cache being stale on first login and should now correctly mount
- on first login.
- VERSION 0.0.10:
- -- First release
- -- Added Festering Emerald Drake store mount
- VERSION 0.0.9:
- -- Fix Reawakened Phase-Hunter store mount to correctly be a ground mount and not a flying mount.
- VERSION 0.0.8:
- -- Fixed dual-purpose mounts to be favorable separately
- VERSION 0.0.7:
- -- Fixed bug when game version updates or WoW Cache folder is deleted causing RandomMount to
- create an invalid mount cache and would mount the wrong mounts.
- -- Added "Search..." indicator to search editbox in addon interface
- VERSION 0.0.6:
- -- Fixed trying to mount in "IsFlyableArea" zones when player doesn't have flying learned.
- -- Fixed trying to use a flying mount in Northrend when player doesn't know Cold Weather Flying
- -- Fixed correct mount selection in Dalaran main city and Krasus' Landing
- VERSION 0.0.5:
- -- Added search filter to mount list that filters by name
- VERSION 0.0.4:
- -- Added the Reawakened Phase-Hunter and Kalu'ak Whalebone Glider store mounts.
- VERSION 0.0.3:
- -- Fixed excessive scrolling in options
- VERSION 0.0.2:
- -- Fixed interface options bug where list of mounts did not immediately appear.
- VERSION 0.0.1:
- -- Alpha release
- --]]
- local AddonPrefix = "RandomMount"
- local InterfaceID = select(4, GetBuildInfo())
- RandomMount = {}
- RandomMountVars = RandomMountVars or {}
- RandomMountVarsPerChar = RandomMountVarsPerChar or {}
- local RIDING_GROUND = 1
- local RIDING_FLYING = 2
- local RIDING_BOTH = 3
- local MountSpellIds = {
- -- Store Mounts
- [348459] = RIDING_GROUND, -- Reawakened Phase-Hunter
- [372677] = RIDING_BOTH, -- Kalu'ak Whalebone Glider
- [394209] = RIDING_BOTH, -- Festering Emerald Drake
- -- Paladin
- [34767] = RIDING_GROUND, -- Summon Charger (horde)
- [34769] = RIDING_GROUND, -- Summon Warhorse (horde)
- [13819] = RIDING_GROUND, -- Warhorse (alliance)
- [23214] = RIDING_GROUND, -- Charger (alliance)
- -- Warlock
- [5784] = RIDING_GROUND, -- Felsteed
- [23161] = RIDING_GROUND, -- Dreadsteed
- [71342] = RIDING_BOTH, -- X-45 Heartbreaker
- [75614] = RIDING_BOTH, -- Celestial Steed
- [72286] = RIDING_BOTH, -- Invincible's Reins
- [48025] = RIDING_BOTH, -- Headless Horseman's Mount
- [60025] = RIDING_FLYING, -- Albino Drake
- [63844] = RIDING_FLYING, -- Argent Hippogryph
- [61230] = RIDING_FLYING, -- Armored Blue Wind Rider
- [61229] = RIDING_FLYING, -- Armored Snowy Gryphon
- [40192] = RIDING_FLYING, -- Ashes of Al'ar
- [59567] = RIDING_FLYING, -- Azure Drake
- [41514] = RIDING_FLYING, -- Azure Netherwing Drake
- [59650] = RIDING_FLYING, -- Black Drake
- [59976] = RIDING_FLYING, -- Black Proto-Drake
- [387320] = RIDING_FLYING, -- Blazing Hippogryph
- [74856] = RIDING_FLYING, -- Blazing Hippogryph
- [72808] = RIDING_FLYING, -- Bloodbathed Frostbrood Vanquisher
- [61996] = RIDING_FLYING, -- Blue Dragonhawk
- [59568] = RIDING_FLYING, -- Blue Drake
- [59996] = RIDING_FLYING, -- Blue Proto-Drake
- [39803] = RIDING_FLYING, -- Blue Riding Nether Ray
- [32244] = RIDING_FLYING, -- Blue Wind Rider
- [59569] = RIDING_FLYING, -- Bronze Drake
- [58615] = RIDING_FLYING, -- Brutal Nether Drake
- [43927] = RIDING_FLYING, -- Cenarion War Hippogryph
- [41515] = RIDING_FLYING, -- Cobalt Netherwing Drake
- [64927] = RIDING_FLYING, -- Deadly Gladiator's Frost Wyrm
- [32239] = RIDING_FLYING, -- Ebon Gryphon
- [61451] = RIDING_FLYING, -- Flying Carpet
- [44153] = RIDING_FLYING, -- Flying Machine
- [75596] = RIDING_FLYING, -- Frosty Flying Carpet
- [65439] = RIDING_FLYING, -- Furious Gladiator's Frost Wyrm
- [32235] = RIDING_FLYING, -- Golden Gryphon
- [61294] = RIDING_FLYING, -- Green Proto-Drake
- [39798] = RIDING_FLYING, -- Green Riding Nether Ray
- [32245] = RIDING_FLYING, -- Green Wind Rider
- [72807] = RIDING_FLYING, -- Icebound Frostbrood Vanquisher
- [63956] = RIDING_FLYING, -- Ironbound Proto-Drake
- [61309] = RIDING_FLYING, -- Magnificent Flying Carpet
- [44317] = RIDING_FLYING, -- Merciless Nether Drake
- [44744] = RIDING_FLYING, -- Merciless Nether Drake
- [63796] = RIDING_FLYING, -- Mimiron's Head
- [69395] = RIDING_FLYING, -- Onyxian Drake
- [41513] = RIDING_FLYING, -- Onyx Netherwing Drake
- [32345] = RIDING_FLYING, -- Peep the Phoenix Mount
- [60021] = RIDING_FLYING, -- Plagued Proto-Drake
- [41516] = RIDING_FLYING, -- Purple Netherwing Drake
- [39801] = RIDING_FLYING, -- Purple Riding Nether Ray
- [61997] = RIDING_FLYING, -- Red Dragonhawk
- [59570] = RIDING_FLYING, -- Red Drake
- [59961] = RIDING_FLYING, -- Red Proto-Drake
- [39800] = RIDING_FLYING, -- Red Riding Nether Ray
- [67336] = RIDING_FLYING, -- Relentless Gladiator's Frost Wyrm
- [63963] = RIDING_FLYING, -- Rusted Proto-Drake
- [66087] = RIDING_FLYING, -- Silver Covenant Hippogryph
- [39802] = RIDING_FLYING, -- Silver Riding Nether Ray
- [32240] = RIDING_FLYING, -- Snowy Gryphon
- [66088] = RIDING_FLYING, -- Sunreaver Dragonhawk
- [32242] = RIDING_FLYING, -- Swift Blue Gryphon
- [32290] = RIDING_FLYING, -- Swift Green Gryphon
- [32295] = RIDING_FLYING, -- Swift Green Wind Rider
- [61442] = RIDING_FLYING, -- Swift Mooncloth Carpet
- [37015] = RIDING_FLYING, -- Swift Nether Drake
- [32292] = RIDING_FLYING, -- Swift Purple Gryphon
- [32297] = RIDING_FLYING, -- Swift Purple Wind Rider
- [32289] = RIDING_FLYING, -- Swift Red Gryphon
- [32246] = RIDING_FLYING, -- Swift Red Wind Rider
- [61444] = RIDING_FLYING, -- Swift Shadoweave Carpet
- [55164] = RIDING_FLYING, -- Swift Spectral Gryphon
- [61446] = RIDING_FLYING, -- Swift Spellfire Carpet
- [32296] = RIDING_FLYING, -- Swift Yellow Wind Rider
- [32243] = RIDING_FLYING, -- Tawny Wind Rider
- [60002] = RIDING_FLYING, -- Time-Lost Proto-Drake
- [44151] = RIDING_FLYING, -- Turbo-Charged Flying Machine
- [59571] = RIDING_FLYING, -- Twilight Drake
- [49193] = RIDING_FLYING, -- Vengeful Nether Drake
- [41517] = RIDING_FLYING, -- Veridian Netherwing Drake
- [41518] = RIDING_FLYING, -- Violet Netherwing Drake
- [60024] = RIDING_FLYING, -- Violet Proto-Drake
- [54729] = RIDING_FLYING, -- Winged Steed of the Ebon Blade
- [71810] = RIDING_FLYING, -- Wrathful Gladiator's Frost Wyrm
- [46197] = RIDING_FLYING, -- X-51 Nether-Rocket
- [46199] = RIDING_FLYING, -- X-51 Nether-Rocket X-TREME
- [75973] = RIDING_FLYING, -- X-53 Touring Rocket
- [48778] = RIDING_GROUND, -- Acherus Deathcharger
- [43688] = RIDING_GROUND, -- Amani War Bear
- [16056] = RIDING_GROUND, -- Ancient Frostsaber
- [16081] = RIDING_GROUND, -- Arctic Wolf
- [66906] = RIDING_GROUND, -- Argent Charger
- [66907] = RIDING_GROUND, -- Argent Warhorse
- [67466] = RIDING_GROUND, -- Argent Warhorse
- [60114] = RIDING_GROUND, -- Armored Brown Bear
- [60116] = RIDING_GROUND, -- Armored Brown Bear
- [51412] = RIDING_GROUND, -- Big Battle Bear
- [58983] = RIDING_GROUND, -- Big Blizzard Bear
- [22719] = RIDING_GROUND, -- Black Battlestrider
- [35022] = RIDING_GROUND, -- Black Hawkstrider
- [16055] = RIDING_GROUND, -- Black Nightsaber
- [25863] = RIDING_GROUND, -- Black Qiraji Battle Tank
- [26655] = RIDING_GROUND, -- Black Qiraji Battle Tank
- [26656] = RIDING_GROUND, -- Black Qiraji Battle Tank
- [17461] = RIDING_GROUND, -- Black Ram
- [64977] = RIDING_GROUND, -- Black Skeletal Horse
- [470] = RIDING_GROUND, -- Black Stallion
- [60118] = RIDING_GROUND, -- Black War Bear
- [60119] = RIDING_GROUND, -- Black War Bear
- [48027] = RIDING_GROUND, -- Black War Elekk
- [22718] = RIDING_GROUND, -- Black War Kodo
- [59785] = RIDING_GROUND, -- Black War Mammoth
- [59788] = RIDING_GROUND, -- Black War Mammoth
- [22720] = RIDING_GROUND, -- Black War Ram
- [22721] = RIDING_GROUND, -- Black War Raptor
- [22717] = RIDING_GROUND, -- Black War Steed
- [22723] = RIDING_GROUND, -- Black War Tiger
- [22724] = RIDING_GROUND, -- Black War Wolf
- [64658] = RIDING_GROUND, -- Black Wolf
- [35020] = RIDING_GROUND, -- Blue Hawkstrider
- [10969] = RIDING_GROUND, -- Blue Mechanostrider
- [33630] = RIDING_GROUND, -- Blue Mechanostrider
- [25953] = RIDING_GROUND, -- Blue Qiraji Battle Tank
- [17463] = RIDING_GROUND, -- Blue Skeletal Horse
- [64656] = RIDING_GROUND, -- Blue Skeletal Warhorse
- [50869] = RIDING_GROUND, -- Brewfest Kodo
- [43899] = RIDING_GROUND, -- Brewfest Ram
- [50870] = RIDING_GROUND, -- Brewfest Ram
- [49378] = RIDING_GROUND, -- Brewfest Riding Kodo
- [34406] = RIDING_GROUND, -- Brown Elekk
- [458] = RIDING_GROUND, -- Brown Horse
- [18990] = RIDING_GROUND, -- Brown Kodo
- [6899] = RIDING_GROUND, -- Brown Ram
- [17464] = RIDING_GROUND, -- Brown Skeletal Horse
- [6654] = RIDING_GROUND, -- Brown Wolf
- [6648] = RIDING_GROUND, -- Chestnut Mare
- [39315] = RIDING_GROUND, -- Cobalt Riding Talbuk
- [34896] = RIDING_GROUND, -- Cobalt War Talbuk
- [73313] = RIDING_GROUND, -- Crimson Deathcharger
- [68188] = RIDING_GROUND, -- Crusader's Black Warhorse
- [68187] = RIDING_GROUND, -- Crusader's White Warhorse
- [39316] = RIDING_GROUND, -- Dark Riding Talbuk
- [63635] = RIDING_GROUND, -- Darkspear Raptor
- [34790] = RIDING_GROUND, -- Dark War Talbuk
- [63637] = RIDING_GROUND, -- Darnassian Nightsaber
- [6653] = RIDING_GROUND, -- Dire Wolf
- [8395] = RIDING_GROUND, -- Emerald Raptor
- [63639] = RIDING_GROUND, -- Exodar Elekk
- [36702] = RIDING_GROUND, -- Fiery Warhorse
- [63643] = RIDING_GROUND, -- Forsaken Warhorse
- [17460] = RIDING_GROUND, -- Frost Ram
- [23509] = RIDING_GROUND, -- Frostwolf Howler
- [63638] = RIDING_GROUND, -- Gnomeregan Mechanostrider
- [61465] = RIDING_GROUND, -- Grand Black War Mammoth
- [61467] = RIDING_GROUND, -- Grand Black War Mammoth
- [61469] = RIDING_GROUND, -- Grand Ice Mammoth
- [61470] = RIDING_GROUND, -- Grand Ice Mammoth
- [35710] = RIDING_GROUND, -- Gray Elekk
- [18989] = RIDING_GROUND, -- Gray Kodo
- [6777] = RIDING_GROUND, -- Gray Ram
- [35713] = RIDING_GROUND, -- Great Blue Elekk
- [49379] = RIDING_GROUND, -- Great Brewfest Kodo
- [23249] = RIDING_GROUND, -- Great Brown Kodo
- [34407] = RIDING_GROUND, -- Great Elite Elekk
- [65641] = RIDING_GROUND, -- Great Golden Kodo
- [23248] = RIDING_GROUND, -- Great Gray Kodo
- [35712] = RIDING_GROUND, -- Great Green Elekk
- [35714] = RIDING_GROUND, -- Great Purple Elekk
- [65637] = RIDING_GROUND, -- Great Red Elekk
- [23247] = RIDING_GROUND, -- Great White Kodo
- [18991] = RIDING_GROUND, -- Green Kodo
- [17453] = RIDING_GROUND, -- Green Mechanostrider
- [26056] = RIDING_GROUND, -- Green Qiraji Battle Tank
- [17465] = RIDING_GROUND, -- Green Skeletal Warhorse
- [59797] = RIDING_GROUND, -- Ice Mammoth
- [59799] = RIDING_GROUND, -- Ice Mammoth
- [17459] = RIDING_GROUND, -- Icy Blue Mechanostrider Mod-A
- [63636] = RIDING_GROUND, -- Ironforge Ram
- [10795] = RIDING_GROUND, -- Ivory Raptor
- [17450] = RIDING_GROUND, -- Ivory Raptor
- [65917] = RIDING_GROUND, -- Magic Rooster
- [66122] = RIDING_GROUND, -- Magic Rooster
- [66123] = RIDING_GROUND, -- Magic Rooster
- [66124] = RIDING_GROUND, -- Magic Rooster
- [55531] = RIDING_GROUND, -- Mechano- Hog
- [60424] = RIDING_GROUND, -- Mekgineer's Chopper
- [16084] = RIDING_GROUND, -- Mottled Red Raptor
- [66846] = RIDING_GROUND, -- Ochre Skeletal Warhorse
- [63640] = RIDING_GROUND, -- Orgrimmar Wolf
- [16082] = RIDING_GROUND, -- Palomino
- [472] = RIDING_GROUND, -- Pinto
- [35711] = RIDING_GROUND, -- Purple Elekk
- [35018] = RIDING_GROUND, -- Purple Hawkstrider
- [23246] = RIDING_GROUND, -- Purple Skeletal Warhorse
- [66090] = RIDING_GROUND, -- Quel'dorei Steed
- [41252] = RIDING_GROUND, -- Raven Lord
- [34795] = RIDING_GROUND, -- Red Hawkstrider
- [10873] = RIDING_GROUND, -- Red Mechanostrider
- [26054] = RIDING_GROUND, -- Red Qiraji Battle Tank
- [17462] = RIDING_GROUND, -- Red Skeletal Horse
- [22722] = RIDING_GROUND, -- Red Skeletal Warhorse
- [16080] = RIDING_GROUND, -- Red Wolf
- [30174] = RIDING_GROUND, -- Riding Turtle
- [17481] = RIDING_GROUND, -- Rivendare's Deathcharger
- [64731] = RIDING_GROUND, -- Sea Turtle
- [63642] = RIDING_GROUND, -- Silvermoon Hawkstrider
- [39317] = RIDING_GROUND, -- Silver Riding Talbuk
- [34898] = RIDING_GROUND, -- Silver War Talbuk
- [42776] = RIDING_GROUND, -- Spectral Tiger
- [10789] = RIDING_GROUND, -- Spotted Frostsaber
- [23510] = RIDING_GROUND, -- Stormpike Battle Charger
- [63232] = RIDING_GROUND, -- Stormwind Steed
- [66847] = RIDING_GROUND, -- Striped Dawnsaber
- [8394] = RIDING_GROUND, -- Striped Frostsaber
- [10793] = RIDING_GROUND, -- Striped Nightsaber
- [66091] = RIDING_GROUND, -- Sunreaver Hawkstrider
- [68057] = RIDING_GROUND, -- Swift Alliance Steed
- [23241] = RIDING_GROUND, -- Swift Blue Raptor
- [43900] = RIDING_GROUND, -- Swift Brewfest Ram
- [23238] = RIDING_GROUND, -- Swift Brown Ram
- [23229] = RIDING_GROUND, -- Swift Brown Steed
- [23250] = RIDING_GROUND, -- Swift Brown Wolf
- [65646] = RIDING_GROUND, -- Swift Burgundy Wolf
- [23221] = RIDING_GROUND, -- Swift Frostsaber
- [23239] = RIDING_GROUND, -- Swift Gray Ram
- [65640] = RIDING_GROUND, -- Swift Gray Steed
- [23252] = RIDING_GROUND, -- Swift Gray Wolf
- [35025] = RIDING_GROUND, -- Swift Green Hawkstrider
- [23225] = RIDING_GROUND, -- Swift Green Mechanostrider
- [68056] = RIDING_GROUND, -- Swift Horde Wolf
- [23219] = RIDING_GROUND, -- Swift Mistsaber
- [65638] = RIDING_GROUND, -- Swift Moonsaber
- [23242] = RIDING_GROUND, -- Swift Olive Raptor
- [23243] = RIDING_GROUND, -- Swift Orange Raptor
- [23227] = RIDING_GROUND, -- Swift Palomino
- [33660] = RIDING_GROUND, -- Swift Pink Hawkstrider
- [35027] = RIDING_GROUND, -- Swift Purple Hawkstrider
- [65644] = RIDING_GROUND, -- Swift Purple Raptor
- [24242] = RIDING_GROUND, -- Swift Razzashi Raptor
- [65639] = RIDING_GROUND, -- Swift Red Hawkstrider
- [42777] = RIDING_GROUND, -- Swift Spectral Tiger
- [23338] = RIDING_GROUND, -- Swift Stormsaber
- [23251] = RIDING_GROUND, -- Swift Timber Wolf
- [65643] = RIDING_GROUND, -- Swift Violet Ram
- [35028] = RIDING_GROUND, -- Swift Warstrider
- [46628] = RIDING_GROUND, -- Swift White Hawkstrider
- [23223] = RIDING_GROUND, -- Swift White Mechanostrider
- [23240] = RIDING_GROUND, -- Swift White Ram
- [23228] = RIDING_GROUND, -- Swift White Steed
- [23222] = RIDING_GROUND, -- Swift Yellow Mechanostrider
- [48954] = RIDING_GROUND, -- Swift Zhevra
- [49322] = RIDING_GROUND, -- Swift Zhevra
- [24252] = RIDING_GROUND, -- Swift Zulian Tiger
- [39318] = RIDING_GROUND, -- Tan Riding Talbuk
- [34899] = RIDING_GROUND, -- Tan War Talbuk
- [18992] = RIDING_GROUND, -- Teal Kodo
- [63641] = RIDING_GROUND, -- Thunder Bluff Kodo
- [580] = RIDING_GROUND, -- Timber Wolf
- [61425] = RIDING_GROUND, -- Traveler's Tundra Mammoth
- [61447] = RIDING_GROUND, -- Traveler's Tundra Mammoth
- [65642] = RIDING_GROUND, -- Turbostrider
- [10796] = RIDING_GROUND, -- Turquoise Raptor
- [17454] = RIDING_GROUND, -- Unpainted Mechanostrider
- [64659] = RIDING_GROUND, -- Venomhide Ravasaur
- [10799] = RIDING_GROUND, -- Violet Raptor
- [64657] = RIDING_GROUND, -- White Kodo
- [15779] = RIDING_GROUND, -- White Mechanostrider Mod B
- [54753] = RIDING_GROUND, -- White Polar Bear
- [6898] = RIDING_GROUND, -- White Ram
- [39319] = RIDING_GROUND, -- White Riding Talbuk
- [65645] = RIDING_GROUND, -- White Skeletal Warhorse
- [16083] = RIDING_GROUND, -- White Stallion
- [34897] = RIDING_GROUND, -- White War Talbuk
- [17229] = RIDING_GROUND, -- Winterspring Frostsaber
- [59791] = RIDING_GROUND, -- Wooly Mammoth
- [59793] = RIDING_GROUND, -- Wooly Mammoth
- [387321] = RIDING_GROUND, -- Wooly White Rhino
- [74918] = RIDING_GROUND, -- Wooly White Rhino
- [26055] = RIDING_GROUND, -- Yellow Qiraji Battle Tank
- }
- RandomMount.OwnedMounts = {}
- RandomMount.OwnedGroundMounts = {}
- RandomMount.OwnedFlyingMounts = {}
- RandomMount.FavoriteGroundMounts = {}
- RandomMount.FavoriteFlyingMounts = {}
- local FLYING_TAB = 1
- local GROUND_TAB = 2
- RandomMount.SelectedTab = FLYING_TAB
- local function PlayerKnowsFlying()
- -- Doesn't work for some reason?
- --return IsSpellKnown(34091, false) or IsSpellKnown(34090, false)
- for i = 1, GetNumSkillLines() do
- local name, _, _, rank = GetSkillLineInfo(i)
- if name == "Riding" then
- return rank >= 225
- end
- end
- return false
- end
- local function IsTruelyFlyableArea()
- if not IsFlyableArea() then
- return false
- end
- local _, _, _, _, _, _, _, instanceMapId = GetInstanceInfo()
- if instanceMapId ~= 571 -- Northrend
- and instanceMapId ~= 530 -- Outland
- then
- return true -- Cata !
- end
- local mapId = C_Map.GetBestMapForUnit("player")
- local playerKnowsColdWeatherFlying = IsSpellKnown(54197, false)
- if mapId == 125 then -- Dalaran - Dalaran City
- if GetSubZoneText() == "Krasus' Landing" then
- return playerKnowsColdWeatherFlying
- end
- return false
- end
- if mapId == 126 then -- Dalaran - The Underbelly
- return false
- end
- if instanceMapId == 530 then -- Outland
- return PlayerKnowsFlying()
- end
- if instanceMapId == 571 then -- Northrend
- return playerKnowsColdWeatherFlying
- end
- return true -- Cata!
- end
- function RandomMount_SummonMount(companion)
- print("Summoning Mount: " .. companion.name .. " " .. companion.id)
- C_MountJournal.SummonByID(companion.id)
- end
- SLASH_RANDOMMOUNT1 = "/randommount";
- SlashCmdList["RANDOMMOUNT"] = function(msg)
- -- select a random mount and use it.
- if IsMounted() then
- Dismount()
- return
- end
- -- RandomMount:UpdateCompanionIds()
- local tbl = {}
- if msg == "flying" then
- tbl = RandomMount.FavoriteFlyingMounts
- elseif msg == "ground" then
- tbl = RandomMount.FavoriteGroundMounts
- end
- if #tbl == 0 then
- if IsTruelyFlyableArea() then
- tbl = RandomMount.FavoriteFlyingMounts
- else
- tbl = RandomMount.FavoriteGroundMounts
- end
- end
- if #tbl ~= 0 then
- local companion = tbl[math.random(#tbl)]
- RandomMount_SummonMount(companion)
- else
- print("RandomMount: No usable mounts selected.")
- end
- end
- SLASH_RANDOMPET1 = "/randompet";
- SlashCmdList["RANDOMPET"] = function(msg)
- CallCompanion("CRITTER", math.random(GetNumCompanions("CRITTER")))
- end
- function RandomMountFrame_OnLoad(self)
- RandomMount.frame = self
- self:RegisterEvent("ADDON_LOADED")
- self:RegisterEvent("PLAYER_ENTERING_WORLD")
- self:RegisterEvent("COMPANION_LEARNED")
- self:RegisterEvent("COMPANION_UNLEARNED")
- self:RegisterEvent("COMPANION_UPDATE")
- end
- function RandomMount.UpdateMounts(self, force)
- local numMounts = GetNumCompanions("MOUNT")
- if not force and #self.OwnedMounts == numMounts then
- return
- end
- local ground = {}
- local flying = {}
- local allMounts = {}
- local needsCacheUpdate = false
- if InterfaceID < 30403 then
- for i = 1, numMounts do
- local creatureId, name, spellId = GetCompanionInfo("MOUNT", i)
- needsCacheUpdate = needsCacheUpdate or (name == nil)
- local info = MountSpellIds[spellId]
- if info ~= nil then
- local e = {name = name, spellId = spellId, id = i, type = info, creatureId = creatureId}
- if bit.band(RIDING_GROUND, info) ~= 0 then
- e.ground = true
- table.insert(ground, e)
- end
- if bit.band(RIDING_FLYING, info) ~= 0 then
- e.flying = true
- table.insert(flying, e)
- end
- table.insert(allMounts, e)
- end
- end
- else -- 3.4.3 PTR
- local playerFaction = 0
- if UnitFactionGroup("player") == "Alliance" then
- playerFaction = 1
- end
- local mountIDs = C_MountJournal.GetMountIDs()
- for i, mountID in ipairs(mountIDs) do
- local name, spellId, _, _, _, _, _, _, faction, hideOnChar, isCollected = C_MountJournal.GetMountInfoByID(mountID)
- if (isCollected and hideOnChar ~= true) then
- if faction == nil then
- faction = playerFaction
- end
- if faction == playerFaction then
- needsCacheUpdate = needsCacheUpdate or (name == nil)
- local info = MountSpellIds[spellId]
- if info ~= nil then
- local creatureId = C_MountJournal.GetMountInfoExtraByID(mountID) or 0
- local e = {name = name, spellId = spellId, id = mountID, type = info, creatureId = creatureId}
- if bit.band(RIDING_GROUND, info) ~= 0 then
- e.ground = true
- table.insert(ground, e)
- end
- if bit.band(RIDING_FLYING, info) ~= 0 then
- e.flying = true
- table.insert(flying, e)
- end
- table.insert(allMounts, e)
- end
- end
- end
- end
- end
- self.OwnedGroundMounts = ground
- self.OwnedFlyingMounts = flying
- self.OwnedMounts = allMounts
- --self:UpdateCompanionIds()
- if needsCacheUpdate then
- C_Timer.After(1, function() self:UpdateMounts(true) end)
- end
- end
- function RandomMount.OnUpdate(self)
- end
- function RandomMount.UpdateCompanionIds(self)
- for i = 1, GetNumCompanions("MOUNT") do
- local _, name, spellId = GetCompanionInfo("MOUNT", i)
- local info = MountSpellIds[spellId]
- for k, v in pairs(self.FavoriteGroundMounts) do
- if v.spellId == spellId and v.id ~= i then
- print("Updating ground " .. name .. " from id " .. v.id .. " to " .. i)
- v.id = i
- break
- end
- end
- for k, v in pairs(self.FavoriteFlyingMounts) do
- if v.spellId == spellId and v.id ~= i then
- print("Updating flying " .. name .. " from id " .. v.id .. " to " .. i)
- v.id = i
- break
- end
- end
- end
- end
- function RandomMount.OnAddonLoaded(self, itemId, flag)
- --self.UpdateTicker = C_Timer.NewTicker(0.166, function() self:OnUpdate() end)
- self.FavoriteGroundMounts = RandomMountVarsPerChar.FavoriteGroundMounts or {}
- self.FavoriteFlyingMounts = RandomMountVarsPerChar.FavoriteFlyingMounts or {}
- self.OwnedGroundMounts = RandomMountVarsPerChar.OwnedGroundMounts or {}
- self.OwnedFlyingMounts = RandomMountVarsPerChar.OwnedFlyingMounts or {}
- self.OwnedMounts = RandomMountVarsPerChar.OwnedMounts or {}
- RandomMountVarsPerChar.FavoriteGroundMounts = RandomMount.FavoriteGroundMounts
- RandomMountVarsPerChar.FavoriteFlyingMounts = RandomMount.FavoriteFlyingMounts
- RandomMountOptionsFrame_SetTab(1)
- end
- function RandomMountFrame_OnEvent(self, event, ...)
- if event == "COMPANION_UPDATE" and select(1, ...) == "MOUNT" then
- RandomMount:UpdateMounts(false)
- elseif event == "COMPANION_LEARNED" then
- RandomMount:UpdateMounts(true)
- elseif event == "COMPANION_UNLEARNED" then
- RandomMount:UpdateMounts(true)
- elseif event == "PLAYER_ENTERING_WORLD" then
- RandomMount:UpdateMounts(select(1, ...))
- RandomMountOptionsFrame_SetTab(1)
- elseif event == "ADDON_LOADED" and select(1, ...) == AddonPrefix then
- RandomMount:OnAddonLoaded(...)
- end
- end
- function RandomMountOptionsFrame_Close()
- RandomMountVarsPerChar.FavoriteGroundMounts = RandomMount.FavoriteGroundMounts
- RandomMountVarsPerChar.FavoriteFlyingMounts = RandomMount.FavoriteFlyingMounts
- end
- function RandomMountOptionsFrame_CancelOrLoad()
- end
- function RandomMountOptionsFrame_OnLoad(self)
- self.name = AddonPrefix
- self.okay = function(self) RandomMountOptionsFrame_Close() end
- self.cancel = function(self) RandomMountOptionsFrame_CancelOrLoad() end
- if Settings and Settings.RegisterCanvasLayoutCategory then
- local category, layout = Settings.RegisterCanvasLayoutCategory(self, self.name)
- Settings.RegisterAddOnCategory(category)
- else
- InterfaceOptions_AddCategory(self)
- end
- RandomMountOptionsScrollBar:Show()
- RandomMountOptionsFrame_SetTab(1)
- RandomMountOptionsScrollBar_Update(nil)
- end
- local function IsMountInTable(t, e)
- for i = 1, #t do
- if t[i].spellId == e.spellId then
- return true
- end
- end
- return false
- end
- local MountFilter = ""
- -- Escape special characters for matching a literal string
- local function Literalize(str)
- return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", "%%%1")
- end
- -- Rewrite text pattern to be case-insensitive
- local function UnCase(c)
- return "[" .. strlower(c) .. strupper(c) .. "]"
- end
- local function ApplyFilter(tbl, text)
- if text == nil or #text < 3 then return tbl end
- local filtered = {}
- local pattern = Literalize(text):gsub("%a", UnCase)
- for i = 1, #tbl do
- local name = tbl[i].name
- local _, match = name:gsub(pattern, "%a")
- if match > 0 then
- table.insert(filtered, tbl[i])
- end
- end
- return filtered
- end
- function RandomMountOptionsScrollBar_Update(self)
- local allMountsTable = {}
- local favMountsTable = {}
- if RandomMount.SelectedTab == FLYING_TAB then
- allMountsTable = RandomMount.OwnedFlyingMounts
- favMountsTable = RandomMount.FavoriteFlyingMounts
- elseif RandomMount.SelectedTab == GROUND_TAB then
- allMountsTable = RandomMount.OwnedGroundMounts
- favMountsTable = RandomMount.FavoriteGroundMounts
- end
- allMountsTable = ApplyFilter(allMountsTable, MountFilter)
- local nMounts = #allMountsTable
- FauxScrollFrame_Update(RandomMountOptionsScrollBar, nMounts, 15, 16)
- for line = 1, 15 do
- local idx = line + FauxScrollFrame_GetOffset(RandomMountOptionsScrollBar)
- local btn = _G["RandomMountOptionsEntry"..line]
- if idx <= #allMountsTable then
- btn:Enable()
- local item = allMountsTable[idx]
- btn:SetText(item.name)
- btn:Show()
- btn._RandomMountData = item
- btn.CheckButton._RandomMountData = item
- btn.CheckButton:SetChecked(IsMountInTable(favMountsTable, item))
- else
- btn:Disable()
- btn:Hide()
- end
- end
- end
- function RandomMountOptionsEntry_OnClick(self)
- local item = self._RandomMountData
- if item == nil then
- return
- end
- local func
- if self:GetChecked() then
- func = table.insert
- else
- func = function(t, e)
- local i = 1
- while i <= #t do
- if t[i].spellId == e.spellId then
- table.remove(t, i)
- else
- i = i + 1
- end
- end
- end
- end
- if item.flying and RandomMount.SelectedTab == FLYING_TAB then
- func(RandomMount.FavoriteFlyingMounts, item)
- end
- if item.ground and RandomMount.SelectedTab == GROUND_TAB then
- func(RandomMount.FavoriteGroundMounts, item)
- end
- end
- function RandomMountOptionsFrame_SetTab(tab)
- RandomMount.SelectedTab = tab
- for i = 1, 2 do
- if i == tab then
- PanelTemplates_SelectTab(_G["RandomMountOptionsFrameTab"..i]);
- else
- PanelTemplates_DeselectTab(_G["RandomMountOptionsFrameTab"..i]);
- end
- end
- RandomMountOptionsScrollBar_Update(RandomMountOptionsScrollBar)
- end
- function RandomMountOptionsFrame_Filter(self, isUserInput)
- if not isUserInput then return end
- local text = self:GetText()
- MountFilter = text
- RandomMountOptionsScrollBar_Update(nil)
- end
- function RandomMount_UpdateModel(mountData)
- RandomMountOptionsFrame.ModelScene:Hide();
- RandomMountOptionsEntryModelFrame:Hide();
- if InterfaceID < 30403 then
- RandomMountOptionsEntryModelFrame:Show();
- GameTooltip:SetOwner(RandomMountOptionsEntryModelFrame, "ANCHOR_BOTTOM", 0, -5)
- GameTooltip:AddLine(mountData.name);
- GameTooltip:AddLine(GetSpellDescription(mountData.spellId), 1, 1, 1, 1, true);
- RandomMountOptionsEntryModelFrame:SetCreature(mountData.creatureId)
- else
- RandomMountOptionsFrame.ModelScene:Show();
- local needsFanfare = C_MountJournal.NeedsFanfare(mountData.id);
- local creatureDisplayID, descriptionText, sourceText, isSelfMount, _, modelSceneID, animID, spellVisualKitID, disablePlayerMountPreview = C_MountJournal.GetMountInfoExtraByID(mountData.id);
- local modelScene = RandomMountOptionsFrame.ModelScene;
- GameTooltip:SetOwner(modelScene, "ANCHOR_BOTTOM", 0, -5);
- GameTooltip:AddLine(mountData.name);
- GameTooltip:AddLine(GetSpellDescription(mountData.spellId), 1, 1, 1, 1, true);
- modelScene:TransitionToModelSceneID(modelSceneID, CAMERA_TRANSITION_TYPE_IMMEDIATE, CAMERA_MODIFICATION_TYPE_MAINTAIN, true);
- modelScene:PrepareForFanfare(needsFanfare);
- local mountActor = modelScene:GetActorByTag("unwrapped");
- if mountActor then
- mountActor:SetModelByCreatureDisplayID(creatureDisplayID, true);
- -- mount self idle animation
- if (isSelfMount) then
- mountActor:SetAnimationBlendOperation(Enum.ModelBlendOperation.None);
- mountActor:SetAnimation(618); -- MountSelfIdle
- else
- mountActor:SetAnimationBlendOperation(Enum.ModelBlendOperation.Anim);
- mountActor:SetAnimation(0);
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement