• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Our weekly protagonist poll is now up! Vote for your favorite Conquest protagonist in the poll by clicking here.
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

PvP Script

  • 1,748
    Posts
    15
    Years
    Okay, well it's not EXACTLY PvP, it's actually just player vs. player's party controlled by an AI. script... But close enough... right?


    Code:
    ################################################################################
    # PvP Script
    # By Hansiec
    # Credits Required
    ################################################################################
    # NOTICE: By PvP this does NOT really mean player vs player, it's more like
    #         player vs other player's party controlled by an AI.
    #
    # To use:
    #   * Create a folder in your game's folder called "Trainers" (otherwise there
    #       WILL be errors)
    #   * Call "PVP.open"
    #
    ################################################################################
    
    class TrainerPackage
      attr_accessor :trainer
      attr_accessor :start_speech
      attr_accessor :lose_speech
      attr_accessor :win_speech
      attr_accessor :game_code
    end
    
    module PVP
      def self.open
        loop do
          commands = []
          commands[cmdDump=commands.length] = "Create Trainer Data"
          commands[cmdBattle=commands.length] = "Battle a Trainer"
          commands[cmdExit=commands.length] = "Exit"
          choice = Kernel.pbMessage(_INTL("Welcome to the PVP station, how may I help you?"),
          commands, 0, nil, 0)
          if choice == cmdDump
            if PVPCore.createTrainerFile
              Kernel.pbMessage(_INTL("Successfully made trainer data to: Trainers/#{$Trainer.name}'s Trainer.tpk"))
            else
              Kernel.pbMessage(_INTL("Could not make trainer data"))
            end
          elsif choice == cmdBattle
            files = ["Cancel"]
            Dir.chdir("Trainers"){
              Dir.glob("*.tpk"){|f|
                files.push(f)
              }
            }
            choice = Kernel.pbMessage(_INTL("select a trainer file"), files, -1, nil, 0)
            if choice >= 1
              file = "Trainers/" + files[choice]
              trainer = PVPCore.loadTrainer(file)
              if trainer
                PVPCore.battleTrainer(trainer)
              else
                Kernel.pbMessage(_INTL("Cannot load trainer file..."))
              end
            end
          elsif choice == cmdExit
            break
          end
        end
      end
    end
    
    module PVPCore
      # Pokemon that cannot, no matter what be accepted.
      BLACK_LIST = [
        PBSpecies::MEWTWO,
        PBSpecies::MEW,
        PBSpecies::HOOH,
        PBSpecies::LUGIA,
        PBSpecies::CELEBI,
        PBSpecies::KYOGRE,
        PBSpecies::GROUDON,
        PBSpecies::RAYQUAZA,
        PBSpecies::DEOXYS,
        PBSpecies::JIRACHI,
        PBSpecies::DIALGA,
        PBSpecies::PALKIA,
        PBSpecies::GIRATINA,
        PBSpecies::HEATRAN,
        PBSpecies::DARKRAI,
        PBSpecies::SHAYMIN,
        PBSpecies::ARCEUS,
        PBSpecies::ZEKROM,
        PBSpecies::RESHIRAM,
        PBSpecies::KYUREM,
        PBSpecies::LANDORUS,
        PBSpecies::MELOETTA,
        PBSpecies::KELDEO,
        PBSpecies::GENESECT
      ]
      
      def self.partyEligible?(party=$Trainer.party)
        for i in party
          if BLACK_LIST.include?(i.species) || i.egg?
            return false
          end
        end
        return true
      end
      
      def self.getBannedPokemonString
        string = PBSpecies.getName(BLACK_LIST[0])
        for i in 1...BLACK_LIST.length-1
          string += ", " + PBSpecies.getName(BLACK_LIST[i])
        end
        string += ", and " + PBSpecies.getName(BLACK_LIST[BLACK_LIST.length - 1])
      end
      
      def self.createTrainerFile
        pre=Kernel.pbMessageFreeText("Enter the speech for when you are challenged", "Battle me, Now!", false, 256)
        win=Kernel.pbMessageFreeText("Enter the speech for when you win", "I win!", false, 256)
        lose=Kernel.pbMessageFreeText("Enter the speech for when you lost", "I Lost...", false, 256)
        return dumpTrainer(pre, win, lose)
      end
        
      def self.dumpTrainer(pre, win, lose)
        f = File.open("Game.ini")
        lines = f.readlines()
        s = lines[3]
        len = s.size
        title = (s[6,len - 7])
        f.close
        if !partyEligible?
          Kernel.pbMessage(_INTL("Sorry, but the trainer file could not be created.\n"+
          "This may be because you have a banned pokemon or an egg in your party."+
          "\n Banned Pokemon Are: "+getBannedPokemonString + "."))
          return false
        end
        tp = TrainerPackage.new
        tp.trainer = $Trainer
        tp.game_code = title
        tp.start_speech = pre
        tp.win_speech = win
        tp.lose_speech = lose
        save_data(tp, "Trainers/#{$Trainer.name}'s Trainer.tpk")
        return true
      rescue
        return nil
      end
      
      def self.loadTrainer(file)
        f = File.open("Game.ini")
        lines = f.readlines()
        s = lines[3]
        len = s.size
        title = (s[6,len - 7])
        f.close
        tp = load_data(file)
        return false if tp.game_code != title
        return [tp.trainer, tp.start_speech, tp.lose_speech, tp.win_speech]
      rescue
        return nil
      end
      
      def self.battleTrainer(file)
        trainer = file
        trainer = loadTrainer(file) if !file.is_a?(Array)
        return false if !trainer
        Kernel.pbMessage(_INTL(trainer[1]))
        return pbOrganizedBattleEx(trainer[0],nil,trainer[2],trainer[3])
      end
      
    end


    To use, simply call: "PVP.open", ALSO, BE SURE TO CREATE A FOLDER CALLED "Trainers" OR THIS SCRIPT WILL FAIL!
     
    Last edited:
    ok one question how do we get other trainers info file? and does this allow mega evolution?

    Just say "Create Trainer Data" as an option, you're actually going to have to post the file somewhere where people can download it (I was to lazy to implement a server like I did with my GTS system) and then you insert it into the "Trainers" folder you had to create to use the script. As for mega evolutions maybe, maybe not. It depends on your essentials version and if and Organised Battle allows it (the battles used normally for Battling other players, Battle Tower trainers, ect.)
     
    OMG MAN :O I didnt expected that :D My remake with those features will be awesome :D Thanks man.
     
    This looks great! I'll be using this one too.
    You sure are coming out with a few scripts...what's next?
     
    Last edited:
    So... Forgive me for not quite understanding what you just posted, but how does this work?

    I get the folder creation and all, but when you say "simply call: 'PVP.open'" what do you mean? Is it a script call through the event editor, or something else?

    Also, how will other players be able to extract their team data from the game?
     
    So... Forgive me for not quite understanding what you just posted, but how does this work?

    I get the folder creation and all, but when you say "simply call: 'PVP.open'" what do you mean? Is it a script call through the event editor, or something else?

    Also, how will other players be able to extract their team data from the game?

    For the open script just use call script from event command on page 3.

    For the data extract simply they will use command "Creata Trainer Data" from this script.
     
    For Pokémon eligibility, make sure to check for eggs too.

    Dang, this was at the bottom of my head when making this, thanks for pointing it out though!


    Edit: I just added checks against eggs, and now if you don't have an eligible pokemon, it will tell you that one or more pokemon are not eligible.
     
    Last edited:
    I constantly get a "Could not make trainer data" error, what did I do wrong, I did everything I should.
     
    Perhaps it's because of some other scripts I'm using... I could try it on a clean Pokemon Essentials and see if it works.
     
    Back
    Top