GW2 Location Sender
http://gw2.chillerlan.net/files/GW2LocationSender-setup.exe
This neat little tool sends the location data which GW2 provides via the Mumble Link to a server of your choice.
Currently the data is being sent via a HTTP/HTTPS POST request in JSON format, but raw data transmission to a specified ip:port is already in development. Both, GUI and CLI, are supported. See the readme for more information.
Special thanks to Heimdall.4510, who did the C++ part! Use this thread for discussion.
As i mentioned in the other thread it seems it’s a cache misbehaviour. It would be interesting to know which browser you use (guessing from the console screen, it’s chrome). I’ve experienced this ages ago with early firefoxes, but never seen this happening in chrome.
(edited by smiley.1438)
Theres no need to add character names – this is just optional to assign the profession to the character name received from the mumble link data. Did you try the tool downloaded from Heimdall’s repo or with the version you compiled yourself?
I’m running also Win7 x64 and the program works just fine. However, i’ve experienced a crash with earlier versions when the storage folder wasn’t writable with user rights (like program files). This should be fixed now that the program uses \AppData\Roaming in the user folder for storage. If this still doesn’t help, try running the tool in admin mode if possible.
DL please stop ruuning on EB :|
Hey, you’re alive – how’s NP?
Too bad ICON disbanded before you got to kick their kittens… hehe.
Greetings, Skinny from RoF
I’ve updated the JSON in my gist with the (approx) coordinates of the objectives. I’ve also changed the JSON structure a bit to how i’d like to see the response of the objective_names API.
https://gist.github.com/codemasher/bac2b4f87e7af128087e
{
"Center": [
{
"id": 1,
"score": 25,
"coords": [10766, 13656],
"type": "keep",
"name": {
"de": "Aussichtspunkt",
"en": "Overlook",
"es": "Mirador",
"fr": "Belvédère"
}
}
],
"BlueHome": [
...
],
"GreenHome": [
...
],
"RedHome": [
...
]
}
id is the objective_id obviously – this could be also used as identifier (which is passed to e.g. jQuery’s $.each()), score and type are somehow redundant, so one of them could be dropped.
{
"Center": {
"1": {
"score": 25,
"coords": [10766, 13656],
"name": {
"de": "Aussichtspunkt",
"en": "Overlook",
"es": "Mirador",
"fr": "Belvédère"
}
}
},
...
}
(edited by smiley.1438)
nice work!
how about a restful api to allow other programmers to provide clients/viewer?
Thanks
I didn’t plan to implement a REST API yet, since i’ve only provided an example backend (or: reference implementation). It’s completely up to the one who writes the backend for the location sender how he would use the collected data (and also which language and data storage – i’ve provided a php/mysql example because thats what i know best ;D).
(edited by smiley.1438)
I’ve explained the tracking option above, see: https://forum-en.gw2archive.eu/forum/community/api/Gw2-Location-Tracker/2380078
The CLI is also implemented now, still it needs some fine tunig i believe
We’ve also talked about statically linking the libraries but found it was easier without for updates during the development process (the program itself is ~130kB while the required libs are ~40MB). Maybe we’ll release a version with statically linked libs once we’re done.
From what i can see, we’re not doing that bad – we’re tied with DL right now (same ticks, just ~200 points difference), how comes? :o
Is it you AG keeping DL busy so that we can get stuff done, or is it DL just doing bad?
fork → https://help.github.com/articles/fork-a-repo
There’s no CLI mode yet – we’ve talked about that earlier in the development process (the idea was to make it CLI only) but dropped it because there’s a lot of people in the target audience who hardly know to use a command line and are happy with a GUI.
You may use this thread for further discussion: https://forum-en.gw2archive.eu/forum/community/api/Gw2-Location-Tracker/first#post2379754
(can a moderator please merge the above posts starting from https://forum-en.gw2archive.eu/forum/community/api/Possible-map-floor-API-bug/2449660 ?)
I’ve just pushed a kittenload of updates and fixes to my repo and also changed the german to english for now (until i’ve finished the i18n) – you might try it with the updated files now (why not just create a fork?).
As stated in the WTFPL you may just do WTF you want to with the code, but i’m also happy for a credit any time
The location sender by Heimdall.4510 was also updated, but i don’t know if he already made the latest version available – also, i’ve created an installer for it because some people had trouble to install it^^
(edited by smiley.1438)
At some point during the evening I thought I was on our own Borderland… but it was Drakkar’s O.o
Same happened to me when i was asked in which BL we’re in: “green BL… oh, wait! it’s actually red BL…” (after quick checking the minimap) XD
(edited by smiley.1438)
I don’t complain about your blobbing blobs of blobbyness – i just complain about that kittening random matchup system which brings uneven matchups like that one. THANKS ARENANET! -.-
Holy mother of lootbags, what a fight at our hills – thanks to the Dzagonur zerg we wiped a couple of times i believe
(i actually didn’t get what they were doing: broke north gate and sat down on the outer walls… XD)
€: RoS brought more lootbags to bay just a few minutes after we wiped DZ once more from our hills – special thanks to TaG and FIRE for the help – was a lot o’ fun!
(edited by smiley.1438)
One of the reasons Thorn is my favourite commander, is because of his attitude! Other commanders are like “LISTEN FFS!!!” ragequit but thorn, if someone doesnt listen his like “haha, we tried
”
That’s why he gets things done – he’s patient, reminds me a bit of Chris from NP (former ICON) – he rocked! Too sad NP went to AG… <.<
That Bay Defense was fun. It took you guys ages to attack. But props RoF for splitting up in guild groups and trying to coordinate your attacks to flack us. We lost alot of players who logged of on the second push and couldn’t defend it.
That was a hell of a fight! You guys were locked in there for over an hour or so
Our italian guilds did a great job moving as one and kicking some serious kittens then^^
Even better was DZ an hour later or so – see screen 2 (for those not into german: these are flame rams(!!))
(edited by smiley.1438)
You know how to use mute in TS, don’t you? :P
The objectives don’t have coordinates yet (requested here), so you have to add them yourself – best way would be to store the JSON local and add the coordinates. The sector names are of course in floor 2/3, have you even looked at it? ;D (btw. when you’re using the data from a different floor, e.g. floor 1, you need to respect the map_rectangle/clamped_view of the wvw map)
hre’s how to find them: https://github.com/codemasher/gw2api-tools/blob/master/js/gw2maps-jquery.js#L191
and here what it looks like: http://wiki-de.guildwars2.com/wiki/Benutzer:Smiley/GW2Maps (you need to zoom in on the 2nd map, no objectives, but sector names using floor 2/3)
LOOOOTBAGS! MOAR LOOOOOOOTBAGS! (thanks for all the loot!)
€: another lootbag fest in our hills ^.^ (but hey, flippin’ our garrison wasn’t nice! also, leave our bay alone!)
(edited by smiley.1438)
And you having no scouts may be sad for you but your server has the bigger population so organize the people you have.
Maybe RoF has the bigger population, but even when we’d bring up all ourWvW’ers, RoS would outnumber us with e.g. VcY, DeX or RIOT. WvW hasn’t improved much on RoF since GW2 start, a lot of guilds left because of that, so most of the time we seem to be a bunch of unorganized roamers. Tell me the trick to organize people – i’d use it… ^.^
Oh well, thats the good ol’ RoF problem… It was the same yesterday night: we had the numbers in our BL to kick some kitten but the people spread out all the time – that how we lost our garrison to RoS and didnt’t get it back 3 times… noone seems to listen – sad but true.
(edited by smiley.1438)
Why not have a look at existing code? I don’t know what language you’re coding in, but a Javascript example might serve for an idea:
https://github.com/codemasher/gw2api-tools/blob/master/js/gw2maps-jquery.js#L191
Not sure if you are aware but you’re “&ratings=true” is not working correctly. When you click the link it changes the “&” to “&” which is expected in a non formatted link. Perhaps you need to check it… (are you using [ pre ] and [ /pre ] tags?)
Thats a bug of this forum i’ve already reported over here:
https://forum-en.gw2archive.eu/forum/support/forum/Redirect-to-external-sites-broken/first#post2079904
Just select/copy/paste the link and you’re fine – it also saves you a redirect to the… redirect page
What a fun night: we had >500 ticks for a while, then a bunch of RoS showed up and kept us busy all the time – great fight at RoF lake tower and later in SM.
I wish we had more matchups like this, but thanks to the randomizer i believe we’ll end up in either a t4 or a t9 match next week <.<
Floor 1 has basically all floor data so that you can build a full world map i guess.
This is just fine, the floordata returns everything (well, not everything yet) what can be found on the specified floor – when you look for the data on a specific map, you’ll need to dig through the floors you find in https://api.guildwars2.com/v1/continents.json
Try using guild_name instead of guild_id. Much easier to remember and use!
Apparently not when it comes to special characters. Also the id provides some level of security – you can’t break up anything with that – think of XSS attacks ’n stuff…
preg_match("#^[A-F\d]{8}-(:?[A-F\d]{4}-){3}[A-F\d]{12}$#", $guild_id])
{
error: 3010,
product: 1008,
module: 1,
line: 559,
text: null
}
There’s possibly something wrong with that guild_id it seems, it doesn’t work for me too. When i try mine, everything’s fine:
https://api.guildwars2.com/v1/guild_details.json?guild_id=75FD83CF-0C45-4834-BC4C-097F93A487AF
Coordinates fo the Portals are not yet in the API (good idea though) and the data for WvW is listed in here:
https://api.guildwars2.com/v1/map_floor.json?continent_id=2&floor=3
According to several indicators ingame this map is located in Maguuma which is completely wrong. It’s actally somewhere on the area of the historical Ice Caves of Sorrow in the Southern Shiverpeaks or “today’s” Steamspur Mountains (which is correct according to the API’s floordata).
Same goes for the Bloodtide Coast, Sparkfly Fen and Mount Maelstrom. While Sparkfly Fen was treated as Tarnished Coast (not Maguuma) in GW1, it seems it’s something like “Steamspur Foothills” today along with Bloodtide Coast (which could be also Kryta). Mount Maelstrom is definately Shiverpeaks/Steamspur Mountains.
Anyway, we’re agreed that Maguuma is on the other side of the map, right?
(edited by smiley.1438)
I didnt like some of the TaG commanders anyways. They kept moaning all the time
Actually there’s just one of TaG i know who’s rude and moaning all the time and he made it onto my ignore list after a few hours…
Despite your numbers you just managed to trade your EB Keep for our Hills… GJ on that
Duh, the first hours felt like dzagonur had their entire server in RoF borderlands… Hey, WvW has 4 maps, not just one! But hey, great matchup, could have been much worse. So happy fraggin’ everyone.
Only files within the clamped_view are available for download as Cliff mentioned above.
Now look at this line:
//bounds = new L.LatLngBounds(p2ll([0, (1 << options.max_zoom)*256]), p2ll([(1 << options.max_zoom)*256, 0]));
p2ll() recalculates from pixels to lat/lng where the parameters are the NE and SW corners of the map – starting at 0 in this case. You can calculate like this:
2 ^ zoom = 1 << zoom (bit shift) = tile_range (assuming all tiles are available)
so:
2 ^ max_zoom * tile_size = (1 << max_zoom) * tile_size = texture_dims (where tile_size is 256)
With this knowledge you can check if a tile is in range by comparing to the clamped_view data. Google Maps for example uses a function as tile getter where you’re able to verify if a tile is in range:
function get_tile(coords,zoom){ // coords are the calculated tile coordinates which the app tries to download
if(coords.y < 0 || coords.x < 0 || coords.y >= (1 << zoom) || coords.x >= (1 << zoom)){
return "/path/to/errortile.jpg";
}
return "https://tiles.guildwars2.com/"+continent_id+"/"+floor_id+"/"+zoom+"/"+coords.x+"/"+coords.y+".jpg";
}
You can replace the min and max values with the values of the clamped_view then (if available).
(edited by smiley.1438)
So is the HoM only going to be for GW1 ?
Yup.
Earn special Guild Wars 2 rewards based on your achievements in the original Guild Wars and Guild Wars: Eye of the North™. Use the Hall of Monuments Reward Calculator to determine what rewards you’ve unlocked, how the benefits are calculated, and what other items are available.
Just enter your Guild Wars character name in the field above to get started! If you don’t have a character name to use, you can still access the Reward Calculator in demo mode
Could you please help me a bit into the right direction to get Maps working?
This part of my code may give you an idea:
https://github.com/codemasher/gw2api-tools/blob/master/js/gw2maps-jquery.js#L153
// the map has a clamped view? ok, we use this as bound
if(floordata.clamped_view){
clamp = floordata.clamped_view;
bounds = new L.LatLngBounds(p2ll([clamp[0][0], clamp[1][1]]), p2ll([clamp[1][0], clamp[0][1]])).pad(0.2);
}
// we display a specific map? so lets use the maps bounds
else if(options.region_id && options.map_id){
clamp = floordata.regions[options.region_id].maps[options.map_id].continent_rect;
bounds = new L.LatLngBounds(p2ll([clamp[0][0], clamp[1][1]]), p2ll([clamp[1][0], clamp[0][1]])).pad(0.4);
}
// else use the texture_dims as bounds
else{
//bounds = new L.LatLngBounds(p2ll([0, (1 << options.max_zoom)*256]), p2ll([(1 << options.max_zoom)*256, 0]));
bounds = new L.LatLngBounds(p2ll([0, floordata.texture_dims[1]]), p2ll([floordata.texture_dims[0], 0])).pad(0.1);
}
mapobject.map.setMaxBounds(bounds).fitBounds(bounds);
I’m aware of the clamped_view, i was just wondering because the tiles are available at zoom 1&2
Hey, thanks for your feedback!
I noticed that it seems to not show people when the key phrase is changed and then changed back to the original phrase.
Thanks for that hint, i believe we haven’t tried this yet, since we used the “hardcoded” key for testing all day. When you watch the console output, you’ll see that you receive the data for all markers. I’ll look into this and fix it. (btw. the marker color reflects the online state)
A thought, would it be possible to make the arrows into little dots similar to the ones we currently see on the mini-maps. i think arrows take up a bit too much space. I’m assuming they’re included to see the direction the person is facing?
It’d be easily possible to change the marker style since it’s just a little SVG path. I’ve already tried small dots (12px diameter) but i found that they were hard to see and – like you already mentioned – they would not show the player’s direction, which i find is essential in WvW. I can make this optional.
(edited by smiley.1438)
I’ve just updated my GitHub repo with the relevant backend files:
the map:
https://github.com/codemasher/gw2api-tools/blob/master/examples/gw2location.html
https://github.com/codemasher/gw2api-tools/blob/master/js/gw2maps-gmaps.js
the receiver and ajax-backend, which stores the incoming data from GW2 and sends the positions to the map:
https://github.com/codemasher/gw2api-tools/blob/master/examples/gw2location.php
€:
I’ve written a readme and created an installer:
http://gw2.chillerlan.net/files/GW2LocationSender-setup.exe
http://gw2.chillerlan.net/gw2location/readme.html
€€:
The main goal of this tool is to provide guilds and/or large groups of players some overview, especially in WvW (WHY groups of only 5 in WvW, Anet?). A group may share the so called “channel key” to verify their members – noone else will see their position. When you check “tracking” the app will stop sending continous data and sends only if the movement was beyond the specified value (which is ingame units). This is especially useful for track recording e.g. for wiki use like this: http://wiki-de.guildwars2.com/wiki/GW2Wiki:Projekte/Interaktive_Karten/Bücherwurm_Bwikki (i’ve not yet implemented the track recording, but will do in the next days).
I recommend Overwolf, so that you can browse the map ingame: http://www.overwolf.com/
€€€:
Support IRC: #Gw2Maps or #chillerlan or #gww on irc.eu.gamesurge.net
(edited by smiley.1438)
Well, not really an outage, but is it just me or aren’t the tiles updated with the new map yet?
Oh and while i’m at it:
According to texture_dims, these tiles should exist, right? (They actually do exist, but only for zoom level 1 and 2)
GET https://tiles.guildwars2.com/2/1/3/0/0.jpg 403 (Forbidden) tiles.guildwars2.com/2/1/3/0/0.jpg:1
GET https://tiles.guildwars2.com/2/1/3/1/0.jpg 403 (Forbidden) tiles.guildwars2.com/2/1/3/1/0.jpg:1
GET https://tiles.guildwars2.com/2/1/3/2/0.jpg 403 (Forbidden) tiles.guildwars2.com/2/1/3/2/0.jpg:1
GET https://tiles.guildwars2.com/2/1/3/3/0.jpg 403 (Forbidden) tiles.guildwars2.com/2/1/3/3/0.jpg:1
GET https://tiles.guildwars2.com/2/1/3/4/0.jpg 403 (Forbidden) tiles.guildwars2.com/2/1/3/4/0.jpg:1
...
http://gw2.chillerlan.net/examples/gw2maps-gmaps-simple.html -> switch to the mists and see
Second point: the map uploaded, as noted above in Smiley’s post, actually IS a better map overall. It was constructed using the tiles API.
These maps are actually not generated by the API/Tile Service. The API uses .jpeg while the maps God Of Fissures created are raw bitmap format extracted from the gw2.dat.
btw. the world_id is the current world_id, which means that you can also see on which overflow server you are
(yes, lookin at you anet!)
€: it doesn’t send the overflow world id, just a garbage value <.<
(edited by smiley.1438)
One question: is the map_id unique across all continents or is it unique per continent?
SICK KITTEN!
http://gw2.chillerlan.net/examples/gw2maps-jquery.html
:D
IAll condensed in one ugly block of code so I don’t have to look at it so much
Ugly function is ugly:
function recalcEventCoords(cr, mr, p){ // continent_rect, map_rect, point
return [(cr[0][0]+(cr[1][0]-cr[0][0])*(p[0]-mr[0][0])/(mr[1][0]-mr[0][0])),(cr[0][1]+(cr[1][1]-cr[0][1])*(1-(p[1]-mr[0][1])/(mr[1][1]-mr[0][1])))]
}
(edited by smiley.1438)
Ok, now that i’ve spent some hours on merging the event_details into the map data, please…:
- order the events by map (see screen) – or even better: merge them into the floor.json
- recalculate the coordinates so that they match the format given by the texture_dims/continent_rect/clamped_view: X,Y 0 top left (you can then also drop the map_rect in the floor.json)
- spheres and cylinders? We draw 2D maps unless we’re using Google Maps’ 45° view… so you can safely drop all z data as it is useless overhead
- the flags seem to be pretty useless right now, i’ve only seen “group_event” so far. It would be better if we knew the exact event type according to the list in the wiki - a key “event_type” would be useful
Thanks in advance
(edited by smiley.1438)
Force ANet to build the game a new DX11 engine, one capable of handling massive amounts of people on screen at once
Even better: hire id Software to pimp the tech5 engine (there’s no engine like an id engine^^) and make it platform independent
(and fire whoever invented Trahearne…)