Плохо! Плохо!:  0
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: [VX Ace] Book Library (Библиотека)

  1. #1
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    VX Ace Game Icon [VX Ace] Book Library (Библиотека)

    Book Library (Библиотека)
    Автор: Dirge
    Исправления: DeadElf79
    Версия: 1.9.3


    Описание: Скрипт добавляет возможность читать внешние .txt файлы и отображать в игре на отдельной сцене. Подробней читайте в шапке скрипта.
    На самом деле я тот еще горе-скриптер и код у меня страшный. Поэтому был бы рад любым подсказкам и правкам от более опытных людей.
    Так же принимаются просто идеи по его улучшению.

    DeadElf79 написал аддон и фикс для скрипта:
    1. Аддон "Show Book Addon" - Данный аддон добавляет категорию "книги" в меню предметов.

    2. Фикс "Show Book + Szyu Craft Fix" - Небольшой фикс, который необходимо устанавливать, если вы используете скрипт Szyu Crafting System

    Спасибо DeadElf79!

    Аддон и фикс включены в демку, так же они спрятаны под вторым спойлером.

    Демка тут v1.9.3 (Со всеми аддонами от DeadElf79)

    Ссылка на скрипт в pastebin - тут

    Спойлер Сам скрипт:
    Код:
    =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              
    #==============================================================================#

    Спойлер Аддон и фикс от DeadElf79:

    Код:
    =begin
    ==============================
    Название: [RMVXA] Book Library - Show Book Addon
    Автор: DeadElf79
    Версия 1.0
    Описание:
      Данный аддон добавляет категорию "книги" в меню предметов.
      Для того, чтобы предмет отображался в этой категории, вам
      необходимо в Note добавить строку:
      
      <book: BOOK_ID>
      
      Вместо BOOK_ID вам нужно поставить число, соответствующее
      номеру книги в списке Book_Names (нумерация начинается с нуля).
      
      Несовместим со скриптами, меняющими список категорий.
    ==============================
    =end
    
    module Vocab
      def self.book
        "Книги"
      end
    end
    
    class RPG::BaseItem
      attr_accessor :book_index
      
      def check_for_book
        @book_index = -1
        self.note.split(/[\r\n]+/).each do |line|
          if line.downcase=~/<book:\s*?(\d+)>/i
            @book_index = $1.to_i
          end
        end
      end
      
      def book?
        unless @book_index.nil?
          return true if @book_index >= 0
        end
        false
      end
    end
    
    class Game_Temp
      attr_accessor :return_from_book
      alias de79_initialize_show_book initialize
      def initialize
        de79_initialize_show_book
        @return_from_book = -1
      end
    end
    
    class Window_ItemCategory
      def col_max
        5
      end
      
      def make_command_list
        add_command(Vocab::item,     :item)
        add_command(Vocab::weapon,   :weapon)
        add_command(Vocab::armor,    :armor)
        add_command(Vocab::book,     :book)
        add_command(Vocab::key_item, :key_item)
      end
    end
    
    class Window_ItemList
      def include?(item)
        item.check_for_book unless item.nil?
        case @category
        when :item
          item.is_a?(RPG::Item) && !item.key_item? && !item.book?
        when :weapon
          item.is_a?(RPG::Weapon)
        when :armor
          item.is_a?(RPG::Armor)
        when :book
          item.is_a?(RPG::Item) && item.book?
        when :key_item
          item.is_a?(RPG::Item) && item.key_item? && !item.book?
        else
          false
        end
      end
      
      def draw_item(index)
        item = @data[index]
        if item
          rect = item_rect(index)
          rect.width -= 4
          item_width = item.book? ? self.contents.width-4 : 256
          draw_item_name(item, rect.x, rect.y, enable?(item), item_width)
          draw_item_number(rect, item) if not item.book?
        end
      end
    end
    
    class Scene_Item < Scene_ItemBase  
      def determine_item
        if item.for_friend?
          item.check_for_book
          if item.book_index >= 0
            call_book(item.book_index, true) 
          else
            show_sub_window(@actor_window)
            @actor_window.select_for_item(item)
          end
        else
          use_item
          activate_item_window
        end
      end
      
      def call_book(book, title = true)
        $game_temp.one_book = [true, book, title]
        $game_temp.return_from_book = @item_window.index
        SceneManager.call(Scene_Book)
      end
      
      alias de79_create_category_window create_category_window
      def create_category_window
        de79_create_category_window
        
        @category_window.index = 3 if $game_temp.return_from_book >= 0
      end
      
      alias de79_create_item_window create_item_window
      def create_item_window
        de79_create_item_window
        
        if $game_temp.return_from_book >= 0
          @item_window.index = $game_temp.return_from_book
          @category_window.deactivate
          activate_item_window
        end
      end
      
      alias de79_return_scene return_scene
      def return_scene
        $game_temp.return_from_book = -1
        
        de79_return_scene
      end
    end
    Код:
    =begin
    ==============================
    Название: [RMVXA] Book Library - Show Book + Szyu Craft Fix
    Автор: DeadElf79
    Версия 1.0
    Описание:
      Небольшой фикс, который необходимо устанавливать, если
      вы используете скрипт Szyu Crafting System
    ==============================
    =end
    =begin # УБЕРИТЕ КОММЕНТАРИЙ ПРИ УСТАНОВКЕ
    class Window_ItemList
      def col_max
        1
      end
      
      def include?(item)
        case @category
        when :item
          item.is_a?(RPG::Item) && !item.key_item?
        when :weapon
          item.is_a?(RPG::Weapon)
        when :armor
          item.is_a?(RPG::Armor)
        when :book
          item.is_a?(RPG::Item) && item.recipe_book
        when :key_item
          item.is_a?(RPG::Item) && item.key_item? && !item.recipe_book
        else
          false
        end
      end
      
      def draw_item(index)
        item = @data[index]
        if item
          rect = item_rect(index)
          rect.width -= 4
          item_width = item.recipe_book ? self.contents.width-4 : 256
          draw_item_name(item, rect.x, rect.y, enable?(item), item_width)
          draw_item_number(rect, item) if not item.recipe_book
        end
      end
    end
    =end # УБЕРИТЕ КОММЕНТАРИЙ ПРИ УСТАНОВКЕ
    Последний раз редактировалось dirge; 20.01.2016 в 12:04. Причина: Обновление до версии 1.9.3+аддон

  2. #2
    Мастер Форума Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    8,438
    Записей в дневнике
    2
    Репутация: 91 Добавить или отнять репутацию

    По умолчанию

    Хороший скрипт. Почему только у меня квадрат самый первый символ.
    1. Я помню делал себе давно на хр, у меня правдо хранилось в файлах игры. Может тебе тоже попробовать удобно что игрок не сможет прочить.
    2. Сейчас в одном проекте а вх текстовку в таких файлах храню и нормально.

  3. #3
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    По умолчанию

    скрипт обновлен!
    Вроде как поправил баг с кодировками. Теперь нужно сохранять только в UTF-8, любым текстовым редактором.
    Так же теперь не нужно указывать число страниц и создавать множество файлов со страницами, достаточно писать книгу в одном файле и помечать линию разрыва страниц командой \new это можно увидеть в файле первой книги который идет вместе с новой демкой.
    Поправил баг с не обновление книги при возврате и выборе другой книги.
    Всякие свистелки-перделки и кастомизация настроек скрипта будет позже.
    Как-то так.

  4. #4
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    По умолчанию

    Очередное обновление!
    Делать было нечего на работе, запилил обновление.
    Поправил баги, переделал перелистывание страниц, заменил команду разрыва страниц с \new на [page], добавил звук перелистывания страницы
    Внешне сцена получилась вроде миленько
    Спойлер скрин:

    Единственное, насчет звука, я сижу тут без колонок, поэтому удостовериться что все сделал правильно не удалось, потестите и скажите все ли хорошо.

  5. #5
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    По умолчанию

    Очередной апдейт!
    На этот раз он довольно большой.
    Немного изменены функции вызова, по сравнению с предыдущими версиями, в связи с добавление вызова определенной книги, а не всей библиотеки.
    Добавлены разные настройки кастомизации такие как: Смена фона библиотеки и книг, смена скина окон библиотеки и книг, смена тонировки окон, добавлена возможность сделать все окна прозрачными, смена цвета названия для всех книг.
    Так же введена функция скрытия названия книги только при вызове определенной книги, Это добавляет дополнительные 2 строки к тексту на странице, вместо 12 строк видно 14.
    Добавил пару картинок для теста фона, поэтому скрипт с форума может ругаться на отсутствие файлов, потому в начале лучше смотреть демку.

    В общем и целом я хз, реализовал все на каких-то диких костылях, код стал еще страшней, но работает xD
    Последний раз редактировалось dirge; 13.02.2015 в 02:19.

  6. #6
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    По умолчанию

    Обновил скрипт до версии 1.8.5.
    Добавил возможность менять шрифт для названия книги.
    Так же, вроде как, совместил его с несколькими известными системами сообщений, список можно найти в шапке скрипта.

  7. #7
    Маститый Аватар для Элрик
    Информация о пользователе
    Регистрация
    09.09.2010
    Сообщений
    1,267
    Записей в дневнике
    47
    Репутация: 23 Добавить или отнять репутацию

    По умолчанию

    Dirge, что на счет отображения картинок? Все ведь любят книжки с картинками.

  8. #8
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    По умолчанию

    картинки в тексте? Я же не зря акцентирую внимание на том, что скрипт написан на основе системы сообщений и что все ее плюшки можно использовать в книгах. Например, ведь много кто использует систему сообщений от янфлай, а у нее есть функция показа картинок в тексте. И вот что мы можем получить:
    Спойлер скрин:

    А например добавив ATS: Formatting от модерн алгебры, мы получим сообщения, которые будут красиво форматироваться и нигде не вылазить.
    Т.е. на эти книги, вы можете навешать кучу плюшек с других скриптов, а если они вдруг не будут совместимы - не беда, я попытаюсь их совместить, просто нужно дать мне знать.
    Последний раз редактировалось dirge; 24.02.2015 в 01:36.

  9. #9
    Местный Аватар для Eviald
    Информация о пользователе
    Регистрация
    02.01.2015
    Адрес
    Ясногорск, Тульская обл.
    Сообщений
    156
    Репутация: 9 Добавить или отнять репутацию

    По умолчанию

    Dirge, скажи пожалуйста, а нельзя ли реализовать внутри игровое чтение книг, не посредством стандартных окон мейкера, но посредством вот такой визуализации:

    Спойлер Книга от PandaMaru:








    С возможностью наложения на страницы готового текста или же за ранее отфотошопленных страниц такой вот книги с вставленным в них текстом?

    С уважением, Эвиальд.
    Последний раз редактировалось Eviald; 24.02.2015 в 01:49.
    “Итак во всем, как хотите, чтобы с вами поступали люди, так поступайте и вы с ними, ибо в этом закон и пророки” (Евангелие от Матфея, 7:12).

  10. #10
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    883
    Репутация: 77 Добавить или отнять репутацию

    По умолчанию

    такое точно не будет в этом скрипте, и вряд ли я напишу еще один скрипт под это. Хотя как знать, может когда подтяну знания руби\ргсс, то может что-то и придумаю.
    А так, если нужно не в окнах, это можно попробовать сделать на ивентах, все сменами картинок и текст и анимацию перелистывания. Сейчас может демку накидаю, ключевое слово может)
    Последний раз редактировалось dirge; 24.02.2015 в 02:10.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •