HereBeDragons
HereBeDragons is a data API for the World of Warcraft mapping system
HereBeDragons offers a clean and modern API to retrieve the players position, calculate distances and angles between positions, both in global world coordinates and local zone coordinates. The primary goal of this library is to provide an up-to-date and low maintenance alternative to the legacy map libraries like Astrolabe and LibMapData, which both unfortunately are unmaintained and have their own issues due to changes in WoWs API.
On top of a clean API for all map math, HereBeDragons also provides a second library, HereBeDragons-Pins, which replaces the world map and minimap pin management functionality of Astrolabe. This library is roughly based on the pin management code from GatherMate2, which has been thoroughly tested in years of use.
API:
API/HereBeDragons-2.0
API/HereBeDragons-Pins-2.0
I had to reinstall this addon again and am getting an error I haven't seen for a few years. it is trying to read here be dragon 1.0. is there something I can do to fix this at all?
I find that HDB-Pins minimap pins are really wobbly and shaky when the map is moving compared to Blizzard's pins, is that just how it is or can something be done to make them more smooth?
In reply to oiFrango:
Blizzards pins are actually painted ontop of the map, there is no comparison.
But you can certainly improve the behavior by setting these two things on your texture:
Thanks, that's really helpful!
Hi there, I work on the NauticusClassic (https://www.curseforge.com/wow/addons/nauticusclassic) addon and I am running into an issue with HereBeDragons that I can't seem to figure out. I only draw icons at the continent level like so:
But a strange issue happens whenever a map addon that has map fading fades the map. You can see examples of it here https://imgur.com/a/NGPBT2h
Wondering if you have ever run into this before or have any ideas why this might be happening? The map addon I am using to test this is Leatrix Maps, but it seems this issue happens with any map addon that does fading of any sort.
I think there is an error with GetWorldCoordinatesFromAzerothWorldMap. When I hover my cursor over my player position when zoomed out to the "azeroth" view of the continents, it claims I'm about -52500, -4700 even though the real position is more like 525, 8170. Am I doing something wrong or is there a bug? Thanks
In reply to maxlohdotcom:
The coordinates are correct in my experience, if you are not seeing what you are expecting you might be using the wrong continent as a reference.
In reply to nevcairiel:
oh yeahhh the function takes current player continent as input as well and I was using the wrong number for that. But, how do I get the current continent of the player? Looks like GetCurrentMapContinent() is no longer working?
Hi there! I install this explicitly in my addons because some of my addons want to use it and don't always update when this is updated. I had to reinstall my entire machine this weekend (RIP disk drive) and now I'm getting these errors. To the best of my knowledge, I wasn't getting them before. This is the order in which they showed up. I don't know if that matters.
Date: 2020-02-12 23:09:12
ID: 1
Error occured in: Global
Count: 1
Message: ...nhanced\libs\HereBeDragons-1.0\HereBeDragons-1.0.lua line 118:
attempt to call global 'GetWorldMapTransforms' (a nil value)
Debug:
[string "@FlightMapEnhanced\libs\HereBeDragons-1.0\HereBeDragons-1.0.lua"]:118:
...nhanced\libs\HereBeDragons-1.0\HereBeDragons-1.0.lua:116
[string "@FlightMapEnhanced\libs\HereBeDragons-1.0\HereBeDragons-1.0.lua"]:341: gatherMapData()
[string "@FlightMapEnhanced\libs\HereBeDragons-1.0\HereBeDragons-1.0.lua"]:370: in main chunk
Locals:
(*temporary) = <function> defined =[C]:-1
(*temporary) = nil
(*temporary) = "attempt to call global 'GetWorldMapTransforms' (a nil value)"
transforms = <table> {
}
ipairs = <function> defined =[C]:-1
AddOns:
LIST OF ADDONS REMOVED FOR LENGTH
BlizRuntimeLib_enUS v8.3.0.80300 <none>
(ck=90c)
Date: 2020-02-12 23:09:12
ID: 2
Error occured in: Global
Count: 1
Message: ...ed\libs\HereBeDragons-1.0\HereBeDragons-Pins-1.0.lua line 102:
attempt to index global 'WorldMapButton' (a nil value)
Debug:
[string "@FlightMapEnhanced\libs\HereBeDragons-1.0\HereBeDragons-Pins-1.0.lua"]:102: in main chunk
Locals:
MAJOR = "HereBeDragons-Pins-1.0"
MINOR = 13
pins = <table> {
minimapPins = <table> {
}
Minimap = Minimap {
}
worldmapPins = <table> {
}
updateFrame = <unnamed> {
}
worldmapPinRegistry = <table> {
}
minimapPinRegistry = <table> {
}
activeMinimapPins = <table> {
}
}
oldversion = nil
HBD = <table> {
mapData = <table> {
}
callbacks = <table> {
}
RegisterCallback = <function> defined @Interface\AddOns\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua:90
transforms = <table> {
}
microDungeons = <table> {
}
UnregisterCallback = <function> defined @Interface\AddOns\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua:153
mapToID = <table> {
}
eventFrame = <unnamed> {
}
continentZoneMap = <table> {
}
}
cos = <function> defined =[C]:-1
sin = <function> defined =[C]:-1
max = <function> defined =[C]:-1
type = <function> defined =[C]:-1
pairs = <function> defined =[C]:-1
GetPlayerFacing = <function> defined =[C]:-1
minimapPins = <table> {
}
activeMinimapPins = <table> {
}
minimapPinRegistry = <table> {
}
worldmapPins = <table> {
}
worldmapPinRegistry = <table> {
}
minimap_size = <table> {
outdoor = <table> {
}
indoor = <table> {
}
}
minimap_shapes = <table> {
SQUARE = <table> {
}
SIDE-RIGHT = <table> {
}
SIDE-TOP = <table> {
}
CORNER-TOPRIGHT = <table> {
}
SIDE-BOTTOM = <table> {
}
TRICORNER-TOPRIGHT = <table> {
}
CORNER-BOTTOMRIGHT = <table> {
}
TRICORNER-BOTTOMLEFT = <table> {
}
TRICORNER-BOTTOMRIGHT = <table> {
}
TRICORNER-TOPLEFT = <table> {
}
SIDE-LEFT = <table> {
}
CORNER-BOTTOMLEFT = <table> {
}
CORNER-TOPLEFT = <table> {
}
}
tableCache = <table> {
}
newCachedTable = <function> defined @Interface\AddOns\FlightMapEnhanced\libs\HereBeDragons-1.0\HereBeDragons-Pins-1.0.lua:78
recycle = <function> defined @Interface\AddOns\FlightMapEnhanced\libs\HereBeDragons-1.0\HereBeDragons-Pins-1.0.lua:88
rotateMinimap = false
indoors = "indoor"
minimapPinCount = 0
queueFullUpdate = false
minimapScale = nil
minimapShape = nil
mapRadius = nil
minimapWidth = nil
minimapHeight = nil
mapSin = nil
mapCos = nil
lastZoom = nil
lastFacing = nil
lastXY = nil
lastYY = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index global 'WorldMapButton' (a nil value)"
AddOns:
LIST OF ADDONS REMOVED FOR LENGTH
BlizRuntimeLib_enUS v8.3.0.80300 <none>
(ck=90c)
Hi
I am wondering how the library deals with frame recycling?
for example if I have a db with 2000 items, will all 2000 need frames created? seems like that will crash the game client.
In reply to Forge_User_55962283:
The caller of the library is responsible for providing a frame with an icon to show. It would be up to the caller to recycle those appropriately, and perhaps only register pins currently relevant.
In reply to nevcairiel:
Thanks for the swift reply, I figured that was the case but I saw the functions to remove all pins etc
Great library ! I'm always amazed how people can make such compact yet very functional things.
Would it be possible to incorporate some sort of callback when adding minimap pins that would be called whenever the 'onEdge' state changes ? It feels awkward to have to make an onupdate just for this, and more so since HBD-pins already has one going to update the pins. The callback function could be an optional argument to the AddWorldMapIconMap or AddWorldMapIconWorld functions.
This would, for example, make it very easy to change textures from arrow (onEdge) to 'whatever it is you want' for not onEdge.
Cheers.
This is an awesome lib, but is there any way possible to make pins appear under the minimap player arrow instead of on top? I've tried all layers and texture layer numbers I know of and can't get them under the arrow without them going under the whole minimap. I'm wondering if this is a limitation because of how the minimap arrow is not a lua frame. Do you have any suggestions?
In reply to Venomisto68047:
In reply to Nevcairiel:
When logging into a character located in the Dreamgrove, HBD:GetZoneCoordinatesFromWorld() appears to return zone coordinates for the base zone Val'sharah.
However, it does return zone coordinates for the Dreamgrove after reloading the UI.
I fixed this issue, but please use the issues section of the website in the future to report problems, much easier to track then, thanks!
Not quite. What I'm missing with just UnitPosition(unit) is the handling of the coordinate transformation and the override IDs.
Basically what I'm wishing for is:
@burny_dd
You can just use UnitPosition, the x/y value it returns are the same as HBD:GetPlayerWorldPosition would give you.