mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-05-23 16:26:15 -05:00
AAA: Let event Pokemon change their ability (#3947)
This commit is contained in:
parent
a76a462cd1
commit
3766498e28
|
|
@ -16,6 +16,7 @@ class Validator {
|
|||
constructor(format) {
|
||||
this.format = Dex.getFormat(format);
|
||||
this.dex = Dex.forFormat(this.format);
|
||||
this.ruleTable = this.dex.getRuleTable(this.format);
|
||||
}
|
||||
|
||||
validateTeam(team, removeNicknames) {
|
||||
|
|
@ -35,7 +36,7 @@ class Validator {
|
|||
let dex = this.dex;
|
||||
|
||||
let problems = [];
|
||||
const ruleTable = dex.getRuleTable(format);
|
||||
const ruleTable = this.ruleTable;
|
||||
if (format.team) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -138,7 +139,7 @@ class Validator {
|
|||
let lsetData = {set:set, format:format};
|
||||
|
||||
let setHas = {};
|
||||
const ruleTable = dex.getRuleTable(format);
|
||||
const ruleTable = this.ruleTable;
|
||||
|
||||
for (const [rule] of ruleTable) {
|
||||
let subformat = dex.getFormat(rule);
|
||||
|
|
@ -731,36 +732,40 @@ class Validator {
|
|||
problems.push(`${name} can only use Hidden Power Dark/Dragon/Electric/Steel/Ice because it must have at least 5 perfect IVs${etc}.`);
|
||||
}
|
||||
}
|
||||
if (dex.gen <= 5 && eventData.abilities && eventData.abilities.length === 1 && !eventData.isHidden) {
|
||||
if (template.species === eventTemplate.species) {
|
||||
// has not evolved, abilities must match
|
||||
const requiredAbility = dex.getAbility(eventData.abilities[0]).name;
|
||||
if (set.ability !== requiredAbility) {
|
||||
if (fastReturn) return true;
|
||||
problems.push(`${name} must have ${requiredAbility}${etc}.`);
|
||||
}
|
||||
} else {
|
||||
// has evolved
|
||||
let ability1 = dex.getAbility(eventTemplate.abilities['1']);
|
||||
if (ability1.gen && eventData.generation >= ability1.gen) {
|
||||
// pokemon had 2 available abilities in the gen the event happened
|
||||
// ability is restricted to a single ability slot
|
||||
const requiredAbilitySlot = (toId(eventData.abilities[0]) === ability1.id ? 1 : 0);
|
||||
const requiredAbility = dex.getAbility(template.abilities[requiredAbilitySlot] || template.abilities['0']).name;
|
||||
// Event-related ability restrictions only matter if we care about illegal abilities
|
||||
const ruleTable = this.ruleTable;
|
||||
if (!ruleTable.has('ignoreillegalabilities')) {
|
||||
if (dex.gen <= 5 && eventData.abilities && eventData.abilities.length === 1 && !eventData.isHidden) {
|
||||
if (template.species === eventTemplate.species) {
|
||||
// has not evolved, abilities must match
|
||||
const requiredAbility = dex.getAbility(eventData.abilities[0]).name;
|
||||
if (set.ability !== requiredAbility) {
|
||||
const originalAbility = dex.getAbility(eventData.abilities[0]).name;
|
||||
if (fastReturn) return true;
|
||||
problems.push(`${name} must have ${requiredAbility}${because} from a ${originalAbility} ${eventTemplate.species} event.`);
|
||||
problems.push(`${name} must have ${requiredAbility}${etc}.`);
|
||||
}
|
||||
} else {
|
||||
// has evolved
|
||||
let ability1 = dex.getAbility(eventTemplate.abilities['1']);
|
||||
if (ability1.gen && eventData.generation >= ability1.gen) {
|
||||
// pokemon had 2 available abilities in the gen the event happened
|
||||
// ability is restricted to a single ability slot
|
||||
const requiredAbilitySlot = (toId(eventData.abilities[0]) === ability1.id ? 1 : 0);
|
||||
const requiredAbility = dex.getAbility(template.abilities[requiredAbilitySlot] || template.abilities['0']).name;
|
||||
if (set.ability !== requiredAbility) {
|
||||
const originalAbility = dex.getAbility(eventData.abilities[0]).name;
|
||||
if (fastReturn) return true;
|
||||
problems.push(`${name} must have ${requiredAbility}${because} from a ${originalAbility} ${eventTemplate.species} event.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (eventData.isHidden !== undefined && template.abilities['H']) {
|
||||
const isHidden = (set.ability === template.abilities['H']);
|
||||
if (eventData.isHidden !== undefined && template.abilities['H']) {
|
||||
const isHidden = (set.ability === template.abilities['H']);
|
||||
|
||||
if (isHidden !== eventData.isHidden) {
|
||||
if (fastReturn) return true;
|
||||
problems.push(`${name} must ${eventData.isHidden ? 'have' : 'not have'} its Hidden Ability${etc}.`);
|
||||
if (isHidden !== eventData.isHidden) {
|
||||
if (fastReturn) return true;
|
||||
problems.push(`${name} must ${eventData.isHidden ? 'have' : 'not have'} its Hidden Ability${etc}.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!problems.length) return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user