hey guys,
hope someone can help me with this.
The ComposeItem-Script allows to make several setting regarding the visibility of recipes; for example show or hide recipes, where the player lacks the required ingredients.
I however want the recipes to be hidden, until the player has at least one ingredient (which is not gold).The script in its form now does not allow this. It is only possible to either completly hide or show all recipes.
I would be thrilled if any of you guys could make a few tweaks to it, so this would work like I imagine it.
thanks in advance
EDIT: I see the HIDE_SHORTAGE_COST command nearly does, what I am looking for.
Only problem here that would have to be fixed is, that having gold is enough to unlock the recipe.
the script I am talking about:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ? Synthesize Items - KGC_ComposeItem ? VX ?
#_/ ? Last Update: 2008/08/01 ?
#_/ ? Translation by Mr. Anonymous ?
#_/ ? Special credit to Moon for Testing ?
#_/-----------------------------------------------------------------------------
#_/ This script opens the ability for the designer to allow items, weapons, &
#_/ armor to be created by the player through specified "recipies". It also
#_/ extends the normal shop event into becoming a Synthesize Shop, controlled
#_/ by a simple ON/OFF switch.
#_/=============================================================================
#_/ Install: Insert below KGC_UsableEquipment
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#==============================================================================#
# ? Customization ? #
#==============================================================================#
module KGC
module ComposeItem
# ? Compose Shop Switch ?
# This allows you to assign which SwitchID (Event Commands, Page 1 "Game
# Progression", Control Switch) you wish to control the Synthesis Shop.
# When that switch is turned ON, the Synthesis Shop replaces the normal
# shop screen. When OFF, the shop is normal.
COMPOSE_CALL_SWITCH = 5
# ? Recipe Tables ?
# The following lines allow you to create recipe tables of synthesizable
# items, weapons, and other equipment. Please do note overwrite:
# RECIPE_ITEM = [] # Item
# RECIPE_WEAPON = [] # Weapon
# RECIPE_ARMOR = [] # Armor
# Instead, add your custom recipes tables after those lines.
#
# ? Format
# RECIPE_TYPE[ItemID] = [Cost, "Type:ID",Quantity]
#
# ? Key
# Cost: Amount of money charged.
# Type: (I.Items W.Weapons A.Armor)
# ID: The ID number for the above specified material type.
# Quantity: The required amount of materials used.
#
# "Type:ID,Quantity" can be used multiple times for multiple items with their
# corresponding quantity. Also, the must be no space between the comma and
# the given quantity.
# The required quantity of an item is treated as 1 if quantity is omitted.
# Untested: It seems if you set Quantity to 0, the item is still required,
# but not 'consumed' or used.
# Also note that the item to be synthesized can be written as an array,
# allowing you to create multiple items of the same type that can be
# synthesized from the same recipe.
# Note: Do not alter or remove the next three lines, that is done below them.
RECIPE_ITEM = [] # Item
RECIPE_WEAPON = [] # Weapon
RECIPE_ARMOR = [] # Armor
# ? Custom Recipe Tables Inserted Below ?
# Examples:
# *Note: I use the default database items for these examples.
# Recipe for ItemID:8 (Elixer)
# Requirements: ItemID 2 (High potion), 4 (Magic water), 7 (Dispel herb)
# with a quantity of 1 for each(because it's omitted), at a cost of 0.
# RECIPE_ITEM[EXAMPLE] = [0, "I:2,2", "W:4,2", "A:7,2"].
# Recipe for WeaponID:16 (Flamberge)
# Requirements: WeaponID:10 (Bastard Sword)x1, ItemID:16 (Flame scroll)x2
# at a cost of 800 gold.
# Recipe for ArmorID:29 (Life Ring) AND ArmorID:30 (Sage's Ring)
# Requirements: ArmorID:23 (Fire Ring)x1, ItemID:9 (Life up)x1,
# ItemID:10 (Mana up)x1, ItemID:4 (Magic water)x5
# at a cost of 1,000 gold.
# ? Recipes For the Demo Only ?
# The following recipes are for items used in the demo. You may remove or
# alter these to your liking.
#RECIPES!!!!!!!!!!!!!!!!!!!!!!!:
#RECIPE_ITEM[3] = [66, "I:2,1", "w:4,2", ]
RECIPE_ITEM[3] = [5, "I:2,",]
# ? Compose Item Command Name ?
# This is displayed at the position of the "Buy" command.
VOCAB_COMPOSE_ITEM = "Synthesize"
# ? Parameter Changes Button ?
# Button that switches the required materials list with the parameter changes
# list. (The changes only show for equipment, obviously)
# SWITCH_INFO_BUTTON = Input::nil disables this.
SWITCH_INFO_BUTTON = Input::X
# ? Compact Material List ?
# This toggle allows you to compact(shrink) the recipe list when true.
COMPACT_MATERIAL_LIST = true
# ? Hide Command Window Toggle ?
# This toggle hides the command window (Synthesize, Sell, Cancel, Gold) after
# the synthesize option has been selected. The gold window is moved to the
# lower right corner.
# true = command window is hidden
# false = command window is shown
HIDE_COMMAND_WINDOW = false
# ? Hide Gold Window Toggle ?
# This toggle is to be used in conjunction with HIDE_COMMAND_WINDOW = true
# true = Hides the Gold/Money window.
# false = Disply the Gold/Money window.
# *Note: If HIDE_COMMAND_WINDOW = false, The gold window is always displayed.
HIDE_GOLD_WINDOW = false
# ? Hide Zero Cost Toggle ?
# true = When a synthesis recipe has a cost of 0, the cost is not displayed.
# false = When a synthesis recipe has a cost of 0, the cost is displayed.
HIDE_ZERO_COST = true
# ? ???????????????
# true : ??????????????????????
# false : ??????????????????
# Not sure what this is supposed to do at the moment.
SHOW_COMPOSED_RECIPE = false
# ? Hide Recipe Requirements Toggle ?
# This toggle allows you to hide recipe and materials required when you lack
# the items needed to create an item.
# true = Hide recipe and items required when you lack the items needed
# false = Show recipe requirements when you lack the items needed.
HIDE_SHORTAGE_COST = false
# ? Unknown Recipe Toggle ?
# true = Hides the names of recipes that cannot be synthesized.
# false = All recipe names are visible.
HIDE_SHORTAGE_MATERIAL = false
# ? ?? or ???????????????
#Recipes are not known or can not be lifted synthesis
# true : ?? or ??????????
# false : ???????????
# Not sure what this is supposed to do at the moment.
NEED_RECIPE_OPEN_OR_CLEAR = false # fucks everything
# ? Unknown Recipe Toggle ?
# true = Hides the names of recipes that cannot be synthesized.
# false = All recipe names are visible.
MASK_UNKNOWN_RECIPE_NAME = true
# ? Text Displayed on Masked Recipes ?
# If only one character is specified, it extends the length of the recipe
# name. Example: If UNKNOWN_NAME_MASK = "?", and let's say the recipe is
# for a Long Sword, then the displayed text would be "??????????"
UNKNOWN_NAME_MASK = "???"
# ? Hide Recipe Information Text ?
# This toggle allows you to mask the text displayed in the "Help" (topmost)
# window of a recipe that the player doesn't meet the requirements to make.
# true = mask the recipe's help text
# false = display the text normally
HIDE_UNKNOWN_RECIPE_HELP = false
# ? Information Text Displayed on Masked Recipes ?
# This allows you to change the text displayed in the "Help" (topmost) window
# of an unknown recipe. (When HIDE_UNKNOWN_RECIPE_HELP = true)
UNKNOWN_RECIPE_HELP = "You first have to obtain all resources!"
# ? Sell and Cancel Options in Command Window ?
# Added by Mr. Anonymous.
# This toggle allows you to remove the sell and cancel selections on the
# synthesize shop when set to true.
HIDE_SELL_CANCEL = false
end
end
#???????????????????????????????????????
$imported = {} if $imported == nil
$imported["ComposeItem"] = true
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
# 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.
module KGC::ComposeItem
module Regexp
# Recipe Tag
RECIPE = /([IWA])\s*:\s*(\d+)(\s*,\s*\d+)?/i
end
end
#???????????????????????????????????????
#==============================================================================
# ? KGC::Commands
#==============================================================================
module KGC::Commands
module_function
#--------------------------------------------------------------------------
# ? ???????????
# type : ??????? (0..???? 1..?? 2..??)
# id : ????? ID
# enabled : true..?? false..???
#--------------------------------------------------------------------------
def set_recipe_cleared(type, id, enabled = true)
item = nil
case type
when 0, :item # ????
item = $data_items[id]
when 1, :weapon # ??
item = $data_weapons[id]
when 2, :armor # ??
item = $data_armors[id]
end
$game_party.set_recipe_cleared(item, enabled) if item != nil
end
#--------------------------------------------------------------------------
# ? ???????????
# type : ??????? (0..???? 1..?? 2..??)
# id : ????? ID
# enabled : true..?? false..???
#--------------------------------------------------------------------------
def set_recipe_opened(type, id, enabled = true)
item = nil
case type
when 0, :item # ????
item = $data_items[id]
when 1, :weapon # ??
item = $data_weapons[id]
when 2, :armor # ??
item = $data_armors[id]
end
$game_party.set_recipe_opened(item, enabled) if item != nil
end
end
#???????????????????????????????????????
#==============================================================================
# ? Vocab
#==============================================================================
module Vocab
# ????
ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
end
#???????????????????????????????????????
#==============================================================================
# ? RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
@@__masked_name =
KGC::ComposeItem::UNKNOWN_NAME_MASK # ????
@@__expand_masked_name = false # ???????????
if @@__masked_name != nil
@@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
end
#--------------------------------------------------------------------------
# ? ??????????????
#--------------------------------------------------------------------------
def create_compose_item_cache
@__compose_cost = 0
@__compose_materials = []
# ?????
recipe = nil
case self
when RPG::Item # ????
recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
when RPG::Weapon # ??
recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
when RPG::Armor # ??
recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
end
return if recipe == nil
recipe = recipe.dup
@__compose_cost = recipe.shift
# ????????
recipe.each { |r|
if r =~ KGC::ComposeItem::Regexp::RECIPE
material = Game_ComposeMaterial.new
material.kind = $1.upcase # ????????
material.id = $2.to_i # ??? ID ???
if $3 != nil
material.number = [$3[/\d+/].to_i, 0].max # ??????
end
@__compose_materials << material
end
}
end
#--------------------------------------------------------------------------
# ? ????
#--------------------------------------------------------------------------
def masked_name
if KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
if @@__expand_masked_name
# ???????????
return @@__masked_name * self.name.scan(/./).size
else
return @@__masked_name
end
else
return self.name
end
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def compose_cost
create_compose_item_cache if @__compose_cost == nil
return @__compose_cost
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def compose_materials
create_compose_item_cache if @__compose_materials == nil
return @__compose_materials
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def is_compose?
return !compose_materials.empty?
end
end
#???????????????????????????????????????
#==============================================================================
# ? Game_Party
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ? ???????????
#--------------------------------------------------------------------------
def clear_composed_flag
@item_composed = {}
@weapon_composed = {}
@armor_composed = {}
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def clear_recipe_cleared_flag
@item_recipe_cleared = {}
@weapon_recipe_cleared = {}
@armor_recipe_cleared = {}
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def clear_recipe_opened_flag
@item_recipe_opened = {}
@weapon_recipe_opened = {}
@armor_recipe_opened = {}
end
#--------------------------------------------------------------------------
# ? ???????????????
# item : ????
# flag : true..???? false..???
#--------------------------------------------------------------------------
def set_item_composed(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ???????????????????
clear_composed_flag if @item_composed == nil
# ???????????
case item
when RPG::Item # ????
@item_composed[item.id] = flag
when RPG::Weapon # ??
@weapon_composed[item.id] = flag
when RPG::Armor # ??
@armor_composed[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ? ???????????
# item : ????
#--------------------------------------------------------------------------
def item_composed?(item)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ???????????????????
clear_composed_flag if @item_composed == nil
# ??????
case item
when RPG::Item # ????
return @item_composed[item.id]
when RPG::Weapon # ??
return @weapon_composed[item.id]
when RPG::Armor # ??
return @armor_composed[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ? ???????????????
# item : ????
# flag : true..???? false..???
#--------------------------------------------------------------------------
def set_item_composed(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ???????????????????
clear_composed_flag if @item_composed == nil
# ???????????
case item
when RPG::Item # ????
@item_composed[item.id] = flag
when RPG::Weapon # ??
@weapon_composed[item.id] = flag
when RPG::Armor # ??
@armor_composed[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ? ???????
# item : ????
#--------------------------------------------------------------------------
def recipe_cleared?(item)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ?????????????????
clear_recipe_cleared_flag if @item_recipe_cleared == nil
# ??
case item
when RPG::Item # ????
return @item_recipe_cleared[item.id]
when RPG::Weapon # ??
return @weapon_recipe_cleared[item.id]
when RPG::Armor # ??
return @armor_recipe_cleared[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ? ?????????????
# item : ????
# flag : true..?? false..???
#--------------------------------------------------------------------------
def set_recipe_cleared(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ?????????????????
clear_recipe_cleared_flag if @item_recipe_cleared == nil
# ?????????
case item
when RPG::Item # ????
@item_recipe_cleared[item.id] = flag
when RPG::Weapon # ??
@weapon_recipe_cleared[item.id] = flag
when RPG::Armor # ??
@armor_recipe_cleared[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ? ???????
# item : ????
#--------------------------------------------------------------------------
def recipe_opened?(item)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ?????????????????
clear_recipe_opened_flag if @item_recipe_opened == nil
# ??
case item
when RPG::Item # ????
return @item_recipe_opened[item.id]
when RPG::Weapon # ??
return @weapon_recipe_opened[item.id]
when RPG::Armor # ??
return @armor_recipe_opened[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ? ?????????????
# item : ????
# flag : true..?? false..???
#--------------------------------------------------------------------------
def set_recipe_opened(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
# ?????????????????
clear_recipe_opened_flag if @item_recipe_opened == nil
# ?????????
case item
when RPG::Item # ????
@item_recipe_opened[item.id] = flag
when RPG::Weapon # ??
@weapon_recipe_opened[item.id] = flag
when RPG::Armor # ??
@armor_recipe_opened[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ? ???????????
# item : ????
#--------------------------------------------------------------------------
def item_can_compose?(item)
return false unless item_compose_cost_satisfy?(item)
return false unless item_compose_material_satisfy?(item)
return true
end
#--------------------------------------------------------------------------
# ? ?????????????
# item : ????
#--------------------------------------------------------------------------
def item_compose_cost_satisfy?(item)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
return (gold >= item.compose_cost)
end
#--------------------------------------------------------------------------
# ? ?????????????
# item : ????
#--------------------------------------------------------------------------
def item_compose_material_satisfy?(item)
return false unless item.is_a?(RPG::BaseItem) # ??????
return false unless item.is_compose? # ????????
item.compose_materials.each { |material|
num = item_number(material.item)
return false if num < material.number || num == 0 # ????
}
return true
end
#--------------------------------------------------------------------------
# ? ?????????????
# item : ????
#--------------------------------------------------------------------------
def number_of_composable(item)
return 0 unless item.is_a?(RPG::BaseItem) # ??????
return 0 unless item.is_compose? # ????????
number = ($imported["LimitBreak"] ? item.number_limit : 99)
if item.compose_cost > 0
number = [number, gold / item.compose_cost].min
end
# ?????
item.compose_materials.each { |material|
next if material.number == 0 # ??? 0 ???
n = item_number(material.item) / material.number
number = [number, n].min
}
return number
end
end
#???????????????????????????????????????
#==============================================================================
# ? Game_ComposeMaterial
#------------------------------------------------------------------------------
# ??????????????????
#==============================================================================
class Game_ComposeMaterial
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :kind # ??????? (/[IWA]/)
attr_accessor :id # ????? ID
attr_accessor :number # ???
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def initialize
@kind = "I"
@id = 0
@number = 1
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def item
case @kind
when "I" # ????
return $data_items[@id]
when "W" # ??
return $data_weapons[@id]
when "A" # ??
return $data_armors[@id]
else
return nil
end
end
end
#???????????????????????????????????????
#==============================================================================
# ? Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ? ??????????
# item : ???? (????????????)
# x : ??? X ??
# y : ??? Y ??
# enabled : ??????false ?????????
#--------------------------------------------------------------------------
def draw_compose_item_name(item, x, y, enabled = true)
return if item == nil
draw_icon(item.icon_index, x, y, enabled)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
masked = !$game_party.item_composed?(item) &&
!$game_party.recipe_cleared?(item)
self.contents.draw_text(x + 24, y, 172, WLH,
masked ? item.masked_name : item.name)
end
end
#???????????????????????????????????????
#==============================================================================
# ? Window_ComposeNumber
#------------------------------------------------------------------------------
# ??????????????????????????????
#==============================================================================
class Window_ComposeNumber < Window_ShopNumber
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :sell_flag # ?????
#--------------------------------------------------------------------------
# ? ?????????
# x : ?????? X ??
# y : ?????? Y ??
#--------------------------------------------------------------------------
alias initialize_KGC_ComposeItem initialize unless $@
def initialize(x, y)
@sell_flag = false
initialize_KGC_ComposeItem(x, y)
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
y = 96
self.contents.clear
if @sell_flag
draw_item_name(@item, 0, y)
else
draw_compose_item_name(@item, 0, y)
end
self.contents.font.color = normal_color
self.contents.draw_text(212, y, 20, WLH, "x")
self.contents.draw_text(248, y, 20, WLH, @number, 2)
self.cursor_rect.set(244, y, 28, WLH)
if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
end
end
end
#???????????????????????????????????????
#==============================================================================
# ? Window_ComposeItem
#------------------------------------------------------------------------------
# ?????????????????????????????
#==============================================================================
class Window_ComposeItem < Window_ShopBuy
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
@data = []
for goods_item in @shop_goods
case goods_item[0]
when 0
item = $data_items[goods_item[1]]
when 1
item = $data_weapons[goods_item[1]]
when 2
item = $data_armors[goods_item[1]]
end
# ??????????
@data.push(item) if include?(item)
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ? ????????????????
# item : ????
#--------------------------------------------------------------------------
def include?(item)
return false if item == nil # ????? nil ??????
return false unless item.is_compose? # ?????????????
# ????????
if KGC::ComposeItem::SHOW_COMPOSED_RECIPE
return true if $game_party.item_composed?(item)
end
# ?? or ????????
if $game_party.recipe_cleared?(item) || $game_party.recipe_opened?(item)
return true
end
# ????????
if KGC::ComposeItem::HIDE_SHORTAGE_COST
return false unless $game_party.item_compose_cost_satisfy?(item)
end
# ????????
if KGC::ComposeItem::HIDE_SHORTAGE_MATERIAL
return false unless $game_party.item_compose_material_satisfy?(item)
end
if KGC::ComposeItem::NEED_RECIPE_OPEN_OR_CLEAR
# ?? or ???????
unless $game_party.recipe_cleared?(item) ||
$game_party.recipe_opened?(item)
return false
end
end
return true
end
#--------------------------------------------------------------------------
# ? ??????????????????
# item : ????
#--------------------------------------------------------------------------
def enable?(item)
return $game_party.item_can_compose?(item)
end
#--------------------------------------------------------------------------
# ? ?????
# index : ????
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
number = $game_party.item_number(item)
limit = ($imported["LimitBreak"] ? item.number_limit : 99)
rect = item_rect(index)
self.contents.clear_rect(rect)
draw_compose_item_name(item, rect.x, rect.y, enable?(item))
# ?????
if !KGC::ComposeItem::HIDE_ZERO_COST || item.compose_cost > 0
rect.width -= 4
self.contents.draw_text(rect, item.compose_cost, 2)
end
end
if KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_HELP
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_help
item = (index >= 0 ? @data[index] : nil)
if item == nil || $game_party.item_composed?(item) ||
$game_party.recipe_cleared?(item)
# ????? nil or ???? or ?????? [Window_ShopBuy] ????
super
else
@help_window.set_text(KGC::ComposeItem::UNKNOWN_RECIPE_HELP)
end
end
end
end
#???????????????????????????????????????
#==============================================================================
# ? Window_ComposeStatus
#------------------------------------------------------------------------------
# ??????????????????????????????
#==============================================================================
class Window_ComposeStatus < Window_ShopStatus
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
MODE_MATERIAL = 0 # ?????
MODE_STATUS = 1 # ??????????
#--------------------------------------------------------------------------
# ? ?????????
# x : ?????? X ??
# y : ?????? Y ??
#--------------------------------------------------------------------------
def initialize(x, y)
@mode = MODE_MATERIAL
super(x, y)
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def change_mode
case @mode
when MODE_MATERIAL
@mode = MODE_STATUS
when MODE_STATUS
@mode = MODE_MATERIAL
end
self.oy = 0
refresh
end
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
def create_contents
if @mode == MODE_STATUS
super
return
end
self.contents.dispose
ch = height - 32
if @item != nil
mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
ch = [ch, WLH * (mag + @item.compose_materials.size * mag)].max
end
self.contents = Bitmap.new(width - 32, ch)
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
create_contents
self.contents.font.size = Font.default_size
case @mode
when MODE_MATERIAL
draw_material_list
when MODE_STATUS
super
end
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def draw_material_list
return if @item == nil
number = $game_party.item_number(@item)
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 200, WLH, number, 2)
self.contents.font.size = 16 if KGC::ComposeItem::COMPACT_MATERIAL_LIST
mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
@item.compose_materials.each_with_index { |material, i|
y = WLH * (mag + i * mag)
draw_material_info(0, y, material)
}
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def draw_material_info(x, y, material)
m_item = material.item
return if m_item == nil
number = $game_party.item_number(m_item)
enabled = (number > 0 && number >= material.number)
draw_item_name(m_item, x, y, enabled)
if KGC::ComposeItem::COMPACT_MATERIAL_LIST
m_number = (material.number == 0 ? "-" : sprintf("%d", material.number))
self.contents.draw_text(x, y, width - 32, WLH,
sprintf("%s/%d", m_number, number), 2)
else
m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
self.contents.draw_text(x, y + WLH, width - 32, WLH,
sprintf("%2s/%2d", m_number, number), 2)
end
end
end
#???????????????????????????????????????
#==============================================================================
# ? Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
alias call_shop_KGC_ComposeItem call_shop
def call_shop
# ????????????
if $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH]
# ???????
$game_temp.next_scene = nil
$game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH] = false
$scene = Scene_ComposeItem.new
else
call_shop_KGC_ComposeItem
end
end
end
#???????????????????????????????????????
#==============================================================================
# ? Scene_ComposeItem
#------------------------------------------------------------------------------
# ?????????????????
#==============================================================================
class Scene_ComposeItem < Scene_Shop
#--------------------------------------------------------------------------
# ? ????
#--------------------------------------------------------------------------
def start
super
# ????????????
if KGC::ComposeItem::HIDE_COMMAND_WINDOW
@command_window.visible = false
@gold_window.y = Graphics.height - @gold_window.height
@gold_window.z = @status_window.z + 100
@gold_window.visible = !KGC::ComposeItem::HIDE_GOLD_WINDOW
@dummy_window.y = @command_window.y
@dummy_window.height += @command_window.height
end
# [Scene_Shop] ????????????? @buy_window ???
@buy_window.dispose
@buy_window = Window_ComposeItem.new(0, @dummy_window.y)
@buy_window.height = @dummy_window.height
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window
# ?????????????
@number_window.dispose
@number_window = Window_ComposeNumber.new(0, @buy_window.y)
@number_window.height = @buy_window.height
@number_window.create_contents
@number_window.active = false
@number_window.visible = false
@status_window.dispose
@status_window = Window_ComposeStatus.new(@buy_window.width, @buy_window.y)
@status_window.height = @buy_window.height
@status_window.create_contents
@status_window.visible = false
# ????????????????????????????
if KGC::ComposeItem::HIDE_COMMAND_WINDOW
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.update_help
@status_window.visible = true
@status_window.item = @buy_window.item
end
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::ComposeItem
s2 = Vocab::ShopSell
s3 = Vocab::ShopCancel
# Added 4/11 [Mr. Anonymous]
if KGC::ComposeItem::HIDE_SELL_CANCEL
@command_window = Window_Command.new(150, [s1], 1)
else
@command_window = Window_Command.new(384, [s1, s2, s3], 3)
end
#@command_window = Window_Command.new(384, [s1, s2, s3], 3)
@command_window.y = 56
if $game_temp.shop_purchase_only
@command_window.draw_item(1, false)
end
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
super
if KGC::ComposeItem::SWITCH_INFO_BUTTON != nil &&
Input.trigger?(KGC::ComposeItem::SWITCH_INFO_BUTTON)
Sound.play_cursor
@status_window.change_mode
end
end
#--------------------------------------------------------------------------
# ? ???????????
#--------------------------------------------------------------------------
def update_buy_selection
@number_window.sell_flag = false
# ????????????? B ??????????
if KGC::ComposeItem::HIDE_COMMAND_WINDOW && Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
return
end
@status_window.item = @buy_window.item
if Input.trigger?(Input::C)
@item = @buy_window.item
# ?????????????
if @item == nil
Sound.play_buzzer
return
end
# ????? or ??????????????????
number = $game_party.item_number(@item)
limit = ($imported["LimitBreak"] ? @item.number_limit : 99)
if !$game_party.item_can_compose?(@item) || number == limit
Sound.play_buzzer
return
end
# ?????????
Sound.play_decision
max = $game_party.number_of_composable(@item)
max = [max, limit - number].min
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@item, max, @item.compose_cost)
@number_window.active = true
@number_window.visible = true
return
end
super
end
#--------------------------------------------------------------------------
# ? ???????????
#--------------------------------------------------------------------------
def update_sell_selection
@number_window.sell_flag = true
super
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def decide_number_input
if @command_window.index != 0 # ????????
super
return
end
Sound.play_shop
@number_window.active = false
@number_window.visible = false
# ????
operation_compose
@gold_window.refresh
@buy_window.refresh
@status_window.refresh
@buy_window.active = true
@buy_window.visible = true
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def operation_compose
$game_party.lose_gold(@number_window.number * @item.compose_cost)
$game_party.gain_item(@item, @number_window.number)
# ??????
@item.compose_materials.each { |material|
$game_party.lose_item(material.item,
material.number * @number_window.number)
}
# ???????
$game_party.set_item_composed(@item)
end
end
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ The original untranslated version of this script can be found here:
# http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/item&tech=compose_item
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_