Pokedex
IMPORTANT UPDATE FOR 9.2
The "new hotness" feature for mounts has been completely rewritten to work better with how the game has operated the last several expansions. The problems were that 1) multiple new mounts are often acquired in a small window of time followed by periods of drought and 2) flying mounts are often acquired when the vast majority of time was being spent in ground mount only zones.
The result is that many new mounts never really get a chance to be highlighted by the system before getting bumped down into the full pool. The solution is to track multiple hot mounts. Now, when you acquire a new mount its given a heat value. When you summon a mount, we will first check that slider percentage to see if we should summon from the pool of hot mounts. If so, we'll select from amongst just those mounts with hotter mounts having a greater chance of being summoned. A mount summoned this way loses one from its heat value. When a mount hits zero its no longer hot and falls into the general pool of mounts.
This system should ensure that all new mounts you acquire will have their time in the sun with the most recently acquired mounts being summoned the most often.
USING POKEDEX - THE SHORT VERSION
The games Key Binding UI will contain a section for Pokedex. The only two commands you'll probably want or need to keybind are Toggle Mount and Summon Companion. SummonOtherMount is a useful bind for those times when you don't want the type of mount we selected (for example, we choose a swimming mount but you want a regular one). Pokedex configuration can be reached through the games addons menu or by typing /pd. The full list of commands can be found at http://www.wowace.com/addons/pokedex/pages/main/actions/.
ADDON DESCRIPTION
Pokedex allows random summoning of mounts and companions using preference values set by user to influence selection. Pokedex will summon the appropriate mount, or invoke a class specific movement ability like Ghost Wolf or Burning Rush, based on what the current location and conditions support. Pokedex can also randomly set character's title using the same basic ranking system.
The chance of a particular item (mount, companion or title) being selected is equal to the rank you have assigned to it divided by the total of the ranks for all other eligible items. Put another way, each point of ranking is one ticket to the raffle drawing to see which mount is selected. If all items are still set to the default value, then they all have an equal chance of being selected. An item which you have assigned a value of 0 will never be selected.
PROFILE SUPPORT
Pokedex has support for all the normal ace3 profile stuff (change current, copy, etc), with a couple of twists so that you can have the benefits of sharing a profile and still be able to make character specific tweaks by overriding the rank value on that character. See http:www.wowace.com/addons/pokedex/pages/profiles/ for more info.
ADDITIONAL FEATURES
The New Hotness - The idea behind this feature is that your most recently acquired pet/mount/title is something you're probably excited about and what to see more often than the rest of your collection. Or maybe you want to flaunt it in front of the all the people who are still trying to get, for example, their Sinister Squashling. When dealing with large numbers of pets or mounts, even setting it to the max rank will not cause it to show up very often. So rather than make you downrank every other item, the hotness feature acts as a way to get that one pet or mount out more often. If there is a hot pet, we'll first do a percentile roll against the heat of hot item. If the heat is set to 50, then 50 percent of the time we would summon that hot pet. The other 50 percent of the time, we'll do the usual random selection out of the weighted pet pool.
Safe Dismount - This feature is disabled by default but can be turned on in Pokedex's options ui. This feature allows you to keep as a default behavior that of having the Auto Dismount in Flight option turned off, so that accidently trying to cast a spell in flight won't send you plummeting to your death, but allows you to choose override scenarios where you do want actions to dismount you automatically so that they can be executed. The scenarios you can opt into are 1) when you are in combat, 2) targeting something attackable or 3) attempting to gather a resource via mining, herbalism or skinning.
Random Titles - You can also rank titles the way you do pets and mounts and have Pokedex periodically change your title.
Auto summon pet - You can have Pokedex summon a non-combat pet, if you don't already have one out, every time you dismount or change zone.
Druid forms, Ghost Wolf and Burning Rush support - Pokedex supports using Druid forms, Shaman Ghost Wolf and Warlock Burning Rush in the appropriate situations as part of the Toggle Mount command.
autocast Water Walking when mounting - An option exists (off by default) for Shamans to cast Water Walking and Affliction Warlocks to cast a Soulburned Unending Breath as they summon a mount with the Toggle Mount command. This way the buff is already in place when they encounter water so they don't have to dismount, buff and then remount (all while wondering why Death Knights get to cast Path of Frost while mounted).
autocast Horn of Winter when mounting - For Death Knights, Pokedex can cast Horn of Winter whenever you mount. This is useful for keeping the buff up while questing or resource gathering (e.g. mining).
In reply to Turducken_McNugg
It might be wrong but it is what wowhead.com has listed for it BUT its not just Bastion. It's also Maldraxxus. I love this addon btw thank you very much for keeping it going, BEST MOUNT ADDON BY FAR!!! in my honest opinion. I suspect that its the same with the other Shadowlands zones where you can mount EXCEPT! Oribos, I didn't notice it there. Thank You again.
this is what /pd zone gave me: [20:02:47] Pokedex: MapID: 1536 Continent: The Shadowlands Zone: Maldraxxus Real Zone: Maldraxxus SubZone: Challenger's Promenade [20:02:47] Pokedex: FlyableArea: true Swimming: false Outdoors: true Indoors: false Falling: false [20:02:47] Pokedex: NoFlyZone: false Underwater: false Moving: false Indoors: false Combat: falseIn reply to fooinfinity:
Thanks for the kind words. Oribos is the only place I've been in the Beta and for all like 5 minutes. I saw we were good there and I was like "all right, maybe they didn't screw things up this time." Ha, ha. So naïve.
Wowhead might be listing a correct number, but for a different thing than what I need. For example, a dungeon has a dungeon ID for certain functions while the encounter journal based apis use a different ID. Same place conceptually, two different numbers that identify it depending on the function being called.
What I need are the mapID's which, as you can see from your output, is a different number than what wowhead shows unfortunately. On the plus side, any time you encounter this problem again you now know you can just /pd zone to get me the info (only need the first line) to fix it :)
If you collect any more mapID's from other bugged shadowlands zones toss 'em my way. Otherwise I'll just fix them as I encounter them myself once the xpac goes live.
A little behind the scenes info if you are interested. The second line of the /pd zone output shows return values from blizzards own functions. So you can see that when we asked them if it was a flyable area they said yes. The third line represents the state of pokedex's internal flags, after any massaging we do, that are then used to select which mount buckets (flyers, runners, etc) to try picking a mount from. After that the listing of buckets in play in the order we'd try to select from. Once added to our exception list of mapID's where blizzard gets it wrong, calling /pd zone there should show NoFlyZone: true as we correct for their mistake.
In reply to Turducken_McNugget:
this is what i've got so far
[20:21:37] Pokedex: MapID: 1533 Continent: The Shadowlands Zone: Bastion Real Zone: Bastion SubZone: Aspirant's Rest
[20:21:37] Pokedex: FlyableArea: true Swimming: false Outdoors: true Indoors: false Falling: false
[20:28:08] Pokedex: MapID: 1565 Continent: The Shadowlands Zone: Ardenweald Real Zone: Ardenweald SubZone: Tirna Vaal
[20:28:08] Pokedex: FlyableArea: true Swimming: false Outdoors: true Indoors: false Falling: false
1525 is for the zone Revendreth
thanks again for keeping up with it.
To follow up on previous request. I see swimmers are now supported in Nazjatar. But they are supported too well. To the point that only swimmers are used. Can You broaden the selection? Thanks.
In reply to Forge_User_11869536:
I do sympathize. It used to be easier to tell when a person was swimming underwater or at the surface because the Red Flying Cloud mount couldn't be summoned underwater but could at the surface. It was great. Unfortunately, they "fixed" it to work underwater an xpac or two ago.
So now we're left looking at whether IsSwimming is true combined with "do they have a breath timer." Which sucks because if they have some form of water breathing then it looks like they're at the surface which can be wrong and also because that check seems laggy as hell and prone to false positives when you're at the surface. I feel like this especially true on my main who's a gnome.
Anyway, here's what I tend to do for a workaround which will hopefully be useful for you. Set a keybind for Summon Other Mount; when you get just below the surface of the water use Summon Other Mount so that the addon goes "well we're swimming underwater so I'd go with a fast swimmer but they want something other than that so lets give 'em a flyer." I happen to bind Toggle Mount to H and then bind Summon Other Mount to Alt-H and Ctrl-H.
I wish the fast swimmer mount decision making worked better as well; just don't see a way right now to make it work. If you don't ever want swimmers you could give them all 0 ranks I guess. I've also considered adding a checkbox you can select to prefer non-swimmers (flyers > water walkers > runners); the idea there is that, with the option selected, the only way you'd get a swimmer would be to call Summon Other mount (while swimming of course). Would that be useful?
Would it be possible for you to add swimmers to appear in the rotation in nazjatar if you have used the budding deepcoral? Should only take an extra check in nazjatar to also check against the quest 56766 as per https://www.wowhead.com/spell=303020/budding-deepcoral
Also one other thing I noticed was that warlock and paladin class mounts show up in the list of runners even when not on those classes. Since opposite faction mounts and not yet learned mounts are not on the list, I just assumed those should be hidden as well.
In reply to xShojirox:
I'm not sure I ever saw this comment til now. Sorry about that. At this point, adding support would be kind of lol since the xpac is over. If I had done this what I probably would have done was, if you were under the benefits of the coral (I'm assuming it was duration based on not a forever thing?) then I would have just bumped swimmers up over all the other mounts in the priority order in Nazjatar because "hey, clearly you want swimmers."
Anyway, about the warlock and paladin class mounts ... you should only see them in the Unusable Mounts list. For example, I'm sitting on a rogue like now and that list contains Dreadsteed, Felsteed, Warhorse, Charger, etc. If you see one in a flyers or runners list its a bug and can cause problems. For example, I had missed like some dwarf paladin mount and it was causing Pokedex to sometimes not do anything for a buddy of mine but since I don't have a dwarf pally I don't have that mount in my collection and so never had that bug.
If you ever see a class/race specific mount in a unusable list when it shouldn't be, please drop me a line with the exact details. Thank you.
In reply to Turducken_McNugget:
Just to let you know Budding Deepcoral is permanent once you use the item with no duration, and I am not aware of any way to remove the effect once you have learned it through the item.
One other issue I have noticed is that Pathfinder still seems required for Pokedex to properly give you flying mounts in Draenor (and I assume The Broken Isles). I already have pathfinder for The Broken Isles so I can't test it, but since Blizzard has removed the pathfinder requirements for Draenor, Pokedex is still forcing me to use ground mounts while I am there even if my character is able to fly. I tried looking through the lua code and I actually couldn't find where it was making the check of if the user had pathfinder. I am not sure if it is the addon itself, the libraries, or just that the API is returning incorrect responses.
In reply to xShojirox:
I was worried about the achievement change and I was like "I better find my code that is checking achievements" ... and then found there was none. I'm actually kind of confused about the whole thing. I *think* I might have checked achieves at one time but then they got shit together and fixed IsFlyableArea to return the correct things so I removed it. But not sure at the moment.
Well, one to check about whether an error is in pokedex or the api is to try /pd zone. On the second line, FlyableArea will say whether the game says the area is flyable or not. On the third line, NoFlyZone says whether pokedex (based on that and map ids for places that are wrong) is saying ground only.
I have all the pathfinders too, not sure how to test it. Wonder if achieves copy over to the Beta realm ... maybe I can replicate problems there.
Is the budding coral change character specific? Just in case I do decide to do something and want to make sure I can have characters in both sides of the test case. Does it show up as a buff on the character? I wonder how I'd be able to distinguish between those with and without.
In reply to Turducken_McNugget:
I just did /pd zone and it says FlyableArea is false and NoFlyZone if false for the couple of Draenor zones I tested. Again I currently do not have Draenor pathfinder. So it sounds like the API needs to be updated to properly address the pathfinder changes for Draenor and likely The Broken Isles as well.
As far as the Budding Coral, it is character specific, and no, it does not show up as a buff on the character. As I stated in my initial message, it seems like the only easy way to track if it has been used is to check if quest 56766 has been completed or not. According to wowhead, the Budding Deepcoral spell that is cast when the item is used completes quest 56766. While wowhead says that quest does not exist, I have tested it on several characters using /script print(IsQuestFlaggedCompleted(56766)) and those that have used the item return true, while those that have not return false.
In reply to xShojirox:
Your situation sounds super weird for two reasons.
First, I can't replicate it on the Beta with a new 60 character. Flying mounts were selected in both Draenor and Broken Isles. The character had neither the Draenor Pathfinder nor Broken Isles Pathfinder, Part One achievements.
Second, you said FlyableArea *and* NoFlyZone were both false. Okay, that is *super* weird. Is there any chance you were actively off the ground in a flying mount when you did the /pd zone? It would be best to run it when you're standing on the ground unmounted.
If while standing unmounted, both of those are false we're in serious bizarro world and I'd also want to know the rest of output looked like (the list of buckets). Are Flyers even there; is there a reason given for not selecting a mount from the bucket?
In reply to Turducken_McNugget:
So I must have been in the air as you suggested. I ran the command in a few different places and here were the results:
Port of Zandalar, where I have pathfinder and can fly:
Pokedex: MapID: 1165 Continent: Zandalar Zone: Zuldazar Real Zone: Zuldazar SubZone: Port of Zandalar
Pokedex: FlyableArea: true Swimming: false Outdoors: true Indoors: false Falling: false
Pokedex: NoFlyZone: false Underwater: false Moving: false Indoors: false Combat: false
Pokedex:
Pokedex: Magic Broom Magic Broom
Pokedex: Flyers Smoldering Ember Wyrm
Pokedex: Ratstallion Harness no elligible mounts
Pokedex: Frostwolf War Wolf no elligible mounts
Pokedex: Runners White War Talbuk
Pokedex: Reliable Mounts Lucid Nightmare
Pokedex: Sidecars no elligible mounts
Azsuna in the Broken Isles where I also have pathfinder and can fly.
Pokedex: MapID: 630 Continent: Broken Isles Zone: Azsuna Real Zone: Azsuna SubZone: Rhut'van Passage
Pokedex: FlyableArea: true Swimming: false Outdoors: true Indoors: false Falling: false
Pokedex: NoFlyZone: false Underwater: false Moving: false Indoors: false Combat: false
Pokedex:
Pokedex: Magic Broom no elligible mounts
Pokedex: Flyers Ashenvale Chimaera
Pokedex: Ratstallion Harness no elligible mounts
Pokedex: Frostwolf War Wolf no elligible mounts
Pokedex: Runners Brilliant Direbeak
Pokedex: Reliable Mounts Headless Horseman's Mount
Pokedex: Sidecars no elligible mounts
In Draenor where I do not have pathfinder, and can fly because of the change by Blizzard, but Pokedex still always chooses ground mounts.
Pokedex: MapID: 550 Continent: Draenor Zone: Nagrand Real Zone: Nagrand SubZone: Skysong Lake
Pokedex: FlyableArea: false Swimming: false Outdoors: true Indoors: false Falling: false
Pokedex: NoFlyZone: true Underwater: false Moving: false Indoors: false Combat: false
Pokedex:
Pokedex: Magic Broom no elligible mounts
It gets that far when using the /pd zone command and then it errors. Below is the error provided, and yes Locals just cuts off. I tried the command in several zones in Draenor and they all throw this error.
Message: Interface\AddOns\Pokedex\core.lua:566: attempt to call global 'MFtoStr' (a nil value)
Time: Sun Oct 25 12:00:56 2020
Count: 1
Stack: Interface\AddOns\Pokedex\core.lua:566: attempt to call global 'MFtoStr' (a nil value)
[string "=[C]"]: in function `MFtoStr'
[string "@Interface\AddOns\Pokedex\core.lua"]:566: in function `EchoZone'
[string "@Interface\AddOns\Pokedex\options.lua"]:562: in function <Interface\AddOns\Pokedex\options.lua:562>
[string "=(tail call)"]: ?
[string "@Interface\AddOns\AddOnSkins\Libs\Ace3\AceConfig-3.0\AceConfigCmd-3.0\AceConfigCmd-3.0.lua"]:143: in function <...\AceConfig-3.0\AceConfigCmd-3.0\AceConfigCmd-3.0.lua:133>
[string "@Interface\AddOns\AddOnSkins\Libs\Ace3\AceConfig-3.0\AceConfigCmd-3.0\AceConfigCmd-3.0.lua"]:408: in function <...\AceConfig-3.0\AceConfigCmd-3.0\AceConfigCmd-3.0.lua:334>
[string "=(tail call)"]: ?
[string "@Interface\AddOns\AddOnSkins\Libs\Ace3\AceConfig-3.0\AceConfigCmd-3.0\AceConfigCmd-3.0.lua"]:769: in function `HandleCommand'
[string "@Interface\AddOns\Pokedex\core.lua"]:91: in function `?'
[string "@Interface\AddOns\ElvUI\Libraries\Ace3\AceConsole-3.0\AceConsole-3.0.lua"]:94: in function `?'
[string "@Interface\FrameXML\ChatFrame.lua"]:5073: in function `ChatEdit_ParseText'
[string "@Interface\FrameXML\ChatFrame.lua"]:4737: in function `ChatEdit_SendText'
[string "@Interface\FrameXML\ChatFrame.lua"]:4773: in function <Interface\FrameXML\ChatFrame.lua:4769>
[string "=[C]"]: in function `ChatEdit_OnEnterPressed'
[string "*:OnEnterPressed"]:1: in function <[string "*:OnEnterPressed"]:1>
Locals:
I will also note, it does not seem to throw this error when running the command while in the air in Draenor. Pokedex is currently up to date and is version 9.0.03
In reply to xShojirox:
As a work around for now, does using Summon Other Mount work to get you a flyer? Like, I have H bound to Toggle Mount and Alt-H bound to Summon Other Mount for times like this (or more often when the swimmer/flyer decision isn't what I want).
I'm assuming the character in Zuldazar was different from the character in Legion and/or Draenor? They have a magic broom and the others didn't. If it was the same character then that would be another problem that would have to be investigated.
Appetizers finished lets take about that error. That is very, VERY concerning to me.
MFtoStr is a pokedex function used to turn a set of flags into a string. Flags are set on the mount buckets to describe their ability to work in restricted situations. When selecting mounts we reject buckets if they don't support a flag required for your current situation. That function is used to say "these were the flags that bucket of mounts don't support."
For example, if I go to Exodar and run /pd zone then I will see in the output "Pokedex: Flyers NoFlyZone_Legal" If I run /pd zone while I'm auto running in Exodar that line will become "Pokedex: Flyers Moving_Legal NoFlyZone_Legal"
The error you're seeing is basically saying that the function doesn't exist. The game is not seeing it defined locally in the addon and so it looked at the global table to see if it was defined there (like one of the game api's). A piece of Pokedex is MISSING.
First thought, is to delete the folder and redownload the addon. Though, "566: in function `EchoZone" matches up with my line numbers so not sure. I don't know what would cause that besides things like a corrupted file or memory corruption or something like that ...
So even if I were to check in right now code that said "not flyable? is the continent WoD? okay, screw it, just say it is flyable" you could conceivably see this same error in Exodar where you really can't fly (well, the error when you /pd zone) and it would still mean that something is effed up. More later.
In reply to Turducken_McNugget:
I actually use a macro that just does /click PokedexToggleMountButton but I did try /pd som and that did use a flying mount while in Draenor.
The character in Zuldazar was actually the same character used for the others, I just put the broom in my bank after doing that so it wouldn't automatically try to just put me on a broom.
I just deleted my Pokedex addon and downloaded it again from curseforge and still got an error when using /pd zone while on the ground in Draenor. I even tried with Pokedex 9.0.02 and even 9.0.01, both also threw the error. I even exited game when deleting the addon and replacing it. Even though I didn't think it would do anything, I even temporarily removed my settings from the wtf folder and tried running /pd zone after that, it still threw the error.
In reply to xShojirox:
After, oh, at least 12 hours of needed sleep I think I know why you have the MFtoStr error and the short answer is: I am an idiot. Sorry for the alarm.
Okay, back to the main problem.
So, this is the opposite of the usual fix ups we do where blizzard says you can fly where you really can't and if we don't add code you end up running around on a dragon or something. No big deal.
My concern with making a change for this scenario, where we say "oh yeah, you can totally fly" is that there could be situations where you can't and instead of falling down to something usable like Ghost Wolf or a Druid form we just keep trying and failing to summon a flying mount.
So, what I'll probably do is make it so that the hacky fix isn't turned on for everyone. A person will get the hack behavior after using the command line to set a flag in the saved settings.
Its really weird that you're getting this behavior. You could try opening a bug to blizzard about IsFlyableArea being wrong in WoD for you. I don't know that they would do anything about it since you actually can fly.
In reply to Turducken_McNugget:
Well it's good you know what is going on at least for the MFtoStr error.
As for the inability to fly with the default command, it is overall a minor inconvenience and I would say don't invest too much time on it if you think it will be a lot of work to get a fix in since it is an API issue. Blizzard has plenty of things to fix with 9.0 and I would say it will probably be a little bit before the majority of them are working as intended. I already know certain other API commands broke and some macro conditionals broke such as left or right for modifier buttons (i.e. rshift for specifically right shift) which messed up a bunch of my macros.
Keep getting this over and over again. I disabled all addons except for Pokedex and still get it.
369x Couldn't open Pokedex\libs\AceHook-3.0-8\AceTimer-3.0-17.xml
also, Please add Seething Shore Battleground to the no flying mount list, Thank You for a great addon.
In reply to Fooinfinity:
Just made a new release; should fix the error.
The next time you're in Seething Shore type /pd zone; one of the first things listed will be the map id. Report that back to me and I'll add it to the list.
In reply to stencil:
Ok, ty here you go
01:24:26Pokedex: MapID: 907 Continent: Kalimdor Zone: Seething Shore Real Zone: Seething Shore SubZone: Crash Site
01:24:26Pokedex: FlyableArea: true Swimming: false Outdoors: true Indoors: false Falling: false
01:24:26Pokedex: NoFlyZone: false Underwater: false Moving: false Indoors: false Combat: false
01:24:26Pokedex: Flyers Black Drake
01:24:26Pokedex: Ratstallion Harness no elligible mounts
01:24:26Pokedex: Telaari Talbuk no elligible mounts
01:24:26Pokedex: Runners Vile Fiend
01:24:26Pokedex: Reliable Mounts Huntmaster's Loyal Wolfhawk
also, one more thing. Gliders work in Battlegrounds now. Pokedex doesn't call them in a Battleground and only in a Battleground or possible other instances(not sure). It(Pokedex) works fine outside of Battlegrounds and there are other gliders now not just the Goblin Gliders. Alliance/Horde Gliders you can buy with Honor marks.
In reply to fooinfinity:
My apologies. I'm a bit of a flake and so it slips my mind to come back and check for replies. I rely on curse to send me a message when someone posts but it didn't notify me of your reply :(
Anyway, the changes I'll be checking in for the patch on Tuesday will add Seething Shore to the no fly zones. Let me know if you encounter more pvp zones that need inclusion.
It will also add the Alliance and Horde Glider Kits. Though, my god man those cost tokens which are BoA and can be redeemed for transmog sets! And Goblin Glider Kits are like, free. You're a madman! ;)
To the best of my knowledge, Gliders no longer work in any instances. I know I personally used to use them in Molten Core until Blizzard broke that.
Our check for whether you can use a goblin, and now alliance and horde, glider kit is:
So, you have at least 1 of them in your bags, its not on cooldown and you are not in an instance. So, assuming you aren't in combat at that moment, if Pokedex is failing to deploy the glider its probably because the game is telling us that you're in an instance and we think they don't work in those.
So, we have two choices going forward to fix this. One way would be, for you, to collect a set of map ids for places you've found where gliders should be allowed. The other is to add in a check for C_PvP.IsBattleground() which presumably will be true anytime you're in one and will let us ignore the instance check in those situations. There might be issues then of false positives (thinking we can use them in places we can't); doubt they would cause many problems.
So after the patch comes out I'll release an Alpha build will that change for you try out and play around with. There'll probably be issues found after the patch that I'll have to fix, but each time I'll put out an alpha after the release with the BG change for you to test. You can play with it a couple of weeks, report back and issues or if its good for release.
Does that plan sound good to you?