Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

 
Reply to this topicStart new topic
> KGC Compose Item Script
tyladras
post Nov 30 2010, 02:16 AM
Post #1


Level 2
Group Icon

Group: Member
Posts: 24
Type: Musician
RM Skill: Masterful




Hi folks,

I have been looking at the script and I can't get the 1/0 to show 0/1.... I come close but I was wondering if someone could explain the reason why it does this or (hopefully) amend the script slightly so it shows correctly. I have added a screen shot to explain what I require as well as the script.

Spoiler


CODE
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ◆ Synthesize Items - KGC_ComposeItem ◆ VX ◆
#_/ ◇ Last Update: 2008/08/01 ◇
#_/ ◆ Translation by Mr. Anonymous ◆
#_/ ◆ Special credit to Moon for Testing ◆
#_/ ◆ http://ytomy.sakura.ne.jp/
#_/-----------------------------------------------------------------------------
#_/ 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 = 51

# ◆ 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[8] = [0, "I:1,4", "I:4,2",] # This can be replaced/removed.
# Recipe for WeaponID:16 (Flamberge)
# Requirements: WeaponID:10 (Bastard Sword)x1, ItemID:16 (Flame scroll)x2
# at a cost of 800 gold.
RECIPE_WEAPON[16] = [800, "W:10", "I:16,2"] # This can be replaced/removed.
# 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.
RECIPE_ARMOR[29, 30] = [1000, "A:23", "I:09", "I:10", "I:4,5"] # Removable
# ◆ Recipes For the Demo Only ◆
# The following recipes are for items used in the demo. You may remove or
# alter these to your liking.
RECIPE_ITEM[2] = [0, "I:1,2"]
RECIPE_ITEM[5] = [0, "I:1,3"]
RECIPE_ITEM[6] = [0, "I:44,1", "I:41,1"]
RECIPE_ITEM[9] = [0, "I:3,3", "I:4,3"]
RECIPE_ARMOR[37] = [300, "I:40,2", "I:45,2", "I:46,1"]
RECIPE_WEAPON[41] = [500, "I:42,1", "I:43,1", "I:47,1"]
RECIPE_WEAPON[42] = [1700, "I:22,20", "I:48,1", "I:49,2"]
RECIPE_WEAPON[43] = [1100, "I:21,35", "I:50,1",]
RECIPE_WEAPON[44] = [1100, "I:21,35", "I:51,1",]
RECIPE_WEAPON[45] = [1100, "I:42,35", "I:49,3", "I:52,1"]
RECIPE_ARMOR[38] = [200, "I:40,1" "I:47,1" "I:50,1" "I:51,1"]
# ◆ 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 解禁していないレシピは合成不可
# true : 判明 or 解禁するまで合成不可
# false : 素材さえあれば合成可能
# Not sure what this is supposed to do at the moment.
NEED_RECIPE_OPEN_OR_CLEAR = false

# ◆ Unknown Recipe Toggle ◆
# true = Hides 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 = "What does this recipe create? Who knows!"

# ◆ 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::cool.gif
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/rp...ch=compose_item
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_


Jay
Reason for edit: Spoilered big image -Kread


__________________________


Current projects -

Go to the top of the page
 
+Quote Post
   
tyladras
post Dec 4 2010, 11:35 AM
Post #2


Level 2
Group Icon

Group: Member
Posts: 24
Type: Musician
RM Skill: Masterful




Any help would be appreciated (needed urgently if possibly)

Bump!


__________________________


Current projects -

Go to the top of the page
 
+Quote Post
   
Kread-EX
post Dec 4 2010, 12:42 PM
Post #3


(=___=)/
Group Icon

Group: +Gold Member
Posts: 4,136
Type: Scripter
RM Skill: Undisclosed




I'm not sure to understand your problem. In your screenshot, you apparently need 35 Oak and you have currently 0...
Or am I mistaken?


__________________________
FRACTURE - a SMT inspired game (demo) made by Rhyme, Karsuman and me. Weep and ragequit.

My blog.

Click here for my e-peen


Go to the top of the page
 
+Quote Post
   
-dah0rst-
post Dec 4 2010, 01:52 PM
Post #4


Level 11
Group Icon

Group: Revolutionary
Posts: 174
Type: Scripter
RM Skill: Advanced




I think he needs the 35 and the 0 swaped, so it says: 0/35-

Here you go:
Search for "draw_material_info"- here you will find what you search. I can't quite figure out how you change it exactly because I'm tired, maybe tomorrow if you don't get it for yourself.
Nothing to do with your question, but let me say one thing: This script is horribly made -.- Has a strange looking structure to me. But maybe I'm not good enough to get behind that special logic... and it's very complicated to create the recipe list (via ID)- I made nearly the same script, but there you can use the database to assign recipes to items... if you're interested, just PM me.



__________________________
You want Next Gen graphic algorithms in RPG VX? Ask the horst :P


But don't expect this in real time ;)
Go to the top of the page
 
+Quote Post
   
tyladras
post Dec 4 2010, 07:00 PM
Post #5


Level 2
Group Icon

Group: Member
Posts: 24
Type: Musician
RM Skill: Masterful




QUOTE (-dah0rst- @ Dec 4 2010, 02:52 PM) *
I think he needs the 35 and the 0 swaped, so it says: 0/35-


As dah0rst has mentioned above this is what I am looking for.

Unfortunately I've had a look at the points you've made... I'm terrible when it comes to scripting.

I've managed to make it look like 35+0 so I can remove the / inbetween but the main issue still lies on the fact that the character items are not in the correct position... I'm hoping someone actually knows how this script works.. will have to wait and see!

In regards with your offer, currently I will have to decline as it would mean the new demo release/game in progress would undergo many changed which we (the dev team) are not willing to do. However I thank you for the offer and I may seek it in the near future, so make sure you don't get rid of it! ;)

This post has been edited by tyladras: Dec 4 2010, 07:04 PM


__________________________


Current projects -

Go to the top of the page
 
+Quote Post
   
tyladras
post Mar 28 2011, 11:55 PM
Post #6


Level 2
Group Icon

Group: Member
Posts: 24
Type: Musician
RM Skill: Masterful




I've kinda been AFK... for a wee while. Wondering if I can bump this and get a little help? smile.gif

Thanks

Jay


__________________________


Current projects -

Go to the top of the page
 
+Quote Post
   
Cleeq
post Jun 21 2011, 06:14 PM
Post #7



Group Icon

Group: Member
Posts: 1
Type: Scripter
RM Skill: Beginner




In the draw_material_info section, search for these lines:

CODE
    if KGC::ComposeItem::COMPACT_MATERIAL_LIST
      m_number = (material.number == 0 ? "-" : sprintf("%s", 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("%2d/%2s", m_number, number), 2)


Swap the positions of m_number and number in both of the sprintf statements, like so:

CODE
    if KGC::ComposeItem::COMPACT_MATERIAL_LIST
      m_number = (material.number == 0 ? "-" : sprintf("%s", material.number))
      self.contents.draw_text(x, y, width - 32, WLH,
        sprintf("%s/%d", 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)


That should fix up your problem right there, at least it did for me.
Now if I could only get the color coded items working in the synth shop, I'd be a happy boy.

This post has been edited by Cleeq: Jun 21 2011, 06:18 PM
Go to the top of the page
 
+Quote Post
   

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 23rd May 2013 - 09:42 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker