feat: cycle 1999 calendar season every week

This commit is contained in:
Sainan 2025-01-09 07:15:29 +01:00
parent eafdd9f755
commit 64d751a199
7 changed files with 711 additions and 3 deletions

View File

@ -1,5 +1,9 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import staticWorldState from "@/static/fixed_responses/worldState.json"; import staticWorldState from "@/static/fixed_responses/worldState/worldState.json";
import static1999FallDays from "@/static/fixed_responses/worldState/1999_fall_days.json";
import static1999SpringDays from "@/static/fixed_responses/worldState/1999_spring_days.json";
import static1999SummerDays from "@/static/fixed_responses/worldState/1999_summer_days.json";
import static1999WinterDays from "@/static/fixed_responses/worldState/1999_winter_days.json";
import { buildConfig } from "@/src/services/buildConfigService"; import { buildConfig } from "@/src/services/buildConfigService";
import { IMongoDate, IOid } from "@/src/types/commonTypes"; import { IMongoDate, IOid } from "@/src/types/commonTypes";
@ -14,7 +18,10 @@ export const worldStateController: RequestHandler = (req, res) => {
...staticWorldState ...staticWorldState
}; };
const week = Math.trunc(new Date().getTime() / 604800000); const day = Math.trunc(new Date().getTime() / 86400000);
const week = Math.trunc((day + 4) / 7); // week begins on mondays
const weekStart = week * 604800000;
const weekEnd = weekStart + 604800000;
// Elite Sanctuary Onslaught cycling every week // Elite Sanctuary Onslaught cycling every week
worldState.NodeOverrides.find(x => x.Node == "SolNode802")!.Seed = week; // unfaithful worldState.NodeOverrides.find(x => x.Node == "SolNode802")!.Seed = week; // unfaithful
@ -79,6 +86,17 @@ export const worldStateController: RequestHandler = (req, res) => {
][week % 8] ][week % 8]
}); });
// 1999 Calendar Season cycling every week
worldState.KnownCalendarSeasons[0].Activation = { $date: { $numberLong: weekStart.toString() } };
worldState.KnownCalendarSeasons[0].Expiry = { $date: { $numberLong: weekEnd.toString() } };
worldState.KnownCalendarSeasons[0].Season = ["CST_WINTER", "CST_SPRING", "CST_SUMMER", "CST_FALL"][week % 4];
worldState.KnownCalendarSeasons[0].Days = [
static1999WinterDays,
static1999SpringDays,
static1999SummerDays,
static1999FallDays
][week % 4];
res.json(worldState); res.json(worldState);
}; };
@ -88,6 +106,7 @@ interface IWorldState {
SyndicateMissions: ISyndicateMission[]; SyndicateMissions: ISyndicateMission[];
NodeOverrides: INodeOverride[]; NodeOverrides: INodeOverride[];
EndlessXpChoices: IEndlessXpChoice[]; EndlessXpChoices: IEndlessXpChoice[];
KnownCalendarSeasons: ICalendarSeason[];
} }
interface ISyndicateMission { interface ISyndicateMission {
@ -115,3 +134,12 @@ interface IEndlessXpChoice {
Category: string; Category: string;
Choices: string[]; Choices: string[];
} }
interface ICalendarSeason {
Activation: IMongoDate;
Expiry: IMongoDate;
Season: string; // "CST_UNDEFINED" | "CST_WINTER" | "CST_SPRING" | "CST_SUMMER" | "CST_FALL"
Days: {
day: number;
}[];
}

View File

@ -14,7 +14,7 @@ import { getVendorManifestByOid } from "@/src/services/serversideVendorsService"
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { IPurchaseRequest, IPurchaseResponse, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes"; import { IPurchaseRequest, IPurchaseResponse, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes";
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
import worldState from "@/static/fixed_responses/worldState.json"; import worldState from "@/static/fixed_responses/worldState/worldState.json";
import { import {
ExportBoosterPacks, ExportBoosterPacks,
ExportBundles, ExportBundles,

View File

@ -0,0 +1,215 @@
[
{
"day": 276,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillScaldraEnemiesEasy"
}
]
},
{
"day": 283,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/CompanionDamage"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/GasChanceToPrimaryAndSecondary"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/ElectricStatusDamageAndChance"
}
]
},
{
"day": 289,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/WeaponUtilityUnlocker"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarMajorArtifactPack"
}
]
},
{
"day": 295,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillEnemiesWithMeleeEasy"
}
]
},
{
"day": 302,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/WeaponSecondaryArcaneUnlocker"
}
]
},
{
"day": 305,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillEximusMedium"
}
]
},
{
"day": 306,
"events": [
{
"type": "CET_PLOT",
"dialogueName": "\/Lotus\/Types\/Gameplay\/1999Wf\/Dialogue\/EleanorDialogue_rom.dialogue",
"dialogueConvo": "EleanorBirthdayConvo"
}
]
},
{
"day": 307,
"events": [
{
"type": "CET_PLOT",
"dialogueName": "\/Lotus\/Types\/Gameplay\/1999Wf\/Dialogue\/ArthurDialogue_rom.dialogue",
"dialogueConvo": "ArthurBirthdayConvo"
}
]
},
{
"day": 309,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/Forma"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Gameplay\/NarmerSorties\/ArchonCrystalBoreal"
}
]
},
{
"day": 314,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/PowerStrengthAndEfficiencyPerEnergySpent"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/ElectricalDamageOnBulletJump"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/MeleeSlideFowardMomentumOnEnemyHit"
}
]
},
{
"day": 322,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillEnemiesMedium"
}
]
},
{
"day": 328,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/WeaponSecondaryArcaneUnlocker"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Packages\/Calendar\/CalendarKuvaBundleSmall"
}
]
},
{
"day": 337,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillScaldraEnemiesWithAbilitiesHard"
}
]
},
{
"day": 338,
"events": [
{
"type": "CET_PLOT",
"dialogueName": "\/Lotus\/Types\/Gameplay\/1999Wf\/Dialogue\/QuincyDialogue_rom.dialogue",
"dialogueConvo": "QuincyBirthdayConvo"
}
]
},
{
"day": 340,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/MeleeCritChance"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/RadiationProcOnTakeDamage"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/AbilityStrength"
}
]
},
{
"day": 343,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/WeaponPrimaryArcaneUnlocker"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/FormaAura"
}
]
},
{
"day": 352,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillTankHard"
}
]
},
{
"day": 364,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarMajorArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Boosters\/ModDropChanceBooster3DayStoreItem"
}
]
}
]

View File

@ -0,0 +1,195 @@
[
{
"day": 100,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillScaldraEnemiesEasy"
}
]
},
{
"day": 101,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/EnergyOrbToAbilityRange"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/ElectricStatusDamageAndChance"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/EnergyRestoration"
}
]
},
{
"day": 102,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Gameplay\/NarmerSorties\/ArchonCrystalBoreal"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarMajorArtifactPack"
}
]
},
{
"day": 106,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillTechrotEnemiesEasy"
}
]
},
{
"day": 107,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Packages\/Calendar\/CalendarKuvaBundleSmall"
}
]
},
{
"day": 122,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillTechrotEnemiesWithMeleeMedium"
}
]
},
{
"day": 127,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/Forma"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Packages\/Calendar\/CalendarVosforPack"
}
]
},
{
"day": 129,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillEnemiesWithAbilitiesMedium"
}
]
},
{
"day": 135,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/WeaponMeleeArcaneUnlocker"
}
]
},
{
"day": 142,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/BlastEveryXShots"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/MagnitizeWithinRangeEveryXCasts"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/GenerateOmniOrbsOnWeakKill"
}
]
},
{
"day": 143,
"events": [
{
"type": "CET_PLOT",
"dialogueName": "\/Lotus\/Types\/Gameplay\/1999Wf\/Dialogue\/JabirDialogue_rom.dialogue",
"dialogueConvo": "AmirBirthdayConvo"
}
]
},
{
"day": 161,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillScaldraEnemiesWithAbilitiesHard"
}
]
},
{
"day": 165,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/Forma"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Boosters\/ModDropChanceBooster3DayStoreItem"
}
]
},
{
"day": 169,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarDestroyPropsHard"
}
]
},
{
"day": 171,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/GasChanceToPrimaryAndSecondary"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/AbilityStrength"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/MeleeCritChance"
}
]
},
{
"day": 176,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Recipes\/Components\/WeaponUtilityUnlockerBlueprint"
}
]
}
]

View File

@ -0,0 +1,195 @@
[
{
"day": 186,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillScaldraEnemiesEasy"
}
]
},
{
"day": 191,
"events": [
{
"type": "CET_PLOT",
"dialogueName": "\/Lotus\/Types\/Gameplay\/1999Wf\/Dialogue\/AoiDialogue_rom.dialogue",
"dialogueConvo": "AoiBirthdayConvo"
}
]
},
{
"day": 193,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Gameplay\/NarmerSorties\/ArchonCrystalAmar"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarMajorArtifactPack"
}
]
},
{
"day": 197,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/MeleeAttackSpeed"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/AbilityStrength"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/CompanionDamage"
}
]
},
{
"day": 199,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillScaldraEnemiesWithMeleeMedium"
}
]
},
{
"day": 210,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Upgrades\/Mods\/FusionBundles\/CircuitSilverSteelPathFusionBundle"
}
]
},
{
"day": 215,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillTechrotEnemiesWithMeleeEasy"
}
]
},
{
"day": 228,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Recipes\/Components\/WeaponUtilityUnlockerBlueprint"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarRivenPack"
}
]
},
{
"day": 236,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarDestroyPropsMedium"
}
]
},
{
"day": 237,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Packages\/Calendar\/CalendarKuvaBundleLarge"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarMajorArtifactPack"
}
]
},
{
"day": 240,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/RadialJavelinOnHeavy"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/SharedFreeAbilityEveryXCasts"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/CompanionsRadiationChance"
}
]
},
{
"day": 245,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillEnemiesWithAbilitiesHard"
}
]
},
{
"day": 250,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/Types\/StoreItems\/Boosters\/AffinityBooster3DayStoreItem"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Recipes\/Components\/OrokinReactorBlueprint"
}
]
},
{
"day": 254,
"events": [
{
"type": "CET_CHALLENGE",
"challenge": "\/Lotus\/Types\/Challenges\/Calendar1999\/CalendarKillTankHard"
}
]
},
{
"day": 267,
"events": [
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/BoosterPacks\/CalendarArtifactPack"
},
{
"type": "CET_REWARD",
"reward": "\/Lotus\/StoreItems\/Types\/Items\/MiscItems\/WeaponSecondaryArcaneUnlocker"
}
]
},
{
"day": 270,
"events": [
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/EnergyOrbToAbilityRange"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/PunchToPrimary"
},
{
"type": "CET_UPGRADE",
"upgrade": "\/Lotus\/Upgrades\/Calendar\/OvershieldCap"
}
]
}
]

View File

@ -0,0 +1,75 @@
[
{ "day": 6, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillEximusEasy" }] },
{
"day": 15,
"events": [
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/MagazineCapacity" },
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/Armor" },
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/EnergyRestoration" }
]
},
{ "day": 21, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillScaldraEnemiesEasy" }] },
{
"day": 25,
"events": [
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/BoosterPacks/CalendarMajorArtifactPack" },
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalGreen" }
]
},
{
"day": 31,
"events": [
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Recipes/Components/WeaponUtilityUnlockerBlueprint" },
{ "type": "CET_REWARD", "reward": "/Lotus/Types/StoreItems/Packages/Calendar/CalendarKuvaBundleSmall" }
]
},
{ "day": 43, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillEnemiesWithAbilitiesMedium" }] },
{ "day": 45, "events": [{ "type": "CET_PLOT", "dialogueName": "/Lotus/Types/Gameplay/1999Wf/Dialogue/LettieDialogue_rom.dialogue", "dialogueConvo": "LettieBirthdayConvo" }] },
{
"day": 47,
"events": [
{ "type": "CET_REWARD", "reward": "/Lotus/Types/StoreItems/Boosters/AffinityBooster3DayStoreItem" },
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/BoosterPacks/CalendarMajorArtifactPack" }
]
},
{ "day": 48, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillScaldraEnemiesWithMeleeMedium" }] },
{
"day": 54,
"events": [
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/CompanionsBuffNearbyPlayer" },
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/OrbsDuplicateOnPickup" },
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/FinisherChancePerComboMultiplier" }
]
},
{
"day": 56,
"events": [
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/BoosterPacks/CalendarArtifactPack" },
{ "type": "CET_REWARD", "reward": "/Lotus/Types/StoreItems/Packages/Calendar/CalendarKuvaBundleSmall" }
]
},
{ "day": 71, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarKillTechrotEnemiesHard" }] },
{
"day": 77,
"events": [
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker" },
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/CircuitSilverSteelPathFusionBundle" }
]
},
{ "day": 80, "events": [{ "type": "CET_CHALLENGE", "challenge": "/Lotus/Types/Challenges/Calendar1999/CalendarDestroyPropsMedium" }] },
{
"day": 83,
"events": [
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Recipes/Components/OrokinReactorBlueprint" },
{ "type": "CET_REWARD", "reward": "/Lotus/StoreItems/Types/Items/MiscItems/WeaponUtilityUnlocker" }
]
},
{
"day": 87,
"events": [
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/EnergyOrbToAbilityRange" },
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/MeleeAttackSpeed" },
{ "type": "CET_UPGRADE", "upgrade": "/Lotus/Upgrades/Calendar/CompanionDamage" }
]
}
]