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

MS - Visual Equipment

Iniciado por Brandt, 30/04/2014 às 11:57

Citação de: Brandt 9 online 30/04/2014 às 11:57
[box2 class=titlebg]MS - Visual Equipment[/box2]


[box2 class=titlebg title=Introdução]Eu decidi fazer um script de visual equip simples, pra treinar e pra ver se ajudo alguém também  :-P[/box2]

[box2 class=titlebg title=Características]O script ainda é bem limitado (ainda vou atualizar ele com algumas coisas), mas ele cria gráficos para os equipamentos que o personagem está usando e põe junto do personagem, nada demais.[/box2]

[box2 class=titlebg title=Vídeo]

Vídeo por Fogomax, valeu cara =D
[/box2]

[box2 class=titlebg title=Instruções]No script, nos comentários em verde[/box2]

[box2 class=titlebg title=Script]
#==============================================================================
# ** MS - Visual Equipment
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
#==============================================================================
# Instruções:
#------------------------------------------------------------------------------
# Para definir um gráfico para o equipamento, escreva nas notas dele:
# <Graphic = Nome_do_arquivo>
# O arquivo "Nome_do_arquivo" deve estar na pasta Graphics/Characters do seu
# projeto
#
# Para definir mais de um frame, para o caso de um script de extra frame,
# escreva isso nas notas do equipamento:
# <Frames = x>
# Sendo o 'x' o número de frames
#
# Para definir a prioridade (eixo Z) do equipamento:
# <Z = x>
# Sendo o 'x' a prioridade do equipamento
#
# Para definir os gráficos para um evento, é preciso criar um comentário nele
# com o seguinte conteúdo:
# <Equips: x,y,z>
# Sendo x, y e z os IDs dos equipamentos, se x for A1, a armadura de id 1 será
# atribuída ao evento, se y for W3, a arma de id 3 será atribuída a ele,
# você pode colocar quantos IDs quiser na lista
#==============================================================================
($imported ||= {})[:ms_visual_equip] = true
module MBS
  module VisualEquip
#==============================================================================
# Configurações
#==============================================================================
    # Ajuste horizontal da posição do equipamento
    POSITION_ADJUST_X = -16
   
    # Ajuste vertical da posição do equipamento
    POSITION_ADJUST_Y = 0
   
    # Switch que ativa/desativa o visual equip
    SWITCH = 42
   
    # Largura do sprite do equipamento
    BITMAP_WIDTH = 96
   
    # Altura do sprite do equipamento
    BITMAP_HEIGHT = 128
#==============================================================================
# Fim das configurações
#==============================================================================
  end
end
#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base
  alias ms_initlz initialize
  alias ms_updt update
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #     viewport  : camada
  #     character : personagem (Game_Character)
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil)
    create_equip_sprite(viewport)
    ms_initlz(viewport,character)
  end
 
  #--------------------------------------------------------------------------
  # * Criação do sprite do equipamento
  #--------------------------------------------------------------------------
  def create_equip_sprite(viewport)
    @equipments = []
    @equip_sprite = Sprite.new(viewport)
    @equip_sprite.bitmap = Bitmap.new(MBS::VisualEquip::BITMAP_WIDTH,MBS::VisualEquip::BITMAP_HEIGHT)
    @equip_sprite.oy = 4
  end
 
  #--------------------------------------------------------------------------
  # Verificação de alteração no equipamento
  #--------------------------------------------------------------------------
  def equip_changed?
    if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
      if @character.is_a?(Game_Player)
        return @old != $game_party.members[0].equips
      else
        return @old != $game_party.members[@character.member_index].equips
      end
    elsif @character.is_a?(Game_Event)
      @character.list.each do |command|
        if command.code == 108
          command.parameters[0][/<Equips\s*:\s*([AW0-9,]+)>/im]
          $1.scan(/-*\w+/).collect{|n|n}.each do|equip|
            if equip[0] == "A"
              @equipments << $data_armors[equip[/\d+/].to_i]
            elsif equip[0] == "W"
              @equipments << $data_weapons[equip[/\d+/].to_i]
            end
          end
        end
      end   
      return @old != @equipments
    end
  end
 
  #--------------------------------------------------------------------------
  # * Atualização da tela
  #--------------------------------------------------------------------------
  def update
    ms_updt
    if ($game_switches || [])[MBS::VisualEquip::SWITCH]# && equip_changed?
      update_equipment
    else
      @equip_sprite.dispose
    end
  end
 
  #-------------------------------------------------------------------------
  # * Atualização do gráfico de equipamento
  #-------------------------------------------------------------------------
  def update_equipment
   
    @equipments.clear
   
    pattern = @character.pattern < 3 ? @character.pattern : 1
    frames = 3
    if !@equip_sprite
      create_equip_sprite(self.viewport)
    elsif @equip_sprite.disposed?
      create_equip_sprite(self.viewport)
    end
    @equip_sprite.bitmap.clear
    bitmap = Bitmap.new(32,32)
   
     pr = ->(equip) {
      next if equip.nil?
        equip.note.each_line {|line|
        bitmap = Cache.character($1) if line =~ /<Graphic\s*=\s*([[:ascii:]]+)>/i
        frames = $1.to_i if line =~ /<Frames\s*=\s*(\d+)>/i
        }
        rect = Rect.new(pattern*(bitmap.width/frames),(@character.direction/2-1)*(bitmap.height/4),bitmap.width/frames,bitmap.height/4)
        @equip_sprite.bitmap.blt((frames/3-1)*4,0,bitmap,rect)
    }
   
    if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
     
      if @character.is_a?(Game_Player)
     
      $game_party.members[0].equips.each {|equip|
        @equipments << equip
      }
        @old = $game_party.members[0].equips
      else
      return unless $game_party.members[@character.member_index]
      $game_party.members[@character.member_index].equips.each {|equip|
        @equipments << equip
      }
       @old = $game_party.members[@character.member_index].equips
      end
     
    elsif @character.is_a?(Game_Event)
      @character.list.each {|command|
        if command.code == 108
          command.parameters[0][/<Equips\s*:\s*([AW0-9,]+)>/im]
          $1.scan(/-*\w+/).collect{|n|n}.each {|equip|
            if equip[0] == "A"
              @equipments << $data_armors[equip[/\d+/].to_i]
            elsif equip[0] == "W"
              @equipments << $data_weapons[equip[/\d+/].to_i]
            end
          }
        end
      }   
      @old = @equipments
      end
      @equipments.compact.sort do |a, b|
        (a.note =~ /<z[ ]*=[ ]*(\d+)[ ]*>/i ? $1.to_i : 0) <=> (b.note =~ /<z[ ]*=[ ]*(\d+)[ ]*>/i ? $1.to_i : 0)
      end.each {|equip|
        pr[equip]
      }
     
      @equip_sprite.x = @character.screen_x + MBS::VisualEquip::POSITION_ADJUST_X
      @equip_sprite.y = @character.screen_y - bitmap.height/4 + @character.shift_y + @character.jump_height + MBS::VisualEquip::POSITION_ADJUST_Y
      @equip_sprite.z = @character.screen_z + 1
    end
   
    alias mbsdisps dispose
   
    def dispose
      mbsdisps
      @equip_sprite.dispose
    end
end
#==============================================================================
# ** Game_Follower
#==============================================================================
class Game_Follower < Game_Character
  attr_reader :member_index
end

Cole acima do Main[/box2]

[box2 class=titlebg title=Créditos e Agradecimentos]
- a mim, por criar e disponibilizar[/box2]

Parabens pelo Pluguin. Porém eu nao consegui configurar. Eu sei muito sobre Mecanicas existentes da engine
porém pluguins ainda estou aprendendo.
Sei que voce explicou. Mas para mim a explicação
foi básica para quem esta começando.

poderia alguem me ajudar a configurar este ?

eu ja fiz varias variacoes de armaduras
passei semanas ja desenhando varios modelos
e ja fiz os sprite tudo organizadinho.

so falta configurar o pluguin....

se a armadura tivesse opcao de acionar evento comum como existe nos "itens" eu  teria
dado outro jeito....

Por favor ajudem ai pessoal

Plugin? :sera:
Antes de mais nada, certifique-se de que está usando a engine correta. Plugins são usados apenas pelo RPG Maker MV, o script desse tópico é para o RPG Maker VX Ace.

O que você não entendeu? A explicação é simples pois as configurações são simples.

Já tem os gráficos dos equipamentos prontos, certo? Então é só ir na aba de equipamentos e adicionar a tag <Graphic = Nome_do_arquivo> nas notas do equipamento desejado (você disse que entende da engine, então irei supor que sabe onde as notas ficam), especificando o nome do arquivo que corresponderá ao equipamento.

Você também pode usar <Z = x> para mudar a prioridade dos gráficos do equiparente sobre o personagem. Ainda é possível usar <Frames = x> para caso os gráficos do equipamento possuam mais frames que o padrão.