mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-07-22 07:37:00 +00:00
Update 6.8
This commit is contained in:
@@ -11,15 +11,107 @@ TIME_FOR_RANDOM_EVENTS = 60#3600 #1 hour
|
||||
|
||||
## Extend pbTrainerBattle to call postTrainerBattleAction at the end of every trainer battle
|
||||
alias original_pbTrainerBattle pbTrainerBattle
|
||||
|
||||
|
||||
def pbTrainerBattle(trainerID, trainerName,endSpeech=nil,
|
||||
doubleBattle=false, trainerPartyID=0,
|
||||
*args)
|
||||
result = original_pbTrainerBattle(trainerID, trainerName, endSpeech,doubleBattle,trainerPartyID, *args)
|
||||
postTrainerBattleActions(trainerID, trainerName,trainerPartyID) if Settings::GAME_ID == :IF_HOENN
|
||||
canLose=false, outcomeVar=1,
|
||||
name_override = nil, trainer_type_overide = nil,
|
||||
event_id = nil, map_id = nil)
|
||||
trainer_data = GameData::Trainer.get(trainerID,trainerName,trainerPartyID)
|
||||
displayPreBattleText(trainer_data)
|
||||
map_id = $game_map.map_id
|
||||
result = original_pbTrainerBattle(trainerID, trainerName, endSpeech,doubleBattle,trainerPartyID,
|
||||
canLose, outcomeVar,name_override,trainer_type_overide,event_id,map_id)
|
||||
updateRematchableTrainer(trainerID, trainerName, trainerPartyID, event_id, nil, map_id) if Settings::GAME_ID == :IF_HOENN
|
||||
return result
|
||||
end
|
||||
def postTrainerBattleActions(trainerID, trainerName,trainerVersion)
|
||||
trainer = registerBattledTrainer(@event_id,$game_map.map_id,trainerID,trainerName,trainerVersion)
|
||||
|
||||
|
||||
def displayPreBattleText(trainer_data)
|
||||
if trainer_data.battleText && !trainer_data.battleText.empty? && @event_id
|
||||
messages = trainer_data.battle_text.split("<br>")
|
||||
|
||||
messages.each do |msg|
|
||||
msg = msg.gsub("<PLAYER_NAME>", $Trainer.name)
|
||||
pbCallBub(2,@event_id)
|
||||
pbMessage(msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Important: Use this instead of pbDoubleBattle and pbTripleBattle so that the trainers are rematchable!
|
||||
# trainers_array is an array of 2 or 3 arrays defining a trainer like such
|
||||
# [:TRAINER_CLASS, "Name", eventId]
|
||||
# e.g.
|
||||
# [[:TWIN_1,"Gina",12],[:TWIN_2, "Mia", 13]]
|
||||
def pbMultiTrainerBattle(trainers_array,canLose=false, outcomeVar=1)
|
||||
battle_size = trainers_array.size
|
||||
if $Trainer.party.size < battle_size
|
||||
battle_size = $Trainer.party.size
|
||||
end
|
||||
|
||||
case battle_size
|
||||
when 1
|
||||
trainer_id = trainers_array[0][0]
|
||||
trainer_name = trainers_array[0][1]
|
||||
return pbTrainerBattle(trainer_id,trainer_name)
|
||||
when 2
|
||||
trainer_1 = trainers_array[0]
|
||||
trainer_1_id = trainer_1[0]
|
||||
trainer_1_name = trainer_1[1]
|
||||
trainer_1_event = trainer_1[2]
|
||||
|
||||
trainer_2 = trainers_array[1]
|
||||
trainer_2_id = trainer_2[0]
|
||||
trainer_2_name = trainer_2[1]
|
||||
trainer_2_event = trainer_2[2]
|
||||
|
||||
trainer1_data = GameData::Trainer.get(trainer_1_id,trainer_1_name,0)
|
||||
displayPreBattleText(trainer1_data)
|
||||
result= pbDoubleTrainerBattle(trainer_1_id,trainer_1_name,0,nil,
|
||||
trainer_2_id,trainer_2_name,0,nil,
|
||||
canLose,outcomeVar)
|
||||
if Settings::GAME_ID == :IF_HOENN
|
||||
updateRematchableTrainer(trainer_1_id, trainer_1_name, 0, trainer_1_event, trainer_2_event)
|
||||
updateRematchableTrainer(trainer_2_id, trainer_2_name, 0, trainer_2_event, trainer_1_event)
|
||||
end
|
||||
return result
|
||||
when 3
|
||||
trainer_1 = trainers_array[0]
|
||||
trainer_1_id = trainer_1[0]
|
||||
trainer_1_name = trainer_1[1]
|
||||
trainer_1_event = trainer_1[2]
|
||||
|
||||
trainer_2 = trainers_array[1]
|
||||
trainer_2_id = trainer_2[0]
|
||||
trainer_2_name = trainer_2[1]
|
||||
trainer_2_event = trainer_2[2]
|
||||
|
||||
trainer_3 = trainers_array[2]
|
||||
trainer_3_id = trainer_3[0]
|
||||
trainer_3_name = trainer_3[1]
|
||||
trainer_3_event = trainer_3[2]
|
||||
|
||||
result= pbTripleTrainerBattle(trainer_1_id,trainer_1_name,0,nil,
|
||||
trainer_2_id,trainer_2_name,0,nil,
|
||||
trainer_3_id,trainer_3_name,0,nil,
|
||||
canLose,outcomeVar)
|
||||
if Settings::GAME_ID == :IF_HOENN
|
||||
updateRematchableTrainer(trainer_1_id, trainer_1_name, 0, trainer_1_event)
|
||||
updateRematchableTrainer(trainer_2_id, trainer_2_name, 0, trainer_2_event)
|
||||
updateRematchableTrainer(trainer_3_id, trainer_3_name, 0, trainer_3_event)
|
||||
end
|
||||
return result
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
def updateRematchableTrainer(trainerID, trainerName, trainerVersion, event_id=nil, linked_event=nil, map_id = nil)
|
||||
event_id = @event_id unless event_id
|
||||
map_id = $game_map.map_id unless map_id
|
||||
trainer = registerBattledTrainer(event_id,map_id,trainerID,trainerName,trainerVersion,linked_event)
|
||||
makeRebattledTrainerTeamGainExp(trainer)
|
||||
end
|
||||
|
||||
@@ -27,14 +119,33 @@ end
|
||||
#Do NOT call this alone. Rebattlable trainers are always intialized after
|
||||
# defeating them.
|
||||
# Having a rematchable trainer that is not registered will cause crashes.
|
||||
def registerBattledTrainer(event_id, mapId, trainerType, trainerName, trainerVersion=0)
|
||||
def registerBattledTrainer(event_id, mapId, trainerType, trainerName, trainerVersion=0, linked_event=nil)
|
||||
key = [event_id,mapId]
|
||||
$PokemonGlobal.battledTrainers = {} unless $PokemonGlobal.battledTrainers
|
||||
return if $PokemonGlobal.battledTrainers.has_key?(key)
|
||||
trainer = BattledTrainer.new(trainerType, trainerName, trainerVersion,key)
|
||||
trainer.setLinkedTrainer(linked_event) if linked_event
|
||||
trainer.setOverworldSprite(getOverworldSprite(event_id,mapId))
|
||||
trainer.setLocation(getMapName(mapId))
|
||||
$PokemonGlobal.battledTrainers[key] = trainer
|
||||
echoln "Registered rematchable trainer #{key}"
|
||||
return trainer
|
||||
end
|
||||
|
||||
|
||||
def getOverworldSprite(event_id,mapId)
|
||||
current_map = $game_map.map_id
|
||||
if mapId == current_map
|
||||
event = $game_map.events[event_id]
|
||||
else
|
||||
map = $MapFactory.getMap(mapId,false)
|
||||
event = map&.events[event_id]
|
||||
end
|
||||
if event
|
||||
return event.character_name
|
||||
end
|
||||
return ""
|
||||
end
|
||||
def unregisterBattledTrainer(event_id, mapId)
|
||||
key = [event_id,mapId]
|
||||
$PokemonGlobal.battledTrainers = {} unless $PokemonGlobal.battledTrainers
|
||||
@@ -56,8 +167,8 @@ def resetTrainerRebattle(event_id, map_id)
|
||||
registerBattledTrainer(event_id,map_id,trainerType,trainerName)
|
||||
end
|
||||
|
||||
def updateRebattledTrainer(event_id,map_id,updated_trainer)
|
||||
key = [event_id,map_id]
|
||||
def updateRebattledTrainer(updated_trainer)
|
||||
key = updated_trainer.trainerKey
|
||||
updateRebattledTrainerWithKey(key,updated_trainer)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user