Advertisement
Guest User

Untitled

a guest
May 20th, 2024
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.64 KB | None | 0 0
  1. --[[
  2.  
  3.    CHANGELOG:
  4.    VERSION 0.0.15:
  5.    -- Update for 3.4.3/PTR
  6.  
  7.    VERSION 0.0.14:
  8.    -- Added an optional argument to /randommount <flying|ground> to manually select the mount table to use
  9.       `/randommount flying` uses the flying mount table
  10.       `/randommount ground` uses the ground mount table
  11.    -- Added various missing mounts:
  12.         Blazing Hippogryph
  13.         Blue Mechanostrider
  14.         Brewfest Ram
  15.         Brewfest Riding Kodo
  16.         Emerald Raptor
  17.         Great Elite Elekk
  18.         Ivory Raptor
  19.         Magic Rooster
  20.         Merciless Nether Drake
  21.         Striped Frostsaber
  22.         Swift Mooncloth Carpet
  23.         Swift Shadoweave Carpet
  24.         Swift Spellfire Carpet
  25.         Swift Zhevra
  26.         Wooly White Rhino
  27.  
  28.    VERSION 0.0.13:
  29.    -- Fix settings panel on 3.4.2/PTR
  30.  
  31.    VERSION 0.0.12:
  32.    -- Added missing Alliance and Horde Paladin mounts
  33.    -- Added missing Warlock mounts
  34.  
  35.    VERSION 0.0.11:
  36.    -- Fixed internal cache being stale on first login and should now correctly mount
  37.       on first login.
  38.  
  39.    VERSION 0.0.10:
  40.    -- First release
  41.    -- Added Festering Emerald Drake store mount
  42.  
  43.    VERSION 0.0.9:
  44.    -- Fix Reawakened Phase-Hunter store mount to correctly be a ground mount and not a flying mount.
  45.  
  46.    VERSION 0.0.8:
  47.    -- Fixed dual-purpose mounts to be favorable separately
  48.  
  49.    VERSION 0.0.7:
  50.    -- Fixed bug when game version updates or WoW Cache folder is deleted causing RandomMount to
  51.       create an invalid mount cache and would mount the wrong mounts.
  52.    -- Added "Search..." indicator to search editbox in addon interface
  53.  
  54.    VERSION 0.0.6:
  55.    -- Fixed trying to mount in "IsFlyableArea" zones when player doesn't have flying learned.
  56.    -- Fixed trying to use a flying mount in Northrend when player doesn't know Cold Weather Flying
  57.    -- Fixed correct mount selection in Dalaran main city and Krasus' Landing
  58.  
  59.    VERSION 0.0.5:
  60.    -- Added search filter to mount list that filters by name
  61.  
  62.    VERSION 0.0.4:
  63.    -- Added the Reawakened Phase-Hunter and Kalu'ak Whalebone Glider store mounts.
  64.  
  65.    VERSION 0.0.3:
  66.    -- Fixed excessive scrolling in options
  67.  
  68.    VERSION 0.0.2:
  69.    -- Fixed interface options bug where list of mounts did not immediately appear.
  70.  
  71.    VERSION 0.0.1:
  72.    -- Alpha release
  73.  
  74. --]]
  75. local AddonPrefix = "RandomMount"
  76. local InterfaceID = select(4, GetBuildInfo())
  77.  
  78. RandomMount = {}
  79. RandomMountVars = RandomMountVars or {}
  80. RandomMountVarsPerChar = RandomMountVarsPerChar or {}
  81.  
  82. local RIDING_GROUND = 1
  83. local RIDING_FLYING = 2
  84. local RIDING_BOTH = 3
  85.  
  86. local MountSpellIds = {
  87.    -- Store Mounts
  88.    [348459] = RIDING_GROUND, -- Reawakened Phase-Hunter
  89.    [372677] = RIDING_BOTH, -- Kalu'ak Whalebone Glider
  90.    [394209] = RIDING_BOTH, -- Festering Emerald Drake
  91.  
  92.    -- Paladin
  93.    [34767] = RIDING_GROUND,  --  Summon Charger (horde)
  94.    [34769] = RIDING_GROUND,  --  Summon Warhorse (horde)
  95.    [13819] = RIDING_GROUND,  --  Warhorse (alliance)
  96.    [23214] = RIDING_GROUND,  --  Charger (alliance)
  97.  
  98.    -- Warlock
  99.    [5784] = RIDING_GROUND,  --  Felsteed
  100.    [23161] = RIDING_GROUND,  -- Dreadsteed
  101.  
  102.    [71342] = RIDING_BOTH,  --  X-45 Heartbreaker
  103.    [75614] = RIDING_BOTH,  --  Celestial Steed
  104.    [72286] = RIDING_BOTH,  --  Invincible's Reins
  105.    [48025] = RIDING_BOTH,  --  Headless Horseman's Mount
  106.  
  107.    [60025] = RIDING_FLYING,  --  Albino Drake
  108.    [63844] = RIDING_FLYING,  --  Argent Hippogryph
  109.    [61230] = RIDING_FLYING,  --  Armored Blue Wind Rider
  110.    [61229] = RIDING_FLYING,  --  Armored Snowy Gryphon
  111.    [40192] = RIDING_FLYING,  --  Ashes of Al'ar
  112.    [59567] = RIDING_FLYING,  --  Azure Drake
  113.    [41514] = RIDING_FLYING,  --  Azure Netherwing Drake
  114.    [59650] = RIDING_FLYING,  --  Black Drake
  115.    [59976] = RIDING_FLYING,  --  Black Proto-Drake
  116.    [387320] = RIDING_FLYING,  --  Blazing Hippogryph
  117.    [74856] = RIDING_FLYING,  --  Blazing Hippogryph
  118.    [72808] = RIDING_FLYING,  --  Bloodbathed Frostbrood Vanquisher
  119.    [61996] = RIDING_FLYING,  --  Blue Dragonhawk
  120.    [59568] = RIDING_FLYING,  --  Blue Drake
  121.    [59996] = RIDING_FLYING,  --  Blue Proto-Drake
  122.    [39803] = RIDING_FLYING,  --  Blue Riding Nether Ray
  123.    [32244] = RIDING_FLYING,  --  Blue Wind Rider
  124.    [59569] = RIDING_FLYING,  --  Bronze Drake
  125.    [58615] = RIDING_FLYING,  --  Brutal Nether Drake
  126.    [43927] = RIDING_FLYING,  --  Cenarion War Hippogryph
  127.    [41515] = RIDING_FLYING,  --  Cobalt Netherwing Drake
  128.    [64927] = RIDING_FLYING,  --  Deadly Gladiator's Frost Wyrm
  129.    [32239] = RIDING_FLYING,  --  Ebon Gryphon
  130.    [61451] = RIDING_FLYING,  --  Flying Carpet
  131.    [44153] = RIDING_FLYING,  --  Flying Machine
  132.    [75596] = RIDING_FLYING,  --  Frosty Flying Carpet
  133.    [65439] = RIDING_FLYING,  --  Furious Gladiator's Frost Wyrm
  134.    [32235] = RIDING_FLYING,  --  Golden Gryphon
  135.    [61294] = RIDING_FLYING,  --  Green Proto-Drake
  136.    [39798] = RIDING_FLYING,  --  Green Riding Nether Ray
  137.    [32245] = RIDING_FLYING,  --  Green Wind Rider
  138.    [72807] = RIDING_FLYING,  --  Icebound Frostbrood Vanquisher
  139.    [63956] = RIDING_FLYING,  --  Ironbound Proto-Drake
  140.    [61309] = RIDING_FLYING,  --  Magnificent Flying Carpet
  141.    [44317] = RIDING_FLYING,  --  Merciless Nether Drake
  142.    [44744] = RIDING_FLYING,  --  Merciless Nether Drake
  143.    [63796] = RIDING_FLYING,  --  Mimiron's Head
  144.    [69395] = RIDING_FLYING,  --  Onyxian Drake
  145.    [41513] = RIDING_FLYING,  --  Onyx Netherwing Drake
  146.    [32345] = RIDING_FLYING,  --  Peep the Phoenix Mount
  147.    [60021] = RIDING_FLYING,  --  Plagued Proto-Drake
  148.    [41516] = RIDING_FLYING,  --  Purple Netherwing Drake
  149.    [39801] = RIDING_FLYING,  --  Purple Riding Nether Ray
  150.    [61997] = RIDING_FLYING,  --  Red Dragonhawk
  151.    [59570] = RIDING_FLYING,  --  Red Drake
  152.    [59961] = RIDING_FLYING,  --  Red Proto-Drake
  153.    [39800] = RIDING_FLYING,  --  Red Riding Nether Ray
  154.    [67336] = RIDING_FLYING,  --  Relentless Gladiator's Frost Wyrm
  155.    [63963] = RIDING_FLYING,  --  Rusted Proto-Drake
  156.    [66087] = RIDING_FLYING,  --  Silver Covenant Hippogryph
  157.    [39802] = RIDING_FLYING,  --  Silver Riding Nether Ray
  158.    [32240] = RIDING_FLYING,  --  Snowy Gryphon
  159.    [66088] = RIDING_FLYING,  --  Sunreaver Dragonhawk
  160.    [32242] = RIDING_FLYING,  --  Swift Blue Gryphon
  161.    [32290] = RIDING_FLYING,  --  Swift Green Gryphon
  162.    [32295] = RIDING_FLYING,  --  Swift Green Wind Rider
  163.    [61442] = RIDING_FLYING,  --  Swift Mooncloth Carpet
  164.    [37015] = RIDING_FLYING,  --  Swift Nether Drake
  165.    [32292] = RIDING_FLYING,  --  Swift Purple Gryphon
  166.    [32297] = RIDING_FLYING,  --  Swift Purple Wind Rider
  167.    [32289] = RIDING_FLYING,  --  Swift Red Gryphon
  168.    [32246] = RIDING_FLYING,  --  Swift Red Wind Rider
  169.    [61444] = RIDING_FLYING,  --  Swift Shadoweave Carpet
  170.    [55164] = RIDING_FLYING,  --  Swift Spectral Gryphon
  171.    [61446] = RIDING_FLYING,  --  Swift Spellfire Carpet
  172.    [32296] = RIDING_FLYING,  --  Swift Yellow Wind Rider
  173.    [32243] = RIDING_FLYING,  --  Tawny Wind Rider
  174.    [60002] = RIDING_FLYING,  --  Time-Lost Proto-Drake
  175.    [44151] = RIDING_FLYING,  --  Turbo-Charged Flying Machine
  176.    [59571] = RIDING_FLYING,  --  Twilight Drake
  177.    [49193] = RIDING_FLYING,  --  Vengeful Nether Drake
  178.    [41517] = RIDING_FLYING,  --  Veridian Netherwing Drake
  179.    [41518] = RIDING_FLYING,  --  Violet Netherwing Drake
  180.    [60024] = RIDING_FLYING,  --  Violet Proto-Drake
  181.    [54729] = RIDING_FLYING,  --  Winged Steed of the Ebon Blade
  182.    [71810] = RIDING_FLYING,  --  Wrathful Gladiator's Frost Wyrm
  183.    [46197] = RIDING_FLYING,  --  X-51 Nether-Rocket
  184.    [46199] = RIDING_FLYING,  --  X-51 Nether-Rocket X-TREME
  185.    [75973] = RIDING_FLYING,  --  X-53 Touring Rocket
  186.  
  187.    [48778] = RIDING_GROUND,  --  Acherus Deathcharger
  188.    [43688] = RIDING_GROUND,  --  Amani War Bear
  189.    [16056] = RIDING_GROUND,  --  Ancient Frostsaber
  190.    [16081] = RIDING_GROUND,  --  Arctic Wolf
  191.    [66906] = RIDING_GROUND,  --  Argent Charger
  192.    [66907] = RIDING_GROUND,  --  Argent Warhorse
  193.    [67466] = RIDING_GROUND,  --  Argent Warhorse
  194.    [60114] = RIDING_GROUND,  --  Armored Brown Bear
  195.    [60116] = RIDING_GROUND,  --  Armored Brown Bear
  196.    [51412] = RIDING_GROUND,  --  Big Battle Bear
  197.    [58983] = RIDING_GROUND,  --  Big Blizzard Bear
  198.    [22719] = RIDING_GROUND,  --  Black Battlestrider
  199.    [35022] = RIDING_GROUND,  --  Black Hawkstrider
  200.    [16055] = RIDING_GROUND,  --  Black Nightsaber
  201.    [25863] = RIDING_GROUND,  --  Black Qiraji Battle Tank
  202.    [26655] = RIDING_GROUND,  --  Black Qiraji Battle Tank
  203.    [26656] = RIDING_GROUND,  --  Black Qiraji Battle Tank
  204.    [17461] = RIDING_GROUND,  --  Black Ram
  205.    [64977] = RIDING_GROUND,  --  Black Skeletal Horse
  206.    [470]   = RIDING_GROUND,  --  Black Stallion
  207.    [60118] = RIDING_GROUND,  --  Black War Bear
  208.    [60119] = RIDING_GROUND,  --  Black War Bear
  209.    [48027] = RIDING_GROUND,  --  Black War Elekk
  210.    [22718] = RIDING_GROUND,  --  Black War Kodo
  211.    [59785] = RIDING_GROUND,  --  Black War Mammoth
  212.    [59788] = RIDING_GROUND,  --  Black War Mammoth
  213.    [22720] = RIDING_GROUND,  --  Black War Ram
  214.    [22721] = RIDING_GROUND,  --  Black War Raptor
  215.    [22717] = RIDING_GROUND,  --  Black War Steed
  216.    [22723] = RIDING_GROUND,  --  Black War Tiger
  217.    [22724] = RIDING_GROUND,  --  Black War Wolf
  218.    [64658] = RIDING_GROUND,  --  Black Wolf
  219.    [35020] = RIDING_GROUND,  --  Blue Hawkstrider
  220.    [10969] = RIDING_GROUND,  --  Blue Mechanostrider
  221.    [33630] = RIDING_GROUND,  --  Blue Mechanostrider
  222.    [25953] = RIDING_GROUND,  --  Blue Qiraji Battle Tank
  223.    [17463] = RIDING_GROUND,  --  Blue Skeletal Horse
  224.    [64656] = RIDING_GROUND,  --  Blue Skeletal Warhorse
  225.    [50869] = RIDING_GROUND,  --  Brewfest Kodo
  226.    [43899] = RIDING_GROUND,  --  Brewfest Ram
  227.    [50870] = RIDING_GROUND,  --  Brewfest Ram
  228.    [49378] = RIDING_GROUND,  --  Brewfest Riding Kodo
  229.    [34406] = RIDING_GROUND,  --  Brown Elekk
  230.    [458]   = RIDING_GROUND,  --  Brown Horse
  231.    [18990] = RIDING_GROUND,  --  Brown Kodo
  232.    [6899]  = RIDING_GROUND,  --  Brown Ram
  233.    [17464] = RIDING_GROUND,  --  Brown Skeletal Horse
  234.    [6654]  = RIDING_GROUND,  --  Brown Wolf
  235.    [6648]  = RIDING_GROUND,  --  Chestnut Mare
  236.    [39315] = RIDING_GROUND,  --  Cobalt Riding Talbuk
  237.    [34896] = RIDING_GROUND,  --  Cobalt War Talbuk
  238.    [73313] = RIDING_GROUND,  --  Crimson Deathcharger
  239.    [68188] = RIDING_GROUND,  --  Crusader's Black Warhorse
  240.    [68187] = RIDING_GROUND,  --  Crusader's White Warhorse
  241.    [39316] = RIDING_GROUND,  --  Dark Riding Talbuk
  242.    [63635] = RIDING_GROUND,  --  Darkspear Raptor
  243.    [34790] = RIDING_GROUND,  --  Dark War Talbuk
  244.    [63637] = RIDING_GROUND,  --  Darnassian Nightsaber
  245.    [6653]  = RIDING_GROUND,  --  Dire Wolf
  246.    [8395]  = RIDING_GROUND,  --  Emerald Raptor
  247.    [63639] = RIDING_GROUND,  --  Exodar Elekk
  248.    [36702] = RIDING_GROUND,  --  Fiery Warhorse
  249.    [63643] = RIDING_GROUND,  --  Forsaken Warhorse
  250.    [17460] = RIDING_GROUND,  --  Frost Ram
  251.    [23509] = RIDING_GROUND,  --  Frostwolf Howler
  252.    [63638] = RIDING_GROUND,  --  Gnomeregan Mechanostrider
  253.    [61465] = RIDING_GROUND,  --  Grand Black War Mammoth
  254.    [61467] = RIDING_GROUND,  --  Grand Black War Mammoth
  255.    [61469] = RIDING_GROUND,  --  Grand Ice Mammoth
  256.    [61470] = RIDING_GROUND,  --  Grand Ice Mammoth
  257.    [35710] = RIDING_GROUND,  --  Gray Elekk
  258.    [18989] = RIDING_GROUND,  --  Gray Kodo
  259.    [6777]  = RIDING_GROUND,  --  Gray Ram
  260.    [35713] = RIDING_GROUND,  --  Great Blue Elekk
  261.    [49379] = RIDING_GROUND,  --  Great Brewfest Kodo
  262.    [23249] = RIDING_GROUND,  --  Great Brown Kodo
  263.    [34407] = RIDING_GROUND,  --  Great Elite Elekk
  264.    [65641] = RIDING_GROUND,  --  Great Golden Kodo
  265.    [23248] = RIDING_GROUND,  --  Great Gray Kodo
  266.    [35712] = RIDING_GROUND,  --  Great Green Elekk
  267.    [35714] = RIDING_GROUND,  --  Great Purple Elekk
  268.    [65637] = RIDING_GROUND,  --  Great Red Elekk
  269.    [23247] = RIDING_GROUND,  --  Great White Kodo
  270.    [18991] = RIDING_GROUND,  --  Green Kodo
  271.    [17453] = RIDING_GROUND,  --  Green Mechanostrider
  272.    [26056] = RIDING_GROUND,  --  Green Qiraji Battle Tank
  273.    [17465] = RIDING_GROUND,  --  Green Skeletal Warhorse
  274.    [59797] = RIDING_GROUND,  --  Ice Mammoth
  275.    [59799] = RIDING_GROUND,  --  Ice Mammoth
  276.    [17459] = RIDING_GROUND,  --  Icy Blue Mechanostrider Mod-A
  277.    [63636] = RIDING_GROUND,  --  Ironforge Ram
  278.    [10795] = RIDING_GROUND,  --  Ivory Raptor
  279.    [17450] = RIDING_GROUND,  --  Ivory Raptor
  280.    [65917] = RIDING_GROUND,  --  Magic Rooster
  281.    [66122] = RIDING_GROUND,  --  Magic Rooster
  282.    [66123] = RIDING_GROUND,  --  Magic Rooster
  283.    [66124] = RIDING_GROUND,  --  Magic Rooster
  284.    [55531] = RIDING_GROUND,  --  Mechano- Hog
  285.    [60424] = RIDING_GROUND,  --  Mekgineer's Chopper
  286.    [16084] = RIDING_GROUND,  --  Mottled Red Raptor
  287.    [66846] = RIDING_GROUND,  --  Ochre Skeletal Warhorse
  288.    [63640] = RIDING_GROUND,  --  Orgrimmar Wolf
  289.    [16082] = RIDING_GROUND,  --  Palomino
  290.    [472]   = RIDING_GROUND,  --  Pinto
  291.    [35711] = RIDING_GROUND,  --  Purple Elekk
  292.    [35018] = RIDING_GROUND,  --  Purple Hawkstrider
  293.    [23246] = RIDING_GROUND,  --  Purple Skeletal Warhorse
  294.    [66090] = RIDING_GROUND,  --  Quel'dorei Steed
  295.    [41252] = RIDING_GROUND,  --  Raven Lord
  296.    [34795] = RIDING_GROUND,  --  Red Hawkstrider
  297.    [10873] = RIDING_GROUND,  --  Red Mechanostrider
  298.    [26054] = RIDING_GROUND,  --  Red Qiraji Battle Tank
  299.    [17462] = RIDING_GROUND,  --  Red Skeletal Horse
  300.    [22722] = RIDING_GROUND,  --  Red Skeletal Warhorse
  301.    [16080] = RIDING_GROUND,  --  Red Wolf
  302.    [30174] = RIDING_GROUND,  --  Riding Turtle
  303.    [17481] = RIDING_GROUND,  --  Rivendare's Deathcharger
  304.    [64731] = RIDING_GROUND,  --  Sea Turtle
  305.    [63642] = RIDING_GROUND,  --  Silvermoon Hawkstrider
  306.    [39317] = RIDING_GROUND,  --  Silver Riding Talbuk
  307.    [34898] = RIDING_GROUND,  --  Silver War Talbuk
  308.    [42776] = RIDING_GROUND,  --  Spectral Tiger
  309.    [10789] = RIDING_GROUND,  --  Spotted Frostsaber
  310.    [23510] = RIDING_GROUND,  --  Stormpike Battle Charger
  311.    [63232] = RIDING_GROUND,  --  Stormwind Steed
  312.    [66847] = RIDING_GROUND,  --  Striped Dawnsaber
  313.    [8394]  = RIDING_GROUND,  --  Striped Frostsaber
  314.    [10793] = RIDING_GROUND,  --  Striped Nightsaber
  315.    [66091] = RIDING_GROUND,  --  Sunreaver Hawkstrider
  316.    [68057] = RIDING_GROUND,  --  Swift Alliance Steed
  317.    [23241] = RIDING_GROUND,  --  Swift Blue Raptor
  318.    [43900] = RIDING_GROUND,  --  Swift Brewfest Ram
  319.    [23238] = RIDING_GROUND,  --  Swift Brown Ram
  320.    [23229] = RIDING_GROUND,  --  Swift Brown Steed
  321.    [23250] = RIDING_GROUND,  --  Swift Brown Wolf
  322.    [65646] = RIDING_GROUND,  --  Swift Burgundy Wolf
  323.    [23221] = RIDING_GROUND,  --  Swift Frostsaber
  324.    [23239] = RIDING_GROUND,  --  Swift Gray Ram
  325.    [65640] = RIDING_GROUND,  --  Swift Gray Steed
  326.    [23252] = RIDING_GROUND,  --  Swift Gray Wolf
  327.    [35025] = RIDING_GROUND,  --  Swift Green Hawkstrider
  328.    [23225] = RIDING_GROUND,  --  Swift Green Mechanostrider
  329.    [68056] = RIDING_GROUND,  --  Swift Horde Wolf
  330.    [23219] = RIDING_GROUND,  --  Swift Mistsaber
  331.    [65638] = RIDING_GROUND,  --  Swift Moonsaber
  332.    [23242] = RIDING_GROUND,  --  Swift Olive Raptor
  333.    [23243] = RIDING_GROUND,  --  Swift Orange Raptor
  334.    [23227] = RIDING_GROUND,  --  Swift Palomino
  335.    [33660] = RIDING_GROUND,  --  Swift Pink Hawkstrider
  336.    [35027] = RIDING_GROUND,  --  Swift Purple Hawkstrider
  337.    [65644] = RIDING_GROUND,  --  Swift Purple Raptor
  338.    [24242] = RIDING_GROUND,  --  Swift Razzashi Raptor
  339.    [65639] = RIDING_GROUND,  --  Swift Red Hawkstrider
  340.    [42777] = RIDING_GROUND,  --  Swift Spectral Tiger
  341.    [23338] = RIDING_GROUND,  --  Swift Stormsaber
  342.    [23251] = RIDING_GROUND,  --  Swift Timber Wolf
  343.    [65643] = RIDING_GROUND,  --  Swift Violet Ram
  344.    [35028] = RIDING_GROUND,  --  Swift Warstrider
  345.    [46628] = RIDING_GROUND,  --  Swift White Hawkstrider
  346.    [23223] = RIDING_GROUND,  --  Swift White Mechanostrider
  347.    [23240] = RIDING_GROUND,  --  Swift White Ram
  348.    [23228] = RIDING_GROUND,  --  Swift White Steed
  349.    [23222] = RIDING_GROUND,  --  Swift Yellow Mechanostrider
  350.    [48954] = RIDING_GROUND,  --  Swift Zhevra
  351.    [49322] = RIDING_GROUND,  --  Swift Zhevra
  352.    [24252] = RIDING_GROUND,  --  Swift Zulian Tiger
  353.    [39318] = RIDING_GROUND,  --  Tan Riding Talbuk
  354.    [34899] = RIDING_GROUND,  --  Tan War Talbuk
  355.    [18992] = RIDING_GROUND,  --  Teal Kodo
  356.    [63641] = RIDING_GROUND,  --  Thunder Bluff Kodo
  357.    [580]   = RIDING_GROUND,  --  Timber Wolf
  358.    [61425] = RIDING_GROUND,  --  Traveler's Tundra Mammoth
  359.    [61447] = RIDING_GROUND,  --  Traveler's Tundra Mammoth
  360.    [65642] = RIDING_GROUND,  --  Turbostrider
  361.    [10796] = RIDING_GROUND,  --  Turquoise Raptor
  362.    [17454] = RIDING_GROUND,  --  Unpainted Mechanostrider
  363.    [64659] = RIDING_GROUND,  --  Venomhide Ravasaur
  364.    [10799] = RIDING_GROUND,  --  Violet Raptor
  365.    [64657] = RIDING_GROUND,  --  White Kodo
  366.    [15779] = RIDING_GROUND,  --  White Mechanostrider Mod B
  367.    [54753] = RIDING_GROUND,  --  White Polar Bear
  368.    [6898]  = RIDING_GROUND,  --  White Ram
  369.    [39319] = RIDING_GROUND,  --  White Riding Talbuk
  370.    [65645] = RIDING_GROUND,  --  White Skeletal Warhorse
  371.    [16083] = RIDING_GROUND,  --  White Stallion
  372.    [34897] = RIDING_GROUND,  --  White War Talbuk
  373.    [17229] = RIDING_GROUND,  --  Winterspring Frostsaber
  374.    [59791] = RIDING_GROUND,  --  Wooly Mammoth
  375.    [59793] = RIDING_GROUND,  --  Wooly Mammoth
  376.    [387321] = RIDING_GROUND,  --  Wooly White Rhino
  377.    [74918] = RIDING_GROUND,  --  Wooly White Rhino
  378.    [26055] = RIDING_GROUND,  --  Yellow Qiraji Battle Tank
  379. }
  380.  
  381. RandomMount.OwnedMounts = {}
  382. RandomMount.OwnedGroundMounts = {}
  383. RandomMount.OwnedFlyingMounts = {}
  384. RandomMount.FavoriteGroundMounts = {}
  385. RandomMount.FavoriteFlyingMounts = {}
  386. local FLYING_TAB = 1
  387. local GROUND_TAB = 2
  388. RandomMount.SelectedTab = FLYING_TAB
  389.  
  390. local function PlayerKnowsFlying()
  391.    -- Doesn't work for some reason?
  392.    --return IsSpellKnown(34091, false) or IsSpellKnown(34090, false)
  393.  
  394.    for i = 1, GetNumSkillLines() do
  395.       local name, _, _, rank = GetSkillLineInfo(i)
  396.       if name == "Riding" then
  397.          return rank >= 225
  398.       end
  399.    end
  400.    return false
  401. end
  402.  
  403. local function IsTruelyFlyableArea()
  404.    if not IsFlyableArea() then
  405.       return false
  406.    end
  407.    
  408.    local _, _, _, _, _, _, _, instanceMapId = GetInstanceInfo()
  409.    if instanceMapId ~= 571 -- Northrend
  410.       and instanceMapId ~= 530 -- Outland
  411.    then
  412.       return true -- Cata !
  413.    end
  414.  
  415.    local mapId = C_Map.GetBestMapForUnit("player")
  416.    local playerKnowsColdWeatherFlying = IsSpellKnown(54197, false)
  417.  
  418.    if mapId == 125 then -- Dalaran - Dalaran City
  419.       if GetSubZoneText() == "Krasus' Landing" then
  420.          return playerKnowsColdWeatherFlying
  421.       end
  422.       return false
  423.    end
  424.    if mapId == 126 then -- Dalaran - The Underbelly
  425.       return false
  426.    end
  427.  
  428.    if instanceMapId == 530 then -- Outland
  429.       return PlayerKnowsFlying()
  430.    end
  431.  
  432.    if instanceMapId == 571 then -- Northrend
  433.       return playerKnowsColdWeatherFlying
  434.    end
  435.  
  436.    return true -- Cata!
  437. end
  438.  
  439. function RandomMount_SummonMount(companion)
  440.    print("Summoning Mount: " .. companion.name .. " " .. companion.id)
  441.    C_MountJournal.SummonByID(companion.id)
  442. end
  443.  
  444. SLASH_RANDOMMOUNT1 = "/randommount";
  445. SlashCmdList["RANDOMMOUNT"] = function(msg)
  446.    -- select a random mount and use it.
  447.    if IsMounted() then
  448.       Dismount()
  449.       return
  450.    end
  451.    -- RandomMount:UpdateCompanionIds()
  452.  
  453.    local tbl = {}
  454.    if msg == "flying" then
  455.       tbl = RandomMount.FavoriteFlyingMounts
  456.    elseif msg == "ground" then
  457.       tbl = RandomMount.FavoriteGroundMounts
  458.    end
  459.  
  460.    if #tbl == 0 then
  461.     if IsTruelyFlyableArea() then
  462.         tbl = RandomMount.FavoriteFlyingMounts
  463.     else
  464.         tbl = RandomMount.FavoriteGroundMounts
  465.     end
  466.    end
  467.  
  468.    if #tbl ~= 0 then
  469.       local companion = tbl[math.random(#tbl)]
  470.       RandomMount_SummonMount(companion)
  471.    else
  472.       print("RandomMount: No usable mounts selected.")
  473.    end
  474. end
  475.  
  476. SLASH_RANDOMPET1 = "/randompet";
  477. SlashCmdList["RANDOMPET"] = function(msg)
  478.    CallCompanion("CRITTER", math.random(GetNumCompanions("CRITTER")))
  479. end
  480.  
  481. function RandomMountFrame_OnLoad(self)
  482.    RandomMount.frame = self
  483.    self:RegisterEvent("ADDON_LOADED")
  484.    self:RegisterEvent("PLAYER_ENTERING_WORLD")
  485.    self:RegisterEvent("COMPANION_LEARNED")
  486.    self:RegisterEvent("COMPANION_UNLEARNED")
  487.    self:RegisterEvent("COMPANION_UPDATE")
  488. end
  489.  
  490. function RandomMount.UpdateMounts(self, force)
  491.    local numMounts = GetNumCompanions("MOUNT")
  492.    if not force and #self.OwnedMounts == numMounts then
  493.       return
  494.    end
  495.    local ground = {}
  496.    local flying = {}
  497.    local allMounts = {}
  498.    local needsCacheUpdate = false
  499.  
  500.    if InterfaceID < 30403 then
  501.       for i = 1, numMounts do
  502.          local creatureId, name, spellId = GetCompanionInfo("MOUNT", i)
  503.          needsCacheUpdate = needsCacheUpdate or (name == nil)
  504.          local info = MountSpellIds[spellId]
  505.          if info ~= nil then
  506.             local e = {name = name, spellId = spellId, id = i, type = info, creatureId = creatureId}
  507.             if bit.band(RIDING_GROUND, info) ~= 0 then
  508.                e.ground = true
  509.                table.insert(ground, e)
  510.             end
  511.             if bit.band(RIDING_FLYING, info) ~= 0 then
  512.                e.flying = true
  513.                table.insert(flying, e)
  514.             end
  515.             table.insert(allMounts, e)
  516.          end
  517.       end
  518.    else -- 3.4.3 PTR
  519.       local playerFaction = 0
  520.       if UnitFactionGroup("player") == "Alliance" then
  521.          playerFaction = 1
  522.       end
  523.       local mountIDs = C_MountJournal.GetMountIDs()
  524.       for i, mountID in ipairs(mountIDs) do
  525.          local name, spellId, _, _, _, _, _, _, faction, hideOnChar, isCollected = C_MountJournal.GetMountInfoByID(mountID)
  526.          if (isCollected and hideOnChar ~= true) then
  527.             if faction == nil then
  528.                faction = playerFaction
  529.             end
  530.             if faction == playerFaction then
  531.                needsCacheUpdate = needsCacheUpdate or (name == nil)
  532.                local info = MountSpellIds[spellId]
  533.                if info ~= nil then
  534.                   local creatureId = C_MountJournal.GetMountInfoExtraByID(mountID) or 0
  535.                   local e = {name = name, spellId = spellId, id = mountID, type = info, creatureId = creatureId}
  536.                   if bit.band(RIDING_GROUND, info) ~= 0 then
  537.                      e.ground = true
  538.                      table.insert(ground, e)
  539.                   end
  540.                   if bit.band(RIDING_FLYING, info) ~= 0 then
  541.                      e.flying = true
  542.                      table.insert(flying, e)
  543.                   end
  544.                   table.insert(allMounts, e)
  545.                end
  546.             end
  547.          end
  548.       end
  549.    end
  550.  
  551.    self.OwnedGroundMounts = ground
  552.    self.OwnedFlyingMounts = flying
  553.    self.OwnedMounts = allMounts
  554.    --self:UpdateCompanionIds()
  555.  
  556.    if needsCacheUpdate then
  557.       C_Timer.After(1, function() self:UpdateMounts(true) end)
  558.    end
  559. end
  560.  
  561. function RandomMount.OnUpdate(self)
  562. end
  563.  
  564. function RandomMount.UpdateCompanionIds(self)
  565.    for i = 1, GetNumCompanions("MOUNT") do
  566.       local _, name, spellId = GetCompanionInfo("MOUNT", i)
  567.       local info = MountSpellIds[spellId]
  568.       for k, v in pairs(self.FavoriteGroundMounts) do
  569.          if v.spellId == spellId and v.id ~= i then
  570.             print("Updating ground " .. name .. " from id " .. v.id .. " to " .. i)
  571.             v.id = i
  572.             break
  573.          end
  574.       end
  575.       for k, v in pairs(self.FavoriteFlyingMounts) do
  576.          if v.spellId == spellId and v.id ~= i then
  577.             print("Updating flying " .. name .. " from id " .. v.id .. " to " .. i)
  578.             v.id = i
  579.             break
  580.          end
  581.       end
  582.    end
  583. end
  584.  
  585. function RandomMount.OnAddonLoaded(self, itemId, flag)
  586.    --self.UpdateTicker = C_Timer.NewTicker(0.166, function() self:OnUpdate() end)
  587.  
  588.    self.FavoriteGroundMounts = RandomMountVarsPerChar.FavoriteGroundMounts or {}
  589.    self.FavoriteFlyingMounts = RandomMountVarsPerChar.FavoriteFlyingMounts or {}
  590.    self.OwnedGroundMounts = RandomMountVarsPerChar.OwnedGroundMounts or {}
  591.    self.OwnedFlyingMounts = RandomMountVarsPerChar.OwnedFlyingMounts or {}
  592.    self.OwnedMounts = RandomMountVarsPerChar.OwnedMounts or {}
  593.  
  594.    RandomMountVarsPerChar.FavoriteGroundMounts = RandomMount.FavoriteGroundMounts
  595.    RandomMountVarsPerChar.FavoriteFlyingMounts = RandomMount.FavoriteFlyingMounts
  596.    RandomMountOptionsFrame_SetTab(1)
  597. end
  598.  
  599. function RandomMountFrame_OnEvent(self, event, ...)
  600.    if event == "COMPANION_UPDATE" and select(1, ...) == "MOUNT" then
  601.       RandomMount:UpdateMounts(false)
  602.    elseif event == "COMPANION_LEARNED" then
  603.       RandomMount:UpdateMounts(true)
  604.    elseif event == "COMPANION_UNLEARNED" then
  605.       RandomMount:UpdateMounts(true)
  606.    elseif event == "PLAYER_ENTERING_WORLD" then
  607.       RandomMount:UpdateMounts(select(1, ...))
  608.       RandomMountOptionsFrame_SetTab(1)
  609.    elseif event == "ADDON_LOADED" and select(1, ...) == AddonPrefix then
  610.       RandomMount:OnAddonLoaded(...)
  611.    end
  612. end
  613.  
  614. function RandomMountOptionsFrame_Close()
  615.    RandomMountVarsPerChar.FavoriteGroundMounts = RandomMount.FavoriteGroundMounts
  616.    RandomMountVarsPerChar.FavoriteFlyingMounts = RandomMount.FavoriteFlyingMounts
  617. end
  618.  
  619. function RandomMountOptionsFrame_CancelOrLoad()
  620. end
  621.  
  622. function RandomMountOptionsFrame_OnLoad(self)
  623.    self.name = AddonPrefix
  624.    self.okay = function(self) RandomMountOptionsFrame_Close() end
  625.    self.cancel = function(self) RandomMountOptionsFrame_CancelOrLoad() end
  626.    if Settings and Settings.RegisterCanvasLayoutCategory then
  627.       local category, layout = Settings.RegisterCanvasLayoutCategory(self, self.name)
  628.       Settings.RegisterAddOnCategory(category)
  629.    else
  630.       InterfaceOptions_AddCategory(self)
  631.    end
  632.    RandomMountOptionsScrollBar:Show()
  633.    RandomMountOptionsFrame_SetTab(1)
  634.    RandomMountOptionsScrollBar_Update(nil)
  635. end
  636.  
  637. local function IsMountInTable(t, e)
  638.    for i = 1, #t do
  639.       if t[i].spellId == e.spellId then
  640.          return true
  641.       end
  642.    end
  643.    return false
  644. end
  645.  
  646. local MountFilter = ""
  647.  
  648. -- Escape special characters for matching a literal string
  649. local function Literalize(str)
  650.     return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", "%%%1")
  651. end
  652.  
  653. -- Rewrite text pattern to be case-insensitive
  654. local function UnCase(c)
  655.     return "[" .. strlower(c) .. strupper(c) .. "]"
  656. end
  657.  
  658. local function ApplyFilter(tbl, text)
  659.    if text == nil or #text < 3 then return tbl end
  660.    
  661.    local filtered = {}
  662.    local pattern = Literalize(text):gsub("%a", UnCase)
  663.    for i = 1, #tbl do
  664.       local name = tbl[i].name
  665.       local _, match = name:gsub(pattern, "%a")
  666.       if match > 0 then
  667.          table.insert(filtered, tbl[i])
  668.       end
  669.    end
  670.    return filtered
  671. end
  672.  
  673. function RandomMountOptionsScrollBar_Update(self)
  674.    local allMountsTable = {}
  675.    local favMountsTable = {}
  676.    if RandomMount.SelectedTab == FLYING_TAB then
  677.       allMountsTable = RandomMount.OwnedFlyingMounts
  678.       favMountsTable = RandomMount.FavoriteFlyingMounts
  679.    elseif RandomMount.SelectedTab == GROUND_TAB then
  680.       allMountsTable = RandomMount.OwnedGroundMounts
  681.       favMountsTable = RandomMount.FavoriteGroundMounts
  682.    end
  683.    allMountsTable = ApplyFilter(allMountsTable, MountFilter)
  684.    local nMounts = #allMountsTable
  685.    FauxScrollFrame_Update(RandomMountOptionsScrollBar, nMounts, 15, 16)
  686.    for line = 1, 15 do
  687.       local idx = line + FauxScrollFrame_GetOffset(RandomMountOptionsScrollBar)
  688.       local btn = _G["RandomMountOptionsEntry"..line]
  689.       if idx <= #allMountsTable then
  690.          btn:Enable()
  691.          local item = allMountsTable[idx]
  692.          btn:SetText(item.name)
  693.          btn:Show()
  694.          btn._RandomMountData = item
  695.          btn.CheckButton._RandomMountData = item
  696.          btn.CheckButton:SetChecked(IsMountInTable(favMountsTable, item))
  697.       else
  698.          btn:Disable()
  699.          btn:Hide()
  700.       end
  701.    end
  702. end
  703.  
  704. function RandomMountOptionsEntry_OnClick(self)
  705.    local item = self._RandomMountData
  706.    if item == nil then
  707.       return
  708.    end
  709.    local func
  710.    if self:GetChecked() then
  711.       func = table.insert
  712.    else
  713.       func = function(t, e)
  714.          local i = 1
  715.          while i <= #t do
  716.             if t[i].spellId == e.spellId then
  717.                table.remove(t, i)
  718.             else
  719.                i = i + 1
  720.             end
  721.          end
  722.       end
  723.    end
  724.    if item.flying and RandomMount.SelectedTab == FLYING_TAB then
  725.       func(RandomMount.FavoriteFlyingMounts, item)
  726.    end
  727.    if item.ground and RandomMount.SelectedTab == GROUND_TAB then
  728.       func(RandomMount.FavoriteGroundMounts, item)
  729.    end
  730. end
  731.  
  732. function RandomMountOptionsFrame_SetTab(tab)
  733.    RandomMount.SelectedTab = tab
  734.    for i = 1, 2 do
  735.       if i == tab then
  736.          PanelTemplates_SelectTab(_G["RandomMountOptionsFrameTab"..i]);
  737.       else
  738.          PanelTemplates_DeselectTab(_G["RandomMountOptionsFrameTab"..i]);
  739.       end
  740.    end
  741.    RandomMountOptionsScrollBar_Update(RandomMountOptionsScrollBar)
  742. end
  743.  
  744. function RandomMountOptionsFrame_Filter(self, isUserInput)
  745.    if not isUserInput then return end
  746.  
  747.    local text = self:GetText()
  748.    MountFilter = text
  749.    RandomMountOptionsScrollBar_Update(nil)
  750.    
  751. end
  752.  
  753. function RandomMount_UpdateModel(mountData)
  754.    RandomMountOptionsFrame.ModelScene:Hide();
  755.    RandomMountOptionsEntryModelFrame:Hide();
  756.  
  757.    if InterfaceID < 30403 then
  758.       RandomMountOptionsEntryModelFrame:Show();
  759.       GameTooltip:SetOwner(RandomMountOptionsEntryModelFrame, "ANCHOR_BOTTOM", 0, -5)
  760.       GameTooltip:AddLine(mountData.name);
  761.       GameTooltip:AddLine(GetSpellDescription(mountData.spellId), 1, 1, 1, 1, true);
  762.       RandomMountOptionsEntryModelFrame:SetCreature(mountData.creatureId)
  763.    else
  764.       RandomMountOptionsFrame.ModelScene:Show();
  765.       local needsFanfare = C_MountJournal.NeedsFanfare(mountData.id);
  766.       local creatureDisplayID, descriptionText, sourceText, isSelfMount, _, modelSceneID, animID, spellVisualKitID, disablePlayerMountPreview = C_MountJournal.GetMountInfoExtraByID(mountData.id);
  767.       local modelScene = RandomMountOptionsFrame.ModelScene;
  768.       GameTooltip:SetOwner(modelScene, "ANCHOR_BOTTOM", 0, -5);
  769.       GameTooltip:AddLine(mountData.name);
  770.       GameTooltip:AddLine(GetSpellDescription(mountData.spellId), 1, 1, 1, 1, true);
  771.       modelScene:TransitionToModelSceneID(modelSceneID, CAMERA_TRANSITION_TYPE_IMMEDIATE, CAMERA_MODIFICATION_TYPE_MAINTAIN, true);
  772.       modelScene:PrepareForFanfare(needsFanfare);
  773.       local mountActor = modelScene:GetActorByTag("unwrapped");
  774.       if mountActor then
  775.          mountActor:SetModelByCreatureDisplayID(creatureDisplayID, true);
  776.          -- mount self idle animation
  777.          if (isSelfMount) then
  778.             mountActor:SetAnimationBlendOperation(Enum.ModelBlendOperation.None);
  779.             mountActor:SetAnimation(618); -- MountSelfIdle
  780.          else
  781.             mountActor:SetAnimationBlendOperation(Enum.ModelBlendOperation.Anim);
  782.             mountActor:SetAnimation(0);
  783.          end
  784.       end
  785.    end
  786. end
  787.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement