Код:
	=begin
==============================
Название: [RMVXA] Book Library (Библиотека)  
Автор: Dirge
Исправления: DeadElf79
Версия 1.9.3
==============================
Вроде как совместим с:
Yami Engine Ace - Pop Message от 2012.06.07
Yanfly Engine Ace - Ace Message System v1.05
ATS: Message Options v1.0.7
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
Данный скрипт, основан на стандартной системе сообщений мейкера и переписывает
некоторые его свойства. Поэтому, не исключены конфликты с другими системами 
сообщений. Если у вас возник конфликт какой-либо системы сообщений и данного 
скрипта - сообщите мне, я постараюсь эту проблему решить. Сам я не проверял 
совместимости с другими скриптами.
Скрипт позволяет считывать текст с .txt файла в папке Books, для этого создайте
в папке Books, вашу книгу в .txt формате, например book of death.txt, 
book of death 2.txt, и тд.
Так как скрипт создан на основе системы сообщений, то в ваших текстах вы можете
использовать все функции сообщений мейкера, такие как показ иконок, значений переменных,
имен персонажей и тд.
ВАЖНО! Сохраняйте ваши тексты только в кодировке UTF-8
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
Использование:
Установка - поместить в пользовательские скрипты выше Main
В текущей версии скрипт можно вызвать только прямо с ивента, сделать это можно 
с помощью команды "выполнить скрипт"
==================    
    call_scene_book
      Вызывает сцену библиотеки
    
================== 
    call_book(book, title)
      вызывает определенную книгу по порядковому номеру.
      измените book на любой порядковый номер вашей книги
      title - переключатель показа названия книги, по-умолчанию название книги 
      показывается, но с помощью этой команды, можно выключить показ названия
      в текущем вызове книги. true(вкл)\false(выкл). Опциональная функция
      ее можно не писать, тогда по-умолчинию будет включен показ названия.
      
==================     
    book_switch(book, switch)
      Чтобы показать или наоборот скрыть отображение какой-либо книги, 
      используйте данную команду.
      измените book на любой порядковый номер вашей книги, узнать его можно
      ниже в настройках. Порядок ваших книг идет строго такой в каком вы его 
      выставите в списке "Book_Names", отсчет идет от 0, сверху вниз. А вместо switch
      укажите значение true, если вы хотите показывать выбраную книгу или false,
      если не хотите :)
      
==================
                              !!!!!!!!!!!!!!!!!!!!
 Чтобы указать новую страницу вашей книги, используйте команду [page], прямо
 в тексте вашей книги.
                              
=end
# Настройки скрипта
module BookLibrary
  
# Укажите здесь выши книги, по шаблону показаному ниже. В конце каждой книги,
# после квадратных скобок, не забывайте ставить запятую, только после последней 
# книги запятая не нужна.
# ["название файла книги", "название книги в библиотеке", доступна ли книга из 
# библиотеки]
  Book_Names = [
    ["0", "Тестовая книга", false],
    ["1", "Вторая тестовая книга", false],
  ]# Не удалять.
  
  
# Укажите графику фона и окна для ваших книг, порядок такой же как и в списке выше.
# Файлы фона должны находиться в папке Graphics\Pictures
# Файлы графики окна должны находиться в папке Graphics\System
# ["название файла фона", "название файла графики окна",
# [изменить тонировку окна, через запятую введите значение цвета RGB]]
# если вы хотите, чтобы к книге применялись значения по уполчанию, то напишите nil
# вместо значения. Значений должно быть столько же, сколько и книг.
  Book_Graphics = [
  
  [nil, "Window2",[133, 111, 110]],
  [nil, nil, nil]
  
  ]# Не удалять.
  
# Цвет названия для всех книг. 
  Book_Title_Color = [180, 80, 0] # заменить на nil - если функция не нужна 
 
# Здесь можно названичить шрифт для названия книг. Помните, что если вы используете
# шрифты которые не идут по-умолчанию вместе в windows, то их нужно помещать 
# в папку Fonts в корне папки проекта, если такой папки нет - создайте ее.
  Title_Font = "Times New Roman"
  
# Прозрачность всех окон, введите значение от 0 до 255. 
  Windows_Opacity = 255
 
  
#Графика всех окон сцены по-умолчанию
  Default_Windowskin = "Window"
 
  
# Графика фона по-умолчанию во время выбора книги, к самим книгам не применяется, 
# если только не включить данную фунцкию
  Default_Background = nil # заменить на nil - если функция не нужна 
 
  
# тонировочный цвет окна по-умолчанию для всей сцены, измените на nil чтобы 
# использовать цвет окна заданный через вкладку база данных => система
  Default_Tone = nil #[33, 0, 77]
 
  
#Для включения применения значения Default_Background к книгам, включите данный
#переключатель. true(вкл)\false(выкл)
  Book_Back_Switch = true
 
  
# Резерв переменной, для хранения значений доступных книг, просто 
# укажите какую-нибудь переменную и забудьте о ней :)
  Show_Var = 1 
  
  
# Звук смены страницы ['название SE файла', громкость, темп]
  Page_Change_SE = ['Book2', 80, 100]
  
  
# Показывать пункт общей библиотеки доступных книг в меню игры или нет. 
# true(вкл)\false(выкл)
# Если в библиотеке нету доступных книг, меню не удалится, но деактивируется.
  Library_Menu_Switch = true
  
# Название пункта библиотеки в меню игры, актуально если вы включили
# переключатель выше.
  Library_Menu_Name = "Книги"
  
  
end
# Конец настроек скрипта
$imported = {} if $imported.nil?
#==============================================================================#
# class Game_Temp                 
#==============================================================================#
class Game_Temp
  attr_accessor :page_num, :page_max, :one_book
  attr_accessor :show_book_title, :page_changed
  attr_accessor :book_filename, :book_title
  
  alias de79_initialize initialize
  def initialize
    de79_initialize
    @page_num = 0
    @page_max = 0
    @show_book_title = true
    @one_book = [false, 0, @show_book_title]
    @page_changed = false
    @book_filename, @book_title = "", ""
  end
end
#==============================================================================#
# class Game_Temp end                    
#==============================================================================#
#==============================================================================#
# class Window_Message                    
#==============================================================================#
class Window_Book < Window_Message
  
  def window_width
    Graphics.width
  end
 
  def window_height
    fitting_height(visible_line_number)
  end
  def visible_line_number
    if $game_temp.show_book_title == true
      return (Graphics.height - 120) / 24 
    else
      return (Graphics.height - 72) / 24 
    end
  end
  
  def clear_flags
    @show_fast = true # Fast forward flag
    @line_show_fast = false     # Fast forward by line flag
    @pause_skip = false         # Input standby omission flag
  end
  
  def fiber_main
    process_input
    process_all_text if $game_message.has_text?
    $game_temp.page_changed = false
    @fiber = nil
  end
  
  def input_pause
    Fiber.yield until $game_temp.page_changed == true
  end
  
  def process_new_line(text, pos)
    @line_show_fast = false
    super
  end
  
  def process_all_text # для совместимости c YSE-PopMessage и ATS: Message Options v1.0.7
    open_and_wait
    text = convert_escape_characters($game_message.all_text)
    pos = {}
    new_page(text, pos)
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
  def adjust_message_window_size # для совместимости c YEA-MessageSystem 
  end
  
end
#==============================================================================#
# class Window_Message end                    
#==============================================================================#
#==============================================================================#
# class Window_PageInfo                    
#==============================================================================#
class Window_PageInfo < Window_Base
  
  def initialize(page_num, page_max)
    super(0, window_y, window_width, window_height)
    draw_info_text(page_num, page_max)
  end
  
  def window_y
    return $game_temp.show_book_title ? Graphics.height - 48 : Graphics.height - 56
  end
  
  def window_width
    Graphics.width
  end
  
  def window_height
    return $game_temp.show_book_title ? 48 : 56
  end
  def draw_info_text(page_num, page_max)
    pages = (page_num+1).to_s+'/'+page_max.to_s
    (page_max > 1) && (page_num >= 1) ? change_color(normal_color, true) : change_color(normal_color, false)
    draw_text(0, 0, contents.width, contents.height, "← Назад", 0)
    (page_max > 1) && (page_num <= page_max - 2) ? change_color(normal_color, true) : change_color(normal_color, false)
    draw_text(0, 0, contents.width, contents.height, "Вперед →", 2)
    change_color(normal_color, true)
    draw_text(0, 0, contents.width, contents.height, pages, 1)
  end
  
  def refresh
    contents.clear
    page_num, page_max = $game_temp.page_num, $game_temp.page_max
    draw_info_text(page_num, page_max)
  end
  
end
#==============================================================================#
# class Window_PageInfo end                   
#==============================================================================#
#==============================================================================#
# class Window_BookName                    
#==============================================================================#
class Window_BookName < Window_Base
  
  def initialize
    super(0, 0, Graphics.width, Graphics.height == 416 ? fitting_height(1)+8 : fitting_height(1))
    name_refresh
  end  
    
  def name_refresh
    contents.clear
    if BookLibrary::Book_Title_Color.nil?
      contents.font.color = Font.default_color
    else 
      color = BookLibrary::Book_Title_Color
      red = color[0]
      green = color[1]
      blue = color[2]
      contents.font.color.set(red, green, blue) 
    end
    contents.font.name = BookLibrary::Title_Font if !BookLibrary::Title_Font.empty?
    draw_text(0, 0, contents.width, contents.height, $game_temp.book_title, 1)
  end
  
  
end
#==============================================================================#
# class Window_BookName end                  
#==============================================================================#
#==============================================================================#
# class Window_BookSelect                    
#==============================================================================#
class Window_BookSelect < Window_Command
  
  def initialize(x, y)
    super(x, y)
  end
  
  def window_width
    return Graphics.width
  end
  
  
  def window_height
    return Graphics.height
  end
  def make_command_list
    book_id = 0
    BookLibrary::Book_Names.size.times do
      add_command(BookLibrary::Book_Names[book_id][1], :books_name) if $game_variables[BookLibrary::Show_Var][book_id] == true
      book_id +=1
    end
  end
  
end
#==============================================================================#
# class Window_BookSelect end                    
#==============================================================================#
#==============================================================================#
# class Scene_Book                    
#==============================================================================#
class Scene_Book < Scene_Base
  
  def start
    super
    $game_temp.page_changed = true
    $game_temp.page_max = 0
    $game_temp.page_num = 0
    create_all_windows
    book_select_list
    create_background
    start_one_book if $game_temp.one_book[0]
    update_tone
    book_select_tone_upd
    windows_opacity
  end
  def create_background
    @background_sprite = Sprite.new
    @background_sprite.bitmap = Cache.picture(BookLibrary::Default_Background) unless BookLibrary::Default_Background.nil?
  end
  
  def create_all_windows
    create_bookselect_window
    create_message_window
    create_page_info_window
    create_bookname_window
  end
  
  def create_bookselect_window
    @bookselect_window = Window_BookSelect.new(0, 0)
    @bookselect_window.set_handler(:books_name,   method(:on_book_name))
    @bookselect_window.set_handler(:cancel,   method(:return_scene))
    @bookselect_window.hide.deactivate if $game_temp.one_book[0]
    @bookselect_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
  end
  
  def create_message_window
    @message_window = Window_Book.new
    if $game_temp.show_book_title == true
      @message_window.y = Graphics.height == 416 ? 56 : 48
    else
      @message_window.y = 0
    end
    $game_message.background = 0
    @message_window.openness = 255
    @message_window.hide 
  end
  
  def create_page_info_window
    page_num = $game_temp.page_num
    page_max = $game_temp.page_max
    @page_info_window = Window_PageInfo.new(page_num,page_max)
    @page_info_window.hide
  end
  
  def create_bookname_window
    @bookname_window = Window_BookName.new
    @bookname_window.hide
  end
  
  def windows_opacity
    @bookname_window.opacity = BookLibrary::Windows_Opacity
    @message_window.opacity = BookLibrary::Windows_Opacity
    @page_info_window.opacity = BookLibrary::Windows_Opacity
    @bookselect_window.opacity = BookLibrary::Windows_Opacity
  end
  
  def return_scene
    $game_message.clear
    Sound.play_cancel
    Input.update
    @message_window.visible && !$game_temp.one_book[0] ? cancel_scene : SceneManager.return
  end
  
  def terminate
    super
    @background_sprite.bitmap.dispose unless @background_sprite.bitmap.nil?
  end
  
  def cancel_scene
    @background_sprite.bitmap = nil
    @background_sprite.bitmap = Cache.picture(BookLibrary::Default_Background) unless BookLibrary::Default_Background.nil?
    @message_window.hide
    @bookname_window.hide
    @page_info_window.hide
    @bookselect_window.show.activate
  end
  
  def filebook_text_update
    $game_message.clear
    $game_temp.page_num = 0
    @filebook_text = File.read("Books/"+$game_temp.book_filename.to_s+".txt")
    @filebook_text = @filebook_text.reverse.chop.reverse
    @filebook_text = @filebook_text.split('[page]')
    $game_message.add(@filebook_text[$game_temp.page_num])
  end
  def update_tone
    if !$game_temp.one_book[0] && !@available_graphics[@bookselect_window.index][2].nil? 
    
      tones = @available_graphics[@bookselect_window.index][2]
      red = tones[0]
      green = tones[1]
      blue = tones[2]
      @bookname_window.tone.set(red, green, blue)
      @message_window.tone.set(red, green, blue)
      @page_info_window.tone.set(red, green, blue)
    elsif $game_temp.one_book[0] &&
    !BookLibrary::Book_Graphics[$game_temp.one_book[1]][2].nil?
    
      tones = BookLibrary::Book_Graphics[$game_temp.one_book[1]][2]
      red = tones[0]
      green = tones[1]
      blue = tones[2]
      @bookname_window.tone.set(red, green, blue)
      @message_window.tone.set(red, green, blue)
      @page_info_window.tone.set(red, green, blue)
    else
      if !BookLibrary::Default_Tone.nil?
        tones = BookLibrary::Default_Tone
        red = tones[0]
        green = tones[1]
        blue = tones[2]
        @bookname_window.tone.set(red, green, blue)
        @message_window.tone.set(red, green, blue)
        @page_info_window.tone.set(red, green, blue)
      else
        @bookname_window.tone.set($data_system.window_tone)
        @message_window.tone.set($data_system.window_tone)
        @page_info_window.tone.set($data_system.window_tone)
      end
    end
  end
  
  def book_select_tone_upd
    if BookLibrary::Default_Tone.nil?
      @bookselect_window.tone.set($data_system.window_tone)
    else
      tones = BookLibrary::Default_Tone
      red = tones[0]
      green = tones[1]
      blue = tones[2]
      @bookselect_window.tone.set(red, green, blue)
    end
  end
  def update
    super
    if Input.trigger?(:B)
      return_scene
    elsif Input.trigger?(:LEFT) && enabled_prev_page
      on_page_prev
    elsif Input.trigger?(:RIGHT) && enabled_next_page
      on_page_next
    end
    update_tone
    book_select_tone_upd
  end
  
  def book_select_list
    @available_book = []
    @available_graphics = []
    id=0
    BookLibrary::Book_Names.each do |i|
      @available_book.push i if $game_variables[BookLibrary::Show_Var][id] == true
      id +=1
    end
    id=0
    BookLibrary::Book_Graphics.each do |i|
      @available_graphics.push i if $game_variables[BookLibrary::Show_Var][id] == true
      id += 1
    end
  end
  
  def book_graphics_change
    if @available_graphics[@bookselect_window.index][1].nil?
      @bookname_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
      @message_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
      @page_info_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
    else
      @bookname_window.windowskin = Cache.system(@available_graphics[@bookselect_window.index][1])
      @message_window.windowskin = Cache.system(@available_graphics[@bookselect_window.index][1])
      @page_info_window.windowskin = Cache.system(@available_graphics[@bookselect_window.index][1])
    end
  end
  
  def one_book_graphics_change
    if BookLibrary::Book_Graphics[$game_temp.one_book[1]][1].nil?
      @bookname_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
      @message_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
      @page_info_window.windowskin = Cache.system(BookLibrary::Default_Windowskin)
    else
      @bookname_window.windowskin = Cache.system(BookLibrary::Book_Graphics[$game_temp.one_book[1]][1])
      @message_window.windowskin = Cache.system(BookLibrary::Book_Graphics[$game_temp.one_book[1]][1])
      @page_info_window.windowskin = Cache.system(BookLibrary::Book_Graphics[$game_temp.one_book[1]][1])
    end
  end
  def update_book_background
    if $game_temp.one_book[0] == true && !BookLibrary::Book_Graphics[$game_temp.one_book[1]][0].nil?
      @background_sprite.bitmap = Cache.picture(BookLibrary::Book_Graphics[$game_temp.one_book[1]][0])
    elsif $game_temp.one_book[0] == false && !@available_graphics[@bookselect_window.index][0].nil?
      @background_sprite.bitmap = Cache.picture(@available_graphics[@bookselect_window.index][0])
    else
      BookLibrary::Book_Back_Switch && !BookLibrary::Default_Background.nil? ? Cache.picture(BookLibrary::Default_Background) : @background_sprite.bitmap = nil 
    end
  end
  
  def start_one_book
    $game_temp.book_filename = BookLibrary::Book_Names[$game_temp.one_book[1]][0]
    one_book_graphics_change
    update_book_background
    filebook_text_update
    $game_temp.book_title = BookLibrary::Book_Names[$game_temp.one_book[1]][1]
    $game_temp.page_max = @filebook_text.size
    @message_window.show
    @bookname_window.show if $game_temp.show_book_title
    @page_info_window.show
    @bookname_window.name_refresh
    @page_info_window.refresh
  end
  
  def on_book_name
    $game_temp.page_changed = true
    $game_temp.book_filename = @available_book[@bookselect_window.index][0]
    $game_temp.book_title = @available_book[@bookselect_window.index][1]
    book_graphics_change
    update_book_background
    filebook_text_update
    $game_temp.page_max = @filebook_text.size
    @bookselect_window.hide.deactivate
    @message_window.show
    @bookname_window.show
    @page_info_window.show
    @bookname_window.name_refresh
    @page_info_window.refresh
  end
  def on_page_next
    $game_temp.page_changed = true
    $game_temp.page_num += 1
    $game_message.clear
    $game_message.add(@filebook_text[$game_temp.page_num])
    RPG::SE.new(BookLibrary::Page_Change_SE[0], BookLibrary::Page_Change_SE[1], 
    BookLibrary::Page_Change_SE[2]).play
    @bookname_window.name_refresh
    @page_info_window.refresh
  end
  
  def on_page_prev
    $game_temp.page_changed = true
    $game_temp.page_num -= 1
    $game_message.clear
    $game_message.add(@filebook_text[$game_temp.page_num])
    RPG::SE.new(BookLibrary::Page_Change_SE[0], BookLibrary::Page_Change_SE[1], 
    BookLibrary::Page_Change_SE[2]).play
    @bookname_window.name_refresh
    @page_info_window.refresh
  end
  
  def enabled_prev_page
    $game_temp.page_num >= 1
  end
  
  def enabled_next_page
    $game_temp.page_num <= $game_temp.page_max - 2
  end
  
end
#==============================================================================#
# class Scene_Book end                   
#==============================================================================#
#==============================================================================#
# module DataManager                  
#==============================================================================#
module DataManager
  class <<self
    alias show_var_setup_new_game setup_new_game
  end
  
  def self.setup_new_game
    show_var_setup_new_game
    book_show_var = []
    book_id = 0
    BookLibrary::Book_Names.size.times do
      book_show_var.push BookLibrary::Book_Names[book_id][2]
      book_id +=1
    end
    $game_variables[BookLibrary::Show_Var] = book_show_var
  end
end
#==============================================================================#
# module DataManager end                  
#==============================================================================#
#==============================================================================#
# class Scene_Menu                
#==============================================================================#
class Scene_Menu < Scene_MenuBase
  
  alias add_library_command create_command_window
  def create_command_window
    add_library_command
    @command_window.set_handler(:library,  method(:command_library)) if  BookLibrary::Library_Menu_Switch
  end
  
  def command_library
    $game_temp.show_book_title = true
    SceneManager.call(Scene_Book)
    $game_temp.one_book[0] = false
  end
end
#==============================================================================#
# class Scene_Menu end                  
#==============================================================================#
#==============================================================================#
# class Window_MenuCommand                  
#==============================================================================#
class Window_MenuCommand < Window_Command
  alias add_lib_comm add_original_commands
  def add_original_commands
    add_command(BookLibrary::Library_Menu_Name, :library, library_enabled) if  BookLibrary::Library_Menu_Switch
  end
  
  def library_enabled
    available_menu_book = []
    id=0
    BookLibrary::Book_Names.each do |i|
      available_menu_book.push i if $game_variables[BookLibrary::Show_Var][id] == true
      id +=1
    end
    available_menu_book.size > 0
  end
end
#==============================================================================#
# class Window_MenuCommand end                  
#==============================================================================#
#==============================================================================#
# class Game_Interpreter                
#==============================================================================#
class Game_Interpreter
  
  def call_book(book, title = true)
    $game_temp.show_book_title = title
    $game_temp.one_book = [true, book, $game_temp.show_book_title]
    SceneManager.call(Scene_Book)
  end
  
  def call_scene_book
    $game_temp.show_book_title = true
    $game_temp.one_book = [false, 0, $game_temp.show_book_title]
    SceneManager.call(Scene_Book)
  end
  
  def book_switch(book, switch)
    $game_variables[BookLibrary::Show_Var][book] = switch
  end
  
end
#==============================================================================#
# class Game_Interpreter end              
#==============================================================================#
 
Социальные закладки