Help - Search - Members - Calendar
Full Version: [RESOLVED]KGC Categorize Item
RPG RPG Revolution Forums > Scripting > Script Development and Support
Grandhoug
Hello I was wondering if anyone knew what this part of KGC's Categorize Item script was for...
[Show/Hide] This part here
module KGC::CategorizeItem
# ◆ Item Index ◆
ITEM_DEFAULT_CATEGORY_INDEX = CATEGORY_IDENTIFIER.index(ITEM_DEFAULT_CATEGORY)

# ◆ Reserved Category Index ◆
# To be honest I'm not entirely sure what this affects.(Quote by translator, Mr. A)
RESERVED_CATEGORY_INDEX = {
"All Items" => CATEGORY_IDENTIFIER.index("All Items"),
"Valuables" => CATEGORY_IDENTIFIER.index("Valuables"),
"Weapons" => CATEGORY_IDENTIFIER.index("Weapons"),
"Gear" => CATEGORY_IDENTIFIER.index("Gear"),
"Shields" => CATEGORY_IDENTIFIER.index("Shields"),
"Helmets" => CATEGORY_IDENTIFIER.index("Helmets"),
"Armor" => CATEGORY_IDENTIFIER.index("Armor"),
"Accessories" => CATEGORY_IDENTIFIER.index("Accessories")
}

[Show/Hide] Whole script
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ◆ Item Categorization - KGC_CategorizeItem ◆ VX ◆
#_/ ◇ Last update : 2008/04/10 ◇
#_/ ◇ Translated by Mr. Anonymous ◇
#_/ ◆ http://ytomy.sakura.ne.jp/
#_/-----------------------------------------------------------------------------
#_/ Adds a function to the Items screen which allows the player to display
#_/ items by catagory.
#_/ To assign a category to an item, you must add to the
#_/ notes on the specified item.
#_/ EX. A Potion would be listed as and a Sword would be
#_/ listed as , provided you use the default terminology.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

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

#==============================================================================#
# ★ Customization ★ #
#==============================================================================#

module KGC
module CategorizeItem
# ◆ Automatically Catagorize Items ◆
ENABLE_AUTO_CATEGORIZE = true

# ◆ Duplicate Category Entries. ◆
# Set to false, items can have multiple categories.
# Set to true, items will be classified under the last tag (In the item
# database "Notes")
NOT_ALLOW_DUPLICATE = true

# ◆ Category Identifier ◆
# Arrange names in order to identify a category with the category identifier.
# These are the default item catagories translated for future reference.
# "Goods", "Combat", "Weapons", "Shields", "Helmets", "Armor",
# "Accessories", "Valuables", "Special Items", "All Items"
CATEGORY_IDENTIFIER = [
"Goods", # Consumable items (potion)
"Combat", # Battle-only items (fire bomb)
"Weapons", # Weapons
"Shields", # Shields
"Helmets", # Head Gear / Helmets
"Armor", # Body Gear / Armor
"Accessories", # Accessories / Rings, Necklaces, etc
"Valuables", # Treasures and the like
"Special Items", # AKA Plot Devices. Special keys, etc.
"All Items", # All Items
]

# ◆ Default Catagory Display ◆
# Not hard to figure this one out.
ITEM_DEFAULT_CATEGORY = "Inventory"

# ◆ Item Screen Category Name ◆
# Shows what current category is selected in the item description window.
# Must be arranged in the same order as CATAGORY_IDENTIFIER.
CATEGORY_NAME = [
"Goods",
"Combat",
Vocab.weapon, # Weapons
Vocab.armor1, # Shields
"#{Vocab.armor2}", # Head Gear
"#{Vocab.armor3}", # Body Gear
Vocab.armor4, # Accessories
"Valuables",
"Special",
"All",
]

# ◆ Descriptive Text ◆
# Must be arranged in the same order as CATAGORY_IDENTIFIER
CATEGORY_DESCRIPTION = [
"Viewing #{Vocab.item}.",
"Viewing Combat #{Vocab.item}. For use during battle.",
"Viewing #{Vocab.weapon}s.",
"Viewing #{Vocab.armor1}s.",
"Viewing #{Vocab.armor2}s.",
"Viewing #{Vocab.armor3}s.",
"Viewing #{Vocab.armor4}.",
"Viewing Valuables.",
"Viewing Special #{Vocab.item}. A.K.A. Plot Devices.",
"Viewing All #{Vocab.item}.",
]

# ◆ Coordinates of item description window. [ x, y ]
CATEGORY_WINDOW_POSITION = [1, 48]
# ◆ Number of rows in the item description window.
CATEGORY_WINDOW_COLUMNS = 10
# ◆ Item description window column line width.
CATEGORY_WINDOW_COL_WIDTH = 50
# ◆ item description window column spacer width.
CATEGORY_WINDOW_COL_SPACE = 1
end
end

#------------------------------------------------------------------------------#

$imported = {} if $imported == nil
$imported["CategorizeItem"] = true

module KGC::CategorizeItem
# ◆ Item Index ◆
ITEM_DEFAULT_CATEGORY_INDEX = CATEGORY_IDENTIFIER.index(ITEM_DEFAULT_CATEGORY)

# ◆ Reserved Category Index ◆
# To be honest I'm not entirely sure what this affects.
RESERVED_CATEGORY_INDEX = {
"All Items" => CATEGORY_IDENTIFIER.index("All Items"),
"Valuables" => CATEGORY_IDENTIFIER.index("Valuables"),
"Weapons" => CATEGORY_IDENTIFIER.index("Weapons"),
"Gear" => CATEGORY_IDENTIFIER.index("Gear"),
"Shields" => CATEGORY_IDENTIFIER.index("Shields"),
"Helmets" => CATEGORY_IDENTIFIER.index("Helmets"),
"Armor" => CATEGORY_IDENTIFIER.index("Armor"),
"Accessories" => CATEGORY_IDENTIFIER.index("Accessories")
}

# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
# Unless you know what you're doing, it's best not to alter anything beyond #
# this point, as this only affects the tags used for "Notes" in database. #
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
# Whatever word(s) are after the separator ( | ) in the following lines are
# what are used to determine what is searched for in the "Notes" section.

# Regular exp​ression Definition
module Regexp
# Base Item Module
module BaseItem
# Category tag string
CATEGORY = /^<(?:CATEGORY|classification|category?)[ ]*(.*)>/i
end
end
end

#==============================================================================
# ■ RPG::BaseItem
#==============================================================================

class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ アイテム分類のキャッシュ�"�成
#--------------------------------------------------------------------------
def create_categorize_item_cache
if @__item_category == nil || !KGC::CategorizeItem::ENABLE_AUTO_CATEGORIZE
@__item_category = []
else
@__item_category.compact!
end

self.note.split(/[\r\n]+/).each { |line|
if line =~ KGC::CategorizeItem::Regexp::BaseItem::CATEGORY
# カテゴリ
c = KGC::CategorizeItem::CATEGORY_IDENTIFIER.index($1)
@__item_category << c if c != nil
end
}
if @__item_category.empty?
@__item_category << KGC::CategorizeItem::ITEM_DEFAULT_CATEGORY_INDEX
elsif KGC::CategorizeItem::NOT_ALLOW_DUPLICATE
# 最後に指定したカテゴリに配置
@__item_category = [@__item_category.pop]
end
end
#--------------------------------------------------------------------------
# ○ アイテムのカテゴリ
#--------------------------------------------------------------------------
def item_category
create_categorize_item_cache if @__item_category == nil
return @__item_category
end
end

#==================================End Class===================================#

#==============================================================================
# ■ RPG::UsableItem
#==============================================================================

class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ アイテム分類のキャッシュ�"�成
#--------------------------------------------------------------------------
def create_categorize_item_cache
@__item_category = []
if self.price == 0
@__item_category << KGC::CategorizeItem::RESERVED_CATEGORY_INDEX["Valuables"]
end
super
end
end

#==================================End Class===================================#

#==============================================================================
# ■ RPG::Weapon
#==============================================================================

class RPG::Weapon < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ アイテム分類のキャッシュ�"�成
#--------------------------------------------------------------------------
def create_categorize_item_cache
@__item_category = []
@__item_category << KGC::CategorizeItem::RESERVED_CATEGORY_INDEX["Weapon"]
super
end
end

#==================================End Class===================================#

#==============================================================================
# ■ RPG::Armor
#==============================================================================

class RPG::Armor < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ アイテム分類のキャッシュ�"�成
#--------------------------------------------------------------------------
def create_categorize_item_cache
@__item_category = []
@__item_category << KGC::CategorizeItem::RESERVED_CATEGORY_INDEX["Armor"]
type = nil
case self.kind
when 0
type = "Shields"
when 1
type = "Head Gear"
when 2
type = "Body Gear"
when 3
type = "Accessories"
end
if type != nil
@__item_category << KGC::CategorizeItem::RESERVED_CATEGORY_INDEX[type]
end
super
end
end

#==================================End Class===================================#

#==============================================================================
# ■ Window_Item
#==============================================================================

class Window_Item < Window_Selectable
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :category # カテゴリ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# width : ウィンドウの幅
# height : ウィンドウの高さ
#--------------------------------------------------------------------------
alias initialize_KGC_CategorizeItem initialize
def initialize(x, y, width, height)
@category = 0

initialize_KGC_CategorizeItem(x, y, width, height)
end
#--------------------------------------------------------------------------
# ○ カテゴリ設定
#--------------------------------------------------------------------------
def category=(value)
@category = value
refresh
end
#--------------------------------------------------------------------------
# ● アイテム�'リストに含めるかどうか
# item : アイテム
#--------------------------------------------------------------------------
alias include_KGC_CategorizeItem? include?
def include?(item)
return false if item == nil

# 「全種」なら無条件で含める
if @category == KGC::CategorizeItem::RESERVED_CATEGORY_INDEX["All Items"]
return true
end

result = include_KGC_CategorizeItem?(item)

unless result
# 使�"�可能なら追加候補とする
if $imported["UsableEquipment"] && $game_party.item_can_use?(item)
result = true
end
end
# 戦闘外ならカテゴリ一致判定
unless $game_temp.in_battle
result &= (item.item_category.include?(@category))
end

return result
end
end

#==================================End Class===================================#

#==============================================================================
# □ Window_ItemCategory
#------------------------------------------------------------------------------
#  アイテム�"�面でカテゴリ選択�'行うウィンドウです。
#==============================================================================

class Window_ItemCategory < Window_Command
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
cols = KGC::CategorizeItem::CATEGORY_WINDOW_COLUMNS
width = KGC::CategorizeItem::CATEGORY_WINDOW_COL_WIDTH * cols + 32
width += (cols - 1) * KGC::CategorizeItem::CATEGORY_WINDOW_COL_SPACE
commands = KGC::CategorizeItem::CATEGORY_NAME
super(width, commands, cols, 0,
KGC::CategorizeItem::CATEGORY_WINDOW_COL_SPACE)
self.x = KGC::CategorizeItem::CATEGORY_WINDOW_POSITION[0]
self.y = KGC::CategorizeItem::CATEGORY_WINDOW_POSITION[1]
self.z = 1000
self.index = 0
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(KGC::CategorizeItem::CATEGORY_DESCRIPTION[self.index])
end
end

#==================================End Class===================================#

#==============================================================================
# ■ Scene_Item
#==============================================================================

class Scene_Item < Scene_Base
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias start_KGC_CategorizeItem start
def start
start_KGC_CategorizeItem

@category_window = Window_ItemCategory.new
@category_window.help_window = @help_window
show_category_window
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
alias terminate_KGC_CategorizeItem terminate
def terminate
terminate_KGC_CategorizeItem

@category_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_KGC_CategorizeItem update
def update
@category_window.update

update_KGC_CategorizeItem

if @category_window.active
update_category_selection
end
end
#--------------------------------------------------------------------------
# ○ カテゴリ選択の更新
#--------------------------------------------------------------------------
def update_category_selection
unless @category_activated
@category_activated = true
return
end

# 選択カテゴリー変更
if @last_category_index != @category_window.index
@item_window.category = @category_window.index
@item_window.refresh
@last_category_index = @category_window.index
end

if Input.trigger?(Input:: cool.gif
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
Sound.play_decision
hide_category_window
end
end
#--------------------------------------------------------------------------
# ● アイテム選択の更新
#--------------------------------------------------------------------------
alias update_item_selection_KGC_CategorizeItem update_item_selection
def update_item_selection
if Input.trigger?(Input:: cool.gif
Sound.play_cancel
show_category_window
return
end

update_item_selection_KGC_CategorizeItem
end
#--------------------------------------------------------------------------
# ○ カテゴリウィンドウの表示
#--------------------------------------------------------------------------
def show_category_window
@category_window.open
@category_window.active = true
@item_window.active = false
end
#--------------------------------------------------------------------------
# ○ カテゴリウィンドウの非表示
#--------------------------------------------------------------------------
def hide_category_window
@category_activated = false
@category_window.close
@category_window.active = false
@item_window.active = true
# アイテムウィンドウのインデックス�'調整
if @item_window.index >= @item_window.item_max
@item_window.index = [@item_window.item_max - 1, 0].max
end
end
end

#==================================End Class===================================#

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ The original untranslated version of this script can be found here:
# http://f44.aaa.livedoor.jp/~ytomy/tkool/rp...categorize_item
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_


I'm not a scripter but I've messed around with that part, so if no one knows what that does, might someone be able to know how to have categories under categories.(EXAMPLE: 'Sword' and 'Axe' categories would go under the category 'Weapons', or 'Potions' and 'Scrolls' would go under the 'Items' category.)
Grandhoug
bump
SojaBird
Hey hey,

Oke so let's break this down...
CODE
module KGC::CategorizeItem
# ◆ Item Index ◆
ITEM_DEFAULT_CATEGORY_INDEX = CATEGORY_IDENTIFIER.index(ITEM_DEFAULT_CATEGORY)
So firstly what this does, is setting the index when opening the categorized-item scene.
It's a bit oddly writen but it must be of some use.
So actualy, it tells the script what the default index should be (ITEM_DEFAULT_CATEGORY_INDEX).
This is done by some other variable (probably set by the user), collected through a typical methode.
It's catching a number through a string, set by the user (this variable would be ITEM_DEFAULT_CATEGORY and could be "All Items" for example).
It takes the index of that string, wich is positioned in the CATEGORY_IDENTIFIER array.
So there's nothing to change here.
Change the ITEM_DEFAULT_CATEGORY string to change the start-index (this variable is found in some other part I pressume).

Let's get on with it...
CODE
# ◆ Reserved Category Index ◆
# To be honest I'm not entirely sure what this affects.(Quote by translator, Mr. A)
RESERVED_CATEGORY_INDEX = {
"All Items" => CATEGORY_IDENTIFIER.index("All Items"),
"Valuables" => CATEGORY_IDENTIFIER.index("Valuables"),
"Weapons" => CATEGORY_IDENTIFIER.index("Weapons"),
"Gear" => CATEGORY_IDENTIFIER.index("Gear"),
"Shields" => CATEGORY_IDENTIFIER.index("Shields"),
"Helmets" => CATEGORY_IDENTIFIER.index("Helmets"),
"Armor" => CATEGORY_IDENTIFIER.index("Armor"),
"Accessories" => CATEGORY_IDENTIFIER.index("Accessories")
}
So the rest is actualy a hash (it's an array though with self-set strings as label instead of numbers).
That it does, is actualy defining in wich tab items/weapons/armor should be placed when they have a sertain string in their notefield.
This particular string, are those at the end of each line (between bracklets).
So only those could be changed so you can set up the notefield tags however you want.
The first strings though, wich serve as labels, can't be changed... well you could though in the rest of the script there are references to those names, so they can get the date attached to these labes.
So I actualy reconment you to not change those first strings (unless you realy know what you're doing (it wouldn't make sense for functionality but yea...)).

Hope that helped.
I don't know why you wanted to know this but hey, it's good to learn smile.gif


Greatzz,
SojaBird.
Grandhoug
Thanks alot, since I (and Mr.Anonymous)didn't know what that part did, I was hoping that it would let me have sub categories.(EXAMPLE: 'Sword' and 'Axe' categories would go under the category 'Weapons', or 'Potions' and 'Scrolls' would go under the 'Items' category.)
SojaBird
Hey,

Oke nice to know it helped you.
I think you sertainly can add more categories if you also add the rest of it.
Cause there seems to be some other code for each category thing.

Let me know if you need more help.


Greatzz,
SojaBird.
Siggi Trust
hey, I don't knowif you'll ever get this since this post is this old but I was wondering, I'm using the Item Categorization script from KGC but I'm having trouble editing it so that it only shows, Use - Equipment - Loot - Key. Then obviously I want the appropriate items to display in each list. I'll possibly combine Use Items and Loot into a single group and call it something appropriate. For a beginner I'm doing pretty good, I've edited some scripts here and there, but any help with this is highly appreciated. Thanks
Night_Runner
I just changed some of the tags under Category Identifier, Default Category Display, Item Screen Category Name & Descriptive text and it seems to be working fine....

CODE
  #                      —† Category Identifier —†
  #  Arrange names in order to identify a category with the category identifier.
  #  These are the default item catagories translated for future reference.
  #  "Goods", "Combat", "Weapons", "Shields", "Helmets", "Armor",
  #  "Accessories", "Valuables", "Special Items", "All Items"
  CATEGORY_IDENTIFIER = [
    "Use", "Equipment", "Loot", "Key"
  ]
  
  #                   —† Default Catagory Display —†
  #  Not hard to figure this one out.
  ITEM_DEFAULT_CATEGORY = "Inventory"

  #                   —† Item Screen Category Name —†
  #  Shows what current category is selected in the item description window.
  #  Must be arranged in the same order as CATAGORY_IDENTIFIER.
  CATEGORY_NAME = [
    "Use", "Equipment", "Loot", "Key"
  ]

  #                       —† Descriptive Text —†
  #  Must be arranged in the same order as CATAGORY_IDENTIFIER
  CATEGORY_DESCRIPTION = [
    "Usable items", "Equipment", "Loot", "Key"
  ]


And the columns to reflect the smaller amount of options
CODE
  # —† Number of rows in the item description window.
  CATEGORY_WINDOW_COLUMNS   = 4
  # —† Item description window column line width.
  CATEGORY_WINDOW_COL_WIDTH = 127


And make sure that the item is setup properly
img



And please don't necropost, if you need help and the answer can't be found through google start a new topic smile.gif
Siggi Trust
Good lord I can't thank you enough. This works brilliantly. Can't imagine why I had such a problem with this.

And sorry about the necropost, the new word in my vocabulary. Thought it would be better to "master" this topic rather than making a new one happy.gif

One thing though, if it's something easy to do or if you have any idea, is there any way to make the equipment under the Equipment list show in white rather than grey. I don't want to be able to use them or select them in any way, just show them as white since this list of equipment is just for viewing your inventory. It's not a major deal but if you have any clue about it.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2013 Invision Power Services, Inc.