Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 40

Тема: EK Items Menu

  1. #1

    По умолчанию EK Items Menu

    EK Items Menu 1.4b

    Описание
    Скрипт изменяет структуру меню предметов, добавляя фильтрацию по различным критериям

    Скриншоты



    Внимание!!!
    Скрипт использует мой кривенький аддончег, так что его цепляем в обязательном порядке. Траблы возможны только в том случае, если ваши кастомные скрипты будут менять тоже, что и мои.

    Аддончег
    Код:
    #==============================================================================
    # EK Addon v.1.0b
    #------------------------------------------------------------------------------
    # Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
    # Created on: 25.05.2008 22:20:49
    #==============================================================================
    # Description: The given package of scripts expands opportunities of original
    # functions. All made changes are described below. Problems can arise only in
    # the event that you use the scripts changing теже the functions.
    #------------------------------------------------------------------------------
    # Install: Make a new blank script page above main and copy this script.
    #==============================================================================
    # Window_Command:
    # 1. Procedure of a call is changed:
    #    (width, commands, column_max = 1, row_max = 0, spacing = 32, textalign = 0)
    #    textalign << Change text align (0 - Left; 1 - Center; 2 - Right)
    #    
    #------------------------------------------------------------------------------
    # Window_Help:
    # 1. Procedure of a call is changed:
    #    (x = 0, y = 0, width = 544, height = WLH + 32)
    #==============================================================================
    class Window_Command < Window_Selectable
      
      def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32, textalign = 0)
        if row_max == 0
          row_max = (commands.size + column_max - 1) / column_max
        end
        super(0, 0, width, row_max * WLH + 32, spacing)
        @commands = commands
        @item_max = commands.size
        @column_max = column_max
        @textalign = textalign
        refresh
        self.index = 0
      end
      def draw_item(index, enabled = true)
        rect = item_rect(index)
        rect.x += 4
        rect.width -= 8
        self.contents.clear_rect(rect)
        self.contents.font.color = normal_color
        self.contents.font.color.alpha = enabled ? 255 : 128
        self.contents.draw_text(rect, @commands[index], @textalign)
      end
      
    end
    #==============================================================================
    class Window_Help < Window_Base
      
      def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
        super(x, y, width, height)
      end
      
    end
    #==============================================================================
    Собсна, сам скрипт
    Код:
    #==============================================================================
    # EK Items Menu v.1.4b
    #------------------------------------------------------------------------------
    # Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
    # Created on: 26.05.2008 17:29:18
    # Отдельное спасибо: Рольф, ANNxiousity, insider
    #          А так же: rpgmaker.sk6.ru, rpg-maker.info, rpgmakervx.net
    #==============================================================================
    # Описание: Скрипт изменяет структуру меню предметов, добавляя фильтрацию
    # по различным критериям
    #------------------------------------------------------------------------------
    # Требования: Addon Equilibrium Keeper'а версии 1.00 или выше
    # Установка: В редакторе скриптов создайте чистую страницу над "Main" и
    # скопируйте туда данный скрипт.
    #==============================================================================
    # Инструкция: В массив ITEMS_TYPE (строка 43) впишите названия желаемых
    # разделов. В двумерный массив ITEMS_FILTRARION (строка 44) впишите критерии
    # отбора из списка ниже или задайте свои. ПРИМЕЧАНИЕ: Одномерные массивы 
    # (критерии отбора) в массиве ITEM_FILTRATION должны следовать именно в том
    # порядке, в котором следуют соответствующие им категории в ITEMS_TYPE!
    #------------------------------------------------------------------------------
    # Список стандартных критериев отбора (по умолчанию отрисовываются все предметы):
    # "Usable" - Предметы, которые можно использовать либо в меню, либо в бою, либо и там и там
    # "Usable!" - Предметы, которые нельзя использовать никогда
    # "Equipment" - Предметы экипировки - оружие или броня (или и то и другое о.О)
    # "Equipment!" - Предметы, не являющиеся частью экипировки
    # "InMenu" - Предметы, которые можно использовать в меню
    # "InMenu!" - Предметы, которые нельзя использовать в меню
    # "InBattle" - Предметы, которые можно использовать в бою
    # "InBattle!" - Предметы, которые нельзя использовать в бою
    #------------------------------------------------------------------------------
    # Для того, что бы создать свой собственный критерий отбора следует:
    # 1)Вписать название новой категории в массив ITEMS_TYPE, в качестве нового
    # значения или заменив уже существующее.
    # 2)Придумать тег, например "\alch" и вписать его в поле "Note" оружия,
    # доспеха или предмета, который вы решили отнести к новой категории.
    # 3)Вписать этот тег, заменив \ на \\ в массив ITEMS_FILTRATION, как новое
    # условие или заменив им уже существующие.
    # 4)В блок GetItemType, в конец case'а (ст.178) добавить блок кода, аналогичный
    # строкам 151...178, заменив "\\alch" и "\\alch!" на ваш тег и тег отрицающий.
    #==============================================================================
    module EKScripts
      ITEMS_TYPE = ["Usable", "Battle Only", "Equipment", "Other", "Alchemistry"]
      ITEMS_FILTRARION = [
        ["InMenu", "Equipment!", "\\alch!"],   # Usable
        ["InBattle", "InMenu!", "Equipment!"], # Battle Only
        ["Equipment"],                         # Equipment
        ["Usable!", "Equipment!", "\\alch!"],  # Other
        ["\\alch"]                             # For example: Alchemistry
      ] # ← Do not delete
    end
    class Window_Item < Window_Selectable
      #--------------------------------------------------------------------------
      attr_writer :type
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x      : window x-coordinate
      #     y      : window y-coordinate
      #     width  : window width
      #     height : window height
      #     type   : item type
      #--------------------------------------------------------------------------
      def initialize(x, y, width, height, type = -1)
        super(x, y, width, height)
        @items_notes = []
        for i in 1..$data_items.size - 1
          @items_notes[i] = $data_items[i].note
        end
        @weapons_notes = []
        for i in 1..$data_weapons.size - 1
          @weapons_notes[i] = $data_weapons[i].note
        end
        @armors_notes = []
        for i in 1..$data_armors.size - 1
          @armors_notes[i] = $data_armors[i].note
        end
        @type = type
        @items_filtrarion = EKScripts::ITEMS_FILTRARION
        @column_max = 2
        self.index = 0
        refresh
      end
      #--------------------------------------------------------------------------
      # * Whether or not to include in item list
      #     item : item
      #--------------------------------------------------------------------------
      def include?(item)
        return false if item == nil
        if $game_temp.in_battle
          return false unless item.is_a?(RPG::Item)
        else      
          return false if GetItemType(item) == false
        end
        return true
      end
      #--------------------------------------------------------------------------
      # * Whether or not to include in valid items list
      #     item : item
      #--------------------------------------------------------------------------
      def GetItemType(item)
        @item = item
        @return = true
        for i in 0..@items_filtrarion[@type].size - 1
          if @return == true
            case @items_filtrarion[@type][i]
              when "Usable"
                if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
                  unless $data_items[item.id].menu_ok? || $data_items[item.id].battle_ok?
                    @return = false
                  end
                end
              when "Usable!"
                if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
                  if $data_items[item.id].menu_ok? || $data_items[item.id].battle_ok?
                    @return = false
                  end
                end
              when "InMenu"
                if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
                  unless $data_items[item.id].menu_ok?
                    @return = false
                  end
                end
              when "InMenu!"
                if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
                  if $data_items[item.id].menu_ok?
                    @return = false
                  end
                end
              when "InBattle"
                if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
                  unless $data_items[item.id].battle_ok?
                    @return = false
                  end
                end
              when "InBattle!"
                if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
                  if $data_items[item.id].battle_ok?
                    @return = false
                  end
                end
              when "Equipment"
                unless item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
                  @return = false
                end
              when "Equipment!"
                if item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
                  @return = false
                end
              when "IsWeapon"
                unless item.is_a?(RPG::Weapon)
                  @return = false
                end
              when "IsWeapon!"
                if item.is_a?(RPG::Weapon)
                  @return = false
                end
              when "IsArmor"
                unless item.is_a?(RPG::Armor)
                  @return = false
                end
              when "IsArmor!"
                if item.is_a?(RPG::Armor)
                  @return = false
                end
              when "\\alch"
                if item.is_a?(RPG::Weapon)
                  if @weapons_notes[item.id].index("\\alch") == nil
                    @return = false
                  end
                elsif item.is_a?(RPG::Armor)
                  if @armors_notes[item.id].index("\\alch") == nil
                    @return = false
                  end
                else
                  if @items_notes[item.id].index("\\alch") == nil
                    @return = false
                  end
                end
              when "\\alch!"
                if item.is_a?(RPG::Weapon)
                  if @weapons_notes[item.id].index("\\alch") != nil
                    @return = false
                  end
                elsif item.is_a?(RPG::Armor)
                  if @armors_notes[item.id].index("\\alch") != nil
                    @return = false
                  end
                else
                  if @items_notes[item.id].index("\\alch") != nil
                    @return = false
                  end
                end
            end
          end
        end
        return @return
      end
    end
    
    class Scene_Item < Scene_Base
      #--------------------------------------------------------------------------
      # * Start processing
      #--------------------------------------------------------------------------
      def start
        super
        create_menu_background
        @items_type = EKScripts::ITEMS_TYPE
        @spacing = 32 - (@items_type.size - 4) * 8
        if @spacing <= 0
          @spacing = 8
        end
        @command_window = Window_Command.new(544, @items_type, @items_type.size, 0, @spacing, 1)
        @command_window.index = 0
        @viewport = Viewport.new(0, 0, 544, 416)
        @help_window = Window_Help.new (0, 56)
        @help_window.viewport = @viewport
        @item_window = Window_Item.new(0, 112, 544, 304, 0)
        @item_window.viewport = @viewport
        @item_window.help_window = @help_window
        @item_window.active = false
        @target_window = Window_MenuStatus.new(0, 0)
        hide_target_window
        @command_window.active = true
        @item_window.active = false
      end
      #--------------------------------------------------------------------------
      # * Termination Processing
      #--------------------------------------------------------------------------
      def terminate
        super
        dispose_menu_background
        @command_window.dispose
        @viewport.dispose
        @help_window.dispose
        @item_window.dispose
        @target_window.dispose
      end
      #--------------------------------------------------------------------------
      # * Update Frame
      #--------------------------------------------------------------------------
      def update
        super
        update_menu_background
        @command_window.update
        @help_window.update
        @item_window.update
        @target_window.update
        if @command_window.active
          update_command_selection
        elsif @item_window.active
          update_item_selection
        elsif @target_window.active
          update_target_selection
        end
      end
      #--------------------------------------------------------------------------
      # * Update Command Selection
      #--------------------------------------------------------------------------
      def update_command_selection
        if Input.trigger?(Input::B)
          Sound.play_cancel
          return_scene
        elsif Input.trigger?(Input::C)
          Sound.play_decision
          @command_window.active = false
          @item_window.active = true
        elsif Input.trigger?(Input::RIGHT) || Input.trigger?(Input::LEFT)
          @item_window.type = @command_window.index
          @item_window.refresh
          @item_window.update_help
        end
      end
      #--------------------------------------------------------------------------
      # * Update Item Selection
      #--------------------------------------------------------------------------
      def update_item_selection
        if Input.trigger?(Input::B)
          Sound.play_decision
          @item_window.active = false
          @command_window.active = true
          Sound.play_cancel
        elsif Input.trigger?(Input::C)
          @item = @item_window.item
          if @item != nil
            $game_party.last_item_id = @item.id
          end
          if $game_party.item_can_use?(@item)
            Sound.play_decision
            determine_item
          else
            Sound.play_buzzer
          end
        end
      end
      #--------------------------------------------------------------------------
      # * Show(Recreate) Target Window
      #     right : Right justification flag (if false, left justification)
      #--------------------------------------------------------------------------
      def show_target_window(right)
        @item_window.active = false
        @target_window.dispose
        @target_window = Window_MenuStatus.new(0, 0)
        width_remain = 544 - @target_window.width
        @target_window.x = right ? width_remain : 0
        @target_window.visible = true
        @target_window.active = true
        if right
          @viewport.rect.set(0, 0, width_remain, 416)
          @viewport.ox = 0
        else
          @viewport.rect.set(@target_window.width, 0, width_remain, 416)
          @viewport.ox = @target_window.width
        end
      end
    end
    Авторы и Благодарности

    Equilibrium Keeper
    Кодер
    Рольф
    Консультант
    insider
    Консультант
    ANNxiousity
    Переводчик

    Примечание автора
    Мой второй скрипт. Пожелания и критика приветствуются!
    Последний раз редактировалось Equilibrium Keeper; 29.05.2008 в 14:39. Причина: Обновление до версии 1.4b

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

    По умолчанию

    Молодец. Я тоже с меню начинал. Если нужна помощь по скриптам обращайся.

  3. #3

    По умолчанию

    Спасибо!
    Обязательно! ^_^
    О! А помощь то нужна! Совсем забыл на радостях! В скрипте есть ошибка. Он отрисовывает новые экраны предметов по нажатию вправо или влево, но если их зажать - начинает немного сходить с ума. Как это исправить - не знаю. Видимо что нить iskerpress? return? Хотя хотелось бы что бы он продолжал их перебирать, но с некоторой задержкой.
    Последний раз редактировалось Equilibrium Keeper; 26.05.2008 в 06:13.

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

    По умолчанию

    Сейчас посмотрю.

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

    По умолчанию

    Зажимаю все нормально.

  6. #6

    По умолчанию

    Ммм... не должно быть нормально - при зажатой кнопке, он должен скакать по пунктам меню, но при этом не обновлять окно предметов. Вернее не должен, но делает. =\ А еще одну бяку связанную с этим я, оказывается, уже поправил. ^_^

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

    По умолчанию

    Теперь понял.

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

    По умолчанию

    На код. Теперь зажимаешь все нормально.
    Спойлер 1:
    Код:
    #==============================================================================
    # EK Items Menu v.1.00b
    #------------------------------------------------------------------------------
    # Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
    # Created on: 25.05.2008 22:23:14
    #==============================================================================
    # Description: Script changes structure of the menu of items, adding
    # a filtration by four criteria:
    # Usable (Menu or Battle), Battle only, Equipment and Not usable ("Other")
    #------------------------------------------------------------------------------
    # Requirements: Addon by Equilibrium Keeper v.1.00 or above
    # Install: Make a new blank script page above main and copy this script.
    #==============================================================================
    
    module Vocab
      # Items Screen
      ItemsType = ["Usable", "Battle Only", "Equipment", "Other"]
    end
    
    class Window_Item < Window_Selectable
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x      : window x-coordinate
      #     y      : window y-coordinate
      #     width  : window width
      #     height : window height
      #     type   : item type
      #--------------------------------------------------------------------------
      def initialize(x, y, width, height, type = -1)
        super(x, y, width, height)
        @type = type
        @column_max = 2
        self.index = 0
        refresh
      end
      #--------------------------------------------------------------------------
      # * Whether or not to include in item list
      #     item : item
      #--------------------------------------------------------------------------
      def include?(item)
        @item_id = item.id
        return false if item == nil
        if $game_temp.in_battle
          return false unless item.is_a?(RPG::Item)
        end
         case @type
          when 0
            return false if item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
            return false unless $data_items[@item_id].menu_ok?
          when 1
            return false if item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
            return false if $data_items[@item_id].menu_ok?
            return false unless $data_items[@item_id].battle_ok?
          when 2
            return false unless item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
          when 3
            return false if item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
            return false if $data_items[@item_id].menu_ok? || $data_items[@item_id].battle_ok?
          end
          return true
      end
    end
    
    class Scene_Item < Scene_Base
      #--------------------------------------------------------------------------
      # * Start processing
      #--------------------------------------------------------------------------
      def start
        super
        create_menu_background
        @command_window = Window_Command.new(544, Vocab::ItemsType, 4, 0, 32, 1)
        @command_window.index = 0
        @viewport = Viewport.new(0, 0, 544, 416)
        @help_window = Window_Help.new (0, 56)
        @help_window.viewport = @viewport
        @item_window = Window_Item.new(0, 112, 544, 304, 0)
        @item_window.viewport = @viewport
        @item_window.help_window = @help_window
        @item_window.active = false
        @target_window = Window_MenuStatus.new(0, 0)
        hide_target_window
        @command_window.active = true
        @item_window.active = false
      end
      #--------------------------------------------------------------------------
      # * Termination Processing
      #--------------------------------------------------------------------------
      def terminate
        super
        dispose_menu_background
        @command_window.dispose
        @viewport.dispose
        @help_window.dispose
        @item_window.dispose
        @target_window.dispose
      end
      #--------------------------------------------------------------------------
      # * Update Frame
      #--------------------------------------------------------------------------
      def update
        super
        update_menu_background
        @command_window.update
        @help_window.update
        @item_window.update
       @target_window.update
        if @command_window.active
          update_command
        elsif @item_window.active
          update_item_selection
        elsif @target_window.active
          update_target_selection
        end
      end
      
      #--------------------------------------------------------------------------
      # * Update Command Selection
      #--------------------------------------------------------------------------
      def update_command
        if Input.trigger?(Input::B)
          Sound.play_cancel
        return_scene
        end
        if Input.trigger?(Input::C)
          Sound.play_decision
          @command_window.active = false
          @item_window.active = true
        end
     case @command_window.index
    when 0
    @item_window.dispose
          @item_window = Window_Item.new(0, 112, 544, 304, @command_window.index)
          when 1
      @item_window.dispose
          @item_window = Window_Item.new(0, 112, 544, 304, @command_window.index)
    when 2
      @item_window.dispose
          @item_window = Window_Item.new(0, 112, 544, 304, @command_window.index)
    when 3
      @item_window.dispose
          @item_window = Window_Item.new(0, 112, 544, 304, @command_window.index)
    end   
    end
       
      #--------------------------------------------------------------------------
      # * Update Item Selection
      #--------------------------------------------------------------------------
    def update_command_selection
        if Input.trigger?(Input::B)
          Sound.play_cancel
          return_scene
        elsif Input.trigger?(Input::C)
          Sound.play_decision
          @command_window.active = false
          @item_window.active = true
        elsif Input.trigger?(Input::RIGHT) || Input.trigger?(Input::LEFT)
          @item_window.dispose
          @item_window = Window_Item.new(0, 112, 544, 304, @command_window.index)
          @item_window.active = false
          @item_window.help_window = @help_window
          @item_window.update_help
        end
      end
      #--------------------------------------------------------------------------
      # * Show(Recreate) Target Window
      #     right : Right justification flag (if false, left justification)
      #--------------------------------------------------------------------------
      def show_target_window(right)
        @item_window.active = false
        @target_window.dispose
        @target_window = Window_MenuStatus.new(0, 0)
        width_remain = 544 - @target_window.width
        @target_window.x = right ? width_remain : 0
        @target_window.visible = true
        @target_window.active = true
        if right
          @viewport.rect.set(0, 0, width_remain, 416)
          @viewport.ox = 0
        else
          @viewport.rect.set(@target_window.width, 0, width_remain, 416)
          @viewport.ox = @target_window.width
        end
      end
    end

  9. #9

    По умолчанию

    О! Спасибо! Сейчас разберу и прикручу!
    Подскажи тогда еще одну вещь - как _правильно_ искать подстроку в строке?
    К примеру, есть поле Notes в предметах, в нем:
    "sdjkhf23fkd dskljfw\al!dskf "
    Из этого надо вытащить "\al!"

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

    По умолчанию

    Если ты про файлы в папке дата. То я как раз бьюсь над этим. Уже есть успехи, но пока рано рассказывать.

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

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

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

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

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

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

Ваши права

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