Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Potential Wishlist schema #70

Merged
merged 5 commits into from
Aug 26, 2024
Merged

RFC: Potential Wishlist schema #70

merged 5 commits into from
Aug 26, 2024

Conversation

bhollis
Copy link
Contributor

@bhollis bhollis commented Dec 31, 2021

This is a stab at a JSON schema for wishlists to replace our current text schema (see DestinyItemManager/DIM#7129). It is intentionally designed to be compatible with Little Light's JSON wishlist format (cc @joaopmarquesini) as used in https://wishlists.littlelight.club/, though maybe that's not as necessary as I might think.

On top of that basic format we add DIM's ability to mark global and ItemCategory-specific rolls, and to mark a roll as trash. I'm also kinda mulling an idea of a "grade" for a roll, but it might just be redundant with tag and not something people want to use (i.e. are people really gonna add "C" rolls rather than just "good" and "god" rolls?). One idea I had around this is that people might want to subscribe to a filtered version of a wish list, which we could automatically generate based on a comprehensive source wish list. For example, a user might choose to subscribe to Voltron but only check the box for "A" and "S" tier rolls with the "Mouse" tag.

@bhollis bhollis requested review from 48klocs and nev-r December 31, 2021 20:43
@joaopmarquesini
Copy link

Looks amazing.
Including global and category rolls is a great addition.
I'm not sure if the combo grades + tags would make sense per item, maybe rethink tags to make them have grades at a wishlist level (or the opposite, kill godpve and godpvp tags and use grades to define a good from godroll) ? Also I think the same may apply to trash, maybe it should be just a tag?
Something that I hear a lot from curators is that the idea of godroll is a bit outdated, as there's a lot of sinergies that works well for some weapons and none of them are really better than the others, so there's no "true godroll".
Another thing that I'm already struggling with in the format I use on LL and maybe you should think ahead of it is the absence of socket indexes. As Bungie added some weapons that may have the same perk on different slots depending on the season, it led to some builds being wrongly matched. Maybe adding an optional socket index to plug map at roll level might help with that.
Btw, I plan to follow whatever changes you do on the format to keep it compatible on both apps.

@48klocs
Copy link

48klocs commented Jan 1, 2022

Looks very sensible!

A few minor suggestions: on WishList...

  • include AssociatedLists, a string[] that will let us embed pointers from one wish list to another
  • include Author, a string to optionally note originator
  • include Version, a string in case we want to get into semver or something
  • include Season, a string (or Number?) to optionally indicate what season they were for

@bhollis
Copy link
Contributor Author

bhollis commented Jan 1, 2022

includes is the AssociatedLists you're talking about - URLs to other lists that will be included.

Author, version, and either a season or at least a timestamp would be great!

@nev-r
Copy link
Member

nev-r commented Jan 2, 2022

roll type:

  • God Roll - "don't you dare throw this away"
    • not all guns need to have one of these!
  • Good Roll - "this is worth keeping/trying"
    • for guns you would tell someone to seek out/grind for. if your review of X gun is "you should go get Y gun instead", then X gun doesn't need a Good Roll
  • Perk Recommendation - "if you want this gun, here are the perks you should use"
    • if you're a wishlist maker, you should write some of these for each gun
  • Trash - this sucks, these perks clash
    • controversial. makes people very sad when they see it, but like the roll

i think the ideal grading dichotomy is one where where "why i am adding this to the wishlist" must fall under one of its categories

@nev-r
Copy link
Member

nev-r commented Jan 2, 2022

a top level format prop would be extremely good for format versioning, and as a quick check to see if we should be trying one of the legacy parsers

@dcaslin
Copy link

dcaslin commented Jan 5, 2022

So it looks like ItemRoll is sticking with the "one entry per finite" roll. This is probably smart for DIM's existing base (who are used to crafting precise guns to seek vs perhaps more generally ranking perks). Tags and Grades seem to satisfy all the expected cases.

I'm trying to understand how exactly globalRolls and categoryRolls would work? Can someone walk me through those use cases?

@nev-r
Copy link
Member

nev-r commented Jan 6, 2022

I'm trying to understand how exactly globalRolls and categoryRolls would work? Can someone walk me through those use cases?

categoryRolls

this might be something like "recommend any fusion rifle (a category) with reservoir burst"

globalRolls

this might be something like "recommend any item where both outlaw and kill clip are both present"
this could also potentially be used to do a more specific version of categoryRolls,
for instance, recommend a perk (or perks) for slug shotguns. or only for 180 rpm hand cannons. (since 180-ness and slug are both technically just plugs)

@nev-r
Copy link
Member

nev-r commented Jan 6, 2022

categoryRolls

interface CategoryRoll extends Roll {
  categories: number[];
}

what number?
imo, ItemSubType would be most appropriate here:

  • avoids the fusion/LFR weirdness
  • extremely stable, being an enum
    • accepting an enum name string might be nice for human readability (FusionRifle or 11)
  • ItemCategoryHashes are, judging by this, populated at least in part, by api-team scripts/heuristics.
    and have been wrong before.
    types and subtypes seem like actual game data and are probably more reliable.

also maybe an option: an ItemSubType or archetype?
definitely probably not an option because of collisions: ItemSubType or ItemCategoryHash
most human-readable option: traitId strings (more modern names and readable, but no idea how stable)

globalRolls

would love to see a clearer name here, either perkRolls for casual understandability,
or plugRolls for people who interact with the api regularly

@kj415j45
Copy link

kj415j45 commented Jul 6, 2022

It's been 2 years since we create Little Light's JSON wishlist format. I've doubted if it deserve the name "wishlist" for many times. The "wishlist", should be a personalize thing. I would recommend to rename current wishlist to something like "perks recommendation".

And good to see that the new schema uses perkRolls and categoryRolls as combination filters, this would reduce much works on picking items.

But date looks bad to me. Players can not locate a season/patch by date, though it can be handle by frontend. And curators may create/edit it after several patches. By the way, you may take a look at discussions in LittleLightForDestiny/littlelight#185. It's not that useful to add date for Roll since you can not determine whether a perk is available at a given time unless you track the manifests of each major patch (seasonal update, with perk pool refreshing). Good news is that Bungie offer a property versionNumber for when you fetch player's inventory info, This would help if we can get the same or similar data on PlugSet. Anyway, use Season as 48klocs said would be better.

@bhollis
Copy link
Contributor Author

bhollis commented May 21, 2024

Linking DestinyItemManager/DIM#4299

@kj415j45
Copy link

Make a new draft in TS Definition for the Common Wishlist Format based on all the suggestions above. Also standardized how we used the data.

Please take a look: https://gist.github.com/kj415j45/a316f37f179eda313a2e95feb13ea190

@bhollis
Copy link
Contributor Author

bhollis commented May 25, 2024

@kj415j45 thanks! I've incorporated some elements from your proposed schema. The main difference is that I'm trying to avoid places where the wish list can be interpreted in multiple ways. I also disagree that masterworks, shaders, and weapon mods should be included in wish lists.

@ChadGarion25
Copy link

Not that I have any say in this, but I very much think Masterworks are relevant and should be included. Weapon mods less so and shaders not at all.

@bhollis
Copy link
Contributor Author

bhollis commented May 25, 2024

I think it would be fine to have the suggested masterwork in the description of the roll. But would you really want a roll to not match if all the perks were there but the masterwork wasn't correct?

@nev-r
Copy link
Member

nev-r commented May 25, 2024

masterworks are no less important than barrels/mags.
they are worth 10-ish stat points; many mags/barrels such as accurized, polygonal, hammer-forged are worth 10 stat points.
many other parts are worth 15, or contain a set of stat tradeoffs that net around that much. so not that far from masterworks.
some parts are, points-wise, worse than a masterwork, either situationally (armor piercing is only +5 in pvp), or universally (the charge time masterwork is simply better than accel/liquid)

masterworks' permutational odds aren't wildly bad.
masterworks are 1 rolled option, out of usually 4ish possible choices.
perks are often 1 out of 6, or 7.
mags and barrels are often 2 rolled out of 7 or 8.
MWs just arbitrarily got excluded as the sacrificial lamb for wishlists,
because they were a little more annoying to identify (collapsing all mw levels into one stat),
and got demoted to "suggestions"
and presumably stayed that way because every permutation factor you include lowers the odds of a thumbs-up, which makes people sad.

honestly wishlists should be

  • perks
  • a set of stat-boost targets, or a set of preferred stats, to be accomplished/matched by any gun part or masterwork
  • other recommended barrels/mags with special properties, such as alloy, full choke, smooth bore, etc

but i don't think anyone is ready to deal with that.

masterworks should be as first-class as mag and barrels, and if people choose not to include them as "required" in wishlists, ok. and if people choose to mark any, or several, as acceptable, it shouldn't put too much of a dent in the thumbs up count.

@bhollis
Copy link
Contributor Author

bhollis commented May 26, 2024

OK cool I added optional masterwork stats.

@kj415j45
Copy link

It might be strange but... Is there some build needs a specific Masterwork Level instead of lv.10?

@bhollis
Copy link
Contributor Author

bhollis commented May 28, 2024

I don't think it makes sense to suppress the thumbs up until you have a lvl 10 masterwork.

@ChadGarion25
Copy link

Right; this is a tool to see if your random roll is the one you want. Just like the mod slot isn't a factor, what level you masterwork it too is something that can be left up to the player once they know they have the random elements locked in.

@kj415j45
Copy link

kj415j45 commented Jun 5, 2024

Did anyone check the new exotic sword? That's, ... Does the schema need an update to fit that?

@bhollis
Copy link
Contributor Author

bhollis commented Jun 5, 2024

What's interesting about it?

@kj415j45
Copy link

What's interesting about it?

The new Exotic Sword "Ergo Sum" <1681583613>, has a random-rolled Intrinsic Traits, and the actual Intrinsic was placed at Perks. But since they're using a valid InventoryItemHash to refer to, that should not be a problem.

@bhollis bhollis merged commit be17d34 into master Aug 26, 2024
1 check passed
@bhollis bhollis deleted the wishlist branch August 26, 2024 04:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants