Код:
=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
#==============================================================================#
Социальные закладки