Sry for double post, but my last one was 2 weeks ago.
My question is related to the issue.
Can I set up new recipes in KGC_ComposeItem with a script call.
I thought the recipes would be stored in some array, but I dont know where to find it.
Could anyone tell me what I would have to do to, for example set up a recipe for item #1 during the game?
Script:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ? 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[1] = [0, "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 = nil
# ? 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 = true
# ? 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 = true
# ? 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 # synth once to reveal name? Shit
# ? 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 ### hides when you lack gold
# ? 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
# ? Mask Unknown Recipe Toggle ?
# true = mask the names of recipes that cannot be synthesized.
# false = All recipe names are visible.
MASK_UNKNOWN_RECIPE_NAME = false
# ? 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 = true
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("%d/%s", number, m_number), 2)#######
else
m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
self.contents.draw_text(x, y + WLH, width - 32, WLH,
sprintf("%2d/%2s", number, m_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
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_