feat: orphix venom #2637
@ -67,6 +67,7 @@
 | 
				
			|||||||
    "resourceBoost": false,
 | 
					    "resourceBoost": false,
 | 
				
			||||||
    "tennoLiveRelay": false,
 | 
					    "tennoLiveRelay": false,
 | 
				
			||||||
    "wolfHunt": false,
 | 
					    "wolfHunt": false,
 | 
				
			||||||
 | 
					    "orphixVenom": false,
 | 
				
			||||||
    "longShadow": false,
 | 
					    "longShadow": false,
 | 
				
			||||||
    "hallowedFlame": false,
 | 
					    "hallowedFlame": false,
 | 
				
			||||||
    "hallowedNightmares": false,
 | 
					    "hallowedNightmares": false,
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ const leaderboardEntrySchema = new Schema<ILeaderboardEntryDatabase>(
 | 
				
			|||||||
        displayName: { type: String, required: true },
 | 
					        displayName: { type: String, required: true },
 | 
				
			||||||
        score: { type: Number, required: true },
 | 
					        score: { type: Number, required: true },
 | 
				
			||||||
        guildId: Schema.Types.ObjectId,
 | 
					        guildId: Schema.Types.ObjectId,
 | 
				
			||||||
        expiry: { type: Date, required: true },
 | 
					        expiry: Date,
 | 
				
			||||||
        guildTier: Number
 | 
					        guildTier: Number
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    { id: false }
 | 
					    { id: false }
 | 
				
			||||||
 | 
				
			|||||||
@ -97,7 +97,19 @@ const statsSchema = new Schema<IStatsDatabase>({
 | 
				
			|||||||
    SentinelGameScore: Number,
 | 
					    SentinelGameScore: Number,
 | 
				
			||||||
    CaliberChicksScore: Number,
 | 
					    CaliberChicksScore: Number,
 | 
				
			||||||
    OlliesCrashCourseScore: Number,
 | 
					    OlliesCrashCourseScore: Number,
 | 
				
			||||||
    DojoObstacleScore: Number
 | 
					    DojoObstacleScore: Number,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Halloween16: Number,
 | 
				
			||||||
 | 
					    AmalgamEventScoreMax: Number,
 | 
				
			||||||
 | 
					    Halloween19ScoreMax: Number,
 | 
				
			||||||
 | 
					    FlotillaEventScore: Number,
 | 
				
			||||||
 | 
					    FlotillaSpaceBadgesTier1: Number,
 | 
				
			||||||
 | 
					    FlotillaSpaceBadgesTier2: Number,
 | 
				
			||||||
 | 
					    FlotillaSpaceBadgesTier3: Number,
 | 
				
			||||||
 | 
					    FlotillaGroundBadgesTier1: Number,
 | 
				
			||||||
 | 
					    FlotillaGroundBadgesTier2: Number,
 | 
				
			||||||
 | 
					    FlotillaGroundBadgesTier3: Number,
 | 
				
			||||||
 | 
					    MechSurvivalScoreMax: Number
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
statsSchema.set("toJSON", {
 | 
					statsSchema.set("toJSON", {
 | 
				
			||||||
 | 
				
			|||||||
@ -8,5 +8,6 @@ const statsRouter = express.Router();
 | 
				
			|||||||
statsRouter.get("/view.php", viewController);
 | 
					statsRouter.get("/view.php", viewController);
 | 
				
			||||||
statsRouter.post("/upload.php", uploadController);
 | 
					statsRouter.post("/upload.php", uploadController);
 | 
				
			||||||
statsRouter.post("/leaderboardWeekly.php", leaderboardController);
 | 
					statsRouter.post("/leaderboardWeekly.php", leaderboardController);
 | 
				
			||||||
 | 
					statsRouter.post("/leaderboardArchived.php", leaderboardController);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { statsRouter };
 | 
					export { statsRouter };
 | 
				
			||||||
 | 
				
			|||||||
@ -79,6 +79,7 @@ export interface IConfig {
 | 
				
			|||||||
        tennoLiveRelay?: boolean;
 | 
					        tennoLiveRelay?: boolean;
 | 
				
			||||||
        baroTennoConRelay?: boolean;
 | 
					        baroTennoConRelay?: boolean;
 | 
				
			||||||
        wolfHunt?: boolean;
 | 
					        wolfHunt?: boolean;
 | 
				
			||||||
 | 
					        orphixVenom?: boolean;
 | 
				
			||||||
        longShadow?: boolean;
 | 
					        longShadow?: boolean;
 | 
				
			||||||
        hallowedFlame?: boolean;
 | 
					        hallowedFlame?: boolean;
 | 
				
			||||||
        hallowedNightmares?: boolean;
 | 
					        hallowedNightmares?: boolean;
 | 
				
			||||||
 | 
				
			|||||||
@ -896,5 +896,20 @@ export const goalGuildRewardByTag: Record<string, { guildGoals: number[][]; rewa
 | 
				
			|||||||
            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventSilverTrophyRecipe",
 | 
					            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventSilverTrophyRecipe",
 | 
				
			||||||
            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventGoldTrophyRecipe"
 | 
					            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventGoldTrophyRecipe"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    MechSurvival: {
 | 
				
			||||||
 | 
					        guildGoals: [
 | 
				
			||||||
 | 
					            [1390, 5860, 13920, 18850],
 | 
				
			||||||
 | 
					            [3510, 22275, 69120, 137250],
 | 
				
			||||||
 | 
					            [11700, 75250, 230400, 457500],
 | 
				
			||||||
 | 
					            [35100, 222750, 691200, 1372500],
 | 
				
			||||||
 | 
					            [117000, 742500, 2304000, 4575000]
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        rewards: [
 | 
				
			||||||
 | 
					            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophyTerracottaRecipe",
 | 
				
			||||||
 | 
					            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophyBronzeRecipe",
 | 
				
			||||||
 | 
					            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophySilverRecipe",
 | 
				
			||||||
 | 
					            "/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophyGoldRecipe"
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -1,38 +1,66 @@
 | 
				
			|||||||
import { Guild } from "@/src/models/guildModel";
 | 
					import { Guild } from "@/src/models/guildModel";
 | 
				
			||||||
import { Leaderboard, TLeaderboardEntryDocument } from "@/src/models/leaderboardModel";
 | 
					import { Leaderboard, TLeaderboardEntryDocument } from "@/src/models/leaderboardModel";
 | 
				
			||||||
import { ILeaderboardEntryClient } from "@/src/types/leaderboardTypes";
 | 
					import { ILeaderboardEntryClient } from "@/src/types/leaderboardTypes";
 | 
				
			||||||
 | 
					import { handleGuildGoalProgress } from "@/src/services/guildService";
 | 
				
			||||||
 | 
					import { getWorldState } from "@/src/services/worldStateService";
 | 
				
			||||||
 | 
					import { Types } from "mongoose";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const submitLeaderboardScore = async (
 | 
					export const submitLeaderboardScore = async (
 | 
				
			||||||
    schedule: "weekly" | "daily",
 | 
					    schedule: "weekly" | "daily" | "events",
 | 
				
			||||||
    leaderboard: string,
 | 
					    leaderboard: string,
 | 
				
			||||||
    ownerId: string,
 | 
					    ownerId: string,
 | 
				
			||||||
    displayName: string,
 | 
					    displayName: string,
 | 
				
			||||||
    score: number,
 | 
					    score: number,
 | 
				
			||||||
    guildId: string | undefined
 | 
					    guildId: string | undefined
 | 
				
			||||||
): Promise<void> => {
 | 
					): Promise<void> => {
 | 
				
			||||||
    let expiry: Date;
 | 
					    let expiry: Date | undefined;
 | 
				
			||||||
    if (schedule == "daily") {
 | 
					    if (schedule == "daily") {
 | 
				
			||||||
        expiry = new Date(Math.trunc(Date.now() / 86400000) * 86400000 + 86400000);
 | 
					        expiry = new Date(Math.trunc(Date.now() / 86400000) * 86400000 + 86400000);
 | 
				
			||||||
    } else {
 | 
					    } else if (schedule == "weekly") {
 | 
				
			||||||
        const EPOCH = 1734307200 * 1000; // Monday
 | 
					        const EPOCH = 1734307200 * 1000; // Monday
 | 
				
			||||||
        const week = Math.trunc((Date.now() - EPOCH) / 604800000);
 | 
					        const week = Math.trunc((Date.now() - EPOCH) / 604800000);
 | 
				
			||||||
        const weekStart = EPOCH + week * 604800000;
 | 
					        const weekStart = EPOCH + week * 604800000;
 | 
				
			||||||
        const weekEnd = weekStart + 604800000;
 | 
					        const weekEnd = weekStart + 604800000;
 | 
				
			||||||
        expiry = new Date(weekEnd);
 | 
					        expiry = new Date(weekEnd);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (guildId) {
 | 
				
			||||||
 | 
					        const guild = (await Guild.findById(guildId, "Name Tier GoalProgress VaultDecoRecipes"))!;
 | 
				
			||||||
 | 
					        if (schedule == "events") {
 | 
				
			||||||
 | 
					            const prevAccount = await Leaderboard.findOne(
 | 
				
			||||||
 | 
					                { leaderboard: `${schedule}.accounts.${leaderboard}`, ownerId },
 | 
				
			||||||
 | 
					                "score"
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            const delta = score - (prevAccount?.score ?? 0);
 | 
				
			||||||
 | 
					            if (delta > 0) {
 | 
				
			||||||
 | 
					                await Leaderboard.findOneAndUpdate(
 | 
				
			||||||
 | 
					                    { leaderboard: `${schedule}.guilds.${leaderboard}`, ownerId: guildId },
 | 
				
			||||||
 | 
					                    { $inc: { score: delta }, $set: { displayName: guild.Name, guildTier: guild.Tier } },
 | 
				
			||||||
 | 
					                    { upsert: true }
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					                const goal = getWorldState().Goals.find(x => x.ScoreMaxTag == leaderboard);
 | 
				
			||||||
 | 
					                if (goal) {
 | 
				
			||||||
 | 
					                    await handleGuildGoalProgress(guild, {
 | 
				
			||||||
 | 
					                        Count: delta,
 | 
				
			||||||
 | 
					                        Tag: goal.Tag,
 | 
				
			||||||
 | 
					                        goalId: new Types.ObjectId(goal._id.$oid)
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            await Leaderboard.findOneAndUpdate(
 | 
				
			||||||
 | 
					                { leaderboard: `${schedule}.guilds.${leaderboard}`, ownerId: guildId },
 | 
				
			||||||
 | 
					                { $max: { score }, $set: { displayName: guild.Name, guildTier: guild.Tier, expiry } },
 | 
				
			||||||
 | 
					                { upsert: true, new: true }
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await Leaderboard.findOneAndUpdate(
 | 
					    await Leaderboard.findOneAndUpdate(
 | 
				
			||||||
        { leaderboard: `${schedule}.accounts.${leaderboard}`, ownerId },
 | 
					        { leaderboard: `${schedule}.accounts.${leaderboard}`, ownerId },
 | 
				
			||||||
        { $max: { score }, $set: { displayName, guildId, expiry } },
 | 
					        { $max: { score }, $set: { displayName, guildId, expiry } },
 | 
				
			||||||
        { upsert: true }
 | 
					        { upsert: true }
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    if (guildId) {
 | 
					 | 
				
			||||||
        const guild = (await Guild.findById(guildId, "Name Tier"))!;
 | 
					 | 
				
			||||||
        await Leaderboard.findOneAndUpdate(
 | 
					 | 
				
			||||||
            { leaderboard: `${schedule}.guilds.${leaderboard}`, ownerId: guildId },
 | 
					 | 
				
			||||||
            { $max: { score }, $set: { displayName: guild.Name, guildTier: guild.Tier, expiry } },
 | 
					 | 
				
			||||||
            { upsert: true }
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getLeaderboard = async (
 | 
					export const getLeaderboard = async (
 | 
				
			||||||
@ -43,6 +71,7 @@ export const getLeaderboard = async (
 | 
				
			|||||||
    guildId: string | undefined,
 | 
					    guildId: string | undefined,
 | 
				
			||||||
    guildTier: number | undefined
 | 
					    guildTier: number | undefined
 | 
				
			||||||
): Promise<ILeaderboardEntryClient[]> => {
 | 
					): Promise<ILeaderboardEntryClient[]> => {
 | 
				
			||||||
 | 
					    leaderboard = leaderboard.replace("archived", guildTier || guildId ? "events.guilds" : "events.accounts");
 | 
				
			||||||
    const filter: { leaderboard: string; guildId?: string; guildTier?: number } = { leaderboard };
 | 
					    const filter: { leaderboard: string; guildId?: string; guildTier?: number } = { leaderboard };
 | 
				
			||||||
    if (guildId) {
 | 
					    if (guildId) {
 | 
				
			||||||
        filter.guildId = guildId;
 | 
					        filter.guildId = guildId;
 | 
				
			||||||
 | 
				
			|||||||
@ -652,7 +652,12 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        if (currentMissionKey && currentMissionKey in goalMessagesByKey) {
 | 
					                        if (currentMissionKey && currentMissionKey in goalMessagesByKey) {
 | 
				
			||||||
                            const totalCount = (goalProgress?.Count ?? 0) + uploadProgress.Count;
 | 
					                            let countBeforeUpload = goalProgress?.Count ?? 0;
 | 
				
			||||||
 | 
					                            let totalCount = countBeforeUpload + uploadProgress.Count;
 | 
				
			||||||
 | 
					                            if (goal.Best) {
 | 
				
			||||||
 | 
					                                countBeforeUpload = goalProgress?.Best ?? 0;
 | 
				
			||||||
 | 
					                                totalCount = uploadProgress.Best;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                            let reward;
 | 
					                            let reward;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            if (goal.InterimGoals && goal.InterimRewards) {
 | 
					                            if (goal.InterimGoals && goal.InterimRewards) {
 | 
				
			||||||
@ -660,7 +665,7 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                                    if (
 | 
					                                    if (
 | 
				
			||||||
                                        goal.InterimGoals[i] &&
 | 
					                                        goal.InterimGoals[i] &&
 | 
				
			||||||
                                        goal.InterimGoals[i] <= totalCount &&
 | 
					                                        goal.InterimGoals[i] <= totalCount &&
 | 
				
			||||||
                                        (!goalProgress || goalProgress.Count < goal.InterimGoals[i]) &&
 | 
					                                        (!goalProgress || countBeforeUpload < goal.InterimGoals[i]) &&
 | 
				
			||||||
                                        goal.InterimRewards[i]
 | 
					                                        goal.InterimRewards[i]
 | 
				
			||||||
                                    ) {
 | 
					                                    ) {
 | 
				
			||||||
                                        reward = goal.InterimRewards[i];
 | 
					                                        reward = goal.InterimRewards[i];
 | 
				
			||||||
@ -672,7 +677,7 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                                !reward &&
 | 
					                                !reward &&
 | 
				
			||||||
                                goal.Goal &&
 | 
					                                goal.Goal &&
 | 
				
			||||||
                                goal.Goal <= totalCount &&
 | 
					                                goal.Goal <= totalCount &&
 | 
				
			||||||
                                (!goalProgress || goalProgress.Count < goal.Goal) &&
 | 
					                                (!goalProgress || countBeforeUpload < goal.Goal) &&
 | 
				
			||||||
                                goal.Reward
 | 
					                                goal.Reward
 | 
				
			||||||
                            ) {
 | 
					                            ) {
 | 
				
			||||||
                                reward = goal.Reward;
 | 
					                                reward = goal.Reward;
 | 
				
			||||||
@ -681,7 +686,7 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                                !reward &&
 | 
					                                !reward &&
 | 
				
			||||||
                                goal.BonusGoal &&
 | 
					                                goal.BonusGoal &&
 | 
				
			||||||
                                goal.BonusGoal <= totalCount &&
 | 
					                                goal.BonusGoal <= totalCount &&
 | 
				
			||||||
                                (!goalProgress || goalProgress.Count < goal.BonusGoal) &&
 | 
					                                (!goalProgress || countBeforeUpload < goal.BonusGoal) &&
 | 
				
			||||||
                                goal.BonusReward
 | 
					                                goal.BonusReward
 | 
				
			||||||
                            ) {
 | 
					                            ) {
 | 
				
			||||||
                                reward = goal.BonusReward;
 | 
					                                reward = goal.BonusReward;
 | 
				
			||||||
@ -1091,6 +1096,12 @@ export const addMissionRewards = async (
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (rewardInfo.GoalProgressAmount && goal.Tag.startsWith("MechSurvival")) {
 | 
				
			||||||
 | 
					                MissionRewards.push({
 | 
				
			||||||
 | 
					                    StoreItem: "/Lotus/StoreItems/Types/Items/MiscItems/MechSurvivalEventCreds",
 | 
				
			||||||
 | 
					                    ItemCount: Math.trunc(rewardInfo.GoalProgressAmount / 10)
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2395,5 +2406,35 @@ const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string
 | 
				
			|||||||
        msg: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionRewardBody",
 | 
					        msg: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionRewardBody",
 | 
				
			||||||
        sub: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionFourTitle",
 | 
					        sub: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionFourTitle",
 | 
				
			||||||
        icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png"
 | 
					        icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "/Lotus/Types/Keys/MechSurvivalCorpusShip": {
 | 
				
			||||||
 | 
					        sndr: "/Lotus/Language/Bosses/DeimosFather",
 | 
				
			||||||
 | 
					        msg: "/Lotus/Language/Inbox/MechEvent2020Tier1CompleteDesc",
 | 
				
			||||||
 | 
					        sub: "/Lotus/Language/Inbox/MechEvent2020Tier1CompleteTitle",
 | 
				
			||||||
 | 
					        icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "/Lotus/Types/Keys/MechSurvivalGrineerGalleon": {
 | 
				
			||||||
 | 
					        sndr: "/Lotus/Language/Bosses/DeimosFather",
 | 
				
			||||||
 | 
					        msg: "/Lotus/Language/Inbox/MechEvent2020Tier2CompleteDesc",
 | 
				
			||||||
 | 
					        sub: "/Lotus/Language/Inbox/MechEvent2020Tier2CompleteTitle",
 | 
				
			||||||
 | 
					        icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "/Lotus/Types/Keys/MechSurvivalGasCity": {
 | 
				
			||||||
 | 
					        sndr: "/Lotus/Language/Bosses/DeimosFather",
 | 
				
			||||||
 | 
					        msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
 | 
				
			||||||
 | 
					        sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
 | 
				
			||||||
 | 
					        icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "/Lotus/Types/Keys/MechSurvivalCorpusShipEndurance": {
 | 
				
			||||||
 | 
					        sndr: "/Lotus/Language/Bosses/DeimosFather",
 | 
				
			||||||
 | 
					        msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
 | 
				
			||||||
 | 
					        sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
 | 
				
			||||||
 | 
					        icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "/Lotus/Types/Keys/MechSurvivalGrineerGalleonEndurance": {
 | 
				
			||||||
 | 
					        sndr: "/Lotus/Language/Bosses/DeimosFather",
 | 
				
			||||||
 | 
					        msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
 | 
				
			||||||
 | 
					        sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
 | 
				
			||||||
 | 
					        icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -382,6 +382,29 @@ export const updateStats = async (accountOwnerId: string, payload: IStatsUpdate)
 | 
				
			|||||||
                            );
 | 
					                            );
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        case "Halloween16":
 | 
				
			||||||
 | 
					                        case "AmalgamEventScoreMax":
 | 
				
			||||||
 | 
					                        case "Halloween19ScoreMax":
 | 
				
			||||||
 | 
					                        case "FlotillaEventScore":
 | 
				
			||||||
 | 
					                        case "FlotillaSpaceBadgesTier1":
 | 
				
			||||||
 | 
					                        case "FlotillaSpaceBadgesTier2":
 | 
				
			||||||
 | 
					                        case "FlotillaSpaceBadgesTier3":
 | 
				
			||||||
 | 
					                        case "FlotillaGroundBadgesTier1":
 | 
				
			||||||
 | 
					                        case "FlotillaGroundBadgesTier2":
 | 
				
			||||||
 | 
					                        case "FlotillaGroundBadgesTier3":
 | 
				
			||||||
 | 
					                        case "MechSurvivalScoreMax":
 | 
				
			||||||
 | 
					                            playerStats[category] ??= 0;
 | 
				
			||||||
 | 
					                            if (data > playerStats[category]) playerStats[category] = data as number;
 | 
				
			||||||
 | 
					                            await submitLeaderboardScore(
 | 
				
			||||||
 | 
					                                "events",
 | 
				
			||||||
 | 
					                                category,
 | 
				
			||||||
 | 
					                                accountOwnerId,
 | 
				
			||||||
 | 
					                                payload.displayName,
 | 
				
			||||||
 | 
					                                data as number,
 | 
				
			||||||
 | 
					                                payload.guildId
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        default:
 | 
					                        default:
 | 
				
			||||||
                            if (!ignoredCategories.includes(category)) {
 | 
					                            if (!ignoredCategories.includes(category)) {
 | 
				
			||||||
                                unknownCategories[action] ??= [];
 | 
					                                unknownCategories[action] ??= [];
 | 
				
			||||||
 | 
				
			|||||||
@ -1535,7 +1535,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
            Personal: true,
 | 
					            Personal: true,
 | 
				
			||||||
            Bounty: true,
 | 
					            Bounty: true,
 | 
				
			||||||
            ClampNodeScores: true,
 | 
					            ClampNodeScores: true,
 | 
				
			||||||
            Node: "EventNode28", // Incompatible with Wolf Hunt (2025)
 | 
					            Node: "EventNode28", // Incompatible with Wolf Hunt (2025), Orphix Venom
 | 
				
			||||||
            MissionKeyName: "/Lotus/Types/Keys/GalleonRobberyAlertB",
 | 
					            MissionKeyName: "/Lotus/Types/Keys/GalleonRobberyAlertB",
 | 
				
			||||||
            Desc: "/Lotus/Language/Events/GalleonRobberyEventMissionTitle",
 | 
					            Desc: "/Lotus/Language/Events/GalleonRobberyEventMissionTitle",
 | 
				
			||||||
            Icon: "/Lotus/Interface/Icons/Player/GalleonRobberiesEvent.png",
 | 
					            Icon: "/Lotus/Interface/Icons/Player/GalleonRobberiesEvent.png",
 | 
				
			||||||
@ -1958,7 +1958,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
                "/Lotus/Types/Keys/WolfTacAlertReduxD"
 | 
					                "/Lotus/Types/Keys/WolfTacAlertReduxD"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            ConcurrentNodeReqs: [1, 2, 3],
 | 
					            ConcurrentNodeReqs: [1, 2, 3],
 | 
				
			||||||
            ConcurrentNodes: ["EventNode28", "EventNode39", "EventNode40"], // Incompatible with Galleon Of Ghouls
 | 
					            ConcurrentNodes: ["EventNode28", "EventNode39", "EventNode40"], // Incompatible with Galleon Of Ghouls, Orphix Venom
 | 
				
			||||||
            MissionKeyName: "/Lotus/Types/Keys/WolfTacAlertReduxA",
 | 
					            MissionKeyName: "/Lotus/Types/Keys/WolfTacAlertReduxA",
 | 
				
			||||||
            Faction: "FC_GRINEER",
 | 
					            Faction: "FC_GRINEER",
 | 
				
			||||||
            Desc: "/Lotus/Language/Alerts/WolfAlert",
 | 
					            Desc: "/Lotus/Language/Alerts/WolfAlert",
 | 
				
			||||||
@ -2210,7 +2210,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
                "/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour"
 | 
					                "/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            ConcurrentNodeReqs: [1, 2, 3],
 | 
					            ConcurrentNodeReqs: [1, 2, 3],
 | 
				
			||||||
            ConcurrentNodes: ["EventNode7", "EventNode4", "EventNode17"],
 | 
					            ConcurrentNodes: ["EventNode7", "EventNode4", "EventNode17"], // Incompatible with Orphix venom
 | 
				
			||||||
            MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProxyRebellionOne",
 | 
					            MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProxyRebellionOne",
 | 
				
			||||||
            Faction: "FC_CORPUS",
 | 
					            Faction: "FC_CORPUS",
 | 
				
			||||||
            Desc: "/Lotus/Language/Alerts/TacAlertProxyRebellion",
 | 
					            Desc: "/Lotus/Language/Alerts/TacAlertProxyRebellion",
 | 
				
			||||||
@ -2309,6 +2309,83 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (config.worldState?.orphixVenom) {
 | 
				
			||||||
 | 
					        worldState.Goals.push(
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _id: { $oid: "5fdcccb875d5ad500dc477d0" },
 | 
				
			||||||
 | 
					                Activation: { $date: { $numberLong: "1608320400000" } },
 | 
				
			||||||
 | 
					                Expiry: { $date: { $numberLong: "2000000000000" } },
 | 
				
			||||||
 | 
					                Count: 0,
 | 
				
			||||||
 | 
					                Goal: 500,
 | 
				
			||||||
 | 
					                Success: 0,
 | 
				
			||||||
 | 
					                Personal: true,
 | 
				
			||||||
 | 
					                Best: true,
 | 
				
			||||||
 | 
					                Node: "EventNode17", // Incompatible with Proxy Rebellion
 | 
				
			||||||
 | 
					                MissionKeyName: "/Lotus/Types/Keys/MechSurvivalCorpusShip",
 | 
				
			||||||
 | 
					                Faction: "FC_SENTIENT",
 | 
				
			||||||
 | 
					                Desc: "/Lotus/Language/Events/MechEventMissionTier1",
 | 
				
			||||||
 | 
					                Icon: "/Lotus/Interface/Icons/Categories/IconMech256.png",
 | 
				
			||||||
 | 
					                Tag: "MechSurvivalA",
 | 
				
			||||||
 | 
					                ScoreVar: "MechSurvivalScore",
 | 
				
			||||||
 | 
					                Reward: {
 | 
				
			||||||
 | 
					                    items: ["/Lotus/StoreItems/Upgrades/Skins/Clan/MechEventEmblemItem"]
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _id: { $oid: "5fdcccb875d5ad500dc477d1" },
 | 
				
			||||||
 | 
					                Activation: { $date: { $numberLong: "1608320400000" } },
 | 
				
			||||||
 | 
					                Expiry: { $date: { $numberLong: "2000000000000" } },
 | 
				
			||||||
 | 
					                Count: 0,
 | 
				
			||||||
 | 
					                Goal: 1000,
 | 
				
			||||||
 | 
					                Success: 0,
 | 
				
			||||||
 | 
					                Personal: true,
 | 
				
			||||||
 | 
					                Best: true,
 | 
				
			||||||
 | 
					                Node: "EventNode28", // Incompatible with Galleon Of Ghouls, Wolf Hunt (2025)
 | 
				
			||||||
 | 
					                MissionKeyName: "/Lotus/Types/Keys/MechSurvivalGrineerGalleon",
 | 
				
			||||||
 | 
					                Faction: "FC_SENTIENT",
 | 
				
			||||||
 | 
					                Desc: "/Lotus/Language/Events/MechEventMissionTier2",
 | 
				
			||||||
 | 
					                Icon: "/Lotus/Interface/Icons/Categories/IconMech256.png",
 | 
				
			||||||
 | 
					                Tag: "MechSurvivalB",
 | 
				
			||||||
 | 
					                PrereqGoalTags: ["MechSurvivalA"],
 | 
				
			||||||
 | 
					                ScoreVar: "MechSurvivalScore",
 | 
				
			||||||
 | 
					                Reward: {
 | 
				
			||||||
 | 
					                    items: ["/Lotus/StoreItems/Types/Items/FusionTreasures/OroFusexJ"]
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _id: { $oid: "5fdcccb875d5ad500dc477d2" },
 | 
				
			||||||
 | 
					                Activation: { $date: { $numberLong: "1608320400000" } },
 | 
				
			||||||
 | 
					                Expiry: { $date: { $numberLong: "2000000000000" } },
 | 
				
			||||||
 | 
					                Count: 0,
 | 
				
			||||||
 | 
					                Goal: 2000,
 | 
				
			||||||
 | 
					                Success: 0,
 | 
				
			||||||
 | 
					                Personal: true,
 | 
				
			||||||
 | 
					                Best: true,
 | 
				
			||||||
 | 
					                Node: "EventNode32",
 | 
				
			||||||
 | 
					                MissionKeyName: "/Lotus/Types/Keys/MechSurvivalGasCity",
 | 
				
			||||||
 | 
					                MissionKeyRotation: [
 | 
				
			||||||
 | 
					                    "/Lotus/Types/Keys/MechSurvivalGasCity",
 | 
				
			||||||
 | 
					                    "/Lotus/Types/Keys/MechSurvivalCorpusShipEndurance",
 | 
				
			||||||
 | 
					                    "/Lotus/Types/Keys/MechSurvivalGrineerGalleonEndurance"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                MissionKeyRotationInterval: 3600, // 1 hour
 | 
				
			||||||
 | 
					                Faction: "FC_SENTIENT",
 | 
				
			||||||
 | 
					                Desc: "/Lotus/Language/Events/MechEventMissionTier3",
 | 
				
			||||||
 | 
					                Icon: "/Lotus/Interface/Icons/Categories/IconMech256.png",
 | 
				
			||||||
 | 
					                Tag: "MechSurvival",
 | 
				
			||||||
 | 
					                PrereqGoalTags: ["MechSurvivalA", "MechSurvivalB"],
 | 
				
			||||||
 | 
					                ScoreVar: "MechSurvivalScore",
 | 
				
			||||||
 | 
					                ScoreMaxTag: "MechSurvivalScoreMax",
 | 
				
			||||||
 | 
					                Reward: {
 | 
				
			||||||
 | 
					                    items: [
 | 
				
			||||||
 | 
					                        "/Lotus/StoreItems/Types/Items/MiscItems/FormaAura",
 | 
				
			||||||
 | 
					                        "/Lotus/StoreItems/Upgrades/Skins/Necramech/MechWeapon/MechEventMausolonSkin"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Nightwave Challenges
 | 
					    // Nightwave Challenges
 | 
				
			||||||
    const nightwaveSyndicateTag = getNightwaveSyndicateTag(buildLabel);
 | 
					    const nightwaveSyndicateTag = getNightwaveSyndicateTag(buildLabel);
 | 
				
			||||||
    if (nightwaveSyndicateTag) {
 | 
					    if (nightwaveSyndicateTag) {
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ export interface ILeaderboardEntryDatabase {
 | 
				
			|||||||
    displayName: string;
 | 
					    displayName: string;
 | 
				
			||||||
    score: number;
 | 
					    score: number;
 | 
				
			||||||
    guildId?: Types.ObjectId;
 | 
					    guildId?: Types.ObjectId;
 | 
				
			||||||
    expiry: Date;
 | 
					    expiry?: Date;
 | 
				
			||||||
    guildTier?: number;
 | 
					    guildTier?: number;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -205,6 +205,7 @@ export interface IRewardInfo {
 | 
				
			|||||||
    Q?: boolean; // likely indicates that the bonus objective for this stage was completed
 | 
					    Q?: boolean; // likely indicates that the bonus objective for this stage was completed
 | 
				
			||||||
    CheckpointCounter?: number; // starts at 1, is incremented with each job stage upload, and does not reset when starting a new job
 | 
					    CheckpointCounter?: number; // starts at 1, is incremented with each job stage upload, and does not reset when starting a new job
 | 
				
			||||||
    challengeMissionId?: string;
 | 
					    challengeMissionId?: string;
 | 
				
			||||||
 | 
					    GoalProgressAmount?: number;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type IMissionStatus = "GS_SUCCESS" | "GS_FAILURE" | "GS_DUMPED" | "GS_QUIT" | "GS_INTERRUPTED";
 | 
					export type IMissionStatus = "GS_SUCCESS" | "GS_FAILURE" | "GS_DUMPED" | "GS_QUIT" | "GS_INTERRUPTED";
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,19 @@ export interface IStatsClient {
 | 
				
			|||||||
    OlliesCrashCourseScore?: number;
 | 
					    OlliesCrashCourseScore?: number;
 | 
				
			||||||
    DojoObstacleScore?: number;
 | 
					    DojoObstacleScore?: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // event scores
 | 
				
			||||||
 | 
					    Halloween16?: number;
 | 
				
			||||||
 | 
					    AmalgamEventScoreMax?: number;
 | 
				
			||||||
 | 
					    Halloween19ScoreMax?: number;
 | 
				
			||||||
 | 
					    FlotillaEventScore?: number;
 | 
				
			||||||
 | 
					    FlotillaSpaceBadgesTier1?: number;
 | 
				
			||||||
 | 
					    FlotillaSpaceBadgesTier2?: number;
 | 
				
			||||||
 | 
					    FlotillaSpaceBadgesTier3?: number;
 | 
				
			||||||
 | 
					    FlotillaGroundBadgesTier1?: number;
 | 
				
			||||||
 | 
					    FlotillaGroundBadgesTier2?: number;
 | 
				
			||||||
 | 
					    FlotillaGroundBadgesTier3?: number;
 | 
				
			||||||
 | 
					    MechSurvivalScoreMax?: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // not in schema
 | 
					    // not in schema
 | 
				
			||||||
    PVP?: {
 | 
					    PVP?: {
 | 
				
			||||||
        suitDeaths?: number;
 | 
					        suitDeaths?: number;
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,7 @@ export interface IGoal {
 | 
				
			|||||||
    Success?: number;
 | 
					    Success?: number;
 | 
				
			||||||
    Personal?: boolean;
 | 
					    Personal?: boolean;
 | 
				
			||||||
    Community?: boolean;
 | 
					    Community?: boolean;
 | 
				
			||||||
    Best?: boolean; // Fist one on Event Tab
 | 
					    Best?: boolean; // Use Best instead of Count to check for reward
 | 
				
			||||||
    Bounty?: boolean; // Tactical Alert
 | 
					    Bounty?: boolean; // Tactical Alert
 | 
				
			||||||
    ClampNodeScores?: boolean;
 | 
					    ClampNodeScores?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -88,9 +88,12 @@ export interface IGoal {
 | 
				
			|||||||
    JobPreviousVersion?: IOid;
 | 
					    JobPreviousVersion?: IOid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ScoreVar?: string;
 | 
					    ScoreVar?: string;
 | 
				
			||||||
    ScoreMaxTag?: string;
 | 
					    ScoreMaxTag?: string; // Field in leaderboard
 | 
				
			||||||
    ScoreLocTag?: string;
 | 
					    ScoreLocTag?: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MissionKeyRotation?: string[];
 | 
				
			||||||
 | 
					    MissionKeyRotationInterval?: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NightLevel?: string;
 | 
					    NightLevel?: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -940,7 +940,12 @@
 | 
				
			|||||||
                                <div class="form-check">
 | 
					                                <div class="form-check">
 | 
				
			||||||
                                    <input class="form-check-input" type="checkbox" id="worldState.wolfHunt" />
 | 
					                                    <input class="form-check-input" type="checkbox" id="worldState.wolfHunt" />
 | 
				
			||||||
                                    <label class="form-check-label" for="worldState.wolfHunt" data-loc="worldState_wolfHunt"></label>
 | 
					                                    <label class="form-check-label" for="worldState.wolfHunt" data-loc="worldState_wolfHunt"></label>
 | 
				
			||||||
                                    <abbr data-loc-inc="worldState_galleonOfGhouls"><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>
 | 
					                                    <abbr data-loc-inc="worldState_galleonOfGhouls|worldState_orphixVenom"><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.orphixVenom" />
 | 
				
			||||||
 | 
					                                    <label class="form-check-label" for="worldState.orphixVenom" data-loc="worldState_orphixVenom"></label>
 | 
				
			||||||
 | 
					                                    <abbr data-loc-inc="worldState_galleonOfGhouls|worldState_wolfHunt|worldState_proxyRebellion"><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>
 | 
				
			||||||
                                <div class="form-check">
 | 
					                                <div class="form-check">
 | 
				
			||||||
                                    <input class="form-check-input" type="checkbox" id="worldState.longShadow" />
 | 
					                                    <input class="form-check-input" type="checkbox" id="worldState.longShadow" />
 | 
				
			||||||
@ -972,6 +977,7 @@
 | 
				
			|||||||
                                <div class="form-group mt-2 d-flex gap-2">
 | 
					                                <div class="form-group mt-2 d-flex gap-2">
 | 
				
			||||||
                                    <div class="flex-fill">
 | 
					                                    <div class="flex-fill">
 | 
				
			||||||
                                        <label class="form-label" for="worldState.proxyRebellion" data-loc="worldState_proxyRebellion"></label>
 | 
					                                        <label class="form-label" for="worldState.proxyRebellion" data-loc="worldState_proxyRebellion"></label>
 | 
				
			||||||
 | 
					                                        <abbr data-loc-inc="worldState_orphixVenom"><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>
 | 
				
			||||||
                                        <select class="form-control" id="worldState.proxyRebellion" data-default="false">
 | 
					                                        <select class="form-control" id="worldState.proxyRebellion" data-default="false">
 | 
				
			||||||
                                            <option value="true" data-loc="enabled"></option>
 | 
					                                            <option value="true" data-loc="enabled"></option>
 | 
				
			||||||
                                            <option value="false" data-loc="disabled"></option>
 | 
					                                            <option value="false" data-loc="disabled"></option>
 | 
				
			||||||
 | 
				
			|||||||
@ -251,6 +251,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `Hitzefrei`,
 | 
					    worldState_dogDays: `Hitzefrei`,
 | 
				
			||||||
    worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
 | 
					    worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
 | 
				
			||||||
    worldState_wolfHunt: `Wolfsjagd (2025)`,
 | 
					    worldState_wolfHunt: `Wolfsjagd (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `Orphix Gift`,
 | 
				
			||||||
    worldState_longShadow: `Lange Schatten`,
 | 
					    worldState_longShadow: `Lange Schatten`,
 | 
				
			||||||
    worldState_hallowedFlame: `Geweihte Flamme`,
 | 
					    worldState_hallowedFlame: `Geweihte Flamme`,
 | 
				
			||||||
    worldState_hallowedNightmares: `Geweihte Albträume`,
 | 
					    worldState_hallowedNightmares: `Geweihte Albträume`,
 | 
				
			||||||
 | 
				
			|||||||
@ -250,6 +250,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `Dog Days`,
 | 
					    worldState_dogDays: `Dog Days`,
 | 
				
			||||||
    worldState_dogDaysRewards: `Dog Days Rewards`,
 | 
					    worldState_dogDaysRewards: `Dog Days Rewards`,
 | 
				
			||||||
    worldState_wolfHunt: `Wolf Hunt (2025)`,
 | 
					    worldState_wolfHunt: `Wolf Hunt (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `Orphix Venom`,
 | 
				
			||||||
    worldState_longShadow: `Long Shadow`,
 | 
					    worldState_longShadow: `Long Shadow`,
 | 
				
			||||||
    worldState_hallowedFlame: `Hallowed Flame`,
 | 
					    worldState_hallowedFlame: `Hallowed Flame`,
 | 
				
			||||||
    worldState_hallowedNightmares: `Hallowed Nightmares`,
 | 
					    worldState_hallowedNightmares: `Hallowed Nightmares`,
 | 
				
			||||||
 | 
				
			|||||||
@ -251,6 +251,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `Canícula`,
 | 
					    worldState_dogDays: `Canícula`,
 | 
				
			||||||
    worldState_dogDaysRewards: `Recompensas de Canícula`,
 | 
					    worldState_dogDaysRewards: `Recompensas de Canícula`,
 | 
				
			||||||
    worldState_wolfHunt: `Cacería del Lobo (2025)`,
 | 
					    worldState_wolfHunt: `Cacería del Lobo (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `Veneno de Orphix`,
 | 
				
			||||||
    worldState_longShadow: `Sombra Prolongada`,
 | 
					    worldState_longShadow: `Sombra Prolongada`,
 | 
				
			||||||
    worldState_hallowedFlame: `Llama Sagrada`,
 | 
					    worldState_hallowedFlame: `Llama Sagrada`,
 | 
				
			||||||
    worldState_hallowedNightmares: `Pesadillas Sagradas`,
 | 
					    worldState_hallowedNightmares: `Pesadillas Sagradas`,
 | 
				
			||||||
 | 
				
			|||||||
@ -251,6 +251,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `Bataille d'Eau`,
 | 
					    worldState_dogDays: `Bataille d'Eau`,
 | 
				
			||||||
    worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
 | 
					    worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
 | 
				
			||||||
    worldState_wolfHunt: `Chasse au Loup (2025)`,
 | 
					    worldState_wolfHunt: `Chasse au Loup (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `Venin Orphix`,
 | 
				
			||||||
    worldState_longShadow: `La Propagation des Ombres`,
 | 
					    worldState_longShadow: `La Propagation des Ombres`,
 | 
				
			||||||
    worldState_hallowedFlame: `Flamme Hantée`,
 | 
					    worldState_hallowedFlame: `Flamme Hantée`,
 | 
				
			||||||
    worldState_hallowedNightmares: `Cauchemars Hantés`,
 | 
					    worldState_hallowedNightmares: `Cauchemars Hantés`,
 | 
				
			||||||
 | 
				
			|||||||
@ -251,6 +251,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `Знойные дни`,
 | 
					    worldState_dogDays: `Знойные дни`,
 | 
				
			||||||
    worldState_dogDaysRewards: `Награды Знойных дней`,
 | 
					    worldState_dogDaysRewards: `Награды Знойных дней`,
 | 
				
			||||||
    worldState_wolfHunt: `Волчья Охота (2025)`,
 | 
					    worldState_wolfHunt: `Волчья Охота (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `Яд Орфикса`,
 | 
				
			||||||
    worldState_longShadow: `Длинная Тень`,
 | 
					    worldState_longShadow: `Длинная Тень`,
 | 
				
			||||||
    worldState_hallowedFlame: `Священное пламя`,
 | 
					    worldState_hallowedFlame: `Священное пламя`,
 | 
				
			||||||
    worldState_hallowedNightmares: `Священные кошмары`,
 | 
					    worldState_hallowedNightmares: `Священные кошмары`,
 | 
				
			||||||
 | 
				
			|||||||
@ -251,6 +251,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `Спекотні дні`,
 | 
					    worldState_dogDays: `Спекотні дні`,
 | 
				
			||||||
    worldState_dogDaysRewards: `Нагороди Спекотних днів`,
 | 
					    worldState_dogDaysRewards: `Нагороди Спекотних днів`,
 | 
				
			||||||
    worldState_wolfHunt: `Полювання на Вовка (2025)`,
 | 
					    worldState_wolfHunt: `Полювання на Вовка (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `Орфіксова отрута`,
 | 
				
			||||||
    worldState_longShadow: `Довга тінь`,
 | 
					    worldState_longShadow: `Довга тінь`,
 | 
				
			||||||
    worldState_hallowedFlame: `Священне полум'я`,
 | 
					    worldState_hallowedFlame: `Священне полум'я`,
 | 
				
			||||||
    worldState_hallowedNightmares: `Священні жахіття`,
 | 
					    worldState_hallowedNightmares: `Священні жахіття`,
 | 
				
			||||||
 | 
				
			|||||||
@ -251,6 +251,7 @@ dict = {
 | 
				
			|||||||
    worldState_dogDays: `三伏天`,
 | 
					    worldState_dogDays: `三伏天`,
 | 
				
			||||||
    worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
 | 
					    worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
 | 
				
			||||||
    worldState_wolfHunt: `恶狼狩猎 (2025)`,
 | 
					    worldState_wolfHunt: `恶狼狩猎 (2025)`,
 | 
				
			||||||
 | 
					    worldState_orphixVenom: `奥影之毒`,
 | 
				
			||||||
    worldState_longShadow: `暗夜长影`,
 | 
					    worldState_longShadow: `暗夜长影`,
 | 
				
			||||||
    worldState_hallowedFlame: `万圣之焰`,
 | 
					    worldState_hallowedFlame: `万圣之焰`,
 | 
				
			||||||
    worldState_hallowedNightmares: `万圣噩梦`,
 | 
					    worldState_hallowedNightmares: `万圣噩梦`,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user