Guest User

Party Switcher v19

a guest
Apr 23rd, 2022
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 14.94 KB | None | 0 0
  1. #==============================================================================#
  2. #                         Party Switcher (Based on Reborn's code)              #
  3. #                                                                              #
  4. #==============================================================================#
  5.  
  6. module PartySwitcher
  7.   # Variable that enables the player to see the summary menu when choosing a Pokemon to switch  
  8.   SUMMARY_MENU = true
  9. end
  10.  
  11. #--------------------------------------------------------------------------------
  12. #Allows one to see summary when choosing a Pokemon in party menu
  13. #--------------------------------------------------------------------------------
  14. class PokemonPartyScreen
  15.  
  16.   def pbChoosePokemonSummary
  17.     ret = -1
  18.     loop do
  19.       @scene.pbSetHelpText(_INTL("Choose a Pokémon."))
  20.       pkmnid = @scene.pbChoosePokemon
  21.       break if pkmnid<0   # Cancelled
  22.       cmdChoose   = -1
  23.       cmdSummary = -1
  24.       commands = []
  25.       commands[cmdChoose = commands.length]   = _INTL("Choose")
  26.       pkmn = @party[pkmnid]
  27.       commands[cmdSummary = commands.length]   = _INTL("Summary")
  28.       commands[commands.length]                = _INTL("Cancel")
  29.       command = @scene.pbShowCommands(_INTL("Do what with {1}?",pkmn.name),commands) if pkmn
  30.       if cmdChoose>=0 && command==cmdChoose
  31.         ret = pkmnid
  32.         break
  33.       elsif cmdSummary>=0 && command==cmdSummary
  34.         @scene.pbSummary(pkmnid) {
  35.           @scene.pbSetHelpText(_INTL("Choose a Pokémon."))
  36.         }
  37.       end
  38.     end
  39.     return ret
  40.   end
  41. end
  42.  
  43. #--------------------------------------------------------------------------------
  44. #Allows for the storing and switching of Pokemon in battle
  45. #--------------------------------------------------------------------------------
  46. module PokeBattle_BattleCommon
  47.   def pbStorePokemon(pkmn)
  48.     # Nickname the Pokémon (unless it's a Shadow Pokémon)
  49.     if !pkmn.shadowPokemon?
  50.       if pbDisplayConfirm(_INTL("Would you like to give a nickname to {1}?", pkmn.name))
  51.         nickname = @scene.pbNameEntry(_INTL("{1}'s nickname?", pkmn.speciesName), pkmn)
  52.         pkmn.name = nickname
  53.       end
  54.     end
  55.     if $Trainer.party.length<6
  56.       $Trainer.party[$Trainer.party.length]=pkmn
  57.       return -1
  58.     else
  59.       monsent=false
  60.       while !monsent
  61.         if pbConfirmMessageSerious(_INTL("The party is full; do you want to send someone to the PC?"))
  62.           iMon = -2
  63.           eggcount = 0
  64.           for i in $Trainer.party
  65.             next if i.isEgg?
  66.             eggcount += 1
  67.           end
  68.           pbFadeOutIn(99999){
  69.             sscene  = PokemonParty_Scene.new
  70.             sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  71.             sscreen.pbStartScene(_INTL("Choose a Pokémon."),false)
  72.             loop do
  73.                PartySwitcher::SUMMARY_MENU ? iMon=sscreen.pbChoosePokemonSummary : iMon=sscreen.pbChoosePokemon
  74.                if eggcount<=1 && !($Trainer.party[iMon].isEgg?) && pkmn.isEgg?
  75.                 pbMessage("That's your last Pokémon!")              
  76.               else
  77.                 sscreen.pbEndScene
  78.                 break
  79.               end
  80.             end
  81.           }
  82.           if !(iMon < 0)
  83.             iBox = $PokemonStorage.pbStoreCaught($Trainer.party[iMon])
  84.             if iBox >= 0
  85.               monsent=true
  86.               $Trainer.party[iMon].heal
  87.               pbMessage(_INTL("{1} was sent to {2}.", $Trainer.party[iMon].name, $PokemonStorage[iBox].name))
  88.               $Trainer.party[iMon] = pkmn
  89.               @initialItems[0][iMon] = pkmn.item_id if @initialItems
  90.               $Trainer.party.compact!
  91.               return -1
  92.             else
  93.               pbMessage("No space left in the PC.")
  94.               return false
  95.             end
  96.           end      
  97.         else
  98.           monsent=true
  99.           pkmn.heal
  100.           oldcurbox=$PokemonStorage.currentBox
  101.           storedbox=$PokemonStorage.pbStoreCaught(pkmn)
  102.           if storedbox<0
  103.             pbDisplayPaused(_INTL("Can't catch any more..."))
  104.             return oldcurbox
  105.           else
  106.             return storedbox
  107.           end
  108.         end
  109.       end      
  110.     end
  111.   end
  112. end  
  113.  
  114. #--------------------------------------------------------------------------------
  115. #Allows for the storing and switching of Pokemon outside of battle
  116. #--------------------------------------------------------------------------------
  117. def pbStorePokemon(pkmn)
  118.   if pbBoxesFull?
  119.     pbMessage(_INTL("There's no more room for Pokémon!\1"))
  120.     pbMessage(_INTL("The Pokémon Boxes are full and can't accept any more!"))
  121.     return
  122.   end
  123.   pkmn.record_first_moves
  124.   if $Trainer.party_full?
  125.     monsent=false
  126.     while !monsent
  127.       if pbConfirmMessageSerious(_INTL("The party is full; do you want to send someone to the PC?"))
  128.         iMon = -2
  129.         eggcount = 0
  130.         for i in $Trainer.party
  131.           next if i.isEgg?
  132.           eggcount += 1
  133.         end
  134.         pbFadeOutIn(99999){
  135.           sscene  = PokemonParty_Scene.new
  136.           sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  137.           sscreen.pbStartScene(_INTL("Choose a Pokémon."),false)
  138.           loop do
  139.             sscene.pbSetHelpText(_INTL("Choose a Pokémon."))
  140.             PartySwitcher::SUMMARY_MENU ? iMon=sscreen.pbChoosePokemonSummary : iMon=sscreen.pbChoosePokemon
  141.             if eggcount<=1 && !($Trainer.party[iMon].isEgg?) && pkmn.isEgg?
  142.               pbMessage("That's your last Pokémon!")              
  143.             else
  144.               sscreen.pbEndScene
  145.               break
  146.             end
  147.           end
  148.         }
  149.         if !(iMon < 0)    
  150.           iBox = $PokemonStorage.pbStoreCaught($Trainer.party[iMon])
  151.           if iBox >= 0
  152.             monsent=true
  153.             $Trainer.party[iMon].heal
  154.             pbMessage(_INTL("{1} was sent to {2}.", $Trainer.party[iMon].name, $PokemonStorage[iBox].name))
  155.             $Trainer.party[iMon] = pkmn
  156.           else
  157.             pbMessage("No space left in the PC.")
  158.             return false
  159.           end
  160.         end
  161.       else
  162.         monsent=true
  163.         oldcurbox = $PokemonStorage.currentBox
  164.         storedbox = $PokemonStorage.pbStoreCaught(pkmn)
  165.         curboxname = $PokemonStorage[oldcurbox].name
  166.         boxname = $PokemonStorage[storedbox].name
  167.         creator = nil
  168.         creator = pbGetStorageCreator if $Trainer.seen_storage_creator
  169.         if storedbox != oldcurbox
  170.           if creator
  171.             pbMessage(_INTL("Box \"{1}\" on {2}'s PC was full.\1", curboxname, creator))
  172.           else
  173.             pbMessage(_INTL("Box \"{1}\" on someone's PC was full.\1", curboxname))
  174.           end
  175.           pbMessage(_INTL("{1} was transferred to box \"{2}.\"", pkmn.name, boxname))
  176.         else
  177.           if creator
  178.             pbMessage(_INTL("{1} was transferred to {2}'s PC.\1", pkmn.name, creator))
  179.           else
  180.             pbMessage(_INTL("{1} was transferred to someone's PC.\1", pkmn.name))
  181.           end
  182.           pbMessage(_INTL("It was stored in box \"{1}.\"", boxname))
  183.         end
  184.       end
  185.     end
  186.   else
  187.     $Trainer.party[$Trainer.party.length] = pkmn
  188.   end
  189. end
  190.  
  191. def pbAddPokemonSilent(pkmn, level = 1, see_form = true)
  192.   return false if !pkmn || pbBoxesFull?
  193.   pkmn = Pokemon.new(pkmn, level) if !pkmn.is_a?(Pokemon)
  194.   $Trainer.pokedex.register(pkmn) if see_form
  195.   $Trainer.pokedex.set_owned(pkmn.species)
  196.   pkmn.record_first_moves
  197.   if $Trainer.party_full?
  198.     monsent=false
  199.     while !monsent
  200.       if pbConfirmMessageSerious(_INTL("The party is full; do you want to send someone to the PC?"))
  201.         iMon = -2
  202.         eggcount = 0
  203.         for i in $Trainer.party
  204.           next if i.isEgg?
  205.           eggcount += 1
  206.         end
  207.         pbFadeOutIn(99999){
  208.           sscene  = PokemonParty_Scene.new
  209.           sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  210.           sscreen.pbStartScene(_INTL("Choose a Pokémon."),false)
  211.           loop do
  212.             sscene.pbSetHelpText(_INTL("Choose a Pokémon."))
  213.             PartySwitcher::SUMMARY_MENU ? iMon=sscreen.pbChoosePokemonSummary : iMon=sscreen.pbChoosePokemon
  214.             if eggcount<=1 && !($Trainer.party[iMon].isEgg?) && pkmn.isEgg?
  215.               pbMessage("That's your last Pokémon!")              
  216.             else
  217.               sscreen.pbEndScene
  218.               break
  219.             end
  220.           end
  221.         }
  222.         if !(iMon < 0)    
  223.           iBox = $PokemonStorage.pbStoreCaught($Trainer.party[iMon])
  224.           if iBox >= 0
  225.             monsent=true
  226.             $Trainer.party[iMon].heal
  227.             pbMessage(_INTL("{1} was sent to {2}.", $Trainer.party[iMon].name, $PokemonStorage[iBox].name))
  228.             $Trainer.party[iMon] = pkmn
  229.           else
  230.             pbMessage("No space left in the PC.")
  231.             return false
  232.           end
  233.         end
  234.       else
  235.         monsent=true
  236.         oldcurbox = $PokemonStorage.currentBox
  237.         storedbox = $PokemonStorage.pbStoreCaught(pkmn)
  238.         curboxname = $PokemonStorage[oldcurbox].name
  239.         boxname = $PokemonStorage[storedbox].name
  240.         creator = nil
  241.         creator = pbGetStorageCreator if $Trainer.seen_storage_creator
  242.         if storedbox != oldcurbox
  243.           if creator
  244.             pbMessage(_INTL("Box \"{1}\" on {2}'s PC was full.\1", curboxname, creator))
  245.           else
  246.             pbMessage(_INTL("Box \"{1}\" on someone's PC was full.\1", curboxname))
  247.           end
  248.           pbMessage(_INTL("{1} was transferred to box \"{2}.\"", pkmn.name, boxname))
  249.         else
  250.           if creator
  251.             pbMessage(_INTL("{1} was transferred to {2}'s PC.\1", pkmn.name, creator))
  252.           else
  253.             pbMessage(_INTL("{1} was transferred to someone's PC.\1", pkmn.name))
  254.           end
  255.           pbMessage(_INTL("It was stored in box \"{1}.\"", boxname))
  256.         end
  257.       end
  258.     end
  259.   else
  260.     $Trainer.party[$Trainer.party.length] = pkmn
  261.   end
  262.   return true
  263. end
  264.  
  265. def pbAddForeignPokemon(pkmn, level = 1, owner_name = nil, nickname = nil, owner_gender = 0, see_form = true)
  266.   return false if !pkmn || $Trainer.party_full?
  267.   pkmn = Pokemon.new(pkmn, level) if !pkmn.is_a?(Pokemon)
  268.   # Set original trainer to a foreign one
  269.   pkmn.owner = Pokemon::Owner.new_foreign(owner_name || "", owner_gender)
  270.   # Set nickname
  271.   pkmn.name = nickname[0, Pokemon::MAX_NAME_SIZE] if !nil_or_empty?(nickname)
  272.   # Recalculate stats
  273.   pkmn.calc_stats
  274.   if owner_name
  275.     pbMessage(_INTL("\\me[Pkmn get]{1} received a Pokémon from {2}.\1", $Trainer.name, owner_name))
  276.   else
  277.     pbMessage(_INTL("\\me[Pkmn get]{1} received a Pokémon.\1", $Trainer.name))
  278.   end
  279.   pbStorePokemon(pkmn)
  280.   $Trainer.pokedex.register(pkmn) if see_form
  281.   $Trainer.pokedex.set_owned(pkmn.species)
  282.   return true
  283. end
  284.  
  285. def pbGenerateEgg(pkmn, text = "")
  286.   return false if !pkmn || $Trainer.party_full?
  287.   pkmn = Pokemon.new(pkmn, Settings::EGG_LEVEL) if !pkmn.is_a?(Pokemon)
  288.   # Set egg's details
  289.   pkmn.name           = _INTL("Egg")
  290.   pkmn.steps_to_hatch = pkmn.species_data.hatch_steps
  291.   pkmn.obtain_text    = text
  292.   pkmn.calc_stats
  293.   # Add egg to party
  294.   if pbBoxesFull?
  295.     pbMessage(_INTL("There's no more room for Pokémon!\1"))
  296.     pbMessage(_INTL("The Pokémon Boxes are full and can't accept any more!"))
  297.     return
  298.   end
  299.   if $Trainer.party_full?
  300.     monsent=false
  301.     while !monsent
  302.       if pbConfirmMessageSerious(_INTL("The party is full; do you want to send someone to the PC?"))
  303.         iMon = -2
  304.         eggcount = 0
  305.         for i in $Trainer.party
  306.           next if i.isEgg?
  307.           eggcount += 1
  308.         end
  309.         pbFadeOutIn(99999){
  310.           sscene  = PokemonParty_Scene.new
  311.           sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  312.           sscreen.pbStartScene(_INTL("Choose a Pokémon."),false)
  313.           loop do
  314.             sscene.pbSetHelpText(_INTL("Choose a Pokémon."))
  315.             PartySwitcher::SUMMARY_MENU ? iMon=sscreen.pbChoosePokemonSummary : iMon=sscreen.pbChoosePokemon
  316.             if eggcount<=1 && !($Trainer.party[iMon].isEgg?) && pkmn.isEgg?
  317.               pbMessage("That's your last Pokémon!")              
  318.             else
  319.               sscreen.pbEndScene
  320.               break
  321.             end
  322.           end
  323.         }
  324.         if !(iMon < 0)    
  325.           iBox = $PokemonStorage.pbStoreCaught($Trainer.party[iMon])
  326.           if iBox >= 0
  327.             monsent=true
  328.             $Trainer.party[iMon].heal
  329.             pbMessage(_INTL("{1} was sent to {2}.", $Trainer.party[iMon].name, $PokemonStorage[iBox].name))
  330.             $Trainer.party[iMon] = pkmn
  331.           else
  332.             pbMessage("No space left in the PC.")
  333.             return false
  334.           end
  335.         end
  336.       else
  337.         monsent=true
  338.         oldcurbox = $PokemonStorage.currentBox
  339.         storedbox = $PokemonStorage.pbStoreCaught(pkmn)
  340.         curboxname = $PokemonStorage[oldcurbox].name
  341.         boxname = $PokemonStorage[storedbox].name
  342.         creator = nil
  343.         creator = pbGetStorageCreator if $Trainer.seen_storage_creator
  344.         if storedbox != oldcurbox
  345.           if creator
  346.             pbMessage(_INTL("Box \"{1}\" on {2}'s PC was full.\1", curboxname, creator))
  347.           else
  348.             pbMessage(_INTL("Box \"{1}\" on someone's PC was full.\1", curboxname))
  349.           end
  350.           pbMessage(_INTL("{1} was transferred to box \"{2}.\"", pkmn.name, boxname))
  351.         else
  352.           if creator
  353.             pbMessage(_INTL("{1} was transferred to {2}'s PC.\1", pkmn.name, creator))
  354.           else
  355.             pbMessage(_INTL("{1} was transferred to someone's PC.\1", pkmn.name))
  356.           end
  357.           pbMessage(_INTL("It was stored in box \"{1}.\"", boxname))
  358.         end
  359.       end
  360.     end
  361.   else
  362.     $Trainer.party[$Trainer.party.length] = pkmn
  363.   end
  364. end
  365. alias pbAddEgg pbGenerateEgg
  366. alias pbGenEgg pbGenerateEgg
  367.  
  368. #--------------------------------------------------------------------------------
  369. #Provides Evolution Check on Party Switcher
  370. #--------------------------------------------------------------------------------
  371. class PokemonTemp
  372.   attr_accessor :encounterTriggered
  373.   attr_accessor :encounterType
  374.   attr_accessor :evolutionLevels
  375.   attr_accessor :party # changed added
  376. end
  377.  
  378. Events.onStartBattle+=proc {|sender,e| # Changed added $PokemonTemp.party to fix party swap evo bug
  379.   $PokemonTemp.party = []
  380.   $PokemonTemp.evolutionLevels = []
  381.   for i in 0...$Trainer.party.length
  382.     $PokemonTemp.party[i] = $Trainer.party[i]
  383.     $PokemonTemp.evolutionLevels[i] = $Trainer.party[i].level
  384.   end
  385. }
  386.  
  387. def pbEvolutionCheck(currentLevels)
  388.   for i in 0...currentLevels.length
  389.     pkmn = $Trainer.party[i]
  390.     next if $PokemonTemp.party[i] != $Trainer.party[i] # changed added to fix party swap evo bug
  391.     next if !pkmn || (pkmn.hp==0 && !Settings::CHECK_EVOLUTION_FOR_FAINTED_POKEMON)
  392.     next if currentLevels[i] && pkmn.level==currentLevels[i]
  393.     newSpecies = pkmn.check_evolution_on_level_up
  394.     next if !newSpecies
  395.     evo = PokemonEvolutionScene.new
  396.     evo.pbStartScreen(pkmn,newSpecies)
  397.     evo.pbEvolution
  398.     evo.pbEndScreen
  399.   end
  400. end
  401.  
Advertisement
Add Comment
Please, Sign In to add comment