mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
146 lines
5.0 KiB
Ruby
146 lines
5.0 KiB
Ruby
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
#
|
|
|
|
def getTrainersDataMode
|
|
mode = GameData::Trainer
|
|
if $game_switches && $game_switches[SWITCH_MODERN_MODE]
|
|
mode = GameData::TrainerModern
|
|
elsif $game_switches && $game_switches[SWITCH_EXPERT_MODE]
|
|
mode = GameData::TrainerExpert
|
|
end
|
|
return mode
|
|
end
|
|
|
|
def pbLoadTrainer(tr_type, tr_name, tr_version = 0)
|
|
tr_type_data = GameData::TrainerType.try_get(tr_type)
|
|
raise _INTL("Trainer type {1} does not exist.", tr_type) if !tr_type_data
|
|
tr_type = tr_type_data.id
|
|
trainer_data = getTrainersDataMode.try_get(tr_type, tr_name, tr_version)
|
|
if !trainer_data
|
|
trainer_data = GameData::Trainer.try_get(tr_type, tr_name, tr_version)
|
|
end
|
|
return (trainer_data) ? trainer_data.to_trainer : nil
|
|
end
|
|
|
|
def pbNewTrainer(tr_type, tr_name, tr_version, save_changes = true)
|
|
party = []
|
|
for i in 0...Settings::MAX_PARTY_SIZE
|
|
if i == 0
|
|
pbMessage(_INTL("Please enter the first Pokémon.", i))
|
|
else
|
|
break if !pbConfirmMessage(_INTL("Add another Pokémon?"))
|
|
end
|
|
loop do
|
|
species = pbChooseSpeciesList
|
|
if species
|
|
params = ChooseNumberParams.new
|
|
params.setRange(1, GameData::GrowthRate.max_level)
|
|
params.setDefaultValue(10)
|
|
level = pbMessageChooseNumber(_INTL("Set the level for {1} (max. #{params.maxNumber}).",
|
|
GameData::Species.get(species).name), params)
|
|
party.push([species, level])
|
|
break
|
|
else
|
|
break if i > 0
|
|
pbMessage(_INTL("This trainer must have at least 1 Pokémon!"))
|
|
end
|
|
end
|
|
end
|
|
trainer = [tr_type, tr_name, [], party, tr_version]
|
|
if save_changes
|
|
trainer_hash = {
|
|
:id_number => getTrainersDataMode::DATA.keys.length / 2,
|
|
:trainer_type => tr_type,
|
|
:name => tr_name,
|
|
:version => tr_version,
|
|
:pokemon => []
|
|
}
|
|
party.each do |pkmn|
|
|
trainer_hash[:pokemon].push({
|
|
:species => pkmn[0],
|
|
:level => pkmn[1]
|
|
})
|
|
end
|
|
# Add trainer's data to records
|
|
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:name], trainer_hash[:version]]
|
|
getTrainersDataMode.register(trainer_hash)
|
|
getTrainersDataMode.save
|
|
pbConvertTrainerData
|
|
pbMessage(_INTL("The Trainer's data was added to the list of battles and in PBS/trainers.txt."))
|
|
end
|
|
return trainer
|
|
end
|
|
|
|
def pbConvertTrainerData
|
|
tr_type_names = []
|
|
GameData::TrainerType.each { |t| tr_type_names[t.id_number] = t.real_name }
|
|
MessageTypes.setMessages(MessageTypes::TrainerTypes, tr_type_names)
|
|
Compiler.write_trainer_types
|
|
Compiler.write_trainers
|
|
end
|
|
|
|
def pbTrainerTypeCheck(trainer_type)
|
|
return true if !$DEBUG
|
|
return true if GameData::TrainerType.exists?(trainer_type)
|
|
if pbConfirmMessage(_INTL("Add new trainer type {1}?", trainer_type.to_s))
|
|
pbTrainerTypeEditorNew(trainer_type.to_s)
|
|
end
|
|
pbMapInterpreter.command_end if pbMapInterpreter
|
|
return false
|
|
end
|
|
|
|
# Called from trainer events to ensure the trainer exists
|
|
def pbTrainerCheck(tr_type, tr_name, max_battles, tr_version = 0)
|
|
return true if !$DEBUG
|
|
# Check for existence of trainer type
|
|
pbTrainerTypeCheck(tr_type)
|
|
tr_type_data = GameData::TrainerType.try_get(tr_type)
|
|
return false if !tr_type_data
|
|
tr_type = tr_type_data.id
|
|
# Check for existence of trainer with given ID number
|
|
return true if getTrainersDataMode.exists?(tr_type, tr_name, tr_version)
|
|
# Add new trainer
|
|
if pbConfirmMessage(_INTL("Add new trainer variant {1} (of {2}) for {3} {4}?",
|
|
tr_version, max_battles, tr_type.to_s, tr_name))
|
|
pbNewTrainer(tr_type, tr_name, tr_version)
|
|
end
|
|
return true
|
|
end
|
|
|
|
def pbGetFreeTrainerParty(tr_type, tr_name)
|
|
tr_type_data = GameData::TrainerType.try_get(tr_type)
|
|
raise _INTL("Trainer type {1} does not exist.", tr_type) if !tr_type_data
|
|
tr_type = tr_type_data.id
|
|
for i in 0...256
|
|
return i if !getTrainersDataMode.try_get(tr_type, tr_name, i)
|
|
end
|
|
return -1
|
|
end
|
|
|
|
def pbMissingTrainer(tr_type, tr_name, tr_version)
|
|
tr_type_data = GameData::TrainerType.try_get(tr_type)
|
|
raise _INTL("Trainer type {1} does not exist.", tr_type) if !tr_type_data
|
|
tr_type = tr_type_data.id
|
|
if !$DEBUG
|
|
#raise _INTL("Can't find trainer ({1}, {2}, ID {3})", tr_type.to_s, tr_name, tr_version)
|
|
message = ""
|
|
if $game_switches[SWITCH_MODERN_MODE]
|
|
message << "[MODERN MODE] "
|
|
end
|
|
message << "This trainer appears to be missing from the game. Please report this on the game's Discord channel whenever you get a chance."
|
|
pbMessage(message)
|
|
return 1
|
|
end
|
|
message = ""
|
|
if tr_version != 0
|
|
message = _INTL("Add new trainer ({1}, {2}, ID {3})?", tr_type.to_s, tr_name, tr_version)
|
|
else
|
|
message = _INTL("Add new trainer ({1}, {2})?", tr_type.to_s, tr_name)
|
|
end
|
|
cmd = pbMessage(message, [_INTL("Yes"), _INTL("No")], 2)
|
|
pbNewTrainer(tr_type, tr_name, tr_version) if cmd == 0
|
|
return cmd
|
|
end
|