[Bug] [Beta] Prevent crash when attempting to select a move not in the user's moveset (#6313)

* Prevent crash when attempting to select a move not in the user's moveset

* Fix typo in tsdoc

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
This commit is contained in:
Sirz Benjie 2025-08-20 20:18:35 -05:00 committed by GitHub
parent f34be91891
commit 65799ef80c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -20,6 +20,7 @@ import { UiMode } from "#enums/ui-mode";
import type { PlayerPokemon } from "#field/pokemon";
import type { MoveTargetSet } from "#moves/move";
import { getMoveTargets } from "#moves/move-utils";
import type { PokemonMove } from "#moves/pokemon-move";
import { FieldPhase } from "#phases/field-phase";
import type { TurnMove } from "#types/turn-move";
import { applyChallenges } from "#utils/challenge-utils";
@ -207,10 +208,9 @@ export class CommandPhase extends FieldPhase {
* Submethod of {@linkcode handleFightCommand} responsible for queuing the appropriate
* error message when a move cannot be used.
* @param user - The pokemon using the move
* @param cursor - The index of the move in the moveset
* @param move - The move that cannot be used
*/
private queueFightErrorMessage(user: PlayerPokemon, cursor: number) {
const move = user.getMoveset()[cursor];
private queueFightErrorMessage(user: PlayerPokemon, move: PokemonMove) {
globalScene.ui.setMode(UiMode.MESSAGE);
// Set the translation key for why the move cannot be selected
@ -277,15 +277,19 @@ export class CommandPhase extends FieldPhase {
let canUse = cursor === -1 || playerPokemon.trySelectMove(cursor, ignorePP);
const moveset = playerPokemon.getMoveset();
// Ternary here ensures we don't compute struggle conditions unless necessary
const useStruggle = canUse
? false
: cursor > -1 && !playerPokemon.getMoveset().some(m => m.isUsable(playerPokemon));
const useStruggle = canUse ? false : cursor > -1 && !moveset.some(m => m.isUsable(playerPokemon));
canUse ||= useStruggle;
if (!canUse) {
this.queueFightErrorMessage(playerPokemon, cursor);
// Selected move *may* be undefined if the cursor is over a position that the mon does not have
const selectedMove: PokemonMove | undefined = moveset[cursor];
if (selectedMove) {
this.queueFightErrorMessage(playerPokemon, moveset[cursor]);
}
return false;
}