🤔 Para Refletir : "Números são apenas números, não estrague seu dia por causa deles." - Ricky O Bardo

Actor Picture por Classe

Membro Membro
Postagens
32
Bravecoins
80
Olá pessoas. Estou com um probleminha que está me tirando o sono ultimamente.

Eu estou usando o Script Actor Picture de MOG Hunter (Atelier RGSS) no meu jogo. Esse script serve para mostrar uma imagem do ator quando é o seu turno na batalha.

Código:
#==============================================================================
# +++ MOG - ACTOR PICTURE CM  (v1.4) +++
#==============================================================================
# By Moghunter 
# http://www.atelier-rgss.com/
#==============================================================================
# Apresenta a imagem do personagem durante a seleção de comandos, com efeitos
# animados.
#==============================================================================
# ? Definindo o nome das imagens dos battlers. 
#==============================================================================
# 1 - As imagens devem ser gravadas na pasta 
#
# GRAPHICS/PICTURES
#
# 2 - Nomeie os  arquivos de imagens da seguinte forma.
#
# 
# ACTOR + ID
#
# EG
#
# ACTOR1.png
#
#==============================================================================
module MOG_ACTOR_PICTURE_CM 
  #Posição da imagem do battler. (Para fazer ajustes)
  PICTURE_POSITION = [0, 0]  
  
  #Definição da opacidade da imagem.
  PICTURE_OPACITY = 255
  
  #Velocidade de deslize
  SLIDE_SPEED = 555 
  
  #Ativar o efeito da imagem respirando.
  BREATH_EFFECT = false
  
  #Definição da prioridade  da imagem na tela.
  PICTURE_PRIORITY_Z = 103
end

$imported = {} if $imported.nil?
$imported[:actor_picture_cm] = true

#===============================================================================
# ? Sprite_Battler_CM
#===============================================================================
class Sprite_Battler_CM < Sprite
  include MOG_ACTOR_PICTURE_CM 
  
  #--------------------------------------------------------------------------
  # ? Initialize
  #--------------------------------------------------------------------------  
  def initialize(viewport = nil,battler_id = -1)
      super(viewport)
      filename = "Actor" + battler_id.to_s
      self.bitmap = Cache.picture(filename) rescue nil
      self.bitmap = Cache.picture("") if self.bitmap == nil
      sc = (Graphics.width / 2)  - (self.bitmap.width / 2) + PICTURE_POSITION[0]
      @size = [self.bitmap.width + PICTURE_POSITION[0] ,sc]      
      self.visible = false
      self.opacity = 0
      self.z = PICTURE_PRIORITY_Z
      self.ox = 0
      self.oy = self.bitmap.height
      self.x = -@size[0]
      self.y = (Graphics.height + 10) + PICTURE_POSITION[1]      
      @breach_effect = [1.0,0]
      @battler_id = battler_id
      @active =  false
      @cm_visible = false
  end  
  
  #--------------------------------------------------------------------------
  # ? Dispose
  #--------------------------------------------------------------------------  
  def dispose
      super
      self.bitmap.dispose
  end
  
  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------  
  def update
      super
      update_slide
  end  
  
  #--------------------------------------------------------------------------
  # ? Active Battler
  #--------------------------------------------------------------------------      
  def active_battler(battler_id) 
      @active = @battler_id == battler_id ? true : false
      self.visible = true if @active
      @cm_visible = false if !@active 
  end
  
  #--------------------------------------------------------------------------
  # ? Refresh Battler CM
  #--------------------------------------------------------------------------        
  def refresh_battler(cm_visible, battler_index)
      @cm_visible = cm_visible
      active_battler(battler_index)
  end  
  
  #--------------------------------------------------------------------------
  # ? Update Slide
  #--------------------------------------------------------------------------  
  def update_slide
      if !@cm_visible
           self.x -= SLIDE_SPEED if self.x > -@size[0] 
           self.opacity -= 25
           if self.x <= -@size[0] or self.opacity == 0
              self.visible = false 
              self.opacity = 0
              self.x = -@size[0]
           end   
        else
           self.x += SLIDE_SPEED if self.x < @size[1] 
           self.x = @size[1] if self.x > @size[1] 
           self.opacity += 10 if self.opacity < PICTURE_OPACITY 
           self.opacity = PICTURE_OPACITY if self.opacity > PICTURE_OPACITY 
           update_breath_effect
      end         
  end
  
  #--------------------------------------------------------------------------
  # ? Update Breath Effect
  #--------------------------------------------------------------------------    
  def update_breath_effect
      return if !BREATH_EFFECT
      @breach_effect[1] += 1
      case @breach_effect[1]
         when 0..30
             @breach_effect[0] += 0.0004
         when 31..50
             @breach_effect[0] -= 0.0004
         else  
         @breach_effect[1] = 0
         @breach_effect[0] = 1.truncate
      end
      self.zoom_y = @breach_effect[0]
  end  
  
end

#===============================================================================
# ? Spriteset_Battle
#===============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # ? Create Actors
  #--------------------------------------------------------------------------    
  alias mog_battler_cm_create_actors create_actors
  def create_actors
      mog_battler_cm_create_actors
      create_battler_pictures
  end
  
  #--------------------------------------------------------------------------
  # ? Dispose
  #--------------------------------------------------------------------------    
  alias mog_battler_cm_dispose dispose 
  def dispose
      mog_battler_cm_dispose
      dispose_battler_cm
  end  

  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------    
  alias mog_battler_cm_update update
  def update
      mog_battler_cm_update
      update_battler_cm
  end    

  #--------------------------------------------------------------------------
  # ? Create Battler Pictures
  #--------------------------------------------------------------------------    
  def create_battler_pictures
      @battler_pictures = []
      for i in $game_party.battle_members
          @battler_pictures.push(Sprite_Battler_CM.new(@viewport1,i.id))
      end    
  end   
  
  #--------------------------------------------------------------------------
  # ? Dispose Battler CM
  #--------------------------------------------------------------------------    
  def dispose_battler_cm
      return if @battler_pictures == nil
      @battler_pictures.each {|sprite| sprite.dispose }
  end  
 
  #--------------------------------------------------------------------------
  # ? Update Battler CM
  #--------------------------------------------------------------------------    
  def update_battler_cm
      return if @battler_pictures == nil
      @battler_pictures.each {|sprite| sprite.update }
  end    
     
  #--------------------------------------------------------------------------
  # ? Update CM Pictures
  #--------------------------------------------------------------------------      
  def update_cm_picture(cm_visible, battler_index)
      return if @battler_pictures == nil
      @battler_pictures.each {|sprite| sprite.refresh_battler(cm_visible, battler_index) }
  end  
  
end

#===============================================================================
# ? Scene_Battle
#===============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------        
  alias mog_cm_picture_update update
  def update
      mog_cm_picture_update  
      update_picture_visible
  end  
  
  #--------------------------------------------------------------------------
  # ? Update Battler CM Active
  #--------------------------------------------------------------------------      
  def update_picture_visible
      return if @actor_command_window == nil
      cm_visible = can_cm_picture_visible?      
      cm_id = BattleManager.actor.id rescue -1
      @spriteset.update_cm_picture(cm_visible, cm_id)
  end  
  
  #--------------------------------------------------------------------------
  # ? Can CM Picture Visible
  #--------------------------------------------------------------------------        
  def can_cm_picture_visible?
      return false if (@actor_window.active or @enemy_window.active) rescue return
      return false if BattleManager.actor == nil      
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ? Execute Action
  #--------------------------------------------------------------------------        
  alias mog_cm_picture_execute_action execute_action
  def execute_action
      @spriteset.update_cm_picture(false, -1) if @spriteset != nil 
      mog_cm_picture_execute_action 
  end
  
end

A minha dúvida/pedido é:
Tem como colocar para ao invés da imagem ser chamada pelo id do ator ela ser chamada pela id da classe desse ator? (Tipo, personagem João quando está na classe de Guerreiro mostra uma imagem, como ladino mostra outra.)
Se sim como posso editar o script para isso acontecer?

Muito obrigado, povo maravilhoso. \o/
 
Não cheguei a testar, mas vê se isso funciona pra ti:
Código:
#==============================================================================
# +++ MOG - ACTOR PICTURE CM  (v1.4) +++
#==============================================================================
# By Moghunter 
# http://www.atelier-rgss.com/
#==============================================================================
# Apresenta a imagem do personagem durante a seleção de comandos, com efeitos
# animados.
#==============================================================================
# ? Definindo o nome das imagens dos battlers. 
#==============================================================================
# 1 - As imagens devem ser gravadas na pasta 
#
# GRAPHICS/PICTURES
#
# 2 - Nomeie os  arquivos de imagens da seguinte forma.
#
# 
# ACTOR + ID
#
# EG
#
# ACTOR1.png
#
#==============================================================================
module MOG_ACTOR_PICTURE_CM 
  #Posição da imagem do battler. (Para fazer ajustes)
  PICTURE_POSITION = [0, 0]  
  
  #Definição da opacidade da imagem.
  PICTURE_OPACITY = 255
  
  #Velocidade de deslize
  SLIDE_SPEED = 555 
  
  #Ativar o efeito da imagem respirando.
  BREATH_EFFECT = false
  
  #Definição da prioridade  da imagem na tela.
  PICTURE_PRIORITY_Z = 103
end

$imported = {} if $imported.nil?
$imported[:actor_picture_cm] = true

#===============================================================================
# ? Sprite_Battler_CM
#===============================================================================
class Sprite_Battler_CM < Sprite
  include MOG_ACTOR_PICTURE_CM 
  
  #--------------------------------------------------------------------------
  # ? Initialize
  #--------------------------------------------------------------------------  
  def initialize(viewport = nil,battler_id = -1)
      super(viewport)
      filename = "Actor" + battler_id.to_s
      self.bitmap = Cache.picture(filename) rescue nil
      self.bitmap = Cache.picture("") if self.bitmap == nil
      sc = (Graphics.width / 2)  - (self.bitmap.width / 2) + PICTURE_POSITION[0]
      @size = [self.bitmap.width + PICTURE_POSITION[0] ,sc]      
      self.visible = false
      self.opacity = 0
      self.z = PICTURE_PRIORITY_Z
      self.ox = 0
      self.oy = self.bitmap.height
      self.x = -@size[0]
      self.y = (Graphics.height + 10) + PICTURE_POSITION[1]      
      @breach_effect = [1.0,0]
      @battler_id = battler_id
      @active =  false
      @cm_visible = false
  end  
  
  #--------------------------------------------------------------------------
  # ? Dispose
  #--------------------------------------------------------------------------  
  def dispose
      super
      self.bitmap.dispose
  end
  
  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------  
  def update
      super
      update_slide
  end  
  
  #--------------------------------------------------------------------------
  # ? Active Battler
  #--------------------------------------------------------------------------      
  def active_battler(battler_id) 
      @active = @battler_id == battler_id ? true : false
      self.visible = true if @active
      @cm_visible = false if !@active 
  end
  
  #--------------------------------------------------------------------------
  # ? Refresh Battler CM
  #--------------------------------------------------------------------------        
  def refresh_battler(cm_visible, battler_index)
      @cm_visible = cm_visible
      active_battler(battler_index)
  end  
  
  #--------------------------------------------------------------------------
  # ? Update Slide
  #--------------------------------------------------------------------------  
  def update_slide
      if !@cm_visible
           self.x -= SLIDE_SPEED if self.x > -@size[0] 
           self.opacity -= 25
           if self.x <= -@size[0] or self.opacity == 0
              self.visible = false 
              self.opacity = 0
              self.x = -@size[0]
           end   
        else
           self.x += SLIDE_SPEED if self.x < @size[1] 
           self.x = @size[1] if self.x > @size[1] 
           self.opacity += 10 if self.opacity < PICTURE_OPACITY 
           self.opacity = PICTURE_OPACITY if self.opacity > PICTURE_OPACITY 
           update_breath_effect
      end         
  end
  
  #--------------------------------------------------------------------------
  # ? Update Breath Effect
  #--------------------------------------------------------------------------    
  def update_breath_effect
      return if !BREATH_EFFECT
      @breach_effect[1] += 1
      case @breach_effect[1]
         when 0..30
             @breach_effect[0] += 0.0004
         when 31..50
             @breach_effect[0] -= 0.0004
         else  
         @breach_effect[1] = 0
         @breach_effect[0] = 1.truncate
      end
      self.zoom_y = @breach_effect[0]
  end  
  
end

#===============================================================================
# ? Spriteset_Battle
#===============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # ? Create Actors
  #--------------------------------------------------------------------------    
  alias mog_battler_cm_create_actors create_actors
  def create_actors
      mog_battler_cm_create_actors
      create_battler_pictures
  end
  
  #--------------------------------------------------------------------------
  # ? Dispose
  #--------------------------------------------------------------------------    
  alias mog_battler_cm_dispose dispose 
  def dispose
      mog_battler_cm_dispose
      dispose_battler_cm
  end  

  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------    
  alias mog_battler_cm_update update
  def update
      mog_battler_cm_update
      update_battler_cm
  end    

  #--------------------------------------------------------------------------
  # ? Create Battler Pictures
  #--------------------------------------------------------------------------    
  def create_battler_pictures
      @battler_pictures = []
      for i in $game_party.battle_members
          @battler_pictures.push(Sprite_Battler_CM.new(@viewport1,i.class_id))
      end    
  end   
  
  #--------------------------------------------------------------------------
  # ? Dispose Battler CM
  #--------------------------------------------------------------------------    
  def dispose_battler_cm
      return if @battler_pictures == nil
      @battler_pictures.each {|sprite| sprite.dispose }
  end  
 
  #--------------------------------------------------------------------------
  # ? Update Battler CM
  #--------------------------------------------------------------------------    
  def update_battler_cm
      return if @battler_pictures == nil
      @battler_pictures.each {|sprite| sprite.update }
  end    
     
  #--------------------------------------------------------------------------
  # ? Update CM Pictures
  #--------------------------------------------------------------------------      
  def update_cm_picture(cm_visible, battler_index)
      return if @battler_pictures == nil
      @battler_pictures.each {|sprite| sprite.refresh_battler(cm_visible, battler_index) }
  end  
  
end

#===============================================================================
# ? Scene_Battle
#===============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------        
  alias mog_cm_picture_update update
  def update
      mog_cm_picture_update  
      update_picture_visible
  end  
  
  #--------------------------------------------------------------------------
  # ? Update Battler CM Active
  #--------------------------------------------------------------------------      
  def update_picture_visible
      return if @actor_command_window == nil
      cm_visible = can_cm_picture_visible?      
      cm_id = BattleManager.actor.class_id rescue -1
      @spriteset.update_cm_picture(cm_visible, cm_id)
  end  
  
  #--------------------------------------------------------------------------
  # ? Can CM Picture Visible
  #--------------------------------------------------------------------------        
  def can_cm_picture_visible?
      return false if (@actor_window.active or @enemy_window.active) rescue return
      return false if BattleManager.actor == nil      
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ? Execute Action
  #--------------------------------------------------------------------------        
  alias mog_cm_picture_execute_action execute_action
  def execute_action
      @spriteset.update_cm_picture(false, -1) if @spriteset != nil 
      mog_cm_picture_execute_action 
  end
  
end
Só mudei as duas linhas que puxam a id do jogador para puxar a id da classe.
Essas linhas:
def create_battler_pictures comentou:
@battler_pictures.push(Sprite_Battler_CM.new(@viewport1,i.id))
def update_picture_visible comentou:
cm_id = BattleManager.actor.id rescue -1
Só troquei o .id por .class_id
O funcionamento é o mesmo, só que em vez de colocar a id do jogador coloca a id da classe.
 
Aaah consegui fazer dar certo!! \o/

No começo o seu código deu erro, mas deu pra ver pela mensagem que provavelmente tinha mais algumas linhas que precisava substituir o comando de actor_id por class_id, então comecei a caçar pelo script todo e até renomeei algumas variáveis pra ficar mais simples.

No final todas as imagens acabaram sumindo mas eu imaginei que como o script funciona vendo primeiro o turno do actor e depois vendo a classe desse actor deveria haver alguma espécie de ligação entre o actor e a classe durante o código. Pelo menos é assim que funciona em banco de dados, sql e tals (que eu me lembre).

No final apenas alterei a linha de código do Update_Picture_Visible para
cm_id = BattleManager.actor.class.id rescue -1


Foi totalmente um tiro cego mas acabou funcionando.

Muito obrigado pela ajuda mesmo. Essa dúvida tem me tirado do sério é muito legal vê-la resolvida.
Muitos thanks. \o/
 
Voltar
Topo