Bungie-net / api

Resources for the Bungie.net API
Other
1.22k stars 92 forks source link

Milestones, quests, queststeps, and objectives #233

Open k20stitch opened 7 years ago

k20stitch commented 7 years ago

One would assume that if a milestone is of type... 3 for example, all type 3 milestones would be standardized. but some of display data and some don't, Some milestone names are different than their quest names (Hotspot vs flashpoint on ::insert planet here::). Then you have the ikora missions which have a milestone name, but the individual quests are not named.

If someone is trying to display the weeks milestone data, like you guys do in the app, what should be we using? The most reliable i've found is the questItem definition (the only one that doesn't work is the Ikora meditations).

floatingatoll commented 7 years ago

Can you be more specific about precisely which milestones and quests are giving you this trouble? They may require individual attention due to classification and/or bugs and/or etc and it would be invaluable to know which ones you've found work, which don't, etc.

On Tue, Oct 17, 2017 at 2:25 PM, k20stitch notifications@github.com wrote:

One would assume that if a milestone is of type... 3 for example, all type 3 milestones would be standardized. but some of display data and some don't, Some milestone names are different than their quest names (Hotspot vs flashpoint on . Then you have the ikora missions which have a milestone name, but the individual quests are not named.

If someone is trying to display the weeks milestone data, like you guys do in the app, what should be we using? The most reliable i've found is the questItem definition (the only one that doesn't work is the Ikora meditations).

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/Bungie-net/api/issues/233, or mute the thread https://github.com/notifications/unsubscribe-auth/AAFqDM5e3rPCB92s1E3ximAAySGVpj3Nks5stRtAgaJpZM4P82AC .

k20stitch commented 7 years ago

I'm trying to mimic what you see in the director or milestones in the app.

Take the type 3 (weekly) milestones for example. I query what milestones (character progression endpoint) are available for a given character and I'm given a pretty standard response... the milestone and hash along with some available quests and the start/end times.

Next i get the milestone definition and this is where it gets ugly. For the nightfall, call to arms, raid, trials of the nine, i get display properties which includes the name description and icon. But not for the "hotspot"/"flash points". The clan XP milestone is also set to false for "display in explorer" but it is clearly shown in the director (unlike the meditations and clan progression milestones). The other interesting thing here is that the names and descriptions for the milestone display properties do not match what's shown in the director or app. Because of this, i decided to go down the object and get definitions for the next best things, the "quests" within the milestone.

Most quests had the display properties I'm looking for and the descriptions matched the information shown in the director. (compare raid milestone definition to raid quest definition). The hotspot, is also now properly named to "flash point on ::insert planet here::".. so great, i'll use the quest definitions instead... NOPE.

Now when you look at the Ikora mediation milestone that did have a milestone display properties, there are no display properties in the quest definition.

I've even tried using the activity definition, objective definitions, and even the conceptual activity definition. but none of them are ever standard across all of the weekly type 3 milestones. I'd like to develop my app so that when new milestones are available, my app just programmatically displays them instead of all this ifthenelse BS where I'll need to know before hand which milestone information i need to grab for each milestone.

Or perhaps i'm just going about this whole thing wrong.

PS: also, if you look at the nightfall milestone

$milestoneDef(2171429505) -> quests -> {2296274682} -> "display properties" is different than $questDef(2296274682) -> "display properties"

hskrasek commented 7 years ago

@k20stitch Might not help much, but I threw together a Slackbot for my group that posts the weekly milestones every tuesday and kinda had the same issues you were having, but to get output that looks like this:

screenshot 2017-10-31 16 17 09

I had to make a system that does some custom parsing for each milestone/milestone type. Not sure if you are familiar with PHP, but you can see the differences in each class here: https://github.com/hskrasek/reinbot/tree/master/app/Services/Destiny/Transformers

But yea everything is a bit scattered just to piece all the information together. My approach is based off of milestone hashes, and I'm sure has like no fault tolerance. But it'd be a good place to start.

EDIT: I should add I haven't dug into the individual meditation missions, but that's because I can't format them in Slack how I wan't.. and also my group finds them to be a waste of time, so I didn't need to add them.

k20stitch commented 7 years ago

Yea this is what I’m trying to avoid. It requires that you already know what the milestones are going to be if you need custom parsing.

Sent via smoke signals

On Oct 31, 2017, at 5:20 PM, Hunter Skrasek notifications@github.com wrote:

@k20stitch Might not help much, but I threw together a Slackbot for my group that posts the weekly milestones every tuesday and kinda had the same issues you were having, but to get output that looks like this:

I had to make a system that does some custom parsing for each milestone/milestone type. Not sure if you are familiar with PHP, but you can see the differences in each class here: https://github.com/hskrasek/reinbot/tree/master/app/Services/Destiny/Transformers

But yea everything is a bit scattered just to piece all the information together. My approach is based off of milestone hashes, and I'm sure has like no fault tolerance. But it'd be a good place to start

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

vthornheart-bng commented 7 years ago

Yes, unfortunately milestones currently have very inconsistent display information whose quality really isn't that great. The rule of thumb that we apply on our site and in our apps is to use the most specific description we can find, if it is populated. So we first try to show the Quest's information as the Milestone. If it doesn't have display data populated, we'll fall back to showing the milestone-level display properties. We use the displayProperties under the "quests" property in the Milestone definition, rather than the quest item's displayProperties. Unfortunately, something that both the game and our data (as a result) is missing is more useful information about what the Milestone is.

This is an experience that I'm hoping to improve over time, but for now both you and we have to deal with this inconsistent data source unfortunately. But if you use that algorithm of using the Milestone quests' displayProperties and falling back on the Milestone display properties when the quest has no display properties, that will at least get you to show something that should have a baseline level of usefulness. Eventually I'll be attempting to get better text into those fields, even if we have to rig it up manually: but it'll always end up being a pattern of checking the quest's display properties first and falling back on the Milestone, because some Milestones will inherently have very different descriptions based on the active quest.

When it comes to the "display in Explorer" property, that's what we use to determine whether or not we'll display that milestone in the "Live Events" section of the frontpage of the website: it's got no bearing on whether or not the milestone gets shown in the director.

floatingatoll commented 7 years ago

I nominate this comment to be included in the docs somehow, because it's critically valuable for anyone parsing milestones.

On Wed, Nov 1, 2017 at 3:32 PM, Vendal Thornheart notifications@github.com wrote:

Yes, unfortunately milestones currently have very inconsistent display information whose quality really isn't that great. The rule of thumb that we apply on our site and in our apps is to use the most specific description we can find, if it is populated. So we first try to show the Quest's information as the Milestone. If it doesn't have display data populated, we'll fall back to showing the milestone-level display properties. We use the displayProperties under the "quests" property in the Milestone definition, rather than the quest item's displayProperties. Unfortunately, something that both the game and our data (as a result) is missing is more useful information about what the Milestone is.

This is an experience that I'm hoping to improve over time, but for now both you and we have to deal with this inconsistent data source unfortunately. But if you use that algorithm of using the Milestone quests' displayProperties and falling back on the Milestone display properties when the quest has no display properties, that will at least get you to show something that should have a baseline level of usefulness. Eventually I'll be attempting to get better text into those fields, even if we have to rig it up manually: but it'll always end up being a pattern of checking the quest's display properties first and falling back on the Milestone, because some Milestones will inherently have very different descriptions based on the active quest.

When it comes to the "display in Explorer" property, that's what we use to determine whether or not we'll display that milestone in the "Live Events" section of the frontpage of the website: it's got no bearing on whether or not the milestone gets shown in the director.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Bungie-net/api/issues/233#issuecomment-341263049, or mute the thread https://github.com/notifications/unsubscribe-auth/AAFqDBSJHqwM6pr4aqyd4nNMPaGldeSPks5syPFogaJpZM4P82AC .

vthornheart-bng commented 7 years ago

100% agreed, very good call. I'll put the gist of this into the docs while we're talking about it for the next time I update the docs.

vthornheart-bng commented 7 years ago

Here we go, for next time we update docs:

There are some important caveats to understand about how we currently render Milestones and their deficiencies. The game currently doesn't have any content that actually tells you oughtright what the Milestone is: that is to say, what you'll be doing. The best we get is either a description of the overall Milestone, or of the Quest that the Milestone is having you partake in: which is usually something that assumes you already know what it's talking about, like "Complete 5 Challenges". 5 Challenges for what? What's a challenge? These are not questions that the Milestone data will answer for you unfortunately.

This isn't great, and in the future I'd like to add some custom text to give you more contextual information to pass on to your users. But for now, you can do what we do to render what little display info we do have:

Start by looking at the currently active quest (ideally, you've fetched DestinyMilestone or DestinyPublicMilestone data from the API, so you know the currently active quest for the Milestone in question). Look up the Quests property in the Milestone Definition, and check if it has display properties. If it does, show that as the description of the Milestone. If it doesn't, fall back on the Milestone's description.

This approach will let you avoid, whenever possible, the even less useful (and sometimes nonexistant) milestone-level names and descriptions.

k20stitch commented 6 years ago

Thank you for the super informative post! Glad this got the attention it deserved.

Sent from my iPhone

On Nov 1, 2017, at 19:01, Vendal Thornheart notifications@github.com wrote:

Here we go, for next time we update docs:

/// There are some important caveats to understand about how we currently render Milestones and their deficiencies. The game /// currently doesn't have any content that actually tells you oughtright what the Milestone is: that is to say, what you'll /// be doing. The best we get is either a description of the overall Milestone, or of the Quest that the Milestone is having /// you partake in: which is usually something that assumes you already know what it's talking about, like "Complete 5 Challenges". /// 5 Challenges for what? What's a challenge? These are not questions that the Milestone data will answer for you unfortunately. /// /// This isn't great, and in the future I'd like to add some custom text to give you more contextual information to pass on to /// your users. But for now, you can do what we do to render what little display info we do have: /// /// Start by looking at the currently active quest (ideally, you've fetched DestinyMilestone or DestinyPublicMilestone data /// from the API, so you know the currently active quest for the Milestone in question). Look up the Quests property in the /// Milestone Definition, and check if it has display properties. If it does, show that as the description of the Milestone. /// If it doesn't, fall back on the Milestone's description. /// /// This approach will let you avoid, whenever possible, the even less useful (and sometimes nonexistant) milestone-level names /// and descriptions.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.