fix: use shared count for calendar day indecies (#2265)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 50s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m22s

I'm not sure if this was always this way and I was just really confused when I initially implemented this, or if this was changed in a later version, but at least now it seems to be tracking everything correctly for 38.6.0.

Closes #2264

Reviewed-on: #2265
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
Sainan 2025-06-23 15:02:30 -07:00 committed by OrdisPrime
parent 653798b987
commit 444c92f0c6
3 changed files with 51 additions and 27 deletions

View File

@ -1,4 +1,4 @@
import { getCalendarProgress, getInventory } from "@/src/services/inventoryService"; import { checkCalendarChallengeCompletion, getCalendarProgress, getInventory } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { handleStoreItemAcquisition } from "@/src/services/purchaseService"; import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
import { getWorldState } from "@/src/services/worldStateService"; import { getWorldState } from "@/src/services/worldStateService";
@ -12,27 +12,23 @@ export const completeCalendarEventController: RequestHandler = async (req, res)
const calendarProgress = getCalendarProgress(inventory); const calendarProgress = getCalendarProgress(inventory);
const currentSeason = getWorldState().KnownCalendarSeasons[0]; const currentSeason = getWorldState().KnownCalendarSeasons[0];
let inventoryChanges: IInventoryChanges = {}; let inventoryChanges: IInventoryChanges = {};
let dayIndex = 0; const dayIndex = calendarProgress.SeasonProgress.LastCompletedDayIdx + 1;
for (const day of currentSeason.Days) { const day = currentSeason.Days[dayIndex];
if (day.events.length == 0 || day.events[0].type != "CET_CHALLENGE") { if (day.events.length != 0) {
if (dayIndex == calendarProgress.SeasonProgress.LastCompletedDayIdx) { if (day.events[0].type == "CET_CHALLENGE") {
if (day.events.length != 0) { throw new Error(`completeCalendarEvent should not be used for challenges`);
const selection = day.events[parseInt(req.query.CompletedEventIdx as string)]; }
if (selection.type == "CET_REWARD") { const selection = day.events[parseInt(req.query.CompletedEventIdx as string)];
inventoryChanges = (await handleStoreItemAcquisition(selection.reward!, inventory)) if (selection.type == "CET_REWARD") {
.InventoryChanges; inventoryChanges = (await handleStoreItemAcquisition(selection.reward!, inventory)).InventoryChanges;
} else if (selection.type == "CET_UPGRADE") { } else if (selection.type == "CET_UPGRADE") {
calendarProgress.YearProgress.Upgrades.push(selection.upgrade!); calendarProgress.YearProgress.Upgrades.push(selection.upgrade!);
} else if (selection.type != "CET_PLOT") { } else if (selection.type != "CET_PLOT") {
throw new Error(`unexpected selection type: ${selection.type}`); throw new Error(`unexpected selection type: ${selection.type}`);
}
}
break;
}
++dayIndex;
} }
} }
calendarProgress.SeasonProgress.LastCompletedDayIdx++; calendarProgress.SeasonProgress.LastCompletedDayIdx = dayIndex;
checkCalendarChallengeCompletion(calendarProgress, currentSeason);
await inventory.save(); await inventory.save();
res.json({ res.json({
InventoryChanges: inventoryChanges, InventoryChanges: inventoryChanges,

View File

@ -84,9 +84,11 @@ import { getRandomElement, getRandomInt, getRandomWeightedReward, SRng } from ".
import { createMessage } from "./inboxService"; import { createMessage } from "./inboxService";
import { getMaxStanding, getMinStanding } from "@/src/helpers/syndicateStandingHelper"; import { getMaxStanding, getMinStanding } from "@/src/helpers/syndicateStandingHelper";
import { getNightwaveSyndicateTag, getWorldState } from "./worldStateService"; import { getNightwaveSyndicateTag, getWorldState } from "./worldStateService";
import { ICalendarSeason } from "@/src/types/worldStateTypes";
import { generateNemesisProfile, INemesisProfile } from "../helpers/nemesisHelpers"; import { generateNemesisProfile, INemesisProfile } from "../helpers/nemesisHelpers";
import { TAccountDocument } from "./loginService"; import { TAccountDocument } from "./loginService";
import { unixTimesInMs } from "../constants/timeConstants"; import { unixTimesInMs } from "../constants/timeConstants";
import { addString } from "../helpers/stringHelpers";
export const createInventory = async ( export const createInventory = async (
accountOwnerId: Types.ObjectId, accountOwnerId: Types.ObjectId,
@ -1783,6 +1785,10 @@ export const addChallenges = (
} else { } else {
inventory.ChallengeProgress.push({ Name, Progress }); inventory.ChallengeProgress.push({ Name, Progress });
} }
if (Name.startsWith("Calendar")) {
addString(getCalendarProgress(inventory).SeasonProgress.ActivatedChallenges, Name);
}
}); });
const affiliationMods: IAffiliationMods[] = []; const affiliationMods: IAffiliationMods[] = [];
@ -2029,6 +2035,20 @@ export const getCalendarProgress = (inventory: TInventoryDatabaseDocument): ICal
return inventory.CalendarProgress; return inventory.CalendarProgress;
}; };
export const checkCalendarChallengeCompletion = (
calendarProgress: ICalendarProgress,
currentSeason: ICalendarSeason
): void => {
const dayIndex = calendarProgress.SeasonProgress.LastCompletedDayIdx + 1;
if (calendarProgress.SeasonProgress.LastCompletedChallengeDayIdx >= dayIndex) {
const day = currentSeason.Days[dayIndex];
if (day.events.length != 0 && day.events[0].type == "CET_CHALLENGE") {
//logger.debug(`already completed the challenge, skipping ahead`);
calendarProgress.SeasonProgress.LastCompletedDayIdx++;
}
}
};
export const giveNemesisWeaponRecipe = ( export const giveNemesisWeaponRecipe = (
inventory: TInventoryDatabaseDocument, inventory: TInventoryDatabaseDocument,
weaponType: string, weaponType: string,

View File

@ -33,6 +33,7 @@ import {
addSkin, addSkin,
addStanding, addStanding,
applyClientEquipmentUpdates, applyClientEquipmentUpdates,
checkCalendarChallengeCompletion,
combineInventoryChanges, combineInventoryChanges,
generateRewardSeed, generateRewardSeed,
getCalendarProgress, getCalendarProgress,
@ -67,7 +68,15 @@ import {
} from "@/src/helpers/nemesisHelpers"; } from "@/src/helpers/nemesisHelpers";
import { Loadout } from "../models/inventoryModels/loadoutModel"; import { Loadout } from "../models/inventoryModels/loadoutModel";
import { ILoadoutConfigDatabase } from "../types/saveLoadoutTypes"; import { ILoadoutConfigDatabase } from "../types/saveLoadoutTypes";
import { getLiteSortie, getSortie, idToBountyCycle, idToDay, idToWeek, pushClassicBounties } from "./worldStateService"; import {
getLiteSortie,
getSortie,
getWorldState,
idToBountyCycle,
idToDay,
idToWeek,
pushClassicBounties
} from "./worldStateService";
import { config } from "./configService"; import { config } from "./configService";
import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json"; import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json";
import { ISyndicateMissionInfo } from "../types/worldStateTypes"; import { ISyndicateMissionInfo } from "../types/worldStateTypes";
@ -620,12 +629,11 @@ export const addMissionInventoryUpdates = async (
} }
case "CalendarProgress": { case "CalendarProgress": {
const calendarProgress = getCalendarProgress(inventory); const calendarProgress = getCalendarProgress(inventory);
for (const progress of value) { const currentSeason = getWorldState().KnownCalendarSeasons[0];
const challengeName = progress.challenge.substring(progress.challenge.lastIndexOf("/") + 1); calendarProgress.SeasonProgress.LastCompletedChallengeDayIdx = currentSeason.Days.findIndex(
calendarProgress.SeasonProgress.LastCompletedDayIdx++; x => x.events[0].challenge == value[value.length - 1].challenge
calendarProgress.SeasonProgress.LastCompletedChallengeDayIdx++; );
calendarProgress.SeasonProgress.ActivatedChallenges.push(challengeName); checkCalendarChallengeCompletion(calendarProgress, currentSeason);
}
break; break;
} }
case "duviriCaveOffers": { case "duviriCaveOffers": {