feat: conquest progression & rewards #1791
@ -72,14 +72,19 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const { MissionRewards, inventoryChanges, credits, AffiliationMods, SyndicateXPItemReward } =
 | 
			
		||||
        await addMissionRewards(inventory, missionReport, firstCompletion);
 | 
			
		||||
    const {
 | 
			
		||||
        MissionRewards,
 | 
			
		||||
        inventoryChanges,
 | 
			
		||||
        credits,
 | 
			
		||||
        AffiliationMods,
 | 
			
		||||
        SyndicateXPItemReward,
 | 
			
		||||
        ConquestCompletedMissionsCount
 | 
			
		||||
    } = await addMissionRewards(inventory, missionReport, firstCompletion);
 | 
			
		||||
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
    const inventoryResponse = await getInventoryResponse(inventory, true);
 | 
			
		||||
 | 
			
		||||
    //TODO: figure out when to send inventory. it is needed for many cases.
 | 
			
		||||
    const response: IMissionInventoryUpdateResponse = {
 | 
			
		||||
    res.json({
 | 
			
		||||
        InventoryJson: JSON.stringify(inventoryResponse),
 | 
			
		||||
        InventoryChanges: inventoryChanges,
 | 
			
		||||
        MissionRewards,
 | 
			
		||||
@ -87,13 +92,9 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
 | 
			
		||||
        ...inventoryUpdates,
 | 
			
		||||
        //FusionPoints: inventoryChanges?.FusionPoints, // This in combination with InventoryJson or InventoryChanges seems to just double the number of endo shown, so unsure when this is needed.
 | 
			
		||||
        SyndicateXPItemReward,
 | 
			
		||||
        AffiliationMods
 | 
			
		||||
    };
 | 
			
		||||
    if (missionReport.ConquestMissionsCompleted !== undefined) {
 | 
			
		||||
        response.ConquestCompletedMissionsCount =
 | 
			
		||||
            missionReport.ConquestMissionsCompleted == 2 ? 0 : missionReport.ConquestMissionsCompleted + 1;
 | 
			
		||||
    }
 | 
			
		||||
    res.json(response);
 | 
			
		||||
        AffiliationMods,
 | 
			
		||||
        ConquestCompletedMissionsCount
 | 
			
		||||
    } satisfies IMissionInventoryUpdateResponse);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
@ -586,6 +586,7 @@ interface AddMissionRewardsReturnType {
 | 
			
		||||
    credits?: IMissionCredits;
 | 
			
		||||
    AffiliationMods?: IAffiliationMods[];
 | 
			
		||||
    SyndicateXPItemReward?: number;
 | 
			
		||||
    ConquestCompletedMissionsCount?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TODO: return type of partial missioninventoryupdate response
 | 
			
		||||
@ -620,6 +621,7 @@ export const addMissionRewards = async (
 | 
			
		||||
    const inventoryChanges: IInventoryChanges = {};
 | 
			
		||||
    const AffiliationMods: IAffiliationMods[] = [];
 | 
			
		||||
    let SyndicateXPItemReward;
 | 
			
		||||
    let ConquestCompletedMissionsCount;
 | 
			
		||||
 | 
			
		||||
    let missionCompletionCredits = 0;
 | 
			
		||||
    //inventory change is what the client has not rewarded itself, also the client needs to know the credit changes for display
 | 
			
		||||
@ -882,7 +884,48 @@ export const addMissionRewards = async (
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return { inventoryChanges, MissionRewards, credits, AffiliationMods, SyndicateXPItemReward };
 | 
			
		||||
    if (rewardInfo.ConquestCompleted !== undefined) {
 | 
			
		||||
        let score = 1;
 | 
			
		||||
        if (rewardInfo.ConquestHardModeActive === 1) score += 3;
 | 
			
		||||
 | 
			
		||||
        if (rewardInfo.ConquestPersonalModifiersActive !== undefined)
 | 
			
		||||
            score += rewardInfo.ConquestPersonalModifiersActive;
 | 
			
		||||
        if (rewardInfo.ConquestEquipmentSuggestionsFulfilled !== undefined)
 | 
			
		||||
            score += rewardInfo.ConquestEquipmentSuggestionsFulfilled;
 | 
			
		||||
 | 
			
		||||
        score *= rewardInfo.ConquestCompleted + 1;
 | 
			
		||||
 | 
			
		||||
        if (rewardInfo.ConquestCompleted == 2 && rewardInfo.ConquestHardModeActive === 1) score += 1;
 | 
			
		||||
 | 
			
		||||
        const conquestType = rewardInfo.ConquestType;
 | 
			
		||||
        const conquestNode =
 | 
			
		||||
            conquestType == "HexConquest" ? "EchoesHexConquestHardModeUnlocked" : "EntratiLabConquestHardModeUnlocked";
 | 
			
		||||
        if (score >= 25 && inventory.NodeIntrosCompleted.find(x => x == conquestNode) === undefined)
 | 
			
		||||
            inventory.NodeIntrosCompleted.push(conquestNode);
 | 
			
		||||
 | 
			
		||||
        if (conquestType == "HexConquest") {
 | 
			
		||||
            inventory.EchoesHexConquestCacheScoreMission ??= 0;
 | 
			
		||||
 | 
			
		||||
            if (score > inventory.EchoesHexConquestCacheScoreMission)
 | 
			
		||||
                inventory.EchoesHexConquestCacheScoreMission = score;
 | 
			
		||||
        } else {
 | 
			
		||||
            inventory.EntratiLabConquestCacheScoreMission ??= 0;
 | 
			
		||||
 | 
			
		||||
            if (score > inventory.EntratiLabConquestCacheScoreMission)
 | 
			
		||||
                inventory.EntratiLabConquestCacheScoreMission = score;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ConquestCompletedMissionsCount = rewardInfo.ConquestCompleted == 2 ? 0 : rewardInfo.ConquestCompleted + 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
        inventoryChanges,
 | 
			
		||||
        MissionRewards,
 | 
			
		||||
        credits,
 | 
			
		||||
        AffiliationMods,
 | 
			
		||||
        SyndicateXPItemReward,
 | 
			
		||||
        ConquestCompletedMissionsCount
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//creditBonus is not entirely accurate.
 | 
			
		||||
 | 
			
		||||
@ -151,7 +151,12 @@ export interface IRewardInfo {
 | 
			
		||||
    PurgatoryRewardQualifications?: string;
 | 
			
		||||
    rewardSeed?: number | bigint;
 | 
			
		||||
    periodicMissionTag?: string;
 | 
			
		||||
 | 
			
		||||
    ConquestType?: string;
 | 
			
		||||
    ConquestCompleted?: number;
 | 
			
		||||
    ConquestEquipmentSuggestionsFulfilled?: number;
 | 
			
		||||
    ConquestPersonalModifiersActive?: number;
 | 
			
		||||
    ConquestStickersActive?: number;
 | 
			
		||||
    ConquestHardModeActive?: number;
 | 
			
		||||
    // for bounties, only EOM_AFK and node are given from above, plus:
 | 
			
		||||
    JobTier?: number;
 | 
			
		||||
    jobId?: string;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user