Prevented error if trying to set a species of nil for an encounter in the Encounters Editor, fixed trainer Pokémon's EVs and IVs not being set properly in the Encounters Editor

This commit is contained in:
Maruno17
2021-05-20 20:45:37 +01:00
parent 3eea17b877
commit a97a42e89d

View File

@@ -336,17 +336,21 @@ end
module SpeciesFormProperty class SpeciesFormProperty
def self.set(_settingname,oldsetting) def initialize(default_value)
@default_value = default_value
end
def set(_settingname,oldsetting)
ret = pbChooseSpeciesFormList(oldsetting || nil) ret = pbChooseSpeciesFormList(oldsetting || nil)
return ret || oldsetting return ret || oldsetting
end end
def self.defaultValue def defaultValue
return nil return @default_value
end end
def self.format(value) def format(value)
if value && GameData::Species.exists?(value) if value && GameData::Species.exists?(value)
species_data = GameData::Species.get(value) species_data = GameData::Species.get(value)
if species_data.form > 0 if species_data.form > 0
@@ -462,21 +466,15 @@ class IVsProperty
data = [] data = []
stat_ids = [] stat_ids = []
GameData::Stat.each_main do |s| GameData::Stat.each_main do |s|
oldsetting[s.pbs_order] = 0 if !oldsetting[s.pbs_order] oldsetting[s.pbs_order] = defaultValue if !oldsetting[s.pbs_order]
properties[s.pbs_order] = [s.name, LimitProperty2.new(@limit), properties[s.pbs_order] = [s.name, LimitProperty2.new(@limit),
_INTL("Individual values for the Pokémon's {1} stat (0-{2}).", s.name, @limit)] _INTL("Individual values for the Pokémon's {1} stat (0-{2}).", s.name, @limit)]
data[s.pbs_order] = oldsetting[s.id] data[s.pbs_order] = oldsetting[s.id]
stat_ids[s.pbs_order] = s.id stat_ids[s.pbs_order] = s.id
end end
pbPropertyList(settingname, data, properties, false) pbPropertyList(settingname, data, properties, false)
allZeroes = true
data.each_with_index do |value, i|
data[i] ||= 0
allZeroes = false if value && value != 0
end
return nil if allZeroes
ret = {} ret = {}
stat_ids.each_with_index { |s, i| ret[s] = data[i] } stat_ids.each_with_index { |s, i| ret[s] = data[i] || defaultValue }
return ret return ret
end end
@@ -486,13 +484,12 @@ class IVsProperty
def format(value) def format(value)
return "-" if !value return "-" if !value
return value[0].to_s if value.uniq.length == 1 array = []
ret = "" GameData::Stat.each_main do |s|
for i in 0...value.length next if s.pbs_order < 0
ret.concat(",") if i > 0 array[s.pbs_order] = value[s.id] || defaultValue
ret.concat((value[i] || 0).to_s)
end end
return ret return array.join(',')
end end
end end
@@ -509,27 +506,21 @@ class EVsProperty
data = [] data = []
stat_ids = [] stat_ids = []
GameData::Stat.each_main do |s| GameData::Stat.each_main do |s|
oldsetting[s.pbs_order] = 0 if !oldsetting[s.pbs_order] oldsetting[s.pbs_order] = defaultValue if !oldsetting[s.pbs_order]
properties[s.pbs_order] = [s.name, LimitProperty2.new(@limit), properties[s.pbs_order] = [s.name, LimitProperty2.new(@limit),
_INTL("Effort values for the Pokémon's {1} stat (0-{2}).", s.name, @limit)] _INTL("Effort values for the Pokémon's {1} stat (0-{2}).", s.name, @limit)]
data[s.pbs_order] = oldsetting[s.id] data[s.pbs_order] = oldsetting[s.id]
stat_ids[s.pbs_order] = s.id stat_ids[s.pbs_order] = s.id
end end
loop do loop do
pbPropertyList(settingname,data,properties,true) pbPropertyList(settingname, data, properties, false)
evtotal = 0 evtotal = 0
data.each { |value| evtotal += value if value } data.each { |value| evtotal += value if value }
break if evtotal <= Pokemon::EV_LIMIT break if evtotal <= Pokemon::EV_LIMIT
pbMessage(_INTL("Total EVs ({1}) are greater than allowed ({2}). Please reduce them.", evtotal, Pokemon::EV_LIMIT)) pbMessage(_INTL("Total EVs ({1}) are greater than allowed ({2}). Please reduce them.", evtotal, Pokemon::EV_LIMIT))
end end
allZeroes = true
data.each_with_index do |value, i|
data[i] ||= 0
allZeroes = false if value && value != 0
end
return nil if allZeroes
ret = {} ret = {}
stat_ids.each_with_index { |s, i| ret[s] = data[i] } stat_ids.each_with_index { |s, i| ret[s] = data[i] || defaultValue }
return ret return ret
end end
@@ -539,13 +530,12 @@ class EVsProperty
def format(value) def format(value)
return "-" if !value return "-" if !value
return value[0].to_s if value.uniq.length == 1 array = []
ret = "" GameData::Stat.each_main do |s|
for i in 0...value.length next if s.pbs_order < 0
ret.concat(",") if i > 0 array[s.pbs_order] = value[s.id] || defaultValue
ret.concat((value[i] || 0).to_s)
end end
return ret return array.join(',')
end end
end end
@@ -586,7 +576,7 @@ end
module PlayerProperty module PlayerProperty
def self.set(settingname,oldsetting) def self.set(settingname,oldsetting)
oldsetting = [0,"xxx","xxx","xxx","xxx","xxx","xxx","xxx"] if !oldsetting oldsetting = [nil,"xxx","xxx","xxx","xxx","xxx","xxx","xxx"] if !oldsetting
properties = [ properties = [
[_INTL("Trainer Type"), TrainerTypeProperty, _INTL("Trainer type of this player.")], [_INTL("Trainer Type"), TrainerTypeProperty, _INTL("Trainer type of this player.")],
[_INTL("Sprite"), CharacterProperty, _INTL("Walking character sprite.")], [_INTL("Sprite"), CharacterProperty, _INTL("Walking character sprite.")],
@@ -840,7 +830,7 @@ module BaseStatsProperty
end end
if pbPropertyList(settingname,data,properties,true) if pbPropertyList(settingname,data,properties,true)
ret = {} ret = {}
stat_ids.each_with_index { |s, i| ret[s] = data[i] } stat_ids.each_with_index { |s, i| ret[s] = data[i] || defaultValue }
oldsetting = ret oldsetting = ret
end end
return oldsetting return oldsetting
@@ -871,7 +861,7 @@ module EffortValuesProperty
end end
if pbPropertyList(settingname,oldsetting,properties,true) if pbPropertyList(settingname,oldsetting,properties,true)
ret = {} ret = {}
stat_ids.each_with_index { |s, i| ret[s] = data[i] } stat_ids.each_with_index { |s, i| ret[s] = data[i] || defaultValue }
oldsetting = ret oldsetting = ret
end end
return oldsetting return oldsetting
@@ -1409,7 +1399,7 @@ module EncounterSlotProperty
data[3] = data[2] if !data[3] data[3] = data[2] if !data[3]
properties = [ properties = [
[_INTL("Probability"), NonzeroLimitProperty.new(999), _INTL("Relative probability of choosing this slot.")], [_INTL("Probability"), NonzeroLimitProperty.new(999), _INTL("Relative probability of choosing this slot.")],
[_INTL("Species"), SpeciesFormProperty, _INTL("A Pokémon species/form.")], [_INTL("Species"), SpeciesFormProperty.new(data[1]), _INTL("A Pokémon species/form.")],
[_INTL("Minimum level"), NonzeroLimitProperty.new(max_level), _INTL("Minimum level of this species (1-{1}).", max_level)], [_INTL("Minimum level"), NonzeroLimitProperty.new(max_level), _INTL("Minimum level of this species (1-{1}).", max_level)],
[_INTL("Maximum level"), NonzeroLimitProperty.new(max_level), _INTL("Maximum level of this species (1-{1}).", max_level)] [_INTL("Maximum level"), NonzeroLimitProperty.new(max_level), _INTL("Maximum level of this species (1-{1}).", max_level)]
] ]