benjaminjackman / looty

Looty! A tool for Path of Exile that makes inventory searching fun!
GNU General Public License v2.0
61 stars 21 forks source link

[Discussion] Minor upgrades and new item scoring #14

Closed PetePete1984 closed 7 years ago

PetePete1984 commented 7 years ago

Hey, I've made some experimental changes on the fork I started all these months ago; nothing too wild, but here's a list:

  1. building under windows is possible (and hopefully won't brick under Linux - I don't have access to a Linux machine anymore); a better solution would pull the directory path separator from the environment
  2. fixed some of the renamed affixes like stun and block recovery, flask charges used etc.
  3. (have not added poison immune flasks yet, don't know how I'd have to add them to the table view)
  4. added all of the new map fragments that were introduced since prophecy (pale council keys, shaper fragments, reliquary key)
  5. added relics and sealed prophecies as possible rarities / frame types so they don't show up as UNKNOWN
  6. added rudimentary support to find leaguestones by type, but without parsing their properties
  7. and the big ticket: there's a relatively recent reddit post here https://www.reddit.com/r/pathofexile/comments/56rtmk/the_is_this_item_worth_something_guide/ that had some useful rules of thumb for item valuation and I tried to implement most of them.

The problem I have with the scoring is that I don't exactly understand how Scala does things; I'd love to bracket the item rules by item type etc. (ie simple if-conditions) but the item scorer's structure is confusing to me, heh. Feels like there's some functional programming magic happening with implied parameters.

Also, moving the scoring rules to a data-based format would be highly preferable but that's probably beyond my current capabilities. Path of Building does some clever things with auto-updating Lua files for its item data and DPS algorithms, but those still need to be maintained by somebody.

Anyway, if anything of that seems useful feel free to review and merge it as you see fit! My stash would be unusable without Looty, so I just wanted to give something back :)

benjaminjackman commented 7 years ago

This is awesome i am pretty busy at the moment for the next couple days, but I will try really hard to give some more pointed feedback and merge stuff in as soon as I have a chance.

Yeah I should have probably done something simpler for the affix parsing code. It's definitely using a lot of functional programming / scala specific voodoo that I would probably avoid now. Thanks for struggling through it, i had a tersity / verbosely understandable trade off and probably went a bit too far in the tersity direction.

Really quick, in terms of the scoring stuff. I definitely will try to get that in ASAP as that sounds like an updated version of what I did which similarly based off a reddit post (though a much much older one) . I will probably just keep the old one and them make a custom 2 column with your changes.

Overall I have taking a lot of approaches to implementing something there for users to define custom scoring columns. The goal was/is to have something in place that let's the users write a bit of code that given an item spits out a score. I had done some work on an interpreter but never really finished it. Maybe I should look into something off the shelf rather than writing a parser myself.

One I did that another thing I wanted to make was a loot overlay that placed items on a grid precisely pixel for pixel matching how the loot is presented in game in their inventory / stash tab and superimposed those scores on the items so that the user can either lower the alpha on their browser window or just ALT-TAB or have it up on a second monitor so that they can quickly see what to junk / keep from their stashes / inventory pages based on their custom scoring metric.

On Thu, Apr 13, 2017 at 10:09 AM, PetePete1984 notifications@github.com wrote:

Hey, I've made some experimental changes on the fork I started all these months ago; nothing too wild, but here's a list:

  1. building under windows is possible (and hopefully won't brick under Linux - I don't have access to a Linux machine anymore); a better solution would pull the directory path separator from the environment
  2. fixed some of the renamed affixes like stun and block recovery, flask charges used etc.
  3. (have not added poison immune flasks yet, don't know how I'd have to add them to the table view)
  4. added all of the new map fragments that were introduced since prophecy (pale council keys, shaper fragments, reliquary key)
  5. added relics and sealed prophecies as possible rarities / frame types so they don't show up as UNKNOWN
  6. added rudimentary support to find leaguestones by type, but without parsing their properties
  7. and the big ticket: there's a relatively recent reddit post here https://www.reddit.com/r/pathofexile/comments/56rtmk/ the_is_this_item_worth_something_guide/ https://www.reddit.com/r/pathofexile/comments/56rtmk/the_is_this_item_worth_something_guide/ that had some useful rules of thumb for item valuation and I tried to implement most of them.

The problem I have with the scoring is that I don't exactly understand how Scala does things; I'd love to bracket the item rules by item type etc. (ie simple if-conditions) but the item scorer's structure is confusing to me, heh. Feels like there's some functional programming magic happening with implied parameters.

Also, moving the scoring rules to a data-based format would be highly preferable but that's probably beyond my current capabilities. Path of Building does some clever things with auto-updating Lua files for its item data and DPS algorithms, but those still need to be maintained by somebody.

Anyway, if anything of that seems useful feel free to review and merge it as you see fit! My stash would be unusable without Looty, so I just wanted to give something back :)

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/benjaminjackman/looty/issues/14, or mute the thread https://github.com/notifications/unsubscribe-auth/AADyYOSop8ZA-6xAbP5aI_MzsfnxeIKDks5rvjq_gaJpZM4M800K .

PetePete1984 commented 7 years ago

The loot grid overlay idea sounds close to what http://poeprices.info does when you use their "Price all Stashes" function: it basically throws all items from one of your stash tabs against the poe.trade API and suggests prices, which can then be filtered and highlighted for display (eg. "minimum 1 chaos" > red background). Here you'd apply the scoring or whatever the current column filters are instead of pricing of course. That would definitely help with finding items at a glance, currently I'd wager most users filter for stats, then sort by Location and finally look for their item by searching the name ingame, which does get a bit tedious :)

On the topic of pricing: most items tend to increase exponentially in value once their affixes creep up to the maximum possible, although including affix ranges in general and especially for uniques sounds like a nightmare. Still, it would allow for a percentage based approach in finding stuff with near-perfect stats or candidates for divine orbs. I'll have to do some research, maybe there's some public resource with affixes and their ranges somewhere.

benjaminjackman commented 7 years ago

there were other tools i found that would basically convert each affix line into it's tier and show it's rolls i had for a while a wanted to integrate something like that, there are some tables with that information, but it's a ton of work. there are some ambiguities because of hybrid affixes that have multiple lines in the item descriptions that make the problem pretty tricky. it's i think impossible it's just a lot of work and then it breaks whenever GGG changes tiers and rolls and stuff.

On Thu, Apr 13, 2017 at 5:07 PM, PetePete1984 notifications@github.com wrote:

The loot grid overlay idea sounds close to what http://poeprices.info does when you use their "Price all Stashes" function: it basically throws all items from one of your stash tabs against the poe.trade API and suggests prices, which can then be filtered and highlighted for display (eg. "minimum 1 chaos" > red background). Here you'd apply the scoring or whatever the current column filters are instead of pricing of course. That would definitely help with finding items at a glance, currently I'd wager most users filter for stats, then sort by Location and finally look for their item by searching the name ingame, which does get a bit tedious :)

On the topic of pricing: most items tend to increase exponentially in value once their affixes creep up to the maximum possible, although including affix ranges in general and especially for uniques sounds like a nightmare. Still, it would allow for a percentage based approach in finding stuff with near-perfect stats or candidates for divine orbs. I'll have to do some research, maybe there's some public resource with affixes and their ranges somewhere.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/benjaminjackman/looty/issues/14#issuecomment-294034381, or mute the thread https://github.com/notifications/unsubscribe-auth/AADyYGMS7O-0Y1NFDkpDyizb5CnjAZbJks5rvpy2gaJpZM4M800K .

benjaminjackman commented 7 years ago

are you familiar with the method of rebasing each commit, or rewriting history a bit and turning them into a series of pull requests? if you have done that before it would be pretty easy for me to merge them in, i generally prefer to try to keep the repo history as much of a straight line as possible and tend to prefer rebases to merges, make sure you make another branch at your current master just for backup purposes though if you attempt to learn by doing as rebasing rewrites history, so can cause you to lose commits if you aren't careful. if you have that tagged or extra master branch where your's currently is though you will be fine as it would be unchanged if you don't rebase it.

On Thu, Apr 13, 2017 at 10:00 PM, Benjamin Jackman ben@jackman.biz wrote:

there were other tools i found that would basically convert each affix line into it's tier and show it's rolls i had for a while a wanted to integrate something like that, there are some tables with that information, but it's a ton of work. there are some ambiguities because of hybrid affixes that have multiple lines in the item descriptions that make the problem pretty tricky. it's i think impossible it's just a lot of work and then it breaks whenever GGG changes tiers and rolls and stuff.

On Thu, Apr 13, 2017 at 5:07 PM, PetePete1984 notifications@github.com wrote:

The loot grid overlay idea sounds close to what http://poeprices.info does when you use their "Price all Stashes" function: it basically throws all items from one of your stash tabs against the poe.trade API and suggests prices, which can then be filtered and highlighted for display (eg. "minimum 1 chaos" > red background). Here you'd apply the scoring or whatever the current column filters are instead of pricing of course. That would definitely help with finding items at a glance, currently I'd wager most users filter for stats, then sort by Location and finally look for their item by searching the name ingame, which does get a bit tedious :)

On the topic of pricing: most items tend to increase exponentially in value once their affixes creep up to the maximum possible, although including affix ranges in general and especially for uniques sounds like a nightmare. Still, it would allow for a percentage based approach in finding stuff with near-perfect stats or candidates for divine orbs. I'll have to do some research, maybe there's some public resource with affixes and their ranges somewhere.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/benjaminjackman/looty/issues/14#issuecomment-294034381, or mute the thread https://github.com/notifications/unsubscribe-auth/AADyYGMS7O-0Y1NFDkpDyizb5CnjAZbJks5rvpy2gaJpZM4M800K .

benjaminjackman commented 7 years ago

(and btw your changes look really good!)

On Thu, Apr 13, 2017 at 10:14 PM, Benjamin Jackman ben@jackman.biz wrote:

are you familiar with the method of rebasing each commit, or rewriting history a bit and turning them into a series of pull requests? if you have done that before it would be pretty easy for me to merge them in, i generally prefer to try to keep the repo history as much of a straight line as possible and tend to prefer rebases to merges, make sure you make another branch at your current master just for backup purposes though if you attempt to learn by doing as rebasing rewrites history, so can cause you to lose commits if you aren't careful. if you have that tagged or extra master branch where your's currently is though you will be fine as it would be unchanged if you don't rebase it.

On Thu, Apr 13, 2017 at 10:00 PM, Benjamin Jackman ben@jackman.biz wrote:

there were other tools i found that would basically convert each affix line into it's tier and show it's rolls i had for a while a wanted to integrate something like that, there are some tables with that information, but it's a ton of work. there are some ambiguities because of hybrid affixes that have multiple lines in the item descriptions that make the problem pretty tricky. it's i think impossible it's just a lot of work and then it breaks whenever GGG changes tiers and rolls and stuff.

On Thu, Apr 13, 2017 at 5:07 PM, PetePete1984 notifications@github.com wrote:

The loot grid overlay idea sounds close to what http://poeprices.info does when you use their "Price all Stashes" function: it basically throws all items from one of your stash tabs against the poe.trade API and suggests prices, which can then be filtered and highlighted for display (eg. "minimum 1 chaos" > red background). Here you'd apply the scoring or whatever the current column filters are instead of pricing of course. That would definitely help with finding items at a glance, currently I'd wager most users filter for stats, then sort by Location and finally look for their item by searching the name ingame, which does get a bit tedious :)

On the topic of pricing: most items tend to increase exponentially in value once their affixes creep up to the maximum possible, although including affix ranges in general and especially for uniques sounds like a nightmare. Still, it would allow for a percentage based approach in finding stuff with near-perfect stats or candidates for divine orbs. I'll have to do some research, maybe there's some public resource with affixes and their ranges somewhere.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/benjaminjackman/looty/issues/14#issuecomment-294034381, or mute the thread https://github.com/notifications/unsubscribe-auth/AADyYGMS7O-0Y1NFDkpDyizb5CnjAZbJks5rvpy2gaJpZM4M800K .

PetePete1984 commented 7 years ago

I've shied away from rebases so far (both in professional and private projects), but I'll give it a shot. There's admittedly some clutter in there, but I'm generally unsure how a local rebase would affect the remote history. Does that just basically discard the old history and overwrite with the "clean" one if I do it correctly? Edit: reading up on it, I think that seems easy enough. Gimme a few hours at worst :)

benjaminjackman commented 7 years ago

yep that's the basic gist of it, it lets you clean stuff up so that things are easier to pull request and so that the history looks nicer.

until you push it up to the remote repo it shouldn't affect anything, and just to be careful you probably ought to make a new branch to experiment with, so that worst case your master is still there locally.

On 4/14/17, PetePete1984 notifications@github.com wrote:

I've shied away from rebases so far (both in professional and private projects), but I'll give it a shot. There's admittedly some clutter in there, but I'm generally unsure how a local rebase would affect the remote history. Does that just basically discard the old history and overwrite with the "clean" one if I do it correctly?

-- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/benjaminjackman/looty/issues/14#issuecomment-294157629

PetePete1984 commented 7 years ago

Alright, I did a thing: created three local branches for the distinct changesets, cherry-picked the relevant commits into them and cleaned up the files & commit messages, then chain rebased them on top of each other. In that state I could fast-forward merge into the new https://github.com/PetePete1984/looty/tree/develop branch (based on your most current master) without any conflicts and with a clean history. I had foolishly published my cluttered master branch before, so I'm not sure how to proceed with that one. I can still just create pull requests from my develop to your master, yeah?

benjaminjackman commented 7 years ago

nice job, looks perfect! pull request would work great, it'll probably end up just being one since github does pull requests based on branch name IIRC which is fine. i'll review the code in the pull request and merge it in.