Jump to content
AeghtyAteKees

Categorize Item Scene

Recommended Posts

Hey guys,

 

I'm using this script to add more categories to the item scene. It works really well and is miraculously compatible with my item scene script.

 

HOWEVER. I would like to request a small, simple tweak that I just don't know how to go about implementing myself. I would like a category tab to only appear IF there is an item in that category.

 

Could anyone help me accomplish this?

 

THANKS. :D

Share this post


Link to post
Share on other sites
On 8/9/2019 at 12:05 AM, AeghtyAteKees said:

a small, simple tweak

I tried to do this, but don't know of a way to specify if a category has any items in it.

Also if this was something done, it would probably work for all categories. So if you didn't have any weapons, then the category would not show up.

 

But like I said, I haven't been able to get it working. Maybe someone else can try.

I either had it showing all categories or none and then all items showed up as if it was the all category.

I might play with it more.

Share this post


Link to post
Share on other sites
2 hours ago, roninator2 said:

it would probably work for all categories

I'd like it to function this way, actually.

 

Thanks for helping! I wish I could give more feedback but I'm a rough coder.

 

Good luck :D

Share this post


Link to post
Share on other sites

I got it done, All is working.

in the module put

CategoryConditions = {
:item => lambda { !$game_party.items.empty? && $game_party.items.any? {|item| !item.key_item? }},
:weapon => lambda { !$game_party.weapons.empty? },
:armor => lambda { !$game_party.armors.empty? },
:key_item => lambda { !$game_party.items.empty? && $game_party.items.any? {|item| item.key_item? }},
:all_item => lambda { !$game_party.all_items.empty? },
:potion => lambda { $game_party.all_items.any? {|item| item.find_category == :potion} },
:ammunition => lambda { $game_party.all_items.any? {|item| item.find_category == :ammunition} },
}

and change category description to this

 CATEGORY_DESCRIPTION = {
  :item => "Viewing basic items.",
  :weapon => "Viewing attack-type items for use in battles.",
  :armor => "Viewing head, body, arm and leg equipment.",
  :key_item => "Viewing important items.",
  :all_item => "Viewing all items.",
  :potion => "Viewing potions.",
  :ammunition => "Viewing ammunition.",
 }


in ICAT_WindowItemCategory put

 def update_help
  #I'm too lazy to find a way to identify description by symbol.
  @help_window.set_text(ICAT::CATEGORY_DESCRIPTION[@category_list[self.index]])
 end
 alias icat_make_command_list make_command_list
   def make_command_list
  ICAT::VISIBLE_CATEGORY_INDEX.each { |symbol, label|
    add_command(label, symbol) if ICAT::CategoryConditions[symbol].call
    @category_list << symbol if ICAT::CategoryConditions[symbol].call
  }
 end

In class RPG::BaseItem put

 def find_category
  self.note.split(/[\r\n]+/).each { |line|
    if line =~ ICAT::Regexp::BaseItem::CATEGORY
    c = ICAT::CATEGORY_IDENTIFIER.key($1)
    return c if c != nil 
    end
  }
 end

 

Edited by roninator2

Share this post


Link to post
Share on other sites

Full modded script with option to hide categories

Spoiler

#===============================================================
#==================== CATEGORIZE ITEM SCENE v1.0 ===============
#===============================================================
#= Ported from RMVX to RMVXAce
#= Author: Seiryuki
#= Date: 2012-Jan-02
#= Type: VXA/RGSS3
#= Additions: a few more customisation options
#---------------------------------------------------------------
#= RMVX Title: KGC's Categorize Item Script
#= Author: KGC
#= Date: 2008-Apr-10
#= Translated by: Mr. Anonymous
#= The original untranslated version of the VX script can be found here:
#= http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/item&tech=categorize_item
#===============================================================
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# DESCRIPTION:
# While RMVXAce already categorises the items in the items scene
# into Items, Weapons, Armor, and Key Items this script allows
# you to create your own categories and assign items, weapons,
# and armor to any of them using notebox tags.
#
# This script also allows you to customise the size and location
# of the help, category, and item windows.
# See the Custom Layout Section for more information.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# COMPATIBILITY:
# May not be compatible with scripts that redo the item scene.
# May be compatible with scripts that modify the item categories
# for shops.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# INSTRUCTIONS:
# Place this script above Main and below Materials.
#
# To assign an item to a category, place <category IDENTIFIER> tag
# in the item's (or weapon, or armor) notebox where IDENTIFIER
# is the label listed in the CATEGORY_IDENTIFIER array in the
# Customisation Section below.
# You can add to or remove from the CATEGORY_IDENTIFIER list.
#
# NOTE: The following symbols are reserved and MUST NOT be used in
#	the CATEGORY_IDENTIFIER list:
#	   :item, :weapon, :armor, :key_item, :all_item
#
# You can assign an item to multiple categories by simply placing
# more <category IDENTIFIER> tags in the item's notebox.
# NOTE: When doing that, make sure that ALLOW_DUPLICATE is set to
# true (see Customisation Section) or else only the last tag in
# the notebox will be used as the category for the item.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#===============================================================



$data_system = load_data("Data/System.rvdata2") if $data_system == nil

module ICAT
#=============================================================================#
# CUSTOMISATION SECTION - Do not make changes unless you understand completely
# what you are doing. Read and follow the below instructions very carefully.
#=============================================================================#
#-----------------------------------------------------------------------------#
#>> HIDECATEGORIES - When true it will hide categories 
#   when no items are present for that category.
 HIDECATEGORIES = true

#>> CATEGORY_IDENTIFIER - Create your categories here.
#   You can add or remove categories from this list.
#   On the left is the symbol used to identify the category.
#   On the right is the category label that will be used when setting
#   the e.g. <category Potions> tag in the notebox, where Potions is
#   the label.
#
#   IMPORTANT - You cannot use the following as symbols as they are
#   reserved:
#	   :item, :weapon, :armor, :key_item, :all_item
 CATEGORY_IDENTIFIER = {
:potion => "Potions", #example tag: <category Potions>
:ammunition => "Ammunition", #example tag: <category Ammunition>
}

#>> VISIBLE_CATEGORY_INDEX - Set the categories that would be visible
#	 in the item category window.
#   On the left is identifying symbol from the CATEGORY_IDENTIFIER list
#   above. It must be a symbol present in that list above, OR, one of the
#   reserved symbols stated above. Make sure spelling is correct!
#   On the right is the text to display, and can be any text desired.
#   (see below customisation section for RESERVED_CATEGORY_INDEX list).
#
#   Only what is present in the VISIBLE_CATEGORY_INDEX will be shown in the
#   item category window (so you can remove any from the list).
#   This list can be arranged in any order desired.
 VISIBLE_CATEGORY_INDEX = {
  :item => "Common", #reserved symbol, but can be removed.
  :weapon => "Weapons", #reserved symbol, but can be removed.
  :armor => "Armor", #reserved symbol, but can be removed.
  :key_item => "Special", #reserved symbol, but can be removed.
  :all_item => "*ALL*", #reserved symbol, but can be removed.
  :potion => "Potions",
  :ammunition => "Ammo",
 }

#>> CategoryConditions - Specifies if a category is to be shown
#   On the left is identifying symbol from the CATEGORY_IDENTIFIER list
#   above and VISIBLE_CATEGORY_INDEX list. 
#   It must be a symbol present in that list above, OR, one of the
#   reserved symbols stated above. Make sure spelling is correct!
#   On the right the conditions used to determine if the category is displayed.
#   The CATEGORY_IDENTIFIER list must have the identifying symbol
#   on the left and on the right and they must be the same.
 CategoryConditions = {
  :item => lambda { !$game_party.items.empty? && $game_party.items.any? {|item| !item.key_item? }},
  :weapon => lambda { !$game_party.weapons.empty? },
  :armor => lambda { !$game_party.armors.empty? },
  :key_item => lambda { !$game_party.items.empty? && $game_party.items.any? {|item| item.key_item? }},
  :all_item => lambda { !$game_party.all_items.empty? },
  
  # CATEGORY_IDENTIFIER
  :potion => lambda { $game_party.all_items.any? {|item| item.find_category == :potion} },
  :ammunition => lambda { $game_party.all_items.any? {|item| item.find_category == :ammunition} },
 }

#>> CATEGORY_DESCRIPTION - Simple. The list below creates descriptions
#	 that will be shown in the help window. 
 CATEGORY_DESCRIPTION = {
  :item => "Viewing basic items.",
  :weapon => "Viewing attack-type items for use in battles.",
  :armor => "Viewing head, body, arm and leg equipment.",
  :key_item => "Viewing important items.",
  :all_item => "Viewing all items.",
  :potion => "Viewing potions.",
  :ammunition => "Viewing ammunition.",
 }

#>> I'm not sure how important setting this is.
 ITEM_DEFAULT_CATEGORY = :item #default= :item
 ITEM_DEFAULT_CATEGORY_INDEX = CATEGORY_IDENTIFIER.index(ITEM_DEFAULT_CATEGORY)

#>> AUTOFIT_CATEGORY_COLUMNS - Set to true if you want all the
#	 categories to autofit in the width of the item category window.
#	 Set to false if you only want CATEGORY_WINDOW_MAX_COLUMNS number
#	 of categories visible in the window width. If there are more
#	 categories than CATEGORY_WINDOW_MAX_COLUMNS, the rest will still be
#	 accessible to the right of the last category.
 AUTOFIT_CATEGORY_COLUMNS = true #default=true
 CATEGORY_WINDOW_MAX_COLUMNS = 5 #If autofit=false, this number is used.

#>> ALLOW_DUPLICATE - This is for when items have multiple tags
#	 in the notebox.
#   Set to true if you want to allow an item in other categories.
#   Setting to false will only choose the last category tag from the
#   item's notebox as the item's category.
 ALLOW_DUPLICATE = true #default=true

#>> CATEGORY_WINDOW_COL_WIDTH - Specify the width of the column to
#	 be used for each category. The category's text is auto-squished
#	 to fit.
 CATEGORY_WINDOW_COL_WIDTH = 50 #default=50

#>> CATEGORY_WINDOW_COL_SPACE - The amount of space-padding to be
#	 used on either end of the column.
 CATEGORY_WINDOW_COL_SPACE = 2 #default=2

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#>> DEFAULT_SCENE_ITEM_LAYOUT - If you want the normal item scene
#	 layout where the help window is on top, categories in the
#	 middle, and item list below set this to TRUE.
#	 If you wish to move and resize the windows yourself, set to
#	 FALSE and modify the CUSTOM LAYOUT SECTION below.
 DEFAULT_SCENE_ITEM_LAYOUT = true #default=true

#>> CUSTOM LAYOUT SECTION:
#	 The default settings below recreate the layout as if
#	 DEFAULT_SCENE_ITEM_LAYOUT was set to true above.
#-----------
# DEFAULTS:
#-----------
#  HELP_WINDOW_POSITION	  = [0, 0]
#  HELP_WINDOW_WIDTH		 = Graphics.width #or enter your own number
#  HELP_WINDOW_NUM_OF_LINES  = 2
#  CATEGORY_WINDOW_POSITION  = [0, 72]
#  CATEGORY_WINDOW_WIDTH	 = Graphics.width #or enter your own number
#  ITEMLIST_WINDOW_POSITION  = [0, 120]
#  ITEMLIST_WINDOW_HEIGHT	= 296

 HELP_WINDOW_POSITION	  = [0, 0]
 HELP_WINDOW_WIDTH		 = Graphics.width #or enter your own number
 HELP_WINDOW_NUM_OF_LINES  = 2
 CATEGORY_WINDOW_POSITION  = [0, 72]
 CATEGORY_WINDOW_WIDTH	 = Graphics.width #or enter your own number
 ITEMLIST_WINDOW_POSITION  = [0, 120]
 ITEMLIST_WINDOW_HEIGHT	= 296
#>> END OF LAYOUT SECTION
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

#-----------------------------------------------------------------------------#
#=============================================================================#
# END OF CUSTOMISATION SECTION
#=============================================================================#
#-----------------------------------------------------------------------------#
# DO NOT MODIFY ANYTHING BELOW HERE UNLESS YOU ARE SURE OF WHAT YOU'RE DOING! #
#-----------------------------------------------------------------------------#
#=============================================================================#
#=============================================================================#

 RESERVED_CATEGORY_INDEX = {
"All Items" => CATEGORY_IDENTIFIER.index(:all_item),
"Key Items" => CATEGORY_IDENTIFIER.index(:key_item),
"Weapons" => CATEGORY_IDENTIFIER.index(:weapon),
"Armor" => CATEGORY_IDENTIFIER.index(:armor),
"Items" => CATEGORY_IDENTIFIER.index(:item),
 }

 module Regexp
module BaseItem
  # Category tag string
  CATEGORY = /^<(?:CATEGORY|classification|category?)[ ]*(.*)>/i
end
 end

end # END OF module: ICAT

#=============================================================================#
# Creates the item category window from VISIBLE_CATEGORY_INDEX hash above.
#=============================================================================#
class ICAT_WindowItemCategory < Window_ItemCategory

 def initialize
  @category_list = []
  super
  self.z = 1000
  self.index = 0
 end

 def update_help
  @help_window.set_text(ICAT::CATEGORY_DESCRIPTION[@category_list[self.index]])
end

if ICAT::HIDECATEGORIES

 alias icat_make_command_list make_command_list
 def make_command_list
    ICAT::VISIBLE_CATEGORY_INDEX.each do |symbol, label|
    add_command(label, symbol) if ICAT::CategoryConditions[symbol].call
    @category_list << symbol if ICAT::CategoryConditions[symbol].call
    end
 end
  
else
  
 alias icat_make_command_list make_command_list
 def make_command_list
  ICAT::VISIBLE_CATEGORY_INDEX.each { |symbol, label|
    add_command(label, symbol)
    @category_list << symbol
  }
 end

end

 def col_max
  if ICAT::AUTOFIT_CATEGORY_COLUMNS
    cols = @category_list.length / 2
  else
    cols = ICAT::CATEGORY_WINDOW_MAX_COLUMNS
  end
  return cols == 0 ? 1 : cols
 end

 def window_width
  if ICAT::CATEGORY_WINDOW_WIDTH == nil
    return Graphics.width
  else
    return ICAT::CATEGORY_WINDOW_WIDTH
  end
 end

 def spacing
  return ICAT::CATEGORY_WINDOW_COL_SPACE
 end

end #class



#=============================================================================#
# Creates category array from BASEITEM database.
#=============================================================================#
class RPG::BaseItem
 attr_reader :icat

 def create_categorize_item_cache
  if @icat == nil
    @icat = []
  else
    @icat.compact!
  end
  self.note.split(/[\r\n]+/).each { |line|
    if line =~ ICAT::Regexp::BaseItem::CATEGORY
    c = ICAT::CATEGORY_IDENTIFIER.key($1)
    @icat << c if c != nil
    end
  }
  if @icat.empty?
    @icat << ICAT::ITEM_DEFAULT_CATEGORY_INDEX
  elsif !ICAT::ALLOW_DUPLICATE
    @icat = [@icat.pop]
  end
 end

 def item_category
  create_categorize_item_cache if @icat == nil
  return @icat
 end

 def find_category
  self.note.split(/[\r\n]+/).each { |line|
    if line =~ ICAT::Regexp::BaseItem::CATEGORY
    c = ICAT::CATEGORY_IDENTIFIER.key($1)
    return c if c != nil 
    end
  }
 end

end #class



#=============================================================================#
# Creates category array from USABLEITEM database.
#=============================================================================#
class RPG::UsableItem < RPG::BaseItem

 def create_categorize_item_cache
  @icat = []
  if key_item?
    @icat << ICAT::RESERVED_CATEGORY_INDEX.key("Key Items")
  elsif !key_item?
    @icat << ICAT::RESERVED_CATEGORY_INDEX.key("Items")
  end
  super
 end

end #class



#=============================================================================#
# Creates category array from WEAPON database.
#=============================================================================#
class RPG::Weapon < RPG::EquipItem

 def create_categorize_item_cache
  @icat = []
  @icat << ICAT::RESERVED_CATEGORY_INDEX.key("Weapons")
  super
 end

end #class



#=============================================================================#
# Creates category array from ARMOR database.
#=============================================================================#
class RPG::Armor < RPG::EquipItem

 def create_categorize_item_cache
  @icat = []
  @icat << ICAT::RESERVED_CATEGORY_INDEX.key("Armor")
  super
 end

end #class



#=============================================================================#
# Creates item window, categorised by RESERVED_CATEGORY_INDEX and by your own
# custom VISIBLE_CATEGORY_INDEX hash above.
#=============================================================================#
class Window_ItemList < Window_Selectable

 alias icat_initialize initialize
 def initialize(x, y, width, height)
  icat_initialize(x, y, width, height)
  @category = ICAT::VISIBLE_CATEGORY_INDEX
 end

 def include?(item)
  return false if item == nil
  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 :key_item
    item.is_a?(RPG::Item) && item.key_item?
  when :all_item
    item.is_a?(RPG::Item) || item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
  else
    ###### NEED TO CHECK FOR CUSTOM CATEGORIES HERE AND
    ###### DECIDE IF TO INCLUDE THE ITEM TO IT
    @icategory = item.item_category
    for i in @icategory do
    if @category == i
      return item.item_category.include?(@category)
    end
    end
    return false
  end #when
 end #def

end #class



#=============================================================================#
# Allows for the customisation of the help window.
#=============================================================================#
class Window_Help < Window_Base

 alias icat_help_initialize initialize
 def initialize(line_number = 2)
  if ICAT::DEFAULT_SCENE_ITEM_LAYOUT
    super(0, 0, Graphics.width, fitting_height(line_number))
  else
    super(
    ICAT::HELP_WINDOW_POSITION[0],
    ICAT::HELP_WINDOW_POSITION[1],
    ICAT::HELP_WINDOW_WIDTH,
    fitting_height(ICAT::HELP_WINDOW_NUM_OF_LINES))
  end
 end

end #class



#=============================================================================#
# Creates the entire item scene: item window, item categories, help window.
#=============================================================================#
class Scene_Item < Scene_ItemBase

 alias icat_create_category_window create_category_window
 #Create the item category window.
 def create_category_window
@category_window = ICAT_WindowItemCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.x = ICAT::CATEGORY_WINDOW_POSITION[0]
if ICAT::DEFAULT_SCENE_ITEM_LAYOUT #customise check
  @category_window.y = @help_window.height
else
  @category_window.y = ICAT::CATEGORY_WINDOW_POSITION[1]
end
@category_window.set_handler(:ok,	 method(:on_category_ok))
@category_window.set_handler(:cancel, method(:return_scene))
@category_window.opacity = 255 #255=totally opaque
@category_window.back_opacity = 255 #255=totally opaque
@category_window.contents_opacity = 255 #255=totally opaque
 end

 #Create the item list window.
 alias icat_create_item_window create_item_window
 def create_item_window
if ICAT::DEFAULT_SCENE_ITEM_LAYOUT #customise check
  wy = @category_window.y + @category_window.height
  wh = Graphics.height - wy
else
  wy = ICAT::ITEMLIST_WINDOW_POSITION[1]
  wh = ICAT::ITEMLIST_WINDOW_HEIGHT
end
@item_window = Window_ItemList.new(0, wy, Graphics.width, wh)
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.set_handler(:ok,	 method(:on_item_ok))
@item_window.set_handler(:cancel, method(:on_item_cancel))
@category_window.item_window = @item_window
 end

end #class

#=============================================================================#
# -------------------------------END OF SCRIPT------------------------------- #
#=============================================================================#

 

Updated again. Text description added for CategoryConditions

Edited by roninator2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×