forked from OpenWF/SpaceNinjaServer
add world Event add RecurringGhoul misson
This commit is contained in:
parent
bb3c3e01b0
commit
d02fba869d
@ -81,8 +81,14 @@
|
|||||||
"darvoStockMultiplier": 1,
|
"darvoStockMultiplier": 1,
|
||||||
"varziaOverride": "",
|
"varziaOverride": "",
|
||||||
"varziaFullyStocked": false
|
"varziaFullyStocked": false
|
||||||
|
"TennoCon": false,
|
||||||
|
"RecurringGhoul": false,
|
||||||
|
"Fomorian": false,
|
||||||
|
"BaroTennoCon": false,
|
||||||
|
"BellyoftheBeast": false,
|
||||||
|
"HeatFissures": false
|
||||||
},
|
},
|
||||||
"dev": {
|
"dev": {
|
||||||
"keepVendorsExpired": false
|
"keepVendorsExpired": false
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -92,6 +92,12 @@ export interface IConfig {
|
|||||||
darvoStockMultiplier?: number;
|
darvoStockMultiplier?: number;
|
||||||
varziaOverride?: string;
|
varziaOverride?: string;
|
||||||
varziaFullyStocked?: boolean;
|
varziaFullyStocked?: boolean;
|
||||||
|
TennoCon?: boolean;
|
||||||
|
BaroTennoCon?: boolean;
|
||||||
|
Fomorian?: boolean;
|
||||||
|
BellyoftheBeast?: boolean;
|
||||||
|
RecurringGhoul?: boolean;
|
||||||
|
HeatFissures?: boolean;
|
||||||
};
|
};
|
||||||
dev?: {
|
dev?: {
|
||||||
keepVendorsExpired?: boolean;
|
keepVendorsExpired?: boolean;
|
||||||
|
@ -498,6 +498,93 @@ export const pushClassicBounties = (syndicateMissions: ISyndicateMissionInfo[],
|
|||||||
{
|
{
|
||||||
const rng = new SRng(seed);
|
const rng = new SRng(seed);
|
||||||
const pool = [...eidolonJobs];
|
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({
|
syndicateMissions.push({
|
||||||
_id: {
|
_id: {
|
||||||
$oid: ((bountyCycleStart / 1000) & 0xffffffff).toString(16).padStart(8, "0") + "0000000000000008"
|
$oid: ((bountyCycleStart / 1000) & 0xffffffff).toString(16).padStart(8, "0") + "0000000000000008"
|
||||||
@ -507,67 +594,9 @@ export const pushClassicBounties = (syndicateMissions: ISyndicateMissionInfo[],
|
|||||||
Tag: "CetusSyndicate",
|
Tag: "CetusSyndicate",
|
||||||
Seed: seed,
|
Seed: seed,
|
||||||
Nodes: [],
|
Nodes: [],
|
||||||
Jobs: [
|
Jobs: 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)
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const rng = new SRng(seed);
|
const rng = new SRng(seed);
|
||||||
const pool = [...venusJobs];
|
const pool = [...venusJobs];
|
||||||
@ -1383,6 +1412,241 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
|||||||
Node: "SolarisUnitedHub1"
|
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.
|
// The client gets kinda confused when multiple goals have the same tag, so considering these mutually exclusive.
|
||||||
if (config.worldState?.galleonOfGhouls == 1) {
|
if (config.worldState?.galleonOfGhouls == 1) {
|
||||||
worldState.Goals.push({
|
worldState.Goals.push({
|
||||||
@ -1584,6 +1848,68 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
|||||||
Manifest: []
|
Manifest: []
|
||||||
};
|
};
|
||||||
worldState.VoidTraders.push(vt);
|
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)) {
|
if (isBeforeNextExpectedWorldStateRefresh(timeMs, baroActualStart)) {
|
||||||
vt.Manifest = [];
|
vt.Manifest = [];
|
||||||
if (config.baroFullyStocked) {
|
if (config.baroFullyStocked) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { IMissionReward } from "warframe-public-export-plus";
|
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 {
|
export interface IWorldState {
|
||||||
Version: number; // for goals
|
Version: number; // for goals
|
||||||
@ -39,7 +39,7 @@ export interface IGoal {
|
|||||||
Expiry: IMongoDate;
|
Expiry: IMongoDate;
|
||||||
Count: number;
|
Count: number;
|
||||||
Goal: number;
|
Goal: number;
|
||||||
Success: number;
|
Success?: number;
|
||||||
Personal: boolean;
|
Personal: boolean;
|
||||||
Bounty?: boolean;
|
Bounty?: boolean;
|
||||||
ClampNodeScores?: boolean;
|
ClampNodeScores?: boolean;
|
||||||
@ -47,9 +47,72 @@ export interface IGoal {
|
|||||||
ToolTip?: string;
|
ToolTip?: string;
|
||||||
Icon: string;
|
Icon: string;
|
||||||
Tag: string;
|
Tag: string;
|
||||||
Node: string;
|
Node?: string;
|
||||||
MissionKeyName?: string;
|
MissionKeyName?: string;
|
||||||
Reward?: IMissionReward;
|
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 {
|
export interface ISyndicateMissionInfo {
|
||||||
@ -57,7 +120,7 @@ export interface ISyndicateMissionInfo {
|
|||||||
Activation: IMongoDate;
|
Activation: IMongoDate;
|
||||||
Expiry: IMongoDate;
|
Expiry: IMongoDate;
|
||||||
Tag: string;
|
Tag: string;
|
||||||
Seed: number;
|
Seed?: number;
|
||||||
Nodes: string[];
|
Nodes: string[];
|
||||||
Jobs?: {
|
Jobs?: {
|
||||||
jobType?: string;
|
jobType?: string;
|
||||||
|
@ -401,7 +401,38 @@
|
|||||||
{ "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/BaroKiTeerDecorationC", "PrimePrice": 100, "RegularPrice": 100000 },
|
{ "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/ShipDecos/PedistalPrime", "PrimePrice": 0, "RegularPrice": 1000000 },
|
||||||
{ "ItemType": "/Lotus/StoreItems/Types/Items/Emotes/BaroEmote", "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": [
|
"allIfAny": [
|
||||||
[
|
[
|
||||||
|
@ -922,6 +922,30 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="worldState.starDays" />
|
<input class="form-check-input" type="checkbox" id="worldState.starDays" />
|
||||||
<label class="form-check-label" for="worldState.starDays" data-loc="worldState_starDays"></label>
|
<label class="form-check-label" for="worldState.starDays" data-loc="worldState_starDays"></label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="worldState.TennoCon" />
|
||||||
|
<label class="form-check-label" for="worldState.TennoCon" data-loc="worldState_TennoCon"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="worldState.BaroTennoCon" />
|
||||||
|
<label class="form-check-label" for="worldState.BaroTennoCon" data-loc="worldState_BaroTennoCon"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="worldState.BellyoftheBeast" />
|
||||||
|
<label class="form-check-label" for="worldState.BellyoftheBeast" data-loc="worldState_BellyoftheBeast"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="worldState.RecurringGhoul" />
|
||||||
|
<label class="form-check-label" for="worldState.RecurringGhoul" data-loc="worldState_RecurringGhoul"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="worldState.HeatFissures" />
|
||||||
|
<label class="form-check-label" for="worldState.HeatFissures" data-loc="worldState_HeatFissures"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="worldState.Fomorian" />
|
||||||
|
<label class="form-check-label" for="worldState.Fomorian" data-loc="worldState_Fomorian"></label>
|
||||||
|
</div>
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="worldState.varziaFullyStocked" />
|
<input class="form-check-input" type="checkbox" id="worldState.varziaFullyStocked" />
|
||||||
<label class="form-check-label" for="worldState.varziaFullyStocked" data-loc="worldState_varziaFullyStocked"></label>
|
<label class="form-check-label" for="worldState.varziaFullyStocked" data-loc="worldState_varziaFullyStocked"></label>
|
||||||
|
@ -238,6 +238,12 @@ dict = {
|
|||||||
worldState_affinityBoost: `Affinity Boost`,
|
worldState_affinityBoost: `Affinity Boost`,
|
||||||
worldState_resourceBoost: `Resource Boost`,
|
worldState_resourceBoost: `Resource Boost`,
|
||||||
worldState_starDays: `Star Days`,
|
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`,
|
worldState_galleonOfGhouls: `Galleon of Ghouls`,
|
||||||
disabled: `Disabled`,
|
disabled: `Disabled`,
|
||||||
worldState_we1: `Weekend 1`,
|
worldState_we1: `Weekend 1`,
|
||||||
|
@ -239,7 +239,13 @@ dict = {
|
|||||||
worldState_affinityBoost: `经验加成`,
|
worldState_affinityBoost: `经验加成`,
|
||||||
worldState_resourceBoost: `资源加成`,
|
worldState_resourceBoost: `资源加成`,
|
||||||
worldState_starDays: `活动:星日`,
|
worldState_starDays: `活动:星日`,
|
||||||
|
worldState_TennoCon: `TennoCon中继站`,
|
||||||
|
worldState_BaroTennoCon: `BaroTennoCon中继站`,
|
||||||
|
worldState_Fomorian: `破坏巨人战舰`,
|
||||||
|
worldState_BellyoftheBeast: `行动代号: 兽之腹`,
|
||||||
worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`,
|
worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`,
|
||||||
|
worldState_RecurringGhoul: `尸鬼净化`,
|
||||||
|
worldState_HeatFissures: `热美亚裂缝`,
|
||||||
disabled: `关闭/取消配置`,
|
disabled: `关闭/取消配置`,
|
||||||
worldState_we1: `活动阶段:第一周`,
|
worldState_we1: `活动阶段:第一周`,
|
||||||
worldState_we2: `活动阶段:第二周`,
|
worldState_we2: `活动阶段:第二周`,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user