AAA: Let event Pokemon change their ability (#3947)

This commit is contained in:
MacChaeger 2017-09-05 21:18:08 -05:00 committed by Guangcong Luo
parent a76a462cd1
commit 3766498e28

View File

@ -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;