Advertisement
FiaPlay

Online Trainer v21

May 12th, 2024
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.10 KB | None | 0 0
  1. #-----------------------------------------------------------------------------
  2. # Script creado por FiaPlay para Pokémon Essentials BES. Créditos si se usa.
  3. # Discord de FP Systems: https://discord.gg/ds8DWB5NSW
  4. # Si vas reportar algún bug o preguntar algo recomiendo hacerlo en el hilo del server de PokeLiberty o en FP Systems.
  5. #-----------------------------------------------------------------------------
  6. # Demostración
  7. #-----------------------------------------------------------------------------
  8. # Modo de uso:
  9. # *Usa fpDownloadBattle para descargar los datos de la batalla
  10. # *Usa OnlineBattle.start() para iniciar la batalla
  11. # ****Los siguientes pasos no deben hacerse en la versión que los jugadores descargarán****
  12. # *Crea una copia de tu juego para generar los datos
  13. # *Usa el modo depurador para dejar tu equipo igual al que quieres para el entrenador.
  14. # *Usa OnlineBattle.new(trtype,trname,doublebattle,endspeech)
  15. # trtype es el ID del tipo de entrenador
  16. # trname es el nombre del entrenador
  17. # doublebattle indica si será un combate doble
  18. # endspeech es lo que dirá el entrenador al terminar el combate
  19. # battle_rules un array con las battle rules activas
  20. # items un array con los objetos del rival
  21. # Eso creará el archivo OnlineBattle.txt en la capeta del juego.
  22. # Sube el contenido de OnlineBattle.txt a internet (recomendable pastebin.com)
  23. =begin Para un ejemplo de como generar el combate:
  24. r=["2v2",["weather",:Rain]]
  25. OnlineBattle.new(:LEADER_Brock, "Koga",false,"Buena Pelea.",r)
  26. =end
  27.  
  28. #-----------------------------------------------------------------------------
  29. URRL = "https://pastebin.com/raw/YLYPMEVK" # Enlace a el txt con los datos encriptados.
  30. BATTLE_BGM = "" # BGM usado para la batalla (si se deja en blanco se usará la música por defecto del entrenador)
  31. class OnlineBattle
  32.   attr_accessor :trainer
  33.   attr_accessor :team
  34.   attr_accessor :doublebattle
  35.   attr_accessor :endspeech
  36.   attr_accessor :rules
  37.   attr_accessor :items
  38.  
  39.   def initialize(trtype,trname,doublebattle=false,endspeech="",battle_rules=[],items=[])
  40.     @team = $player.party
  41.     @trainer = NPCTrainer.new(trname,trtype)
  42.     @doublebattle = doublebattle
  43.     @trainer.lose_text = endspeech
  44.     @rules     = battle_rules
  45.     text=pbMysteryGiftEncrypt(self)
  46.     $PokemonGlobal.downloaded_battle=text
  47.     File.open("OnlineBattle.txt","wb"){|f|
  48.        f.write(text)
  49.       }
  50.   end
  51.  
  52. #===============================================================================
  53. # Trainer battles
  54. #===============================================================================
  55.   def self.start(var=1)
  56.     b=fpLoadDownloandedBattle
  57.     if !b
  58.       pbMessage("No se han podido cargar los datos de la batalla")
  59.       return
  60.     end
  61.     for i in b.rules
  62.       if i.is_a?(Array)
  63.         setBattleRule(i[0],i[1])
  64.       else
  65.         setBattleRule(i)
  66.       end
  67.     end
  68.     outcome_variable = $game_temp.battle_rules["outcomeVar"] || var
  69.     can_lose         = $game_temp.battle_rules["canLose"] || false
  70.     # Skip battle if the player has no able Pokémon, or if holding Ctrl in Debug mode
  71.     if BattleCreationHelperMethods.skip_battle?
  72.       return BattleCreationHelperMethods.skip_battle(outcome_variable, true)
  73.     end
  74.     # Record information about party Pokémon to be used at the end of battle (e.g.
  75.     # comparing levels for an evolution check)
  76.     EventHandlers.trigger(:on_start_battle)
  77.     # Generate information for the foes
  78.     foe_trainers = [b.trainer]
  79.     foe_items = []
  80.     foe_party = b.team
  81.     # Generate information for the player and partner trainer(s)
  82.     player_trainers, ally_items, player_party, player_party_starts = BattleCreationHelperMethods.set_up_player_trainers(foe_party)
  83.     # Create the battle scene (the visual side of it)
  84.     scene = BattleCreationHelperMethods.create_battle_scene
  85.     # Create the battle class (the mechanics side of it)
  86.     battle = Battle.new(scene, player_party, foe_party, player_trainers, foe_trainers)
  87.     battle.party1starts = player_party_starts
  88.     battle.party2starts = [0]
  89.     battle.ally_items   = ally_items
  90.     battle.items        = foe_items
  91.     # Set various other properties in the battle class
  92.     setBattleRule("#{foe_trainers.length}v#{foe_trainers.length}") if $game_temp.battle_rules["size"].nil?
  93.     BattleCreationHelperMethods.prepare_battle(battle)
  94.     $game_temp.clear_battle_rules
  95.     # Perform the battle itself
  96.     outcome = 0
  97.     pbBattleAnimation(pbGetTrainerBattleBGM(foe_trainers), (battle.singleBattle?) ? 1 : 3, foe_trainers) do
  98.       pbSceneStandby { outcome = battle.pbStartBattle }
  99.       BattleCreationHelperMethods.after_battle(outcome, can_lose)
  100.     end
  101.     Input.update
  102.     # Save the result of the battle in a Game Variable (1 by default)
  103.     BattleCreationHelperMethods.set_outcome(outcome, outcome_variable, true)
  104.     return outcome
  105.   end
  106. end
  107.  
  108. def fpDownloadBattle()
  109.   text = pbDownloadToString(URRL)
  110.   if text.length>0
  111.     $PokemonGlobal.downloaded_battle=text
  112.   end
  113. end
  114.  
  115. def fpLoadDownloandedBattle
  116.   text=$PokemonGlobal.downloaded_battle
  117.   return false if !text || text.length==0
  118.   b=Marshal.restore(Zlib::Inflate.inflate(text.unpack("m")[0]))
  119.   return b
  120. end
  121.  
  122. class PokemonGlobalMetadata
  123.   attr_accessor :downloaded_battle
  124. end
  125.  
  126. def pbGetTrainerBattleBGM(trainer,online=false)
  127.   pbStringToAudioFile(BATTLE_BGM) if online && BATTLE_BGM.length>0
  128.   return $PokemonGlobal.nextBattleBGM.clone if $PokemonGlobal.nextBattleBGM
  129.   ret = nil
  130.   music = nil
  131.   trainerarray = (trainer.is_a?(Array)) ? trainer : [trainer]
  132.   trainerarray.each do |t|
  133.     trainer_type_data = GameData::TrainerType.get(t.trainer_type)
  134.     music = trainer_type_data.battle_BGM if trainer_type_data.battle_BGM
  135.   end
  136.   ret = pbStringToAudioFile(music) if music && music != ""
  137.   if !ret
  138.     # Check map metadata
  139.     music = $game_map.metadata&.trainer_battle_BGM
  140.     ret = pbStringToAudioFile(music) if music && music != ""
  141.   end
  142.   if !ret
  143.     # Check global metadata
  144.     music = GameData::Metadata.get.trainer_battle_BGM
  145.     ret = pbStringToAudioFile(music) if music && music != ""
  146.   end
  147.   ret = pbStringToAudioFile("Battle trainer") if !ret
  148.   return ret
  149. end
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement