Git Product home page Git Product logo

maps-of-exile's Introduction

Maps of Exile

Shows and filters map/card/map metadata from various sources.

Adding or updating map metadata

For non-developers

Simplest way to add new map even if you are not knowledgeable about inner workings of the project or do not know how to code is to open an issue and someone will implement it.

For developers

Running data updater

You need to have GOOGLE_API_KEY to grab data sheets via google api (see Setting up API keys). This is free and you can generate one for yourself.

Install dependencies:

pip install --user -r data/requirements.txt

Update data:

python data/main.py globals,monsters,cards,maps

Running the site

Install dependencies:

(cd site && npm install)

Run the site:

(cd site && npm run start)

Understanding the data

/data/cards.json contains extra card metadata
/data/maps.json contains extra map metadata

Full format for map metadata is:

{
  "name": "Map name",
  "tags": {
    "league_mechanics": false,
    "delirium_mirror": false,
    "outdoors": false,
    "linear": false,
    "few_obstacles": false,
    "boss_not_spawned": false,
    "boss_rushable": false,
    "boss_phases": false,
    "boss_soft_phases": false,
    "boss_separated": false
  },
  "rating": {
    "layout": 10,
    "density": 10,
    "boss": 10
  },
  "info": {
    "field_name": "additional info about field. can be 'boss' for boss notes, 'density' for density notes, 'not_spawned' for tag notes etc etc",
    "boss": "boss notes example"
  }
}

See issue mentioned in For-non-developers section for reference for fields.

Sources of data

Spreadsheets

Stacked Decks card + weight spreadsheet for 3.22 by nerdyjoe from Prohibited Library discord: https://docs.google.com/spreadsheets/d/1PmGES_e1on6K7O5ghHuoorEjruAVb7dQ5m7PGrW7t80

Stacked Decks card spreadsheet for 3.21 by _๐ŸŒ from Prohibited Library discord (used as fallback when weight for card is not found):
https://docs.google.com/spreadsheets/d/104ESCXdjVGBSF1BNbClfoilVEYC7pIHZxOSsb5W-_r4

Mob count spreadsheet by not_Shorex (used for Density, contains exact mob counts per maps, averaged):
https://docs.google.com/spreadsheets/d/10ssi9lOJvDOo3G8Iq5xRyDv6-nbCJSxJhB5ANtaUn6w

Map ratings spreadsheet by FixFaxer (used for Layout, Boss and as fallback when mob count is not found):
https://docs.google.com/spreadsheets/d/1fIs8sdvgZG7iVouPdtFkbRx5kv55_xVja8l19yubyRU

Map reference spreadsheet by Anjerosan (used for boss notes and various metadata about layout, like outdoors/linear etc):
https://docs.google.com/spreadsheets/d/10rPJ5oMb5DoQ55iqWkiVonq5KofUWl8DJgPfQJIlrb0

Websites/APIs

Area data from PoeWiki (used for listing all maps and areas and grabbing area levels and area bosses):
https://www.poewiki.net/wiki/Area:MapAtziri2 (example of Alluring Abyss)

Card data from PoeWiki (used for listing all cards and getting card metadata like drop sources and drop restrictions):
https://www.poewiki.net/wiki/House_of_Mirrors (example of House of Mirrors)

Monster data from PoeWiki (used for getting monster names for monster IDs):
https://www.poewiki.net/wiki/Monster:Metadata/Monsters/Atziri/Atziri2 (example of Atziri)

Layout images from PoeWiki (a lot of them filled by me and other contributors here): https://www.poewiki.net/wiki/File:Cemetery_Map_area_screenshot.jpg

Card prices from PoeNinja (used for assigning card prices + getting card data like art, stack size and rewards):
https://poe.ninja/challenge/divination-cards
https://poe.ninja/api/data/itemoverview?league=Crucible&type=DivinationCard (api call)

Map metadata from PoeDB (used for retrieving area art, area tags and atlas data like atlas position, connected maps, atlas map area levels):
https://poedb.tw/us/Maps#MapsList
https://poedb.tw/us/Colonnade_Map (example of single map)

Images from Poe CDN (used for map images, card art):
https://web.poecdn.com/image/Art/2DItems/Maps/UniqueMap2.png (example)

So what it actually does?

The site is split to 2 parts, data generator and then the actual site.

Data generator (/data)

First, it grabs all cards from Poe Wiki (contains drop area ids, drop monster ids, drop level requirements). This builds the initial card list.

Then, it grabs all card price data from Poe ninja and merges this data with card list.

Then it grabs card weight data from card weight spreadsheet and merges this data with card list.

Then it grabs data from stacked deck spreadsheet to get weights for newer cards missing from card weight spreadsheet and calculates weight for new cards based on common denominator (in this case Patient card which is present in both card weight spreadsheet and stacked deck spreadsheet)

This card list with card prices, card metadata and card weights is stored to be used in site as .json.

Then in grabs list of all areas from Poe Wiki (this contains area ids, area monsters, area levels).

Then it grabs extra map metadata from PoeDB (atlas position, map connections, pantheon, up-to-date area levels) and merges this data with map list.

Then it grabs map density from spreadsheet (in raw mob count) and merges the data with map list

Then it grabs map ratings from spreadsheet (layout, density, boss) and merges the data with map list (it will avoid setting density on maps that already have density set, e.g density coming from exact mob count)

Then it grabs map metadata from spreadsheet (boss info, some misc tags like outdoors, linear etc) and merges the data with map list

This map list with PoeDB, PoeWiki and spreadsheet metadata is also stored to be used in site in .json.

Site (/site)

Site simply displays all the maps with metadata, builds some tags from misc info from maps and then matches the card metadata from cards .json with card names found in map in map .json.

Then it builds filter and score on top.

There are 4 factors for score:

Layout, Density, Boss, Cards

Layout, Density and Boss is simple, each is number from 0 to 10.

Cards is a bit more complicated.

I multiply price of every card by its drop chance (calculated by comparing card weight with total drop pool weight and map weight), then add all the card "values" together to build card score for map. The card display for every map is also sorted by card score.

And on top of this you can assign "weight" to every part of the score, so Layout weight simply multiplies the Layout value by x etc etc.

In the end every part of the score is added together and then recalculated to be in between 0 and 100 (for nicer display,do not rly changes anything). And then maps are sorted by that.

maps-of-exile's People

Contributors

a3person avatar deathbeam avatar sokratis12gr 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

Watchers

 avatar  avatar

maps-of-exile's Issues

Option to have search ignore connected maps

Is your feature request related to a problem? Please describe.
when you want to exclude a map from results by searching eg.: "-carcass" it will also filter out every map connected to the map u want to exclude. (for the example it would be: Burial Chambers )

So would be nice to allow for an option which fields the search should ignore.
alternatively add an option to hard exclude certain maps.

Request: Add Filter for Kirac Divination Card Strategy

Is it possible to add a flag/filter to change weighting of divination cards to be based on the full stack size.

This is to take advantage of the strategy using Kirac missions for dropping divination cards as a full stack.

[Request] Reset Button

It would be nice to click a link to reset the filters to their default values.

Sometimes, I come here to research specific stuff, and if I return days later, it's hard to remember what I need to reset.

Thanks!

Search field improvement

Currently search field description suggests there is possibility to search more than one element when query elements are separated by comma. It may be map, card or other thing.
However when I try to find "barrows, arena" (locations) I see empty result list.
Then I assume searching for location is not supported as a regex

Mausoleum missing tag - boss not spawned

Issue description

Title says all

Map name

Mausoleum

Map image

No response

Layout rating

None

Density rating

None

Boss rating

None

Layout

  • League mechanics - If map is good for league mechanics that require some space (Breach, Legion)
  • Delirium mirror - If you can hold delirium mirror through whole map or delirium mirror gets good value in it
  • Outdoors - If map is outdoors or indoors (Dunes vs Cells for example)
  • Linear - If map is linear instead of having multiple paths to take. Map counts as linear even if the line goes in circle
  • Few obstacles - If map does not have a lot of obstacles (so for example is good for shield charging around)

Boss

  • Not spawned - If boss is not spawned on entering the map (important for Altar farming, can be verified by checking for boss altars spawning or not)
  • Rushable - If boss is close to map start or can be rushed quickly and reliably, a lot quicker than completing whole map
  • Phases - If boss has hard phases that force you to wait (delay on initial boss spawn counts too)
  • Soft phases - If boss has soft phases that can be bypassed with DPS (teleports at certain threshold, heals, partial damage reduction)
  • Separated - If boss room is separated from rest of the map

Any out of atlas map doesnt respect voidstones option

Issue description

When you pick voidstiones number, maps that out of current atlas doesnt changed according to watchstones count,
as i understand that you cant predict what tier they be on 1-3 voidstones, at 4 they always should be t16,
additional proposition:
0 voidstones - always t1,
1 voistone - always t5,
2 voidstones - always t9,
3 voidstones - always t13,
4 voidstones - always t16,
image

Map name

None

Map image

No response

Layout rating

None

Density rating

None

Boss rating

None

Tags

  • League mechanics - If map is good for league mechanics that require some space (Breach, Legion)
  • Delirium mirror - If you can hold delirium mirror through whole map or delirium mirror gets good value in it
  • Outdoors - If map is outdoors or indoors (Dunes vs Cells for example)
  • Linear - If map is linear instead of having multiple paths to take. Map counts as linear even if the line goes in circle
  • Few obstacles - If map does not have a lot of obstacles (so for example is good for shield charging around)
  • Boss Not spawned - If boss is not spawned on entering the map (important for Altar farming, can be verified by checking for boss altars spawning or not)
  • Boss Rushable - If boss is close to map start or can be rushed quickly and reliably, a lot quicker than completing whole map
  • Boss Phases - If boss has hard phases that force you to wait (delay on initial boss spawn counts too)
  • Boss Soft phases - If boss has soft phases that can be bypassed with DPS (teleports at certain threshold, heals, partial damage reduction)
  • Boss Separated - If boss room is separated from rest of the map

Add standardized mob count as a weighted element in map score calculation

The original data on mob count is based on 10 runs of a map. The author has also included the difference between the maximum and minimum mob count in each map.

By standardizing the average mob count using the formula (count_average^2)/(count_max-count_min), we can expect to generate a rank that promotes maps with less volatile mob counts and higher mob counts. This is achieved through two parts of the formula: 1) count_average/(count_max-count_min) promotes maps with less volatile mob counts, and 2) count_average*count_average/(count_max-count_min) promotes maps with higher mob counts.

This standardization process and result can be treated as another weighted element. Users can set the weight to 0 to get the same result as before or make it non-zero to use the standardized mob count result.

"Chaos per map" sometimes is wrong

"Chaos per map" sometimes is wrong.

Steps to reproduce the behavior:

  1. Search for "The Chains that Bind"
  2. Hover over card name on each map entry that drops it.
  3. For some maps it's 1 card per 1 map; for some maps it's 1 card per 2 map. But in both cases profit per map is the same.

Expected behavior:
Correct profit per map.

Desktop:

  • Linux
  • Chrome
  • 118.0.5993.117 (Official Build) (64-bit)

Additional context
Just thoughts: maybe some weird rounding issue?

Core

Issue description

How come boss with long phases is "boss rushable" + you have to kill 3 mini-bosses before you kill map boss

Map name

Core

Map image

No response

Layout rating

None

Density rating

None

Boss rating

1

Layout

  • League mechanics - If map is good for league mechanics that require some space (Breach, Legion)
  • Delirium mirror - If you can hold delirium mirror through whole map or delirium mirror gets good value in it
  • Outdoors - If map is outdoors or indoors (Dunes vs Cells for example)
  • Linear - If map is linear instead of having multiple paths to take. Map counts as linear even if the line goes in circle
  • Few obstacles - If map does not have a lot of obstacles (so for example is good for shield charging around)

Boss

  • Not spawned - If boss is not spawned on entering the map (important for Altar farming, can be verified by checking for boss altars spawning or not)
  • Rushable - If boss is close to map start or can be rushed quickly and reliably, a lot quicker than completing whole map
  • Phases - If boss has hard phases that force you to wait (delay on initial boss spawn counts too)
  • Soft phases - If boss has soft phases that can be bypassed with DPS (teleports at certain threshold, heals, partial damage reduction)
  • Separated - If boss room is separated from rest of the map

Stagnation

Issue description

Azyran's Reward seems to have a MUCH lower drop rate..

I'm running full quant build + Div scarabs ect ect

Currently have:
5/5 The Tinker's Table (1:50 maps)
5/8 The Scout (1:48 maps)
2/9 Azyran's Reward (1:27 maps)

Feels like Azyran's CAN'T be 1:27 average when I have so many more of the rarer cards...

Map name

Stagnation

Map image

No response

Layout rating

None

Density rating

None

Boss rating

None

Layout

  • League mechanics - If map is good for league mechanics that require some space (Breach, Legion)
  • Delirium mirror - If you can hold delirium mirror through whole map or delirium mirror gets good value in it
  • Outdoors - If map is outdoors or indoors (Dunes vs Cells for example)
  • Linear - If map is linear instead of having multiple paths to take. Map counts as linear even if the line goes in circle
  • Few obstacles - If map does not have a lot of obstacles (so for example is good for shield charging around)

Boss

  • Not spawned - If boss is not spawned on entering the map (important for Altar farming, can be verified by checking for boss altars spawning or not)
  • Rushable - If boss is close to map start or can be rushed quickly and reliably, a lot quicker than completing whole map
  • Phases - If boss has hard phases that force you to wait (delay on initial boss spawn counts too)
  • Soft phases - If boss has soft phases that can be bypassed with DPS (teleports at certain threshold, heals, partial damage reduction)
  • Separated - If boss room is separated from rest of the map

Baseline Calculations

Describe the bug
I was hoping to have a bit of a discussion that might help me understand the goal and calculation of the baseline weight feature.

First, I do not understand what you mean by "averaging all map weights" in the tooltip of the average card selector. Is that all the weights for all cards in the map? or all weights for all cards in all maps?

Second, if for example I set the average card of a map to be The Apothecary, I would expect that the baseline calculation to show that I am getting an Apothecary every map and not every 443 maps as it currently shows.

Can you provide a bit of explanation as to how to interpret the current baseline system? I understand that you note that you may be calculating the baseline wrong so I was wondering what goals you have for the feature.

To Reproduce
Steps to reproduce the behavior:

  1. Set the average card to The Apothecary
  2. Mouse over an Apothecary on a map like Defiled Cathedral. See the drop chance is not 1 every map.

Expected behavior
I was expecting the baseline to be somehow adjusting the drop chances/accounting for magic find since its moving the average card drop.

Initiate search directly via URL

Request:

  • would it be possible to open the site with a direct/specific search via the URL?

Use-cases:

  • direct-search from within the game-client via 3rd-party apps

  • direct-search via a browser's search-bar (customizable site search)


Context:

  • I maintain a QoL/UI overlay (Lailloken-UI) and want to add maps-of-exile to the context-menu for divination cards
    image

  • I was just going to add a simple link and have the tool copy the card's name into clipboard for pasting, but I figured I'd ask whether it was possible to add URL-searches

Improve profit predictions by taking into account the run size

Is your feature request related to a problem? Please describe.
The profit predictions are a bit misleading for maps with rare divination cards like Crimson Temple (The Apothecary).

As an example let's take The Fortunate as index card at 2 cards per map. This will result in a 210c profit per map prediction for Crimson Temple, ranking it as the most profitable map to run. The Apothecary at drop rate of 1/103 will provide 68c part of profit per map.

However, at a drop rate of 1/103, the odds of not dropping The Apothecary would be (102/103)^n, so
At 40 attempts, the odds of not dropping The Apothecary are ~67%.
At 60 attempts, the odds of not dropping The Apothecary are ~45%.
At 103 attempts, the odds of not dropping The Apothecary are ~36%.
At 165 attempts, the odds of not dropping The Apothecary are ~20%
At 309 attempts, the odds of not dropping The Apothecary are ~5%

While it is true that Crimson Temple is most profitable to run when we average over an infinite set of attempts, the picture is quite a bit different in smaller sets.

Describe the solution you'd like
I would like a field where user can input the count of maps they intend to run. Could also be a dropdown with predefined numbers.
Then adjust the estimated earnings by reducing rare cards (ones that are 1/m chance to drop) profit portions according to the chance of them not dropping.
For the above example, if user inputs 40 as intended run size, I think it is fair to either not include The Apothecary profits at all, or at least reduce them by 67%.

Add an visual warning/explanation for the user that the profits prediction may be inaccurate due to too low set size.

Describe alternatives you've considered

Maybe instead of a single profit estimation number there could be several numbers like "Lucky/Average/Unlucky".
Where "Lucky" would be earnings estimated with 2/m card drop probability, and unlucky would be 1/2m.

Additional context

The Fortunate weight

Issue description

The weight of the new card "The Fortunate" listed as 599 is wrong.
During my testing i picked up all Imperial Legacy and The fortunate. In 48 maps i got:
386 Imperial Legacy
48 The Fortunate

In the spreadsheet listed in sources, weight of The Fortunate is closer to 1500 which matches my experience above.

Map name

Dunes

Burial chambers

Issue description

Ive run over 600 fully juiced burials in this league so far and im certain doctor drop rate is heavily nerfed. The Fortunate was quite correct compared to dragons heart but 22 dragons heart compared to 2 doctors does not at all represent the 15 to 18 weighting the website states. Fortunates were above 1500 so that fits compared to dragons heart. Maybe I was just incredibliest unlucky but that would be so far of an outlier that doctor must have been nerfed

Map name

None

Map image

No response

Layout rating

None

Density rating

None

Boss rating

None

Tags

  • League mechanics - If map is good for league mechanics that require some space (Breach, Legion)
  • Delirium mirror - If you can hold delirium mirror through whole map or delirium mirror gets good value in it
  • Outdoors - If map is outdoors or indoors (Dunes vs Cells for example)
  • Linear - If map is linear instead of having multiple paths to take. Map counts as linear even if the line goes in circle
  • Few obstacles - If map does not have a lot of obstacles (so for example is good for shield charging around)
  • Boss Not spawned - If boss is not spawned on entering the map (important for Altar farming, can be verified by checking for boss altars spawning or not)
  • Boss Rushable - If boss is close to map start or can be rushed quickly and reliably, a lot quicker than completing whole map
  • Boss Phases - If boss has hard phases that force you to wait (delay on initial boss spawn counts too)
  • Boss Soft phases - If boss has soft phases that can be bypassed with DPS (teleports at certain threshold, heals, partial damage reduction)
  • Boss Separated - If boss room is separated from rest of the map

Desert drops the doctor

Issue description

Doctors drop from this map

Map name

Desert

Map image

sorry I didn't took the pic while it lays down but it dropped for me

Layout rating

None

Density rating

None

Boss rating

None

Tags

  • League mechanics - If map is good for league mechanics that require some space (Breach, Legion)
  • Delirium mirror - If you can hold delirium mirror through whole map or delirium mirror gets good value in it
  • Outdoors - If map is outdoors or indoors (Dunes vs Cells for example)
  • Linear - If map is linear instead of having multiple paths to take. Map counts as linear even if the line goes in circle
  • Few obstacles - If map does not have a lot of obstacles (so for example is good for shield charging around)
  • Boss Not spawned - If boss is not spawned on entering the map (important for Altar farming, can be verified by checking for boss altars spawning or not)
  • Boss Rushable - If boss is close to map start or can be rushed quickly and reliably, a lot quicker than completing whole map
  • Boss Phases - If boss has hard phases that force you to wait (delay on initial boss spawn counts too)
  • Boss Soft phases - If boss has soft phases that can be bypassed with DPS (teleports at certain threshold, heals, partial damage reduction)
  • Boss Separated - If boss room is separated from rest of the map

Negated search inputs

If I want to filter out all the maps that have phased bosses I thought I could click on the -bosses with phases tag but that just filters to those maps. I was not able to find a way to negate a search but I think that would be useful.

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.