Текст над событием
Информация:
Автор: Наполеон, он же Napoleon
Версия: 1.03ru
Тип: Компонент для отображения текста над событием.

Описание:
Отображает текст над событием.
Оригинальный скрипт: Pastebin
Код:
Код:
#sb:nap_ev_text [field]
=begin
#===============================================================================
Napoleons Event Text
Версия 1.03ru
Автор - Napoleon
Перевел strelokhalfer для rpg-maker.info

Описание:
- Отображает текст над событием

Инструкции:
- Расположите ниже "▼ Дополнения" или "▼ Материалы", но выше Main.
- Если у вас стоит скрипт от Khas "Character Render", расположите ниже его.
- В комментарии к событию напишите: <evtxt:Ваш текст>
- или вызовите скрипт(переводчик советует этот вариант):
  - nap_ev_text(ev_id, text) # ev_id = номер события.
  - nap_ev_erase_text(ev_id) - удалить текст над событием.
- ВНИМАНИЕ: НЕ РАБОТАЕТ НА ИГРОКЕ (event id == 0)

- пример настройки текста, через вызов скрипта (все настройки необязательны):
nap_ev_conf(1, {
:name => 'Arial',
:size => 20,
:bold => false,
:italic => false,
:outline => true,
:shadow => false,
:fg_color => Color.new(255, 0, 0, 0),
:out_color => Color.new(0, 255, 0, 0),
:bg_color => Color.new(128, 128, 128, 128),
})
- ВНИМАНИЕ: Не используйте в параллельном процессе. Используйте вместо
    этого Автоматический запуск(или от нажатия), иначе
    получите 'nil error message'.
  
- Другие примеры настроек чере комментарии.
<evtxt_font_name:'Verdana'> - Шрифт
<evtxt_font_size:40> - Размер шрифта
<evtxt_font_bold:true> - Полужиронсть
<evtxt_font_italic:false> - Курсив
<evtxt_font_outline:true> - Окаемка шрифта
<evtxt_font_shadow:false> - Тень
<evtxt_fg_color:128, 128, 128, 128> - цвет переднего фона
<evtxt_bg_color:128, 128, 128, 128> - цвет заднего фона
<evtxt_out_color:128, 128, 128, 128> - цвет окаемки
# ВНИМАНИЕ! Эти настройки нужно вызывать ДО установки текста через комментарий.


Так же, вы можете создать шаблон и вызвать его через <evtxt_preset:имя_шаблона>
Шаблон так же нужно вызывать до установки текста.
  
Требуется:
- RPG Maker VX Ace, внезапно, правда?

Условия использования:
- Attribution 3.0 Unported (CC BY 3.0)
  http://creativecommons.org/licenses/by/3.0/
  Что означает: вы можете использовать как в коммерческих,
  так и бесплатных проектах, менять скрипт и адаптировать,
  но вы обязаны упомянуть автора(Napoleon Dutch) в Благодарностях

История версий:
1.03ru (06 Февраля 2015)
  - Русификация
1.03 (8 Июня 2014)
  - Добавлена совместимость к освещению от Khas.
  - анную правку помогал делать сам Khas.
  - Удалены отладочные сообщения
1.02 (18 Мая 2014)
  - Добавлены шаблоны.
1.01 (16 Января 2014)
  - Добалены настройки Z-индекса.
1.00 (02 Января 2014)
  - Первый релиз.
#===============================================================================
=end
$imported ||= {}
$imported[:nap_ev_text] = 1.03

#===============================================================================
# Секция настроек
#===============================================================================
module NAP_EV_TEXT_CONF
  Z_INDEX               = 99 # Напишите nil для использования
                             # Z-индекса из Sprite_Character.
                             # Внимание: Window_Base имеет Z-индекс = 100.
  COMMENT_TAG           = 'evtxt' # Не используйте '<' или '>'!
  #Переводчик не рекомендует менять параметр выше.
  DEFAULT_FONT_NAME     = 'Arial' #Шрифт
  DEFAULT_FONT_SIZE     = 20 #Размер
  DEFAULT_FONT_BOLD     = true #Полужирность
  DEFAULT_FONT_ITALIC   = false #Курсив
  DEFAULT_FONT_OUTLINE  = false  #Окаемка
  DEFAULT_FONT_SHADOW   = true  #Тень
  
  DEFAULT_FG_COLOR  = Color.new(255, 255, 255, 255)#Стандартный передний фон.
  DEFAULT_BG_COLOR  = Color.new(0, 0, 0, 0) # Color.new(128,128,128,128) # для прозрачно-серого фона
  DEFAULT_OUT_COLOR = Color.new(128, 0, 128, 255) #Цвет окаёмки
  #ШАБЛОНЫ
  PRESETS = {
    :Sample => { # Все параметры необязательны.
      :name      => 'Times New Roman',
      :size      => 20,
      :bold      => false,
      :outline   => true,
      :shadow    => true,
      :fg_color  => Color.new(255, 255, 255, 255),
      :bg_color  => Color.new(0, 0, 0, 0),
      :out_color => Color.new(64, 30, 96, 160)
    },
    :Sample2 => {
      :name      => 'Arial',
      :size      => 24,
      :bold      => true,
      :outline   => true,
      :shadow    => true,
      :fg_color  => Color.new(190, 255, 128, 255),
      :bg_color  => Color.new(0, 0, 0, 0),
      :out_color => Color.new(128, 0, 128, 255)
    },
    :Halfer => {
      :name      => 'Arial',
      :size      => 24,
      :bold      => false,
      :outline   => false,
      :shadow    => false,
      :fg_color  => Color.new(255, 255, 255, 255),
      :bg_color  => Color.new(0, 0, 0, 0),
    },
  }
end
#===============================================================================
# Теперь скрипт не зависит от базового ядра
#===============================================================================
if !$imported[:nap_core] || $imported[:nap_core] < 1.05
# Global bitmap just for measuring text size
  # DO NOT FORGET to change the font size and stuff before measuring!
  $txt_measure_bmp = Bitmap.new(1,1)

  class Game_CharacterBase
    @@sprites = {}
    
    def sprite
      @@sprites[self]
    end
    
    def register_sprite(s)
      @@sprites[self] = s
    end
    
    def detach_sprite
      @@sprites.delete(self)
    end
  end
end

if $khas_graphics
  class Texture_Character
    alias init_mith_charref initialize 
    def initialize(*args)
      init_mith_charref(*args)
      @character.register_sprite(self) if @character
    end
    
    alias character_set_mith_charref character=
    def character=(char)
      @character.detach_sprite if @character
      character_set_mith_charref(char)
      @character.register_sprite(self) if @character    
    end
  end # class Sprite_Character
elsif !$imported[:nap_core] || $imported[:nap_core] < 1.05
  class Sprite_Character
    alias init_mith_charref initialize 
    def initialize(*args)
      init_mith_charref(*args)
      @character.register_sprite(self) if @character
    end
    
    alias character_set_mith_charref character=
    def character=(char)
      @character.detach_sprite if @character
      character_set_mith_charref(char)
      @character.register_sprite(self) if @character    
    end
  end # class Sprite_Character
end # if $khas_graphics
#===============================================================================
# Sprite/Texture Character
#===============================================================================
if $khas_graphics
  class Texture_Character
    attr_accessor :ev_text_sprite
    attr_accessor :ev_text_options
    attr_accessor :ev_text_text
    
    alias nap_ev_text_initialize initialize
    def initialize(*args)
      nap_ev_text_initialize(*args)
      nap_ev_text_reset_options
    end
    
    def nap_ev_text_reset_options
      @ev_text_options = {
        :name      => NAP_EV_TEXT_CONF::DEFAULT_FONT_NAME,
        :size      => NAP_EV_TEXT_CONF::DEFAULT_FONT_SIZE,
        :bold      => NAP_EV_TEXT_CONF::DEFAULT_FONT_BOLD,
        :italic    => NAP_EV_TEXT_CONF::DEFAULT_FONT_ITALIC,
        :outline   => NAP_EV_TEXT_CONF::DEFAULT_FONT_OUTLINE,
        :shadow    => NAP_EV_TEXT_CONF::DEFAULT_FONT_SHADOW,
        :fg_color  => NAP_EV_TEXT_CONF::DEFAULT_FG_COLOR,     
        :bg_color  => NAP_EV_TEXT_CONF::DEFAULT_BG_COLOR,
        :out_color => NAP_EV_TEXT_CONF::DEFAULT_OUT_COLOR
      }
    end
    
    def nap_ev_set_text(text)    
      @ev_text_text = text    
      nap_ev_refresh
    end
    
    def nap_ev_refresh
      # If there already is a text in place then it will be overwritten.
      @ev_text_sprite.dispose if @ev_text_sprite
      
      # Do not create a (new) sprite if the text is nil (means that we want to erase it)
      if @ev_text_text.nil?
        @ev_text_sprite = nil
        return
      end
      
      # Create sprite
      @ev_text_sprite = Sprite.new
      
      # Z-index
      if NAP_EV_TEXT_CONF::Z_INDEX
        @ev_text_sprite.z = NAP_EV_TEXT_CONF::Z_INDEX
      else
        @ev_text_sprite.z = @z
      end
      
      # Measure text size
      nap_ev_text_apply_font($txt_measure_bmp)
      txt_size = $txt_measure_bmp.text_size(@ev_text_text)
      
      # Create & render on bitmap
      @ev_text_sprite.bitmap = Bitmap.new(txt_size.width, txt_size.height)
      nap_ev_text_apply_font(@ev_text_sprite.bitmap)
      @ev_text_sprite.bitmap.fill_rect(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_options[:bg_color])
      @ev_text_sprite.bitmap.draw_text(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_text, 1)
    end
    
    def nap_ev_text_apply_font(bitmap)    
      bitmap.font = Font.new(@ev_text_options[:name], @ev_text_options[:size])
      bitmap.font.bold      = @ev_text_options[:bold]
      bitmap.font.italic    = @ev_text_options[:italic]
      bitmap.font.outline   = @ev_text_options[:outline]
      bitmap.font.shadow    = @ev_text_options[:shadow]
      bitmap.font.color     = @ev_text_options[:fg_color]
      bitmap.font.out_color = @ev_text_options[:out_color]
    end
    
    alias nap_ev_text_update update
    def update
      nap_ev_text_update
      return if !@ev_text_sprite
      
      nap_ev_text_update_location
    end
    
    def nap_ev_text_update_location
      @ev_text_sprite.x = @x - @ev_text_sprite.width / 2
      @ev_text_sprite.y = @y - @rh - @ev_text_sprite.height
    end

    alias nap_ev_text_dispose dispose
    def dispose
      @ev_text_sprite.dispose if @ev_text_sprite
      nap_ev_text_dispose
    end
  end
else
  class Sprite_Character < Sprite_Base
    attr_accessor :ev_text_sprite
    attr_accessor :ev_text_options
    attr_accessor :ev_text_text
    
    alias nap_ev_text_initialize initialize
    def initialize(*args)
      nap_ev_text_initialize(*args)
      nap_ev_text_reset_options
    end
    
    def nap_ev_text_reset_options
      @ev_text_options = {
        :name      => NAP_EV_TEXT_CONF::DEFAULT_FONT_NAME,
        :size      => NAP_EV_TEXT_CONF::DEFAULT_FONT_SIZE,
        :bold      => NAP_EV_TEXT_CONF::DEFAULT_FONT_BOLD,
        :italic    => NAP_EV_TEXT_CONF::DEFAULT_FONT_ITALIC,
        :outline   => NAP_EV_TEXT_CONF::DEFAULT_FONT_OUTLINE,
        :shadow    => NAP_EV_TEXT_CONF::DEFAULT_FONT_SHADOW,
        :fg_color  => NAP_EV_TEXT_CONF::DEFAULT_FG_COLOR,     
        :bg_color  => NAP_EV_TEXT_CONF::DEFAULT_BG_COLOR,
        :out_color => NAP_EV_TEXT_CONF::DEFAULT_OUT_COLOR
      }
    end
    
    def nap_ev_set_text(text)    
      @ev_text_text = text    
      nap_ev_refresh
    end
    
    def nap_ev_refresh
      # If there already is a text in place then it will be overwritten.
      @ev_text_sprite.dispose if @ev_text_sprite
      
      # Do not create a (new) sprite if the text is nil (means that we want to erase it)
      if @ev_text_text.nil?
        @ev_text_sprite = nil
        return
      end
      
      # Create sprite
      @ev_text_sprite = Sprite.new
      
      # Z-index
      if NAP_EV_TEXT_CONF::Z_INDEX
        @ev_text_sprite.z = NAP_EV_TEXT_CONF::Z_INDEX
      else
        @ev_text_sprite.z = z
      end
      
      # Measure text size
      nap_ev_text_apply_font($txt_measure_bmp)
      txt_size = $txt_measure_bmp.text_size(@ev_text_text)
      
      # Create & render on bitmap
      @ev_text_sprite.bitmap = Bitmap.new(txt_size.width, txt_size.height)
      nap_ev_text_apply_font(@ev_text_sprite.bitmap)
      @ev_text_sprite.bitmap.fill_rect(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_options[:bg_color])
      @ev_text_sprite.bitmap.draw_text(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_text, 1)
    end
    
    def nap_ev_text_apply_font(bitmap)    
      bitmap.font = Font.new(@ev_text_options[:name], @ev_text_options[:size])
      bitmap.font.bold      = @ev_text_options[:bold]
      bitmap.font.italic    = @ev_text_options[:italic]
      bitmap.font.outline   = @ev_text_options[:outline]
      bitmap.font.shadow    = @ev_text_options[:shadow]
      bitmap.font.color     = @ev_text_options[:fg_color]
      bitmap.font.out_color = @ev_text_options[:out_color]
    end
    
    alias nap_ev_text_update update
    def update
      nap_ev_text_update
      return if !@ev_text_sprite
      
      nap_ev_text_update_location
    end
    
    def nap_ev_text_update_location
      @ev_text_sprite.x = x - @ev_text_sprite.width / 2
      @ev_text_sprite.y = y - height - @ev_text_sprite.height
    end

    alias nap_ev_text_dispose dispose
    def dispose
      @ev_text_sprite.dispose if @ev_text_sprite
      nap_ev_text_dispose
    end
  end
end
#===============================================================================
# Game Event
#===============================================================================
class Game_Event < Game_Character
  alias nap_ev_text_setup_page_settings setup_page_settings
  def setup_page_settings
    nap_ev_text_setup_page_settings
    nap_ev_text_commenttag
  end  
  
  def nap_ev_text_load_preset(preset_sym)
    raise "Nap Event Text Error. Preset symbol: "#{preset_sym}" not found for event with id: "#{@id}" " if !NAP_EV_TEXT_CONF::PRESETS.has_key?(preset_sym)
    self.sprite.nap_ev_text_reset_options
    
    NAP_EV_TEXT_CONF::PRESETS[preset_sym].each { |k, v| self.sprite.ev_text_options[k] = NAP_EV_TEXT_CONF::PRESETS[preset_sym][k] }
  end
  
  def nap_ev_text_commenttag
    return if self.list.nil?
    
    sprite_character = self.sprite
    return if !sprite_character
    
    preset_found = false
    
    for command in self.list
      if command.code == 108
        
        # set text
        if command.parameters[0] =~ /<#{NAP_EV_TEXT_CONF::COMMENT_TAG}:(.*?)>/ix
          sprite_character.nap_ev_set_text($1)
        end
        
        # Preset
        if command.parameters[0] =~ /<evtxt_preset:(.*?)>/ix
          nap_ev_text_load_preset($1.to_sym)
          refresh = true
        end
                
        if !preset_found
          # options
          refresh = false
          if command.parameters[0] =~ /<evtxt_name:(.*?)>/ix
            sprite_character.ev_text_options[:name] = $1.strip
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_font_size:(.*?)>/ix
            sprite_character.ev_text_options[:size] = $1.strip.to_i
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_bold:(.*?)>/ix
            sprite_character.ev_text_options[:bold] = $1.strip.downcase == 'true'
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_italic:(.*?)>/ix
            sprite_character.ev_text_options[:italic] = $1.strip.downcase == 'true'
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_outline:(.*?)>/ix
            sprite_character.ev_text_options[:outline] = $1.strip.downcase == 'true'
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_shadow:(.*?)>/ix
            sprite_character.ev_text_options[:shadow] = $1.strip.downcase == 'true'
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_fg_color:(.*?)>/ix
            sprite_character.ev_text_options[:fg_color] = nap_ev_text_str2Color($1)
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_bg_color:(.*?)>/ix
            sprite_character.ev_text_options[:bg_color] = nap_ev_text_str2Color($1)
            refresh = true
          end
          if command.parameters[0] =~ /<evtxt_out_color:(.*?)>/ix
            sprite_character.ev_text_options[:out_color] = nap_ev_text_str2Color($1)
            refresh = true
          end
        end
      
        sprite_character.nap_ev_refresh if refresh
      end
    end
  end # nap_ev_text_commenttag
  
  def nap_ev_text_str2Color(str)
    s = str.clone
    s.delete!(' ')
    s = s.split(',')
    raise "ERROR: nap_ev_text_str2Color(#{str}) does not contain 4 integer values!" if s.length < 4
    return Color.new(s[0].to_i, s[1].to_i, s[2].to_i, s[3].to_i)
  end
end # class Game_Event < Game_Character
#===============================================================================
# Game Interpreter
# For: Adding commands
#===============================================================================
class Game_Interpreter
  def nap_ev_text(ev_id, text)
    return if !SceneManager.scene.is_a?(Scene_Map) || !SceneManager.scene.spriteset
    $game_map.events[ev_id].sprite.nap_ev_set_text(text)
  end
  
  def nap_ev_erase_text(ev_id)
    return if !SceneManager.scene.is_a?(Scene_Map) || !SceneManager.scene.spriteset
    $game_map.events[ev_id].sprite.nap_ev_set_text(nil)
  end
  
  def nap_ev_conf(ev_id, hash)
    $game_map.events[ev_id].sprite.ev_text_options[:name] = hash[:name] if hash.has_key?(:name)
    $game_map.events[ev_id].sprite.ev_text_options[:size] = hash[:size] if hash.has_key?(:size)
    $game_map.events[ev_id].sprite.ev_text_options[:bold] = hash[:bold] if hash.has_key?(:bold)
    $game_map.events[ev_id].sprite.ev_text_options[:italic] = hash[:italic] if hash.has_key?(:italic)
    $game_map.events[ev_id].sprite.ev_text_options[:outline] = hash[:outline] if hash.has_key?(:outline)
    $game_map.events[ev_id].sprite.ev_text_options[:shadow] = hash[:shadow] if hash.has_key?(:shadow)
    $game_map.events[ev_id].sprite.ev_text_options[:fg_color] = hash[:fg_color] if hash.has_key?(:fg_color)
    $game_map.events[ev_id].sprite.ev_text_options[:out_color] = hash[:out_color] if hash.has_key?(:out_color)
    $game_map.events[ev_id].sprite.ev_text_options[:bg_color] = hash[:bg_color] if hash.has_key?(:bg_color)
        
    $game_map.events[ev_id].sprite.nap_ev_refresh
  end
end
#===============================================================================
# Class Spriteset Map
# For: Showing the texts when the map starts. The initial setup_page_settings
#      is called before the map-scene is activated (like if the player came from
#      the title-scene or another map) and therefor could have the wrong or none
#      Spriteset set.
#===============================================================================
class Spriteset_Map
 alias nap_ev_text_create_characters create_characters
 def create_characters
   nap_ev_text_create_characters
   $game_map.events.each{ |ev| ev[1].nap_ev_text_commenttag } # array note: [0] = id, [1] = event
 end
end
#===============================================================================
Аддон для имён
Информация:
Автор: Стрелокхалфер, то есть я.
Версия: 1.0
Тип: Аддон.

Описание:
Расширяет оригинальный скрипт, добавляя в него новые команды.
Код:
Код:
=begin
    Аддон для Napoleons Event Text
    Автор: strelokhalfer
    Требования: Мозг и прямые руки :)
                Сам скрипт Napoleons Event Text
    Описание:
      Данный скрипт позволяет отображать имена событий, что выставленны
      в редакторе.
      Так же, я добавил вывод значене переменной.
      Пишите свои идеи на Светлой, постараюсь добавить.
    Лицензия: 
    Скрипт защищён лицензией CC BY-NC-ND 4.0, что означает:
      Вы МОЖЕТЕ распространять скрипт, использовать в проектах, НО:
        Вы ОБЯЗАНЫ указать моё авторство.
        Вы НЕ МОЖЕТЕ использовать скрипт в коммерческих проектах,
          но вы МОЖЕТЕ узнать стоимость разрешения, написав мне на
            strelokhalfer@gmail.com
        Вы НЕ МОЖЕТЕ изменять данный скрипт или делать свой на основе этого.
    Использование:
      Напишите в комментарии на странице события
      нужный тег:
        <halfer_name> - для вывода имени из редактора
          Если вы меняете имя события(через мой другой скрипт), то
          после изменения переменной вызовите name_reload,
          если меняете в самом событии.
          Если же меняете в другом, то в качестве параметра
          укажите номер события. Пример: name_reload(1) 
          Если имя меняется на другой карте, параметр НЕ НУЖЕН.
          
        <var_id> - для вывода значения переменной.
          Где: id - номер переменной в базе данных
          Если вам нужно динамически менять значение, то
          после изменения переменной вызовите var_reload,
          если меняете в самом событии.
          Если же меняете в другом, то в качестве параметра
          укажите номер события. Пример: var_reload(1) 
          Если переменная меняется на другой карте, параметр НЕ НУЖЕН.
          
=end
def napoleon_en?
  $imported = {} if $imported.nil?
  return false if !$imported[:nap_ev_text]
  return true if $imported[:nap_ev_text]
end
if napoleon_en?
  class Game_Event
    alias halfer_nap_ev_text_commenttag nap_ev_text_commenttag
    def nap_ev_text_commenttag
      halfer_nap_ev_text_commenttag
      sprite_character = self.sprite
      return if !sprite_character
      for command in self.list
        if command.code == 108
          if command.parameters[0] =~ /<halfer_name>/ix
            evname = load_data(format("Data/Map%03d.rvdata2", @map_id))
            sprite_character.nap_ev_set_text(evname.events[@event.id].name)
          end
          if command.parameters[0] =~ /<var_(.*?)>/ix
            sprite_character.nap_ev_set_text($game_variables[$1.strip.to_i])
          end
        end
      end
    end
  end
  class Game_Interpreter
  #Йэлф, можно было без всяких модулей и инициализаций)
    def name_reload(ev_id = @event_id)
      return if !SceneManager.scene.is_a?(Scene_Map)
      evname = load_data(format("Data/Map%03d.rvdata2", @map_id))
      $game_map.events[ev_id].sprite.nap_ev_set_text(evname.events[ev_id].name)
    end
    def var_reload(var_id, ev_id = @event_id)
      return if !SceneManager.scene.is_a?(Scene_Map)
      $game_map.events[ev_id].sprite.nap_ev_set_text($game_variables[var_id])
    end
end
else
  msgbox("Требуется Napoleons Event Text\nИли вы расположили аддон выше оригинала.")
  exit
end
Скачать:
Демо - Архив 7z, 1.3мб.