O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Variável Local

Iniciado por Raizen, 30/11/2012 às 17:28

Variável Local

Facilidade de uso: fácil
Lag gerado: desprezivel

[box class=titlebg]
Creditos
[/box]
  Sim eu coloco créditos antes porque senão ninguém lê xD, bom foi um pedido na fábrica de scripts, e o Sasuke_Uchiha já tinha um para RMXP.. então no caso peguei o dele e apenas converti para RMVX, na realidade houve pouquissimas mudanças para rodar no RMVX, então logo todos os créditos podem ser para o Sasuke_Uchiha. Eu estou compartilhando porque é muito útil o script e pode ser de grande ajuda.
 

[box class=titlebg]
Para que serve o script
[/box]

  Ele cria uma variável local, muito útil para os eventers economizando valiosas variáveis, semelhante ao Switch Local, todos os procedimentos de como usar podem ser encontrados no script.


[box class=titlebg]
Script.
[/box]

#===============================================================================
#                     Variável Local - 3.0
# => Por Sasuke_Uchiha
#===============================================================================
#Usando o comando de evento "Opções de Variável", você estará
#chamando a variável local do evento em que o comando foi criado.
#Você pode retornar uma variável de um outro evento usando isto
#em um "Chamar Script":
#     $game_variables[[X, Y]]
#     => Sendo X o ID do evento.
#     => Sendo Y o ID da variável.
#
#===============================================================================
#===============================================================================
#=>   CONFIGURAÇÕES:
#===============================================================================
#===============================================================================
module Var_Config
  #-----------------------------------------------------------------------------
  #-----------------------------------------------------------------------------
  #Coloque dentro das chaves o ID das variáveis que serão locais
  Locais = [1,2]
  #-----------------------------------------------------------------------------
  #-----------------------------------------------------------------------------
  #Mostrar o valor das variáveis locais no "Mostrar Mensagem"?
  # => "true" para "sim" e "false" para "não"
  # => Desative caso não esteja usando o sistema de mensagens padrão
  Mens = true
  #-----------------------------------------------------------------------------
  #-----------------------------------------------------------------------------
end
#===============================================================================
# =>  FIM DAS CONFIGURAÇÕES
#===============================================================================
 
#===============================================================================
# => Classe que trata das variáveis no jogo
#===============================================================================
class Game_Variables
  def initialize
    @data = []
    @data2 = {}
  end
  def [](key)
    if key.is_a?(Array)
      return @data2[key] if @data2[key] != nil
      return 0
    else
      if key <= 5000 and @data[key] != nil
        return @data[key]
      else
        return 0
      end
    end
  end
  def []=(key, value)
    if key.is_a?(Array)
      @data2[key] = value
    else
      if key <= 5000
        @data[key] = value
      end
    end
  end
end
#===============================================================================
# => INTERPRETER
#===============================================================================
class Game_Interpreter
   #=> alias do método que mostra menssagem:
  alias s_c101 command_101
  #-----------------------------------------------------------------------------
  # => Método que cuida do comando "Mostrar Mensagem"
  #-----------------------------------------------------------------------------
  def command_101
    $e_id = @event_id
    s_c101
  end
  #-----------------------------------------------------------------------------
  # => Método que cuida do acesso as variáveis por evento
  #-----------------------------------------------------------------------------
  def command_122
    value = 0
    akey ||= []
    for i in @params[0] .. @params[1]
      if Var_Config::Locais.include?(@params[0])
        akey.push([@event_id, @params[0]])
      else
        akey.push(@params[0])
      end
    end
    case @params[3]
    when 0
      value = @params[4]
    when 1
      value = $game_variables[@params[4]]
    when 2  
      value = @params[4] + rand(@params[5] - @params[4] + 1)
    when 3  
      value = $game_party.item_number(@params[4])
    when 4
      actor = $game_actors[@params[4]]
 if actor != nil
        case @params[5]
        when 0  # Nível
          value = actor.level
        when 1  # Experiência
          value = actor.exp
        when 2  # HP
          value = actor.hp
        when 3  # MP
          value = actor.mp
        when 4  # HP Máximo
          value = actor.maxhp
        when 5  # MP Máximo
          value = actor.maxmp
        when 6  # Ataque
          value = actor.atk
        when 7  # Defesa
          value = actor.def
        when 8  # Inteligência
          value = actor.spi
        when 9  # Agilidade
          value = actor.agi
        end
      end
    when 5
      enemy = $game_troop.enemies[@params[4]]
      if enemy != nil
        case @params[5]
        when 0  # HP
          value = enemy.hp
        when 1  # MP
          value = enemy.mp
        when 2  # HP Máximo
          value = enemy.maxhp
        when 3  # MP Máximo
          value = enemy.maxmp
        when 4  # Ataque
          value = enemy.atk
        when 5  # Defesa
          value = enemy.def
        when 6  # Inteligência
          value = enemy.spi
        when 7  # Agilidade
          value = enemy.agi
        end
      end
    when 6  
      character = get_character(@params[4])
      if character != nil
        case @params[5]
        when 0  
          value = character.x
        when 1  
          value = character.y
        when 2
          value = character.direction
        when 3
          value = character.screen_x
        when 4  
          value = character.screen_y
        when 5
          value = character.terrain_tag
        end
      end
    when 7  
      case @params[4]
      when 0
        value = $game_map.map_id
      when 1  
        value = $game_party.actors.size
      when 2  
        value = $game_party.gold
      when 3  
        value = $game_party.steps
      when 4
        value = Graphics.frame_count / Graphics.frame_rate
      when 5
        value = $game_system.timer / Graphics.frame_rate
      when 6
        value = $game_system.save_count
      end
    end
    for i in akey
      case @params[2]
      when 0
        $game_variables[i] = value
      when 1  
        $game_variables[i] += value
      when 2
        $game_variables[i] -= value
      when 3
        $game_variables[i] *= value
      when 4
        $game_variables[i] /= value if value != 0
      when 5
        $game_variables[i] %= value if value != 0
      end
      if $game_variables[i] > 99999999
        $game_variables[i] = 99999999
      end
      if $game_variables[i] < -99999999
        $game_variables[i] = -99999999
      end
    end
    $game_map.need_refresh = true
    return true
  end
  def command_111
    # Iniciar variável local
    result = false
    case @params[0]
    when 0  # Switch
      result = ($game_switches[@params[1]] == (@params[2] == 0))
    when 1  # Variável
      value1 = 0
      if Var_Config::Locais.include?(@params[1])
        value1 = $game_variables[[@event_id, @params[1]]]
      else
        value1 = $game_variables[@params[1]]
      end
      if @params[2] == 0
        value2 = @params[3]
      else
        if Var_Config::Locais.include?(@params[3])
          value1 = $game_variables[[@event_id, @params[3]]]
        else
          value1 = $game_variables[@params[3]]
        end
      end
      # Aqui se definem os casos para as variáveis
      case @params[4]
      when 0  # value1 for igual ao value2
        result = (value1 == value2)
      when 1  # value1 for maior ou igual ao value2
        result = (value1 >= value2)
      when 2  # value1 for menor ou igual ao value2
        result = (value1 <= value2)
      when 3  # value1 for maior que o value2
        result = (value1 > value2)
      when 4  # value1 for menor que o value2
        result = (value1 < value2)
      when 5  # value1 não for igual ao value2
        result = (value1 != value2)
      end
    when 2  # Switch Local
      if @event_id > 0
        key = [$game_map.map_id, @event_id, @params[1]]
        if @params[2] == 0
          result = ($game_self_switches[key] == true)
        else
          result = ($game_self_switches[key] != true)
        end
      end
    when 3  # Temporizador
      if $game_system.timer_working
        sec = $game_system.timer / Graphics.frame_rate
        if @params[2] == 0
          result = (sec >= @params[1])
        else
          result = (sec <= @params[1])
        end
      end
    when 4  # Aqui se definem os casos para Herói
      actor = $game_actors[@params[1]]
      if actor != nil
        case @params[2]
        when 0  # Se está no grupo
          result = ($game_party.actors.include?(actor))
        when 1  # Nome
          result = (actor.name == @params[3])
        when 2  # Habilidade
          result = (actor.skill_learn?(@params[3]))
        when 3  # Arma
          result = (actor.weapon_id == @params[3])
        when 4  # Armadura
          result = (actor.armor1_id == @params[3] or
                    actor.armor2_id == @params[3] or
                    actor.armor3_id == @params[3] or
                    actor.armor4_id == @params[3])
        when 5  # Status
          result = (actor.state?(@params[3]))
        end
      end
    when 5  # Inimigo
      enemy = $game_troop.enemies[@params[1]]
      if enemy != nil
        case @params[2]
        when 0  # Apareceu
          result = (enemy.exist?)
        when 1  # Status
          result = (enemy.state?(@params[3]))
        end
      end
    when 6  # Herói
      character = get_character(@params[1])
      if character != nil
        result = (character.direction == @params[2])
      end
    when 7  # Ouro
      if @params[2] == 0
        result = ($game_party.gold >= @params[1])
      else
        result = ($game_party.gold <= @params[1])
      end
    when 8  # Item
      result = ($game_party.item_number(@params[1]) > 0)
    when 9  # Arma
      result = ($game_party.weapon_number(@params[1]) > 0)
    when 10  # Armadura
      result = ($game_party.armor_number(@params[1]) > 0)
    when 11  # Tecla
      result = (Input.press?(@params[1]))
    when 12  # Script
      result = eval(@params[1])
    end
    # Uma determinante é armazenada em partes
    @branch[@list[@index].indent] = result
    # Se o resultado da determinante for verdadeiro
    if @branch[@list[@index].indent] == true
      # Deletar dados da ramificação
      @branch.delete(@list[@index].indent)
      # Continuar
      return true
    end
    # Se não se coincidir com a condição: comando skip
    return command_skip
  end
end
#===============================================================================
#===============================================================================
#=> FIM DO SCRIPT INTERPRETER
#===============================================================================
#===============================================================================
#=> SCRIPT QUE CUIDA DA JANELA DE MENSAGEM:
#===============================================================================
#===============================================================================
if Var_Config::Mens;class Window_Message < Window_Selectable
  #-----------------------------------------------------------------------------
  #MÉTODO DE ATUALIZAÇÃO
  #-----------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    @cursor_width = 0
    if $game_temp.choice_start == 0
      x = 8
    end
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) {$1}
        if Var_Config::Locais.include?($1.to_i)
          @v=$1.to_s;text.gsub!($1){$game_variables[[$e_id, @v.to_i]]}
        else
          @v=$1.to_s;text.gsub!($1){$game_variables[@v.to_i].to_s} unless $1.nil?
        end
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      text.gsub!(/\\\\/) { "\000" }
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      while ((c = text.slice!(/./m)) != nil)
        if c == "\000"
          c = "\\"
        end
        if c == "\001"
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          next
        end
        if c == "\002"
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          next
        end
        if c == "\n"
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          y += 1
          x = 0
          if y >= $game_temp.choice_start
            x = 8
          end
          next
        end
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        x += self.contents.text_size(c).width
      end
    end
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      if Var_Config::Locais.include?($game_temp.num_input_variable_id)
        number = $game_variables[[$e_id, $game_temp.num_input_variable_id]]
      else
        number = $game_variables[$game_temp.num_input_variable_id]
      end
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
end;end
$varlocal_ss = true
#===============================================================================
#===============================================================================
#=> FIM DO SCRIPT
#===============================================================================
#===============================================================================


[box class=titlebg]
Imagens
[/box]

Não necessário.


[box class=titlebg]
Download
[/box]

Não necessário

[box class=titlebg]
Créditos e Avisos
[/box]

Sasuke_Uchiha pelo script de RMXP, Raizen884 por converter para RMVX qualquer bug podem me avisar já que pode ter algo que não dê certo no RMVX que acabou passando despercebido.