feat: add worldState.circuitGameModes config option (#2192)
Closes #749 Reviewed-on: OpenWF/SpaceNinjaServer#2192 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:
		
							parent
							
								
									f8d0c9e0cb
								
							
						
					
					
						commit
						9af0e06b70
					
				@ -33,3 +33,4 @@ SpaceNinjaServer requires a `config.json`. To set it up, you can copy the [confi
 | 
				
			|||||||
  - `RadioLegion2Syndicate` for The Emissary
 | 
					  - `RadioLegion2Syndicate` for The Emissary
 | 
				
			||||||
  - `RadioLegionIntermissionSyndicate` for Intermission I
 | 
					  - `RadioLegionIntermissionSyndicate` for Intermission I
 | 
				
			||||||
  - `RadioLegionSyndicate` for The Wolf of Saturn Six
 | 
					  - `RadioLegionSyndicate` for The Wolf of Saturn Six
 | 
				
			||||||
 | 
					- `worldState.circuitGameModes` can be provided with an array of valid game modes (`Survival`, `VoidFlood`, `Excavation`, `Defense`, `Exterminate`, `Assassination`, `Alchemy`)
 | 
				
			||||||
 | 
				
			|||||||
@ -58,7 +58,8 @@
 | 
				
			|||||||
    "starDays": true,
 | 
					    "starDays": true,
 | 
				
			||||||
    "eidolonOverride": "",
 | 
					    "eidolonOverride": "",
 | 
				
			||||||
    "vallisOverride": "",
 | 
					    "vallisOverride": "",
 | 
				
			||||||
    "nightwaveOverride": ""
 | 
					    "nightwaveOverride": "",
 | 
				
			||||||
 | 
					    "circuitGameModes": null
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dev": {
 | 
					  "dev": {
 | 
				
			||||||
    "keepVendorsExpired": false
 | 
					    "keepVendorsExpired": false
 | 
				
			||||||
 | 
				
			|||||||
@ -65,6 +65,7 @@ interface IConfig {
 | 
				
			|||||||
        eidolonOverride?: string;
 | 
					        eidolonOverride?: string;
 | 
				
			||||||
        vallisOverride?: string;
 | 
					        vallisOverride?: string;
 | 
				
			||||||
        nightwaveOverride?: string;
 | 
					        nightwaveOverride?: string;
 | 
				
			||||||
 | 
					        circuitGameModes?: string[];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    dev?: {
 | 
					    dev?: {
 | 
				
			||||||
        keepVendorsExpired?: boolean;
 | 
					        keepVendorsExpired?: boolean;
 | 
				
			||||||
 | 
				
			|||||||
@ -16,8 +16,10 @@ import {
 | 
				
			|||||||
    ISortie,
 | 
					    ISortie,
 | 
				
			||||||
    ISortieMission,
 | 
					    ISortieMission,
 | 
				
			||||||
    ISyndicateMissionInfo,
 | 
					    ISyndicateMissionInfo,
 | 
				
			||||||
 | 
					    ITmp,
 | 
				
			||||||
    IVoidStorm,
 | 
					    IVoidStorm,
 | 
				
			||||||
    IWorldState
 | 
					    IWorldState,
 | 
				
			||||||
 | 
					    TCircuitGameMode
 | 
				
			||||||
} from "../types/worldStateTypes";
 | 
					} from "../types/worldStateTypes";
 | 
				
			||||||
import { version_compare } from "../helpers/inventoryHelpers";
 | 
					import { version_compare } from "../helpers/inventoryHelpers";
 | 
				
			||||||
import { logger } from "../utils/logger";
 | 
					import { logger } from "../utils/logger";
 | 
				
			||||||
@ -1303,10 +1305,9 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
    const cheeseInterval = hourInSeconds * 8;
 | 
					    const cheeseInterval = hourInSeconds * 8;
 | 
				
			||||||
    const cheeseDuration = hourInSeconds * 2;
 | 
					    const cheeseDuration = hourInSeconds * 2;
 | 
				
			||||||
    const cheeseIndex = Math.trunc(timeSecs / cheeseInterval);
 | 
					    const cheeseIndex = Math.trunc(timeSecs / cheeseInterval);
 | 
				
			||||||
    const tmp = {
 | 
					    const tmp: ITmp = {
 | 
				
			||||||
        cavabegin: "1690761600",
 | 
					        cavabegin: "1690761600",
 | 
				
			||||||
        PurchasePlatformLockEnabled: true,
 | 
					        PurchasePlatformLockEnabled: true,
 | 
				
			||||||
        tcsn: true,
 | 
					 | 
				
			||||||
        pgr: {
 | 
					        pgr: {
 | 
				
			||||||
            ts: "1732572900",
 | 
					            ts: "1732572900",
 | 
				
			||||||
            en: "CUSTOM DECALS @ ZEVILA",
 | 
					            en: "CUSTOM DECALS @ ZEVILA",
 | 
				
			||||||
@ -1330,10 +1331,13 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
        fbst: {
 | 
					        fbst: {
 | 
				
			||||||
            a: cheeseIndex * cheeseInterval, // This has a bug where the client shows a negative time for "Xtra cheese starts in ..." until it refreshes the world state. This is because we're only providing the new activation as soon as that time/date is reached. However, this is 100% faithful to live.
 | 
					            a: cheeseIndex * cheeseInterval, // This has a bug where the client shows a negative time for "Xtra cheese starts in ..." until it refreshes the world state. This is because we're only providing the new activation as soon as that time/date is reached. However, this is 100% faithful to live.
 | 
				
			||||||
            e: cheeseIndex * cheeseInterval + cheeseDuration,
 | 
					            e: cheeseIndex * cheeseInterval + cheeseDuration,
 | 
				
			||||||
            n: (cheeseIndex + 1) * hourInSeconds * 8
 | 
					            n: (cheeseIndex + 1) * cheeseInterval
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        sfn: [550, 553, 554, 555][halfHour % 4]
 | 
					        sfn: [550, 553, 554, 555][halfHour % 4]
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					    if (Array.isArray(config.worldState?.circuitGameModes)) {
 | 
				
			||||||
 | 
					        tmp.edg = config.worldState.circuitGameModes as TCircuitGameMode[];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    worldState.Tmp = JSON.stringify(tmp);
 | 
					    worldState.Tmp = JSON.stringify(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return worldState;
 | 
					    return worldState;
 | 
				
			||||||
 | 
				
			|||||||
@ -191,3 +191,48 @@ export interface ICalendarEvent {
 | 
				
			|||||||
    dialogueName?: string;
 | 
					    dialogueName?: string;
 | 
				
			||||||
    dialogueConvo?: string;
 | 
					    dialogueConvo?: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type TCircuitGameMode =
 | 
				
			||||||
 | 
					    | "Survival"
 | 
				
			||||||
 | 
					    | "VoidFlood"
 | 
				
			||||||
 | 
					    | "Excavation"
 | 
				
			||||||
 | 
					    | "Defense"
 | 
				
			||||||
 | 
					    | "Exterminate"
 | 
				
			||||||
 | 
					    | "Assassination"
 | 
				
			||||||
 | 
					    | "Alchemy";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface ITmp {
 | 
				
			||||||
 | 
					    cavabegin: string;
 | 
				
			||||||
 | 
					    PurchasePlatformLockEnabled: boolean; // Seems unused
 | 
				
			||||||
 | 
					    pgr: IPgr;
 | 
				
			||||||
 | 
					    ennnd?: boolean; // True if 1999 demo is available (no effect for >=38.6.0)
 | 
				
			||||||
 | 
					    mbrt?: boolean; // Related to mobile app rating request
 | 
				
			||||||
 | 
					    fbst: IFbst;
 | 
				
			||||||
 | 
					    sfn: number;
 | 
				
			||||||
 | 
					    edg?: TCircuitGameMode[]; // The Circuit game modes overwrite
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IPgr {
 | 
				
			||||||
 | 
					    ts: string;
 | 
				
			||||||
 | 
					    en: string;
 | 
				
			||||||
 | 
					    fr: string;
 | 
				
			||||||
 | 
					    it: string;
 | 
				
			||||||
 | 
					    de: string;
 | 
				
			||||||
 | 
					    es: string;
 | 
				
			||||||
 | 
					    pt: string;
 | 
				
			||||||
 | 
					    ru: string;
 | 
				
			||||||
 | 
					    pl: string;
 | 
				
			||||||
 | 
					    uk: string;
 | 
				
			||||||
 | 
					    tr: string;
 | 
				
			||||||
 | 
					    ja: string;
 | 
				
			||||||
 | 
					    zh: string;
 | 
				
			||||||
 | 
					    ko: string;
 | 
				
			||||||
 | 
					    tc: string;
 | 
				
			||||||
 | 
					    th: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IFbst {
 | 
				
			||||||
 | 
					    a: number;
 | 
				
			||||||
 | 
					    e: number;
 | 
				
			||||||
 | 
					    n: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user