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

Event Caption Script

Iniciado por Sourcecode, 07/06/2014 às 20:20

07/06/2014 às 20:20 Última edição: 08/06/2014 às 10:45 por Sourcecode
Event Captions Script v0.6

Compativel com: RMVXA
Compatibilidade: boa
Facilidade de uso: fácil
Lag gerado: desprezível

[box class=titlebg]
Condições de Uso
[/box]
Sem restrições

[box class=titlebg]
Para que serve o script
[/box]
Script simples adaptado do curso do Khas de RGSS3 para mostrar um texto acima do evento, font totalmente personalizável através de constantes.

Atualização v0.6, nova opção de mostrar o texto apenas ao tocar no jogador, estilo Chrono Trigger, para isso use a constante OnlyOnPlayerTouch com o valor true, caso contrário se quiser que apareça sempre deixe o valor como false.

[box class=titlebg]
Imagens
[/box]
Spoiler
[close]

[box class=titlebg]
Script
[/box]
#
#    x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
#
#    Event Captions Script v0.6 - SourceCode
#    Adaptado do curso de RGSS3 do Khas -> http://arcthunder.blogspot.com
#
#    Para usar coloque um comentário em seus eventos com: cmd:nome=O TíTULO QUE VOCÊ QUISER
#
#    x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
#

module EventCaptions
  
  #cor da fonte
  FontColor = Color.new(255,255,255)    
  #nome da fonte
  FontName = "Verdana"     
  #fonte negrito?
  FontBold = true                       
  #tamanho da fonte
  FontSize = 14                         
  #posição em relação ao evento
  OffSet = 48   
  #somente quando o jogador ficar sobre o evento
  OnlyOnPlayerTouch = true
  
end

class Spriteset_Map
  alias capchars_initialize initialize
  alias capchars_dispose dispose
  alias capchars_update update  
  def initialize
    create_names
    capchars_initialize    
  end  
  def update
    capchars_update
    update_names
  end  
  def dispose
    capchars_dispose
    dispose_names
  end  
  def create_names    
    @names = []       
    for event in $game_map.events.values
      next if event.list == nil      
      for command in event.list
        next if command.code != 108        
        if command.parameters[0].include?("cmd:nome=")        
          name = command.parameters[0].sub("cmd:nome=","")  
          @names.push(Sprite_Name.new(event,name))
        end 
      end
    end
  end  
  def update_names
    for sprite in @names
      sprite.update
    end
  end  
  def dispose_names
    for sprite in @names
      sprite.dispose
    end
    @names.clear
  end  
end

class Sprite_Name < Sprite
  
  def initialize(event, name)
    super(nil) 
    
    @event = event
    @name = name
    
    if EventCaptions::OnlyOnPlayerTouch == false
      if self.bitmap == nil 
        self.bitmap = Bitmap.new(120,20)
      else 
        self.bitmap.clear
      end
      self.ox = 60
      self.z = 999
      self.bitmap.font.size = EventCaptions::FontSize
      self.bitmap.font.bold = EventCaptions::FontBold
      self.bitmap.font.name = EventCaptions::FontName
      self.bitmap.font.color = EventCaptions::FontColor
      self.bitmap.draw_text(0,0,120,20,@name,1) 
    end
  end
  
  def update
    super  
       
    self.x = @event.screen_x
    self.y = @event.screen_y - EventCaptions::OffSet
    #verifica se a opcao de on player touch esta ativa
    #entao verifica se a posicao do player é igual a do evento
    #só desenha o texto se o player estiver com x e y igual
    #ao evento
    if EventCaptions::OnlyOnPlayerTouch
      if @event.x == $game_player.x and @event.y == $game_player.y        
        if self.bitmap == nil 
          self.bitmap = Bitmap.new(120,20)
        else 
          self.bitmap.clear
        end
        self.ox = 60
        self.z = 999
        self.bitmap.font.size = EventCaptions::FontSize
        self.bitmap.font.bold = EventCaptions::FontBold
        self.bitmap.font.name = EventCaptions::FontName
        self.bitmap.font.color = EventCaptions::FontColor
        self.bitmap.draw_text(0,0,120,20,@name,1)             
       else if self.bitmap != nil
         self.bitmap.clear
       end
      end 
    end  
  end 
  
  def dispose
    self.bitmap.dispose
    self.bitmap = nil    
    super    
  end
end



[box class=titlebg]
Créditos e Avisos
[/box]
Feito por mim, adaptado da video aula de RGSS3 do Khas

Primeiramente,parabéns pelo Script,é bom ter novos scripter's rondando por aqui!
Script muito bom,talvez use,talvez não.Quem sabe né? XD!
Obs:Icone do tópico errado hein.

Cadê o botão de curtir? Hehehe. Gostei, talvez eu use em algum lugar :D

Citação de: 木村 かな online 07/06/2014 às 20:23
Primeiramente,parabéns pelo Script,é bom ter novos scripter's rondando por aqui!
Script muito bom,talvez use,talvez não.Quem sabe né? XD!
Obs:Icone do tópico errado hein.

Obrigado, pretendo ficar rsrs...
Já troquei o ícone lá, falha minha, primeiro post.

 Legal.. mas para o caso de estudos.. veja como você poderia ter feito o script :
#
#    x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
#
#    Event Captions Script - SourceCode
#    Adaptado do curso de RGSS3 do Khas -> http://arcthunder.blogspot.com
#
#    Para usar coloque um comentário em seus eventos com: cmd:nome=[i]O TíTULO QUE VOCÊ QUISER[/i]
#
#    x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
#

module EventCaptions
  
  #cor da fonte
  FontColor = Color.new(255,255,255)    
  #nome da fonte
  FontName = "Verdana"     
  #fonte negrito?
  FontBold = true                       
  #tamanho da fonte
  FontSize = 14                         
  #posição em relação ao evento
  OffSet = 48                           
  
end

class Spriteset_Map
  alias capchars_initialize initialize
  alias capchars_dispose dispose
  alias capchars_update update  
  def initialize
    @names = []
    $game_map.events.values.each { |event|
      next if event.list.nil?
      for command in event.list
        next unless command.code == 108
        @names.push(Sprite_Name.new(event, String($1))) if command.parameters[0].match(/cmd:nome=([^>]*)/im)
      end
    }
    capchars_initialize    
  end  
  
  def update
    capchars_update
    @names.each(&:update)
  end  
  
  def dispose
    capchars_dispose
    @names.each(&:dispose)
    @names.clear
  end  
end

class Sprite_Name < Sprite
  
  def initialize(event, name)
    super(nil)
    self.bitmap = Bitmap.new(120,20)
    @event = event
    self.ox = 60
    self.z = 999
    self.bitmap.font.size = EventCaptions::FontSize
    self.bitmap.font.bold = EventCaptions::FontBold
    self.bitmap.font.name = EventCaptions::FontName
    self.bitmap.font.color = EventCaptions::FontColor
    self.bitmap.draw_text(0,0,120,20,name,1)
  end
  
  def update
    super
    self.x = @event.screen_x
    self.y = @event.screen_y - EventCaptions::OffSet
  end 
  
  def dispose
    self.bitmap.dispose
    super    
  end
end



Agradeço, usarei em versões futuras, ainda estou aprendendo a linguagem, programo em outras linguagens estou tentando aprender rapidamente o RGSS3, tem 3 dias que comecei.

Citação de: Dax online 07/06/2014 às 20:53
Legal.. mas para o caso de estudos.. veja como você poderia ter feito o script :
#
#    x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
#
#    Event Captions Script - SourceCode
#    Adaptado do curso de RGSS3 do Khas -> http://arcthunder.blogspot.com
#
#    Para usar coloque um comentário em seus eventos com: cmd:nome=[i]O TíTULO QUE VOCÊ QUISER[/i]
#
#    x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
#

module EventCaptions
  
  #cor da fonte
  FontColor = Color.new(255,255,255)    
  #nome da fonte
  FontName = "Verdana"     
  #fonte negrito?
  FontBold = true                       
  #tamanho da fonte
  FontSize = 14                         
  #posição em relação ao evento
  OffSet = 48                           
  
end

class Spriteset_Map
  alias capchars_initialize initialize
  alias capchars_dispose dispose
  alias capchars_update update  
  def initialize
    @names = []
    $game_map.events.values.each { |event|
      next if event.list.nil?
      for command in event.list
        next unless command.code == 108
        @names.push(Sprite_Name.new(event, String($1))) if command.parameters[0].match(/cmd:nome=([^>]*)/im)
      end
    }
    capchars_initialize    
  end  
  
  def update
    capchars_update
    @names.each(&:update)
  end  
  
  def dispose
    capchars_dispose
    @names.each(&:dispose)
    @names.clear
  end  
end

class Sprite_Name < Sprite
  
  def initialize(event, name)
    super(nil)
    self.bitmap = Bitmap.new(120,20)
    @event = event
    self.ox = 60
    self.z = 999
    self.bitmap.font.size = EventCaptions::FontSize
    self.bitmap.font.bold = EventCaptions::FontBold
    self.bitmap.font.name = EventCaptions::FontName
    self.bitmap.font.color = EventCaptions::FontColor
    self.bitmap.draw_text(0,0,120,20,name,1)
  end
  
  def update
    super
    self.x = @event.screen_x
    self.y = @event.screen_y - EventCaptions::OffSet
  end 
  
  def dispose
    self.bitmap.dispose
    super    
  end
end


Gostei bastante, bem diferente e legal  :blink:

Legal, também aprendi com as aulas do Khas, a única coisa que eu vi de problema aí é que está praticamente igual ao do Khas, você mudou tipo, seis linhas, nem o comentário é diferente do script dele, mas, de qualquer forma, já é um começo... seria legal poder configurar a fonte pelos comentários no evento também (um desafio aí pra você treinar) :rick8:
~ Masked

Citação de: Masked online 07/06/2014 às 23:19
Legal, também aprendi com as aulas do Khas, a única coisa que eu vi de problema aí é que está praticamente igual ao do Khas, você mudou tipo, seis linhas, nem o comentário é diferente do script dele, mas, de qualquer forma, já é um começo... seria legal poder configurar a fonte pelos comentários no evento também (um desafio aí pra você treinar) :rick8:

A ideia é mesmo essa, e já fiz uma atualização, coloquei uma opção para mostrar o texto apenas ao tocar o evento, bem no estilo do bom e velho chrono trigger, peço desculpas se não estiver fazendo tudo da maneira politicamente correta, estou em treinamento ainda de RGSS3, programo em várias linguagens à muitos anos, o problema maior é que estou estudando a engine do rpg maker à apenas 3 dias, aceito sugestões com muito prazer, serão muito bem vindas.