=begin ◆概要 アイテムの鑑定が出来るようになります。 似たようなスクリプトは他所にもありますが、このスクリプトはTOPの「?SWORD」など ランダム変化する鑑定に特化しています。 ◆機能 ・武具アイテムのメモ欄に<鑑定アイテム>と記入すると、鑑定することで別の アイテムに変化するアイテムになります。 ・<名前鑑定済>か<名前鑑定済み>と記入すると、最初から名前だけ分かります。 ・<鑑定結果 n, p>でそのアイテムがpの確率でIDnのアイテムに変化(種類は元の アイテムに対応)します。百分率ではありません。 例:<鑑定結果 1 3><鑑定結果 2 1><鑑定結果 3 1>の三つを設定した場合、 pの合計は5であるから、それぞれ3/5、1/5、1/5の確率で変化。 ・アイテムまたはスキルのメモ欄に<鑑定>と記入すると、そのスキルまたはアイテムを 使用することで鑑定が出来ます。 ・その他詳しい機能は設定項目のところでも解説しています。 ・イベントコマンドのスクリプトに「clear_all_name_ni」と「identify_all_item」の 二つがあります。前者はランダムで名付けた名前を削除、後者は持っているアイテムを 全て鑑定します。 ・鑑定ショップもついてます。「SceneManager.call(Scene_Identify)」または 「call_identify」で鑑定ショップを呼び出します。 ◆仕様 ・某不思議っぽいダンジョンみたいなアイテムを作るのは難しいかも。 ◆使用上の注意 ・●……再定義 ○……新規定義 ★……エイリアス ・再定義を多用していますので素材の上の方に置くことを推奨します。 =end module FAI_IdentifyItem # 設定項目:未鑑定アイテムを別個カウントするか # trueにすると未鑑定アイテム一個につき枠を一個消費。 EACH_COUNT = true # 設定項目:適当な名前をつける # EACH_COUNTがtrueの時有効。trueにすると適当な名前がつきます。 EACH_NAME = true # 設定項目:名前リスト # EACH_NAMEがtrueの時有効。アイテムのメモ欄に<アイテム名リスト n>と # 記入すれば、ITEM_NAME_LIST[n]の名前からランダムで名前が付く。 # 0は初期設定。下記の設定に合わせて十分に設定しないとフリーズする。 ITEM_NAME_LIST = [] ITEM_NAME_LIST[0] = ["ナゾ", "アレ", "何か"] ITEM_NAME_LIST[1] = ["キレイな薬","アレな薬","クエエエの薬","ぬるぽ"] # 設定項目:同じアイテムに同じ名前を付ける ITEM_COMMON_NAME = false # 設定項目:ランダムで同じ名前が付いてもよいか RAND_COMMON_NAME = true # 設定項目:未鑑定アイテムの説明文を隠す # trueで全部、falseで名前鑑定済み以外、nilで隠さない HIDE_NI_DESCRIPTION = false # 設定項目:隠した後の説明文 # HIDE_NI_DESCRIPTIONがtrueの時有効。 NI_DESCRIPTION = "なんだか よく わからない!" # 設定項目:未鑑定アイテムの名前に色をつける # trueで黄色、falseで白、Color.new(R, G, B)で色指定。 IDENTIFIED_COLOR = Color.new(255, 255, 0) # 設定項目:鑑定リスト # IDENTIFY_LIST[n]で設定可能。設定は「ID => 確率」で。 # 確率は別に100%じゃなくてもいいです。 # このリストは<鑑定リスト n>でn番目を使うことが出来ます。 # また、<鑑定結果 n p>とも併用が出来ます。 IDENTIFY_LIST = [{2 => 1}] IDENTIFY_LIST[1] = {2=>50, 6=>25, 10=>13, 13=>6, 21=>3, 29=>2, 30=>1} # 設定項目:鑑定費用の文字式 # 100でも@item.price*0.3でも何でも書いとけば計算してくれます。 # スクリプト初心者は初期設定の式をよく読んでからお好みの設定をしてください。 # メモ欄に<鑑定費用 n>と記入すれば@item.price_identifyで呼び出せます。 DEF_PRICE_IDENTIFY = "@item.price_identify.zero? ? (@item.price*0.3).round : @item.price_identify" IDENTIFY = /<鑑定>/ NOT_IDENTIFIED = /<鑑定アイテム>/ NAME_IDENTIFIED = /<名前鑑定済(?:み)*>/ IDENTIFIED_ITEM = /<鑑定結果\s*(\d+)\s*\,\s*(\d+)\s*>/ IDENTIFIED_LIST = /<鑑定リスト\s*(\d+)\s*>/ NAME_LIST_NUM = /<アイテム名リスト\s*(\d+)\s*>/ PRICE_IDENTIFY = /<鑑定費用\s*(\d+)\s*>/ end class RPG::BaseItem #-------------------------------------------------------------------------- # ○ メモ取得 #-------------------------------------------------------------------------- def memo_identify @identified = true @name_identified = !(FAI_IdentifyItem::EACH_COUNT && FAI_IdentifyItem::EACH_NAME) @identified_item = {} @identified_list = -1 @item_name_list = 0 @price_identify = 0 self.note.each_line{|line| case line when FAI_IdentifyItem::NOT_IDENTIFIED @identified = false when FAI_IdentifyItem::NAME_IDENTIFIED @name_identified = true when FAI_IdentifyItem::IDENTIFIED_ITEM @identified_item[$1.to_i] = $2.to_i when FAI_IdentifyItem::IDENTIFIED_LIST @identified_list = $1.to_i when FAI_IdentifyItem::NAME_LIST_NUM @item_name_list = $1.to_i when FAI_IdentifyItem::PRICE_IDENTIFY @price_identify = $1.to_i end } end #-------------------------------------------------------------------------- # ○ 鑑定 #-------------------------------------------------------------------------- def identify i = 0; s = 0; identifed_item.each_value{|v|s += v}; pro = rand(s) identifed_item.each{|k, v|break i = k if pro < v; pro -= v} if is_a?(RPG::Item); item = $data_items[i] elsif is_a?(RPG::Weapon); item = $data_weapons[i] elsif is_a?(RPG::Armor); item = $data_armors[i] end $game_party.lose_item(self, 1); $game_party.gain_item(item, 1); item end #-------------------------------------------------------------------------- # ○ 鑑定済みか? #-------------------------------------------------------------------------- def identified; memo_identify if @identified.nil?; @identified; end #-------------------------------------------------------------------------- # ○ 名前鑑定済みか? #-------------------------------------------------------------------------- def name_identified memo_identify if @name_identified.nil?; @identified || @name_identified end #-------------------------------------------------------------------------- # ○ 鑑定後のアイテム #-------------------------------------------------------------------------- def identifed_item memo_identify if !@identifed_item || !@identified_list if @identified_list >= 0 list = FAI_IdentifyItem::IDENTIFY_LIST[@identified_list] else list = {} end; @identified_item.each{|k, v|list[k] = v}; list end #-------------------------------------------------------------------------- # ○ 鑑定に必要な価格 #-------------------------------------------------------------------------- def price_identify memo_identify if @price_identify.nil?; @price_identify end #-------------------------------------------------------------------------- # ● 名前 #-------------------------------------------------------------------------- def name if !$game_system || name_identified; @name else list = FAI_IdentifyItem::ITEM_NAME_LIST[@item_name_list] if FAI_IdentifyItem::ITEM_COMMON_NAME if !$game_system.item_name[id] name = "" loop do name = list[rand(list.size)] include_name = $game_system.item_name.values.include?(name) break if FAI_IdentifyItem::RAND_COMMON_NAME || !include_name end $game_system.item_name[id] = name end $game_system.item_name[id] else @name_ni_n = $game_system.item_name.size if !@name_ni_n if !$game_system.item_name[@name_ni_n] name = "" loop do name = list[rand(list.size)] include_name = $game_system.item_name.values.include?(name) break if FAI_IdentifyItem::RAND_COMMON_NAME || !include_name end $game_system.item_name[@name_ni_n] = name end $game_system.item_name[@name_ni_n] end end end #-------------------------------------------------------------------------- # ● 説明文 #-------------------------------------------------------------------------- def description if (FAI_IdentifyItem::HIDE_NI_DESCRIPTION && !identified) || (!FAI_IdentifyItem::HIDE_NI_DESCRIPTION.nil? && !name_identified) FAI_IdentifyItem::NI_DESCRIPTION else @description end end #-------------------------------------------------------------------------- # ○ アイテム名の初期化 #-------------------------------------------------------------------------- def clear_name_not_identify @name_ni_n = nil end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # ○ メモ取得 #-------------------------------------------------------------------------- def memo_identify @act_identify = false super self.note.each_line{|line| case line when FAI_IdentifyItem::IDENTIFY @act_identify = $1.to_i end } end #-------------------------------------------------------------------------- # ○ 鑑定か? #-------------------------------------------------------------------------- def act_identify; memo_identify if @act_identify.nil?; @act_identify; end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ アイテム名の初期化 #-------------------------------------------------------------------------- def clear_all_name_ni $data_items.compact.each{|item|item.clear_name_not_identify} $data_weapons.compact.each{|item|item.clear_name_not_identify} $data_armors.compact.each{|item|item.clear_name_not_identify} $game_system.item_name.clear end #-------------------------------------------------------------------------- # ○ 全アイテムの鑑定 #-------------------------------------------------------------------------- def identify_all_item $game_party.all_ni_items.each{|i|i.identify} end #-------------------------------------------------------------------------- # ○ 鑑定画面を開く #-------------------------------------------------------------------------- def call_identify return if $game_party.in_battle SceneManager.call(Scene_Identify) Fiber.yield end end #============================================================================== # ■ Game_System #============================================================================== class Game_System #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :item_name # アイテム名 #-------------------------------------------------------------------------- # ★ オブジェクト初期化 #-------------------------------------------------------------------------- alias fai_ii_initialize initialize def initialize fai_ii_initialize @item_name = {} end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● アイテムオブジェクトの配列取得 #-------------------------------------------------------------------------- def items arr1 = @items.keys.sort.select{|id|$data_items[a].identified} arr2 = @items.keys.sort.select{|id|!$data_items[a].identified} arr1 = arr1.collect{|id|$data_items[a]} if FAI_IdentifyItem::EACH_COUNT arr3 = []; arr2.each{|id|@items[id].times{arr3.push($data_items[a])}} else arr3 = arr2.collect{|id|$data_items[id]} end arr1 + arr3 end #-------------------------------------------------------------------------- # ● 武器オブジェクトの配列取得 #-------------------------------------------------------------------------- def weapons arr1 = @weapons.keys.sort.select{|id|$data_weapons[a].identified} arr2 = @weapons.keys.sort.select{|id|!$data_weapons[a].identified} arr1 = arr1.collect{|id|$data_weapons[a]} if FAI_IdentifyItem::EACH_COUNT arr3 = []; arr2.each{|id|@weapons[id].times{arr3.push($data_weapons[a])}} else arr3 = arr2.collect{|id|$data_weapons[id]} end arr1 + arr3 end #-------------------------------------------------------------------------- # ● 防具オブジェクトの配列取得 #-------------------------------------------------------------------------- def armors arr1 = @armors.keys.sort.select{|id|$data_armors[a].identified} arr2 = @armors.keys.sort.select{|id|!$data_armors[a].identified} arr1 = arr1.collect{|id|$data_armors[a]} if FAI_IdentifyItem::EACH_COUNT arr3 = []; arr2.each{|id|@armors[id].times{arr3.push($data_armors[a])}} else arr3 = arr2.collect{|id|$data_armors[id]} end arr1 + arr3 end #-------------------------------------------------------------------------- # ● 鑑定済みアイテムオブジェクトの配列取得 #-------------------------------------------------------------------------- def identified_items @items.keys.sort.select{|id|$data_items[id].identified}.collect{ |id|$data_items[id]} end #-------------------------------------------------------------------------- # ● 鑑定済み武器オブジェクトの配列取得 #-------------------------------------------------------------------------- def identified_weapons @weapons.keys.sort.select{|id|$data_weapons[id].identified}.collect{ |id|$data_weapons[id]} end #-------------------------------------------------------------------------- # ● 鑑定済み防具オブジェクトの配列取得 #-------------------------------------------------------------------------- def identified_armors @armors.keys.sort.select{|id|$data_armors[id].identified}.collect{ |id|$data_armors[id]} end #-------------------------------------------------------------------------- # ● 未鑑定アイテムオブジェクトの配列取得 #-------------------------------------------------------------------------- def ni_items arr1 = @items.keys.sort.select{|id|!$data_items[id].identified} if FAI_IdentifyItem::EACH_COUNT arr = []; arr1.each{|id|@items[id].times{arr.push($data_items[id])}} else arr = arr1.collect{|id|$data_items[id]} end; arr end #-------------------------------------------------------------------------- # ● 未鑑定武器オブジェクトの配列取得 #-------------------------------------------------------------------------- def ni_weapons arr1 = @weapons.keys.sort.select{|id|!$data_weapons[id].identified} if FAI_IdentifyItem::EACH_COUNT arr = []; arr1.each{|id|@weapons[id].times{arr.push($data_weapons[id])}} else arr = arr1.collect{|id|$data_weapons[id]} end; arr end #-------------------------------------------------------------------------- # ● 未鑑定防具オブジェクトの配列取得 #-------------------------------------------------------------------------- def ni_armors arr1 = @armors.keys.sort.select{|id|!$data_armors[id].identified} if FAI_IdentifyItem::EACH_COUNT arr = []; arr1.each{|id|@armors[id].times{arr.push($data_armors[id])}} else arr = arr1.collect{|id|$data_armors[id]} end; arr end #-------------------------------------------------------------------------- # ● 全ての装備品オブジェクトの配列取得 #-------------------------------------------------------------------------- def equip_items identified_weapons + identified_armors + ni_weapons + ni_armors end #-------------------------------------------------------------------------- # ● 全ての鑑定済みアイテムオブジェクトの配列取得 #-------------------------------------------------------------------------- def all_identified_items identified_items + identified_weapons + identified_armors end #-------------------------------------------------------------------------- # ● 全ての未鑑定アイテムオブジェクトの配列取得 #-------------------------------------------------------------------------- def all_ni_items ni_items + ni_weapons + ni_armors end #-------------------------------------------------------------------------- # ● 全てのアイテムオブジェクトの配列取得 #-------------------------------------------------------------------------- def all_items all_identified_items + all_ni_items end end if FAI_IdentifyItem::IDENTIFIED_COLOR #============================================================================== # ■ Window_Base #============================================================================== class Window_Base #-------------------------------------------------------------------------- # ● アイテム名の描画 #-------------------------------------------------------------------------- def draw_item_name(item, x, y, enabled = true, width = 172) return unless item if item.identified color = normal_color elsif FAI_IdentifyItem::IDENTIFIED_COLOR.is_a?(Color) color = FAI_IdentifyItem::IDENTIFIED_COLOR else color = Color.new(255, 255, 0) end draw_icon(item.icon_index, x, y, enabled) change_color(color, enabled) draw_text(x + 24, y, width, line_height, item.name) end end end # <= if FAI_IdentifyItem::IDENTIFIED_COLOR #============================================================================== # ■ Window_ItemList #============================================================================== class Window_ItemList < Window_Selectable #-------------------------------------------------------------------------- # ● アイテムの個数を描画 #-------------------------------------------------------------------------- def draw_item_number(rect, item) if FAI_IdentifyItem::EACH_COUNT && !item.identified number = 1 else number = $game_party.item_number(item) end draw_text(rect, sprintf(":%2d", number), 2) end end #============================================================================== # □ Window_IdentifyItem #============================================================================== class Window_IdentifyItem < Window_Selectable #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super; refresh; select(0); @identify_item = nil end def get_identify_item; @identify_item; end def set_identify_item(item); @identify_item = item; end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max; 1; end #-------------------------------------------------------------------------- # ● 項目数の取得 #-------------------------------------------------------------------------- def item_max; @data ? @data.size : 1; end #-------------------------------------------------------------------------- # ● アイテムの取得 #-------------------------------------------------------------------------- def item; @data && index >= 0 ? @data[index] : nil; end #-------------------------------------------------------------------------- # ● 選択項目の有効状態を取得 #-------------------------------------------------------------------------- def current_item_enabled? (item && $game_party.alive_members.any?{|a|a.usable?(@identify_item)}) || @cursor_fix end #-------------------------------------------------------------------------- # ● アイテムリストの作成 #-------------------------------------------------------------------------- def make_item_list @data = $game_party.all_ni_items end #-------------------------------------------------------------------------- # ● 前回の選択位置を復帰 #-------------------------------------------------------------------------- def select_last end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 draw_item_name(item, rect.x, rect.y) draw_item_number(rect, item) end end #-------------------------------------------------------------------------- # ● アイテムの個数を描画 #-------------------------------------------------------------------------- def draw_item_number(rect, item) if FAI_IdentifyItem::EACH_COUNT && !item.identified number = 1 else number = $game_party.item_number(item) end draw_text(rect, sprintf(":%2d", number), 2) end end #============================================================================== # □ Window_ShopIdentify #============================================================================== class Window_ShopIdentify < Window_IdentifyItem #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, height) super(x, y, window_width, height) @money = 0 end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width return 304 end #-------------------------------------------------------------------------- # ● 所持金の設定 #-------------------------------------------------------------------------- def money=(money) @money = money refresh end #-------------------------------------------------------------------------- # ● 選択項目の有効状態を取得 #-------------------------------------------------------------------------- def current_item_enabled?; enable?(item); end #-------------------------------------------------------------------------- # ● 商品の値段を取得 #-------------------------------------------------------------------------- def price(item) @item = item; eval(FAI_IdentifyItem::DEF_PRICE_IDENTIFY) end #-------------------------------------------------------------------------- # ● アイテムを許可状態で表示するかどうか #-------------------------------------------------------------------------- def enable?(item) item && price(item) <= (@money || 0) end #-------------------------------------------------------------------------- # ○ 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) @item = @data[index] return if !@item rect = item_rect(index) draw_item_name(@item, rect.x, rect.y, enable?(@item)) rect.width -= 4 draw_text(rect, eval(FAI_IdentifyItem::DEF_PRICE_IDENTIFY), 2) end end #============================================================================== # ■ Window_IdentifyCommand #============================================================================== class Window_IdentifyCommand < Window_HorzCommand #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(window_width) @window_width = window_width super(0, 0) end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width @window_width end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max return 2 end #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_command("鑑定する", :identify) add_command(Vocab::ShopCancel, :cancel) end end #============================================================================== # ■ Scene_ItemBase #============================================================================== class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_actor_window end #-------------------------------------------------------------------------- # ★ 開始処理 #-------------------------------------------------------------------------- alias fai_ii_start start def start fai_ii_start create_identify_window @result_window = Window_Base.new(150, 100, 244, 48) @result_window.hide.z = 200 end #-------------------------------------------------------------------------- # ● アクターウィンドウの作成 #-------------------------------------------------------------------------- def create_identify_window @identify_window = Window_IdentifyItem.new(0, 0, 272, 416) @identify_window.hide @identify_window.set_handler(:ok, method(:on_ni_item_ok)) @identify_window.set_handler(:cancel, method(:on_ni_item_cancel)) end #-------------------------------------------------------------------------- # ● 鑑定アイテム[決定] #-------------------------------------------------------------------------- def on_ni_item_ok if @result_window.visible @result_window.hide @identify_window.cursor_fix = false @identify_window.activate.refresh @identify_window.index -= 1 if !@identify_window.item if !$game_party.has_item?(@identify_window.get_identify_item) hide_sub_window(@identify_window) end elsif @identify_window.item && $game_party.has_item?(item) use_identify else Sound.play_buzzer @identify_window.activate end end #-------------------------------------------------------------------------- # ● 鑑定アイテム[キャンセル] #-------------------------------------------------------------------------- def on_ni_item_cancel if @result_window.visible @result_window.hide @identify_window.cursor_fix = false @identify_window.activate.refresh @identify_window.index -= 1 if !@identify_window.item if !$game_party.has_item?(@identify_window.get_identify_item) hide_sub_window(@identify_window) end else hide_sub_window(@identify_window) end end #-------------------------------------------------------------------------- # ● アイテムの決定 #-------------------------------------------------------------------------- def determine_item if item.for_friend? show_sub_window(@actor_window) @actor_window.select_for_item(item) elsif item.act_identify show_sub_window(@identify_window) @identify_window.set_identify_item(item) else use_item activate_item_window end end #-------------------------------------------------------------------------- # ● アイテムの使用 #-------------------------------------------------------------------------- def use_identify play_se_for_item user.use_item(@identify_window.get_identify_item) item_i = @identify_window.item.identify @result_window.contents.clear @result_window.show.draw_item_name(item_i, 0, 0) check_common_event check_gameover @identify_window.activate.cursor_fix = true @item_window.refresh end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● 鑑定画面への切り替え #-------------------------------------------------------------------------- def call_identify SceneManager.call(Scene_Identify) end end #============================================================================== # ■ Scene_Identify #============================================================================== class Scene_Identify < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_help_window create_gold_window create_command_window create_dummy_window create_buy_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 end #-------------------------------------------------------------------------- # ● コマンドウィンドウの作成 #-------------------------------------------------------------------------- def create_command_window @command_window = Window_IdentifyCommand.new(@gold_window.x) @command_window.viewport = @viewport @command_window.y = @help_window.height @command_window.set_handler(:identify, method(:command_identify)) @command_window.set_handler(:cancel, method(:return_scene)) @yesno_window = Window_IdentifyCommand.new(244) @yesno_window.x = 150 @yesno_window.y = 200 @yesno_window.z = 200 @yesno_window.hide.deactivate @yesno_window.set_handler(:identify, method(:on_identify_ok)) @yesno_window.set_handler(:cancel, method(:on_identify_cancel)) end #-------------------------------------------------------------------------- # ● ダミーウィンドウの作成 #-------------------------------------------------------------------------- def create_dummy_window wy = @command_window.y + @command_window.height wh = Graphics.height - wy @dummy_window = Window_Base.new(0, wy, Graphics.width, wh) @dummy_window.viewport = @viewport @result_window = Window_Base.new(150, 100, 244, 48) @result_window.z = 200 @result_window.hide end #-------------------------------------------------------------------------- # ● 購入ウィンドウの作成 #-------------------------------------------------------------------------- def create_buy_window wy = @dummy_window.y wh = @dummy_window.height @buy_window = Window_ShopIdentify.new(0, wy, wh) @buy_window.viewport = @viewport @buy_window.help_window = @help_window @buy_window.hide @buy_window.set_handler(:ok, method(:on_item_ok)) @buy_window.set_handler(:cancel, method(:on_item_cancel)) end #-------------------------------------------------------------------------- # ● 購入ウィンドウのアクティブ化 #-------------------------------------------------------------------------- def activate_buy_window @buy_window.money = money @buy_window.show.activate end #-------------------------------------------------------------------------- # ● コマンド[購入する] #-------------------------------------------------------------------------- def command_identify @dummy_window.hide activate_buy_window end #-------------------------------------------------------------------------- # ● アイテム[決定] #-------------------------------------------------------------------------- def on_item_ok @item = @buy_window.item @buy_window.deactivate @yesno_window.show.activate end #-------------------------------------------------------------------------- # ● アイテム[キャンセル] #-------------------------------------------------------------------------- def on_item_cancel @command_window.activate @dummy_window.show @buy_window.hide.deactivate @help_window.clear end #-------------------------------------------------------------------------- # ● 鑑定する[決定] #-------------------------------------------------------------------------- def on_identify_ok if @result_window.visible @result_window.hide @yesno_window.hide @buy_window.refresh activate_buy_window @buy_window.index -= 1 if !@buy_window.item elsif @yesno_window.index.zero? do_identify else on_identify_cancel end end #-------------------------------------------------------------------------- # ● 鑑定する[キャンセル] #-------------------------------------------------------------------------- def on_identify_cancel @buy_window.activate @yesno_window.hide end #-------------------------------------------------------------------------- # ● 鑑定の実行 #-------------------------------------------------------------------------- def do_identify Sound.play_shop @item = @buy_window.item if !@item item = @item.identify $game_party.lose_gold(buying_price) @gold_window.refresh @result_window.contents.clear @result_window.show.draw_item_name(item, 0, 0) @yesno_window.activate end #-------------------------------------------------------------------------- # ● 所持金の取得 #-------------------------------------------------------------------------- def money; @gold_window.value; end #-------------------------------------------------------------------------- # ● 通貨単位の取得 #-------------------------------------------------------------------------- def currency_unit; @gold_window.currency_unit; end #-------------------------------------------------------------------------- # ● 買値の取得 #-------------------------------------------------------------------------- def buying_price; eval(FAI_IdentifyItem::DEF_PRICE_IDENTIFY); end end