mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 21:24:59 +00:00
394 lines
11 KiB
Ruby
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
|