2025-08-25 13:37:14 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								import  {  fromDbOid ,  version_compare  }  from  "../../helpers/inventoryHelpers.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  type  {  IKnifeResponse  }  from  "../../helpers/nemesisHelpers.ts" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								import  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-17 05:02:34 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    antivirusMods , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    decodeNemesisGuess , 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    encodeNemesisGuess , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    getInfNodes , 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    getKnifeUpgrade , 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    getNemesisManifest , 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    getNemesisPasscode , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    GUESS_CORRECT , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    GUESS_INCORRECT , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    GUESS_NEUTRAL , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    GUESS_NONE , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:16:50 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    GUESS_WILDCARD , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-23 14:55:48 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    parseUpgrade 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-25 13:37:14 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								}  from  "../../helpers/nemesisHelpers.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  getJSONfromString  }  from  "../../helpers/stringHelpers.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  type  {  TInventoryDatabaseDocument  }  from  "../../models/inventoryModels/inventoryModel.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  Loadout  }  from  "../../models/inventoryModels/loadoutModel.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  addMods ,  freeUpSlot ,  getInventory  }  from  "../../services/inventoryService.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  getAccountForRequest  }  from  "../../services/loginService.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  SRng  }  from  "../../services/rngService.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  type  {  IMongoDate ,  IOid  }  from  "../../types/commonTypes.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  type  {  IEquipmentClient  }  from  "../../types/equipmentTypes.ts" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-24 21:41:20 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								import  type  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IInnateDamageFingerprint , 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IInventoryClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    INemesisClient , 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IUpgradeClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    IWeaponSkinClient , 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-13 12:21:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    TEquipmentKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    TNemesisFaction 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-25 13:37:14 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								}  from  "../../types/inventoryTypes/inventoryTypes.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  InventorySlot ,  LoadoutIndex  }  from  "../../types/inventoryTypes/inventoryTypes.ts" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  {  logger  }  from  "../../utils/logger.ts" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-24 21:41:20 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								import  type  {  RequestHandler  }  from  "express" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-07-04 16:49:25 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								import  {  Types  }  from  "mongoose" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								export  const  nemesisController : RequestHandler  =  async  ( req ,  res )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    const  account  =  await  getAccountForRequest ( req ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ( req . query . mode  as  string )  ==  "f" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  body  =  getJSONfromString < IValenceFusionRequest > ( String ( req . body ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  inventory  =  await  getInventory ( account . _id . toString ( ) ,  body . Category  +  " WeaponBin" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  destWeapon  =  inventory [ body . Category ] . id ( body . DestWeapon . $oid ) ! ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  sourceWeapon  =  inventory [ body . Category ] . id ( body . SourceWeapon . $oid ) ! ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  destFingerprint  =  JSON . parse ( destWeapon . UpgradeFingerprint ! )  as  IInnateDamageFingerprint ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  sourceFingerprint  =  JSON . parse ( sourceWeapon . UpgradeFingerprint ! )  as  IInnateDamageFingerprint ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-03-30 13:50:59 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        // Update destination damage type if desired
 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( body . UseSourceDmgType )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            destFingerprint . buffs [ 0 ] . Tag  =  sourceFingerprint . buffs [ 0 ] . Tag ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Upgrade destination damage value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  destDamage  =  0.25  +  ( destFingerprint . buffs [ 0 ] . Value  /  0x3fffffff )  *  ( 0.6  -  0.25 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  sourceDamage  =  0.25  +  ( sourceFingerprint . buffs [ 0 ] . Value  /  0x3fffffff )  *  ( 0.6  -  0.25 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        let  newDamage  =  Math . max ( destDamage ,  sourceDamage )  *  1.1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-01 02:29:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( newDamage  >=  0.5794998 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            newDamage  =  0.6 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        destFingerprint . buffs [ 0 ] . Value  =  Math . trunc ( ( ( newDamage  -  0.25 )  /  ( 0.6  -  0.25 ) )  *  0x3fffffff ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Commit fingerprint
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        destWeapon . UpgradeFingerprint  =  JSON . stringify ( destFingerprint ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Remove source weapon
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        inventory [ body . Category ] . pull ( {  _id : body.SourceWeapon.$oid  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        freeUpSlot ( inventory ,  InventorySlot . WEAPONS ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        await  inventory . save ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        res . json ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            InventoryChanges :  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-30 13:50:59 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                [ body . Category ] :  [ destWeapon . toJSON ( ) ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                RemovedIdItems :  [ {  ItemId : body.SourceWeapon  } ] 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 07:30:16 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    }  else  if  ( ( req . query . mode  as  string )  ==  "p" )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  inventory  =  await  getInventory ( account . _id . toString ( ) ,  "Nemesis" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 07:30:16 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  body  =  getJSONfromString < INemesisPrespawnCheckRequest > ( String ( req . body ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  passcode  =  getNemesisPasscode ( inventory . Nemesis ! ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 07:30:16 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        let  guessResult  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( inventory . Nemesis ! . Faction  ==  "FC_INFESTATION" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            for  ( let  i  =  0 ;  i  !=  3 ;  ++ i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                if  ( body . guess [ i ]  ==  passcode [ 0 ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    guessResult  =  1  +  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            for  ( let  i  =  0 ;  i  !=  3 ;  ++ i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:16:50 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                if  ( body . guess [ i ]  ==  passcode [ i ]  ||  body . guess [ i ]  ==  GUESS_WILDCARD )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 07:30:16 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    ++ guessResult ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        res . json ( {  GuessResult : guessResult  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    }  else  if  ( req . query . mode  ==  "r" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  inventory  =  await  getInventory ( 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            account . _id . toString ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            "Nemesis LoadOutPresets CurrentLoadOutIds DataKnives Upgrades RawUpgrades" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  body  =  getJSONfromString < INemesisRequiemRequest > ( String ( req . body ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( inventory . Nemesis ! . Faction  ==  "FC_INFESTATION" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            const  guess : number [ ]  =  [ body . guess  &  0xf ,  ( body . guess  >>  4 )  &  0xf ,  ( body . guess  >>  8 )  &  0xf ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            const  passcode  =  getNemesisPasscode ( inventory . Nemesis ! ) [ 0 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            const  result1  =  passcode  ==  guess [ 0 ]  ?  GUESS_CORRECT  : GUESS_INCORRECT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            const  result2  =  passcode  ==  guess [ 1 ]  ?  GUESS_CORRECT  : GUESS_INCORRECT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            const  result3  =  passcode  ==  guess [ 2 ]  ?  GUESS_CORRECT  : GUESS_INCORRECT ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            inventory . Nemesis ! . GuessHistory . push ( 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                encodeNemesisGuess ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        symbol :  guess [ 0 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        result : result1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        symbol :  guess [ 1 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        result : result2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        symbol :  guess [ 2 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        result : result3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            // Increase antivirus if correct antivirus mod is installed
 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            const  response : IKnifeResponse  =  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( result1  ==  GUESS_CORRECT  ||  result2  ==  GUESS_CORRECT  ||  result3  ==  GUESS_CORRECT )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                let  antivirusGain  =  5 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                const  loadout  =  ( await  Loadout . findById ( inventory . LoadOutPresets ,  "DATAKNIFE" ) ) ! ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-23 12:56:41 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                const  dataknifeLoadout  =  loadout . DATAKNIFE . id ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    fromDbOid ( inventory . CurrentLoadOutIds [ LoadoutIndex . DATAKNIFE ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                const  dataknifeConfigIndex  =  dataknifeLoadout ? . s ? . mod  ? ?  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                const  dataknifeUpgrades  =  inventory . DataKnives [ 0 ] . Configs [ dataknifeConfigIndex ] . Upgrades ! ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                for  ( const  upgrade  of  body . knife ! . AttachedUpgrades )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    switch  ( upgrade . ItemType )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        case  "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndSpeedOnUseMod" : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        case  "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndWeaponDamageOnUseMod" : 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-17 05:02:34 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                        case  "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusSmallOnSingleUseMod" : 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                            antivirusGain  +=  10 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            consumeModCharge ( response ,  inventory ,  upgrade ,  dataknifeUpgrades ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        case  "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusLargeOnSingleUseMod" :  // Instant Secure
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        case  "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusOnUseMod" :  // Immuno Shield
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            antivirusGain  +=  15 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            consumeModCharge ( response ,  inventory ,  upgrade ,  dataknifeUpgrades ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                inventory . Nemesis ! . HenchmenKilled  +=  antivirusGain ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-17 05:02:34 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                if  ( inventory . Nemesis ! . HenchmenKilled  >=  100 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    inventory . Nemesis ! . HenchmenKilled  =  100 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-19 04:22:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    // Weaken nemesis now.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-17 05:02:34 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    inventory . Nemesis ! . InfNodes  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            Node : getNemesisManifest ( inventory . Nemesis ! . manifest ) . showdownNode , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            Influence : 1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    inventory . Nemesis ! . Weakened  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    const  upgrade  =  getKnifeUpgrade ( inventory ,  dataknifeUpgrades ,  antivirusMods [ passcode ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    consumeModCharge ( response ,  inventory ,  upgrade ,  dataknifeUpgrades ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-06-17 05:02:34 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( inventory . Nemesis ! . HenchmenKilled  <  100 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                inventory . Nemesis ! . InfNodes  =  getInfNodes ( getNemesisManifest ( inventory . Nemesis ! . manifest ) ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            await  inventory . save ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            res . json ( response ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            // For first guess, create a new entry.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( body . position  ==  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                inventory . Nemesis ! . GuessHistory . push ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    encodeNemesisGuess ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            symbol :  GUESS_NONE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            result : GUESS_NEUTRAL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            symbol :  GUESS_NONE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            result : GUESS_NEUTRAL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            symbol :  GUESS_NONE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            result : GUESS_NEUTRAL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            // Evaluate guess
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            const  correct  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                body . guess  ==  GUESS_WILDCARD  ||  getNemesisPasscode ( inventory . Nemesis ! ) [ body . position ]  ==  body . guess ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            // Update entry
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            const  guess  =  decodeNemesisGuess ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                inventory . Nemesis ! . GuessHistory [ inventory . Nemesis ! . GuessHistory . length  -  1 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            guess [ body . position ] . symbol  =  body . guess ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            guess [ body . position ] . result  =  correct  ?  GUESS_CORRECT  : GUESS_INCORRECT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            inventory . Nemesis ! . GuessHistory [ inventory . Nemesis ! . GuessHistory . length  -  1 ]  =  encodeNemesisGuess ( guess ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-06-18 05:39:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            const  response : INemesisRequiemResponse  =  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( correct )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                if  ( body . position  ==  2 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    // 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 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-23 14:55:48 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    // Subtract a charge from all requiem mods installed on parazon
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    const  loadout  =  ( await  Loadout . findById ( inventory . LoadOutPresets ,  "DATAKNIFE" ) ) ! ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    const  dataknifeLoadout  =  loadout . DATAKNIFE . id ( 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-23 12:56:41 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                        fromDbOid ( inventory . CurrentLoadOutIds [ LoadoutIndex . DATAKNIFE ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-23 14:55:48 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    const  dataknifeConfigIndex  =  dataknifeLoadout ? . s ? . mod  ? ?  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    const  dataknifeUpgrades  =  inventory . DataKnives [ 0 ] . Configs [ dataknifeConfigIndex ] . Upgrades ! ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    for  ( let  i  =  3 ;  i  !=  6 ;  ++ i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        //logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        const  upgrade  =  parseUpgrade ( inventory ,  dataknifeUpgrades [ i ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        consumeModCharge ( response ,  inventory ,  upgrade ,  dataknifeUpgrades ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-18 05:39:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                // Guess was incorrect, increase rank
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                response . RankIncrease  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                const  manifest  =  getNemesisManifest ( inventory . Nemesis ! . manifest ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                inventory . Nemesis ! . Rank  =  Math . min ( inventory . Nemesis ! . Rank  +  1 ,  manifest . systemIndexes . length  -  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                inventory . Nemesis ! . InfNodes  =  getInfNodes ( manifest ,  inventory . Nemesis ! . Rank ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 16:46:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            await  inventory . save ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-18 05:39:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            res . json ( response ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  else  if  ( ( req . query . mode  as  string )  ==  "rs" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // report spawn; POST but no application data in body
 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  inventory  =  await  getInventory ( account . _id . toString ( ) ,  "Nemesis" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        inventory . Nemesis ! . LastEnc  =  inventory . Nemesis ! . MissionCount ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        await  inventory . save ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        res . json ( {  LastEnc : inventory.Nemesis ! . LastEnc  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    }  else  if  ( ( req . query . mode  as  string )  ==  "s" )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  inventory  =  await  getInventory ( account . _id . toString ( ) ,  "Nemesis" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:17:05 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( inventory . Nemesis )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            logger . warn ( ` overwriting an existing nemesis as a new one is being requested ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        const  body  =  getJSONfromString < INemesisStartRequest > ( String ( req . body ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:15 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        body . target . fp  =  BigInt ( body . target . fp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  manifest  =  getNemesisManifest ( body . target . manifest ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-06 08:59:22 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( account . BuildLabel  &&  version_compare ( account . BuildLabel ,  manifest . minBuild )  <  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            logger . warn ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                ` client on version  ${ account . BuildLabel }  provided nemesis manifest  ${ body . target . manifest }  which was expected to require  ${ manifest . minBuild }  or above. please file a bug report. ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:15 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        let  weaponIdx  =  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 06:08:00 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( body . target . Faction  !=  "FC_INFESTATION" )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            const  weapons : readonly  string [ ]  =  manifest . weapons ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:15 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            const  initialWeaponIdx  =  new  SRng ( body . target . fp ) . randomInt ( 0 ,  weapons . length  -  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            weaponIdx  =  initialWeaponIdx ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:17:05 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( body . target . DisallowedWeapons )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                do  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    const  weapon  =  weapons [ weaponIdx ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( body . target . DisallowedWeapons . indexOf ( weapon )  ==  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    weaponIdx  =  ( weaponIdx  +  1 )  %  weapons . length ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                }  while  ( weaponIdx  !=  initialWeaponIdx ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        inventory . Nemesis  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            fp : body.target.fp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            manifest : body.target.manifest , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            KillingSuit : body.target.KillingSuit , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            killingDamageType : body.target.killingDamageType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ShoulderHelmet : body.target.ShoulderHelmet , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            WeaponIdx : weaponIdx , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            AgentIdx : body.target.AgentIdx , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            BirthNode : body.target.BirthNode , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            Faction : body.target.Faction , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            Rank : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            k : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            Traded : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            d : new  Date ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-17 23:29:23 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            InfNodes : getInfNodes ( manifest ,  0 ) , 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            GuessHistory :  [ ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            Hints :  [ ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            HintProgress : 0 , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:17:05 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            Weakened : false , 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            PrevOwners : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            HenchmenKilled : 0 , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:17:05 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            SecondInCommand : false , 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 06:08:00 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            MissionCount : 0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            LastEnc : 0 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        await  inventory . save ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        res . json ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            target : inventory.toJSON ( ) . Nemesis 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    }  else  if  ( ( req . query . mode  as  string )  ==  "w" )  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-19 04:22:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  inventory  =  await  getInventory ( account . _id . toString ( ) ,  "Nemesis" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        //const body = getJSONfromString<INemesisWeakenRequest>(String(req.body));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-06-19 04:22:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        // As of 38.6.0, this request is no longer sent, instead mode=r already weakens the nemesis if appropriate.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // We always weaken the nemesis in mode=r so simply giving the client back the nemesis.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-06-18 05:39:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  response : INemesisWeakenResponse  =  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            target : inventory.toJSON < IInventoryClient > ( ) . Nemesis ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        res . json ( response ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        logger . debug ( ` data provided to  ${ req . path } :  ${ String ( req . body ) } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        throw  new  Error ( ` unknown nemesis mode:  ${ String ( req . query . mode ) } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								interface  IValenceFusionRequest  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    DestWeapon : IOid ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SourceWeapon : IOid ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Category : TEquipmentKey ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    UseSourceDmgType : boolean ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								interface  INemesisStartRequest  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    target :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        fp : number  |  bigint ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        manifest : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        KillingSuit : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        killingDamageType : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ShoulderHelmet : string ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-07 02:17:05 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        DisallowedWeapons? : string [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        WeaponIdx : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        AgentIdx : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        BirthNode : string ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-05-13 12:21:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Faction : TNemesisFaction ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        Rank : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        k : boolean ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Traded : boolean ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        d : IMongoDate ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        InfNodes :  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        GuessHistory :  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Hints :  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        HintProgress : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Weakened : boolean ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        PrevOwners : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        HenchmenKilled : number ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 15:27:15 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        MissionCount? : number ;  // Added in 38.5.0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        LastEnc? : number ;  // Added in 38.5.0
 
							 
						 
					
						
							
								
									
										
										
										
											2025-03-20 05:36:09 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        SecondInCommand : boolean ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-03-22 07:30:16 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								interface  INemesisPrespawnCheckRequest  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    guess : number [ ] ;  // .length == 3
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    potency? : number [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								interface  INemesisRequiemRequest  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    guess : number ;  // grn/crp: 4 bits | coda: 3x 4 bits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    position : number ;  // grn/crp: 0-2 | coda: 0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // knife field provided for coda only
 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    knife? : IKnife ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-06-18 05:39:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								interface  INemesisRequiemResponse  extends  IKnifeResponse  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    RankIncrease? : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// interface INemesisWeakenRequest {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//     target: INemesisClient;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//     knife: IKnife;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-06-18 05:39:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								interface  INemesisWeakenResponse  extends  IKnifeResponse  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    target : INemesisClient ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-04-28 13:59:54 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								interface  IKnife  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Item : IEquipmentClient ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Skins : IWeaponSkinClient [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ModSlot : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    CustSlot : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    AttachedUpgrades : IUpgradeClient [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    HiddenWhenHolstered : boolean ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-04-13 05:50:51 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2025-07-04 16:49:25 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								const  consumeModCharge  =  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    response : IKnifeResponse , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    inventory : TInventoryDatabaseDocument , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    upgrade :  {  ItemId : IOid ;  ItemType : string  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    dataknifeUpgrades : string [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								) :  void  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    response . UpgradeIds  ? ? =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    response . UpgradeTypes  ? ? =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    response . UpgradeFingerprints  ? ? =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    response . UpgradeNew  ? ? =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    response . HasKnife  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( upgrade . ItemId . $oid  !=  "000000000000000000000000" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  dbUpgrade  =  inventory . Upgrades . id ( upgrade . ItemId . $oid ) ! ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  fingerprint  =  JSON . parse ( dbUpgrade . UpgradeFingerprint ! )  as  {  lvl : number  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        fingerprint . lvl  +=  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        dbUpgrade . UpgradeFingerprint  =  JSON . stringify ( fingerprint ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeIds . push ( upgrade . ItemId . $oid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeTypes . push ( upgrade . ItemType ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeFingerprints . push ( fingerprint ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeNew . push ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  id  =  new  Types . ObjectId ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        inventory . Upgrades . push ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            _id : id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ItemType : upgrade.ItemType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            UpgradeFingerprint :  ` {"lvl":1} ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        addMods ( inventory ,  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                ItemType : upgrade.ItemType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                ItemCount :  - 1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  dataknifeRawUpgradeIndex  =  dataknifeUpgrades . indexOf ( upgrade . ItemType ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( dataknifeRawUpgradeIndex  !=  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            dataknifeUpgrades [ dataknifeRawUpgradeIndex ]  =  id . toString ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            logger . warn ( ` ${ upgrade . ItemType }  not found in dataknife config ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeIds . push ( id . toString ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeTypes . push ( upgrade . ItemType ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeFingerprints . push ( {  lvl : 1  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        response . UpgradeNew . push ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} ;