(VX) EK Items Menu 1.4b

Больше
17 года 11 мес. назад #20486 от Equilibrium Keeper
[SIZE=28pt]EK Items Menu 1.4b[/SIZE]

[size=14pt]Описание[/size]
Скрипт изменяет структуру меню предметов, добавляя фильтрацию по различным критериям

[size=14pt]Скриншоты[/size]

[img
[img
[img


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

[size=14pt]Аддончег[/size]
Code:
#============================================================================== # EK Addon v.1.00b #------------------------------------------------------------------------------ # 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 #==============================================================================

[size=14pt]Собсна, сам скрипт[/size]
Code:
#============================================================================== # 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
[size=18pt]Авторы и Благодарности[/size]

[size=14pt]Equilibrium Keeper[/size]
[size=10pt]Кодер[/size]
[size=14pt]Рольф[/size]
[size=10pt]Консультант[/size]
[size=14pt]insider[/size]
[size=10pt]Консультант[/size]
[size=14pt]ANNxiousity[/size]
[size=10pt]Переводчик[/size]

[size=14pt]Примечание автора[/size]
Мой второй скрипт. Пожелания и критика приветствуются!

Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
17 года 11 мес. назад #20490 от Arykray
Arykray ответил в теме (VX) EK Items Menu 1.00b
Довольно не плохой скрипт, особенно если учесть, что на VX. Ошибок пока в работе не заметил.

Наконец-то скриптеры на портал подтягиваются, так держать!

Чем сложнее задача - тем проще ее не решать.

[img

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
17 года 11 мес. назад #20493 от Equilibrium Keeper
Equilibrium Keeper ответил в теме (VX) EK Items Menu 1.00b
Есть они. =\ Совсем забыл на радостях! В скрипте есть ошибка. Он отрисовывает новые экраны предметов по нажатию вправо или влево, но если их зажать - начинает немного сходить с ума. Как это исправить - не знаю. Видимо что нить iskerpress? return? Хотя хотелось бы что бы он продолжал их перебирать, но с некоторой задержкой.

Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
17 года 11 мес. назад #20495 от Arykray
Arykray ответил в теме (VX) EK Items Menu 1.00b
По моему заморочка в блокох Update Command Selection
Code:
  #--------------------------------------------------------------------------   # * 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.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

и include?()
Code:
  #--------------------------------------------------------------------------   # * 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

Может это привычка, оставшаяся у меня от XP, но я бы сделал из этих блоков один, так как именно в блоке include?() у тебя идет обновление команд.

Чем сложнее задача - тем проще ее не решать.

[img

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
17 года 11 мес. назад #20599 от Equilibrium Keeper
Equilibrium Keeper ответил в теме (VX) EK Items Menu 1.4b
Update ... Selection, во всяком случае в VX, отвечает только за считывание нажатия кнопок, соответственно и обновляется постоянно. Если совместить эти блоки, то мукер надолго и капитально повиснет. ^^
А тот ужос в инклюде я сейчас разгребаю (будет еще хуже) - осталось только понять - как выудить подстроку из строки. Видимо я что-то не то пишу в аргументах метода .sub - находит он ее только если она стоит в начале файла x_x[hr]Обновил версию. Добавил возможность кастомизации фильтров и привел царящий в скрипте хаос в относительный беспорядок. Тестируйте! ^_^

Осталось только найти нормальный способ избавиться от бага с зажиманием кнопки...[hr]Обновил версию. Поправил баг из 1.1b[hr]Обновил до 1.3. Теперь InMenu и иже с ним будут игнорировать предметы экипировки, что бы исключить их из списка придется воспользоваться опцией Equipment! . Это так же исправит баг, когда InMenu и Equipment использовались вместе. (Спасибо, insider)[hr]Обновлено до версии 1.4b. Оптимизация. Спасибо, insider!

Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран
Больше
17 года 11 мес. назад #20616 от Fizmatik
Fizmatik ответил в теме (VX) EK Items Menu 1.4b
Браво - хорошее начало для скриптера.
Так держать и мы будем публиковать твои скрипты в файловом архиве! ;)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
17 года 11 мес. назад #20618 от Equilibrium Keeper
Equilibrium Keeper ответил в теме (VX) EK Items Menu 1.4b
Спасибо! И спасибо всем тем кто помогал! ^_^
Пойду дальше скриптить... *sochin*

Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.101 секунд
Работает на Kunena форум