• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • 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.

Ruby Helper, scripting made easier!

1,748
Posts
14
Years
  • Ruby helper is a script made to help people to script in xp much easier, instead of saying:

    pbAddPokemon(PBSpecies::BULBASAUR,1)

    you can say:

    give pokemon PBSpecies::BULBASAUR 1

    but that's not all, you may input code from: strings, files, and urls!

    you may add custom vars/phrases!

    phrases are small lines of code to use (give as an example goes to a function call pbAddScene which takes 3 arguments, type1, arg1, arg2 pokemon is the first argument in my example and bulbasaur is the second then lastly 1 the level)

    vars are variables (pokemon is a variable as an example again) pokemon = 'pokemon'

    NOTE: A FULL FAQ IS IN THE SCRIPT!

    Code:
    =begin
    Version: 1.0
    Author: Hansiec
    Description:
    Allows you to store very commonly stored data into a smaller string executable
    by my Script Helper.
    
    Help:
    phrases: a phrase usually calls a small code/function
    threads: stored scripts that were recently called
    custom_vars: like phrases but can be used alongside functions
    
    Features:
    make preset codes/functions to help make scripts easier
    reads, stores, and executes threads
    reads threads from files
    reads threads from webpages
    allow in-game adding of phrases (best option for in-game updates through various
    features)
    build in encrypter (not the best)
    threads/phrases are saved alongside variables
    removes any unwanted data (like putting in: aaa will have no effect unless there
    is an argument needing aaa) but this means that you cannot have spaces in your
    variables, x = 10 will not work but x=10 will work
    
    Apps:
    addPhrase(phrase, value) -- adds a new phrase into the list
    removePhrase(phrase) -- removes a phrase
    readUrl(url) -- executes a script from a url
    readFile(file name) -- executes a script from a file
    readThread(thread) -- executes a script from string
    encrpyt(string or integer, enc number) -- encrypts a string or integer
    decrypt(string or integer, enc number) -- decrypts a string or integer
    
    Faq:
    
    Q:
    How do I call the main functions?
    A:
    For the main function: $RubyHelper.readThread(thread) for other functions:
    $RubyHelper.function
    
    Q:
    Why should I use this script?
    A:
    You can make more advanced scripts easier (like mystery gift):
    "url_get url_here gift = url.split('\n'); give pokemon gift[0] gift[1]"
    Note that this does not check against multipul gifts, but it does work.
    
    Q:
    How do I make a newline? (for something like an if statement)
    A:
    use either 2 functions: ~~ or ; (this is auto added with phrases only applied to
    threads not files/urls)
    
    Q:
    How do I use functions?
    A:
    simmilar to normal but slightly different: functionName(argument amount),
    the argument amount indicates the amount of arguments in the function.
    (this only takes effect in the phrases section otherwise it is normal usage.)
    
    Q:
    What are phrases?
    A:
    Phrases are preset codes/functions which can reduce the amount of work needed
    to make a script.
    
    Q:
    What are threads?
    A:
    Threads are code inside strings (example: "phrase arg1" is a thread) threads can
    also include phrases and code together (example: "pl print('Bob')" will work) 
    
    Q:
    How do I use the encrypter?
    A:
    "encrypt string integer", the same arguments for decrypting
    
    Q:
    What is the ~ in the threads?
    A:
    This is mostly for variables, what it does though is to notify not to add the ;
    at the end of the phrase.
    
    Q:
    I get an error with the url functions!
    A:
    Insert the socket functions included in the demo (poke essentials also includes this)
    
    Q:
    I get an error with using phrases!
    A:
    Many things can go wrong here but try these: spelling
    (string still need a '' or "" with them), you can't use phrases as arguments
    examples: (encrypt url_get 'http://www.google.com' 10) is wrong use this:
    (url_get 'http://www.google.com' encrypt url 10), you may however use custom vars
    
    =end
    
    # var_name => value (no spaces in the name)
    $custom_vars = {
    "url" => "$url", # url variable
    "latest_thread" => "getThread($threads.length-2)", # the last thread besides this thread
    "pokemon" => "'pokemon'",
    "badge" => "'badge'",
    "item" => "'item'",
    "egg" => "'egg'",
    "money" => "'money'"
    # "var_name" => "value (strings still need to be defined with '' or "")"
    }
    
    # sample: "give_pokemon PBSpecies::BULBASAUR 2"
    $phrases = {
    "give" => "pbAddScene(3)",
    "makes" => "==~", # used with an if
    "done" => "end", # another addition, this allows you to put in done
    "give_pokemon" => "pbAddPokemon(2)", # give's a pokemon
    "give_item" => "Kernel.pbReceiveItem(1)", # give's an item
    "give_egg" => "pbGenerateEgg(1)", # give's an egg
    "encrypt" => "encrypt(2)", # encrypt's string/integer
    "decrypt" => "decrypt(2)", # decrypt's a string/integer
    "url_get" => "$url = pbDownloadToString(1)", # gets a url
    "url_post" => "$url = pbPostDataToString(2)", # sends post to a url and get's the output
    "url_to_file" => "pbPostToFile(2)", # same as post but saves the text in a file
    "print" => "print~", # print function 0 = string
    "p" => "print~", # print function
    # these are test functions, they may be delted at your own will
    "pl" => "print('This is a test to show you how this works!')",
    "pl2" => "print('source code of thread: '+getThread())",
    # "phrase" => "function or code (argument amount)"
    }
    $threads = [] # used to store scripts that were called
    PHRASEVAR = 24
    THREADVAR = 25
    class ScriptHelper
      
      def addPhrase(phrase,value)
        # Adds a new phrase to the list
        $phrases[phrase] = value
      end
      
      def saveStatus()
        # save the Phrase/Thread status
        $game_variables[THREADVAR] = $threads
        $game_variables[PHRASEVAR] = $phrases
      end
      
      def loadStatus()
        # load the Phrase/Thread status
        if $game_variables[PHRASEVAR] != 0
        $phrases = $game_variables[PHRASEVAR]
        $threads = $game_variables[THREADVAR]
        end
      end
      
      def removePhrase(phrase)
        # delete a phrase
        $phrases[phrase]=nil
      end
      
      def saveThread(thread)
        # saves a thread
        saveStatus()
        $threads.push(thread)
      end
      
      def getThread(id=-1)
        # get's a thread from the saved list
        return $threads[id] if $threads.length-1 >= id and id > -1
        return $threads[$threads.length-1]
      end
      
      def splitThread(thread)
        # splices the thread into readable strings
        saveThread(thread) # save's the thread
        str = thread.split(" ") # split the thread into different strings
        return str
      end
      
      def readUrl(url)
        act=pbDownloadToString(url).split("\n")
        string=act[0]
        for i in 0..act.length-2
          string+="; #{act[i+1]}"
        end
        self.readThread(string)
      end
      
      def readFile(fname)
        act=IO.readlines(fname)
        string=act[0]
        for i in 0..act.length-2
          string+="; #{act[i+1]}"
        end
        self.readThread(string)
      end
      
      def readThread(thread)
    # reads the thread then executes the thread.    
        for i in $custom_vars.keys
          eval(i+" = "+$custom_vars[i])
        end
        loadStatus()
        str = splitThread(thread)
        for i in 0..str.length-1
          oth=str[i].split(".")
          if $phrases[str[i]] != nil
            str[i] = $phrases[str[i]]
            nx = "o"
            nx[0] = str[i][str[i].length-1]
            if nx == "~"
              str[i]=str[i].split("~")[0]
            else
              str[i]="#{str[i]};"
            end
            num=0
            for y in 0..str[i].length-1
              x="a"
              x[0]=str[i][y]
              for xx in 0..9
                if x == "#{xx}"
                  num = xx
                  break
                end
              end
            end
            if num != 0
              ary=str[i].split("(")
              new=ary[0]+"("+str[i+1].to_s
              for j in 0..num-2
                if str[i+(j+2)] == nil
                  break
                else
                  new+=","+str[i+(j+2)].to_s
                end
              end
              new+=")"
              str[i]=new
            end
          elsif $phrases[oth[0]] != nil
            nx = "o"
            str[i]=$phrases[oth[0]]
            nx[0] = str[i][str[i].length-1]
            if nx == "~"
              str[i]=$phrases[oth[0]]+"."+oth[1]
              str[i]=str[i].split("~")[0]+str[i].split("~")[1]
            else
              str[i]=$phrases[oth[0]]+"."+oth[1]
              str[i]+=";"
            end
          end
        end
        code=""
        string = false
        string2 = false
        _if = false
        for k in str
          for s in 0..k.length
            # string testing must be done before testing the rest.
            x="1"
            x[0]=k[s] if k[s] != nil
            if x == "'"
              if string == true
                string = false
              else
                string = true
              end
              break
            end
            if x == '"'
              if string2 == true
                string2 = false
              else
                string2 = true
              end
              break
            end
            if x == ";" or k == "~~" or k == "\n" or k == "then"
              _if = false
            end
          end
          for l in 0..k.length
            x="1"
            x[0]=k[l] if k[l] != nil
            allow = false
            for aaa in $phrases.keys
              if $phrases[aaa] == k or $phrases[aaa] == k+"~"
                allow = true
                break
              end
            end
            if k == "if"
              _if = true
            end
            if _if == true or allow == true or string == true or string2 == true or x == "$" or k == "~~" or x == ";" or x == "=" or x == "(" or x == ")" or x == "{" or x == "}" or x == "[" or x == "]" or x == "'" or x == '"'
              if k == "~~" or k == "\n"
                k = " ;"
              end
                code = "#{code} #{k}"
              break
            end
          end
        end
        eval(code)
        return true
      #rescue
        return false
      end
      
      
    end
    
    # not the best encrypter but it does somewhat encrypt stuff (only string/integers)
    
    def encrypt(str,val)
      val = val.to_i
      if str.is_a?(String)
        new=""
        for i in 0..str.length-1
          new+=str[i]+val+((i/2).floor)
        end
      else
        new = str * val + 17 / 8 * 88 - val + str * 1142 - 987 - (val+str*2)
      end
      return new
    end
    
    def decrypt(str,val)
      val = val.to_i
      if str.is_a?(String)
        new=""
        for i in 0..str.length-1
          new+=str[i]-val-((i/2).floor)
        end
      else
        new = (val+str*2) + 987 + 1142 / str - val + 88 / 8 * 17 - val / str
      end
      return new
    end
          
    # some extras
    
    def pbAddScene(type, arg1, arg2)
      if type == "pokemon" # pokemon
        pbAddPokemon(arg1, arg2)
      elsif type == "item" # item
        Kernel.pbReceiveItem(arg1)
      elsif type == "egg" # egg
        if $Trainer.party.length < 6
          pbGenerateEgg(arg1)
        else
          Kernel.pbMessage(_INTL("Not enough space in your party for the egg."))
        end
      elsif type == "badge" # badge
        $Trainer.badges[arg1] == arg2
      elsif type == "money" # money
        $Trainer.money += arg1
      end
    end
    
    # finally we set the variable
    
    $RubyHelper = ScriptHelper.new
     
    Back
    Top