アイテム合成 カスタム
合成リストを別モジュール化
※このスクリプトの原作者はTOMY様です。
変更点
2024:04:01
・能力値限界突破に対応
2024:06:01
・スクリプト中で使用されてる文字列の定義化追加
2024:12:01
・VX風VocabをよりVXに近づける対応
合成アイテム設定 |
module KGC_Compose
# ◆合成レシピ
# ≪費用, [タイプ, ID, 個数], ...≫
# 【 費用 】合成費用。
# 【タイプ】合成素材の種類。(I..アイテム W..武器 A..防具)
# 【 ID 】合成素材のID。(↑と対応)
# 【 個数 】合成素材の必要数。
# 配列の添字がアイテム/武器/防具IDに対応。
# [タイプ, ID, 個数] はいくつでも指定可能。
I_R_I = [] # アイテム
I_R_W = [] # 武器
I_R_A = [] # 防具
# <例 : アイテムID:8 の合成レシピ(アイテムID:2 と ID:5 を消費。料金 0)>
# 武器・防具・アクセ
I_R_W[32] = [0, ["I", 113, 2]] # ザッパー
I_R_W[38] = [0, ["I", 113, 3], ["I", 153, 8]] # クロノ・カイザー
I_R_W[39] = [0, ["I", 113, 3], ["I", 158, 1]] # クトネシリカ
I_R_W[161] = [0, ["I", 113, 3], ["I", 157, 1]] # 天之尾羽張
I_R_W[279] = [0, ["I", 113, 3], ["I", 160, 5]] # 十文字槍
I_R_W[280] = [0, ["I", 113, 3], ["I", 159, 10]] # 皆朱の槍
I_R_W[599] = [0, ["I", 113, 3], ["I", 164, 1]] # モーターギア
I_R_W[600] = [0, ["I", 113, 4]] # バール
I_R_A[52] = [0, ["I", 113, 3], ["I", 162, 1]] # マジックシールド
I_R_A[53] = [0, ["I", 113, 3], ["I", 163, 1]] # リングシールド
I_R_A[469] = [0, ["I", 113, 3]] # 鉄扇
I_R_A[477] = [0, ["I", 113, 3], ["I", 161, 1]] # エンジェル・ハイロゥ
# 特殊アイテム
I_R_I[89] = [0, ["I", 153, 2], ["I", 14, 3]] # 毒々しい血
I_R_I[90] = [0, ["I", 153, 2], ["I", 16, 3]] # 微睡む血
I_R_I[91] = [0, ["I", 153, 2], ["I", 17, 3]] # 痺れる血
I_R_I[92] = [0, ["I", 153, 4], ["I", 19, 5]] # サワヤカな血
I_R_I[93] = [0, ["I", 153, 4], ["I", 23, 5]] # 燃え滾る血
I_R_I[94] = [0, ["I", 153, 4], ["I", 24, 5]] # 凍てつく血
I_R_I[95] = [0, ["I", 153, 8], ["I", 28, 7]] # 蠱惑的な血
I_R_I[96] = [0, ["I", 153, 8], ["I", 26, 7]] # 世界の血
I_R_I[97] = [0, ["I", 153, 8], ["I", 29, 7]] # 封じし血
end |
スクリプト本体 |
#----------------------------------------------------------------------------
# アイテム合成 貪藻矢射妥←カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作: ◆ アイテム合成 - KGC_ComposeItem ◆
# ◇ Last update : 2008/01/14 ◇
# 原作者: TOMY様
# HP: Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# 諸注意
# ≪ヘルプウィンドウ機能拡張[HelpExtension]≫より下
#
# 改造内容:
# ・合成リストを別モジュール化
#
#============================================================================
# 変更点
# 2024:04:01
# ・能力値限界突破に対応
#
# 2024:06:01
# ・スクリプト中で使用されてる文字列の定義化追加
#
# 2024:12:01
# ・VX風VocabをよりVXに近づける対応
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================
module KGC
# ◆必要素材リストをコンパクトにする
# 必要素材が4種類以上になる場合は true にしてください。
# 素材数の表記は "必要数/所持数" です。
ICMP_MATERIAL_LIST_COMPACT = false
# ◆合成アイテム情報切り替えボタン
# 素材リスト <--> 能力値変化(装備品のみ) を切り替えるボタン。
ICMP_SWITCH_INFO_BUTTON = Input::A
# ◆合成画面に所持金ウィンドウを表示しない
# 合成にお金を必要としない場合は true にしてください。
ICMP_HIDE_GOLD_WINDOW = true
# ◆合成費用が 0 の場合、費用を表示しない
ICMP_HIDE_ZERO_COST = true
end
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ○ 合成可能判定
# item : 合成するアイテム
#--------------------------------------------------------------------------
def composable?(item)
# レシピ取得
recipe = compose_recipe(item)
# 合成料金が足りない場合は合成不可
cost = recipe.shift
return false if cost > $game_party.gold
# アイテム数判定
recipe.each { |r|
case r[0].upcase
when "I"
# 所持数取得
count = $game_party.item_number(r[1])
# 数が足りているか判定
return false if count < r[2]
when "W"
count = $game_party.weapon_number(r[1])
return false if count < r[2]
when "A"
count = $game_party.armor_number(r[1])
return false if count < r[2]
end
}
return true
end
#--------------------------------------------------------------------------
# ○ レシピ取得
# item : 合成するアイテム
#--------------------------------------------------------------------------
def compose_recipe(item)
# 直接指定判定
case item
when RPG::Item
if KGC_Compose::I_R_I[item.id] != nil
return KGC_Compose::I_R_I[item.id].dup
end
when RPG::Weapon
if KGC_Compose::I_R_W[item.id] != nil
return KGC_Compose::I_R_W[item.id].dup
end
when RPG::Armor
if KGC_Compose::I_R_A[item.id] != nil
return KGC_Compose::I_R_A[item.id].dup
end
end
# 属性判定
recipe = [compose_cost(item)]
material = compose_material(item)
material.each { |m| recipe << m }
return recipe
end
#--------------------------------------------------------------------------
# ○ 合成料金取得
# item : 合成するアイテム
#--------------------------------------------------------------------------
def compose_cost(item)
# アイテムの合成属性を取得
case item
when RPG::Item, RPG::Weapon
element_set = item.element_set.dup
when RPG::Armor
element_set = item.guard_element_set.dup
end
# 属性確認
element_set.compact.each { |i|
element = $data_system.elements[i]
# 合成料金を返す
return $1.to_i if $game_special_elements["item_compose"] =~ element
}
end
#--------------------------------------------------------------------------
# ○ 合成に必要なアイテム取得
# item : 合成するアイテム
#--------------------------------------------------------------------------
def compose_material(item)
need_item = []
# アイテムの合成属性を取得
case item
when RPG::Item, RPG::Weapon
element_set = item.element_set.dup
when RPG::Armor
element_set = item.guard_element_set.dup
end
# 属性確認
element_set.compact.each { |i|
element = $data_system.elements[i]
if $game_special_elements["item_compose"] =~ element
# 必要アイテムの種類と数を取得
j = 0
loop {
need_item << [eval("$#{j * 3 + 2}"),
eval("$#{j * 3 + 3}.to_i"), eval("$#{j * 3 + 4}.to_i")]
break if eval("$#{j * 3 + 5} == nil")
j += 1
}
break
end
}
# 配列を返す
return need_item
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_ComposeItemNumber
#------------------------------------------------------------------------------
# 合成画面で、合成するアイテムの個数を入力するウィンドウです。
#==============================================================================
class Window_ComposeItemNumber < Window_ShopNumber
include DIAMOND
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_item_name(@item, 4, 96)
rectr = [272, 96, 32, 32]
rectr2 = [308, 96, 24, 32]
draw_shadow_text(rectr, Vocab::SHOP_CROSS)
draw_shadow_text(rectr2, @number.to_s, normal_color, 2)
self.cursor_rect.set(304, 96, 32, 32)
# 合計価格と通貨単位を描画
total_price = @price * @number
if !KGC::ICMP_HIDE_ZERO_COST || total_price > 0
domination = Vocab::gold
cx = contents.text_size(domination).width
rectr3 = [4, 160, 328-cx-2, 32]
rectr4 = [332-cx, 160, cx, 32]
draw_shadow_text(rectr3, total_price.to_s, normal_color, 2)
draw_shadow_text(rectr4, domination, system_color, 2)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_ComposeItem
#------------------------------------------------------------------------------
# 合成画面で、合成できる商品の一覧を表示するウィンドウです。
#==============================================================================
class Window_ComposeItem < Window_Selectable
include RUBY_SYS
include BM
include VDI
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# shop_goods : 商品
#--------------------------------------------------------------------------
def initialize(shop_goods)
super(0, 64, 368, 416 - 32)
@shop_goods = shop_goods
# 拡張ヘルプウィンドウの場合は下げる
#if $imported["HelpExtension"]
self.y += 32
self.height -= 32
#end
refresh
self.index = 0
@draw_item_num = 2 # 一度に描画する数
@draw_ok = Array.new() # 描画完了フラグ配列
end
#--------------------------------------------------------------------------
# ○ アイテムの取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ○ 合成料金の取得
#--------------------------------------------------------------------------
def price
item = @data[self.index]
return $game_system.compose_recipe(item)[0]
end
#--------------------------------------------------------------------------
# ○ 作成可能数の取得
#--------------------------------------------------------------------------
def create_count
item = @data[self.index]
recipe = $game_system.compose_recipe(item)
cost = recipe.shift
# 最大数の設定
max_hold = BM::DEFAULT_MH
if $OuterFlgs["Max_Hold_Change"]
max_hold = BM::MAX_HOLD[$game_system.max_hold_value]
end # $OuterFlgs["Max_Hold_Change"]
if $imported["LimitBreak"]
max_hold = item.number_limit
end # $imported["LimitBreak"]
if cost == 0
count = max_hold
else
count = $game_party.gold / cost
end
# アイテム計算
recipe.each { |r|
case r[0].upcase
when "I"
n = $game_party.item_number(r[1])
when "W"
n = $game_party.weapon_number(r[1])
when "A"
n = $game_party.armor_number(r[1])
end
n /= r[2]
count = [count, n].min
}
# 作成可能数を返す
return count
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
@item_drawing = false
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@draw_counter = 0
reset_array
@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
next if item == nil
# レシピ判定
case item
when RPG::Item
if KGC_Compose::I_R_I[item.id] != nil
@data << item
next
else
element_set = item.element_set.dup
end
when RPG::Weapon
if KGC_Compose::I_R_W[item.id] != nil
@data << item
next
else
element_set = item.element_set.dup
end
when RPG::Armor
if KGC_Compose::I_R_A[item.id] != nil
@data << item
next
else
element_set = item.guard_element_set.dup
end
end
# 属性確認
for i in element_set.compact
element = $data_system.elements[i]
if $game_special_elements["item_compose"] =~ element
# 追加
@data.push(item)
end
end
end
# 項目数が 0 でなければビットマップを作成し、全項目を描画
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
draw_item_v
#for i in 0...@item_max
#draw_item(i)
#end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
# 価格を取得
price = $game_system.compose_recipe(item)[0]
# アイテムの所持数を取得
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
# 所持数が上限未満で、合成可能な場合
max_hold = BM::DEFAULT_MH
if $OuterFlgs["Max_Hold_Change"]
max_hold = BM::MAX_HOLD[$game_system.max_hold_value]
end # $OuterFlgs["Max_Hold_Change"]
if $imported["LimitBreak"]
max_hold = item.number_limit
end # $imported["LimitBreak"]
limit = max_hold
draw_color = (number < limit && $game_system.composable?(item)) ?
normal_color : disabled_color
dflag = (number < limit && $game_system.composable?(item)) ? true : false
x = 4
y = index * 32
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, BM::NILCOLOR)
bitmap = RPG::Cache.icon(item.icon_name)
item.name = transfer(item.name)
opacity = draw_color == normal_color ? BM::MAX8BIT : BM::HARF8BIT
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
draw_shadow_text([x + 28, y], item.name, draw_color, 0, dflag)
# 費用を表示する場合
if !KGC::ICMP_HIDE_ZERO_COST || price > 0
rectr = [x + 240, y, 88, 32]
draw_shadow_text(rectr, price.to_s, draw_color, 2, dflag)
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_ComposeItemInfo
#------------------------------------------------------------------------------
# 合成画面で、素材の所持数や必要数を表示するウィンドウです。
#==============================================================================
class Window_ComposeItemInfo < Window_Base
include RUBY_SYS
include BM
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(368, 64, 272, 416)
# 拡張ヘルプウィンドウの場合は下げる
#if $imported["HelpExtension"]
self.y += 32
self.height -= 32
#end
self.contents = Bitmap.new(width - 32, height - 32)
@item = nil
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.font.color = normal_color
self.contents.font.size = 22
self.contents.clear
return if @item == nil
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
when RPG::Armor
number = $game_party.armor_number(@item.id)
end
rectr = [4, 0, 200, 24]
rectr2 = [204, rectr[1], 32, rectr[3]]
draw_shadow_text(rectr, Vocab::Possession, system_color)
draw_shadow_text(rectr2, number.to_s, normal_color, 2)
# アイテムのレシピを取得
recipe = $game_system.compose_recipe(@item)
recipe.shift
# 必要アイテム数描画
x = 4
y = 64 - 32
if KGC::ICMP_MATERIAL_LIST_COMPACT
x = 0
y = 32
self.contents.font.size = 18
end
recipe.each { |r|
case r[0].upcase
when "I"
# アイテム取得
item = $data_items[r[1]]
# 所持数取得
count = $game_party.item_number(item.id)
when "W"
item = $data_weapons[r[1]]
count = $game_party.weapon_number(item.id)
when "A"
item = $data_armors[r[1]]
count = $game_party.armor_number(item.id)
end
if count < r[2]
draw_color = disabled_color
opacity = 160
dflag = false
else
draw_color = normal_color
opacity = BM::MAX8BIT
dflag = true
end
# 素材描画
icon = RPG::Cache.icon(item.icon_name)
item.name = transfer(item.name)
if KGC::ICMP_MATERIAL_LIST_COMPACT
self.contents.blt(x, y, icon, icon.rect, opacity)
draw_shadow_text([x + 26, y], item.name, draw_color)
text = "#{r[2]}/#{count}"
rectr = [x + width - 96, y, 64, 24]
draw_shadow_text(rectr, text, draw_color, 2)
y += 24
else
self.contents.blt(x + 4, y + 4, icon, icon.rect, opacity)
draw_shadow_text([x + 32, y], item.name, draw_color)
text = "必要数 #{r[2]}/所持数 #{count}"
rectr2 = [x, y + 32, width - 32, 32]
draw_shadow_text(rectr2, text, draw_color)
y += 64
end
}
end
#--------------------------------------------------------------------------
# ○ アイテムの設定
# item : 新しいアイテム
#--------------------------------------------------------------------------
def item=(item)
if @item != item
@item = item
refresh
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_ShopStatus2
#------------------------------------------------------------------------------
# ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
#==============================================================================
class Window_ShopStatus2 < Window_Base
include BM
include RUBY_SYS
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(368, 128, 272, 352)
self.contents = Bitmap.new(width - 32, height - 32)
@item = nil
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @item == nil
return
end
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
when RPG::Armor
number = $game_party.armor_number(@item.id)
end
draw_shadow_text([4, 0, 200, 32], Vocab::Possession, system_color)
draw_shadow_text([204, 0, 32, 32], number.to_s, normal_color, 2)
stt = 32
if @item.is_a?(RPG::Item)
return
end
# 装備品追加情報
for i in 0...$game_party.actors.size
# アクターを取得
actor = $game_party.actors[i]
# 装備可能なら通常文字色に、不可能なら無効文字色に設定
draw_shadow_text([4, stt + 64 * i], transfer(actor.name), normal_color,
0, actor.equippable?(@item))
# 現在の装備品を取得
if @item.is_a?(RPG::Weapon)
item1 = $data_weapons[actor.weapon_id]
elsif @item.kind == 0
item1 = actor.armors_weapon[0] ? $data_weapons[actor.armor1_id] : $data_armors[actor.armor1_id]
elsif @item.kind == 1
item1 = actor.armors_weapon[1] ? $data_weapons[actor.armor2_id] : $data_armors[actor.armor2_id]
elsif @item.kind == 2
if $OuterFlgs["Equip_Extend"]
if @item.guard_element_set.include?(Equip_Extend::INNER_ARM)
item1 = actor.armors_weapon[5] ? $data_weapons[actor.armor6_id] : $data_armors[actor.armor6_id]
else
item1 = actor.armors_weapon[2] ? $data_weapons[actor.armor3_id] : $data_armors[actor.armor3_id]
end
else # 元の処理
item1 = $data_armors[actor.armor3_id]
end # $OuterFlgs["Equip_Extend"]
else
if $OuterFlgs["Equip_Extend"]
if @item.guard_element_set.include?(Equip_Extend::EXTRA_ACC) &&
!@item.guard_element_set.include?(Equip_Extend::BOOTS_ACC)
item1 = actor.armors_weapon[6] ? $data_weapons[actor.armor7_id] : $data_armors[actor.armor7_id]
elsif @item.guard_element_set.include?(Equip_Extend::BOOTS_ACC)
item1 = actor.armors_weapon[7] ? $data_weapons[actor.armor8_id] : $data_armors[actor.armor8_id]
else
item1 = actor.armors_weapon[3] ? $data_weapons[actor.armor4_id] : $data_armors[actor.armor4_id]
end
else # 元の処理
item1 = $data_armors[actor.armor4_id]
end # $OuterFlgs["Equip_Extend"]
end
# 装備可能な場合
if actor.equippable?(@item)
# 武器の場合
if @item.is_a?(RPG::Weapon)
atk1 = item1 != nil ? item1.atk : 0
atk2 = @item != nil ? @item.atk : 0
change = atk2 - atk1
end
# 防具の場合
if @item.is_a?(RPG::Armor)
pdef1 = item1 != nil ? item1.pdef : 0
mdef1 = item1 != nil ? item1.mdef : 0
pdef2 = @item != nil ? @item.pdef : 0
mdef2 = @item != nil ? @item.mdef : 0
change = pdef2 - pdef1 + mdef2 - mdef1
end
# パラメータの変化値を描画
draw_shadow_text([124, stt + 64 * i, 112, 32], sprintf("%+d", change),
normal_color, 2)
end
# アイテムを描画
if item1 != nil
x = 4
y = stt + 64 * i + 32
bitmap = RPG::Cache.icon(item1.icon_name)
opacity = self.contents.font.color == normal_color ? MAX8BIT : HARF8BIT
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
draw_shadow_text([x + 28, y], transfer(item1.name), normal_color,
0, opacity == MAX8BIT ? true : false)
end
end
end
#--------------------------------------------------------------------------
# ● アイテムの設定
# item : 新しいアイテム
#--------------------------------------------------------------------------
def item=(item)
if @item != item
@item = item
refresh
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Shop
#==============================================================================
class Scene_Shop
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias main_KGC_ComposeItem main
def main
# 合成画面を呼び出した場合
if $call_compose
# 合成画面に移行
$scene = Scene_ComposeItem.new
$call_compose = false
else
main_KGC_ComposeItem
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Scene_ComposeItem
#------------------------------------------------------------------------------
# 合成画面の処理を行うクラスです。
#==============================================================================
class Scene_ComposeItem
include BM
#--------------------------------------------------------------------------
# ○ キーヘルプを設定
#--------------------------------------------------------------------------
def set_keyhelp
@bottomkeyhelp_window.clear
@bottomkeyhelp_window.set_bottom_help({
"A"=>"ステータス表示/非表示(装備品時)"})
end
#--------------------------------------------------------------------------
# ○ メイン処理
#--------------------------------------------------------------------------
def main
@bottomkeyhelp_window = Window_BottomKeyHelp.new
set_keyhelp
# スプライトセットを作成
#@spriteset = Spriteset_Map.new
# ヘルプウィンドウを作成
#if $imported["HelpExtension"]
@help_window = Window_HelpExtension.new
#else
#@help_window = Window_Help.new
#end
@help_window.back_opacity = 196
# ゴールドウィンドウを作成
@gold_window = Window_Gold.new
@gold_window.back_opacity = 196
@gold_window.x = 480
@gold_window.y = 416
@gold_window.z = 1500
@gold_window.visible = !KGC::ICMP_HIDE_GOLD_WINDOW
# 合成ウィンドウを作成
@compose_window = Window_ComposeItem.new($game_temp.shop_goods)
@compose_window.back_opacity = 196
@compose_window.activate
@compose_window.show
@compose_window.help_window = @help_window
# 個数入力ウィンドウを作成
@number_window = Window_ComposeItemNumber.new
@number_window.back_opacity = 196
@number_window.y = @compose_window.y
@number_window.height = @compose_window.height
@number_window.deactivate
@number_window.hide
# アイテム情報ウィンドウを作成
@iteminfo_window = Window_ComposeItemInfo.new
@iteminfo_window.back_opacity = 196
@iteminfo_window.show
# ステータスウィンドウを作成
#@status_window = Window_ShopStatus.new
@status_window = Window_ShopStatus2.new
@status_window.x = @iteminfo_window.x
@status_window.y = @iteminfo_window.y - 4
@status_window.z = @iteminfo_window.z
@status_window.height = @iteminfo_window.height
@status_window.back_opacity = 196
@status_window.hide
@status_mode = false
# トランジション実行
Graphics.transition
# メインループ
loop {
Graphics.update
Input.update
update
if $scene != self
break
end
}
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@help_window.dispose
@gold_window.dispose
@compose_window.dispose
@number_window.dispose
@iteminfo_window.dispose
@status_window.dispose
#@spriteset.dispose
@bottomkeyhelp_window.dispose
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@help_window.update
#if KGC::ICMP_HIDE_GOLD_WINDOW == true
@gold_window.update
#end
@compose_window.update
@number_window.update
@iteminfo_window.update
@status_window.update
# 切り替えボタンが押されたら情報切り替え
if Input.trigger?(KGC::ICMP_SWITCH_INFO_BUTTON)
# 決定 SE を演奏
Sound.play_ok
# モード切替
@status_mode = !@status_mode
switch_info_window
end
# 合成ウィンドウがアクティブの場合: update_compose を呼ぶ
if @compose_window.active
update_compose
return
end
# 個数入力ウィンドウがアクティブの場合: update_number を呼ぶ
if @number_window.active
update_number
return
end
end
#--------------------------------------------------------------------------
# ○ 情報ウィンドウ切り替え
#--------------------------------------------------------------------------
def switch_info_window
item = @compose_window.item
if @status_mode && (item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor))
@iteminfo_window.hide
@status_window.show
else
@iteminfo_window.show
@status_window.hide
@status_mode = false
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (合成ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_compose
# 各種ウィンドウのアイテムを設定
selected_item = @compose_window.item
@iteminfo_window.item = selected_item
@status_window.item = selected_item
switch_info_window
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
Sound.play_cancel
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# アイテムを取得
@item = @compose_window.item
# アイテムが無効、または合成不可能な場合
if @item == nil || !$game_system.composable?(@item)
# ブザー SE を演奏
Sound.play_buzzer
return
end
# アイテムの所持数を取得
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
when RPG::Armor
number = $game_party.armor_number(@item.id)
end
# すでに上限まで所持している場合
max_hold = BM::DEFAULT_MH
if $OuterFlgs["Max_Hold_Change"]
max_hold = BM::MAX_HOLD[$game_system.max_hold_value]
end # $OuterFlgs["Max_Hold_Change"]
if $imported["LimitBreak"]
max_hold = @item.number_limit
end # $imported["LimitBreak"]
limit = max_hold
if number >= limit
# ブザー SE を演奏
Sound.play_buzzer
return
end
# 最大購入可能個数を計算
max = @compose_window.create_count
max = [max, limit - number].min
# 決定 SE を演奏
Sound.play_ok
# ウィンドウの状態を個数入力モードへ
@compose_window.deactivate
@compose_window.hide
@number_window.set(@item, max, @compose_window.price)
@number_window.activate
@number_window.show
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (個数入力ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_number
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
Sound.play_cancel
# 個数入力ウィンドウを非アクティブ・不可視に設定
@number_window.deactivate
@number_window.hide
# ウィンドウの状態を合成モードへ
@compose_window.activate
@compose_window.show
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# ショップ SE を演奏
Sound.play_shop
# 個数入力ウィンドウを非アクティブ・不可視に設定
@number_window.deactivate
@number_window.hide
# 個数分繰り返す
for i in 0...@number_window.number
# 金を減らす
$game_party.lose_gold(@compose_window.price)
# 合成素材を減らす
recipe = $game_system.compose_recipe(@item)
recipe.shift
recipe.each { |r|
case r[0].upcase
when "I"
$game_party.lose_item(r[1], r[2])
when "W"
$game_party.lose_weapon(r[1], r[2])
when "A"
$game_party.lose_armor(r[1], r[2])
end
}
# アイテム入手
case @item
when RPG::Item
$game_party.gain_item(@item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(@item.id, 1)
when RPG::Armor
$game_party.gain_armor(@item.id, 1)
end
end
# 各ウィンドウをリフレッシュ
#if KGC::ICMP_HIDE_GOLD_WINDOW == true
@gold_window.refresh
#end
@compose_window.refresh
@iteminfo_window.refresh
# 個数入力ウィンドウを非アクティブ・不可視に設定
@number_window.deactivate
@number_window.hide
# ウィンドウの状態を合成モードへ
@compose_window.activate
@compose_window.show
return
end
end
end
|
カスタマイズポイント解説(・・・言わなくても分かるような・・・)
薄赤色にてアイテム合成用の設定
戻る