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

MS - Visual Equipment

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

30/04/2014 às 11:57 Última edição: 03/05/2015 às 21:30 por Masked
[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]
~ Masked

Double post, mas por uma boa causa

Atualizei o script, agora é possível usar imagens de qualquer tamanho e é possível definir o número de frames da animação do equipamento, lembrando que se o personagem tiver quatro frames de animação, o equipamento deve ter quatro também, senão pode acontecer de o script pular frames da animação do equipamento.
~ Masked

30/04/2014 às 20:40 #2 Última edição: 05/09/2015 às 19:11 por Makers
Nossa, um script bem legal, eu não testei ainda mas quando
testar dou um edit. Ah, parabéns pelo trabalho :blink:
Prazer, Terror dos Modinha

30/04/2014 às 22:09 #3 Última edição: 30/04/2014 às 22:12 por Khrono
Fala Masked!

Vi seu tópico e achei legal o script, mas também não testei, porque eu teria que desenhar o equipamento não é isso?

Em meus projetos eu não aproveito essa parte de armadura por justamente achar meio sem graça, por que o equipamento "Roupas Comuns" essas coisas até vai, mas as vezes o equipamento é tipo a armadura do Shiryu dos cavaleiros dos zodiacos e o char não muda um fio de cabelo rsrsrs

Parabens e Flw!

É, tem casos que é desnecessário, mas tem vezes que é bem legal, tipo pra sistemas de troca de roupa e tal, ou como você disse, chars que mudam de roupa e mais nada, aí compensa usar esse tipo de script.
E você pode usar os gráficos das peças do gerador do ACE, no meu PC, eles ficam na pasta "C:\Program Files (x86)\RPG Maker VX Ace\Generator\Mini" (sem aspas), lá tem os acessórios e roupas (masculinas na pasta Male e femininas na pasta Female), aí é só você posicionar eles corretamente num char e pronto.

Atualizei o script, agora o efeito se aplica também aos seguidores.
~ Masked

01/05/2014 às 13:13 #5 Última edição: 01/05/2014 às 16:10 por bziperan
É Masked muito obrigado por esse script, pois servirá perfeitamente para meus propósitos.

Uma coisa Masked, ele é customizável? Dá para eu usar em meu projeto que usa 5 frames no char e tem animações nos personagens no combate, posso customizar a esse ponto?

Ola ! Gostaria de uma ajuda  coloquei seu script num projeto pra testar só seu script pra nao ter algum erro com outro mas mesmo assim aparece esta msg

" Script'*MS - Visual Equipment' line 72;NoMethodError ocurred.
undefined method 'equips' for nil:NilClass

o que pode ser?
Heitor Alimo

Citação de: Drymay online 20/04/2015 às 09:47
Ola ! Gostaria de uma ajuda  coloquei seu script num projeto pra testar só seu script pra nao ter algum erro com outro mas mesmo assim aparece esta msg

" Script'*MS - Visual Equipment' line 72;NoMethodError ocurred.
undefined method 'equips' for nil:NilClass

o que pode ser?

Eu também tive esse mesmo problema  :sad: eu queria usar muito esse script, será que tem como fazer uma demo?  :ded:

Opa, deve ter arrumado agora, tentem de novo por favor.

Abrigado por avisarem o/
~ Masked

 :<3:  :rainbow: Ai que show, fucionou e as opções que você adicionou foram bem legais e importantes!!! Agora eu finalmente posso fazer os item únicos que mudam o gráfico do personagem também. Eu gosto muito de opções visuals e gráficas e esse script é um sonho  :T.T:  :*-*:

Quero muito usar, mas aqui nao deu certo, poderia fazer uma demo?

O que exatamente não deu certo? Se você puder dizer eu agradeço, porque assim sei o que preciso corrigir no script, se deu algum erro fazer uma demo não vai ajudar, e se não deu erro provavelmente você não configurou direito.
~ Masked

Não deu nenhum erro, eu apenas coloquei o script acima do main, porém aqui nao funcionou, talvez nao seja compativel com algum ooutro script que eu esteja usando, com a demo, eu poderia ver se fiz tudo certo

Ola sou iniciante e tentei utilizar esse script no meu projeto porem nao fuciono eu uso rmvx ace! sera que tem alguma demo ou algo que possa ajudar a funcionar?

Ola como conseguiu? ja tentei e nunca dar certo poderia me ajudar? :ded: