forked from OpenWF/SpaceNinjaServer
		
	Closes #1676 Reviewed-on: OpenWF/SpaceNinjaServer#1686 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
		
			
				
	
	
		
			80 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
    addCrewShipSalvagedWeaponSkin,
 | 
						|
    addCrewShipRawSalvage,
 | 
						|
    getInventory,
 | 
						|
    addEquipment
 | 
						|
} from "@/src/services/inventoryService";
 | 
						|
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
						|
import { RequestHandler } from "express";
 | 
						|
import { ICrewShipComponentFingerprint, IInnateDamageFingerprint } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
						|
import { ExportCustoms, ExportRailjackWeapons, ExportUpgrades } from "warframe-public-export-plus";
 | 
						|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
						|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
						|
import { getRandomInt } from "@/src/services/rngService";
 | 
						|
import { IFingerprintStat } from "@/src/helpers/rivenHelper";
 | 
						|
 | 
						|
export const crewShipIdentifySalvageController: RequestHandler = async (req, res) => {
 | 
						|
    const accountId = await getAccountIdForRequest(req);
 | 
						|
    const inventory = await getInventory(
 | 
						|
        accountId,
 | 
						|
        "CrewShipSalvagedWeaponSkins CrewShipSalvagedWeapons CrewShipRawSalvage"
 | 
						|
    );
 | 
						|
    const payload = getJSONfromString<ICrewShipIdentifySalvageRequest>(String(req.body));
 | 
						|
 | 
						|
    const inventoryChanges: IInventoryChanges = {};
 | 
						|
    if (payload.ItemType in ExportCustoms) {
 | 
						|
        const meta = ExportCustoms[payload.ItemType];
 | 
						|
        let upgradeFingerprint: ICrewShipComponentFingerprint = { compat: payload.ItemType, buffs: [] };
 | 
						|
        if (meta.subroutines) {
 | 
						|
            upgradeFingerprint = {
 | 
						|
                SubroutineIndex: getRandomInt(0, meta.subroutines.length - 1),
 | 
						|
                ...upgradeFingerprint
 | 
						|
            };
 | 
						|
        }
 | 
						|
        for (const upgrade of meta.randomisedUpgrades!) {
 | 
						|
            upgradeFingerprint.buffs.push({ Tag: upgrade.tag, Value: Math.trunc(Math.random() * 0x40000000) });
 | 
						|
        }
 | 
						|
        addCrewShipSalvagedWeaponSkin(
 | 
						|
            inventory,
 | 
						|
            payload.ItemType,
 | 
						|
            JSON.stringify(upgradeFingerprint),
 | 
						|
            inventoryChanges
 | 
						|
        );
 | 
						|
    } else {
 | 
						|
        const meta = ExportRailjackWeapons[payload.ItemType];
 | 
						|
        const upgradeType = meta.defaultUpgrades![0].ItemType;
 | 
						|
        const upgradeMeta = ExportUpgrades[upgradeType];
 | 
						|
        const buffs: IFingerprintStat[] = [];
 | 
						|
        for (const buff of upgradeMeta.upgradeEntries!) {
 | 
						|
            buffs.push({
 | 
						|
                Tag: buff.tag,
 | 
						|
                Value: Math.trunc(Math.random() * 0x40000000)
 | 
						|
            });
 | 
						|
        }
 | 
						|
        addEquipment(inventory, "CrewShipSalvagedWeapons", payload.ItemType, undefined, inventoryChanges, {
 | 
						|
            UpgradeType: upgradeType,
 | 
						|
            UpgradeFingerprint: JSON.stringify({
 | 
						|
                compat: payload.ItemType,
 | 
						|
                buffs
 | 
						|
            } satisfies IInnateDamageFingerprint)
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    inventoryChanges.CrewShipRawSalvage = [
 | 
						|
        {
 | 
						|
            ItemType: payload.ItemType,
 | 
						|
            ItemCount: -1
 | 
						|
        }
 | 
						|
    ];
 | 
						|
    addCrewShipRawSalvage(inventory, inventoryChanges.CrewShipRawSalvage);
 | 
						|
 | 
						|
    await inventory.save();
 | 
						|
    res.json({
 | 
						|
        InventoryChanges: inventoryChanges
 | 
						|
    });
 | 
						|
};
 | 
						|
 | 
						|
interface ICrewShipIdentifySalvageRequest {
 | 
						|
    ItemType: string;
 | 
						|
}
 |