46052c7b0e
* Add multi-version mastery files * Add pro1 unlocks to legacy allunlockables * Add 47's suit to scpc all unlockables * Add and remove various configs * Remove some useless promises * Fix scpc hub * Fix issue with user profile saving * Fix scpc issues for hub * Add singleplayer/multiplayer sniper * A great many things - Add multi-version mastery - Improve sniper mastery support - Improve general H2016 support * Fix some warnings * Fix pro1 mastery on destination screens * Remove entP from createInventory, lock/unlock pro1 accordingly * Remove JSDoc entP parameter from createInventory * Remove difficultyunlocks from safehouse pages * Add versioned user profiles * Prettier run * Remove false point from user profiles docs * Add comment about profile versioning to types * Fix default profile links * Remove remaining lowercase * Fix sniper showing XP as XP * Add game versions to the unlockable map * Update getMasteryForUnlockable call in planning * Fix missing locations when updating profiles * Update versions to v7 * Fix ICA Facility destination mastery * Fix sniper challenge unlockables showing in inventory * Sniper Scoring (#273) * Initial sniper scoring * Fix linting errors * Update require table * Calculate and display final sniper score on end screen * Bump SMP version to v5.7.0 * Update since version for scoring * Fix create inventory call for sniper scoring * Support sniper unlockables in the inventory * Update versions to v7 * Reflect changes to createInventory in scoreHandler * Get unlockable name in completion data * It was not okay. * Thanks webstorm * Add support for /profiles/page/GetMasteryCompletionDataForUnlockable * Support sniper play next * Remove sniper gamemodes template from overrides * Remove debug prints from scoring event handler * Fix challenge multiplier * Exclude sniper unlockables from stashpoint * Start fixing up the missionEnd response for sniper * Update misleading comment * Use existing global challenge to check for SA on sniper contracts * Re-add removed global challenges * Proper support for the mission end screen on sniper contracts * Remove redundant label --------- Signed-off-by: Anthony Fuller <24512050+AnthonyFuller@users.noreply.github.com> Co-authored-by: Govert de Gans <grappigegovert@hotmail.com> * Add co-op sniper scoring defs * Update MasteryUnlockable template * Bump SMP version to v5.9.3 * Re-add deepmerge * Fix SMP checksum * Fix linting errors caused by merge * Fix score handler imports * Move load flags * Remove unnecessary game version arg * Whoopsies Co-authored-by: Reece Dunham <me@rdil.rocks> Signed-off-by: Anthony Fuller <24512050+AnthonyFuller@users.noreply.github.com> --------- Signed-off-by: Anthony Fuller <24512050+AnthonyFuller@users.noreply.github.com> Co-authored-by: Govert de Gans <grappigegovert@hotmail.com> Co-authored-by: Reece Dunham <me@rdil.rocks> |
||
---|---|---|
.. | ||
challengeHelpers.ts | ||
challengeService.ts | ||
masteryService.ts | ||
progressionService.ts | ||
README.md |
Candle
Lighting the way through the new era of Hitman.
Candle is the subsystem for handling Challenges, Progression, and XP.
Credits
Thanks to Moo for the name suggestion.
Loading challenges
Challenge data reside in files in contractdata
ending in _CHALLENGES.json
. When building, the packResources
function in buildTasks.mjs
will take all such files and pack them into files in the resources/challenges
folder.
Then, when the server starts, challenge data is loaded from the files in the resources/challenges
folder into the memory, via the _loadResources
function in controller.ts
. It calls the _handleChallengeResources
function that in turn calls challengeService.registerGroup
and challengeService.registerChallenge
to register the challenge group and the respective challenges.
These two registration functions initialize two data structures, groups: Map<string, Map<string, SavedChallengeGroup>>
, which maps parentLocationId
s to Map
s of groupId
s to SavedChallengeGroup
objects for this group of this parent location, and groupContents: Map<string, Map<string, Set<string>>>
, which maps parentLocationId
s to Map
s of groupId
s to Set
s of challenge Ids in this group of this parent location. All subsequent operations on challenges write to or read from these two Map
s.