feat: QTCC floofs alerts #2886
@ -45,6 +45,7 @@
 | 
			
		||||
    "voidCorruption2025Week2": false,
 | 
			
		||||
    "voidCorruption2025Week3": false,
 | 
			
		||||
    "voidCorruption2025Week4": false,
 | 
			
		||||
    "qtccAlerts": false,
 | 
			
		||||
    "galleonOfGhouls": 0,
 | 
			
		||||
    "ghoulEmergenceOverride": null,
 | 
			
		||||
    "plagueStarOverride": null,
 | 
			
		||||
 | 
			
		||||
@ -55,6 +55,7 @@ export interface IConfig {
 | 
			
		||||
        voidCorruption2025Week2?: boolean;
 | 
			
		||||
        voidCorruption2025Week3?: boolean;
 | 
			
		||||
        voidCorruption2025Week4?: boolean;
 | 
			
		||||
        qtccAlerts?: boolean;
 | 
			
		||||
        galleonOfGhouls?: number;
 | 
			
		||||
        ghoulEmergenceOverride?: boolean;
 | 
			
		||||
        plagueStarOverride?: boolean;
 | 
			
		||||
 | 
			
		||||
@ -151,7 +151,7 @@ const configAlerts: Record<string, IAlert> = {
 | 
			
		||||
            enemySpec: "/Lotus/Types/Game/EnemySpecs/CorpusShipEnemySpecs/CorpusShipSquadDefenseB",
 | 
			
		||||
            minEnemyLevel: 20,
 | 
			
		||||
            maxEnemyLevel: 25,
 | 
			
		||||
            maxWaveNum: 6
 | 
			
		||||
            maxRotations: 2
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    voidCorruption2025Week3: {
 | 
			
		||||
@ -1476,6 +1476,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
			
		||||
    const weekStart = EPOCH + week * 604800000;
 | 
			
		||||
    const weekEnd = weekStart + 604800000;
 | 
			
		||||
    const date = new Date(timeMs);
 | 
			
		||||
    const defenseWavesPerRotation = buildLabel && version_compare(buildLabel, "2025.03.18.16.07") < 0 ? 5 : 3;
 | 
			
		||||
 | 
			
		||||
    const worldState: IWorldState = {
 | 
			
		||||
        BuildLabel: typeof buildLabel == "string" ? buildLabel.split(" ").join("+") : buildConfig.buildLabel,
 | 
			
		||||
@ -1569,11 +1570,119 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
			
		||||
    if (config.worldState) {
 | 
			
		||||
        for (const [key, alert] of Object.entries(configAlerts)) {
 | 
			
		||||
            if (config.worldState[key as keyof typeof config.worldState]) {
 | 
			
		||||
                if (alert.MissionInfo.missionType == "MT_DEFENSE") {
 | 
			
		||||
                    alert.MissionInfo.maxWaveNum = defenseWavesPerRotation * (alert.MissionInfo.maxRotations ?? 1);
 | 
			
		||||
                    alert.MissionInfo.maxRotations = undefined;
 | 
			
		||||
                }
 | 
			
		||||
                worldState.Alerts.push(alert);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (config.worldState?.qtccAlerts) {
 | 
			
		||||
        worldState.Alerts.push(
 | 
			
		||||
            {
 | 
			
		||||
                _id: {
 | 
			
		||||
                    $oid: "68dc23c42e9d3acfa708ff3b"
 | 
			
		||||
                },
 | 
			
		||||
                Activation: {
 | 
			
		||||
                    $date: {
 | 
			
		||||
                        $numberLong: "1759327200000"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                Expiry: {
 | 
			
		||||
                    $date: {
 | 
			
		||||
                        $numberLong: "2000000000000"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                MissionInfo: {
 | 
			
		||||
                    location: "SolNode123",
 | 
			
		||||
                    missionType: "MT_SURVIVAL",
 | 
			
		||||
                    faction: "FC_CORPUS",
 | 
			
		||||
                    difficulty: 1,
 | 
			
		||||
                    missionReward: {
 | 
			
		||||
                        credits: 10000,
 | 
			
		||||
                        items: ["/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/Plushy2021QTCC"]
 | 
			
		||||
                    },
 | 
			
		||||
                    levelOverride: "/Lotus/Levels/Proc/Corpus/CorpusShipSurvivalRaid",
 | 
			
		||||
                    enemySpec: "/Lotus/Types/Game/EnemySpecs/CorpusShipEnemySpecs/CorpusShipSurvivalA",
 | 
			
		||||
                    minEnemyLevel: 20,
 | 
			
		||||
                    maxEnemyLevel: 30,
 | 
			
		||||
                    descText: "/Lotus/Language/Alerts/TennoUnitedAlert",
 | 
			
		||||
                    maxWaveNum: 5
 | 
			
		||||
                },
 | 
			
		||||
                Tag: "LotusGift",
 | 
			
		||||
                ForceUnlock: true
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                _id: {
 | 
			
		||||
                    $oid: "68dc2466e298b4f04206687a"
 | 
			
		||||
                },
 | 
			
		||||
                Activation: {
 | 
			
		||||
                    $date: {
 | 
			
		||||
                        $numberLong: "1759327200000"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                Expiry: {
 | 
			
		||||
                    $date: {
 | 
			
		||||
                        $numberLong: "2000000000000"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                MissionInfo: {
 | 
			
		||||
                    location: "SolNode149",
 | 
			
		||||
                    missionType: "MT_DEFENSE",
 | 
			
		||||
                    faction: "FC_GRINEER",
 | 
			
		||||
                    difficulty: 1,
 | 
			
		||||
                    missionReward: {
 | 
			
		||||
                        credits: 10000,
 | 
			
		||||
                        items: ["/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/Plushy2022QTCC"]
 | 
			
		||||
                    },
 | 
			
		||||
                    levelOverride: "/Lotus/Levels/Proc/Grineer/GrineerShipyardsDefense",
 | 
			
		||||
                    enemySpec: "/Lotus/Types/Game/EnemySpecs/GrineerShipyardsDefenseA",
 | 
			
		||||
                    minEnemyLevel: 20,
 | 
			
		||||
                    maxEnemyLevel: 30,
 | 
			
		||||
                    descText: "/Lotus/Language/Alerts/TennoUnitedAlert",
 | 
			
		||||
                    maxWaveNum: defenseWavesPerRotation * 1
 | 
			
		||||
                },
 | 
			
		||||
                Tag: "LotusGift",
 | 
			
		||||
                ForceUnlock: true
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                _id: {
 | 
			
		||||
                    $oid: "68dc26865e7cb56b820b4252"
 | 
			
		||||
                },
 | 
			
		||||
                Activation: {
 | 
			
		||||
                    $date: {
 | 
			
		||||
                        $numberLong: "1759327200000"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                Expiry: {
 | 
			
		||||
                    $date: {
 | 
			
		||||
                        $numberLong: "2000000000000"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                MissionInfo: {
 | 
			
		||||
                    location: "SolNode39",
 | 
			
		||||
                    missionType: "MT_EXCAVATE",
 | 
			
		||||
                    faction: "FC_GRINEER",
 | 
			
		||||
                    difficulty: 1,
 | 
			
		||||
                    missionReward: {
 | 
			
		||||
                        credits: 10000,
 | 
			
		||||
                        items: ["/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/PlushyVirminkQTCC"]
 | 
			
		||||
                    },
 | 
			
		||||
                    levelOverride: "/Lotus/Levels/Proc/Grineer/GrineerForestExcavation",
 | 
			
		||||
                    enemySpec: "/Lotus/Types/Game/EnemySpecs/ForestGrineerExcavationA",
 | 
			
		||||
                    minEnemyLevel: 20,
 | 
			
		||||
                    maxEnemyLevel: 30,
 | 
			
		||||
                    descText: "/Lotus/Language/Alerts/TennoUnitedAlert",
 | 
			
		||||
                    maxWaveNum: 5
 | 
			
		||||
                },
 | 
			
		||||
                Tag: "LotusGift",
 | 
			
		||||
                ForceUnlock: true
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const isFebruary = date.getUTCMonth() == 1;
 | 
			
		||||
    if (config.worldState?.starDaysOverride ?? isFebruary) {
 | 
			
		||||
        worldState.Goals.push({
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import type { IMissionReward, TFaction } from "warframe-public-export-plus";
 | 
			
		||||
import type { IMissionReward, TFaction, TMissionType } from "warframe-public-export-plus";
 | 
			
		||||
import type { IMongoDate, IOid } from "./commonTypes.ts";
 | 
			
		||||
 | 
			
		||||
export interface IWorldState {
 | 
			
		||||
@ -40,11 +40,13 @@ export interface IAlert {
 | 
			
		||||
    Activation: IMongoDate;
 | 
			
		||||
    Expiry: IMongoDate;
 | 
			
		||||
    MissionInfo: IAlertMissionInfo;
 | 
			
		||||
    Tag?: string;
 | 
			
		||||
    ForceUnlock?: true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IAlertMissionInfo {
 | 
			
		||||
    location: string;
 | 
			
		||||
    missionType: string;
 | 
			
		||||
    missionType: TMissionType;
 | 
			
		||||
    faction: TFaction;
 | 
			
		||||
    difficulty: number;
 | 
			
		||||
    missionReward?: IMissionReward;
 | 
			
		||||
@ -55,6 +57,9 @@ export interface IAlertMissionInfo {
 | 
			
		||||
    minEnemyLevel?: number;
 | 
			
		||||
    maxEnemyLevel?: number;
 | 
			
		||||
    maxWaveNum?: number;
 | 
			
		||||
    descText?: string;
 | 
			
		||||
 | 
			
		||||
    maxRotations?: number; // SNS specific field
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IGoal {
 | 
			
		||||
 | 
			
		||||
@ -1189,6 +1189,10 @@
 | 
			
		||||
                                    <label class="form-check-label" for="worldState.hallowedFlame" data-loc="worldState_hallowedFlame"></label>
 | 
			
		||||
                                    <abbr data-loc-inc="worldState_hallowedNightmares|worldState_dogDays|worldState_anniversary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="form-check">
 | 
			
		||||
                                    <input class="form-check-input" type="checkbox" id="worldState.qtccAlerts" />
 | 
			
		||||
                                    <label class="form-check-label" for="worldState.qtccAlerts" data-loc="worldState_qtccAlerts"></label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="form-group mt-2 d-flex gap-2">
 | 
			
		||||
                                    <div class="flex-fill">
 | 
			
		||||
                                        <label class="form-label" for="worldState.hallowedNightmares" data-loc="worldState_hallowedNightmares"></label>
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
 | 
			
		||||
    worldState_thermiaFractures: `Thermische Risse`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `[UNTRANSLATED] Thermia Fractures Progress`,
 | 
			
		||||
    worldState_qtccAlerts: `[UNTRANSLATED] Quest to Conquer Cancer Alerts`,
 | 
			
		||||
    worldState_from_year: `[UNTRANSLATED] from |VAL|`,
 | 
			
		||||
    worldState_pre_year: `[UNTRANSLATED] pre |VAL|`,
 | 
			
		||||
    worldState_week: `[UNTRANSLATED] Week |VAL|`,
 | 
			
		||||
 | 
			
		||||
@ -293,6 +293,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `Eight Claw Progress`,
 | 
			
		||||
    worldState_thermiaFractures: `Thermia Fractures`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `Thermia Fractures Progress`,
 | 
			
		||||
    worldState_qtccAlerts: `Quest to Conquer Cancer Alerts`,
 | 
			
		||||
    worldState_from_year: `from |VAL|`,
 | 
			
		||||
    worldState_pre_year: `pre |VAL|`,
 | 
			
		||||
    worldState_week: `Week |VAL|`,
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `Progreso de Octava Garra`,
 | 
			
		||||
    worldState_thermiaFractures: `Fracturas Thermia`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `Progreso de Fracturas Thermia`,
 | 
			
		||||
    worldState_qtccAlerts: `[UNTRANSLATED] Quest to Conquer Cancer Alerts`,
 | 
			
		||||
    worldState_from_year: `de |VAL|`,
 | 
			
		||||
    worldState_pre_year: `antes de |VAL|`,
 | 
			
		||||
    worldState_week: `Semana |VAL|`,
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `Progrès de la Huitième Griffe`,
 | 
			
		||||
    worldState_thermiaFractures: `Crevasses Thermia`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `Progrès des Fractures Thermia`,
 | 
			
		||||
    worldState_qtccAlerts: `[UNTRANSLATED] Quest to Conquer Cancer Alerts`,
 | 
			
		||||
    worldState_from_year: `de |VAL|`,
 | 
			
		||||
    worldState_pre_year: `pre-|VAL|`,
 | 
			
		||||
    worldState_week: `Semaine |VAL|`,
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `Прогресс Восьми когтей`,
 | 
			
		||||
    worldState_thermiaFractures: `Разломы Термии`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `Прогресс Разломов Термии`,
 | 
			
		||||
    worldState_qtccAlerts: `Тревоги Quest to Conquer Cancer`,
 | 
			
		||||
    worldState_from_year: `из |VAL|`,
 | 
			
		||||
    worldState_pre_year: `до |VAL|`,
 | 
			
		||||
    worldState_week: `Неделя |VAL|`,
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `Прогрес Восьми кігтів`,
 | 
			
		||||
    worldState_thermiaFractures: `Розломи термії`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `Прогрес Розломів термії`,
 | 
			
		||||
    worldState_qtccAlerts: `[UNTRANSLATED] Quest to Conquer Cancer Alerts`,
 | 
			
		||||
    worldState_from_year: `з |VAL|`,
 | 
			
		||||
    worldState_pre_year: `до |VAL|`,
 | 
			
		||||
    worldState_week: `Тиждень |VAL|`,
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,7 @@ dict = {
 | 
			
		||||
    worldState_eightClawProgressOverride: `大帝金币收集进度(%)`,
 | 
			
		||||
    worldState_thermiaFractures: `热美亚裂缝`,
 | 
			
		||||
    worldState_thermiaFracturesProgressOverride: `[UNTRANSLATED] Thermia Fractures Progress`,
 | 
			
		||||
    worldState_qtccAlerts: `[UNTRANSLATED] Quest to Conquer Cancer Alerts`,
 | 
			
		||||
    worldState_from_year: `|VAL|`,
 | 
			
		||||
    worldState_pre_year: `|VAL|之前`,
 | 
			
		||||
    worldState_week: `第|VAL|周`,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user