diff --git a/config.json.example b/config.json.example index 66276fb3..361cde5b 100644 --- a/config.json.example +++ b/config.json.example @@ -81,8 +81,14 @@ "darvoStockMultiplier": 1, "varziaOverride": "", "varziaFullyStocked": false + "TennoCon": false, + "RecurringGhoul": false, + "Fomorian": false, + "BaroTennoCon": false, + "BellyoftheBeast": false, + "HeatFissures": false }, "dev": { "keepVendorsExpired": false } -} +} \ No newline at end of file diff --git a/src/services/configService.ts b/src/services/configService.ts index 3fd0483e..df00f535 100644 --- a/src/services/configService.ts +++ b/src/services/configService.ts @@ -92,6 +92,12 @@ export interface IConfig { darvoStockMultiplier?: number; varziaOverride?: string; varziaFullyStocked?: boolean; + TennoCon?: boolean; + BaroTennoCon?: boolean; + Fomorian?: boolean; + BellyoftheBeast?: boolean; + RecurringGhoul?: boolean; + HeatFissures?: boolean; }; dev?: { keepVendorsExpired?: boolean; diff --git a/src/services/worldStateService.ts b/src/services/worldStateService.ts index 7f5268c9..93a59a8e 100644 --- a/src/services/worldStateService.ts +++ b/src/services/worldStateService.ts @@ -498,6 +498,93 @@ export const pushClassicBounties = (syndicateMissions: ISyndicateMissionInfo[], { const rng = new SRng(seed); const pool = [...eidolonJobs]; + const JobsArray = [ + { + jobType: rng.randomElementPop(pool), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATable${table}Rewards`, + masteryReq: 0, + minEnemyLevel: 5, + maxEnemyLevel: 15, + xpAmounts: generateXpAmounts(rng, 3, 1000, 1500) + }, + { + jobType: rng.randomElementPop(pool), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTable${table}Rewards`, + masteryReq: 1, + minEnemyLevel: 10, + maxEnemyLevel: 30, + xpAmounts: generateXpAmounts(rng, 3, 1750, 2250) + }, + { + jobType: rng.randomElementPop(pool), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTable${table}Rewards`, + masteryReq: 2, + minEnemyLevel: 20, + maxEnemyLevel: 40, + xpAmounts: generateXpAmounts(rng, 4, 2500, 3000) + }, + { + jobType: rng.randomElementPop(pool), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTable${table}Rewards`, + masteryReq: 3, + minEnemyLevel: 30, + maxEnemyLevel: 50, + xpAmounts: generateXpAmounts(rng, 5, 3250, 3750) + }, + { + jobType: rng.randomElementPop(pool), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETable${table}Rewards`, + masteryReq: 5, + minEnemyLevel: 40, + maxEnemyLevel: 60, + xpAmounts: generateXpAmounts(rng, 5, 4000, 4500) + }, + { + jobType: rng.randomElementPop(pool), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETable${table}Rewards`, + masteryReq: 10, + minEnemyLevel: 100, + maxEnemyLevel: 100, + xpAmounts: [840, 840, 840, 840, 1660] + }, + { + jobType: rng.randomElement(eidolonNarmerJobs), + rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTable${table}Rewards`, + masteryReq: 0, + minEnemyLevel: 50, + maxEnemyLevel: 70, + xpAmounts: generateXpAmounts(rng, 5, 4500, 5000) + } + ]; + if (config.worldState?.RecurringGhoul) { + JobsArray.shift(); + JobsArray.shift(); + JobsArray.shift(); + JobsArray.unshift({ + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyAss", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableARewards", + masteryReq: 1, + minEnemyLevel: 20, + maxEnemyLevel: 30, + xpAmounts: [260, 260, 260, 380] + }); + JobsArray.unshift({ + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyHunt", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableBRewards", + masteryReq: 3, + minEnemyLevel: 40, + maxEnemyLevel: 50, + xpAmounts: [450, 450, 450, 670] + }); + JobsArray.unshift({ + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyExt", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableBRewards", + masteryReq: 3, + minEnemyLevel: 60, + maxEnemyLevel: 70, + xpAmounts: [450, 450, 450, 670] + }); + } syndicateMissions.push({ _id: { $oid: ((bountyCycleStart / 1000) & 0xffffffff).toString(16).padStart(8, "0") + "0000000000000008" @@ -507,67 +594,9 @@ export const pushClassicBounties = (syndicateMissions: ISyndicateMissionInfo[], Tag: "CetusSyndicate", Seed: seed, Nodes: [], - Jobs: [ - { - jobType: rng.randomElementPop(pool), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATable${table}Rewards`, - masteryReq: 0, - minEnemyLevel: 5, - maxEnemyLevel: 15, - xpAmounts: generateXpAmounts(rng, 3, 1000, 1500) - }, - { - jobType: rng.randomElementPop(pool), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTable${table}Rewards`, - masteryReq: 1, - minEnemyLevel: 10, - maxEnemyLevel: 30, - xpAmounts: generateXpAmounts(rng, 3, 1750, 2250) - }, - { - jobType: rng.randomElementPop(pool), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTable${table}Rewards`, - masteryReq: 2, - minEnemyLevel: 20, - maxEnemyLevel: 40, - xpAmounts: generateXpAmounts(rng, 4, 2500, 3000) - }, - { - jobType: rng.randomElementPop(pool), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTable${table}Rewards`, - masteryReq: 3, - minEnemyLevel: 30, - maxEnemyLevel: 50, - xpAmounts: generateXpAmounts(rng, 5, 3250, 3750) - }, - { - jobType: rng.randomElementPop(pool), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETable${table}Rewards`, - masteryReq: 5, - minEnemyLevel: 40, - maxEnemyLevel: 60, - xpAmounts: generateXpAmounts(rng, 5, 4000, 4500) - }, - { - jobType: rng.randomElementPop(pool), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETable${table}Rewards`, - masteryReq: 10, - minEnemyLevel: 100, - maxEnemyLevel: 100, - xpAmounts: [840, 840, 840, 840, 1660] - }, - { - jobType: rng.randomElement(eidolonNarmerJobs), - rewards: `/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTable${table}Rewards`, - masteryReq: 0, - minEnemyLevel: 50, - maxEnemyLevel: 70, - xpAmounts: generateXpAmounts(rng, 5, 4500, 5000) - } - ] + Jobs: JobsArray }); } - { const rng = new SRng(seed); const pool = [...venusJobs]; @@ -1383,6 +1412,241 @@ export const getWorldState = (buildLabel?: string): IWorldState => { Node: "SolarisUnitedHub1" }); } + if (config.worldState?.TennoCon) { + worldState.Goals.push({ + _id: { $oid: "687bf9400000000000000000" }, + Activation: { $date: { $numberLong: "1752955200000" } }, + Expiry: { $date: { $numberLong: "2000000000000" } }, + Count: 0, + Goal: 0, + Success: 0, + Personal: true, + Desc: "/Lotus/Language/Locations/RelayStationTennoConB", + ToolTip: "/Lotus/Language/Locations/RelayStationTennoConDescB", + Icon: "/Lotus/Interface/Icons/Categories/IconTennoLive.png", + Tag: "TennoConRelayB", + Node: "TennoConBHUB6" + }); + } + if (config.worldState?.Fomorian) { + worldState.Goals.push({ + _id: { $oid: "67c8924faf8bb9628dc1c18d" }, + Fomorian: true, + Activation: { $date: { $numberLong: "1741284514166" } }, + Expiry: { $date: { $numberLong: "2000000000000" } }, + Count: 0, + Goal: 1000000, + HealthPct: 0.980806, + VictimNode: "PlutoHUB", + Personal: true, + Best: true, + ScoreVar: "FomorianEventScore", + ScoreMaxTag: "FomorianEventScore", + ScoreTagBlocksGuildTierChanges: false, + Success: 0, + Node: "EventNode8", + Faction: "FC_GRINEER", + Desc: "/Lotus/Language/G1Quests/FomorianRevengeBattleName", + Icon: "/Lotus/Materials/Emblems/SlingStone2_e.png", + RegionDrops: ["/Lotus/Types/Items/MiscItems/OmegaIsotopePickup"], + ArchwingDrops: [], + ScoreLocTag: "/Lotus/Language/Menu/FomorianScoreHint", + Tag: "", + MissionInfo: { + missionType: "MT_SABOTAGE", + faction: "FC_GRINEER", + location: "EventNode8", + levelOverride: "/Lotus/Levels/Proc/Space/SpaceGrineerFomorianAssaultProcLevel", + enemySpec: "/Lotus/Types/Game/EnemySpecs/FomorianAttackSpec", + minEnemyLevel: 20, + maxEnemyLevel: 30, + difficulty: 1, + archwingRequired: true, + requiredItems: ["/Lotus/StoreItems/Types/Restoratives/Consumable/FomorianNegator"], + consumeRequiredItems: false, + missionReward: [ + { + credits: 0, + xp: 0, + items: [], + countedItems: [], + randomizedItems: "fomorianRewardManifest" + } + ], + vipAgent: "", + leadersAlwaysAllowed: true, + goalTag: "", + levelAuras: [], + icon: "/Lotus/Interface/Icons/Events/Fomorian.png" + }, + ContinuousHubEvent: { + Transmissions: ["/Lotus/Sounds/Dialog/HubAnnouncements/HekPropoganda"], + Activation: { $date: { $numberLong: "1741284514166" } }, + Expiry: { $date: { $numberLong: "2000000000000" } }, + RepeatInterval: 1800 + }, + Reward: { + credits: 200000, + items: ["/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst"] + } + }); + } + if (config.worldState?.BellyoftheBeast) { + worldState.Goals.push({ + _id: { $oid: "67a5035c2a198564d62e165e" }, + Activation: { $date: { $numberLong: "1738868400000" } }, + Community: true, + ClanGoal: [72, 216, 648, 1944, 5832], + Count: 0, + Desc: "/Lotus/Language/JadeShadows/JadeShadowsEventName", + Expiry: { $date: { $numberLong: "2000000000000" } }, + Faction: "FC_MITW", + Goal: 100, + HealthPct: 1, + Icon: "/Lotus/Interface/Icons/WorldStatePanel/JadeShadowsEventBadge.png", + ScoreLocTag: "/Lotus/Language/JadeShadows/JadeShadowsEventScore", + Tag: "JadeShadowsEvent", + ToolTip: "/Lotus/Language/JadeShadows/JadeShadowsShortEventDesc", + MissionKeyName: "/Lotus/Types/Keys/JadeShadowsEventMission", + Node: "SolNode723", + Personal: true, + ItemType: "/Lotus/Types/Gameplay/JadeShadows/Resources/AscensionEventResourceItem" + }); + } + if (config.worldState?.RecurringGhoul) { + worldState.Goals.push({ + _id: { $oid: "687ebbe6d1d17841c9c59f38" }, + Activation: { $date: { $numberLong: "1753204900185" } }, + Expiry: { $date: { $numberLong: "2000000000000" } }, + HealthPct: 0.001108, + VictimNode: "SolNode228", + Regions: [2], + Success: 0, + Desc: "/Lotus/Language/GameModes/RecurringGhoulAlert", + ToolTip: "/Lotus/Language/GameModes/RecurringGhoulAlertDesc", + Icon: "/Lotus/Interface/Icons/Categories/IconGhouls256.png", + Tag: "GhoulEmergence", + JobAffiliationTag: "CetusSyndicate", + JobCurrentVersion: { $oid: "688341880000000000000009" }, + Jobs: [ + { + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyAss", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableARewards", + masteryReq: 1, + minEnemyLevel: 20, + maxEnemyLevel: 30, + xpAmounts: [260, 260, 260, 380] + }, + { + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyHunt", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableBRewards", + masteryReq: 3, + minEnemyLevel: 40, + maxEnemyLevel: 50, + xpAmounts: [450, 450, 450, 670] + }, + { + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyExt", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableBRewards", + masteryReq: 3, + minEnemyLevel: 60, + maxEnemyLevel: 70, + xpAmounts: [450, 450, 450, 670] + } + ], + JobPreviousVersion: { $oid: "68831e610000000000000009" }, + PreviousJobs: [ + { + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyAss", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableARewards", + masteryReq: 1, + minEnemyLevel: 20, + maxEnemyLevel: 30, + xpAmounts: [260, 260, 260, 380] + }, + { + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyHunt", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableBRewards", + masteryReq: 3, + minEnemyLevel: 40, + maxEnemyLevel: 50, + xpAmounts: [450, 450, 450, 670] + }, + { + jobType: "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/GhoulAlertBountyExt", + rewards: "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/GhoulBountyTableBRewards", + masteryReq: 3, + minEnemyLevel: 60, + maxEnemyLevel: 70, + xpAmounts: [450, 450, 450, 670] + } + ], + Count: 0, + Goal: 0, + Personal: true + }); + } + if (config.worldState?.HeatFissures) { + worldState.Goals.push({ + _id: { $oid: "5c7cb0d00000000000000000" }, + Activation: { $date: { $numberLong: "1737392400000" } }, + Expiry: { $date: { $numberLong: "2000000000000" } }, + Node: "SolNode129", + ScoreVar: "FissuresClosed", + ScoreLocTag: "/Lotus/Language/G1Quests/HeatFissuresEventScore", + Count: 2, + HealthPct: 0.02, + Regions: [1], + Desc: "/Lotus/Language/G1Quests/HeatFissuresEventName", + ToolTip: "/Lotus/Language/G1Quests/HeatFissuresEventDesc", + OptionalInMission: true, + Tag: "HeatFissure", + UpgradeIds: [{ $oid: "678be06a422c69eb0ac1c18c" }, { $oid: "678be06a422c69eb0ac1c18d" }], + Personal: true, + Community: true, + Goal: 100, + Reward: { + credits: 0, + items: ["/Lotus/StoreItems/Weapons/Corpus/LongGuns/CrpBFG/Vandal/VandalCrpBFG"], + countedItems: [] + }, + InterimGoals: [5, 25, 50, 75], + InterimRewards: [ + { + credits: 0, + xp: 0, + items: ["/Lotus/StoreItems/Upgrades/Skins/Clan/OrbBadgeItem"], + countedItems: [] + }, + { + credits: 0, + xp: 0, + items: [ + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Shotgun/ShotgunMedicMod", + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Rifle/SerratedRushMod" + ], + countedItems: [] + }, + { + credits: 0, + xp: 0, + items: [ + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Pistol/MultishotDodgeMod", + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Melee/CritDamageChargeSpeedMod" + ], + countedItems: [] + }, + { + credits: 0, + xp: 0, + items: ["/Lotus/StoreItems/Upgrades/Skins/Sigils/OrbSigil"], + countedItems: [] + } + ], + Success: 0, + Icon: "" + }); + } // The client gets kinda confused when multiple goals have the same tag, so considering these mutually exclusive. if (config.worldState?.galleonOfGhouls == 1) { worldState.Goals.push({ @@ -1584,6 +1848,68 @@ export const getWorldState = (buildLabel?: string): IWorldState => { Manifest: [] }; worldState.VoidTraders.push(vt); + // add Baro TennoCon Relay + if (config.worldState?.BaroTennoCon) { + worldState.Goals.push({ + _id: { + $oid: "687bb2f00000000000000000" + }, + Activation: { + $date: { + $numberLong: baroActualStart.toString() + } + }, + Expiry: { + $date: { + $numberLong: baroEnd.toString() + } + }, + Count: 0, + Goal: 0, + Success: 0, + Personal: true, + Desc: "/Lotus/Language/Locations/RelayStationTennoCon", + ToolTip: "/Lotus/Language/Locations/RelayStationTennoConDesc", + Icon: "/Lotus/Interface/Icons/Categories/IconTennoConSigil.png", + Tag: "TennoConRelay", + Node: "TennoConHUB2" + }); + const _Manifest = []; + for (const armorSet of baro.armorSets) { + if (Array.isArray(armorSet[0])) { + for (const set of armorSet as IVoidTraderOffer[][]) { + for (const item of set) { + _Manifest.push(item); + } + } + } else { + for (const item of armorSet as IVoidTraderOffer[]) { + _Manifest.push(item); + } + } + } + for (const item of baro.rest) { + _Manifest.push(item); + } + worldState.VoidTraders.push({ + _id: { + $oid: "687809030379266d790495c6" + }, + Activation: { + $date: { + $numberLong: baroActualStart.toString() + } + }, + Expiry: { + $date: { + $numberLong: baroEnd.toString() + } + }, + Character: "Baro'Ki Teel", + Node: "TennoConHUB2", + Manifest: _Manifest + }); + } if (isBeforeNextExpectedWorldStateRefresh(timeMs, baroActualStart)) { vt.Manifest = []; if (config.baroFullyStocked) { diff --git a/src/types/worldStateTypes.ts b/src/types/worldStateTypes.ts index e52e613f..7552fdee 100644 --- a/src/types/worldStateTypes.ts +++ b/src/types/worldStateTypes.ts @@ -1,5 +1,5 @@ import { IMissionReward } from "warframe-public-export-plus"; -import { IMongoDate, IOid } from "@/src/types/commonTypes"; +import { IMongoDate, IOid, ITypeCount } from "@/src/types/commonTypes"; export interface IWorldState { Version: number; // for goals @@ -39,7 +39,7 @@ export interface IGoal { Expiry: IMongoDate; Count: number; Goal: number; - Success: number; + Success?: number; Personal: boolean; Bounty?: boolean; ClampNodeScores?: boolean; @@ -47,9 +47,72 @@ export interface IGoal { ToolTip?: string; Icon: string; Tag: string; - Node: string; + Node?: string; MissionKeyName?: string; Reward?: IMissionReward; + ScoreVar?: string; + ScoreLocTag?: string; + HealthPct?: number; + Regions?: number[]; + OptionalInMission?: boolean; + UpgradeIds?: IOid[]; + Community?: boolean; + InterimGoals?: number[]; + InterimRewards?: { + credits: number; + xp: number; + items: string[]; + countedItems: ITypeCount[]; + randomizedItems?: string; + }[]; + Fomorian?: boolean; + VictimNode?: string; + Best?: boolean; + ScoreMaxTag?: string; + ScoreTagBlocksGuildTierChanges?: boolean; + Faction?: string; + RegionDrops?: string[]; + ArchwingDrops?: never[]; + MissionInfo?: { + missionType: string; + faction: string; + location: string; + levelOverride: string; + enemySpec: string; + minEnemyLevel: number; + maxEnemyLevel: number; + difficulty: number; + archwingRequired: boolean; + icon: string; + requiredItems: string[]; + consumeRequiredItems: boolean; + missionReward: IGoal["InterimRewards"]; + vipAgent: string; + leadersAlwaysAllowed: boolean; + goalTag: string; + levelAuras: string[]; + }; + ContinuousHubEvent?: { + Transmissions: string[]; + Activation: { + $date: { + $numberLong: string; + }; + }; + Expiry: { + $date: { + $numberLong: string; + }; + }; + RepeatInterval: number; + }; + ClanGoal?: number[]; + ItemType?: string; + JobAffiliationTag?: string; + JobCurrentVersion?: { $oid: string }; + Jobs?: ISyndicateMissionInfo["Jobs"]; + JobPreviousVersion?: { $oid: string }; + PreviousJobs?: ISyndicateMissionInfo["Jobs"]; } export interface ISyndicateMissionInfo { @@ -57,7 +120,7 @@ export interface ISyndicateMissionInfo { Activation: IMongoDate; Expiry: IMongoDate; Tag: string; - Seed: number; + Seed?: number; Nodes: string[]; Jobs?: { jobType?: string; diff --git a/static/fixed_responses/worldState/baro.json b/static/fixed_responses/worldState/baro.json index 2e0ae69e..1a4aa80a 100644 --- a/static/fixed_responses/worldState/baro.json +++ b/static/fixed_responses/worldState/baro.json @@ -401,7 +401,38 @@ { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/BaroKiTeerDecorationC", "PrimePrice": 100, "RegularPrice": 100000 }, { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/PedistalPrime", "PrimePrice": 0, "RegularPrice": 1000000 }, { "ItemType": "/Lotus/StoreItems/Types/Items/Emotes/BaroEmote", "PrimePrice": 0, "RegularPrice": 1000000 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Rifle/EventSniperReloadDamageMod", "PrimePrice": 2995, "RegularPrice": 1000000 } + { "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Rifle/EventSniperReloadDamageMod", "PrimePrice": 2995, "RegularPrice": 1000000 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/AvatarImageAvaClemCommunityGlyph", "PrimePrice": 20, "RegularPrice": 33333 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/TennoconConcert2025Display", "PrimePrice": 90, "RegularPrice": 125000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/SummerGameFestPoster", "PrimePrice": 90, "RegularPrice": 125000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/RathuumEventPoster", "PrimePrice": 90, "RegularPrice": 125000 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/Factions/GlyphFactionCorpus", "PrimePrice": 70, "RegularPrice": 55000 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/Factions/GlyphFactionEntrati", "PrimePrice": 99, "RegularPrice": 1900 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/Factions/GlyphFactionScaldra", "PrimePrice": 93, "RegularPrice": 1906 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/Factions/GlyphFactionTechrot", "PrimePrice": 98, "RegularPrice": 1901 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/Warframes/VorunaActionGlyph", "PrimePrice": 75, "RegularPrice": 60000 }, + { "ItemType": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/AvatarImageVoidAngelBaro", "PrimePrice": 80, "RegularPrice": 50000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/1999DrippySigil", "PrimePrice": 50, "RegularPrice": 45000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Weapons/Rapier/CrpRapierSkin", "PrimePrice": 375, "RegularPrice": 400000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Events/OgrisOldSchool", "PrimePrice": 350, "RegularPrice": 325000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/PrismaLotusFlamesSigil", "PrimePrice": 55, "RegularPrice": 60000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Melee/Expert/WeaponMeleeFactionDamageMurmursExpert", "PrimePrice": 375, "RegularPrice": 130000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Pistol/Expert/WeaponRecoilReductionModExpert", "PrimePrice": 300, "RegularPrice": 220000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Rifle/Expert/WeaponRecoilReductionModExpert", "PrimePrice": 300, "RegularPrice": 220000 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Shotgun/Expert/WeaponRecoilReductionModExpert", "PrimePrice": 300, "RegularPrice": 220000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/TenthAnniversaryLoginSongItem", "PrimePrice": 145, "RegularPrice": 165000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/AbyssofDagathSongItem", "PrimePrice": 150, "RegularPrice": 155000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/ZarimanLoginSongItem", "PrimePrice": 160, "RegularPrice": 180000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/DanteUnboundLoginSongItem", "PrimePrice": 150, "RegularPrice": 150000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/EmpyreanSongItem", "PrimePrice": 160, "RegularPrice": 155000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/DeimosLoginSongItem", "PrimePrice": 155, "RegularPrice": 160000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/JadeShadowsLoginSongItem", "PrimePrice": 150, "RegularPrice": 170000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/WhispersInTheWallLoginSongItem", "PrimePrice": 165, "RegularPrice": 170000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/CorpusRailjackLoginSongItem", "PrimePrice": 150, "RegularPrice": 165000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/LotusEatersSongItem", "PrimePrice": 165, "RegularPrice": 150000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/SongItems/KuvaLichLoginSongItem", "PrimePrice": 140, "RegularPrice": 170000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/PlushyBaro", "PrimePrice": 100, "RegularPrice": 125000 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/PlushyInaros", "PrimePrice": 120, "RegularPrice": 90000 } ], "allIfAny": [ [ diff --git a/static/webui/index.html b/static/webui/index.html index ba2c4b93..68bceebb 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -922,6 +922,30 @@ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js index 12c5c9fd..593f9856 100644 --- a/static/webui/translations/en.js +++ b/static/webui/translations/en.js @@ -238,6 +238,12 @@ dict = { worldState_affinityBoost: `Affinity Boost`, worldState_resourceBoost: `Resource Boost`, worldState_starDays: `Star Days`, + worldState_TennoCon: `TennoCon Relay`, + worldState_BaroTennoCon: `Baro TennoCon Relay`, + worldState_Fomorian: `Fomorian`, + worldState_BellyoftheBeast: `BellyoftheBeast`, + worldState_RecurringGhoul: `RecurringGhoul`, + worldState_HeatFissures: `HeatFissures`, worldState_galleonOfGhouls: `Galleon of Ghouls`, disabled: `Disabled`, worldState_we1: `Weekend 1`, diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index bb000f25..d9f4e952 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -239,7 +239,13 @@ dict = { worldState_affinityBoost: `经验加成`, worldState_resourceBoost: `资源加成`, worldState_starDays: `活动:星日`, + worldState_TennoCon: `TennoCon中继站`, + worldState_BaroTennoCon: `BaroTennoCon中继站`, + worldState_Fomorian: `破坏巨人战舰`, + worldState_BellyoftheBeast: `行动代号: 兽之腹`, worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`, + worldState_RecurringGhoul: `尸鬼净化`, + worldState_HeatFissures: `热美亚裂缝`, disabled: `关闭/取消配置`, worldState_we1: `活动阶段:第一周`, worldState_we2: `活动阶段:第二周`,