Jump to content

Recommended Posts

~ Categorize Item Scene v1.0 ~

create your own categories and assign

items, weapons, armor to them via notetags

 

Ported from RMVX to RMVXAce

by: Seiryuki

on: 2012-Jan-02

 

Original Script

by: KGC

on: 2008-Apr-10

for: RMVX

translated by: Mr. Anonymous

 

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 in the script.

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.

 

See script for full details on setup and use.

 

Screenshots

CategoriseItemScene.PNG

 

Script

MediaFire Link or,

 

#===============================================================
#==================== 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.
#=============================================================================#
#-----------------------------------------------------------------------------#

#>> 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",
}

#>> CATEGORY_DESCRIPTION - Simple. The list below creates descriptions
#	 that will be shown in the help window. BUT! Number of items in the
#	 this list MUST match the number of items in the VISIBLE_CATEGORY_INDEX
#	 list above.....and the arranged order too.
 CATEGORY_DESCRIPTION = [
#"Viewing basic items.",
"Viewing attack-type items for use in battles.",
"Viewing head, body, arm and leg equipment.",
"Viewing important items.",
"Viewing all items.",
"Viewing potions.",
"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
super
self.z = 1000
self.index = 0
 end

 def update_help
#I'm too lazy to find a way to identify description by symbol.
@help_window.set_text(ICAT::CATEGORY_DESCRIPTION[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)
}
 end

 def col_max
if ICAT::AUTOFIT_CATEGORY_COLUMNS
  cols = ICAT::VISIBLE_CATEGORY_INDEX.length
else
  cols = ICAT::CATEGORY_WINDOW_MAX_COLUMNS
end
return 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

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------------------------------- #
#=============================================================================#

 

 

I'm thinking about the ability for a category to be disabled using switches for each category. I may not do that yet, but if anyone is willing then go right ahead.

 

I also wanted to do the descriptions with symbols too, so that it would be more automatic and less of a bother to change when rearranging the order of the categories.

Edited by Seiryuki

Share this post


Link to post
Share on other sites

Yesss! I've so been looking forward to something like this. I love Ace categories, but I use them for work behind the scenes; I'd been hoping for a way to hide them the player, so this is a great help!

 

Now if there was just a solution to the battle window to get it back to where it just showed "Skills" I'd be one very happy designer :D

Share this post


Link to post
Share on other sites

Now if there was just a solution to the battle window to get it back to where it just showed "Skills" I'd be one very happy designer :D

I don't quite understand. Do you mean like a "Skills" category where you can select it and a window opens with all the skills/abilities in it? If so, then you can do already do that in the Database under the Terms tab. Create your Skill-Types (you can just create one: "Skills") and then under the Skills tab you would assign the Skills-Type "Skills" to each skill that you want in that category (skill-types are basically categories). Then make sure that the actor or class has that Skill-Type added under Traits. Now when you go in battle you would see the "Skills" category and you can select it to open up a window containing the list of skills, assuming that the actor has already learned some of those skills.

 

If you want more control over Skill-Types in a similar way to the Categorize Item Scene script above, you can make use of this script by Kread-Ex:

http://grimoirecastle.wordpress.com/2012/01/17/multiple-skill-types/

or a similar script by FenixFyreX:

http://www.rpgmakervxace.net/topic/964-multiple-skill-types-per-skill/

It allows you to assign a skill to multiple skill-types. I use this script to have more behind-the-scenes power over what the player sees in the Skill-Type categories.

I also created a script that makes use of the Multiple Skill-Types script above:

http://rmrk.net/index.php?topic=44946.0

It is called: Skill Menu With Horizontal Skill-Type Commands, and it overrides the default Skill Menu to have horizontal skill-type list instead of vertical (because I like it like that).....but.....it also has a neat feature that allows you to specify what skill-types you want to hide for each actor. Very powerful.

Share this post


Link to post
Share on other sites

Hi there !

Nice script, i was really needing it.

 

is there a way to add the same categories in the shop scene ?

Or do you plan to make it avaible for the future ?

 

thanks in advance

Share this post


Link to post
Share on other sites
I want to know if you would make it where we could use and icon instead of the word. Like for weapons I could just have a weapon.

I don't have any current plans to add that feature (although I would love to) primarily because I'm too preoccupied with school and work. However, please take a look at modern_algebra's script here:

http://rmrk.net/index.php/topic,46516.0.html

Share this post


Link to post
Share on other sites

Urh is it just me or do the custom categories don't appear at all when selling items at shops? Only the default Items, Weapons, Armors and Key Items are present. :o

Share this post


Link to post
Share on other sites

Forgive me the necroposting but... I would take a bullet for you!

 

B7EHWer.png

 

One of the most essential scripts I've seen around! The player benefits from this, specially if the game has hundreds of crafting ingredients and special items and all you want is to find that health potion!

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.

×
Top ArrowTop Arrow Highlighted