Hacred Sall
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.



 
InícioProcurarÚltimas imagensRegistrarEntrar

Compartilhe | 
 

 [RMVX] Troca de Formação VX

Ver o tópico anterior Ver o tópico seguinte Ir para baixo 
AutorMensagem
Tomah
Sargento
Sargento
Tomah

Áries

[RMVX] Troca de Formação VX Empty
MensagemAssunto: [RMVX] Troca de Formação VX   [RMVX] Troca de Formação VX Icon_minitimeSeg Jun 29, 2009 3:01 pm

Troca de Formação VX
por Timeaisis


Introdução

Esse é um script simples que adiciona formação (frente/trás) à sua
equipe. Personagens na frente vão tomar e desferir mais dano do que os
que estão atrás. Editável para funcionar com itens e habilidades. Mais
detalhes no script.

Características

1. Interface simples de troca de formação adicionada ao menu padrão
2. Porcentagens de dano customizáveis para personagens de Frente/Trás
3. Porcentagens de defesa customizáveis para personagens de Frente/Trás
4. A Instalação é muito fácil - é só copiar e colar!

Screenshots

[RMVX] Troca de Formação VX 21649d1236865232-troca-de-formacao-vx-screenshot.1

Como usar

Copie o script e insira-o em um espaço vazio acima de Principal.
Depois, modifique as primeiras informações, da linha 27 até a 30, se
quiser mudar o dano das posições. Pronto! Se for customizar ainda mais,
você pode mudar o texto da janela de formação. Esses textos
customizáveis estão em roxo no script.

Demo

Desnecessária, já que é só copiar e colar o script.

script


Código:

   #==============================================================
# - Troca de Formação VX - Versão 1.0
#==============================================================
# Autor  : Timeaisis (timeaisis@gmail.com)
# Versão : 1.0 revisão 1
# Data    : 06 / 08 / 2008
#==============================================================
# Características:
#  -> Interface simples de troca de formação adicionada ao menu padrão
#  -> Porcentagens de dano customizáveis para personagens de Frente/Trás
#  -> Porcentagens de defesa customizáveis para personagens de Frente/Trás
#  -> Instalação muito fácil - é só copiar e colar!
#==============================================================
# Instalação
#  1. Copie isso em um novo bloco de scrpt acima de Principal.
#  2. Mude os valores do topo ao seu gosto.
#  3. Feito!
#==============================================================

# Os seguintes valores determinam a diferença em porcentagem de um membro atrás
# quando está atacando ou defendendo.
# BACK_ATTDEF_PERCENT, por exemplo é o porcento de dano dado a um personagem de
# trás por um ataque físico.
# BACK_ATTACK_PERCENT é o porcento de dano dado a um inimigo por um personagem
# de trás por um ataque físico.
# Os outros 2 são a mesma coisa, só que eles se aplicam a habilidades.
  BACK_ATTDEF_PERCENT = 0.6
  BACK_ATTACK_PERCENT = 0.7
  BACK_SKILLDEF_PERCENT = 0.6
  BACK_SKILL_PERCENT = 0.7
class Scene_Formation < Scene_Base
  #=============================================================
  # * [SETUP] SCENE Janelas e texto da Formação
  #-------------------------------------------------------------
  WIDTH = 172 # Largura da janela

  TOP_TEXT = '- Formação de personagens -' # Texto mostrado na janela do topo quando iniciado
 
  BOTTOM_TEXT = 'Escolha o personagem para mudar sua formação'
  # Texto a ser usado depois

  EXIT_BUTTON = '- Sair -' # Texto do botão de saída
 
  def start
    super
    create_menu_background
    @help1 = Window_Help.new
    @help2 = Window_Help.new
    @help2.y = Graphics.height - @help2.height
    @front_list = []
    @back_list = []
    @act_list = Window_ActorList.new(WIDTH)
    @act_list.x = (Graphics.width - @act_list.width) / 2
    @act_list.y = (Graphics.height - @act_list.height) / 2
    @front_string = "Frente: "
    @back_string = "Trás: "
    @form_select = Window_FormSelect.new(WIDTH)
    @form_select.active = @form_select.visible = false
    @form_select.x = (Graphics.width - @act_list.width) / 2
    @form_select.y = (Graphics.height - @act_list.height) / 2
   
        $game_party.members.each do |i|
        if i.position
          @back_list << i
          @back_string = @back_string + i.name + " "
        else
          @front_list << i
          @front_string = @front_string + i.name + " "
        end
      end
     
      @help2.set_text(@front_string + "                        " + @back_string, 1)
   
    runstep(0)
  end
 
  def update
    super
    if @act_list.active
      @act_list.update
      if Input.trigger?(Input::C)
        @act_list.visible = @act_list.active = true
        @act_list.visible = @act_list.active = true
        case @act_list.define[@act_list.index]
        when 'exit'
          Sound.play_cancel
          $scene = Scene_Menu.new(4)
        else
          runstep(1)
        end
      elsif Input.trigger?(Input::B)
        Sound.play_cancel
        $scene = Scene_Menu.new(4)
      end
    end
  end
 
 
  def terminate
    super
    @act_list.dispose
    @help1.dispose
    @help2.dispose
    dispose_menu_background
  end
 
  def runstep(id)
    case id
    when 0
      @act_list.active = @act_list.visible = true
      @help1.set_text(TOP_TEXT, 1)
    when 1
      Sound.play_decision
      @act_list.define[@act_list.index].change_pos
     
      @back_list2 = []
      @back_string2 = "Trás: "
      @front_list2 = []
      @front_string2 = "Frente: "
     
      $game_party.members.each do |i|
        if i.position
            @back_string2 = @back_string2 + i.name + " "
        else
          @front_string2 = @front_string2 + i.name + " "
        end
      end
     
        @help2.set_text(@front_string2 + "                        " + @back_string2)
 
    end
  end
end

#==============================================================================
# * Window_ActorList
#==============================================================================
class Window_ActorList < Window_Command
  attr_reader :define
  def initialize(width)
    commands = []
    @define = []
    $game_party.members.each do |i|
      commands << i.name
      @define << i
    end
    commands << Scene_Formation::EXIT_BUTTON
    @define << 'exit'
    super(width, commands)
  end
end

#==============================================================================
# * Window_FormationSelect
#==============================================================================
class Window_FormSelect < Window_Command
  attr_reader :define
  def initialize(width)
    commands = []
    @define = []
   
    commands << 'Front'
    commands << 'Back'
   
    commands << Scene_Formation::EXIT_BUTTON
    @define << 'exit'
    @define << 'front'
    @define << 'back'
    super(width, commands)
  end
end

class Scene_Menu < Scene_Base
 
  #--------------------------------------------------------------------------
  # * Criar Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s6 = Vocab::save
    s7 = Vocab::game_end
    s5 = "Formação"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
    @command_window.index = @menu_index
    if $game_party.members.size == 0          # Se o numero de membros é 0
      @command_window.draw_item(0, false)    # Desabilitar item
      @command_window.draw_item(1, false)    # Desabilitar habilidade
      @command_window.draw_item(2, false)    # Desabilitar equipamento
      @command_window.draw_item(3, false)    # Desabilitar status
    end
    if $game_system.save_disabled            # Se o save é proibido
      @command_window.draw_item(5, false)    # Desabilitar save
    end
  end
  #--------------------------------------------------------------------------
  # * Atualização da Seleção de comando
  #--------------------------------------------------------------------------
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 5
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Habilidade, equipmento, status
        start_actor_selection
      when 4      # Save
        $scene = Scene_Formation.new
      when 5      # Formação
        $scene = Scene_File.new(true, false, false)
      when 6      # Finalizar o jogo
        $scene = Scene_End.new
      end
    end
  end
end

class Game_Battler
 
  attr_reader  :position
 
    def initialize
    @battler_name = ""
    @battler_hue = 0
    @hp = 0
    @mp = 0
    @position = false #false = frente
    @action = Game_BattleAction.new(self)
    @states = []                    # Estados (array de ID)
    @state_turns = {}              # Turnos restantes para os estados (Hash)
    @hidden = false 
    @immortal = false
    @counter = false
    clear_extra_values
    clear_sprite_effects
    clear_action_results
  end
 
  def change_pos
    @position = !@position #changed from !@position
  end
 
  #--------------------------------------------------------------------------
  # * Cálculo de dano de ataque normal
  #    attacker : Attacker
  #    Os resultados são substituídos por @hp_damage
  #--------------------------------------------------------------------------
  def make_attack_damage_value(attacker)
    #De-sets counter (For if no enemy attacked last turn)
    if attacker.counter
      attacker.counter_switch
    end
    damage = attacker.atk * 4 - self.def * 2        # base do cálculo
    damage = 0 if damage < 0                        # se negativo, faça 0
    damage *= elements_max_rate(attacker.element_set)  # ajuste elemental
    damage /= 100
    if damage == 0                                  # se dano é 0,
      damage = rand(2)                              # metade do tempo, 1 dano
    elsif damage > 0                                # um número positivo?
      @critical = (rand(100) < attacker.cri)        # dano crítico?
      @critical = false if prevent_critical        # prevenido contra críticos?
      damage *= 3 if @critical                      # ajuste crítico
    end
    damage = apply_variance(damage, 20)            # variação
    damage = apply_guard(damage)                    # ajuste de defesa
   
    #---------------------
    #Começar sistema de posicionamento
    #---------------------
    if self.position                                # ajuste de posição
      damage *= BACK_ATTDEF_PERCENT                #para dano de personagem
      damage = damage.round
    end
   
    if attacker.position                            #ajuste de posição
      damage *= BACK_ATTACK_PERCENT                #para o dano de inimigos
      damage = damage.round
    end
    #---------------------
    #Finalizar sistema de posicionamento
    #---------------------
    @hp_damage = damage                            # Dano de HP
  end
 
  #--------------------------------------------------------------------------
  # * Cálculo de dano cusado por Habilidades ou itens
  #    user : Usuário da habilidade ou item
  #    obj  : Habilidade ou item (para ataques normal, isso é nulo)
  #    Os resultados são substituídos por @hp_damage ou @mp_damage.
  #--------------------------------------------------------------------------
  def make_obj_damage_value(user, obj)
   
    damage = obj.base_damage                        # base do dano
    if damage > 0                                  # um número positivo?
      damage += user.atk * 4 * obj.atk_f / 100      # Ataque F do usuário
      damage += user.spi * 2 * obj.spi_f / 100      # Espírito F do usuário
      unless obj.ignore_defense                    # Exceto para ignorar defesa
        damage -= self.def * 2 * obj.atk_f / 100    # Ataque F do alvo
        damage -= self.spi * 1 * obj.spi_f / 100    # Espírito F do alvo
      end
      damage = 0 if damage < 0                      # Se negativo, tornar 0
    elsif damage < 0                                # um número negativo?
      damage -= user.atk * 4 * obj.atk_f / 100      # Ataque F do usuário
      damage -= user.spi * 2 * obj.spi_f / 100      # Espírito F do usuário
    end
    damage *= elements_max_rate(obj.element_set)    # ajuste elemental
    damage /= 100
    damage = apply_variance(damage, obj.variance)  # variação
    damage = apply_guard(damage)                    # ajuste de defesa
    #---------------------
    #Começar sistema de posicionamento
    #---------------------
    if self.position                                # ajuste de posição
      damage *= BACK_SKILLDEF_PERCENT              #para dano de personagem
      damage = damage.round
    end
   
    if user.position                            #ajuste de posição
      damage *= BACK_SKILL_PERCENT              #para dano de inimigos
      damage = damage.round
    end
    #---------------------
    #Finalizar sistema de posicionamento
    #---------------------
    if obj.damage_to_mp 
      @mp_damage = damage                          # dano de MP
    else
      @hp_damage = damage                          # dano de HP
    end
  end
 
end

class Window_Status < Window_Base

  def draw_basic_info(x, y)
    draw_actor_level(@actor, x, y + WLH * 0)
    draw_actor_state(@actor, x, y + WLH * 1)
    draw_actor_hp(@actor, x, y + WLH * 2)
    draw_actor_mp(@actor, x, y + WLH * 3)
    #Start Formation Draw
    self.contents.font.bold = true
    self.contents.font.color = system_color
    self.contents.draw_text(8, 110, 64, WLH*3, "Formação:")
    self.contents.font.color = normal_color
    if @actor.position
      self.contents.draw_text(70, 110, 32, WLH*3, "Trás")
    else
      self.contents.draw_text(70, 110, 32, WLH*3, "Frente")
    end
    self.contents.font.bold = false

  end
end

class Scene_File < Scene_Base
    def return_scene
    if @from_title
      $scene = Scene_Title.new
    elsif @from_event
      $scene = Scene_Map.new
    else
      $scene = Scene_Menu.new(5)
    end
  end
end

class Scene_End < Scene_Base
  def return_scene
    $scene = Scene_Menu.new(6)
  end
end

class Window_MenuStatus < Window_Selectable
 
    def refresh
    self.contents.clear
    @item_max = $game_party.members.size
    for actor in $game_party.members
      draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
      x = 104
      y = actor.index * 96 + WLH / 2
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 120, y)
      draw_actor_level(actor, x, y + WLH * 1)
      draw_actor_state(actor, x, y + WLH * 2)
      draw_actor_hp(actor, x + 120, y + WLH * 1)
      draw_actor_mp(actor, x + 120, y + WLH * 2)
      self.contents.font.bold = true
      self.contents.font.color = system_color
      #self.contents.font.color = normal_color
      if actor.position
      self.contents.draw_text(x+20, y+30, 32, WLH*3, "Trás")
        else
      self.contents.draw_text(x+20, y+30, 32, WLH*3, "Frente")
        end
      self.contents.font.bold = false

    end
  end
end

Perguntas Frequentes

Não há perguntas frequentes.

Créditos e Agradecimentos

1. Timeasis pelo script
2. Tomah (eu) por traduzir.

Observações do Autor

Se quiser usar em um projeto, seria bom dar créditos. [RMVX] Troca de Formação VX Rmb_28
Ir para o topo Ir para baixo
Book Brat
Aspirante
Aspirante
Book Brat

Touro Ocupação : Eventer e Mapper

[RMVX] Troca de Formação VX Empty
MensagemAssunto: Re: [RMVX] Troca de Formação VX   [RMVX] Troca de Formação VX Icon_minitimeSeg Jun 29, 2009 3:09 pm

Legal esse script, mais simples que o KGC LargeParty, que aqui sempre dá bug. Parabéns!
Ir para o topo Ir para baixo
http://blogs.rpgmakerbrasil.com/bookstore/
 

[RMVX] Troca de Formação VX

Ver o tópico anterior Ver o tópico seguinte Ir para o topo 

 Tópicos semelhantes

+
Página 1 de 1

Permissões neste sub-fórumNão podes responder a tópicos
Hacred Sall :: Centro de Operações :: Armazém :: Scripts-
Ir para: