mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-03 23:12:20 +02:00
Fixes bug with metronome/copycat/assist/sleep talk targeting ally
This commit is contained in:
parent
b854a37e05
commit
1e64ef0c90
@ -5280,6 +5280,29 @@ export class FirstMoveTypeAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function callMove(user: Pokemon, target: Pokemon, moveId: number): Promise<boolean> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
// replaces MoveTarget.NEAR_OTHER with MoveTarget.NEAR_ENEMY to prevent ally being targetted
|
||||||
|
const replaceMoveTarget = allMoves[moveId].moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined;
|
||||||
|
const moveTargets = getMoveTargets(user, moveId, replaceMoveTarget);
|
||||||
|
if (moveTargets.targets.length === 0) {
|
||||||
|
resolve(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const targets = moveTargets.multiple || moveTargets.targets.length === 1
|
||||||
|
? moveTargets.targets
|
||||||
|
: moveTargets.targets.indexOf(target.getBattlerIndex()) > -1
|
||||||
|
? [ target.getBattlerIndex() ]
|
||||||
|
: [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ];
|
||||||
|
user.getMoveQueue().push({ move: moveId, targets: targets, ignorePP: true });
|
||||||
|
user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, new PokemonMove(moveId, 0, 0, true), true));
|
||||||
|
initMoveAnim(user.scene, moveId).then(() => {
|
||||||
|
loadMoveAnimAssets(user.scene, [ moveId ], true)
|
||||||
|
.then(() => resolve(true));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attribute used to call a random move
|
* Attribute used to call a random move
|
||||||
* Used for {@linkcode Moves.METRONOME}
|
* Used for {@linkcode Moves.METRONOME}
|
||||||
@ -5305,28 +5328,7 @@ export class RandomMoveAttr extends OverrideMoveEffectAttr {
|
|||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||||
const moveIds = Utils.getEnumValues(Moves).filter(m => !this.invalidMoves.includes(m) && !allMoves[m].name.endsWith(" (N)"));
|
const moveIds = Utils.getEnumValues(Moves).filter(m => !this.invalidMoves.includes(m) && !allMoves[m].name.endsWith(" (N)"));
|
||||||
const moveId = moveIds[user.randSeedInt(moveIds.length)];
|
const moveId = moveIds[user.randSeedInt(moveIds.length)];
|
||||||
return this.callMove(user, target, moveId);
|
return callMove(user, target, moveId);
|
||||||
}
|
|
||||||
|
|
||||||
callMove(user: Pokemon, target: Pokemon, moveId: number): Promise<boolean> {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
const moveTargets = getMoveTargets(user, moveId);
|
|
||||||
if (moveTargets.targets.length === 0) {
|
|
||||||
resolve(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const targets = moveTargets.multiple || moveTargets.targets.length === 1
|
|
||||||
? moveTargets.targets
|
|
||||||
: moveTargets.targets.indexOf(target.getBattlerIndex()) > -1
|
|
||||||
? [ target.getBattlerIndex() ]
|
|
||||||
: [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ];
|
|
||||||
user.getMoveQueue().push({ move: moveId, targets: targets, ignorePP: true });
|
|
||||||
user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, new PokemonMove(moveId, 0, 0, true), true));
|
|
||||||
initMoveAnim(user.scene, moveId).then(() => {
|
|
||||||
loadMoveAnimAssets(user.scene, [ moveId ], true)
|
|
||||||
.then(() => resolve(true));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5355,7 +5357,7 @@ export class RandomMovesetMoveAttr extends RandomMoveAttr {
|
|||||||
* @returns {Promise<boolean>}
|
* @returns {Promise<boolean>}
|
||||||
*/
|
*/
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||||
return this.callMove(user, target, this.moveId);
|
return callMove(user, target, this.moveId);
|
||||||
}
|
}
|
||||||
|
|
||||||
getCondition(): MoveConditionFunc {
|
getCondition(): MoveConditionFunc {
|
||||||
@ -5769,24 +5771,9 @@ const lastMoveCopiableCondition: MoveConditionFunc = (user, target, move) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export class CopyMoveAttr extends OverrideMoveEffectAttr {
|
export class CopyMoveAttr extends OverrideMoveEffectAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||||
const lastMove = user.scene.currentBattle.lastMove;
|
const lastMove = user.scene.currentBattle.lastMove;
|
||||||
|
return callMove(user, target, lastMove);
|
||||||
const moveTargets = getMoveTargets(user, lastMove);
|
|
||||||
if (!moveTargets.targets.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const targets = moveTargets.multiple || moveTargets.targets.length === 1
|
|
||||||
? moveTargets.targets
|
|
||||||
: moveTargets.targets.indexOf(target.getBattlerIndex()) > -1
|
|
||||||
? [ target.getBattlerIndex() ]
|
|
||||||
: [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ];
|
|
||||||
user.getMoveQueue().push({ move: lastMove, targets: targets, ignorePP: true });
|
|
||||||
|
|
||||||
user.scene.unshiftPhase(new MovePhase(user.scene, user as PlayerPokemon, targets, new PokemonMove(lastMove, 0, 0, true), true));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getCondition(): MoveConditionFunc {
|
getCondition(): MoveConditionFunc {
|
||||||
@ -6509,11 +6496,14 @@ export type MoveTargetSet = {
|
|||||||
multiple: boolean;
|
multiple: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet {
|
export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet {
|
||||||
const variableTarget = new Utils.NumberHolder(0);
|
const variableTarget = new Utils.NumberHolder(0);
|
||||||
user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget));
|
user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget));
|
||||||
|
|
||||||
const moveTarget = allMoves[move].hasAttr(VariableTargetAttr) ? variableTarget.value : move ? allMoves[move].moveTarget : move === undefined ? MoveTarget.NEAR_ENEMY : [];
|
const moveTarget = allMoves[move].hasAttr(VariableTargetAttr) ? variableTarget.value :
|
||||||
|
replaceTarget !== undefined ? replaceTarget :
|
||||||
|
move ? allMoves[move].moveTarget :
|
||||||
|
move === undefined ? MoveTarget.NEAR_ENEMY : [];
|
||||||
const opponents = user.getOpponents();
|
const opponents = user.getOpponents();
|
||||||
|
|
||||||
let set: Pokemon[] = [];
|
let set: Pokemon[] = [];
|
||||||
|
Loading…
Reference in New Issue
Block a user