赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 0 |
最后登录 | 2018-3-28 |
在线时间 | 5 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 70
- 在线时间
- 5 小时
- 注册时间
- 2018-3-23
- 帖子
- 8
|
dalao我现在的代码是这样:
#============================================================================== # ■ RGSS3 アイテム合成 ver 1.02 #------------------------------------------------------------------------------ # 配布元: # 白の魔 [url]http://izumiwhite.web.fc2.com/[/url] # # 利用規約: # RPGツクールVX Aceの正規の登録者のみご利用になれます。 # 利用報告・著作権表示とかは必要ありません。 # 改造もご自由にどうぞ。 # 何か問題が発生しても責任は持ちません。 #============================================================================== #-------------------------------------------------------------------------- # ★ 初期設定。 # 合成レシピ等の設定 #-------------------------------------------------------------------------- module WD_itemsynthesis_ini Cost_view = true #費用(G)の表示(合成の費用が全て0Gの場合はfalseを推奨) Category_i = true #カテゴリウィンドウに「アイテム」の項目を表示 Category_w = true #カテゴリウィンドウに「武器」の項目を表示 Category_a = true #カテゴリウィンドウに「防具」の項目を表示 Category_k = true #カテゴリウィンドウに「大事なもの」の項目を表示 I_recipe = [] #この行は削除しないこと W_recipe = [] #この行は削除しないこと A_recipe = [] #この行は削除しないこと #以下、合成レシピ。 #例: I_recipe[3] = [100, ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]] #と記載した場合、ID3のアイテムの合成必要は、100G。 #必要な素材は、ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個 #となる。 #I代表物品 W代表武器 A代表防具 # [合成物品ID],[需要多少钱],[] I_recipe[2] = [50, ["I",1,2]]#合成2号物品需要1号物品2个和50G金币 I_recipe[3] = [100, ["I",1,1], ["I",2,1]] I_recipe[8] = [200, ["I",1,2], ["I",4,1], ["I",5,1]] I_recipe[34] = [400, ["I",7,2], ["I",8,2], ["I",33,3], ["I",35,3]] I_recipe[32] = [400, ["I",17,6], ["I",18,7], ["I",19,8]] I_recipe[40] = [400, ["I",7,2], ["I",8,2]] I_recipe[41] = [400, ["I",1,1], ["I",4,1]] I_recipe[42] = [500, ["I",8,2], ["I",33,5], ["I",35,5]] I_recipe[71] = [500, ["I",53,4], ["I",54,3], ["I",55,2]] I_recipe[72] = [1500, ["I",53,4], ["I",54,3], ["I",55,2]] I_recipe[45] = [1500, ["I",22,1], ["I",23,1], ["I",24,1], ["I",25,1], ["I",26,1], ["I",27,1], ["I",28,1], ["I",29,1]] I_recipe[53] = [1500, ["I",1,5], ["I",4,3]] #米德辛合成表 I_recipe[48] = [50, ["I",2,1], ["I",2,1], ["I",6,1]] I_recipe[86] = [50, ["I",1,2], ["I",2,4]] I_recipe[120] = [50, ["I",30,3], ["I",31,5]] I_recipe[119] = [50, ["I",5,2], ["I",6,3], ["I",7,3]] I_recipe[118] = [50, ["I",17,2], ["I",18,2], ["I",19,3]] I_recipe[114] = [50, ["I",8,3]] I_recipe[54] = [600, ["I",5,2], ["I",6,3], ["I",8,1]] I_recipe[55] = [600, ["I",5,2], ["I",6,3], ["I",8,1]] I_recipe[56] = [600, ["I",55,1], ["I",54,1], ["I",53,1]] I_recipe[156] = [50, ["I",9,15], ["I",10,15], ["I",11,15], ["I",12,15], ["I",13,15], ["I",14,15], ["I",15,15], ["I",16,15]] #武器の合成レシピ W_recipe[3] = [500, ["I",18,1], ["I",17,1]] W_recipe[65] = [200, ["I",36,1], ["I",37,1]] W_recipe[72] = [2000, ["I",70,6], ["I",72,6]] W_recipe[73] = [2000, ["I",70,6], ["I",72,6]] W_recipe[74] = [2000, ["I",70,6], ["I",72,6]] W_recipe[75] = [2000, ["I",70,6], ["I",72,6]] W_recipe[77] = [2500, ["I",36,10], ["I",83,4], ["I",80,2], ["I",34,3]] #W_recipe[6] = [600, ["W",3,1], ["I",17,0]] #防具の合成レシピ A_recipe[62] = [500, ["I",34,20]] A_recipe[61] = [500, ["I",33,5], ["I",35,5]] A_recipe[82] = [2000, ["I",33,8], ["I",70,6]] A_recipe[83] = [2000, ["I",71,6], ["I",70,6]] A_recipe[86] = [2000, ["I",33,8], ["I",70,6], ["I",34,8]] A_recipe[87] = [2000, ["I",36,8], ["I",70,6], ["I",34,8]] A_recipe[84] = [2000, ["I",71,5], ["I",70,6]] A_recipe[85] = [2000, ["I",33,8], ["I",70,6], ["I",34,8]] A_recipe[88] = [2000, ["I",34,8], ["I",70,6], ["W",54,2]] A_recipe[89] = [2000, ["I",33,8], ["I",70,6], ["I",34,8], ["I",36,8]] A_recipe[75] = [2200, ["I",36,6], ["I",37,8], ["I",21,10]] A_recipe[100] = [1800, ["I",79,85], ["I",53,62], ["I",54,30], ["I",55,45]] A_recipe[101] = [3200, ["I",45,15], ["I",34,55], ["I",72,50]] #A_recipe[5] = [400, ["A",2,1], ["W",2,2], ["I",17,0]] end #============================================================================== # ■ WD_itemsynthesis #------------------------------------------------------------------------------ # アイテム合成用の共通メソッドです。 #============================================================================== module WD_itemsynthesis def i_recipe_switch_on(id) $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil $game_system.i_rcp_sw[id] = true end def i_recipe_switch_off(id) $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil $game_system.i_rcp_sw[id] = false end def i_recipe_switch_on?(id) $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil return $game_system.i_rcp_sw[id] end def i_recipe_all_switch_on for i in 1..$data_items.size i_recipe_switch_on(i) end end def i_recipe_all_switch_off for i in 1..$data_items.size i_recipe_switch_off(i) end end def w_recipe_switch_on(w) $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil $game_system.w_rcp_sw[1] = true if $game_system.w_rcp_sw[1] == nil $game_system.w_rcp_sw[1] = true end def w_recipe_switch_off(id) $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil $game_system.w_rcp_sw[id] = false end def w_recipe_switch_on?(id) $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil return $game_system.w_rcp_sw[id] end def w_recipe_all_switch_on for i in 1..$data_weapons.size w_recipe_switch_on(i) end end def w_recipe_all_switch_off for i in 1..$data_weapons.size w_recipe_switch_off(i) end end def a_recipe_switch_on(id) $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil $game_system.a_rcp_sw[id] = true end def a_recipe_switch_off(id) $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil $game_system.a_rcp_sw[id] = false end def a_recipe_switch_on?(id) $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil return $game_system.a_rcp_sw[id] end def a_recipe_all_switch_on for i in 1..$data_armors.size a_recipe_switch_on(i) end end def a_recipe_all_switch_off for i in 1..$data_armors.size a_recipe_switch_off(i) end end def recipe_all_switch_on i_recipe_all_switch_on w_recipe_all_switch_on a_recipe_all_switch_on end def recipe_all_switch_off i_recipe_all_switch_off w_recipe_all_switch_off a_recipe_all_switch_off end end class Game_Interpreter include WD_itemsynthesis end class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :i_rcp_sw attr_accessor :w_rcp_sw attr_accessor :a_rcp_sw #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias wd_orig_initialize004 initialize def initialize wd_orig_initialize004 @i_rcp_sw = [] @w_rcp_sw = [] @a_rcp_sw = [] end end #============================================================================== # ■ Scene_ItemSynthesis #------------------------------------------------------------------------------ # 合成画面の処理を行うクラスです。 #============================================================================== class Scene_ItemSynthesis < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_help_window create_dummy_window create_number_window create_status_window create_material_window create_list_window create_category_window create_gold_window create_change_window end #-------------------------------------------------------------------------- # ● ゴールドウィンドウの作成 #-------------------------------------------------------------------------- def create_gold_window @gold_window = Window_Gold.new @gold_window.viewport = @viewport @gold_window.x = Graphics.width - @gold_window.width @gold_window.y = @help_window.height @gold_window.hide end #-------------------------------------------------------------------------- # ● 切り替え表示ウィンドウの作成 #-------------------------------------------------------------------------- def create_change_window wx = 0 wy = @gold_window.y ww = Graphics.width - @gold_window.width wh = @gold_window.height @change_window = Window_ItemSynthesisChange.new(wx, wy, ww, wh) @change_window.viewport = @viewport @change_window.hide end #-------------------------------------------------------------------------- # ● ダミーウィンドウの作成 #-------------------------------------------------------------------------- def create_dummy_window wy = @help_window.y + @help_window.height + 48 wh = Graphics.height - wy @dummy_window = Window_Base.new(0, wy, Graphics.width, wh) @dummy_window.viewport = @viewport end #-------------------------------------------------------------------------- # ● 個数入力ウィンドウの作成 #-------------------------------------------------------------------------- def create_number_window wy = @dummy_window.y wh = @dummy_window.height @number_window = Window_ItemSynthesisNumber.new(0, wy, wh) @number_window.viewport = @viewport @number_window.hide @number_window.set_handler(:ok, method(:on_number_ok)) @number_window.set_handler(:cancel, method(:on_number_cancel)) end #-------------------------------------------------------------------------- # ● ステータスウィンドウの作成 #-------------------------------------------------------------------------- def create_status_window wx = @number_window.width wy = @dummy_window.y ww = Graphics.width - wx wh = @dummy_window.height @status_window = Window_ShopStatus.new(wx, wy, ww, wh) @status_window.viewport = @viewport @status_window.hide end #-------------------------------------------------------------------------- # ● 素材ウィンドウの作成 #-------------------------------------------------------------------------- def create_material_window wx = @number_window.width wy = @dummy_window.y ww = Graphics.width - wx wh = @dummy_window.height @material_window = Window_ItemSynthesisMaterial.new(wx, wy, ww, wh) @material_window.viewport = @viewport @material_window.hide @number_window.material_window = @material_window end #-------------------------------------------------------------------------- # ● 合成アイテムリストウィンドウの作成 #-------------------------------------------------------------------------- def create_list_window wy = @dummy_window.y wh = @dummy_window.height @list_window = Window_ItemSynthesisList.new(0, wy, wh) @list_window.viewport = @viewport @list_window.help_window = @help_window @list_window.status_window = @status_window @list_window.material_window = @material_window @list_window.hide @list_window.set_handler(:ok, method(:on_list_ok)) @list_window.set_handler(:cancel, method(:on_list_cancel)) @list_window.set_handler(:change_window, method(:on_change_window)) end #-------------------------------------------------------------------------- # ● カテゴリウィンドウの作成 #-------------------------------------------------------------------------- def create_category_window @category_window = Window_ItemSynthesisCategory.new @category_window.viewport = @viewport @category_window.help_window = @help_window @category_window.y = @help_window.height @category_window.activate @category_window.item_window = @list_window @category_window.set_handler(:ok, method(:on_category_ok)) @category_window.set_handler(:cancel, method(:return_scene)) end #-------------------------------------------------------------------------- # ● 合成アイテムリストウィンドウのアクティブ化 #-------------------------------------------------------------------------- def activate_list_window @list_window.money = money @list_window.show.activate end #-------------------------------------------------------------------------- # ● 合成[決定] #-------------------------------------------------------------------------- def on_list_ok @item = @list_window.item @list_window.hide @number_window.set(@item, max_buy, buying_price, currency_unit) @number_window.show.activate end #-------------------------------------------------------------------------- # ● 合成[キャンセル] #-------------------------------------------------------------------------- def on_list_cancel @category_window.activate @category_window.show @dummy_window.show @list_window.hide @status_window.hide @status_window.item = nil @material_window.hide @material_window.set(nil, nil) @gold_window.hide @change_window.hide @help_window.clear end #-------------------------------------------------------------------------- # ● 表示切替 #-------------------------------------------------------------------------- def on_change_window if @status_window.visible @status_window.hide @material_window.show else @status_window.show @material_window.hide end end #-------------------------------------------------------------------------- # ● カテゴリ[決定] #-------------------------------------------------------------------------- def on_category_ok activate_list_window @gold_window.show @change_window.show @material_window.show @category_window.hide @list_window.select(0) end #-------------------------------------------------------------------------- # ● 個数入力[決定] #-------------------------------------------------------------------------- def on_number_ok Sound.play_shop do_syntetic(@number_window.number) end_number_input @gold_window.refresh end #-------------------------------------------------------------------------- # ● 個数入力[キャンセル] #-------------------------------------------------------------------------- def on_number_cancel Sound.play_cancel end_number_input end #-------------------------------------------------------------------------- # ● 合成の実行 #-------------------------------------------------------------------------- def do_syntetic(number) $game_party.lose_gold(number * buying_price) $game_party.gain_item(@item, number) @recipe = @list_window.recipe(@item) for i in 1...@recipe.size kind = @recipe[i][0] id = @recipe[i][1] num = @recipe[i][2] if kind == "I" item = $data_items[id] elsif kind == "W" item = $data_weapons[id] elsif kind == "A" item = $data_armors[id] end $game_party.lose_item(item, num*number) end end #-------------------------------------------------------------------------- # ● 個数入力の終了 #-------------------------------------------------------------------------- def end_number_input @number_window.hide activate_list_window end #-------------------------------------------------------------------------- # ● 最大購入可能個数の取得 #-------------------------------------------------------------------------- def max_buy max = $game_party.max_item_number(@item) - $game_party.item_number(@item) @recipe = @list_window.recipe(@item) for i in 1...@recipe.size kind = @recipe[i][0] id = @recipe[i][1] num = @recipe[i][2] if kind == "I" item = $data_items[id] elsif kind == "W" item = $data_weapons[id] elsif kind == "A" item = $data_armors[id] end if num > 0 max_buf = $game_party.item_number(item)/num else max_buf = 999 end max = [max, max_buf].min end buying_price == 0 ? max : [max, money / buying_price].min end #-------------------------------------------------------------------------- # ● 所持金の取得 #-------------------------------------------------------------------------- def money @gold_window.value end #-------------------------------------------------------------------------- # ● 通貨単位の取得 #-------------------------------------------------------------------------- def currency_unit @gold_window.currency_unit end #-------------------------------------------------------------------------- # ● 合成費用の取得 #-------------------------------------------------------------------------- def buying_price @list_window.price(@item) end end #============================================================================== # ■ Window_ItemSynthesisList #------------------------------------------------------------------------------ # 合成画面で、合成可能なアイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_ItemSynthesisList < Window_Selectable include WD_itemsynthesis #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :status_window # ステータスウィンドウ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, height) super(x, y, window_width, height) @shop_goods = [] @shop_recipes = [] for i in 1..WD_itemsynthesis_ini::I_recipe.size recipe = WD_itemsynthesis_ini::I_recipe[i] if recipe good = [0, i, recipe[0]] if i_recipe_switch_on?(i) @shop_goods.push(good) @shop_recipes.push(recipe) end end end for i in 1..WD_itemsynthesis_ini::W_recipe.size recipe = WD_itemsynthesis_ini::W_recipe[i] if recipe good = [1, i, recipe[0]] if w_recipe_switch_on?(i) @shop_goods.push(good) @shop_recipes.push(recipe) end end end for i in 1..WD_itemsynthesis_ini::A_recipe.size recipe = WD_itemsynthesis_ini::A_recipe[i] if recipe good = [2, i, recipe[0]] if a_recipe_switch_on?(i) @shop_goods.push(good) @shop_recipes.push(recipe) end end end @Money = 0 refresh select(0) end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width return 304 end #-------------------------------------------------------------------------- # ● 項目数の取得 #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # ● アイテムの取得 #-------------------------------------------------------------------------- def item @data[index] end #-------------------------------------------------------------------------- # ● 所持金の設定 #-------------------------------------------------------------------------- def money=(money) @money = money refresh end #-------------------------------------------------------------------------- # ● 選択項目の有効状態を取得 #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # ● 合成費用を取得 #-------------------------------------------------------------------------- def price(item) @price[item] end #-------------------------------------------------------------------------- # ● 合成可否を取得 #-------------------------------------------------------------------------- def enable?(item) @makable[item] end #-------------------------------------------------------------------------- # ● レシピを取得 #-------------------------------------------------------------------------- def recipe(item) @recipe[item] end #-------------------------------------------------------------------------- # ● アイテムを許可状態で表示するかどうか #-------------------------------------------------------------------------- def have_mat?(recipe) flag = true if @money >= recipe[0] for i in 1...recipe.size kind = recipe[i][0] id = recipe[i][1] num = recipe[i][2] if kind == "I" item = $data_items[id] elsif kind == "W" item = $data_weapons[id] elsif kind == "A" item = $data_armors[id] end if $game_party.item_number(item) < [num, 1].max flag = false end end else flag = false end return flag end #-------------------------------------------------------------------------- # ● カテゴリの設定 #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end #-------------------------------------------------------------------------- # ● アイテムをリストに含めるかどうか #-------------------------------------------------------------------------- def include?(item) case @category when :item item.is_a?(RPG::Item) && !item.key_item? when :weapon item.is_a?(RPG::Weapon) when :armor item.is_a?(RPG::Armor) when :key_item item.is_a?(RPG::Item) && item.key_item? else false end end #-------------------------------------------------------------------------- # ● アイテムリストの作成 #-------------------------------------------------------------------------- def make_item_list @data = [] @price = {} @makable = {} @recipe = {} for i in 0...@shop_goods.size goods = @shop_goods[i] recipe = @shop_recipes[i] case goods[0] when 0; item = $data_items[goods[1]] when 1; item = $data_weapons[goods[1]] when 2; item = $data_armors[goods[1]] end if item if include?(item) @data.push(item) @price[item] = goods[2] @makable[item] = have_mat?(recipe) @recipe[item] = recipe end end end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] rect = item_rect(index) draw_item_name(item, rect.x, rect.y, enable?(item)) rect.width -= 4 draw_text(rect, price(item), 2) if WD_itemsynthesis_ini::Cost_view end #-------------------------------------------------------------------------- # ● ステータスウィンドウの設定 #-------------------------------------------------------------------------- def status_window=(status_window) @status_window = status_window call_update_help end #-------------------------------------------------------------------------- # ● 素材ウィンドウの設定 #-------------------------------------------------------------------------- def material_window=(material_window) @material_window = material_window call_update_help end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_item(item) if @help_window @status_window.item = item if @status_window @material_window.set(item, recipe(item)) if @material_window end #-------------------------------------------------------------------------- # ● ←→ ボタン(表示切替)が押されたときの処理 #-------------------------------------------------------------------------- def process_change_window Sound.play_cursor Input.update call_handler(:change_window) end #-------------------------------------------------------------------------- # ● 決定やキャンセルなどのハンドリング処理 #-------------------------------------------------------------------------- def process_handling super if active return process_change_window if handle?(:change_window) && Input.trigger?(:X) return process_change_window if handle?(:change_window) && Input.trigger?(:Y) end end end #============================================================================== # ■ Window_ItemSynthesisMaterial #------------------------------------------------------------------------------ # 合成画面で、合成に必要な素材を表示するウィンドウです。 #============================================================================== class Window_ItemSynthesisMaterial < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) @item = nil refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear draw_possession(4, 0) draw_material_info(0, line_height * 2) end #-------------------------------------------------------------------------- # ● アイテムの設定 #-------------------------------------------------------------------------- def set(item, recipe) @item = item @recipe = recipe @make_number = 1 refresh end #-------------------------------------------------------------------------- # ● 作成個数の設定 #-------------------------------------------------------------------------- def set_num(make_number) @make_number = make_number refresh end #-------------------------------------------------------------------------- # ● 所持数の描画 #-------------------------------------------------------------------------- def draw_possession(x, y) rect = Rect.new(x, y, contents.width - 4 - x, line_height + 20) change_color(system_color) draw_text(rect, Vocab::Possession) change_color(normal_color) draw_text(rect, $game_party.item_number(@item), 2) end #-------------------------------------------------------------------------- # ● 素材情報の描画 #-------------------------------------------------------------------------- def draw_material_info(x, y) rect = Rect.new(x, y, contents.width, line_height) change_color(system_color) contents.font.size = 18 draw_text(rect, "必要素材", 0) if @recipe for i in 1...@recipe.size kind = @recipe[i][0] id = @recipe[i][1] num = @recipe[i][2] if kind == "I" item = $data_items[id] elsif kind == "W" item = $data_weapons[id] elsif kind == "A" item = $data_armors[id] end rect = Rect.new(x, y + line_height*i, contents.width, line_height) enabled = true enabled = false if [num*@make_number, 1].max > $game_party.item_number(item) draw_item_name(item, rect.x, rect.y, enabled) change_color(normal_color, enabled) if num > 0 draw_text(rect, "#{num*@make_number}/#{$game_party.item_number(item)}", 2) end end end change_color(normal_color) contents.font.size = 24 end end #============================================================================== # ■ Window_ItemSynthesisNumber #------------------------------------------------------------------------------ # 合成画面で、合成するアイテムの個数を入力するウィンドウです。 #============================================================================== class Window_ItemSynthesisNumber < Window_ShopNumber #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear draw_item_name(@item, 0, item_y) draw_number draw_total_price if WD_itemsynthesis_ini::Cost_view end #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def material_window=(material_window) @material_window = material_window call_update_help end #-------------------------------------------------------------------------- # ● 作成個数の変更 #-------------------------------------------------------------------------- def change_number(amount) @number = [[@number + amount, @max].min, 1].max call_update_help #追加 end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def call_update_help @material_window.set_num(@number) if @material_window end end #============================================================================== # ■ Window_ItemSynthesisCategory #------------------------------------------------------------------------------ # 合成画面で、通常アイテムや装備品の分類を選択するウィンドウです。 #============================================================================== class Window_ItemSynthesisCategory < Window_ItemCategory #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max i = 0 i += 1 if WD_itemsynthesis_ini::Category_i i += 1 if WD_itemsynthesis_ini::Category_w i += 1 if WD_itemsynthesis_ini::Category_a i += 1 if WD_itemsynthesis_ini::Category_k return i end #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_command(Vocab::item, :item) if WD_itemsynthesis_ini::Category_i add_command(Vocab::weapon, :weapon) if WD_itemsynthesis_ini::Category_w add_command(Vocab::armor, :armor) if WD_itemsynthesis_ini::Category_a add_command(Vocab::key_item, :key_item) if WD_itemsynthesis_ini::Category_k end end #============================================================================== # ■ Window_ItemSynthesisNumber #------------------------------------------------------------------------------ # 合成画面で、切替を表示するウィンドウです。 #============================================================================== class Window_ItemSynthesisChange < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear text = "合成准备=3=!" draw_text(0, 0, contents_width, line_height, text, 1) end end
#==============================================================================
# ■ RGSS3 アイテム合成 ver 1.02
#------------------------------------------------------------------------------
# 配布元:
# 白の魔 [url]http://izumiwhite.web.fc2.com/[/url]
#
# 利用規約:
# RPGツクールVX Aceの正規の登録者のみご利用になれます。
# 利用報告・著作権表示とかは必要ありません。
# 改造もご自由にどうぞ。
# 何か問題が発生しても責任は持ちません。
#==============================================================================
#--------------------------------------------------------------------------
# ★ 初期設定。
# 合成レシピ等の設定
#--------------------------------------------------------------------------
module WD_itemsynthesis_ini
Cost_view = true #費用(G)の表示(合成の費用が全て0Gの場合はfalseを推奨)
Category_i = true #カテゴリウィンドウに「アイテム」の項目を表示
Category_w = true #カテゴリウィンドウに「武器」の項目を表示
Category_a = true #カテゴリウィンドウに「防具」の項目を表示
Category_k = true #カテゴリウィンドウに「大事なもの」の項目を表示
I_recipe = [] #この行は削除しないこと
W_recipe = [] #この行は削除しないこと
A_recipe = [] #この行は削除しないこと
#以下、合成レシピ。
#例: I_recipe[3] = [100, ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]]
#と記載した場合、ID3のアイテムの合成必要は、100G。
#必要な素材は、ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個
#となる。
#I代表物品 W代表武器 A代表防具
# [合成物品ID],[需要多少钱],[]
I_recipe[2] = [50, ["I",1,2]]#合成2号物品需要1号物品2个和50G金币
I_recipe[3] = [100, ["I",1,1], ["I",2,1]]
I_recipe[8] = [200, ["I",1,2], ["I",4,1], ["I",5,1]]
I_recipe[34] = [400, ["I",7,2], ["I",8,2], ["I",33,3], ["I",35,3]]
I_recipe[32] = [400, ["I",17,6], ["I",18,7], ["I",19,8]]
I_recipe[40] = [400, ["I",7,2], ["I",8,2]]
I_recipe[41] = [400, ["I",1,1], ["I",4,1]]
I_recipe[42] = [500, ["I",8,2], ["I",33,5], ["I",35,5]]
I_recipe[71] = [500, ["I",53,4], ["I",54,3], ["I",55,2]]
I_recipe[72] = [1500, ["I",53,4], ["I",54,3], ["I",55,2]]
I_recipe[45] = [1500, ["I",22,1], ["I",23,1], ["I",24,1], ["I",25,1], ["I",26,1], ["I",27,1], ["I",28,1], ["I",29,1]]
I_recipe[53] = [1500, ["I",1,5], ["I",4,3]]
#米德辛合成表
I_recipe[48] = [50, ["I",2,1], ["I",2,1], ["I",6,1]]
I_recipe[86] = [50, ["I",1,2], ["I",2,4]]
I_recipe[120] = [50, ["I",30,3], ["I",31,5]]
I_recipe[119] = [50, ["I",5,2], ["I",6,3], ["I",7,3]]
I_recipe[118] = [50, ["I",17,2], ["I",18,2], ["I",19,3]]
I_recipe[114] = [50, ["I",8,3]]
I_recipe[54] = [600, ["I",5,2], ["I",6,3], ["I",8,1]]
I_recipe[55] = [600, ["I",5,2], ["I",6,3], ["I",8,1]]
I_recipe[56] = [600, ["I",55,1], ["I",54,1], ["I",53,1]]
I_recipe[156] = [50, ["I",9,15], ["I",10,15], ["I",11,15], ["I",12,15], ["I",13,15], ["I",14,15], ["I",15,15], ["I",16,15]]
#武器の合成レシピ
W_recipe[3] = [500, ["I",18,1], ["I",17,1]]
W_recipe[65] = [200, ["I",36,1], ["I",37,1]]
W_recipe[72] = [2000, ["I",70,6], ["I",72,6]]
W_recipe[73] = [2000, ["I",70,6], ["I",72,6]]
W_recipe[74] = [2000, ["I",70,6], ["I",72,6]]
W_recipe[75] = [2000, ["I",70,6], ["I",72,6]]
W_recipe[77] = [2500, ["I",36,10], ["I",83,4], ["I",80,2], ["I",34,3]]
#W_recipe[6] = [600, ["W",3,1], ["I",17,0]]
#防具の合成レシピ
A_recipe[62] = [500, ["I",34,20]]
A_recipe[61] = [500, ["I",33,5], ["I",35,5]]
A_recipe[82] = [2000, ["I",33,8], ["I",70,6]]
A_recipe[83] = [2000, ["I",71,6], ["I",70,6]]
A_recipe[86] = [2000, ["I",33,8], ["I",70,6], ["I",34,8]]
A_recipe[87] = [2000, ["I",36,8], ["I",70,6], ["I",34,8]]
A_recipe[84] = [2000, ["I",71,5], ["I",70,6]]
A_recipe[85] = [2000, ["I",33,8], ["I",70,6], ["I",34,8]]
A_recipe[88] = [2000, ["I",34,8], ["I",70,6], ["W",54,2]]
A_recipe[89] = [2000, ["I",33,8], ["I",70,6], ["I",34,8], ["I",36,8]]
A_recipe[75] = [2200, ["I",36,6], ["I",37,8], ["I",21,10]]
A_recipe[100] = [1800, ["I",79,85], ["I",53,62], ["I",54,30], ["I",55,45]]
A_recipe[101] = [3200, ["I",45,15], ["I",34,55], ["I",72,50]]
#A_recipe[5] = [400, ["A",2,1], ["W",2,2], ["I",17,0]]
end
#==============================================================================
# ■ WD_itemsynthesis
#------------------------------------------------------------------------------
# アイテム合成用の共通メソッドです。
#==============================================================================
module WD_itemsynthesis
def i_recipe_switch_on(id)
$game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
$game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
$game_system.i_rcp_sw[id] = true
end
def i_recipe_switch_off(id)
$game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
$game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
$game_system.i_rcp_sw[id] = false
end
def i_recipe_switch_on?(id)
$game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
$game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
return $game_system.i_rcp_sw[id]
end
def i_recipe_all_switch_on
for i in 1..$data_items.size
i_recipe_switch_on(i)
end
end
def i_recipe_all_switch_off
for i in 1..$data_items.size
i_recipe_switch_off(i)
end
end
def w_recipe_switch_on(w)
$game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
$game_system.w_rcp_sw[1] = true if $game_system.w_rcp_sw[1] == nil
$game_system.w_rcp_sw[1] = true
end
def w_recipe_switch_off(id)
$game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
$game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
$game_system.w_rcp_sw[id] = false
end
def w_recipe_switch_on?(id)
$game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
$game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
return $game_system.w_rcp_sw[id]
end
def w_recipe_all_switch_on
for i in 1..$data_weapons.size
w_recipe_switch_on(i)
end
end
def w_recipe_all_switch_off
for i in 1..$data_weapons.size
w_recipe_switch_off(i)
end
end
def a_recipe_switch_on(id)
$game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
$game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
$game_system.a_rcp_sw[id] = true
end
def a_recipe_switch_off(id)
$game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
$game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
$game_system.a_rcp_sw[id] = false
end
def a_recipe_switch_on?(id)
$game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
$game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
return $game_system.a_rcp_sw[id]
end
def a_recipe_all_switch_on
for i in 1..$data_armors.size
a_recipe_switch_on(i)
end
end
def a_recipe_all_switch_off
for i in 1..$data_armors.size
a_recipe_switch_off(i)
end
end
def recipe_all_switch_on
i_recipe_all_switch_on
w_recipe_all_switch_on
a_recipe_all_switch_on
end
def recipe_all_switch_off
i_recipe_all_switch_off
w_recipe_all_switch_off
a_recipe_all_switch_off
end
end
class Game_Interpreter
include WD_itemsynthesis
end
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :i_rcp_sw
attr_accessor :w_rcp_sw
attr_accessor :a_rcp_sw
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias wd_orig_initialize004 initialize
def initialize
wd_orig_initialize004
@i_rcp_sw = []
@w_rcp_sw = []
@a_rcp_sw = []
end
end
#==============================================================================
# ■ Scene_ItemSynthesis
#------------------------------------------------------------------------------
# 合成画面の処理を行うクラスです。
#==============================================================================
class Scene_ItemSynthesis < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_help_window
create_dummy_window
create_number_window
create_status_window
create_material_window
create_list_window
create_category_window
create_gold_window
create_change_window
end
#--------------------------------------------------------------------------
# ● ゴールドウィンドウの作成
#--------------------------------------------------------------------------
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.viewport = @viewport
@gold_window.x = Graphics.width - @gold_window.width
@gold_window.y = @help_window.height
@gold_window.hide
end
#--------------------------------------------------------------------------
# ● 切り替え表示ウィンドウの作成
#--------------------------------------------------------------------------
def create_change_window
wx = 0
wy = @gold_window.y
ww = Graphics.width - @gold_window.width
wh = @gold_window.height
@change_window = Window_ItemSynthesisChange.new(wx, wy, ww, wh)
@change_window.viewport = @viewport
@change_window.hide
end
#--------------------------------------------------------------------------
# ● ダミーウィンドウの作成
#--------------------------------------------------------------------------
def create_dummy_window
wy = @help_window.y + @help_window.height + 48
wh = Graphics.height - wy
@dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
@dummy_window.viewport = @viewport
end
#--------------------------------------------------------------------------
# ● 個数入力ウィンドウの作成
#--------------------------------------------------------------------------
def create_number_window
wy = @dummy_window.y
wh = @dummy_window.height
@number_window = Window_ItemSynthesisNumber.new(0, wy, wh)
@number_window.viewport = @viewport
@number_window.hide
@number_window.set_handler(:ok, method(:on_number_ok))
@number_window.set_handler(:cancel, method(:on_number_cancel))
end
#--------------------------------------------------------------------------
# ● ステータスウィンドウの作成
#--------------------------------------------------------------------------
def create_status_window
wx = @number_window.width
wy = @dummy_window.y
ww = Graphics.width - wx
wh = @dummy_window.height
@status_window = Window_ShopStatus.new(wx, wy, ww, wh)
@status_window.viewport = @viewport
@status_window.hide
end
#--------------------------------------------------------------------------
# ● 素材ウィンドウの作成
#--------------------------------------------------------------------------
def create_material_window
wx = @number_window.width
wy = @dummy_window.y
ww = Graphics.width - wx
wh = @dummy_window.height
@material_window = Window_ItemSynthesisMaterial.new(wx, wy, ww, wh)
@material_window.viewport = @viewport
@material_window.hide
@number_window.material_window = @material_window
end
#--------------------------------------------------------------------------
# ● 合成アイテムリストウィンドウの作成
#--------------------------------------------------------------------------
def create_list_window
wy = @dummy_window.y
wh = @dummy_window.height
@list_window = Window_ItemSynthesisList.new(0, wy, wh)
@list_window.viewport = @viewport
@list_window.help_window = @help_window
@list_window.status_window = @status_window
@list_window.material_window = @material_window
@list_window.hide
@list_window.set_handler(:ok, method(:on_list_ok))
@list_window.set_handler(:cancel, method(:on_list_cancel))
@list_window.set_handler(:change_window, method(:on_change_window))
end
#--------------------------------------------------------------------------
# ● カテゴリウィンドウの作成
#--------------------------------------------------------------------------
def create_category_window
@category_window = Window_ItemSynthesisCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.y = @help_window.height
@category_window.activate
@category_window.item_window = @list_window
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:return_scene))
end
#--------------------------------------------------------------------------
# ● 合成アイテムリストウィンドウのアクティブ化
#--------------------------------------------------------------------------
def activate_list_window
@list_window.money = money
@list_window.show.activate
end
#--------------------------------------------------------------------------
# ● 合成[決定]
#--------------------------------------------------------------------------
def on_list_ok
@item = @list_window.item
@list_window.hide
@number_window.set(@item, max_buy, buying_price, currency_unit)
@number_window.show.activate
end
#--------------------------------------------------------------------------
# ● 合成[キャンセル]
#--------------------------------------------------------------------------
def on_list_cancel
@category_window.activate
@category_window.show
@dummy_window.show
@list_window.hide
@status_window.hide
@status_window.item = nil
@material_window.hide
@material_window.set(nil, nil)
@gold_window.hide
@change_window.hide
@help_window.clear
end
#--------------------------------------------------------------------------
# ● 表示切替
#--------------------------------------------------------------------------
def on_change_window
if @status_window.visible
@status_window.hide
@material_window.show
else
@status_window.show
@material_window.hide
end
end
#--------------------------------------------------------------------------
# ● カテゴリ[決定]
#--------------------------------------------------------------------------
def on_category_ok
activate_list_window
@gold_window.show
@change_window.show
@material_window.show
@category_window.hide
@list_window.select(0)
end
#--------------------------------------------------------------------------
# ● 個数入力[決定]
#--------------------------------------------------------------------------
def on_number_ok
Sound.play_shop
do_syntetic(@number_window.number)
end_number_input
@gold_window.refresh
end
#--------------------------------------------------------------------------
# ● 個数入力[キャンセル]
#--------------------------------------------------------------------------
def on_number_cancel
Sound.play_cancel
end_number_input
end
#--------------------------------------------------------------------------
# ● 合成の実行
#--------------------------------------------------------------------------
def do_syntetic(number)
$game_party.lose_gold(number * buying_price)
$game_party.gain_item(@item, number)
@recipe = @list_window.recipe(@item)
for i in 1...@recipe.size
kind = @recipe[i][0]
id = @recipe[i][1]
num = @recipe[i][2]
if kind == "I"
item = $data_items[id]
elsif kind == "W"
item = $data_weapons[id]
elsif kind == "A"
item = $data_armors[id]
end
$game_party.lose_item(item, num*number)
end
end
#--------------------------------------------------------------------------
# ● 個数入力の終了
#--------------------------------------------------------------------------
def end_number_input
@number_window.hide
activate_list_window
end
#--------------------------------------------------------------------------
# ● 最大購入可能個数の取得
#--------------------------------------------------------------------------
def max_buy
max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
@recipe = @list_window.recipe(@item)
for i in 1...@recipe.size
kind = @recipe[i][0]
id = @recipe[i][1]
num = @recipe[i][2]
if kind == "I"
item = $data_items[id]
elsif kind == "W"
item = $data_weapons[id]
elsif kind == "A"
item = $data_armors[id]
end
if num > 0
max_buf = $game_party.item_number(item)/num
else
max_buf = 999
end
max = [max, max_buf].min
end
buying_price == 0 ? max : [max, money / buying_price].min
end
#--------------------------------------------------------------------------
# ● 所持金の取得
#--------------------------------------------------------------------------
def money
@gold_window.value
end
#--------------------------------------------------------------------------
# ● 通貨単位の取得
#--------------------------------------------------------------------------
def currency_unit
@gold_window.currency_unit
end
#--------------------------------------------------------------------------
# ● 合成費用の取得
#--------------------------------------------------------------------------
def buying_price
@list_window.price(@item)
end
end
#==============================================================================
# ■ Window_ItemSynthesisList
#------------------------------------------------------------------------------
# 合成画面で、合成可能なアイテムの一覧を表示するウィンドウです。
#==============================================================================
class Window_ItemSynthesisList < Window_Selectable
include WD_itemsynthesis
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :status_window # ステータスウィンドウ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, height)
super(x, y, window_width, height)
@shop_goods = []
@shop_recipes = []
for i in 1..WD_itemsynthesis_ini::I_recipe.size
recipe = WD_itemsynthesis_ini::I_recipe[i]
if recipe
good = [0, i, recipe[0]]
if i_recipe_switch_on?(i)
@shop_goods.push(good)
@shop_recipes.push(recipe)
end
end
end
for i in 1..WD_itemsynthesis_ini::W_recipe.size
recipe = WD_itemsynthesis_ini::W_recipe[i]
if recipe
good = [1, i, recipe[0]]
if w_recipe_switch_on?(i)
@shop_goods.push(good)
@shop_recipes.push(recipe)
end
end
end
for i in 1..WD_itemsynthesis_ini::A_recipe.size
recipe = WD_itemsynthesis_ini::A_recipe[i]
if recipe
good = [2, i, recipe[0]]
if a_recipe_switch_on?(i)
@shop_goods.push(good)
@shop_recipes.push(recipe)
end
end
end
@Money = 0
refresh
select(0)
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return 304
end
#--------------------------------------------------------------------------
# ● 項目数の取得
#--------------------------------------------------------------------------
def item_max
@data ? @data.size : 1
end
#--------------------------------------------------------------------------
# ● アイテムの取得
#--------------------------------------------------------------------------
def item
@data[index]
end
#--------------------------------------------------------------------------
# ● 所持金の設定
#--------------------------------------------------------------------------
def money=(money)
@money = money
refresh
end
#--------------------------------------------------------------------------
# ● 選択項目の有効状態を取得
#--------------------------------------------------------------------------
def current_item_enabled?
enable?(@data[index])
end
#--------------------------------------------------------------------------
# ● 合成費用を取得
#--------------------------------------------------------------------------
def price(item)
@price[item]
end
#--------------------------------------------------------------------------
# ● 合成可否を取得
#--------------------------------------------------------------------------
def enable?(item)
@makable[item]
end
#--------------------------------------------------------------------------
# ● レシピを取得
#--------------------------------------------------------------------------
def recipe(item)
@recipe[item]
end
#--------------------------------------------------------------------------
# ● アイテムを許可状態で表示するかどうか
#--------------------------------------------------------------------------
def have_mat?(recipe)
flag = true
if @money >= recipe[0]
for i in 1...recipe.size
kind = recipe[i][0]
id = recipe[i][1]
num = recipe[i][2]
if kind == "I"
item = $data_items[id]
elsif kind == "W"
item = $data_weapons[id]
elsif kind == "A"
item = $data_armors[id]
end
if $game_party.item_number(item) < [num, 1].max
flag = false
end
end
else
flag = false
end
return flag
end
#--------------------------------------------------------------------------
# ● カテゴリの設定
#--------------------------------------------------------------------------
def category=(category)
return if @category == category
@category = category
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
make_item_list
create_contents
draw_all_items
end
#--------------------------------------------------------------------------
# ● アイテムをリストに含めるかどうか
#--------------------------------------------------------------------------
def include?(item)
case @category
when :item
item.is_a?(RPG::Item) && !item.key_item?
when :weapon
item.is_a?(RPG::Weapon)
when :armor
item.is_a?(RPG::Armor)
when :key_item
item.is_a?(RPG::Item) && item.key_item?
else
false
end
end
#--------------------------------------------------------------------------
# ● アイテムリストの作成
#--------------------------------------------------------------------------
def make_item_list
@data = []
@price = {}
@makable = {}
@recipe = {}
for i in 0...@shop_goods.size
goods = @shop_goods[i]
recipe = @shop_recipes[i]
case goods[0]
when 0; item = $data_items[goods[1]]
when 1; item = $data_weapons[goods[1]]
when 2; item = $data_armors[goods[1]]
end
if item
if include?(item)
@data.push(item)
@price[item] = goods[2]
@makable[item] = have_mat?(recipe)
@recipe[item] = recipe
end
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
rect = item_rect(index)
draw_item_name(item, rect.x, rect.y, enable?(item))
rect.width -= 4
draw_text(rect, price(item), 2) if WD_itemsynthesis_ini::Cost_view
end
#--------------------------------------------------------------------------
# ● ステータスウィンドウの設定
#--------------------------------------------------------------------------
def status_window=(status_window)
@status_window = status_window
call_update_help
end
#--------------------------------------------------------------------------
# ● 素材ウィンドウの設定
#--------------------------------------------------------------------------
def material_window=(material_window)
@material_window = material_window
call_update_help
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_item(item) if @help_window
@status_window.item = item if @status_window
@material_window.set(item, recipe(item)) if @material_window
end
#--------------------------------------------------------------------------
# ● ←→ ボタン(表示切替)が押されたときの処理
#--------------------------------------------------------------------------
def process_change_window
Sound.play_cursor
Input.update
call_handler(:change_window)
end
#--------------------------------------------------------------------------
# ● 決定やキャンセルなどのハンドリング処理
#--------------------------------------------------------------------------
def process_handling
super
if active
return process_change_window if handle?(:change_window) && Input.trigger?(:X)
return process_change_window if handle?(:change_window) && Input.trigger?(:Y)
end
end
end
#==============================================================================
# ■ Window_ItemSynthesisMaterial
#------------------------------------------------------------------------------
# 合成画面で、合成に必要な素材を表示するウィンドウです。
#==============================================================================
class Window_ItemSynthesisMaterial < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
@item = nil
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_possession(4, 0)
draw_material_info(0, line_height * 2)
end
#--------------------------------------------------------------------------
# ● アイテムの設定
#--------------------------------------------------------------------------
def set(item, recipe)
@item = item
@recipe = recipe
@make_number = 1
refresh
end
#--------------------------------------------------------------------------
# ● 作成個数の設定
#--------------------------------------------------------------------------
def set_num(make_number)
@make_number = make_number
refresh
end
#--------------------------------------------------------------------------
# ● 所持数の描画
#--------------------------------------------------------------------------
def draw_possession(x, y)
rect = Rect.new(x, y, contents.width - 4 - x, line_height + 20)
change_color(system_color)
draw_text(rect, Vocab::Possession)
change_color(normal_color)
draw_text(rect, $game_party.item_number(@item), 2)
end
#--------------------------------------------------------------------------
# ● 素材情報の描画
#--------------------------------------------------------------------------
def draw_material_info(x, y)
rect = Rect.new(x, y, contents.width, line_height)
change_color(system_color)
contents.font.size = 18
draw_text(rect, "必要素材", 0)
if @recipe
for i in 1...@recipe.size
kind = @recipe[i][0]
id = @recipe[i][1]
num = @recipe[i][2]
if kind == "I"
item = $data_items[id]
elsif kind == "W"
item = $data_weapons[id]
elsif kind == "A"
item = $data_armors[id]
end
rect = Rect.new(x, y + line_height*i, contents.width, line_height)
enabled = true
enabled = false if [num*@make_number, 1].max > $game_party.item_number(item)
draw_item_name(item, rect.x, rect.y, enabled)
change_color(normal_color, enabled)
if num > 0
draw_text(rect, "#{num*@make_number}/#{$game_party.item_number(item)}", 2)
end
end
end
change_color(normal_color)
contents.font.size = 24
end
end
#==============================================================================
# ■ Window_ItemSynthesisNumber
#------------------------------------------------------------------------------
# 合成画面で、合成するアイテムの個数を入力するウィンドウです。
#==============================================================================
class Window_ItemSynthesisNumber < Window_ShopNumber
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_item_name(@item, 0, item_y)
draw_number
draw_total_price if WD_itemsynthesis_ini::Cost_view
end
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def material_window=(material_window)
@material_window = material_window
call_update_help
end
#--------------------------------------------------------------------------
# ● 作成個数の変更
#--------------------------------------------------------------------------
def change_number(amount)
@number = [[@number + amount, @max].min, 1].max
call_update_help #追加
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def call_update_help
@material_window.set_num(@number) if @material_window
end
end
#==============================================================================
# ■ Window_ItemSynthesisCategory
#------------------------------------------------------------------------------
# 合成画面で、通常アイテムや装備品の分類を選択するウィンドウです。
#==============================================================================
class Window_ItemSynthesisCategory < Window_ItemCategory
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
i = 0
i += 1 if WD_itemsynthesis_ini::Category_i
i += 1 if WD_itemsynthesis_ini::Category_w
i += 1 if WD_itemsynthesis_ini::Category_a
i += 1 if WD_itemsynthesis_ini::Category_k
return i
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command(Vocab::item, :item) if WD_itemsynthesis_ini::Category_i
add_command(Vocab::weapon, :weapon) if WD_itemsynthesis_ini::Category_w
add_command(Vocab::armor, :armor) if WD_itemsynthesis_ini::Category_a
add_command(Vocab::key_item, :key_item) if WD_itemsynthesis_ini::Category_k
end
end
#==============================================================================
# ■ Window_ItemSynthesisNumber
#------------------------------------------------------------------------------
# 合成画面で、切替を表示するウィンドウです。
#==============================================================================
class Window_ItemSynthesisChange < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
text = "合成准备=3=!"
draw_text(0, 0, contents_width, line_height, text, 1)
end
end
|
|