Code Monkey home page Code Monkey logo

keystone.guru's Introduction

alt text

About Keystone.guru

Keystone.guru is a website where users can build and find their favorite routes for completing in Mythic Plus in World of Warcraft®: Shadowlands™. This repository contains the source code of (most parts of) the website. It is built with Laravel 8.0 using jQuery, PHP and MySQL. It uses a ton of other libraries such as Leaflet for map displaying, Puppeteer for thumbnail generation, REDIS for cache, Laravel Echo Server for real-time communication and much, much more.

The website is free to use, now and forever. You may support the development of this website by becoming a Patron on Patreon.

Features

  • Full interactive Leaflet map of all Classic™, Wrath of the Lich King Classic™, Battle for Azeroth™, Shadowlands™ and Dragonflight™ dungeons
  • Enhanced dungeon map images to allow for 5 zoom levels
    • Dungeon mapping shared with Mythic Dungeon Tools for a seamless integration (thanks to Nnoggie for collaborating)
  • Full import/export support for Mythic Dungeon Tools strings
  • Discover page where you can easily find popular routes created by other users
  • Search function for looking up routes others have made
    • Search by dungeon, affixes, target key level, ratings, author or whether enemy forces have been reached or not
  • An up-to-date overview of upcoming affixes and their time based on your region
  • Generate a SimulationCraft string to simulate your route and optimize your pulls
    • Takes into account travel distance between pulls, enemy health, party-wide buffs etc.
  • View dungeon mapping without creating a route through the Explore section
  • Temporary routes available in which you can try out a quick route or the website at large with no strings attached
  • Mobile friendly!
  • In collaboration with Raider.io, the Auto Route Creator keeps track of your routes as you do them in-game. For more info see the Raider.io article on the Auto Route Creator

Registered user features

  • Register through Google, Discord or Battle.net if you don't want to create a Keystone.guru account
  • Route planning functions such as
    • Plotting a path through the dungeon, allowing a route to split up should the need arise
    • Free-drawing of lines
    • Easy creation of pulls of which enemies to kill and optionally where
      • Assign abilities that your party should utilize directly to a pull
      • Add a description to a pull
      • Manage your pull colors by applying a custom gradient
    • Various icons with optional comments to indicate difficult enemies, strategies to use or abilities to use
    • Various publishing options for your route - keep it private, share it with your team or with everyone
    • Attach attributes to your route to give an indication of difficulty (death/invisibility skips or classes required)
  • Collaboration with your group members through Teams
    • Attach routes to a Team for easy sharing with your group members
    • View/edit routes in real-time Google Docs-style, synchronizing your changes to all other viewers or editors
    • Permission management for who can view or edit routes attached to your team
  • Favorite routes you liked best for easy reference later on
  • Tag routes for managing your stockpile of routes

Patreon features

  • No ads
  • Create animated lines on the map
  • Create unlisted private routes that can be shared with others by link

Revered Patreon features

  • Enhanced SimulationCraft support such as mount support
  • Grant an ad-free experience to up to 5 of your team members

Developer docs

The Swagger documentation that describes the API can be found at https://keystone.guru/api/documentation. Need a specific endpoint for your tool? Let me know, and I'll see what I can do for you.

Not included in this repository

  • Map tiles of all dungeons
  • Software used for creating said map tiles (self-made)

Contributing

Contribution can be done in a lot of ways in this project! If you got programming or artist skills and wish to contribute, I could use help! Please raise an issue here or send me a dm on Discord (Wotuu#1937) so I can help you get started on something cool!

Security Vulnerabilities

Any security vulnerabilities should be reported directly to myself on Discord (Wotuu#1937) or an e-mail to [email protected]. It is greatly appreciated if you do this prior to mentioning the vulnerability in public.

If you found a security vulnerability, do not abuse the vulnerability for more than is reasonably necessary to confirm the issue exists.

License

At this time this project has no license attached to it while I explore the options of licensing. If you have any suggestions for a fitting license don't hesitate to raise an issue.

Contact

Found an issue? Want to leave some feedback? Can't figure something out? Please drop by on Discord, open an issue on GitHub or send an e-mail to [email protected].

Disclaimer

World of Warcraft, Warcraft and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries. This repository/website is not affiliated with Blizzard Entertainment.

keystone.guru's People

Contributors

connercoding avatar dependabot[bot] avatar forced1988 avatar laravel-shift avatar raikuxq avatar triat avatar wotuu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

keystone.guru's Issues

Redo displaying of ads

I used the automatic placement of Google Ads on the website to save me having to do it myself. The results looked alright in the beginning, but in the end it placed them on strange positions all across the page. Not to mention the new UI layout completely broke with it enabled at all.

Time to put in some more effort for a tailored experience that won't annoy as much people as they would with the automatic placement.

Clone route button

There needs to be a clone button, if the weekly affixes change, I suspect people will rather adjust their existing routes than make new ones. To keep a healthy amount of routes for each affix, a clone button would be nice so that people can easily make a copy and adjust that one instead.

Patreon rewards not being applied

Was sort of a known issue; Patreon did not allow me to mock a Patron to see what their API sends me. Now that I have 2 patrons (wohoo!) I can fix this.

This is a high priority issue.

Display enemy abilities from MDT

A bunch of enemies have dangerous abilities, such as stuns, silences, magic shields (Kings' Rest/Tol Dagor) etc etc. It'd be great if these abilities could be mapped and displayed on the map itself.

First would be to gather relevant info about stuns etc., then to devise a system on mapping them and displaying them on the map in an intuitive way.

Various enemy display layer selection

Currently you can only see enemies as a form of their aggressiveness (red, green and yellow dots). There needs to be more data on type of enemy (Undead, Humanoid etc.), perhaps some others, and you need the ability to switch around between various display layers. Proposed layers:

  • Enemy type
  • Individual enemy forces
  • Ranged/melee/healer/caster type icons
  • Seeing through stealth
  • Some form of difficulty perhaps?

There should be a dropdown towards the top right where you can select what type of metric you want to display for all enemies on the map.

Mapping MDT clones to enemies

MDT uses a different format for presenting enemies/NPCs than Keystone.guru. MDT has a list of NPCs, and each NPC contains a list of 'clones' which equal the enemies in keystone.guru.

The problem is that these 'clones' only consist of an X, Y, sublevel (floor) and a group number. Possibly the array index can be used as well. In order to map the clones to the enemies, we're going to have to map it based on these variables. I propose the following:

  1. Check out the MDT project somehow
  2. Use https://code.google.com/archive/p/wowlp/source/default/source Parser.php to parse the .lua arrays to PHP arrays
  3. Use the php arrays to show MDT enemies on the admin map
  4. Allow graphic mapping (by coupling/clicking) enemies on the admin map.
    4.1. As for coupling, we can probably use the NPC id and the index of the clone.

This way, if a string is imported, we can match the user's selected enemies in MDT to keystone.guru enemies and save them appropriately.

Route deletion

It is currently not possible to delete your routes. This should be easily done by adding a delete button to your profile's "my dungeon routes". Also add a confirmation so people don't accidentally delete routes. Soft delete things though, if someone visits a deleted route, a message should show that the author has deleted said route.

Create route drafting

When adding a new route, the moment you hit the submit button it's immediately published and can be found in the search etc. At this point you want to edit the route and fill it up to your liking in peace, not have a half-ready route clogging up the search table.

So make a flag to mark routes as draft, then add a publish button to get them out of draft state. Adjust search to no longer search for those routes that are in draft. Also convert all existing routes to draft state so people have to be explicit about publishing.

Add a FAQ section

To answer some, you know, FAQ. I also noticed the Infested functionality is not being used, I can imagine this is because people don't know how to use it since it's kinda not explained anywhere.

Infested affix support

I wanted to include this for launch, until I saw that the Infested mobs change every week and thus cannot be mapped traditionally.

I was thinking about adding a voting system where people can vote a mob yes/no as being Infested this week. Min amount of votes something like 2-3, if there's that amount of votes the mob is marked as Infested. No votes to allow incorrectly marked mobs as Infested as non-infested again if the amount of No votes is higher than the amount of Yes votes.

Any other ideas perhaps? This is something I want to work on sooner rather than later.

Rework map edit/view page so the map is full-screen

For quick reference:

Maybe increase buttons size of main tools a little bit so they are more easier to spot. Or at least give some kind of color for main features (path and kill zones). Hotkeys for those features would be nice as well. I think left click for path, and right click for adding kill zone could work. Move map with middle mouse. It would give some smoothness for using this website. Now I feel like I end up searching correct tool.

Also definitely make map to be size of actual screen! Nothing is more horrible than have two moving components (map move, page scroll) in the same page. Makes things really messy! Now that I scroll things just go kinda ape sh*t because it can both zoom map and scroll page.
The delete button is a bit clunky to change over to. I'd prefer a right click option, which seems to already have the plumbing in place.

I think the right click option is a good idea. I'll have to think about it some more if this is a good addition moving forward. It may get a bit too easy to delete things. But then again it's quite easy to replace that which you just accidentally deleted.

Scrolling is perhaps another issue of its own, but the hotkeys + increase button size should be easily done.

Add more options to routes to help the search page finding them

For now I've been thinking about a list of items you can select which characterize your run, such as:

Shroud required
Invis pot required
Run contains Death skip
Run contains Warlock skip
Run contains Mage skip (slow fall skip in Shrine ot Storm?)

List goes on; basically anything that falls in the category of "my group can't do these things because of composition or skill, I don't want to see these hard routes".

Require users to accept privacy policy etc.

Since this is sort of required, add a checkbox when registering so that people have to agree to all legal documents. Also, prompt any already registered users to accept the policy. If they don't, they shouldn't be able to use the website (modal popup on most pages is enough).

It's one of these things I'd rather not do but it's gotta be done.

Hotkeys

Add support for hotkeys, there's already a Hotkeys class since it works for the admin side. Just needs to be ported to the client side.

Route author feedback from their viewers

Currently publishing a route does not really reward the author in a meaningful way. There should be some metrics so authors are more incentivised to publish more routes. Some ideas include:

  • Thumbs up/down by users (they completed a dungeon with this route and found it good/bad)
  • Show amount of views their route has gotten

Above list can be expanded as I think of things.

Mapping issues

A bit of an ongoing issues for known mapping issues. I'll close and create new issues but for now this is a gathering point for issues that have been reported.

Atal'Dazar

"packs were missing from the atal map, just one skyscreamer and another pack with a skyscreamer/toxic saurids"
image

This is probably a duplicate of the above, but putting it in here anyways:
"There seems to be a pack of Saurids missing in Atal on the priestess side of the bridge. The pack closest to the center is a pack of Saurids, and the one closer to the gate is Saurids + Skyscreamer."

Underrot

"there seems to be a few missing packs in underrot after the first boss. There is a patting pack of plants and a pack with 2 bloodswarmers i believe]"

Shrine of the Storm

  1. Bottom left of first room should have 6 initiates not 5
  2. pack of blobs after the first room above the fountain should have 12 blobs not 10
  3. the tidesage initiates in the same pack should be temple attendants
  4. there is an extra templar pat that you have going in a sort of zig zag pattern (not the one that goes up both sets of stairs)that doesnt actually exist (near the rising tide)
  5. galecaller apprentices are listed at 1 enemy forces. should be 9
  6. the pack to the north after the bridge with the guardian elemental should be 2 temple attendants and a galecaller
  7. the pack with the deepsea ritualist and 4 sailors should be linked.
  8. the pat near that pack should patrol north, not west
  9. there are no tentacle mobs in the room with 2 drowned depthbringers
  10. Collosal tentacles are worth 10 forces, not 9
  11. I do not believe the collosal tentacles and the abyssal cultists are linked. I think i've pulled them seperately before
  12. the north pat on that bridge should be 3 cultists and a death bringer, the south pat should be 3 death bringers and a cultist
  13. there is a 4th pack of 8 eels before the last boss.

Tips based on group composition

Based on your group composition, you should be able to get a list of tips for a specific dungeon. Such as, as a DK you can enslave XYZ mob for added benefits, as a Warlock you can use XYZ skip etc. Apparently wowhead class guides has a list of class based tips for each dungeon. This could be a starting point for implementation.

Question is how we're going to implement this for the end user, I was thinking perhaps a pulldown you can summon inside the map. If I'm going to implement a full-screen map the information is still got to be accessible. Some food for thought.

Graveyard markers

Make something to put markers at places where you resurrect in the dungeon.

M+ level selection

Currently the site assumes M+ level 10 at least (since 4 affixes). However, this is not the case for all runs. You should be able to select a M+ level (or range) and get the appropriate amount of affixes for that run.

Also, an option to somehow select a specific M+ level and have all health of enemies on the map be displayed the correct amount of health points.

Co-operative real-time editing of routes.

Using some real-time technologies, it would be great to collaborate with multiple people on creating one route. There's multiple technologies that could possibly be used for this, such as Signalr and likewise (Forced). I'm thinking of Vue since that's work relevant, but I gotta read up on that first.

Once I got the real-time bit going of the frameworks I actually do not think it'll be that much work. The JS back-end is quite OK done and I think it can be expanded easily.

Ticket for the future; it's a nice to have but low priority for now.

Integration with Method Dungeon Tools

Being able to export from Keystone.guru to MDT would be great. Do some research about how to generate a working string to import in MDT. Also perhaps contact the author(s) of MDT and see if there's some option for collaboration?

Change default sorting on route page

What should the default sorting be? It's by alphabet now, but that doesn't look too great. Weighted ratings? Sort by routes with full enemy forces?

Re-introduce sorting by more columns in the routes overview

This was removed because it was non-functional. It's a problem because the Datatables library does not play nice with nested relationships and then possibly sorting by them. Two options:

a) Fix the Datatables library and get rid of the custom code that's currently doing the actual work. I replied to/opened an issue in the Datatables repository and that contained a link which may be of use for this.
b) Get rid of Datatables and go full custom (and thus also possibly revert the custom change to Tracker to make that one work)

Labelled as a bug as this was broken but just got removed to not mislead people. Still a bug.

Consolidate map startup requests

Currently all enemies, packs, comments, killzones etc. are all loaded separately from each other. This works, but it unnecessarily causes the page to load slower than could be the case. Ideally, there should be one endpoint called mapdata or something, which fetches all of these things at once and returns them.

Server-side this is not much of a problem, client-side this will require some rewrites to the way MapObjectGroups receive their data. They currently fetch their own data, this should probably be handled by the map instead, which then delegates the returned data to the MapObjectGroups instead. But that's still open for interpretation.

MDT export

We need to be able to convert all keystone.guru data to a MDT import string. This includes enemies, free drawing, etc.

Technical: Feedback on failed requests

If requests to the web server fail for some reason, there is no feedback to the user that things are broken and/or not syncing properly. There should be a feedback mechanism that displays any issues to the user so they know something's up.

Support for (class-specific) skips

The possibilities for these skips should be shown on the map. Certain skips could be displayed in grayscale, with colors the moment the user mouses over/activates them. There needs to be a system for these kind of skips, preferably some generalized system that can be used for more things, like an A to B skip system, since that is technically what a skip is.

In the same vein, there's some skips in dungeons that you can do if you die. For example going left right after the first boss in the Underrot after you killed the third boss, or the Brazier skip in Shrine of the Storm right after the first boss once you killed the 2nd boss. They should always be marked.

Race/class/spec selection bugs

If you fail the validation for creating a dungeon route, your race/class/spec selection is completely cleared.

If you select a 5th race but not a 1st, 2nd, 3rd, 4th race, the 5th race will apply to the first race instead.

Internal: rename Route to Path(, DungeonRoute to Route?)

Terminology is getting a bit confusing internally. Outward facing, a DungeonRoute is a Route, it should just be called that internally as well. An internal Route is also called a Route, it should just be a Path (or similar), it's less confusing.

You can select multiple killzones

This should not be possible, it causes all sorts of weird issues with mob counts etc. You cannot kill an enemy twice.

Also, deleting a kill mark does not remove the trash attached from the % counter

Create free drawing tool

In order to be compatible with MDT free drawing, we're going to need to be able to do the same on the keystone.guru map. There's libraries for this, investigate which library would be of use. There needs to be support for map zooming as well.

Decode MDT string to JSON/PHP array and vice versa

From a string encoded by MDT, we need to decode it so we can properly parse it and know what to import. For how MDT does it, to quote /u/BlackFayah: In case they don't want to collaborate, this is where the magic happens: https://github.com/nnogga/MethodDungeonTools/blob/master/Transmission.lua. They serialize > compress > encode.

MDT import basics

There needs to be an interface to start importing your route from a MDT string. The database needs to save your original import string used to generate the route. If there's any errors that'd allow for easier debugging. Also, if I decide to release with only a partial import (not wise imho, but still) I can do a partial re-import later when I've added the missing features.

Add regions + timezone to user profiles

Make it so that a user profile is coupled to a region. A region is used for determining when M+ dungeons reset and their affixes change, same can be said for timezone but then with more accuracy. As part of this, make a set of classes which make it easy to query what the current affixes are for this week, when the next week starts etc.

Teams for grouping routes

A new feature that I'm eager to work on is something called teams. Or something close to it. The idea is that everyone can make a squad, invite people to join said team, and the team serves as a hub for the routes you use as a group. You can view your team's "home page" and see your routes there, see what routes your team members are working on etc.

There's probably more to think of but this one helps you organize routes for your team and keep them together.

Tidy up the profile page

It's starting to become a massive list of options. Add some tabs or something to make it better.

Proper versioning and dynamic changelog

The site could use proper versioning (it's stuck in 1.0 now), there's no way to see from the version number what version the site is in or when the last change was done. I don't want to manually have to adjust a version somewhere, there needs to be some sort of tool to fix this for me, somehow.

I also want to make changelogs dynamic the way Factorio did it. If you didn't see the changelog for the last two releases, they automatically get put together and you can easily search through existing changelogs for a specific change. And/or couple any change to either a new feature, bug fix or performance increase (or more) so people can filter based on their interests.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.