Files
infinitefusion-e18/Data/Scripts/018_Alternate battle modes/002_Battle Frontier rules/003_Challenge_EntryRestrictions.rb
2021-05-07 18:23:20 +01:00

394 lines
11 KiB
Ruby

#===============================================================================
#
#===============================================================================
class StandardRestriction
def isValid?(pkmn)
return false if !pkmn || pkmn.egg?
# Species with disadvantageous abilities are not banned
pkmn.species_data.abilities.each do |a|
return true if [:TRUANT, :SLOWSTART].include?(a)
end
# Certain named species are not banned
return true if [:DRAGONITE, :SALAMENCE, :TYRANITAR].include?(pkmn.species)
# Certain named species are banned
return false if [:WYNAUT, :WOBBUFFET].include?(pkmn.species)
# Species with total base stat 600 or more are banned
bst = 0
pkmn.baseStats.each_value { |s| bst += s }
return false if bst >= 600
# Is valid
return true
end
end
#===============================================================================
#
#===============================================================================
class HeightRestriction
def initialize(maxHeightInMeters)
@level = maxHeightInMeters
end
def isValid?(pkmn)
height = (pkmn.is_a?(Pokemon)) ? pkmn.height : GameData::Species.get(pkmn).height
return height <= (@level * 10).round
end
end
#===============================================================================
#
#===============================================================================
class WeightRestriction
def initialize(maxWeightInKg)
@level = maxWeightInKg
end
def isValid?(pkmn)
weight = (pkmn.is_a?(Pokemon)) ? pkmn.weight : GameData::Species.get(pkmn).weight
return weight <= (@level * 10).round
end
end
#===============================================================================
# Unused
#===============================================================================
class NegativeExtendedGameClause
def isValid?(pkmn)
return false if pkmn.isSpecies?(:ARCEUS)
return false if pkmn.hasItem?(:MICLEBERRY)
return false if pkmn.hasItem?(:CUSTAPBERRY)
return false if pkmn.hasItem?(:JABOCABERRY)
return false if pkmn.hasItem?(:ROWAPBERRY)
end
end
#===============================================================================
#
#===============================================================================
$babySpeciesData = {}
class BabyRestriction
def isValid?(pkmn)
if !$babySpeciesData[pkmn.species]
$babySpeciesData[pkmn.species] = pkmn.species_data.get_baby_species
end
return pkmn.species == $babySpeciesData[pkmn.species]
end
end
#===============================================================================
#
#===============================================================================
$canEvolve = {}
class UnevolvedFormRestriction
def isValid?(pkmn)
if !$babySpeciesData[pkmn.species]
$babySpeciesData[pkmn.species] = pkmn.species_data.get_baby_species
end
return false if pkmn.species != $babySpeciesData[pkmn.species]
if $canEvolve[pkmn.species].nil?
$canEvolve[pkmn.species] = (pkmn.species_data.get_evolutions(true).length > 0)
end
return $canEvolve[pkmn.species]
end
end
#===============================================================================
#
#===============================================================================
module NicknameChecker
@@names = {}
def getName(species)
n = @@names[species]
return n if n
n = GameData::Species.get(species).name
@@names[species] = n.upcase
return n
end
def check(name, species)
name = name.upcase
return true if name == getName(species)
return false if @@names.values.include?(name)
GameData::Species.each do |species_data|
next if species_data.species == species || species_data.form != 0
return false if getName(species_data.id) == name
end
return true
end
end
#===============================================================================
# No two Pokemon can have the same nickname.
# No nickname can be the same as the (real) name of another Pokemon character.
#===============================================================================
class NicknameClause
def isValid?(team)
for i in 0...team.length - 1
for j in i + 1...team.length
return false if team[i].name == team[j].name
return false if !NicknameChecker.check(team[i].name, team[i].species)
end
end
return true
end
def errorMessage
return _INTL("No identical nicknames.")
end
end
#===============================================================================
#
#===============================================================================
class NonEggRestriction
def isValid?(pkmn)
return pkmn && !pkmn.egg?
end
end
#===============================================================================
#
#===============================================================================
class AblePokemonRestriction
def isValid?(pkmn)
return pkmn && pkmn.able?
end
end
#===============================================================================
#
#===============================================================================
class SpeciesRestriction
def initialize(*specieslist)
@specieslist = specieslist.clone
end
def isSpecies?(species, specieslist)
return specieslist.include?(species)
end
def isValid?(pkmn)
return isSpecies?(pkmn.species, @specieslist)
end
end
#===============================================================================
#
#===============================================================================
class BannedSpeciesRestriction
def initialize(*specieslist)
@specieslist = specieslist.clone
end
def isSpecies?(species, specieslist)
return specieslist.include?(species)
end
def isValid?(pkmn)
return !isSpecies?(pkmn.species, @specieslist)
end
end
#===============================================================================
#
#===============================================================================
class RestrictedSpeciesRestriction
def initialize(maxValue, *specieslist)
@specieslist = specieslist.clone
@maxValue = maxValue
end
def isSpecies?(species, specieslist)
return specieslist.include?(species)
end
def isValid?(team)
count = 0
team.each do |pkmn|
count += 1 if pkmn && isSpecies?(pkmn.species, @specieslist)
end
return count <= @maxValue
end
end
#===============================================================================
#
#===============================================================================
class RestrictedSpeciesTeamRestriction < RestrictedSpeciesRestriction
def initialize(*specieslist)
super(4, *specieslist)
end
end
#===============================================================================
#
#===============================================================================
class RestrictedSpeciesSubsetRestriction < RestrictedSpeciesRestriction
def initialize(*specieslist)
super(2, *specieslist)
end
end
#===============================================================================
#
#===============================================================================
class SameSpeciesClause
def isValid?(team)
species = []
team.each do |pkmn|
species.push(pkmn.species) if pkmn && !species.include?(pkmn.species)
end
return species.length == 1
end
def errorMessage
return _INTL("Pokémon must be the same species.")
end
end
#===============================================================================
#
#===============================================================================
class SpeciesClause
def isValid?(team)
species = []
team.each do |pkmn|
next if !pkmn
return false if species.include?(pkmn.species)
species.push(pkmn.species)
end
return true
end
def errorMessage
return _INTL("Pokémon can't be the same species.")
end
end
#===============================================================================
#
#===============================================================================
class MinimumLevelRestriction
attr_reader :level
def initialize(minLevel)
@level = minLevel
end
def isValid?(pkmn)
return pkmn.level >= @level
end
end
#===============================================================================
#
#===============================================================================
class MaximumLevelRestriction
attr_reader :level
def initialize(maxLevel)
@level = maxLevel
end
def isValid?(pkmn)
return pkmn.level <= @level
end
end
#===============================================================================
#
#===============================================================================
class TotalLevelRestriction
attr_reader :level
def initialize(level)
@level = level
end
def isValid?(team)
totalLevel = 0
team.each { |pkmn| totalLevel += pkmn.level if pkmn }
return totalLevel <= @level
end
def errorMessage
return _INTL("The combined levels exceed {1}.", @level)
end
end
#===============================================================================
#
#===============================================================================
class BannedItemRestriction
def initialize(*itemlist)
@itemlist = itemlist.clone
end
def isSpecies?(item,itemlist)
return itemlist.include?(item)
end
def isValid?(pkmn)
return !pkmn.item_id || !isSpecies?(pkmn.item_id, @itemlist)
end
end
#===============================================================================
#
#===============================================================================
class ItemsDisallowedClause
def isValid?(pkmn)
return !pkmn.hasItem?
end
end
#===============================================================================
#
#===============================================================================
class SoulDewClause
def isValid?(pkmn)
return !pkmn.hasItem?(:SOULDEW)
end
end
#===============================================================================
#
#===============================================================================
class ItemClause
def isValid?(team)
items = []
team.each do |pkmn|
next if !pkmn || !pkmn.hasItem?
return false if items.include?(pkmn.item_id)
items.push(pkmn.item_id)
end
return true
end
def errorMessage
return _INTL("No identical hold items.")
end
end
#===============================================================================
#
#===============================================================================
class LittleCupRestriction
def isValid?(pkmn)
return false if pkmn.hasItem?(:BERRYJUICE)
return false if pkmn.hasItem?(:DEEPSEATOOTH)
return false if pkmn.hasMove?(:SONICBOOM)
return false if pkmn.hasMove?(:DRAGONRAGE)
return false if pkmn.isSpecies?(:SCYTHER)
return false if pkmn.isSpecies?(:SNEASEL)
return false if pkmn.isSpecies?(:MEDITITE)
return false if pkmn.isSpecies?(:YANMA)
return false if pkmn.isSpecies?(:TANGELA)
return false if pkmn.isSpecies?(:MURKROW)
return true
end
end