| name | event-endeavours |
| description | Implement event missions (endeavours) into the mission designer project. Use when asked to implement event missions or event endeavours |
To implement event endeavours, you will need to query the master asset SQL database. The user should set the path to this database as $MASTER_ASSET_SQLITE_PATH. If this variable is not set stop and wait for the user to specify it.
Terminology: missions and endeavours are the same thing. Limited endeavours and period missions are the same thing.
To implement limited endeavours for an event:
- Look up the event ID from event names JSON file. The JSON is formatted as follows:
[
{
"EventId": 20458,
"EventName": "Loyalty's Requiem"
},
]
- Use a query like this to extract mission descriptions from the database. If you get zero rows back, check the event ID.
SELECT m._Id, tl._Text FROM MissionPeriodData m
JOIN TextLabel tl on m._Text = tl._Id
WHERE m._QuestGroupId =
ORDER BY m._Id
- Using the existing mission types and existing mission data in
DragaliaAPI/DragaliaAPI.MissionDesigner, implement a new file with the name of the event that contains a list with the appropriate missions.
- Use
DragaliaAPI/DragaliaAPI.MissionDesigner/Missions/Period/StarryDragonyule.cs as a reference.
- The file should be named the PascalCase event name.
- Ensure the new mission class is attributed with
[ContainsMissionList] so that Program.cs can discover it by reflection.
- The available mission types are defined in
DragaliaAPI/DragaliaAPI.MissionDesigner/Models. If you feel that none of them fit, stop and wait for the user to add a new one.
- Use the
[EventId], [MissionType] and other ImplicitPropertyAttribute subclasses as list-level attributes to avoid having to set the same fields on each entry in the list.
- The missions should be implemented based on what the description tells the player to do; there is no way to derive the completion type a priori from the database.
- The
UseTotalValue property indicates that each time a mission progression event is registered, it sets a new progression value rather than adding to the previous one. For example, for a mission: 'Get 5000 Points in One Go', the progression event is called with 1000, 1500, and 2000 - after this, because of UseTotalValue, the completion is 2000 instead of 3500, which is right for that mission type.
- Where an event has multiple trials at the same difficulty you will need to pass in a
QuestId to be explicit.
- Leaving a parameter null will match any value for that parameter in a completion event.
- If there are two 'Participate in the Event' missions, then ignore the second one with the higher ID. This is for two-part events but we don't run the event in two parts.
- If a mission is related to clearing a story or a quest you will need to get that quest or story ID.
- To get a list of quest names for an event, use a query like this:
SELECT q._Id as QuestId, tl._Text as QuestName, q._PayStaminaSingle <> 0 as IsSolo, q._PayStaminaMulti <> 0 as IsCoOp, q._VariationType as VariationType FROM QuestData q
JOIN TextLabel tl on q._QuestViewName = tl._Id
WHERE q._Gid =
ORDER BY q._Id
- To get a list of story names for an event, use a query like this:
SELECT q._Id as QuestId, tl._Text as QuestName FROM QuestStory q
JOIN TextLabel tl on q._SectionName = tl._Id
WHERE q._GroupId =
ORDER BY q._Id
Tips
- You may find it useful to invoke the sqlite3 command with -json for output inspection.