feat: Varzia (Prime Resurgence) rotation (#2390)
Also closes #1059 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Reviewed-on: #2390 Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									29aadf4e78
								
							
						
					
					
						commit
						ee4adc7d55
					
				@ -78,7 +78,9 @@
 | 
				
			|||||||
    "nightwaveOverride": "",
 | 
					    "nightwaveOverride": "",
 | 
				
			||||||
    "allTheFissures": "",
 | 
					    "allTheFissures": "",
 | 
				
			||||||
    "circuitGameModes": null,
 | 
					    "circuitGameModes": null,
 | 
				
			||||||
    "darvoStockMultiplier": 1
 | 
					    "darvoStockMultiplier": 1,
 | 
				
			||||||
 | 
					    "varziaOverride": "",
 | 
				
			||||||
 | 
					    "varziaFullyStocked": false
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dev": {
 | 
					  "dev": {
 | 
				
			||||||
    "keepVendorsExpired": false
 | 
					    "keepVendorsExpired": false
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ import {
 | 
				
			|||||||
    TRelicQuality
 | 
					    TRelicQuality
 | 
				
			||||||
} from "warframe-public-export-plus";
 | 
					} from "warframe-public-export-plus";
 | 
				
			||||||
import allIncarnons from "@/static/fixed_responses/allIncarnonList.json";
 | 
					import allIncarnons from "@/static/fixed_responses/allIncarnonList.json";
 | 
				
			||||||
 | 
					import varzia from "@/static/fixed_responses/worldState/varzia.json";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface ListedItem {
 | 
					interface ListedItem {
 | 
				
			||||||
    uniqueName: string;
 | 
					    uniqueName: string;
 | 
				
			||||||
@ -55,6 +56,7 @@ interface ItemLists {
 | 
				
			|||||||
    EvolutionProgress: ListedItem[];
 | 
					    EvolutionProgress: ListedItem[];
 | 
				
			||||||
    mods: ListedItem[];
 | 
					    mods: ListedItem[];
 | 
				
			||||||
    Boosters: ListedItem[];
 | 
					    Boosters: ListedItem[];
 | 
				
			||||||
 | 
					    VarziaOffers: ListedItem[];
 | 
				
			||||||
    //circuitGameModes: ListedItem[];
 | 
					    //circuitGameModes: ListedItem[];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -91,7 +93,8 @@ const getItemListsController: RequestHandler = (req, response) => {
 | 
				
			|||||||
        KubrowPets: [],
 | 
					        KubrowPets: [],
 | 
				
			||||||
        EvolutionProgress: [],
 | 
					        EvolutionProgress: [],
 | 
				
			||||||
        mods: [],
 | 
					        mods: [],
 | 
				
			||||||
        Boosters: []
 | 
					        Boosters: [],
 | 
				
			||||||
 | 
					        VarziaOffers: []
 | 
				
			||||||
        /*circuitGameModes: [
 | 
					        /*circuitGameModes: [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                uniqueName: "Survival",
 | 
					                uniqueName: "Survival",
 | 
				
			||||||
@ -338,6 +341,13 @@ const getItemListsController: RequestHandler = (req, response) => {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const item of Object.values(varzia.primeDualPacks)) {
 | 
				
			||||||
 | 
					        res.VarziaOffers.push({
 | 
				
			||||||
 | 
					            uniqueName: item.ItemType,
 | 
				
			||||||
 | 
					            name: getString(getItemName(item.ItemType) || "", lang)
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    response.json(res);
 | 
					    response.json(res);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -89,6 +89,8 @@ export interface IConfig {
 | 
				
			|||||||
        allTheFissures?: string;
 | 
					        allTheFissures?: string;
 | 
				
			||||||
        circuitGameModes?: string[];
 | 
					        circuitGameModes?: string[];
 | 
				
			||||||
        darvoStockMultiplier?: number;
 | 
					        darvoStockMultiplier?: number;
 | 
				
			||||||
 | 
					        varziaOverride?: string;
 | 
				
			||||||
 | 
					        varziaFullyStocked?: boolean;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    dev?: {
 | 
					    dev?: {
 | 
				
			||||||
        keepVendorsExpired?: boolean;
 | 
					        keepVendorsExpired?: boolean;
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import { logger } from "../utils/logger";
 | 
				
			|||||||
import { config, configPath, loadConfig } from "./configService";
 | 
					import { config, configPath, loadConfig } from "./configService";
 | 
				
			||||||
import { getWebPorts, sendWsBroadcast, startWebServer, stopWebServer } from "./webService";
 | 
					import { getWebPorts, sendWsBroadcast, startWebServer, stopWebServer } from "./webService";
 | 
				
			||||||
import { Inbox } from "../models/inboxModel";
 | 
					import { Inbox } from "../models/inboxModel";
 | 
				
			||||||
 | 
					import varzia from "@/static/fixed_responses/worldState/varzia.json";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let amnesia = false;
 | 
					let amnesia = false;
 | 
				
			||||||
chokidar.watch(configPath).on("change", () => {
 | 
					chokidar.watch(configPath).on("change", () => {
 | 
				
			||||||
@ -57,6 +58,13 @@ export const validateConfig = (): void => {
 | 
				
			|||||||
        config.worldState.galleonOfGhouls = 0;
 | 
					        config.worldState.galleonOfGhouls = 0;
 | 
				
			||||||
        modified = true;
 | 
					        modified = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (
 | 
				
			||||||
 | 
					        config.worldState?.varziaOverride &&
 | 
				
			||||||
 | 
					        !varzia.primeDualPacks.some(p => p.ItemType === config.worldState?.varziaOverride)
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					        config.worldState.varziaOverride = "";
 | 
				
			||||||
 | 
					        modified = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (modified) {
 | 
					    if (modified) {
 | 
				
			||||||
        logger.info(`Updating config file to fix some issues with it.`);
 | 
					        logger.info(`Updating config file to fix some issues with it.`);
 | 
				
			||||||
        void saveConfig();
 | 
					        void saveConfig();
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ import {
 | 
				
			|||||||
    dict_zh,
 | 
					    dict_zh,
 | 
				
			||||||
    ExportArcanes,
 | 
					    ExportArcanes,
 | 
				
			||||||
    ExportBoosters,
 | 
					    ExportBoosters,
 | 
				
			||||||
 | 
					    ExportBundles,
 | 
				
			||||||
    ExportCustoms,
 | 
					    ExportCustoms,
 | 
				
			||||||
    ExportDrones,
 | 
					    ExportDrones,
 | 
				
			||||||
    ExportGear,
 | 
					    ExportGear,
 | 
				
			||||||
@ -117,6 +118,9 @@ export const getItemName = (uniqueName: string): string | undefined => {
 | 
				
			|||||||
    if (uniqueName in ExportArcanes) {
 | 
					    if (uniqueName in ExportArcanes) {
 | 
				
			||||||
        return ExportArcanes[uniqueName].name;
 | 
					        return ExportArcanes[uniqueName].name;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (uniqueName in ExportBundles) {
 | 
				
			||||||
 | 
					        return ExportBundles[uniqueName].name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (uniqueName in ExportCustoms) {
 | 
					    if (uniqueName in ExportCustoms) {
 | 
				
			||||||
        return ExportCustoms[uniqueName].name;
 | 
					        return ExportCustoms[uniqueName].name;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,6 @@ import {
 | 
				
			|||||||
} from "@/src/types/purchaseTypes";
 | 
					} from "@/src/types/purchaseTypes";
 | 
				
			||||||
import { logger } from "@/src/utils/logger";
 | 
					import { logger } from "@/src/utils/logger";
 | 
				
			||||||
import { getWorldState } from "./worldStateService";
 | 
					import { getWorldState } from "./worldStateService";
 | 
				
			||||||
import staticWorldState from "@/static/fixed_responses/worldState/worldState.json";
 | 
					 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    ExportBoosterPacks,
 | 
					    ExportBoosterPacks,
 | 
				
			||||||
    ExportBoosters,
 | 
					    ExportBoosters,
 | 
				
			||||||
@ -305,14 +304,15 @@ export const handlePurchase = async (
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case PurchaseSource.PrimeVaultTrader: {
 | 
					        case PurchaseSource.PrimeVaultTrader: {
 | 
				
			||||||
            if (purchaseRequest.PurchaseParams.SourceId! != staticWorldState.PrimeVaultTraders[0]._id.$oid) {
 | 
					            const worldState = getWorldState();
 | 
				
			||||||
 | 
					            if (purchaseRequest.PurchaseParams.SourceId! != worldState.PrimeVaultTraders[0]._id.$oid) {
 | 
				
			||||||
                throw new Error("invalid request source");
 | 
					                throw new Error("invalid request source");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            const offer =
 | 
					            const offer =
 | 
				
			||||||
                staticWorldState.PrimeVaultTraders[0].Manifest.find(
 | 
					                worldState.PrimeVaultTraders[0].Manifest.find(
 | 
				
			||||||
                    x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem
 | 
					                    x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem
 | 
				
			||||||
                ) ??
 | 
					                ) ??
 | 
				
			||||||
                staticWorldState.PrimeVaultTraders[0].EvergreenManifest.find(
 | 
					                worldState.PrimeVaultTraders[0].EvergreenManifest.find(
 | 
				
			||||||
                    x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem
 | 
					                    x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            if (offer) {
 | 
					            if (offer) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
import staticWorldState from "@/static/fixed_responses/worldState/worldState.json";
 | 
					import staticWorldState from "@/static/fixed_responses/worldState/worldState.json";
 | 
				
			||||||
import baro from "@/static/fixed_responses/worldState/baro.json";
 | 
					import baro from "@/static/fixed_responses/worldState/baro.json";
 | 
				
			||||||
 | 
					import varzia from "@/static/fixed_responses/worldState/varzia.json";
 | 
				
			||||||
import fissureMissions from "@/static/fixed_responses/worldState/fissureMissions.json";
 | 
					import fissureMissions from "@/static/fixed_responses/worldState/fissureMissions.json";
 | 
				
			||||||
import sortieTilesets from "@/static/fixed_responses/worldState/sortieTilesets.json";
 | 
					import sortieTilesets from "@/static/fixed_responses/worldState/sortieTilesets.json";
 | 
				
			||||||
import sortieTilesetMissions from "@/static/fixed_responses/worldState/sortieTilesetMissions.json";
 | 
					import sortieTilesetMissions from "@/static/fixed_responses/worldState/sortieTilesetMissions.json";
 | 
				
			||||||
@ -15,6 +16,8 @@ import {
 | 
				
			|||||||
    ICalendarEvent,
 | 
					    ICalendarEvent,
 | 
				
			||||||
    ICalendarSeason,
 | 
					    ICalendarSeason,
 | 
				
			||||||
    ILiteSortie,
 | 
					    ILiteSortie,
 | 
				
			||||||
 | 
					    IPrimeVaultTrader,
 | 
				
			||||||
 | 
					    IPrimeVaultTraderOffer,
 | 
				
			||||||
    ISeasonChallenge,
 | 
					    ISeasonChallenge,
 | 
				
			||||||
    ISortie,
 | 
					    ISortie,
 | 
				
			||||||
    ISortieMission,
 | 
					    ISortieMission,
 | 
				
			||||||
@ -1101,6 +1104,80 @@ const doesTimeSatsifyConstraints = (timeSecs: number): boolean => {
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const getVarziaRotation = (week: number): string => {
 | 
				
			||||||
 | 
					    const seed = new SRng(week).randomInt(0, 100_000);
 | 
				
			||||||
 | 
					    const rng = new SRng(seed);
 | 
				
			||||||
 | 
					    return rng.randomElement(varzia.primeDualPacks)!.ItemType;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const getVarziaManifest = (dualPack: string): IPrimeVaultTraderOffer[] => {
 | 
				
			||||||
 | 
					    const rotrationManifest = varzia.primeDualPacks.find(pack => pack.ItemType === dualPack);
 | 
				
			||||||
 | 
					    if (!rotrationManifest) return [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const mainPack = [{ ItemType: rotrationManifest.ItemType, PrimePrice: 10 }];
 | 
				
			||||||
 | 
					    const singlePacks: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					    const items: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					    const bobbleHeads: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const singlePackType of rotrationManifest.SinglePacks) {
 | 
				
			||||||
 | 
					        singlePacks.push({ ItemType: singlePackType, PrimePrice: 6 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const sp = varzia.primeSinglePacks.find(pack => pack.ItemType === singlePackType);
 | 
				
			||||||
 | 
					        if (sp) {
 | 
				
			||||||
 | 
					            items.push(...sp.Items);
 | 
				
			||||||
 | 
					            sp.BobbleHeads.forEach(bobbleHead => {
 | 
				
			||||||
 | 
					                bobbleHeads.push({ ItemType: bobbleHead, PrimePrice: 1 });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const relics = rotrationManifest.Relics.map(relic => ({ ItemType: relic, RegularPrice: 1 }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [singlePacks[0], ...mainPack, singlePacks[1], ...items, ...bobbleHeads, ...relics];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const getAllVarziaManifests = (): IPrimeVaultTraderOffer[] => {
 | 
				
			||||||
 | 
					    const dualPacks: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					    const singlePacks: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					    const items: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					    const bobbleHeads: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					    const relics: IPrimeVaultTraderOffer[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const singlePackSet = new Set<string>();
 | 
				
			||||||
 | 
					    const itemsSet = new Set<string>();
 | 
				
			||||||
 | 
					    const bobbleHeadsSet = new Set<string>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    varzia.primeDualPacks.forEach(dualPack => {
 | 
				
			||||||
 | 
					        dualPacks.push({ ItemType: dualPack.ItemType, PrimePrice: 10 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dualPack.SinglePacks.forEach(singlePackType => {
 | 
				
			||||||
 | 
					            if (!singlePackSet.has(singlePackType)) {
 | 
				
			||||||
 | 
					                singlePackSet.add(singlePackType);
 | 
				
			||||||
 | 
					                singlePacks.push({ ItemType: singlePackType, PrimePrice: 6 });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const sp = varzia.primeSinglePacks.find(pack => pack.ItemType === singlePackType)!;
 | 
				
			||||||
 | 
					            sp.Items.forEach(item => {
 | 
				
			||||||
 | 
					                if (!itemsSet.has(item.ItemType)) {
 | 
				
			||||||
 | 
					                    itemsSet.add(item.ItemType);
 | 
				
			||||||
 | 
					                    items.push(item);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            sp.BobbleHeads.forEach(bobbleHead => {
 | 
				
			||||||
 | 
					                if (!bobbleHeadsSet.has(bobbleHead)) {
 | 
				
			||||||
 | 
					                    bobbleHeadsSet.add(bobbleHead);
 | 
				
			||||||
 | 
					                    bobbleHeads.push({ ItemType: bobbleHead, PrimePrice: 1 });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        relics.push(...dualPack.Relics.map(relic => ({ ItemType: relic, RegularPrice: 1 })));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [...dualPacks, ...singlePacks, ...items, ...bobbleHeads, ...relics];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
					export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			||||||
    let timeSecs = Math.round(Date.now() / 1000);
 | 
					    let timeSecs = Math.round(Date.now() / 1000);
 | 
				
			||||||
    while (!doesTimeSatsifyConstraints(timeSecs)) {
 | 
					    while (!doesTimeSatsifyConstraints(timeSecs)) {
 | 
				
			||||||
@ -1122,6 +1199,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
        ActiveMissions: [],
 | 
					        ActiveMissions: [],
 | 
				
			||||||
        GlobalUpgrades: [],
 | 
					        GlobalUpgrades: [],
 | 
				
			||||||
        VoidTraders: [],
 | 
					        VoidTraders: [],
 | 
				
			||||||
 | 
					        PrimeVaultTraders: [],
 | 
				
			||||||
        VoidStorms: [],
 | 
					        VoidStorms: [],
 | 
				
			||||||
        DailyDeals: [],
 | 
					        DailyDeals: [],
 | 
				
			||||||
        EndlessXpChoices: [],
 | 
					        EndlessXpChoices: [],
 | 
				
			||||||
@ -1393,6 +1471,30 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Varzia
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        const pt: IPrimeVaultTrader = {
 | 
				
			||||||
 | 
					            _id: { $oid: ((weekStart / 1000) & 0xffffffff).toString(16).padStart(8, "0") + "c36af423770eaa97" },
 | 
				
			||||||
 | 
					            Activation: { $date: { $numberLong: weekStart.toString() } },
 | 
				
			||||||
 | 
					            Expiry: { $date: { $numberLong: weekEnd.toString() } },
 | 
				
			||||||
 | 
					            Node: "TradeHUB1",
 | 
				
			||||||
 | 
					            Manifest: [],
 | 
				
			||||||
 | 
					            EvergreenManifest: varzia.evergreen,
 | 
				
			||||||
 | 
					            ScheduleInfo: []
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        worldState.PrimeVaultTraders.push(pt);
 | 
				
			||||||
 | 
					        const rotation = config.worldState?.varziaOverride || getVarziaRotation(week);
 | 
				
			||||||
 | 
					        pt.Manifest = config.worldState?.varziaFullyStocked ? getAllVarziaManifests() : getVarziaManifest(rotation);
 | 
				
			||||||
 | 
					        if (config.worldState?.varziaOverride || config.worldState?.varziaFullyStocked) {
 | 
				
			||||||
 | 
					            pt.Expiry = { $date: { $numberLong: "2000000000000" } };
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            pt.ScheduleInfo.push({
 | 
				
			||||||
 | 
					                Expiry: { $date: { $numberLong: (weekEnd + unixTimesInMs.week).toString() } },
 | 
				
			||||||
 | 
					                FeaturedItem: getVarziaRotation(week + 1)
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Sortie & syndicate missions cycling every day (at 16:00 or 17:00 UTC depending on if London, OT is observing DST)
 | 
					    // Sortie & syndicate missions cycling every day (at 16:00 or 17:00 UTC depending on if London, OT is observing DST)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        const rollover = getSortieTime(day);
 | 
					        const rollover = getSortieTime(day);
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ export interface IWorldState {
 | 
				
			|||||||
    GlobalUpgrades: IGlobalUpgrade[];
 | 
					    GlobalUpgrades: IGlobalUpgrade[];
 | 
				
			||||||
    NodeOverrides: INodeOverride[];
 | 
					    NodeOverrides: INodeOverride[];
 | 
				
			||||||
    VoidTraders: IVoidTrader[];
 | 
					    VoidTraders: IVoidTrader[];
 | 
				
			||||||
 | 
					    PrimeVaultTraders: IPrimeVaultTrader[];
 | 
				
			||||||
    VoidStorms: IVoidStorm[];
 | 
					    VoidStorms: IVoidStorm[];
 | 
				
			||||||
    DailyDeals: IDailyDeal[];
 | 
					    DailyDeals: IDailyDeal[];
 | 
				
			||||||
    PVPChallengeInstances: IPVPChallengeInstance[];
 | 
					    PVPChallengeInstances: IPVPChallengeInstance[];
 | 
				
			||||||
@ -171,6 +172,31 @@ export interface IVoidStorm {
 | 
				
			|||||||
    ActiveMissionTier: string;
 | 
					    ActiveMissionTier: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IPrimeVaultTrader {
 | 
				
			||||||
 | 
					    _id: IOid;
 | 
				
			||||||
 | 
					    Activation: IMongoDate;
 | 
				
			||||||
 | 
					    Expiry: IMongoDate;
 | 
				
			||||||
 | 
					    InitialStartDate?: IMongoDate;
 | 
				
			||||||
 | 
					    Node: string;
 | 
				
			||||||
 | 
					    Manifest: IPrimeVaultTraderOffer[];
 | 
				
			||||||
 | 
					    EvergreenManifest: IPrimeVaultTraderOffer[];
 | 
				
			||||||
 | 
					    ScheduleInfo: IScheduleInfo[];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IPrimeVaultTraderOffer {
 | 
				
			||||||
 | 
					    ItemType: string;
 | 
				
			||||||
 | 
					    PrimePrice?: number;
 | 
				
			||||||
 | 
					    RegularPrice?: number;
 | 
				
			||||||
 | 
					    StartDate?: IMongoDate;
 | 
				
			||||||
 | 
					    EndDate?: IMongoDate;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IScheduleInfo {
 | 
				
			||||||
 | 
					    Expiry: IMongoDate;
 | 
				
			||||||
 | 
					    PreviewHiddenUntil?: IMongoDate;
 | 
				
			||||||
 | 
					    FeaturedItem?: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IDailyDeal {
 | 
					export interface IDailyDeal {
 | 
				
			||||||
    StoreItem: string;
 | 
					    StoreItem: string;
 | 
				
			||||||
    Activation: IMongoDate;
 | 
					    Activation: IMongoDate;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1392
									
								
								static/fixed_responses/worldState/varzia.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1392
									
								
								static/fixed_responses/worldState/varzia.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -347,169 +347,9 @@
 | 
				
			|||||||
      "Activation": { "$date": { "$numberLong": "1563030000000" } }
 | 
					      "Activation": { "$date": { "$numberLong": "1563030000000" } }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "PrimeVaultTraders": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "_id": { "$oid": "631f8c4ac36af423770eaa97" },
 | 
					 | 
				
			||||||
      "Activation": { "$date": { "$numberLong": "1712858400000" } },
 | 
					 | 
				
			||||||
      "InitialStartDate": { "$date": { "$numberLong": "2000000000000" } },
 | 
					 | 
				
			||||||
      "Node": "TradeHUB1",
 | 
					 | 
				
			||||||
      "Manifest": [
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxPrimeSinglePack", "PrimePrice": 6 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack", "PrimePrice": 10 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVWukongPrimeSinglePack", "PrimePrice": 6 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Powersuits/YinYang/EquinoxPrime", "PrimePrice": 3 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeCapeEquinox", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNarvarrPrimeArmorSet", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeStradavar/PrimeStradavarGun", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Staff/TipedoPrime/TipedoPrimeWeapon", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Powersuits/MonkeyKing/WukongPrime", "PrimePrice": 3 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeWukongSyandana", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVWukongPrimeKubrowArmor", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Effects/EphemeraPrimeA", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeZhuge/PrimeZhugeCrossbow", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeNinkondi/PrimeNikondi", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/EquinoxPrimeBobbleHead", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/EquinoxPrimeNightBobbleHead", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/EquinoxPrimeDayBobbleHead", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/WukongPrimeBobbleHead", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionWukongEquinoxVaultABronze", "RegularPrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionWukongEquinoxVaultBBronze", "RegularPrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionWukongEquinoxVaultABronze", "RegularPrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionWukongEquinoxVaultABronze", "RegularPrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionWukongEquinoxVaultBBronze", "RegularPrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionWukongEquinoxVaultABronze", "RegularPrice": 1 }
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "Expiry": { "$date": { "$numberLong": "2000000000000" } },
 | 
					 | 
				
			||||||
      "EvergreenManifest": [
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/DualDagger/FangPrimeDagger", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeLex/PrimeLex", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Game/ShipScenes/PrimeLisetFiligreeScene", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAviaPrimeArmorSet", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVayasPrimeAccessories", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/TwitchPrimeMeleeDangle", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeAviaSyandana", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeTwitchScarf", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeBurston/PrimeBurston", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/TwitchPrimeScarf", "PrimePrice": 2 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/TwitchPrimeSigil", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNecraloidBundle", "RegularPrice": 10 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BratonPrime", "PrimePrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Liset/LisetSkinTwitchPrime", "RegularPrice": 10 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/InfMembraneCape", "RegularPrice": 10 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/GaraPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/GaussPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/GrendelPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/HildrynPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/HydroidPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/KhoraPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/NekrosPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/NidusPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/OberonPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/OctaviaPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/RevenantPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/VaubanPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/ProteaPrimeSongItem", "RegularPrice": 5 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/PrimeBucks", "RegularPrice": 1 },
 | 
					 | 
				
			||||||
        { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoidTraceBundle", "RegularPrice": 1 }
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "ScheduleInfo": [
 | 
					 | 
				
			||||||
        { "Expiry": { "$date": { "$numberLong": "1667498400000" } }, "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack" },
 | 
					 | 
				
			||||||
        { "Expiry": { "$date": { "$numberLong": "1669921200000" } }, "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVValkyrSarynPrimeDualPack" },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1672945200000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1668711600000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1675364400000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1671130800000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltLokiPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1677783600000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1674154800000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAtlasVaubanPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1680804000000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1676473200000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1683223200000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1679594400000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVMagRhinoPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1685718000000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1682013600000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1688666400000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1684433100000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVInarosAshPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1691085600000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1687456800000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVBansheeMiragePrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1694109600000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1689876000000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVFrostMagPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1696528800000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1692900000000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1698948000000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1695319200000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVZephyrChromaPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1703185200000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1697738400000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNezhaOctaviaPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1704394800000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1697738400000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        { "Expiry": { "$date": { "$numberLong": "1705604400000" } }, "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" },
 | 
					 | 
				
			||||||
        { "Expiry": { "$date": { "$numberLong": "1706814000000" } }, "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" },
 | 
					 | 
				
			||||||
        { "Expiry": { "$date": { "$numberLong": "1708023600000" } }, "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1710439200000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1706814000000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVBansheeMiragePrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1712858400000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1709233200000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTitaniaGaraPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1715277600000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1711648800000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVInarosAshPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "Expiry": { "$date": { "$numberLong": "1717696800000" } },
 | 
					 | 
				
			||||||
          "PreviewHiddenUntil": { "$date": { "$numberLong": "1714068000000" } },
 | 
					 | 
				
			||||||
          "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        { "Expiry": { "$date": { "$numberLong": "1720116000000" } }, "PreviewHiddenUntil": { "$date": { "$numberLong": "1716487200000" } } }
 | 
					 | 
				
			||||||
      ]
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "PrimeAccessAvailability": { "State": "PRIME1" },
 | 
					  "PrimeAccessAvailability": { "State": "PRIME1" },
 | 
				
			||||||
  "PrimeVaultAvailabilities": [false, false, false, false, false],
 | 
					  "PrimeVaultAvailabilities": [false, false, false, false, false],
 | 
				
			||||||
  "PrimeTokenAvailability": true,
 | 
					  "PrimeTokenAvailability": false,
 | 
				
			||||||
  "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" },
 | 
					  "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" },
 | 
				
			||||||
  "PVPChallengeInstances": [
 | 
					  "PVPChallengeInstances": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -864,9 +864,13 @@
 | 
				
			|||||||
                                    <input class="form-check-input" type="checkbox" id="worldState.starDays" />
 | 
					                                    <input class="form-check-input" type="checkbox" id="worldState.starDays" />
 | 
				
			||||||
                                    <label class="form-check-label" for="worldState.starDays" data-loc="worldState_starDays"></label>
 | 
					                                    <label class="form-check-label" for="worldState.starDays" data-loc="worldState_starDays"></label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <div class="form-check">
 | 
				
			||||||
 | 
					                                    <input class="form-check-input" type="checkbox" id="worldState.varziaFullyStocked" />
 | 
				
			||||||
 | 
					                                    <label class="form-check-label" for="worldState.varziaFullyStocked" data-loc="worldState_varziaFullyStocked"></label>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
                                <div class="form-group mt-2">
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.galleonOfGhouls" data-loc="worldState_galleonOfGhouls"></label>
 | 
					                                    <label class="form-label" for="worldState.galleonOfGhouls" data-loc="worldState_galleonOfGhouls"></label>
 | 
				
			||||||
                                    <select class="form-control" id="worldState.galleonOfGhouls">
 | 
					                                    <select class="form-control" id="worldState.galleonOfGhouls" data-default="">
 | 
				
			||||||
                                        <option value="0" data-loc="disabled"></option>
 | 
					                                        <option value="0" data-loc="disabled"></option>
 | 
				
			||||||
                                        <option value="1" data-loc="worldState_we1"></option>
 | 
					                                        <option value="1" data-loc="worldState_we1"></option>
 | 
				
			||||||
                                        <option value="2" data-loc="worldState_we2"></option>
 | 
					                                        <option value="2" data-loc="worldState_we2"></option>
 | 
				
			||||||
@ -875,7 +879,7 @@
 | 
				
			|||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="form-group mt-2">
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.eidolonOverride" data-loc="worldState_eidolonOverride"></label>
 | 
					                                    <label class="form-label" for="worldState.eidolonOverride" data-loc="worldState_eidolonOverride"></label>
 | 
				
			||||||
                                    <select class="form-control" id="worldState.eidolonOverride">
 | 
					                                    <select class="form-control" id="worldState.eidolonOverride" data-default="">
 | 
				
			||||||
                                        <option value="" data-loc="disabled"></option>
 | 
					                                        <option value="" data-loc="disabled"></option>
 | 
				
			||||||
                                        <option value="day" data-loc="worldState_day"></option>
 | 
					                                        <option value="day" data-loc="worldState_day"></option>
 | 
				
			||||||
                                        <option value="night" data-loc="worldState_night"></option>
 | 
					                                        <option value="night" data-loc="worldState_night"></option>
 | 
				
			||||||
@ -883,7 +887,7 @@
 | 
				
			|||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="form-group mt-2">
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.vallisOverride" data-loc="worldState_vallisOverride"></label>
 | 
					                                    <label class="form-label" for="worldState.vallisOverride" data-loc="worldState_vallisOverride"></label>
 | 
				
			||||||
                                    <select class="form-control" id="worldState.vallisOverride">
 | 
					                                    <select class="form-control" id="worldState.vallisOverride" data-default="">
 | 
				
			||||||
                                        <option value="" data-loc="disabled"></option>
 | 
					                                        <option value="" data-loc="disabled"></option>
 | 
				
			||||||
                                        <option value="warm" data-loc="worldState_warm"></option>
 | 
					                                        <option value="warm" data-loc="worldState_warm"></option>
 | 
				
			||||||
                                        <option value="cold" data-loc="worldState_cold"></option>
 | 
					                                        <option value="cold" data-loc="worldState_cold"></option>
 | 
				
			||||||
@ -891,7 +895,7 @@
 | 
				
			|||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="form-group mt-2">
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.duviriOverride" data-loc="worldState_duviriOverride"></label>
 | 
					                                    <label class="form-label" for="worldState.duviriOverride" data-loc="worldState_duviriOverride"></label>
 | 
				
			||||||
                                    <select class="form-control" id="worldState.duviriOverride">
 | 
					                                    <select class="form-control" id="worldState.duviriOverride" data-default="">
 | 
				
			||||||
                                        <option value="" data-loc="disabled"></option>
 | 
					                                        <option value="" data-loc="disabled"></option>
 | 
				
			||||||
                                        <option value="joy" data-loc="worldState_joy"></option>
 | 
					                                        <option value="joy" data-loc="worldState_joy"></option>
 | 
				
			||||||
                                        <option value="anger" data-loc="worldState_anger"></option>
 | 
					                                        <option value="anger" data-loc="worldState_anger"></option>
 | 
				
			||||||
@ -902,7 +906,7 @@
 | 
				
			|||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="form-group mt-2">
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.nightwaveOverride" data-loc="worldState_nightwaveOverride"></label>
 | 
					                                    <label class="form-label" for="worldState.nightwaveOverride" data-loc="worldState_nightwaveOverride"></label>
 | 
				
			||||||
                                    <select class="form-control" id="worldState.nightwaveOverride">
 | 
					                                    <select class="form-control" id="worldState.nightwaveOverride" data-default="">
 | 
				
			||||||
                                        <option value="" data-loc="disabled"></option>
 | 
					                                        <option value="" data-loc="disabled"></option>
 | 
				
			||||||
                                        <option value="RadioLegionIntermission13Syndicate" data-loc="worldState_RadioLegionIntermission13Syndicate"></option>
 | 
					                                        <option value="RadioLegionIntermission13Syndicate" data-loc="worldState_RadioLegionIntermission13Syndicate"></option>
 | 
				
			||||||
                                        <option value="RadioLegionIntermission12Syndicate" data-loc="worldState_RadioLegionIntermission12Syndicate"></option>
 | 
					                                        <option value="RadioLegionIntermission12Syndicate" data-loc="worldState_RadioLegionIntermission12Syndicate"></option>
 | 
				
			||||||
@ -924,12 +928,16 @@
 | 
				
			|||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="form-group mt-2">
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.allTheFissures" data-loc="worldState_fissures"></label>
 | 
					                                    <label class="form-label" for="worldState.allTheFissures" data-loc="worldState_fissures"></label>
 | 
				
			||||||
                                    <select class="form-control" id="worldState.allTheFissures">
 | 
					                                    <select class="form-control" id="worldState.allTheFissures" data-default="">
 | 
				
			||||||
                                        <option value="" data-loc="normal"></option>
 | 
					                                        <option value="" data-loc="normal"></option>
 | 
				
			||||||
                                        <option value="normal" data-loc="worldState_allAtOnceNormal"></option>
 | 
					                                        <option value="normal" data-loc="worldState_allAtOnceNormal"></option>
 | 
				
			||||||
                                        <option value="hard" data-loc="worldState_allAtOnceSteelPath"></option>
 | 
					                                        <option value="hard" data-loc="worldState_allAtOnceSteelPath"></option>
 | 
				
			||||||
                                    </select>
 | 
					                                    </select>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <div class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="worldState.varziaOverride" data-loc="worldState_varziaOverride"></label>
 | 
				
			||||||
 | 
					                                    <select class="form-control" id="worldState.varziaOverride" data-default=""></select>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
                                <form class="form-group mt-2" onsubmit="doSaveConfigStringArray('worldState.circuitGameModes'); return false;">
 | 
					                                <form class="form-group mt-2" onsubmit="doSaveConfigStringArray('worldState.circuitGameModes'); return false;">
 | 
				
			||||||
                                    <label class="form-label" for="worldState.circuitGameModes" data-loc="worldState_theCircuitOverride"></label>
 | 
					                                    <label class="form-label" for="worldState.circuitGameModes" data-loc="worldState_theCircuitOverride"></label>
 | 
				
			||||||
                                    <div class="input-group">
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
				
			|||||||
@ -285,6 +285,7 @@ function fetchItemList() {
 | 
				
			|||||||
            document.getElementById("changeSyndicate").appendChild(syndicateNone);
 | 
					            document.getElementById("changeSyndicate").appendChild(syndicateNone);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            document.getElementById("valenceBonus-innateDamage").innerHTML = "";
 | 
					            document.getElementById("valenceBonus-innateDamage").innerHTML = "";
 | 
				
			||||||
 | 
					            document.getElementById("worldState.varziaOverride").innerHTML = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // prettier-ignore
 | 
					            // prettier-ignore
 | 
				
			||||||
            data.archonCrystalUpgrades = {
 | 
					            data.archonCrystalUpgrades = {
 | 
				
			||||||
@ -420,6 +421,11 @@ function fetchItemList() {
 | 
				
			|||||||
                name: loc("code_pigment")
 | 
					                name: loc("code_pigment")
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            data.VarziaOffers.unshift({
 | 
				
			||||||
 | 
					                uniqueName: "",
 | 
				
			||||||
 | 
					                name: loc("disabled")
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const itemMap = {
 | 
					            const itemMap = {
 | 
				
			||||||
                // Generics for rivens
 | 
					                // Generics for rivens
 | 
				
			||||||
                "/Lotus/Weapons/Tenno/Archwing/Primary/ArchGun": { name: loc("code_archgun") },
 | 
					                "/Lotus/Weapons/Tenno/Archwing/Primary/ArchGun": { name: loc("code_archgun") },
 | 
				
			||||||
@ -469,6 +475,13 @@ function fetchItemList() {
 | 
				
			|||||||
                        option.textContent = name;
 | 
					                        option.textContent = name;
 | 
				
			||||||
                        document.getElementById("valenceBonus-innateDamage").appendChild(option);
 | 
					                        document.getElementById("valenceBonus-innateDamage").appendChild(option);
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
 | 
					                } else if (type == "VarziaOffers") {
 | 
				
			||||||
 | 
					                    items.forEach(item => {
 | 
				
			||||||
 | 
					                        const option = document.createElement("option");
 | 
				
			||||||
 | 
					                        option.value = item.uniqueName;
 | 
				
			||||||
 | 
					                        option.textContent = item.name;
 | 
				
			||||||
 | 
					                        document.getElementById("worldState.varziaOverride").appendChild(option);
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
                } else if (type == "uniqueLevelCaps") {
 | 
					                } else if (type == "uniqueLevelCaps") {
 | 
				
			||||||
                    uniqueLevelCaps = items;
 | 
					                    uniqueLevelCaps = items;
 | 
				
			||||||
                } else if (type == "Syndicates") {
 | 
					                } else if (type == "Syndicates") {
 | 
				
			||||||
 | 
				
			|||||||
@ -246,6 +246,8 @@ dict = {
 | 
				
			|||||||
    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
					    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
				
			||||||
    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
					    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
					    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
				
			||||||
 | 
					    worldState_varziaFullyStocked: `[UNTRANSLATED] Varzia Fully Stocked`,
 | 
				
			||||||
 | 
					    worldState_varziaOverride: `[UNTRANSLATED] Varzia Rotation Override`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `Du kannst hier eine vollständige oder teilweise Inventarantwort (Client-Darstellung) einfügen. Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
 | 
					    import_importNote: `Du kannst hier eine vollständige oder teilweise Inventarantwort (Client-Darstellung) einfügen. Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
 | 
				
			||||||
    import_submit: `Absenden`,
 | 
					    import_submit: `Absenden`,
 | 
				
			||||||
 | 
				
			|||||||
@ -245,6 +245,8 @@ dict = {
 | 
				
			|||||||
    worldState_allAtOnceSteelPath: `All At Once, Steel Path`,
 | 
					    worldState_allAtOnceSteelPath: `All At Once, Steel Path`,
 | 
				
			||||||
    worldState_theCircuitOverride: `The Circuit Override`,
 | 
					    worldState_theCircuitOverride: `The Circuit Override`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `Darvo Stock Multiplier`,
 | 
					    worldState_darvoStockMultiplier: `Darvo Stock Multiplier`,
 | 
				
			||||||
 | 
					    worldState_varziaFullyStocked: `Varzia Fully Stocked`,
 | 
				
			||||||
 | 
					    worldState_varziaOverride: `Varzia Rotation Override`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
 | 
					    import_importNote: `You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
 | 
				
			||||||
    import_submit: `Submit`,
 | 
					    import_submit: `Submit`,
 | 
				
			||||||
 | 
				
			|||||||
@ -246,6 +246,8 @@ dict = {
 | 
				
			|||||||
    worldState_allAtOnceSteelPath: `Todo a la vez, Camino de Acero`,
 | 
					    worldState_allAtOnceSteelPath: `Todo a la vez, Camino de Acero`,
 | 
				
			||||||
    worldState_theCircuitOverride: `Cambio del Circuito`,
 | 
					    worldState_theCircuitOverride: `Cambio del Circuito`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `Multiplicador de stock de Darvo`,
 | 
					    worldState_darvoStockMultiplier: `Multiplicador de stock de Darvo`,
 | 
				
			||||||
 | 
					    worldState_varziaFullyStocked: `[UNTRANSLATED] Varzia Fully Stocked`,
 | 
				
			||||||
 | 
					    worldState_varziaOverride: `[UNTRANSLATED] Varzia Rotation Override`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `Puedes proporcionar una respuesta de inventario completa o parcial (representación del cliente) aquí. Todos los campos compatibles con el importador <b>serán sobrescritos</b> en tu cuenta.`,
 | 
					    import_importNote: `Puedes proporcionar una respuesta de inventario completa o parcial (representación del cliente) aquí. Todos los campos compatibles con el importador <b>serán sobrescritos</b> en tu cuenta.`,
 | 
				
			||||||
    import_submit: `Enviar`,
 | 
					    import_submit: `Enviar`,
 | 
				
			||||||
 | 
				
			|||||||
@ -246,6 +246,8 @@ dict = {
 | 
				
			|||||||
    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
					    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
				
			||||||
    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
					    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
					    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
				
			||||||
 | 
					    worldState_varziaFullyStocked: `[UNTRANSLATED] Varzia Fully Stocked`,
 | 
				
			||||||
 | 
					    worldState_varziaOverride: `[UNTRANSLATED] Varzia Rotation Override`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `Import manuel. Toutes les modifcations supportées par l'inventaire <b>écraseront celles présentes dans la base de données</b>.`,
 | 
					    import_importNote: `Import manuel. Toutes les modifcations supportées par l'inventaire <b>écraseront celles présentes dans la base de données</b>.`,
 | 
				
			||||||
    import_submit: `Soumettre`,
 | 
					    import_submit: `Soumettre`,
 | 
				
			||||||
 | 
				
			|||||||
@ -246,6 +246,8 @@ dict = {
 | 
				
			|||||||
    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
					    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
				
			||||||
    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
					    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
					    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
				
			||||||
 | 
					    worldState_varziaFullyStocked: `Полный Ассортимент Варзии`,
 | 
				
			||||||
 | 
					    worldState_varziaOverride: `Изменение Ротации Варзии`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `Вы можете загрузить полный или частичный ответ инвентаря (клиентское представление) здесь. Все поддерживаемые поля <b>будут перезаписаны</b> в вашем аккаунте.`,
 | 
					    import_importNote: `Вы можете загрузить полный или частичный ответ инвентаря (клиентское представление) здесь. Все поддерживаемые поля <b>будут перезаписаны</b> в вашем аккаунте.`,
 | 
				
			||||||
    import_submit: `Отправить`,
 | 
					    import_submit: `Отправить`,
 | 
				
			||||||
 | 
				
			|||||||
@ -246,6 +246,8 @@ dict = {
 | 
				
			|||||||
    worldState_allAtOnceSteelPath: `全部开启(钢铁之路)`,
 | 
					    worldState_allAtOnceSteelPath: `全部开启(钢铁之路)`,
 | 
				
			||||||
    worldState_theCircuitOverride: `无尽回廊任务循环配置:`,
 | 
					    worldState_theCircuitOverride: `无尽回廊任务循环配置:`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `Darvo特惠库存倍率`,
 | 
					    worldState_darvoStockMultiplier: `Darvo特惠库存倍率`,
 | 
				
			||||||
 | 
					    worldState_varziaFullyStocked: `[UNTRANSLATED] Varzia Fully Stocked`,
 | 
				
			||||||
 | 
					    worldState_varziaOverride: `[UNTRANSLATED] Varzia Rotation Override`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `您可以在此处提供完整或部分库存响应(客户端表示)。支持的所有字段<b>将被覆盖</b>到您的账户中。`,
 | 
					    import_importNote: `您可以在此处提供完整或部分库存响应(客户端表示)。支持的所有字段<b>将被覆盖</b>到您的账户中。`,
 | 
				
			||||||
    import_submit: `提交`,
 | 
					    import_submit: `提交`,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user