Update guess encoding APIs to be more structured

This commit is contained in:
Sainan 2025-06-07 11:48:40 +02:00
parent 65387ccdea
commit 63e337de52
2 changed files with 45 additions and 20 deletions

View File

@ -8,7 +8,8 @@ import {
getNemesisPasscode, getNemesisPasscode,
getNemesisPasscodeModTypes, getNemesisPasscodeModTypes,
GUESS_WILDCARD, GUESS_WILDCARD,
IKnifeResponse IKnifeResponse,
NemesisGuess
} from "@/src/helpers/nemesisHelpers"; } from "@/src/helpers/nemesisHelpers";
import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { Loadout } from "@/src/models/inventoryModels/loadoutModel"; import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
@ -98,13 +99,24 @@ export const nemesisController: RequestHandler = async (req, res) => {
if (inventory.Nemesis!.Faction == "FC_INFESTATION") { if (inventory.Nemesis!.Faction == "FC_INFESTATION") {
const guess: number[] = [body.guess & 0xf, (body.guess >> 4) & 0xf, (body.guess >> 8) & 0xf]; const guess: number[] = [body.guess & 0xf, (body.guess >> 4) & 0xf, (body.guess >> 8) & 0xf];
const passcode = getNemesisPasscode(inventory.Nemesis!)[0]; const passcode = getNemesisPasscode(inventory.Nemesis!)[0];
// Add to GuessHistory
const result1 = passcode == guess[0] ? 0 : 1; const result1 = passcode == guess[0] ? 0 : 1;
const result2 = passcode == guess[1] ? 0 : 1; const result2 = passcode == guess[1] ? 0 : 1;
const result3 = passcode == guess[2] ? 0 : 1; const result3 = passcode == guess[2] ? 0 : 1;
inventory.Nemesis!.GuessHistory.push( inventory.Nemesis!.GuessHistory.push(
encodeNemesisGuess(guess[0], result1, guess[1], result2, guess[2], result3) encodeNemesisGuess([
{
symbol: guess[0],
result: result1
},
{
symbol: guess[1],
result: result2
},
{
symbol: guess[2],
result: result3
}
])
); );
// Increase antivirus if correct antivirus mod is installed // Increase antivirus if correct antivirus mod is installed

View File

@ -269,26 +269,39 @@ export const getNemesisPasscodeModTypes = (nemesis: { fp: bigint; Faction: TNeme
export const GUESS_NONE = 8; export const GUESS_NONE = 8;
export const GUESS_WILDCARD = 9; export const GUESS_WILDCARD = 9;
export const encodeNemesisGuess = ( interface NemesisPositionGuess {
symbol1: number, symbol: number;
result1: number, result: number;
symbol2: number, }
result2: number,
symbol3: number, export type NemesisGuess = [NemesisPositionGuess, NemesisPositionGuess, NemesisPositionGuess];
result3: number
): number => { export const encodeNemesisGuess = (guess: NemesisGuess): number => {
return ( return (
(symbol1 & 0xf) | (guess[0].symbol & 0xf) |
((result1 & 3) << 12) | ((guess[0].result & 3) << 12) |
((symbol2 << 4) & 0xff) | ((guess[1].symbol << 4) & 0xff) |
((result2 << 14) & 0xffff) | ((guess[1].result << 14) & 0xffff) |
((symbol3 & 0xf) << 8) | ((guess[2].symbol & 0xf) << 8) |
((result3 & 3) << 16) ((guess[2].result & 3) << 16)
); );
}; };
export const decodeNemesisGuess = (val: number): number[] => { export const decodeNemesisGuess = (val: number): NemesisGuess => {
return [val & 0xf, (val >> 12) & 3, (val & 0xff) >> 4, (val & 0xffff) >> 14, (val >> 8) & 0xf, (val >> 16) & 3]; return [
{
symbol: val & 0xf,
result: (val >> 12) & 3
},
{
symbol: (val & 0xff) >> 4,
result: (val & 0xffff) >> 14
},
{
symbol: (val >> 8) & 0xf,
result: (val >> 16) & 3
}
];
}; };
export interface IKnifeResponse { export interface IKnifeResponse {