Skip to content

Commit

Permalink
Add skirmish mode to cheapestfffe
Browse files Browse the repository at this point in the history
  • Loading branch information
Nathaniel Moschkin committed Jan 20, 2024
1 parent 579a9e8 commit 4f3d160
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
33 changes: 27 additions & 6 deletions src/commands/cheapestfffe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ function bonusName(bonus: string) {

async function asyncHandler(
message: Message,
fuse?: number
fuse?: number,
skirmish?: boolean
) {
// This is just to break up the flow and make sure any exceptions end up in the .catch, not thrown during yargs command execution
await new Promise<void>(resolve => setImmediate(() => resolve()));
Expand All @@ -38,7 +39,7 @@ async function asyncHandler(
let candidatesForImmortalisation = profileCrew.filter((c: any) => {
if (c.level >= 90) {
if (c.equipment.length === 4) return false;
let needed = getNeededItems(c.symbol, 90, c.level);
let needed = getNeededItems(c.symbol, 90, c.level, skirmish);
if (!needed) {
return false;
}
Expand Down Expand Up @@ -71,7 +72,7 @@ async function asyncHandler(
});

candidatesForImmortalisation = candidatesForImmortalisation.map((c: any) => {
let needed = c.level >= 90 ? getNeededItems(c.symbol, 90, c.level) : getNeededItems(c.symbol, c.level);
let needed = c.level >= 90 ? getNeededItems(c.symbol, 90, c.level, skirmish) : getNeededItems(c.symbol, c.level, undefined, skirmish);
if (!needed) {
return c;
}
Expand Down Expand Up @@ -172,7 +173,7 @@ async function asyncHandler(

class CheapestFFFE implements Definitions.Command {
name = 'cheapestfffe';
command = 'cheapestfffe [fuseneed]';
command = 'cheapestfffe [fuseneed] [skirmish]';
aliases = [];
describe = 'Shows FF crew on your roster who are cheapest to FE';
options = [{
Expand All @@ -188,18 +189,38 @@ class CheapestFFFE implements Definitions.Command {
{ name: '4', value: 4 },
{ name: '5', value: 5 },
]
},
{
name: 'skirmish',
type: ApplicationCommandOptionType.Boolean,
description: 'optimize for skirmish (ship battles and faction missions, only)',
required: false,
default: false
}]
builder(yp: yargs.Argv): yargs.Argv {
return yp.option('fuseneed', {
alias: 'f',
desc: 'show crew with the specified needed fuses'
desc: 'show crew with the specified needed fuses',
type: 'number'
}).option('skirmish', {
alias: 's',
desc: 'optimize for skirmish (ship battles and faction missions, only)',
type: 'boolean'
});
}

handler(args: yargs.Arguments) {
let message = <Message>args.message;
let fuse = args.fuseneed as number;
args.promisedResult = asyncHandler(message, fuse);
let skirmish = false;
if (typeof args.skirmish === 'string') {
skirmish = args.skirmish.trim().toLowerCase() === 'true';
}
else if (typeof args.skirmish === 'boolean') {
skirmish = args.skirmish;
}

args.promisedResult = asyncHandler(message, fuse, skirmish);
}
}

Expand Down
14 changes: 7 additions & 7 deletions src/utils/equipment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ export interface IDemand {
avgChronCost: number;
}

function bestChronCost(item: Definitions.Item) {
function bestChronCost(item: Definitions.Item, skirmish?: boolean) {
let bestCost = 0;

if (!item.factionOnly) {
let bestMissions = item.item_sources.filter((s) => s.avg_cost && s.avg_cost >= 1).sort((a, b) => (a.avg_cost || 9999) - (b.avg_cost || 9999));
let bestMissions = item.item_sources.filter((s) => (!skirmish || s.type !== 0) && s.avg_cost && s.avg_cost >= 1).sort((a, b) => (a.avg_cost || 9999) - (b.avg_cost || 9999));
if (bestMissions.length > 0) {
bestCost = bestMissions[0].avg_cost || 0;
}
Expand All @@ -23,7 +23,7 @@ function bestChronCost(item: Definitions.Item) {
}


export function demandsPerSlot(es: any, items: Definitions.Item[], dupeChecker: Set<string>, demands: IDemand[]): number {
export function demandsPerSlot(es: any, items: Definitions.Item[], dupeChecker: Set<string>, demands: IDemand[], skirmish?: boolean): number {
let equipment = items.find((item) => item.symbol === es.symbol);
if (!equipment) {
return 0;
Expand All @@ -40,7 +40,7 @@ export function demandsPerSlot(es: any, items: Definitions.Item[], dupeChecker:
symbol: equipment.symbol,
equipment: equipment,
factionOnly: equipment.factionOnly,
avgChronCost: bestChronCost(equipment),
avgChronCost: bestChronCost(equipment, skirmish),
});
}

Expand Down Expand Up @@ -69,14 +69,14 @@ export function demandsPerSlot(es: any, items: Definitions.Item[], dupeChecker:
symbol: iter.symbol,
equipment: recipeEquipment,
factionOnly: iter.factionOnly,
avgChronCost: bestChronCost(recipeEquipment),
avgChronCost: bestChronCost(recipeEquipment, skirmish),
});
}

return equipment.recipe.craftCost;
}

export function getNeededItems(crew_symbol: string, min_level: number, max_level: number = 100) {
export function getNeededItems(crew_symbol: string, min_level: number, max_level: number = 100, skirmish?: boolean) {
let crew = DCData.getBotCrew().find((c) => c.symbol === crew_symbol);

if (!crew) {
Expand All @@ -92,7 +92,7 @@ export function getNeededItems(crew_symbol: string, min_level: number, max_level
crew.equipment_slots
.filter((es: any) => es.level >= min_level && es.level <= max_level)
.forEach((es: any) => {
craftCost += demandsPerSlot(es, DCData.getItems(), dupeChecker, demands);
craftCost += demandsPerSlot(es, DCData.getItems(), dupeChecker, demands, skirmish);
});

demands = demands.sort((a, b) => b.count - a.count);
Expand Down

0 comments on commit 4f3d160

Please sign in to comment.