Compare commits

..

1 Commits

Author SHA1 Message Date
4247272f17 feat(webui): add level keys via "add items" 2025-04-06 16:20:44 +02:00
10 changed files with 19 additions and 62 deletions

8
package-lock.json generated
View File

@ -18,7 +18,7 @@
"morgan": "^1.10.0", "morgan": "^1.10.0",
"ncp": "^2.0.0", "ncp": "^2.0.0",
"typescript": ">=5.5 <5.6.0", "typescript": ">=5.5 <5.6.0",
"warframe-public-export-plus": "^0.5.52", "warframe-public-export-plus": "^0.5.50",
"warframe-riven-info": "^0.1.2", "warframe-riven-info": "^0.1.2",
"winston": "^3.17.0", "winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0" "winston-daily-rotate-file": "^5.0.0"
@ -3789,9 +3789,9 @@
} }
}, },
"node_modules/warframe-public-export-plus": { "node_modules/warframe-public-export-plus": {
"version": "0.5.52", "version": "0.5.50",
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.52.tgz", "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.50.tgz",
"integrity": "sha512-mJyQbTFMDwgBSkhUYJzcfJg9qrMTrL1pyZuAxV/Dov68xUikK5zigQSYM3ZkKYbhwBtg0Bx/+7q9GAmPzGaRhA==" "integrity": "sha512-KlhdY/Q5sRAIn/RhmdviKBoX3gk+Jtuen0cWnFB2zqK7eKYMDtd79bKOtTPtnK9zCNzh6gFug2wEeDVam3Bwlw=="
}, },
"node_modules/warframe-riven-info": { "node_modules/warframe-riven-info": {
"version": "0.1.2", "version": "0.1.2",

View File

@ -6,7 +6,7 @@
"scripts": { "scripts": {
"start": "node --import ./build/src/pathman.js build/src/index.js", "start": "node --import ./build/src/pathman.js build/src/index.js",
"dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts ", "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts ",
"build": "tsc --incremental --sourceMap && ncp static/webui build/static/webui", "build": "tsc --incremental && ncp static/webui build/static/webui",
"verify": "tsgo --noEmit", "verify": "tsgo --noEmit",
"lint": "eslint --ext .ts .", "lint": "eslint --ext .ts .",
"lint:fix": "eslint --fix --ext .ts .", "lint:fix": "eslint --fix --ext .ts .",
@ -24,7 +24,7 @@
"morgan": "^1.10.0", "morgan": "^1.10.0",
"ncp": "^2.0.0", "ncp": "^2.0.0",
"typescript": ">=5.5 <5.6.0", "typescript": ">=5.5 <5.6.0",
"warframe-public-export-plus": "^0.5.52", "warframe-public-export-plus": "^0.5.50",
"warframe-riven-info": "^0.1.2", "warframe-riven-info": "^0.1.2",
"winston": "^3.17.0", "winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0" "winston-daily-rotate-file": "^5.0.0"

View File

@ -77,8 +77,8 @@ export const placeDecoInComponentController: RequestHandler = async (req, res) =
} }
} }
if (enoughMiscItems) { if (enoughMiscItems) {
guild.VaultRegularCredits -= scaleRequiredCount(guild.Tier, meta.price); guild.VaultRegularCredits -= meta.price;
deco.RegularCredits = scaleRequiredCount(guild.Tier, meta.price); deco.RegularCredits = meta.price;
deco.MiscItems = []; deco.MiscItems = [];
for (const ingredient of meta.ingredients) { for (const ingredient of meta.ingredients) {

View File

@ -23,7 +23,7 @@ const trainingResultController: RequestHandler = async (req, res): Promise<void>
const trainingResults = getJSONfromString<ITrainingResultsRequest>(String(req.body)); const trainingResults = getJSONfromString<ITrainingResultsRequest>(String(req.body));
const inventory = await getInventory(accountId, "TrainingDate PlayerLevel TradesRemaining"); const inventory = await getInventory(accountId);
if (trainingResults.numLevelsGained == 1) { if (trainingResults.numLevelsGained == 1) {
let time = Date.now(); let time = Date.now();
@ -33,7 +33,6 @@ const trainingResultController: RequestHandler = async (req, res): Promise<void>
inventory.TrainingDate = new Date(time); inventory.TrainingDate = new Date(time);
inventory.PlayerLevel += 1; inventory.PlayerLevel += 1;
inventory.TradesRemaining += 1;
await createMessage(accountId, [ await createMessage(accountId, [
{ {

View File

@ -218,6 +218,11 @@ const getItemListsController: RequestHandler = (req, response) => {
name: getString(key.name || "", lang), name: getString(key.name || "", lang),
chainLength: key.chainStages.length chainLength: key.chainStages.length
}); });
} else if (key.name) {
res.miscitems.push({
uniqueName,
name: getString(key.name, lang)
});
} }
} }

View File

@ -95,6 +95,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
LongMOTD: guild.LongMOTD, LongMOTD: guild.LongMOTD,
Members: members, Members: members,
Ranks: guild.Ranks, Ranks: guild.Ranks,
TradeTax: guild.TradeTax,
Tier: guild.Tier, Tier: guild.Tier,
Vault: getGuildVault(guild), Vault: getGuildVault(guild),
ActiveDojoColorResearch: guild.ActiveDojoColorResearch, ActiveDojoColorResearch: guild.ActiveDojoColorResearch,
@ -103,7 +104,6 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
IsContributor: !!guild.CeremonyContributors?.find(x => x.equals(accountId)), IsContributor: !!guild.CeremonyContributors?.find(x => x.equals(accountId)),
NumContributors: guild.CeremonyContributors?.length ?? 0, NumContributors: guild.CeremonyContributors?.length ?? 0,
CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined, CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined,
AutoContributeFromVault: guild.AutoContributeFromVault,
AllianceId: guild.AllianceId ? toOid(guild.AllianceId) : undefined AllianceId: guild.AllianceId ? toOid(guild.AllianceId) : undefined
}; };
}; };
@ -126,11 +126,7 @@ export const getDojoClient = async (
const dojo: IDojoClient = { const dojo: IDojoClient = {
_id: { $oid: guild._id.toString() }, _id: { $oid: guild._id.toString() },
Name: guild.Name, Name: guild.Name,
Tier: guild.Tier, Tier: 1,
GuildEmblem: guild.Emblem,
TradeTax: guild.TradeTax,
NumContributors: guild.CeremonyContributors?.length ?? 0,
CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined,
FixedContributions: true, FixedContributions: true,
DojoRevision: 1, DojoRevision: 1,
Vault: getGuildVault(guild), Vault: getGuildVault(guild),

View File

@ -441,12 +441,7 @@ export const addMissionInventoryUpdates = async (
_id: new Types.ObjectId(ItemId.$oid), _id: new Types.ObjectId(ItemId.$oid),
...loadoutConfigItemIdRemoved ...loadoutConfigItemIdRemoved
}; };
const dbConfig = loadout.NORMAL.id(loadoutId); loadout.NORMAL.id(loadoutId)!.overwrite(loadoutConfigDatabase);
if (dbConfig) {
dbConfig.overwrite(loadoutConfigDatabase);
} else {
logger.warn(`couldn't update loadout because there's no config with id ${loadoutId}`);
}
} }
await loadout.save(); await loadout.save();
} }
@ -726,20 +721,6 @@ export const addFixedLevelRewards = (
MissionRewards.push(item); MissionRewards.push(item);
} }
} }
if (rewards.droptable) {
if (rewards.droptable in ExportRewards) {
logger.debug(`rolling ${rewards.droptable} for level key rewards`);
const reward = getRandomRewardByChance(ExportRewards[rewards.droptable][0]);
if (reward) {
MissionRewards.push({
StoreItem: reward.type,
ItemCount: reward.itemCount
});
}
} else {
logger.error(`unknown droptable ${rewards.droptable}`);
}
}
return missionBonusCredits; return missionBonusCredits;
}; };

View File

@ -177,22 +177,6 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest
await giveKeyChainMissionReward(inventory, { KeyChain: questKey, ChainStage: i }); await giveKeyChainMissionReward(inventory, { KeyChain: questKey, ChainStage: i });
} }
if (questKey == "/Lotus/Types/Keys/OrokinMoonQuest/OrokinMoonQuestKeyChain") {
void createMessage(inventory.accountOwnerId, [
{
sndr: "/Lotus/Language/Bosses/Ordis",
msg: "/Lotus/Language/G1Quests/SecondDreamFinishInboxMessage",
att: [
"/Lotus/Weapons/Tenno/Melee/Swords/StalkerTwo/StalkerTwoSmallSword",
"/Lotus/Upgrades/Skins/Sigils/ScarSigil"
],
sub: "/Lotus/Language/G1Quests/SecondDreamFinishInboxTitle",
icon: "/Lotus/Interface/Icons/Npcs/Ordis.png",
highPriority: true
}
]);
}
const questCompletionItems = getQuestCompletionItems(questKey); const questCompletionItems = getQuestCompletionItems(questKey);
logger.debug(`quest completion items`, questCompletionItems); logger.debug(`quest completion items`, questCompletionItems);
if (questCompletionItems) { if (questCompletionItems) {

View File

@ -10,6 +10,7 @@ export interface IGuildClient {
LongMOTD?: ILongMOTD; LongMOTD?: ILongMOTD;
Members: IGuildMemberClient[]; Members: IGuildMemberClient[];
Ranks: IGuildRank[]; Ranks: IGuildRank[];
TradeTax: number;
Tier: number; Tier: number;
Vault: IGuildVault; Vault: IGuildVault;
ActiveDojoColorResearch: string; ActiveDojoColorResearch: string;
@ -142,7 +143,6 @@ export interface IDojoClient {
_id: IOid; // ID of the guild _id: IOid; // ID of the guild
Name: string; Name: string;
Tier: number; Tier: number;
TradeTax?: number;
FixedContributions: boolean; FixedContributions: boolean;
DojoRevision: number; DojoRevision: number;
AllianceId?: IOid; AllianceId?: IOid;
@ -155,8 +155,6 @@ export interface IDojoClient {
ContentURL?: string; ContentURL?: string;
GuildEmblem?: boolean; GuildEmblem?: boolean;
DojoComponents: IDojoComponentClient[]; DojoComponents: IDojoComponentClient[];
NumContributors?: number;
CeremonyResetDate?: IMongoDate;
} }
export interface IDojoComponentClient { export interface IDojoComponentClient {

View File

@ -5,11 +5,5 @@
"ItemCount": 1 "ItemCount": 1
} }
], ],
"/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain": [{ "ItemType": "/Lotus/Types/Recipes/WarframeRecipes/BrokenFrameBlueprint", "ItemCount": 1 }], "/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain": [{ "ItemType": "/Lotus/Types/Recipes/WarframeRecipes/BrokenFrameBlueprint", "ItemCount": 1 }]
"/Lotus/Types/Keys/OrokinMoonQuest/OrokinMoonQuestKeyChain": [
{
"ItemType": "/Lotus/Types/Keys/RailJackBuildQuest/RailjackBuildQuestEmailItem",
"ItemCount": 1
}
]
} }