Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =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
- #==============================================================================#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement