From 5f22614078f08c7c927470b0d7393d2caffa5d79 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 25 Apr 2025 06:23:22 +0200 Subject: [PATCH] fix: some problems with 1999 calendar rotation - First day was incorrect for summer & autumn - Only 1 reward was shown, now is a choice of 2 - Only 1 upgrade was shown, now is a choice of 3 --- src/services/worldStateService.ts | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/services/worldStateService.ts b/src/services/worldStateService.ts index f726e603..bbcbff20 100644 --- a/src/services/worldStateService.ts +++ b/src/services/worldStateService.ts @@ -7,6 +7,7 @@ import { CRng } from "@/src/services/rngService"; import { eMissionType, ExportNightwave, ExportRegions, IRegion } from "warframe-public-export-plus"; import { ICalendarDay, + ICalendarEvent, ICalendarSeason, ILiteSortie, ISeasonChallenge, @@ -464,8 +465,8 @@ const birthdays: number[] = [ const getCalendarSeason = (week: number): ICalendarSeason => { const seasonIndex = week % 4; - const seasonDay1 = seasonIndex * 90 + 1; - const seasonDay91 = seasonIndex * 90 + 91; + const seasonDay1 = [1, 91, 182, 274][seasonIndex]; + const seasonDay91 = seasonDay1 + 90; const eventDays: ICalendarDay[] = []; for (const day of birthdays) { if (day < seasonDay1) { @@ -572,16 +573,19 @@ const getCalendarSeason = (week: number): ICalendarSeason => { "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalViolet" ]; for (let i = 0; i != rewardRanges.length - 1; ++i) { - const rewardIndex = rng.randomInt(0, rewards.length - 1); - const reward = rewards[rewardIndex]; - rewards.splice(rewardIndex, 1); + const events: ICalendarEvent[] = []; + for (let j = 0; j != 2; ++j) { + const rewardIndex = rng.randomInt(0, rewards.length - 1); + events.push({ type: "CET_REWARD", reward: rewards[rewardIndex] }); + rewards.splice(rewardIndex, 1); + } - //logger.debug(`trying to fit a reward between day ${rewardRanges[i]} and ${rewardRanges[i + 1]}`); + //logger.debug(`trying to fit rewards between day ${rewardRanges[i]} and ${rewardRanges[i + 1]}`); let day: number; do { day = rng.randomInt(rewardRanges[i] + 1, rewardRanges[i + 1] - 1); } while (eventDays.find(x => x.day == day)); - eventDays.push({ day, events: [{ type: "CET_REWARD", reward }] }); + eventDays.push({ day, events }); } const upgrades = [ @@ -625,16 +629,19 @@ const getCalendarSeason = (week: number): ICalendarSeason => { "/Lotus/Upgrades/Calendar/ElectricalDamageOnBulletJump" ]; for (let i = 0; i != upgradeRanges.length - 1; ++i) { - const upgradeIndex = rng.randomInt(0, upgrades.length - 1); - const upgrade = upgrades[upgradeIndex]; - upgrades.splice(upgradeIndex, 1); + const events: ICalendarEvent[] = []; + for (let j = 0; j != 3; ++j) { + const upgradeIndex = rng.randomInt(0, upgrades.length - 1); + events.push({ type: "CET_UPGRADE", upgrade: upgrades[upgradeIndex] }); + upgrades.splice(upgradeIndex, 1); + } - //logger.debug(`trying to fit an upgrade between day ${upgradeRanges[i]} and ${upgradeRanges[i + 1]}`); + //logger.debug(`trying to fit upgrades between day ${upgradeRanges[i]} and ${upgradeRanges[i + 1]}`); let day: number; do { day = rng.randomInt(upgradeRanges[i] + 1, upgradeRanges[i + 1] - 1); } while (eventDays.find(x => x.day == day)); - eventDays.push({ day, events: [{ type: "CET_UPGRADE", upgrade }] }); + eventDays.push({ day, events }); } eventDays.sort((a, b) => a.day - b.day);