Compare commits

...

8 Commits

Author SHA1 Message Date
9f0be223e6 fix: returning givekeychainitem response 2025-02-21 15:46:09 +01:00
eb56442d63 fix: junction rewards (#982)
Reviewed-on: OpenWF/SpaceNinjaServer#982
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-21 06:32:05 -08:00
a259afe912 feat(webui): give all quests (#981)
Reviewed-on: OpenWF/SpaceNinjaServer#981
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-21 05:30:13 -08:00
4d7b3b543b fix: typings not matching reality 2025-02-21 08:29:42 +01:00
78548a2ebe chore: cleanup config (#979)
Reviewed-on: OpenWF/SpaceNinjaServer#979
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-20 06:16:40 -08:00
815d18623e chore: generate inventory equipment types from equipmentKeys (#972)
Reviewed-on: OpenWF/SpaceNinjaServer#972
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-20 02:58:57 -08:00
ac6ac19199 chore: properly type equipment in IInventoryChanges (#973)
Reviewed-on: OpenWF/SpaceNinjaServer#973
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-20 02:58:44 -08:00
b4e780baa3 fix: save LoreFragmentScans (#974)
Reviewed-on: OpenWF/SpaceNinjaServer#974
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-20 02:57:23 -08:00
17 changed files with 238 additions and 141 deletions

View File

@ -5,6 +5,9 @@
"level": "trace" "level": "trace"
}, },
"myAddress": "localhost", "myAddress": "localhost",
"hubAddress": "https://localhost/api/",
"platformCDNs": ["https://localhost/"],
"NRS": ["localhost"],
"httpPort": 80, "httpPort": 80,
"httpsPort": 443, "httpsPort": 443,
"administratorNames": [], "administratorNames": [],

View File

@ -10,7 +10,7 @@ export const giveKeyChainTriggeredItemsController: RequestHandler = async (req,
const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString()); const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
const inventoryChanges = giveKeyChainItem(inventory, keyChainInfo); const inventoryChanges = await giveKeyChainItem(inventory, keyChainInfo);
await inventory.save(); await inventory.save();
res.send(inventoryChanges); res.send(inventoryChanges);

View File

@ -6,7 +6,6 @@ import { buildConfig } from "@/src/services/buildConfigService";
import { Account } from "@/src/models/loginModel"; import { Account } from "@/src/models/loginModel";
import { createAccount, isCorrectPassword, isNameTaken } from "@/src/services/loginService"; import { createAccount, isCorrectPassword, isNameTaken } from "@/src/services/loginService";
import { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "@/src/types/loginTypes"; import { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "@/src/types/loginTypes";
import { DTLS, groups, HUB, platformCDNs } from "@/static/fixed_responses/login_static";
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
export const loginController: RequestHandler = async (request, response) => { export const loginController: RequestHandler = async (request, response) => {
@ -84,12 +83,12 @@ const createLoginResponse = (account: IDatabaseAccountJson, buildLabel: string):
ConsentNeeded: account.ConsentNeeded, ConsentNeeded: account.ConsentNeeded,
TrackedSettings: account.TrackedSettings, TrackedSettings: account.TrackedSettings,
Nonce: account.Nonce, Nonce: account.Nonce,
Groups: groups, Groups: [],
platformCDNs: platformCDNs,
NRS: [config.myAddress],
DTLS: DTLS,
IRC: config.myIrcAddresses ?? [config.myAddress], IRC: config.myIrcAddresses ?? [config.myAddress],
HUB: HUB, platformCDNs: config.platformCDNs,
HUB: config.hubAddress,
NRS: config.NRS,
DTLS: 99,
BuildLabel: buildLabel, BuildLabel: buildLabel,
MatchmakingBuildId: buildConfig.matchmakingBuildId MatchmakingBuildId: buildConfig.matchmakingBuildId
}; };

View File

@ -13,7 +13,8 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
| "completeAll" | "completeAll"
| "ResetAll" | "ResetAll"
| "completeAllUnlocked" | "completeAllUnlocked"
| "updateKey"; | "updateKey"
| "giveAll";
const questKeyUpdate = req.body as IUpdateQuestRequest["QuestKeys"]; const questKeyUpdate = req.body as IUpdateQuestRequest["QuestKeys"];
const allQuestKeys: string[] = []; const allQuestKeys: string[] = [];
@ -71,6 +72,7 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
for (const questKey of inventory.QuestKeys) { for (const questKey of inventory.QuestKeys) {
questKey.Completed = false; questKey.Completed = false;
questKey.Progress = []; questKey.Progress = [];
questKey.CompletionDate = undefined;
} }
inventory.ActiveQuest = ""; inventory.ActiveQuest = "";
break; break;
@ -78,7 +80,6 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
case "completeAllUnlocked": { case "completeAllUnlocked": {
logger.info("completing all unlocked quests.."); logger.info("completing all unlocked quests..");
for (const questKey of inventory.QuestKeys) { for (const questKey of inventory.QuestKeys) {
console.log("size of questkeys", inventory.QuestKeys.length);
try { try {
await completeQuest(inventory, questKey.ItemType); await completeQuest(inventory, questKey.ItemType);
} catch (error) { } catch (error) {
@ -105,6 +106,12 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
inventory.ActiveQuest = ""; inventory.ActiveQuest = "";
break; break;
} }
case "giveAll": {
for (const questKey of allQuestKeys) {
addQuestKey(inventory, { ItemType: questKey });
}
break;
}
} }
await inventory.save(); await inventory.save();

View File

@ -33,6 +33,9 @@ interface IConfig {
httpPort?: number; httpPort?: number;
httpsPort?: number; httpsPort?: number;
myIrcAddresses?: string[]; myIrcAddresses?: string[];
platformCDNs?: string[];
hubAddress?: string;
NRS?: string[];
administratorNames?: string[] | string; administratorNames?: string[] | string;
autoCreateAccount?: boolean; autoCreateAccount?: boolean;
skipTutorial?: boolean; skipTutorial?: boolean;

View File

@ -234,7 +234,7 @@ export const addItem = async (
InventoryChanges: { InventoryChanges: {
Ships: [ Ships: [
{ {
ItemId: { $oid: oid }, ItemId: { $oid: oid.toString() },
ItemType: typeName ItemType: typeName
} }
] ]
@ -499,7 +499,7 @@ export const addItem = async (
const horseIndex = inventory.Horses.push({ ItemType: typeName }); const horseIndex = inventory.Horses.push({ ItemType: typeName });
return { return {
InventoryChanges: { InventoryChanges: {
Horses: inventory.Horses[horseIndex - 1].toJSON() Horses: [inventory.Horses[horseIndex - 1].toJSON<IEquipmentClient>()]
} }
}; };
} }
@ -572,9 +572,7 @@ export const addSentinel = (
addMods(inventory, modsToGive); addMods(inventory, modsToGive);
const sentinelIndex = inventory.Sentinels.push({ ItemType: sentinelName, Configs: configs, XP: 0 }) - 1; const sentinelIndex = inventory.Sentinels.push({ ItemType: sentinelName, Configs: configs, XP: 0 }) - 1;
inventoryChanges.Sentinels ??= []; inventoryChanges.Sentinels ??= [];
(inventoryChanges.Sentinels as IEquipmentClient[]).push( inventoryChanges.Sentinels.push(inventory.Sentinels[sentinelIndex].toJSON<IEquipmentClient>());
inventory.Sentinels[sentinelIndex].toJSON<IEquipmentClient>()
);
return inventoryChanges; return inventoryChanges;
}; };
@ -586,9 +584,7 @@ export const addSentinelWeapon = (
): void => { ): void => {
const index = inventory.SentinelWeapons.push({ ItemType: typeName, XP: 0 }) - 1; const index = inventory.SentinelWeapons.push({ ItemType: typeName, XP: 0 }) - 1;
inventoryChanges.SentinelWeapons ??= []; inventoryChanges.SentinelWeapons ??= [];
(inventoryChanges.SentinelWeapons as IEquipmentClient[]).push( inventoryChanges.SentinelWeapons.push(inventory.SentinelWeapons[index].toJSON<IEquipmentClient>());
inventory.SentinelWeapons[index].toJSON<IEquipmentClient>()
);
}; };
export const addPowerSuit = ( export const addPowerSuit = (
@ -604,7 +600,7 @@ export const addPowerSuit = (
} }
const suitIndex = inventory.Suits.push({ ItemType: powersuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1; const suitIndex = inventory.Suits.push({ ItemType: powersuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1;
inventoryChanges.Suits ??= []; inventoryChanges.Suits ??= [];
(inventoryChanges.Suits as IEquipmentClient[]).push(inventory.Suits[suitIndex].toJSON<IEquipmentClient>()); inventoryChanges.Suits.push(inventory.Suits[suitIndex].toJSON<IEquipmentClient>());
return inventoryChanges; return inventoryChanges;
}; };
@ -621,7 +617,7 @@ export const addMechSuit = (
} }
const suitIndex = inventory.MechSuits.push({ ItemType: mechsuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1; const suitIndex = inventory.MechSuits.push({ ItemType: mechsuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1;
inventoryChanges.MechSuits ??= []; inventoryChanges.MechSuits ??= [];
(inventoryChanges.MechSuits as IEquipmentClient[]).push(inventory.MechSuits[suitIndex].toJSON<IEquipmentClient>()); inventoryChanges.MechSuits.push(inventory.MechSuits[suitIndex].toJSON<IEquipmentClient>());
return inventoryChanges; return inventoryChanges;
}; };
@ -642,9 +638,7 @@ export const addSpecialItem = (
XP: 0 XP: 0
}) - 1; }) - 1;
inventoryChanges.SpecialItems ??= []; inventoryChanges.SpecialItems ??= [];
(inventoryChanges.SpecialItems as IEquipmentClient[]).push( inventoryChanges.SpecialItems.push(inventory.SpecialItems[specialItemIndex].toJSON<IEquipmentClient>());
inventory.SpecialItems[specialItemIndex].toJSON<IEquipmentClient>()
);
}; };
export const addSpaceSuit = ( export const addSpaceSuit = (
@ -654,9 +648,7 @@ export const addSpaceSuit = (
): IInventoryChanges => { ): IInventoryChanges => {
const suitIndex = inventory.SpaceSuits.push({ ItemType: spacesuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1; const suitIndex = inventory.SpaceSuits.push({ ItemType: spacesuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1;
inventoryChanges.SpaceSuits ??= []; inventoryChanges.SpaceSuits ??= [];
(inventoryChanges.SpaceSuits as IEquipmentClient[]).push( inventoryChanges.SpaceSuits.push(inventory.SpaceSuits[suitIndex].toJSON<IEquipmentClient>());
inventory.SpaceSuits[suitIndex].toJSON<IEquipmentClient>()
);
return inventoryChanges; return inventoryChanges;
}; };
@ -798,7 +790,7 @@ export const addEquipment = (
}) - 1; }) - 1;
inventoryChanges[category] ??= []; inventoryChanges[category] ??= [];
(inventoryChanges[category] as IEquipmentClient[]).push(inventory[category][index].toJSON<IEquipmentClient>()); inventoryChanges[category].push(inventory[category][index].toJSON<IEquipmentClient>());
return inventoryChanges; return inventoryChanges;
}; };
@ -838,7 +830,7 @@ const addCrewShip = (
} }
const index = inventory.CrewShips.push({ ItemType: typeName }) - 1; const index = inventory.CrewShips.push({ ItemType: typeName }) - 1;
inventoryChanges.CrewShips ??= []; inventoryChanges.CrewShips ??= [];
(inventoryChanges.CrewShips as IEquipmentClient[]).push(inventory.CrewShips[index].toJSON<IEquipmentClient>()); inventoryChanges.CrewShips.push(inventory.CrewShips[index].toJSON<IEquipmentClient>());
return inventoryChanges; return inventoryChanges;
}; };
@ -852,9 +844,7 @@ const addCrewShipHarness = (
} }
const index = inventory.CrewShipHarnesses.push({ ItemType: typeName }) - 1; const index = inventory.CrewShipHarnesses.push({ ItemType: typeName }) - 1;
inventoryChanges.CrewShipHarnesses ??= []; inventoryChanges.CrewShipHarnesses ??= [];
(inventoryChanges.CrewShipHarnesses as IEquipmentClient[]).push( inventoryChanges.CrewShipHarnesses.push(inventory.CrewShipHarnesses[index].toJSON<IEquipmentClient>());
inventory.CrewShipHarnesses[index].toJSON<IEquipmentClient>()
);
return inventoryChanges; return inventoryChanges;
}; };
@ -868,7 +858,7 @@ const addMotorcycle = (
} }
const index = inventory.Motorcycles.push({ ItemType: typeName }) - 1; const index = inventory.Motorcycles.push({ ItemType: typeName }) - 1;
inventoryChanges.Motorcycles ??= []; inventoryChanges.Motorcycles ??= [];
(inventoryChanges.Motorcycles as IEquipmentClient[]).push(inventory.Motorcycles[index].toJSON<IEquipmentClient>()); inventoryChanges.Motorcycles.push(inventory.Motorcycles[index].toJSON<IEquipmentClient>());
return inventoryChanges; return inventoryChanges;
}; };

View File

@ -26,6 +26,8 @@ import { getLevelKeyRewards, getNode } from "@/src/services/itemDataService";
import { InventoryDocumentProps, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { InventoryDocumentProps, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
import { getEntriesUnsafe } from "@/src/utils/ts-utils"; import { getEntriesUnsafe } from "@/src/utils/ts-utils";
import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
import junctionRewards from "@/static/fixed_responses/junctionRewards.json";
import { IJunctionRewards } from "@/src/types/commonTypes";
const getRotations = (rotationCount: number): number[] => { const getRotations = (rotationCount: number): number[] => {
if (rotationCount === 0) return [0]; if (rotationCount === 0) return [0];
@ -191,6 +193,11 @@ export const addMissionInventoryUpdates = (
}); });
break; break;
} }
case "LoreFragmentScans":
value.forEach(x => {
inventory.LoreFragmentScans.push(x);
});
break;
case "SyndicateId": { case "SyndicateId": {
inventory.CompletedSyndicates.push(value); inventory.CompletedSyndicates.push(value);
break; break;
@ -268,6 +275,20 @@ export const addMissionRewards = async (
} }
} }
if (rewardInfo.node in junctionRewards) {
const junctionReward = (junctionRewards as IJunctionRewards)[rewardInfo.node];
for (const item of junctionReward.items) {
MissionRewards.push({
StoreItem: item.ItemType,
ItemCount: item.ItemCount
});
}
if (junctionReward.credits) {
inventory.RegularCredits += junctionReward.credits;
missionCompletionCredits += junctionReward.credits;
}
}
for (const reward of MissionRewards) { for (const reward of MissionRewards) {
//TODO: additem should take in storeItems //TODO: additem should take in storeItems
const inventoryChange = await addItem(inventory, reward.StoreItem.replace("StoreItems/", ""), reward.ItemCount); const inventoryChange = await addItem(inventory, reward.StoreItem.replace("StoreItems/", ""), reward.ItemCount);

View File

@ -138,6 +138,8 @@ export const giveKeyChainItem = async (inventory: TInventoryDatabaseDocument, ke
// items were added: update quest stage's i (item was given) // items were added: update quest stage's i (item was given)
updateQuestStage(inventory, keyChainInfo, { i: true }); updateQuestStage(inventory, keyChainInfo, { i: true });
return inventoryChanges;
//TODO: Check whether Wishlist is used to track items which should exist uniquely in the inventory //TODO: Check whether Wishlist is used to track items which should exist uniquely in the inventory
/* /*
some items are added or removed (not sure) to the wishlist, in that case a some items are added or removed (not sure) to the wishlist, in that case a

View File

@ -1,3 +1,5 @@
import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
export interface IOid { export interface IOid {
$oid: string; $oid: string;
} }
@ -7,3 +9,10 @@ export interface IMongoDate {
$numberLong: string; $numberLong: string;
}; };
} }
export interface IReward {
items: ITypeCount[];
credits: number;
}
export type IJunctionRewards = Record<string, IReward>;

View File

@ -12,30 +12,35 @@ import {
IOperatorConfigDatabase IOperatorConfigDatabase
} from "@/src/types/inventoryTypes/commonInventoryTypes"; } from "@/src/types/inventoryTypes/commonInventoryTypes";
export type InventoryDatabaseEquipment = {
[_ in TEquipmentKey]: IEquipmentDatabase[];
};
export interface IInventoryDatabase export interface IInventoryDatabase
extends Omit< extends Omit<
IInventoryClient, IInventoryClient,
| "TrainingDate" | "TrainingDate"
| "LoadOutPresets" | "LoadOutPresets"
| "Mailbox" | "Mailbox"
| "GuildId" | "GuildId"
| "PendingRecipes" | "PendingRecipes"
| "Created" | "Created"
| "QuestKeys" | "QuestKeys"
| "BlessingCooldown" | "BlessingCooldown"
| "Ships" | "Ships"
| "WeaponSkins" | "WeaponSkins"
| "Upgrades" | "Upgrades"
| "CrewShipSalvagedWeaponSkins" | "CrewShipSalvagedWeaponSkins"
| "CrewShipWeaponSkins" | "CrewShipWeaponSkins"
| "AdultOperatorLoadOuts" | "AdultOperatorLoadOuts"
| "OperatorLoadOuts" | "OperatorLoadOuts"
| "KahlLoadOuts" | "KahlLoadOuts"
| "InfestedFoundry" | "InfestedFoundry"
| "DialogueHistory" | "DialogueHistory"
| "KubrowPetEggs" | "KubrowPetEggs"
| TEquipmentKey | TEquipmentKey
> { >,
InventoryDatabaseEquipment {
accountOwnerId: Types.ObjectId; accountOwnerId: Types.ObjectId;
Created: Date; Created: Date;
TrainingDate: Date; TrainingDate: Date;
@ -56,30 +61,6 @@ export interface IInventoryDatabase
InfestedFoundry?: IInfestedFoundryDatabase; InfestedFoundry?: IInfestedFoundryDatabase;
DialogueHistory?: IDialogueHistoryDatabase; DialogueHistory?: IDialogueHistoryDatabase;
KubrowPetEggs?: IKubrowPetEggDatabase[]; KubrowPetEggs?: IKubrowPetEggDatabase[];
Suits: IEquipmentDatabase[];
LongGuns: IEquipmentDatabase[];
Pistols: IEquipmentDatabase[];
Melee: IEquipmentDatabase[];
SpecialItems: IEquipmentDatabase[];
Sentinels: IEquipmentDatabase[];
SentinelWeapons: IEquipmentDatabase[];
SpaceSuits: IEquipmentDatabase[];
SpaceGuns: IEquipmentDatabase[];
SpaceMelee: IEquipmentDatabase[];
Hoverboards: IEquipmentDatabase[];
OperatorAmps: IEquipmentDatabase[];
MoaPets: IEquipmentDatabase[];
Scoops: IEquipmentDatabase[];
Horses: IEquipmentDatabase[];
DrifterGuns: IEquipmentDatabase[];
DrifterMelee: IEquipmentDatabase[];
Motorcycles: IEquipmentDatabase[];
CrewShips: IEquipmentDatabase[];
DataKnives: IEquipmentDatabase[];
MechSuits: IEquipmentDatabase[];
CrewShipHarnesses: IEquipmentDatabase[];
KubrowPets: IEquipmentDatabase[];
} }
export interface IQuestKeyDatabase { export interface IQuestKeyDatabase {
@ -179,30 +160,11 @@ export interface IDailyAffiliations {
DailyAffiliationHex: number; DailyAffiliationHex: number;
} }
export interface IInventoryClient extends IDailyAffiliations { export type InventoryClientEquipment = {
Suits: IEquipmentClient[]; [_ in TEquipmentKey]: IEquipmentClient[];
LongGuns: IEquipmentClient[]; };
Pistols: IEquipmentClient[];
Melee: IEquipmentClient[]; export interface IInventoryClient extends IDailyAffiliations, InventoryClientEquipment {
SpecialItems: IEquipmentClient[];
Sentinels: IEquipmentClient[];
SentinelWeapons: IEquipmentClient[];
SpaceSuits: IEquipmentClient[];
SpaceGuns: IEquipmentClient[];
SpaceMelee: IEquipmentClient[];
Hoverboards: IEquipmentClient[];
OperatorAmps: IEquipmentClient[];
MoaPets: IEquipmentClient[];
Scoops: IEquipmentClient[];
Horses: IEquipmentClient[];
DrifterGuns: IEquipmentClient[];
DrifterMelee: IEquipmentClient[];
Motorcycles: IEquipmentClient[];
CrewShips: IEquipmentClient[];
DataKnives: IEquipmentClient[];
MechSuits: IEquipmentClient[];
CrewShipHarnesses: IEquipmentClient[];
KubrowPets: IEquipmentClient[];
AdultOperatorLoadOuts: IOperatorConfigClient[]; AdultOperatorLoadOuts: IOperatorConfigClient[];
OperatorLoadOuts: IOperatorConfigClient[]; OperatorLoadOuts: IOperatorConfigClient[];
KahlLoadOuts: IOperatorConfigClient[]; KahlLoadOuts: IOperatorConfigClient[];

View File

@ -39,11 +39,11 @@ export interface ILoginResponse extends IAccountAndLoginResponseCommons {
Groups: IGroup[]; Groups: IGroup[];
BuildLabel: string; BuildLabel: string;
MatchmakingBuildId: string; MatchmakingBuildId: string;
platformCDNs: string[]; platformCDNs?: string[];
NRS: string[]; NRS?: string[];
DTLS: number; DTLS: number;
IRC: string[]; IRC: string[];
HUB: string; HUB?: string;
} }
export interface IGroup { export interface IGroup {

View File

@ -1,4 +1,5 @@
import { IInfestedFoundryClient } from "./inventoryTypes/inventoryTypes"; import { IEquipmentClient } from "./inventoryTypes/commonInventoryTypes";
import { IInfestedFoundryClient, TEquipmentKey } from "./inventoryTypes/inventoryTypes";
export interface IPurchaseRequest { export interface IPurchaseRequest {
PurchaseParams: IPurchaseParams; PurchaseParams: IPurchaseParams;
@ -29,6 +30,8 @@ export interface ICurrencyChanges {
export type IInventoryChanges = { export type IInventoryChanges = {
[_ in SlotNames]?: IBinChanges; [_ in SlotNames]?: IBinChanges;
} & {
[_ in TEquipmentKey]?: IEquipmentClient[];
} & ICurrencyChanges & { InfestedFoundry?: IInfestedFoundryClient } & Record< } & ICurrencyChanges & { InfestedFoundry?: IInfestedFoundryClient } & Record<
string, string,
IBinChanges | number | object[] | IInfestedFoundryClient IBinChanges | number | object[] | IInfestedFoundryClient

View File

@ -13,7 +13,8 @@ import {
IFusionTreasure, IFusionTreasure,
ICustomMarkers, ICustomMarkers,
IPlayerSkills, IPlayerSkills,
IQuestKeyDatabase IQuestKeyDatabase,
ILoreFragmentScan
} from "./inventoryTypes/inventoryTypes"; } from "./inventoryTypes/inventoryTypes";
export interface IThemeUpdateRequest { export interface IThemeUpdateRequest {
@ -85,6 +86,7 @@ export type IMissionInventoryUpdateRequest = {
FocusXpIncreases?: number[]; FocusXpIncreases?: number[];
PlayerSkillGains: IPlayerSkills; PlayerSkillGains: IPlayerSkills;
CustomMarkers?: ICustomMarkers[]; CustomMarkers?: ICustomMarkers[];
LoreFragmentScans?: ILoreFragmentScan[];
} & { } & {
[K in TEquipmentKey]?: IEquipmentClient[]; [K in TEquipmentKey]?: IEquipmentClient[];
}; };

View File

@ -0,0 +1,120 @@
{
"VenusToMercuryJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/InfestedIntroQuest/InfestedIntroQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Keys/KubrowQuest/KubrowQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BoltoRifle", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Warframe/AvatarShieldRechargeRateMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Warframe/AvatarAbilityEfficiencyMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Game/KubrowPet/EggHatcher", "ItemCount": 1 }
],
"credits": 10000
},
"EarthToVenusJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/FurisBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Melee/WeaponFreezeDamageMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Rifle/WeaponElectricityDamageMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/SentinelRecipes/TnSentinelCrossBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/MeleeTrees/StaffCmbOneMeleeTree", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/OrokinReactor", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Aura/PlayerEnergyHealthRegenAuraMod", "ItemCount": 1 }
],
"credits": 5000
},
"EarthToMarsJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/ArchwingQuest/ArchwingQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Game/KubrowPet/EggHatcher", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Items/ShipFeatureItems/VoidProjectionFeatureItem", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionRevenantPrimeABronze", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Hammer/HammerWeapon", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/MeleeTrees/IronPhoenixMeleeTree", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain", "ItemCount": 1 }
],
"credits": 15000
},
"MarsToCeresJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/GrnSniperRifleBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Melee/WeaponToxinDamageMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/MeleeTrees/DualSwordCmbOneMeleeTree", "ItemCount": 1 }
],
"credits": 20000
},
"MarsToPhobosJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/SpyQuestKeyChain/SpyQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/GrnHeavyPistolBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/StoreItems/Consumables/CipherBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Rifle/WeaponReloadSpeedMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Warframe/AvatarLootRadarMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst", "ItemCount": 1 }
],
"credits": 20000
},
"JupiterToEuropaJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/LimboQuest/LimboQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Keys/DragonQuest/DragonQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/CorpusMinigunBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Aura/PlayerHealthAuraMod", "ItemCount": 1 }
],
"credits": 40000
},
"JupiterToSaturnJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/GrenadeLauncherBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Keys/ProteaQuest/ProteaQuestKeyChain", "ItemCount": 1 }
],
"credits": 40000
},
"SaturnToUranusJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/CorpusWhipBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaHelmetBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Keys/DuviriQuest/DuviriQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/NeutralCreatures/ErsatzHorse/ErsatzHorsePowerSuit", "ItemCount": 1 }
],
"credits": 60000
},
"UranusToNeptuneJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/OrokinMoonQuest/OrokinMoonQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/ReconnasorBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaChassisBlueprint", "ItemCount": 1 }
],
"credits": 80000
},
"NeptuneToPlutoJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/GrineerFlakCannonBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaSystemsBlueprint", "ItemCount": 1 }
],
"credits": 80000
},
"PlutoToSednaJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/WarWithinQuest/WarWithinQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Keys/MirageQuest/MirageQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/DualDaggerBlueprint", "ItemCount": 1 }
],
"credits": 100000
},
"PlutoToErisJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Keys/InfestedAladVQuest/InfestedAladVQuestKeyChain", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/MireSwordBlueprint", "ItemCount": 1 }
],
"credits": 100000
},
"CeresToJupiterJunction": {
"items": [
{ "ItemType": "/Lotus/StoreItems/Types/Recipes/Weapons/GrnStaffBlueprint", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Archwing/Suit/ArchwingSuitHealthMaxMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Archwing/Rifle/ArchwingRifleDamageAmountMod", "ItemCount": 1 },
{ "ItemType": "/Lotus/StoreItems/Upgrades/Mods/Archwing/Melee/ArchwingMeleeDamageMod", "ItemCount": 1 }
],
"credits": 30000
}
}

View File

@ -1,27 +0,0 @@
import { IGroup } from "@/src/types/loginTypes";
export const groups: IGroup[] = [
{
experiment: "InitiatePage",
experimentGroup: "initiate_page_no_video"
},
{ experiment: "ChatQAChannel", experimentGroup: "control" },
{
experiment: "MarketSearchRecommendations",
experimentGroup: "premium_credit_purchases_14_days"
},
{ experiment: "SurveyLocation", experimentGroup: "EXIT" },
{ experiment: "GamesightAB", experimentGroup: "a" }
];
export const platformCDNs = [
"https://content.warframe.com/",
"https://content-xb1.warframe.com/",
"https://content-ps4.warframe.com/",
"https://content-swi.warframe.com/",
"https://content-mob.warframe.com/"
];
export const DTLS = 99;
export const HUB = "https://arbiter.warframe.com/api/";

View File

@ -539,10 +539,12 @@
</form> </form>
<h5 class="mt-3" data-loc="cheats_quests"></h6> <h5 class="mt-3" data-loc="cheats_quests"></h6>
<div class="mb-2 d-flex flex-wrap gap-2"> <div class="mb-2 d-flex flex-wrap gap-2">
<button class="btn btn-primary" onclick="doQuestUpdate('unlockAll');" data-loc="cheats_quests_UnlockAll"></button> <button class="btn btn-primary" onclick="doQuestUpdate('unlockAll');" data-loc="cheats_quests_unlockAll"></button>
<button class="btn btn-primary" onclick="doQuestUpdate('completeAll');" data-loc="cheats_quests_CompleteAll"></button> <button class="btn btn-primary" onclick="doQuestUpdate('completeAll');" data-loc="cheats_quests_completeAll"></button>
<button class="btn btn-primary" onclick="doQuestUpdate('completeAllUnlocked');" data-loc="cheats_quests_CompleteAllUnlocked"></button> <button class="btn btn-primary" onclick="doQuestUpdate('completeAllUnlocked');" data-loc="cheats_quests_completeAllUnlocked"></button>
<button class="btn btn-primary" onclick="doQuestUpdate('ResetAll');" data-loc="cheats_quests_ResetAll"></button> <button class="btn btn-primary" onclick="doQuestUpdate('ResetAll');" data-loc="cheats_quests_resetAll"></button>
<button class="btn btn-primary" onclick="doQuestUpdate('giveAll');" data-loc="cheats_quests_giveAll"></button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -118,10 +118,11 @@ dict = {
cheats_changeButton: `Change`, cheats_changeButton: `Change`,
cheats_none: `None`, cheats_none: `None`,
cheats_quests: `Quests`, cheats_quests: `Quests`,
cheats_quests_UnlockAll: `Unlock All Quests`, cheats_quests_unlockAll: `Unlock All Quests`,
cheats_quests_CompleteAll: `Complete All Quests`, cheats_quests_completeAll: `Complete All Quests`,
cheats_quests_CompleteAllUnlocked: `Complete All Unlocked Quests`, cheats_quests_completeAllUnlocked: `Complete All Unlocked Quests`,
cheats_quests_ResetAll: `Reset All Quests`, cheats_quests_resetAll: `Reset All Quests`,
cheats_quests_giveAll: `Give All Quests`,
import_importNote: `You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer <b>will be overwritten</b> in your account.`, import_importNote: `You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
import_submit: `Submit` import_submit: `Submit`
}; };