forked from OpenWF/SpaceNinjaServer
		
	feat: daily synthesis (#1014)
Closes #386 Closes #533 Reviewed-on: OpenWF/SpaceNinjaServer#1014 Co-authored-by: Sainan <sainan@calamity.inc> Co-committed-by: Sainan <sainan@calamity.inc>
This commit is contained in:
		
							parent
							
								
									d7628d46e9
								
							
						
					
					
						commit
						28a36052d9
					
				
							
								
								
									
										11
									
								
								src/controllers/api/abandonLibraryDailyTaskController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/controllers/api/abandonLibraryDailyTaskController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const abandonLibraryDailyTaskController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    inventory.LibraryActiveDailyTaskInfo = undefined;
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.status(200).end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										31
									
								
								src/controllers/api/claimLibraryDailyTaskRewardController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/controllers/api/claimLibraryDailyTaskRewardController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const claimLibraryDailyTaskRewardController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const rewardQuantity = inventory.LibraryActiveDailyTaskInfo!.RewardQuantity;
 | 
				
			||||||
 | 
					    const rewardStanding = inventory.LibraryActiveDailyTaskInfo!.RewardStanding;
 | 
				
			||||||
 | 
					    inventory.LibraryActiveDailyTaskInfo = undefined;
 | 
				
			||||||
 | 
					    inventory.LibraryAvailableDailyTaskInfo = undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let syndicate = inventory.Affiliations.find(x => x.Tag == "LibrarySyndicate");
 | 
				
			||||||
 | 
					    if (!syndicate) {
 | 
				
			||||||
 | 
					        syndicate = inventory.Affiliations[inventory.Affiliations.push({ Tag: "LibrarySyndicate", Standing: 0 }) - 1];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    syndicate.Standing += rewardStanding;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    inventory.FusionPoints += 80 * rewardQuantity;
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    res.json({
 | 
				
			||||||
 | 
					        RewardItem: "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/RareFusionBundle",
 | 
				
			||||||
 | 
					        RewardQuantity: rewardQuantity,
 | 
				
			||||||
 | 
					        StandingAwarded: rewardStanding,
 | 
				
			||||||
 | 
					        InventoryChanges: {
 | 
				
			||||||
 | 
					            FusionPoints: 80 * rewardQuantity
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -14,7 +14,7 @@ import {
 | 
				
			|||||||
    ExportVirtuals
 | 
					    ExportVirtuals
 | 
				
			||||||
} from "warframe-public-export-plus";
 | 
					} from "warframe-public-export-plus";
 | 
				
			||||||
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "./infestedFoundryController";
 | 
					import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "./infestedFoundryController";
 | 
				
			||||||
import { allDailyAffiliationKeys } from "@/src/services/inventoryService";
 | 
					import { allDailyAffiliationKeys, createLibraryDailyTask } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const inventoryController: RequestHandler = async (request, response) => {
 | 
					export const inventoryController: RequestHandler = async (request, response) => {
 | 
				
			||||||
    const account = await getAccountForRequest(request);
 | 
					    const account = await getAccountForRequest(request);
 | 
				
			||||||
@ -36,6 +36,9 @@ export const inventoryController: RequestHandler = async (request, response) =>
 | 
				
			|||||||
            inventory[key] = 16000 + inventory.PlayerLevel * 500;
 | 
					            inventory[key] = 16000 + inventory.PlayerLevel * 500;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        inventory.DailyFocus = 250000 + inventory.PlayerLevel * 5000;
 | 
					        inventory.DailyFocus = 250000 + inventory.PlayerLevel * 5000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        inventory.LibraryAvailableDailyTaskInfo = createLibraryDailyTask();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await inventory.save();
 | 
					        await inventory.save();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								src/controllers/api/startLibraryDailyTaskController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/controllers/api/startLibraryDailyTaskController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const startLibraryDailyTaskController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    inventory.LibraryActiveDailyTaskInfo = inventory.LibraryAvailableDailyTaskInfo;
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.json(inventory.LibraryAvailableDailyTaskInfo);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -68,7 +68,7 @@ import {
 | 
				
			|||||||
    ICalendarProgress,
 | 
					    ICalendarProgress,
 | 
				
			||||||
    IPendingCouponDatabase,
 | 
					    IPendingCouponDatabase,
 | 
				
			||||||
    IPendingCouponClient,
 | 
					    IPendingCouponClient,
 | 
				
			||||||
    ILibraryAvailableDailyTaskInfo,
 | 
					    ILibraryDailyTaskInfo,
 | 
				
			||||||
    IDroneDatabase,
 | 
					    IDroneDatabase,
 | 
				
			||||||
    IDroneClient
 | 
					    IDroneClient
 | 
				
			||||||
} from "../../types/inventoryTypes/inventoryTypes";
 | 
					} from "../../types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
@ -950,11 +950,12 @@ pendingCouponSchema.set("toJSON", {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const libraryAvailableDailyTaskInfoSchema = new Schema<ILibraryAvailableDailyTaskInfo>(
 | 
					const libraryDailyTaskInfoSchema = new Schema<ILibraryDailyTaskInfo>(
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        EnemyTypes: [String],
 | 
					        EnemyTypes: [String],
 | 
				
			||||||
        EnemyLocTag: String,
 | 
					        EnemyLocTag: String,
 | 
				
			||||||
        EnemyIcon: String,
 | 
					        EnemyIcon: String,
 | 
				
			||||||
 | 
					        Scans: Number,
 | 
				
			||||||
        ScansRequired: Number,
 | 
					        ScansRequired: Number,
 | 
				
			||||||
        RewardStoreItem: String,
 | 
					        RewardStoreItem: String,
 | 
				
			||||||
        RewardQuantity: Number,
 | 
					        RewardQuantity: Number,
 | 
				
			||||||
@ -1209,7 +1210,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
 | 
				
			|||||||
        //Cephalon Simaris Entries Example:"TargetType"+"Scans"(1-10)+"Completed": true|false
 | 
					        //Cephalon Simaris Entries Example:"TargetType"+"Scans"(1-10)+"Completed": true|false
 | 
				
			||||||
        LibraryPersonalProgress: [Schema.Types.Mixed],
 | 
					        LibraryPersonalProgress: [Schema.Types.Mixed],
 | 
				
			||||||
        //Cephalon Simaris Daily Task
 | 
					        //Cephalon Simaris Daily Task
 | 
				
			||||||
        LibraryAvailableDailyTaskInfo: libraryAvailableDailyTaskInfoSchema,
 | 
					        LibraryAvailableDailyTaskInfo: libraryDailyTaskInfoSchema,
 | 
				
			||||||
 | 
					        LibraryActiveDailyTaskInfo: libraryDailyTaskInfoSchema,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //https://warframe.fandom.com/wiki/Invasion
 | 
					        //https://warframe.fandom.com/wiki/Invasion
 | 
				
			||||||
        InvasionChainProgress: [Schema.Types.Mixed],
 | 
					        InvasionChainProgress: [Schema.Types.Mixed],
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
import express from "express";
 | 
					import express from "express";
 | 
				
			||||||
 | 
					import { abandonLibraryDailyTaskController } from "@/src/controllers/api/abandonLibraryDailyTaskController";
 | 
				
			||||||
import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
 | 
					import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
 | 
				
			||||||
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
					import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
				
			||||||
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
					import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
				
			||||||
@ -7,6 +8,7 @@ import { artifactsController } from "@/src/controllers/api/artifactsController";
 | 
				
			|||||||
import { changeDojoRootController } from "@/src/controllers/api/changeDojoRootController";
 | 
					import { changeDojoRootController } from "@/src/controllers/api/changeDojoRootController";
 | 
				
			||||||
import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
 | 
					import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
 | 
				
			||||||
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
 | 
					import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
 | 
				
			||||||
 | 
					import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/claimLibraryDailyTaskRewardController";
 | 
				
			||||||
import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController";
 | 
					import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController";
 | 
				
			||||||
import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController";
 | 
					import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController";
 | 
				
			||||||
import { createGuildController } from "@/src/controllers/api/createGuildController";
 | 
					import { createGuildController } from "@/src/controllers/api/createGuildController";
 | 
				
			||||||
@ -75,6 +77,7 @@ import { setSupportedSyndicateController } from "@/src/controllers/api/setSuppor
 | 
				
			|||||||
import { setWeaponSkillTreeController } from "@/src/controllers/api/setWeaponSkillTreeController";
 | 
					import { setWeaponSkillTreeController } from "@/src/controllers/api/setWeaponSkillTreeController";
 | 
				
			||||||
import { shipDecorationsController } from "@/src/controllers/api/shipDecorationsController";
 | 
					import { shipDecorationsController } from "@/src/controllers/api/shipDecorationsController";
 | 
				
			||||||
import { startDojoRecipeController } from "@/src/controllers/api/startDojoRecipeController";
 | 
					import { startDojoRecipeController } from "@/src/controllers/api/startDojoRecipeController";
 | 
				
			||||||
 | 
					import { startLibraryDailyTaskController } from "@/src/controllers/api/startLibraryDailyTaskController";
 | 
				
			||||||
import { startLibraryPersonalTargetController } from "@/src/controllers/api/startLibraryPersonalTargetController";
 | 
					import { startLibraryPersonalTargetController } from "@/src/controllers/api/startLibraryPersonalTargetController";
 | 
				
			||||||
import { startRecipeController } from "@/src/controllers/api/startRecipeController";
 | 
					import { startRecipeController } from "@/src/controllers/api/startRecipeController";
 | 
				
			||||||
import { stepSequencersController } from "@/src/controllers/api/stepSequencersController";
 | 
					import { stepSequencersController } from "@/src/controllers/api/stepSequencersController";
 | 
				
			||||||
@ -93,7 +96,9 @@ import { upgradesController } from "@/src/controllers/api/upgradesController";
 | 
				
			|||||||
const apiRouter = express.Router();
 | 
					const apiRouter = express.Router();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// get
 | 
					// get
 | 
				
			||||||
 | 
					apiRouter.get("/abandonLibraryDailyTask.php", abandonLibraryDailyTaskController);
 | 
				
			||||||
apiRouter.get("/checkDailyMissionBonus.php", checkDailyMissionBonusController);
 | 
					apiRouter.get("/checkDailyMissionBonus.php", checkDailyMissionBonusController);
 | 
				
			||||||
 | 
					apiRouter.get("/claimLibraryDailyTaskReward.php", claimLibraryDailyTaskRewardController);
 | 
				
			||||||
apiRouter.get("/credits.php", creditsController);
 | 
					apiRouter.get("/credits.php", creditsController);
 | 
				
			||||||
apiRouter.get("/deleteSession.php", deleteSessionController);
 | 
					apiRouter.get("/deleteSession.php", deleteSessionController);
 | 
				
			||||||
apiRouter.get("/dojo", dojoController);
 | 
					apiRouter.get("/dojo", dojoController);
 | 
				
			||||||
@ -121,6 +126,7 @@ apiRouter.get("/setActiveQuest.php", setActiveQuestController);
 | 
				
			|||||||
apiRouter.get("/setActiveShip.php", setActiveShipController);
 | 
					apiRouter.get("/setActiveShip.php", setActiveShipController);
 | 
				
			||||||
apiRouter.get("/setBootLocation.php", setBootLocationController);
 | 
					apiRouter.get("/setBootLocation.php", setBootLocationController);
 | 
				
			||||||
apiRouter.get("/setSupportedSyndicate.php", setSupportedSyndicateController);
 | 
					apiRouter.get("/setSupportedSyndicate.php", setSupportedSyndicateController);
 | 
				
			||||||
 | 
					apiRouter.get("/startLibraryDailyTask.php", startLibraryDailyTaskController);
 | 
				
			||||||
apiRouter.get("/startLibraryPersonalTarget.php", startLibraryPersonalTargetController);
 | 
					apiRouter.get("/startLibraryPersonalTarget.php", startLibraryPersonalTargetController);
 | 
				
			||||||
apiRouter.get("/surveys.php", surveysController);
 | 
					apiRouter.get("/surveys.php", surveysController);
 | 
				
			||||||
apiRouter.get("/updateSession.php", updateSessionGetController);
 | 
					apiRouter.get("/updateSession.php", updateSessionGetController);
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ import {
 | 
				
			|||||||
    IInventoryDatabase,
 | 
					    IInventoryDatabase,
 | 
				
			||||||
    IKubrowPetEggDatabase,
 | 
					    IKubrowPetEggDatabase,
 | 
				
			||||||
    IKubrowPetEggClient,
 | 
					    IKubrowPetEggClient,
 | 
				
			||||||
    ILibraryAvailableDailyTaskInfo,
 | 
					    ILibraryDailyTaskInfo,
 | 
				
			||||||
    ICalendarProgress,
 | 
					    ICalendarProgress,
 | 
				
			||||||
    IDroneClient,
 | 
					    IDroneClient,
 | 
				
			||||||
    IUpgradeClient
 | 
					    IUpgradeClient
 | 
				
			||||||
@ -42,6 +42,7 @@ import {
 | 
				
			|||||||
    ExportBundles,
 | 
					    ExportBundles,
 | 
				
			||||||
    ExportCustoms,
 | 
					    ExportCustoms,
 | 
				
			||||||
    ExportDrones,
 | 
					    ExportDrones,
 | 
				
			||||||
 | 
					    ExportEnemies,
 | 
				
			||||||
    ExportFlavour,
 | 
					    ExportFlavour,
 | 
				
			||||||
    ExportFusionBundles,
 | 
					    ExportFusionBundles,
 | 
				
			||||||
    ExportGear,
 | 
					    ExportGear,
 | 
				
			||||||
@ -63,6 +64,8 @@ import { generateRewardSeed } from "@/src/controllers/api/getNewRewardSeedContro
 | 
				
			|||||||
import { addStartingGear } from "@/src/controllers/api/giveStartingGearController";
 | 
					import { addStartingGear } from "@/src/controllers/api/giveStartingGearController";
 | 
				
			||||||
import { addQuestKey, completeQuest } from "@/src/services/questService";
 | 
					import { addQuestKey, completeQuest } from "@/src/services/questService";
 | 
				
			||||||
import { handleBundleAcqusition } from "./purchaseService";
 | 
					import { handleBundleAcqusition } from "./purchaseService";
 | 
				
			||||||
 | 
					import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json";
 | 
				
			||||||
 | 
					import { getRandomElement, getRandomInt } from "./rngService";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const createInventory = async (
 | 
					export const createInventory = async (
 | 
				
			||||||
    accountOwnerId: Types.ObjectId,
 | 
					    accountOwnerId: Types.ObjectId,
 | 
				
			||||||
@ -77,7 +80,7 @@ export const createInventory = async (
 | 
				
			|||||||
            ReceivedStartingGear: config.skipTutorial
 | 
					            ReceivedStartingGear: config.skipTutorial
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        inventory.LibraryAvailableDailyTaskInfo = createLibraryAvailableDailyTaskInfo();
 | 
					        inventory.LibraryAvailableDailyTaskInfo = createLibraryDailyTask();
 | 
				
			||||||
        inventory.CalendarProgress = createCalendar();
 | 
					        inventory.CalendarProgress = createCalendar();
 | 
				
			||||||
        inventory.RewardSeed = generateRewardSeed();
 | 
					        inventory.RewardSeed = generateRewardSeed();
 | 
				
			||||||
        inventory.DuviriInfo = {
 | 
					        inventory.DuviriInfo = {
 | 
				
			||||||
@ -1193,15 +1196,19 @@ export const addKeyChainItems = async (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return inventoryChanges;
 | 
					    return inventoryChanges;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
const createLibraryAvailableDailyTaskInfo = (): ILibraryAvailableDailyTaskInfo => {
 | 
					
 | 
				
			||||||
 | 
					export const createLibraryDailyTask = (): ILibraryDailyTaskInfo => {
 | 
				
			||||||
 | 
					    const enemyTypes = getRandomElement(libraryDailyTasks);
 | 
				
			||||||
 | 
					    const enemyAvatar = ExportEnemies.avatars[enemyTypes[0]];
 | 
				
			||||||
 | 
					    const scansRequired = getRandomInt(2, 4);
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
        EnemyTypes: ["/Lotus/Types/Enemies/Orokin/RifleLancerAvatar"],
 | 
					        EnemyTypes: enemyTypes,
 | 
				
			||||||
        EnemyLocTag: "/Lotus/Language/Game/CorruptedLancer",
 | 
					        EnemyLocTag: enemyAvatar.name,
 | 
				
			||||||
        EnemyIcon: "/Lotus/Interface/Icons/Npcs/OrokinRifleLancerAvatar.png",
 | 
					        EnemyIcon: enemyAvatar.icon!,
 | 
				
			||||||
        ScansRequired: 3,
 | 
					        ScansRequired: scansRequired,
 | 
				
			||||||
        RewardStoreItem: "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/UncommonFusionBundle",
 | 
					        RewardStoreItem: "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/RareFusionBundle",
 | 
				
			||||||
        RewardQuantity: 7,
 | 
					        RewardQuantity: Math.trunc(scansRequired * 2.5),
 | 
				
			||||||
        RewardStanding: 7500
 | 
					        RewardStanding: 2500 * scansRequired
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -185,6 +185,22 @@ export const addMissionInventoryUpdates = (
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					            case "LibraryScans":
 | 
				
			||||||
 | 
					                value.forEach(scan => {
 | 
				
			||||||
 | 
					                    if (inventory.LibraryActiveDailyTaskInfo) {
 | 
				
			||||||
 | 
					                        if (inventory.LibraryActiveDailyTaskInfo.EnemyTypes.find(x => x == scan.EnemyType)) {
 | 
				
			||||||
 | 
					                            inventory.LibraryActiveDailyTaskInfo.Scans ??= 0;
 | 
				
			||||||
 | 
					                            inventory.LibraryActiveDailyTaskInfo.Scans += scan.Count;
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            logger.warn(
 | 
				
			||||||
 | 
					                                `ignoring synthesis of ${scan.EnemyType} as it's not part of the active daily task`
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        logger.warn(`no library daily task active, ignoring synthesis of ${scan.EnemyType}`);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
            case "SyndicateId": {
 | 
					            case "SyndicateId": {
 | 
				
			||||||
                inventory.CompletedSyndicates.push(value);
 | 
					                inventory.CompletedSyndicates.push(value);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
				
			|||||||
@ -320,7 +320,8 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
 | 
				
			|||||||
    LibraryPersonalTarget: string;
 | 
					    LibraryPersonalTarget: string;
 | 
				
			||||||
    LibraryPersonalProgress: ILibraryPersonalProgress[];
 | 
					    LibraryPersonalProgress: ILibraryPersonalProgress[];
 | 
				
			||||||
    CollectibleSeries: ICollectibleSery[];
 | 
					    CollectibleSeries: ICollectibleSery[];
 | 
				
			||||||
    LibraryAvailableDailyTaskInfo: ILibraryAvailableDailyTaskInfo;
 | 
					    LibraryAvailableDailyTaskInfo?: ILibraryDailyTaskInfo;
 | 
				
			||||||
 | 
					    LibraryActiveDailyTaskInfo?: ILibraryDailyTaskInfo;
 | 
				
			||||||
    HasResetAccount: boolean;
 | 
					    HasResetAccount: boolean;
 | 
				
			||||||
    PendingCoupon?: IPendingCouponClient;
 | 
					    PendingCoupon?: IPendingCouponClient;
 | 
				
			||||||
    Harvestable: boolean;
 | 
					    Harvestable: boolean;
 | 
				
			||||||
@ -658,10 +659,11 @@ export interface ILastSortieReward {
 | 
				
			|||||||
    Manifest: string;
 | 
					    Manifest: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface ILibraryAvailableDailyTaskInfo {
 | 
					export interface ILibraryDailyTaskInfo {
 | 
				
			||||||
    EnemyTypes: string[];
 | 
					    EnemyTypes: string[];
 | 
				
			||||||
    EnemyLocTag: string;
 | 
					    EnemyLocTag: string;
 | 
				
			||||||
    EnemyIcon: string;
 | 
					    EnemyIcon: string;
 | 
				
			||||||
 | 
					    Scans?: number;
 | 
				
			||||||
    ScansRequired: number;
 | 
					    ScansRequired: number;
 | 
				
			||||||
    RewardStoreItem: string;
 | 
					    RewardStoreItem: string;
 | 
				
			||||||
    RewardQuantity: number;
 | 
					    RewardQuantity: number;
 | 
				
			||||||
 | 
				
			|||||||
@ -92,6 +92,12 @@ export type IMissionInventoryUpdateRequest = {
 | 
				
			|||||||
        IsFinalWave: boolean;
 | 
					        IsFinalWave: boolean;
 | 
				
			||||||
        Participants: IVoidTearParticipantInfo[];
 | 
					        Participants: IVoidTearParticipantInfo[];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					    LibraryScans?: {
 | 
				
			||||||
 | 
					        EnemyType: string;
 | 
				
			||||||
 | 
					        Count: number;
 | 
				
			||||||
 | 
					        CodexScanCount: number;
 | 
				
			||||||
 | 
					        Standing: number;
 | 
				
			||||||
 | 
					    }[];
 | 
				
			||||||
} & {
 | 
					} & {
 | 
				
			||||||
    [K in TEquipmentKey]?: IEquipmentClient[];
 | 
					    [K in TEquipmentKey]?: IEquipmentClient[];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										148
									
								
								static/fixed_responses/libraryDailyTasks.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								static/fixed_responses/libraryDailyTasks.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,148 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/BipedRobot/AIWeek/LaserCannonBipedAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/BipedRobot/AIWeek/RailgunBipedAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/BipedRobot/AIWeek/ShockwaveBipedAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/BipedRobot/AIWeek/LaserDiscBipedAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/BipedRobot/AIWeek/SuperMoaBipedAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/EliteSpacemanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/AIWeek/RifleSpacemanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/AIWeek/DeployableSpacemanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/AIWeek/MeleeSpacemanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/AIWeek/ShotgunSpacemanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/AIWeek/SniperSpacemanAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Corpus/Spaceman/AIWeek/NullifySpacemanAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/BeastMasterAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/BladeSawmanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/BlowtorchSawmanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/PistonSawmanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/BladeSawmanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/BladeSawmanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/BladeSawmanAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/RifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/EliteRifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/RifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/EliteRifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/RifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/EliteRifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/RifleLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/EliteRifleLancerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/EviseratorLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/EvisceratorLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/EvisceratorLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/EvisceratorLancerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/FemaleGrineerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/FemaleGrineerSniperAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/FlameLancerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/GrineerMeleeStaffAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/HeavyFemaleGrineerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/HeavyFemaleGrineerAvatarDesert",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/HeavyFemaleGrineerAvatarDesert",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/FemaleGrineerHeavyAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/IncendiaryBombardAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/JetpackMarineAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/JetpackMarineAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/JetpackMarineAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/JetpackMarineAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/MacheteWomanAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/FemaleGrineerMacheteAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/ShieldLancerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/ShotgunLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/ShotgunLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/ShotgunLancerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/ShotgunLancerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/GrineerAvatars/GrineerMarinePistolAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Desert/Avatars/GrineerMarinePistolAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/Forest/Avatars/GrineerMarinePistolAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/SeaLab/Avatars/GrineerMarinePistolAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Ancients/AncientAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Ancients/HealingAncientAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Ancients/ToxicAncientAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Ancients/DiseasedAncientAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Ancients/SpawningAncientAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Crawlers/CrawlerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Crawlers/NoxiousCrawlerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Crawlers/GraspingCrawlerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Crawlers/GrenadeAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Crawlers/LightningAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/InfestedMoas/NaniteCloudBipedAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/InfestedMoas/SlowBombBipedAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Quadrupeds/QuadrupedAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Runners/LeapingRunnerAvatar",
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Infested/AiWeek/Runners/RunnerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/OrokinBladeSawmanAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/OrokinHealingAncientAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/OrokinHeavyFemaleAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/OrokinNullifySpacemanAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/OrokinRocketBombardAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/RifleLancerAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Orokin/RifleSpacemanAvatar"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "/Lotus/Types/Enemies/Grineer/AIWeek/Avatars/RocketBombardAvatar"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user