fix: weaken classic lich when getting all 3 mods correct (#2186)
Fixes #2185 Reviewed-on: OpenWF/SpaceNinjaServer#2186 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									ffeffe2796
								
							
						
					
					
						commit
						3dcd2663d3
					
				@ -17,6 +17,7 @@ import {
 | 
				
			|||||||
    IKnifeResponse
 | 
					    IKnifeResponse
 | 
				
			||||||
} from "@/src/helpers/nemesisHelpers";
 | 
					} from "@/src/helpers/nemesisHelpers";
 | 
				
			||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
					import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
 | 
					import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
				
			||||||
import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
 | 
					import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
 | 
				
			||||||
import { freeUpSlot, getInventory } from "@/src/services/inventoryService";
 | 
					import { freeUpSlot, getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
import { getAccountForRequest } from "@/src/services/loginService";
 | 
					import { getAccountForRequest } from "@/src/services/loginService";
 | 
				
			||||||
@ -202,16 +203,28 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
            guess[body.position].result = correct ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
					            guess[body.position].result = correct ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
				
			||||||
            inventory.Nemesis!.GuessHistory[inventory.Nemesis!.GuessHistory.length - 1] = encodeNemesisGuess(guess);
 | 
					            inventory.Nemesis!.GuessHistory[inventory.Nemesis!.GuessHistory.length - 1] = encodeNemesisGuess(guess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Increase rank if incorrect
 | 
					            const response: INemesisRequiemResponse = {};
 | 
				
			||||||
            let RankIncrease: number | undefined;
 | 
					            if (correct) {
 | 
				
			||||||
            if (!correct) {
 | 
					                if (body.position == 2) {
 | 
				
			||||||
                RankIncrease = 1;
 | 
					                    // That was all 3 guesses correct, nemesis is now weakened.
 | 
				
			||||||
 | 
					                    inventory.Nemesis!.InfNodes = [
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            Node: getNemesisManifest(inventory.Nemesis!.manifest).showdownNode,
 | 
				
			||||||
 | 
					                            Influence: 1
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    ];
 | 
				
			||||||
 | 
					                    inventory.Nemesis!.Weakened = true;
 | 
				
			||||||
 | 
					                    await consumePasscodeModCharges(inventory, response);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // Guess was incorrect, increase rank
 | 
				
			||||||
 | 
					                response.RankIncrease = 1;
 | 
				
			||||||
                const manifest = getNemesisManifest(inventory.Nemesis!.manifest);
 | 
					                const manifest = getNemesisManifest(inventory.Nemesis!.manifest);
 | 
				
			||||||
                inventory.Nemesis!.Rank = Math.min(inventory.Nemesis!.Rank + 1, manifest.systemIndexes.length - 1);
 | 
					                inventory.Nemesis!.Rank = Math.min(inventory.Nemesis!.Rank + 1, manifest.systemIndexes.length - 1);
 | 
				
			||||||
                inventory.Nemesis!.InfNodes = getInfNodes(manifest, inventory.Nemesis!.Rank);
 | 
					                inventory.Nemesis!.InfNodes = getInfNodes(manifest, inventory.Nemesis!.Rank);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            await inventory.save();
 | 
					            await inventory.save();
 | 
				
			||||||
            res.json({ RankIncrease });
 | 
					            res.json(response);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else if ((req.query.mode as string) == "rs") {
 | 
					    } else if ((req.query.mode as string) == "rs") {
 | 
				
			||||||
        // report spawn; POST but no application data in body
 | 
					        // report spawn; POST but no application data in body
 | 
				
			||||||
@ -299,20 +312,11 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
        ];
 | 
					        ];
 | 
				
			||||||
        inventory.Nemesis!.Weakened = true;
 | 
					        inventory.Nemesis!.Weakened = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const response: IKnifeResponse & { target: INemesisClient } = {
 | 
					        const response: INemesisWeakenResponse = {
 | 
				
			||||||
            target: inventory.toJSON<IInventoryClient>().Nemesis!
 | 
					            target: inventory.toJSON<IInventoryClient>().Nemesis!
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Consume charge of the correct requiem mod(s)
 | 
					        await consumePasscodeModCharges(inventory, response);
 | 
				
			||||||
        const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
 | 
					 | 
				
			||||||
        const dataknifeLoadout = loadout.DATAKNIFE.id(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE].$oid);
 | 
					 | 
				
			||||||
        const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
 | 
					 | 
				
			||||||
        const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
 | 
					 | 
				
			||||||
        const modTypes = getNemesisPasscodeModTypes(inventory.Nemesis!);
 | 
					 | 
				
			||||||
        for (const modType of modTypes) {
 | 
					 | 
				
			||||||
            const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, modType);
 | 
					 | 
				
			||||||
            consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await inventory.save();
 | 
					        await inventory.save();
 | 
				
			||||||
        res.json(response);
 | 
					        res.json(response);
 | 
				
			||||||
@ -370,11 +374,19 @@ interface INemesisRequiemRequest {
 | 
				
			|||||||
    knife?: IKnife;
 | 
					    knife?: IKnife;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface INemesisRequiemResponse extends IKnifeResponse {
 | 
				
			||||||
 | 
					    RankIncrease?: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// interface INemesisWeakenRequest {
 | 
					// interface INemesisWeakenRequest {
 | 
				
			||||||
//     target: INemesisClient;
 | 
					//     target: INemesisClient;
 | 
				
			||||||
//     knife: IKnife;
 | 
					//     knife: IKnife;
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface INemesisWeakenResponse extends IKnifeResponse {
 | 
				
			||||||
 | 
					    target: INemesisClient;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface IKnife {
 | 
					interface IKnife {
 | 
				
			||||||
    Item: IEquipmentClient;
 | 
					    Item: IEquipmentClient;
 | 
				
			||||||
    Skins: IWeaponSkinClient[];
 | 
					    Skins: IWeaponSkinClient[];
 | 
				
			||||||
@ -383,3 +395,18 @@ interface IKnife {
 | 
				
			|||||||
    AttachedUpgrades: IUpgradeClient[];
 | 
					    AttachedUpgrades: IUpgradeClient[];
 | 
				
			||||||
    HiddenWhenHolstered: boolean;
 | 
					    HiddenWhenHolstered: boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const consumePasscodeModCharges = async (
 | 
				
			||||||
 | 
					    inventory: TInventoryDatabaseDocument,
 | 
				
			||||||
 | 
					    response: IKnifeResponse
 | 
				
			||||||
 | 
					): Promise<void> => {
 | 
				
			||||||
 | 
					    const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
 | 
				
			||||||
 | 
					    const dataknifeLoadout = loadout.DATAKNIFE.id(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE].$oid);
 | 
				
			||||||
 | 
					    const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
 | 
				
			||||||
 | 
					    const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
 | 
				
			||||||
 | 
					    const modTypes = getNemesisPasscodeModTypes(inventory.Nemesis!);
 | 
				
			||||||
 | 
					    for (const modType of modTypes) {
 | 
				
			||||||
 | 
					        const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, modType);
 | 
				
			||||||
 | 
					        consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user