mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-05-01 05:07:01 -05:00
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
export const Conditions: {[k: string]: ModdedConditionData} = {
|
|
choicelock: {
|
|
inherit: true,
|
|
onBeforeMove(pokemon, target, move) {
|
|
const choiceItem = pokemon.getItem().isChoice ||
|
|
Object.keys(pokemon.volatiles).some(v => (
|
|
v.startsWith('item:') && this.dex.items.get(v.split(':')[1]).isChoice
|
|
));
|
|
if (!choiceItem) {
|
|
pokemon.removeVolatile('choicelock');
|
|
return;
|
|
}
|
|
if (
|
|
!pokemon.ignoringItem() && !pokemon.volatiles['dynamax'] &&
|
|
move.id !== this.effectState.move && move.id !== 'struggle'
|
|
) {
|
|
// Fails unless the Choice item is being ignored, and no PP is lost
|
|
this.addMove('move', pokemon, move.name);
|
|
this.attrLastMove('[still]');
|
|
this.debug("Disabled by Choice item lock");
|
|
this.add('-fail', pokemon);
|
|
return false;
|
|
}
|
|
},
|
|
onDisableMove(pokemon) {
|
|
const choiceItem = pokemon.getItem().isChoice ||
|
|
Object.keys(pokemon.volatiles).some(v => (
|
|
v.startsWith('item:') && this.dex.items.get(v.split(':')[1]).isChoice
|
|
));
|
|
if (!choiceItem || !pokemon.hasMove(this.effectState.move)) {
|
|
pokemon.removeVolatile('choicelock');
|
|
return;
|
|
}
|
|
if (pokemon.ignoringItem() || pokemon.volatiles['dynamax']) {
|
|
return;
|
|
}
|
|
for (const moveSlot of pokemon.moveSlots) {
|
|
if (moveSlot.id !== this.effectState.move) {
|
|
pokemon.disableMove(moveSlot.id, false, this.effectState.sourceEffect);
|
|
}
|
|
}
|
|
},
|
|
},
|
|
};
|