#============================================================================== # ■装備品合成システム for RGSS3 Ver2.01-β5 # □作成者 kure # # 呼び出し方法  SceneManager.call(Scene_Convert_Equip) # #=============================================================================== #-------------------------------------------------------------------------- # ★ 設定項目(各設定の値を変更してください) #-------------------------------------------------------------------------- module KURE module Convert_Equip #初期設定(変更しない事)----------------------------------------------------- VIEW_LIST = [] #表示に関する項目----------------------------------------------------------- #スロットタイプの1ページ表示項目数(装備+アイテム項目合計数) VIEW_1PAGE_ITEM = 6 #装備用項目設定---------------------------------------------------------- #スロットタイプの表示名設定 #SLOT_TYPE_NAME_LIST = [タイプ0,タイプ1,タイプ2,…] SLOT_TYPE_NAME_LIST = ["武器","防具","装身具"] #表示するスロットタイプリストを保存している変数(設定しない場合は0) VIEW_SLOT_LIST_NUM = 0 #表示するリスト(VIEW_LIST[0]はVIEW_SLOT_LIST_NUMが0の時にも呼び出されます) VIEW_LIST[0] = [0,1,2] #アイテム項目用設定------------------------------------------------------- #アイテムの表示名設定 ITEM_NAME = "アイテム" #アイテムを表示するか(0=OFF 1=ON) VIEW_ITEM = 1 #動作設定------------------------------------------------------------------- #制限要素(指定しない場合は設定値を0にすること) #強化値継承ブロックスイッチ(指定NoのスイッチがONであれば強化値を継承しない) BLOCK_CUSTOM_NUM = 0 #接頭語継承ブロックスイッチ(指定NoのスイッチがONであれば強化値を継承しない) BLOCK_NAME_VALUE = 0 #シンボル継承ブロックスイッチ(指定NoのスイッチがONであれば強化値を継承しない) BLOCK_SYMBOL = 0 #エクストラシンボル重複ブロック(0=OFF、1=ON) BLOCK_MULTI_EXTRA = 1 #合成費用------------------------------------------------------------------- #合成費用算出方式 # 0=費用無し, 1=固定額, 2=副のアイテムの値段依存, 3=主のアイテムの値段依存 # 4=主と副のアイテムの値段依存 PRICE_MODE = 1 #合成費用(PRICE_MODE=1の時は固定額の値、PRICE_MODE=2,3,4の時は割合(%)を指定) CONVERT_PRICE = 20000 end end #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ◆ エンチャントできる装備タイプの定義(追加定義) #-------------------------------------------------------------------------- def enchant_type return [] unless @note cheak_note = @note read_arr = Array.new while cheak_note do cheak_note.match(/<エンチャント対象タイプ\s?(\d+)\s?>/) read_arr.push($1.to_i) if $1 cheak_note = $' end return read_arr end end #============================================================================== # ■ Scene_Convert_Equip #============================================================================== class Scene_Convert_Equip < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super $game_party.refresh_equip_name_list_both create_help_window create_equip_type_window create_convert_window create_equip_list_window create_info_window set_window_task end #-------------------------------------------------------------------------- # ● ヘルプウィンドウの作成 #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new(1) @help_window.set_text("ベースとなるアイテムのカテゴリを選択してください") @help_window.viewport = @viewport end #-------------------------------------------------------------------------- # ● 合成表示ウィンドウの作成 #-------------------------------------------------------------------------- def create_convert_window @convert_window = Window_k_Convert_Equip_Convert.new(0, Graphics.height - 72, 260) end #-------------------------------------------------------------------------- # ● 装備タイプ選択ウィンドウの作成 #-------------------------------------------------------------------------- def create_equip_type_window @equip_type_window = Window_k_Convert_Equip_Type_Command.new(0, @help_window.height) @equip_type_window.viewport = @viewport #呼び出しのハンドラをセット @equip_type_window.set_handler(:cancel,method(:on_equip_type_cancel)) @equip_type_window.set_handler(:ok,method(:select_equip_type)) end #-------------------------------------------------------------------------- # ● 装備リストウィンドウの作成 #-------------------------------------------------------------------------- def create_equip_list_window wy = @help_window.height + @equip_type_window.height @equip_list_window = Window_k_Convert_Equip_EquipList_Command.new(0, wy) @equip_list_window.height = Graphics.height - wy - @convert_window.height @equip_list_window.deactivate @equip_list_window.unselect @equip_list_window.viewport = @viewport #呼び出しのハンドラをセット @equip_list_window.set_handler(:ok,method(:equip_list_command)) @equip_list_window.set_handler(:cancel,method(:on_equip_list_cancel)) end #-------------------------------------------------------------------------- # ● インフォメーションウィンドウの作成 #-------------------------------------------------------------------------- def create_info_window wx = @equip_list_window.width wy = @help_window.height + @equip_type_window.height ww = Graphics.width - wx wh = Graphics.height - wy @info_window = Window_k_Convert_Equip_Info.new(wx,wy,ww,wh) end #-------------------------------------------------------------------------- # ● ウィンドウのセッティング処理 #-------------------------------------------------------------------------- def set_window_task @equip_type_window.equip_list_window = @equip_list_window @equip_type_window.activate @equip_type_window.select(0) @equip_list_window.info_window = @info_window @info_window.equip_list_window = @equip_list_window @info_window.convert_window = @convert_window @id = nil @main_equip_type_keep = 0 end #-------------------------------------------------------------------------- # ● 装備タイプ選択ウィンドウ[決定] #-------------------------------------------------------------------------- def select_equip_type case @equip_list_window.process when 5 @main_equip_type_keep = @equip_type_window.current_ext list_window_set_focus @help_window.set_text("ベースとなるアイテムを選択してください") when 6 list_window_set_focus @help_window.set_text("合成させるアイテムを選択してください") end end #-------------------------------------------------------------------------- # ● 装備タイプ選択ウィンドウ[キャンセル] #-------------------------------------------------------------------------- def on_equip_type_cancel case @equip_list_window.process when 5 return_scene when 6 @convert_window.main = nil @equip_list_window.main_selecter = nil @equip_list_window.process = 0 @equip_list_window.equip_type = @main_equip_type_keep list_window_set_focus @help_window.set_text("ベースとなるアイテムを選択してください") end end #-------------------------------------------------------------------------- # ● 装備選択ウィンドウ[決定] #-------------------------------------------------------------------------- def equip_list_command case @equip_list_window.process #選択肢状態で処理を変更 when 5 @equip_list_window.main_view = @equip_list_window.selecter.id @equip_list_window.process = 0 list_window_set_focus when 6 if @equip_list_window.equip_type == -1 && @equip_list_window.selecter.need_succeed_process? == false @convert_window.sub = @equip_list_window.selecter call_convert else if @equip_list_window.equip_type == -1 call_succeed else @equip_list_window.sub_view = @equip_list_window.selecter.id @equip_list_window.process = 1 list_window_set_focus end end when 0 @convert_window.main = @equip_list_window.selecter @equip_list_window.main_selecter = @convert_window.main @equip_list_window.process = 6 type_window_set_focus @help_window.set_text("合成させるアイテムのカテゴリを選択してください") when 1 call_succeed when 2 case @equip_list_window.current_ext[2] #確定 when 0 call_convert #接頭語 when 1 @id = @equip_list_window.current_ext[1] @equip_list_window.process = 3 list_window_set_focus @help_window.set_text("継承するアビリティを選択してください。") #シンボル when 2 @id = @equip_list_window.current_ext[1] @equip_list_window.process = 4 list_window_set_focus @help_window.set_text("継承するエッセンスを選択してください。") end when 3,4 @equip_list_window.set_n_s_obj(@id) @equip_list_window.process = 2 list_window_set_focus @equip_list_window.select(@id) @help_window.set_text("継承するオブジェクトを選択してください。") end end #-------------------------------------------------------------------------- # ● 装備選択ウィンドウ[キャンセル] #-------------------------------------------------------------------------- def on_equip_list_cancel case @equip_list_window.process #選択肢状態で処理を変更 when 0 @equip_list_window.process = 5 list_window_set_focus when 1 @equip_list_window.process = 6 list_window_set_focus when 2 @equip_list_window.process = 1 @convert_window.sub = nil @equip_list_window.sub_selecter = nil @info_window.item = nil list_window_set_focus @help_window.set_text("合成させるアイテムを選択してください") when 3,4 @id = nil @equip_list_window.process = 2 list_window_set_focus @help_window.set_text("継承するオブジェクトを選択してください。") when 5 @info_window.item = nil type_window_set_focus @help_window.set_text("ベースとなるアイテムのカテゴリ選択してください") when 6 type_window_set_focus @help_window.set_text("合成させるアイテムのカテゴリを選択してください") end end #-------------------------------------------------------------------------- # ● 装備リスト→装備タイプ #-------------------------------------------------------------------------- def type_window_set_focus refresh_window @equip_list_window.deactivate @equip_list_window.unselect @equip_type_window.activate @equip_type_window.select(0) end #-------------------------------------------------------------------------- # ● 装備タイプ→装備リスト #-------------------------------------------------------------------------- def list_window_set_focus refresh_window @equip_type_window.deactivate @equip_type_window.unselect @equip_list_window.activate @equip_list_window.select(0) end #-------------------------------------------------------------------------- # ● 継承画面呼び出し #-------------------------------------------------------------------------- def call_succeed if blocked?(1) && blocked?(2) @convert_window.sub = @equip_list_window.selecter call_convert else @convert_window.sub = @equip_list_window.selecter @equip_list_window.sub_selecter = @equip_list_window.selecter @equip_list_window.process = 2 @equip_list_window.symbol_keeper = [] @equip_list_window.make_master_list list_window_set_focus @help_window.set_text("継承するオブジェクトを選択してください。") end end #-------------------------------------------------------------------------- # ● 合成呼び出し #-------------------------------------------------------------------------- def call_convert @equip_list_window.process = 5 convert @equip_list_window.select(0) type_window_set_focus @help_window.set_text("ベースとなるアイテムのカテゴリを選択してください") end #-------------------------------------------------------------------------- # ● ウィンドウ更新 #-------------------------------------------------------------------------- def refresh_window @equip_list_window.refresh @info_window.refresh @equip_type_window.refresh end #-------------------------------------------------------------------------- # ● ブロックされているか判定する(0=強化値,1=接頭語,2=シンボル) #-------------------------------------------------------------------------- def blocked?(id) case id when 0 if KURE::Convert_Equip::BLOCK_CUSTOM_NUM != 0 return true if $game_switches[KURE::Convert_Equip::BLOCK_CUSTOM_NUM] end when 1 if KURE::Convert_Equip::BLOCK_NAME_VALUE != 0 return true if $game_switches[KURE::Convert_Equip::BLOCK_NAME_VALUE] end when 2 if KURE::Convert_Equip::BLOCK_SYMBOL != 0 return true if $game_switches[KURE::Convert_Equip::BLOCK_SYMBOL] end end return false end #-------------------------------------------------------------------------- # ● 合成処理 #-------------------------------------------------------------------------- def convert $game_switches[79] = true main = @convert_window.main sub = @convert_window.sub price = 0 #合成費用を計算し消費する case KURE::Convert_Equip::PRICE_MODE when 1 price = KURE::Convert_Equip::CONVERT_PRICE when 2 price = ((sub.price * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i when 3 price = ((main.price * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i when 4 total = main.price + sub.price price = ((total * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i end $game_party.lose_gold(price) #コンテナ設定 container = $game_party.item_container(main.class) master_container = $game_party.item_master_container(main.class) item_id = $game_party.turn_item_id(main.id) #継承データを作成 succeed_data = [0,main.drain_data[1],main.drain_data[2],0,0,0] #装備品であればサブより継承データを受け継ぐ if sub.is_a?(RPG::EquipItem) succeed_data[0] = sub.drain_data[0] succeed_data[3] = sub.drain_data[3] succeed_data[4] = sub.drain_data[4] succeed_data[5] = sub.drain_data[5] end #通常アイテムであれば追加強化値、スロット数、耐久値を引き継ぐ if sub.is_a?(RPG::Item) succeed_data[0] = sub.add_customize succeed_data[3] = sub.add_slot_num succeed_data[4] = sub.first_durable succeed_data[5] = sub.add_symbol_num end #接頭語、シンボルの継承データがある場合は引き継ぐ if sub.is_a?(RPG::EquipItem) or sub.need_succeed_process? succeed_data[1] = @equip_list_window.selected_name_value unless blocked?(1) succeed_data[2] = @equip_list_window.selected_symbol unless blocked?(2) end #ブロック要素に応じてデータを初期化する succeed_data[0] = 0 if blocked?(0) succeed_data[1] = main.drain_data[1] if blocked?(1) succeed_data[2] = main.drain_data[2] if blocked?(2) #メインへデータを継承 main.succeed_data(succeed_data) #所持品データ更新 refresh_id = $game_party.set_delete(item_id,main) if refresh_id master_container[main.identify_id] = Marshal.load(Marshal.dump(main)) container[item_id][refresh_id] = Marshal.load(Marshal.dump(main)) end $game_party.lose_item(sub, 1, true) #画面データ削除 @convert_window.main = nil @convert_window.sub = nil @equip_list_window.main_selecter = nil @equip_list_window.sub_selecter = nil @equip_list_window.symbol_keeper = [] @info_window.item = nil #所持品データ更新 $game_party.refresh_equip_name_list_both #ウィンドウ更新 refresh_window end end #============================================================================== # ■ Window_k_Convert_Equip_Type_Command #============================================================================== class Window_k_Convert_Equip_Type_Command < Window_HorzCommand attr_accessor :equip_list_window #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width Graphics.width end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max return KURE::Convert_Equip::VIEW_1PAGE_ITEM end #-------------------------------------------------------------------------- # ● カーソル位置の設定 #-------------------------------------------------------------------------- def index=(index) @index = index update_cursor call_update_help return if index < 0 @equip_list_window.equip_type = current_ext if @equip_list_window end #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list if KURE::Convert_Equip::VIEW_SLOT_LIST_NUM == 0 use_list = 0 else use_list = $game_variables[KURE::Convert_Equip::VIEW_SLOT_LIST_NUM] use_list = 0 unless KURE::Convert_Equip::VIEW_LIST[use_list] end for i in 0..KURE::Convert_Equip::VIEW_LIST[use_list].size - 1 add_command(KURE::Convert_Equip::SLOT_TYPE_NAME_LIST[KURE::Convert_Equip::VIEW_LIST[use_list][i]], :ok, true, KURE::Convert_Equip::VIEW_LIST[use_list][i]) end if @equip_list_window && @equip_list_window.process == 6 if KURE::Convert_Equip::VIEW_ITEM == 1 add_command(KURE::Convert_Equip::ITEM_NAME, :ok, true, -1) end end end end #============================================================================== # ■ Window_k_Convert_Equip_EquipList_Command #============================================================================== class Window_k_Convert_Equip_EquipList_Command < Window_Command attr_accessor :process attr_accessor :equip_type attr_accessor :selecter attr_accessor :sub_selecter attr_accessor :main_selecter attr_accessor :info_window attr_accessor :symbol_keeper attr_accessor :master_name_keeper attr_accessor :master_symbol_keeper attr_accessor :main_view attr_accessor :sub_view #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y) @equip_type = 0 @process = 5 @selecter = nil @main_selecter = nil @sub_selecter = nil @symbol_keeper = [] @master_name_keeper = [] @master_symbol_keeper = [] @main_view = 0 @sub_view = 0 super(x,y) end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width return 260 end #-------------------------------------------------------------------------- # ◎ 装備タイプの設定 #-------------------------------------------------------------------------- def equip_type=(equip_type) return if @equip_type == equip_type @equip_type = equip_type refresh end #-------------------------------------------------------------------------- # ◎ 装備タイプの設定 #-------------------------------------------------------------------------- def process=(process) return if @process == process @process = process @info_window.item = nil if @info_window refresh end #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_commands end #-------------------------------------------------------------------------- # ● →キー入力時動作 #-------------------------------------------------------------------------- def cursor_right(wrap = false) case @info_window.draw_index when 0 @info_window.draw_index = 1 when 1 @info_window.draw_index = 0 end end #-------------------------------------------------------------------------- # ● ←キー入力時操作 #-------------------------------------------------------------------------- def cursor_left(wrap = false) case @info_window.draw_index when 0 @info_window.draw_index = 1 when 1 @info_window.draw_index = 0 end end #-------------------------------------------------------------------------- # ● カーソル位置の設定 #-------------------------------------------------------------------------- def index=(index) @index = index update_cursor call_update_help if @info_window case @process when 0,1,2,3,4,6 @info_window.item = current_ext if index > -1 end @info_window.item = nil if index < 0 end return if index < 0 @selecter = current_ext end #-------------------------------------------------------------------------- # ● 項目を描画する矩形の取得(テキスト用) #-------------------------------------------------------------------------- def item_rect_for_text(index) rect = item_rect(index) rect.x += 28 rect.x += 22 if @process == 2 rect.width -= 32 rect.width -= 22 if @process == 2 rect end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) case @process when 0,1 change_color(normal_color, command_enabled?(index)) draw_icon(@icon_list[index], 0, item_rect_for_text(index).y) draw_text(item_rect_for_text(index), command_name(index), alignment) if @equip_type == -1 draw_text(item_rect_for_text(index), sprintf(":%2d", $game_party.item_number(@list[index][:ext])), 2) end when 2 main_rect = item_rect_for_text(index) rect = item_rect(index) rect.width = 50 case @list[index][:ext][2] when 1 change_color(system_color) draw_text(rect, "追加アビリティ:", 2) when 2 change_color(system_color) draw_text(rect, "印:", 2) draw_icon(KURE::SortOut::SYMBOL[@list[index][:ext][0][1]][2], 45, item_rect_for_text(index).y) if @list[index][:ext][0] main_rect.x += 20 main_rect.width -= 20 end change_color(normal_color, command_enabled?(index)) draw_text(main_rect, command_name(index), alignment) when 3 change_color(normal_color, command_enabled?(index)) #draw_icon(@icon_list[index], 0, item_rect_for_text(index).y) draw_text(item_rect_for_text(index), command_name(index), alignment) when 4 change_color(normal_color, command_enabled?(index)) draw_icon(KURE::SortOut::SYMBOL[@list[index][:ext][1]][2], 0, item_rect_for_text(index).y) if @list[index][:ext] draw_text(item_rect_for_text(index), command_name(index), alignment) when 5,6 change_color(normal_color, command_enabled?(index)) draw_icon(@icon_list[index], 0, item_rect_for_text(index).y) draw_text(item_rect_for_text(index), command_name(index), alignment) draw_text(item_rect_for_text(index), sprintf(":%2d", $game_party.item_number(@list[index][:ext])), 2) end end #-------------------------------------------------------------------------- # ● 指定アイテムがメンバーの装備品に含まれているかを判定 #-------------------------------------------------------------------------- def members_equip_include?(item) all_actor = $data_actors.compact.collect {|obj| $game_actors[obj.id] } return true if all_actor.any? {|actor| actor.equips.include?(item) } return false end #-------------------------------------------------------------------------- # ● 合成ベースかを判定 #-------------------------------------------------------------------------- def main_selecter_obj?(item) return true if @main_selecter == item return false end #-------------------------------------------------------------------------- # ● シンボルオブジェクトをリストに追加 #-------------------------------------------------------------------------- def set_n_s_obj(id) new = Marshal.load(Marshal.dump(@list[index][:ext])) old = Marshal.load(Marshal.dump(@symbol_keeper[id])) @symbol_keeper[id] = new case @process when 3 @master_name_keeper[index] = old @master_name_keeper.compact! when 4 @master_symbol_keeper.push[index] = old @master_symbol_keeper.compact! end end #-------------------------------------------------------------------------- # ● 選択した接頭語オブジェクトを返す #-------------------------------------------------------------------------- def selected_name_value num_keeper0 = @main_selecter.name_value_number return [] if num_keeper0 == 0 return @symbol_keeper.slice(0..num_keeper0 - 1).compact end #-------------------------------------------------------------------------- # ● 選択したシンボルオブジェクトを返す #-------------------------------------------------------------------------- def selected_symbol num_keeper0 = @main_selecter.name_value_number return @symbol_keeper.slice(num_keeper0..@symbol_keeper.size - 1).compact end #-------------------------------------------------------------------------- # ● マスターオブジェクトを作成 #-------------------------------------------------------------------------- def make_master_list type = @main_selecter.etype_id #装備品 if @sub_selecter.is_a?(RPG::EquipItem) @master_name_keeper = @main_selecter.name_value + @sub_selecter.name_value @master_symbol_keeper = @main_selecter.symbol_list + @sub_selecter.symbol_list end #アイテム if @sub_selecter.is_a?(RPG::Item) @master_name_keeper = @main_selecter.name_value + @sub_selecter.first_name_value @master_symbol_keeper = @main_selecter.symbol_list + @sub_selecter.first_symbol_list @master_symbol_keeper += @main_selecter.first_symbol_list if @sub_selecter.restore_symbol? end #エスクトラシンボルデータの判定 symbol_id_list = Array.new extra_cheaker = @master_symbol_keeper.collect{|obj| obj[1]} extra_cheaker.each do |id| symbol_id_list[id] = 0 unless symbol_id_list[id] symbol_id_list[id] += 1 end push_list = Array.new master = KURE::SortOut::EXTRA_SYMBOL master.each do |list| flag = 0 #エクストラシンボルチェッカー判定 if list for block in 1..list.size - 1 if list[block] && list[block][0] && list[block][1] if symbol_id_list[list[block][0]] flag = 1 if symbol_id_list[list[block][0]] < list[block][1] else flag = 1 end end end end #チェッカーを通過すれば出力する if flag == 0 id = list[0] push_list[id] = 0 unless push_list[id] symbol_id_list[id] = 0 unless symbol_id_list[id] #重複チェック if KURE::Convert_Equip::BLOCK_MULTI_EXTRA == 1 push_list[id] += 1 if symbol_id_list[id] == 0 else push_list[id] += 1 end end end #判定を元にシンボル個数を決定 all_list = Array.new cheak_ids = [symbol_id_list.size - 1,push_list.size - 1].max for ids in 0..cheak_ids if KURE::SortOut::SYMBOL[ids] symbol_id_list[ids] ||= 0 push_list[ids] ||= 0 all_list[ids] = [symbol_id_list[ids] + push_list[ids],KURE::SortOut::SYMBOL[ids][3]].min #継承制限があれば0個に if KURE::SortOut::SYMBOL[ids][4] && KURE::SortOut::SYMBOL[ids][4] != [] all_list[ids] = 0 unless KURE::SortOut::SYMBOL[ids][4].include?(type) end end end #判定シンボルを出力 master_list = Array.new for id in 0..all_list.size - 1 if all_list[id] != 0 && KURE::SortOut::SYMBOL[id] case KURE::SortOut::SYMBOL[id][0] when "W" all_list[id].times{master_list.push([$data_weapons[KURE::SortOut::SYMBOL[id][1]],id])} when "A" all_list[id].times{master_list.push([$data_armors[KURE::SortOut::SYMBOL[id][1]],id])} when "J" all_list[id].times{master_list.push([$data_classes[KURE::SortOut::SYMBOL[id][1]],id])} when "S" all_list[id].times{master_list.push([$data_states[KURE::SortOut::SYMBOL[id][1]],id])} end end end @master_symbol_keeper = Marshal.load(Marshal.dump(master_list)) end #-------------------------------------------------------------------------- # ● アイテムをリストに追加 #-------------------------------------------------------------------------- def add_commands case @process when 0,1,5,6 add_equip_obj_commands when 2 add_n_s_slot_obj_commands when 3 add_name_obj_commands when 4 add_symbol_obj_commands end end #-------------------------------------------------------------------------- # ● 合成可能か #-------------------------------------------------------------------------- def can_convert?(item) case @process when 0,5 return false unless item.convert_item_main? when 1,6 return false unless item.convert_item_sub? end return have_price?(item) end #-------------------------------------------------------------------------- # ● 合成対象なのか #-------------------------------------------------------------------------- def type_convert?(item) return true unless @main_selecter return true if item.enchant_type == [] return true if item.enchant_type.include?(@main_selecter.etype_id) return false end #-------------------------------------------------------------------------- # ● 合成費用があるか #-------------------------------------------------------------------------- def have_price?(item) return true if item.is_a?(RPG::EquipItem) && @process != 1 return true if item.is_a?(RPG::Item) && @process != 6 case KURE::Convert_Equip::PRICE_MODE when 0 price = 0 when 1 price = KURE::Convert_Equip::CONVERT_PRICE when 2 price = ((item.price * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i when 3 price = ((@main_selecter.price * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i when 4 total = item.price + @main_selecter.price price = ((total * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i end return true if $game_party.gold >= price return false end #-------------------------------------------------------------------------- # ● 装備品オブジェクトをリストに追加 #-------------------------------------------------------------------------- def add_equip_obj_commands case @process when 0 master_w_list = $game_party.weapons_block(@main_view) master_a_list = $game_party.armors_block(@main_view) when 1 master_w_list = $game_party.weapons_block(@sub_view) master_a_list = $game_party.armors_block(@sub_view) when 5,6 master_w_list = $game_party.weapons_name_list master_a_list = $game_party.armors_name_list end #装備品 if @equip_type != -1 equip_list = master_w_list + master_a_list @icon_list = Array.new for item in 0..equip_list.size - 1 if equip_list[item] && main_selecter_obj?(equip_list[item]) == false if equip_list[item].etype_id == @equip_type add_command(equip_list[item].name, :ok, can_convert?(equip_list[item]), equip_list[item]) @icon_list.push(equip_list[item].icon_index) end end end #アイテム else items = $game_party.items @icon_list = Array.new for item in 0..items.size - 1 if items[item].enchant_item? && type_convert?(items[item]) add_command(items[item].name, :ok, can_convert?(items[item]), items[item]) @icon_list.push(items[item].icon_index) end end end end #-------------------------------------------------------------------------- # ● 継承スロットをリストに追加 #-------------------------------------------------------------------------- def add_n_s_slot_obj_commands return unless @main_selecter return unless @sub_selecter #接頭語、シンボル合計数を取得 num_keeper0 = @main_selecter.max_name_value_number num_keeper1 = @main_selecter.max_symbol_number type = 0 num = num_keeper0 + num_keeper1 #接頭語、シンボルのデータを作成 for n_s_data in 0..num - 1 type = 2 type = 1 if n_s_data < num_keeper0 if @symbol_keeper[n_s_data] add_command(@symbol_keeper[n_s_data][0].name, :ok, true, [@symbol_keeper[n_s_data],n_s_data,type]) else @symbol_keeper[n_s_data] = nil add_command("", :ok, true, [nil,n_s_data,type]) end end add_command("  確定", :ok, true,[nil,-1,0]) end #-------------------------------------------------------------------------- # ● 接頭語オブジェクトをリストに追加 #-------------------------------------------------------------------------- def add_name_obj_commands return unless @main_selecter return unless @sub_selecter #接頭語オブジェクト取得 name_v_obj = @master_name_keeper.compact name_v_obj.each do |obj| add_command(obj[0].name, :ok, true, obj) if obj end add_command("  解除", :ok, true,nil) end #-------------------------------------------------------------------------- # ● シンボルオブジェクトをリストに追加 #-------------------------------------------------------------------------- def add_symbol_obj_commands return unless @main_selecter return unless @sub_selecter #シンボルオブジェクトを取得 symbol_obj = @master_symbol_keeper.compact symbol_obj.each do |obj| add_command(obj[0].name, :ok, true, obj) if obj end add_command("  解除", :ok, true,nil) end end #============================================================================== # ■ Window_k_Convert_Equip_Convert #============================================================================== class Window_k_Convert_Equip_Convert < Window_Base attr_accessor :main attr_accessor :sub #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width) super(x, y, width, fitting_height(2)) @main = nil @sub = nil refresh end #-------------------------------------------------------------------------- # ◎ メインの設定 #-------------------------------------------------------------------------- def main=(main) return if @main == main @main = main refresh end #-------------------------------------------------------------------------- # ◎ サブの設定 #-------------------------------------------------------------------------- def sub=(sub) return if @sub == sub @sub = sub refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear draw_text(5, 0, 30, line_height,"主:") draw_text(35, 0, width - 35, line_height,@main.name) if @main draw_text(5, line_height, 30, line_height,"副:") draw_text(35, line_height, width - 35, line_height,@sub.name) if @sub end end #============================================================================== # ■ Window_k_Convert_Equip_Info #============================================================================== class Window_k_Convert_Equip_Info < Window_Base attr_accessor :item attr_accessor :equip_list_window attr_accessor :convert_window attr_accessor :draw_index #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @item = nil @equip_list_window = nil @draw_index = 0 refresh end #-------------------------------------------------------------------------- # ◎ アイテムの設定 #-------------------------------------------------------------------------- def item=(item) return if @item == item @item = item refresh end #-------------------------------------------------------------------------- # ◎ ページの設定 #-------------------------------------------------------------------------- def draw_index=(draw_index) return if @draw_index == draw_index @draw_index = draw_index refresh end #-------------------------------------------------------------------------- # ● 描画 #-------------------------------------------------------------------------- def refresh contents.clear return unless @item return unless @equip_list_window case @equip_list_window.process when 0,1 title_gauge_drawing(0,0,"エッセンス情報") #シンボルのリストを取得 all_symbol = @item.symbol_list for i in 0..all_symbol.size - 1 draw_icon(KURE::SortOut::SYMBOL[all_symbol[i][1]][2], 0,contents.font.size * (i + 1)) draw_text(25,contents.font.size * (i + 1),200,contents.font.size,all_symbol[i][0].name) end #合成費用を描画 if @equip_list_window.process == 1 && KURE::Convert_Equip::PRICE_MODE != 0 covert_price_drawing(10,contents_height - contents.font.size,@item) end when 2 return unless @item[0] case @item[2] when 1 title_gauge_drawing(0,0,"追加アビリティ情報") item_info_drawing(@item[0][0]) when 2 title_gauge_drawing(0,0,"エッセンス情報") draw_icon(KURE::SortOut::SYMBOL[@item[0][1]][2], 0,contents.font.size * 1) item_info_drawing(@item[0][0]) end when 3 title_gauge_drawing(0,0,"追加アビリティ情報") item_info_drawing(@item[0]) when 4 title_gauge_drawing(0,0,"エッセンス情報") draw_icon(KURE::SortOut::SYMBOL[@item[1]][2], 0,contents.font.size * 1) item_info_drawing(@item[0]) when 6 #合成費用を描画 return if @equip_list_window.equip_type != -1 title_gauge_drawing(0,0,"エッセンス情報") #シンボルのリストを取得 all_symbol = @item.first_symbol_list for i in 0..all_symbol.size - 1 draw_icon(KURE::SortOut::SYMBOL[all_symbol[i][1]][2], 0,contents.font.size * (i + 1)) draw_text(25,contents.font.size * (i + 1),200,contents.font.size,all_symbol[i][0].name) end draw_counter = all_symbol.size title_gauge_drawing(0,contents.font.size * (draw_counter + 1),"エンチャント情報") draw_counter += 1 if @item.restore_symbol? draw_text(25,contents.font.size * (draw_counter + 1),200,contents.font.size,"初期エッセンス復元") draw_counter += 1 end if @item.add_customize != 0 draw_text(25,contents.font.size * (draw_counter + 1),200,contents.font.size,"追加修正値 " + @item.add_customize.to_s) draw_counter += 1 end if @item.add_symbol_num != 0 draw_text(25,contents.font.size * (draw_counter + 1),200,contents.font.size,"追加エッセンス数 " + @item.add_symbol_num.to_s) draw_counter += 1 end if @item.add_slot_num != 0 draw_text(25,contents.font.size * (draw_counter + 1),200,contents.font.size,"追加スロット数 " + @item.add_slot_num.to_s) draw_counter += 1 end if KURE::Convert_Equip::PRICE_MODE != 0 covert_price_drawing(10,contents_height - contents.font.size,@item) end end contents.font.size = 20 end #-------------------------------------------------------------------------- # ● バーを描画 #-------------------------------------------------------------------------- def title_gauge_drawing(x,y,txt) draw_gauge(x, y, contents.width, 1, mp_gauge_color2,crisis_color) change_color(normal_color) draw_text(x, y, 200, contents.font.size, txt) end #-------------------------------------------------------------------------- # ● 合成アイテム情報描画 #-------------------------------------------------------------------------- def item_info_drawing(item) draw_text(25,contents.font.size * 1,200,contents.font.size,item.name) contents.font.size = 20 case @draw_index when 0 add_status_drawing(25,10 + contents.font.size * 2, item) when 1 draw_features(0,10 + contents.font.size * 2, item) end end #-------------------------------------------------------------------------- # ● 増加ステータス描画 #-------------------------------------------------------------------------- def add_status_drawing(x,y,item) #ステータス名描画 change_color(system_color) for param in 0..7 case param when 0,2,4,6 draw_text(0, y + contents.font.size * (param / 2), 80, contents.font.size, Vocab::param(param)) when 1,3,5,7 draw_text(contents.width / 2, y + contents.font.size * ((param - 1) / 2), 80, contents.font.size, Vocab::param(param)) end end #ステータス描画 status = [0,0,0,0,0,0,0,0] if item.is_a?(RPG::EquipItem) status = item.params end for param in 0..7 change_color(normal_color) case param when 0,2,4,6 if status[param] > 0 change_color(power_up_color) draw_text(90, y + contents.font.size * (param / 2), (contents.width / 2) -95, contents.font.size, "+" + status[param].to_s, 2) elsif status[param] == 0 draw_text(90, y + contents.font.size * (param / 2), (contents.width / 2) -95, contents.font.size, status[param], 2) else change_color(power_down_color) draw_text(90, y + contents.font.size * (param / 2), (contents.width / 2) -95, contents.font.size, status[param], 2) end when 1,3,5,7 if status[param] > 0 change_color(power_up_color) draw_text((contents.width / 2) + 90, y + contents.font.size * ((param - 1) / 2), (contents.width / 2) - 95, contents.font.size, "+" + status[param].to_s, 2) elsif status[param] == 0 draw_text((contents.width / 2) + 90, y + contents.font.size * ((param - 1) / 2), (contents.width / 2) - 95, contents.font.size, status[param], 2) else change_color(power_down_color) draw_text((contents.width / 2) + 90, y + contents.font.size * ((param - 1) / 2), (contents.width / 2) - 95, contents.font.size, status[param], 2) end end end end #-------------------------------------------------------------------------- # ◎ 特徴の描画 #-------------------------------------------------------------------------- def draw_features(x,y,item) return unless item #特徴を描画 #change_color(system_color) #draw_text(5, y + contents.font.size, 126, contents.font.size, "特徴") #配列数取得変数を初期化 features_max = 0 #描画用配列を作成 draw_list = call_add_feature_txt(item) #装備品が有れば特徴最大数を取得 features_max = draw_list.size - 1 #実際の描画処理 for list in 0..features_max if features_max < 12 change_color(normal_color) draw_text(x, y + contents.font.size * list , contents.width, contents.font.size, draw_list[list]) else case list when 0..10 change_color(normal_color) draw_text(x, y + contents.font.size * list , contents.width / 2, contents.font.size, draw_list[list]) when 11..22 change_color(normal_color) draw_text(x + contents.width / 2, y + contents.font.size * (list - 11) , contents.width / 2, contents.font.size, draw_list[list]) end end end end #-------------------------------------------------------------------------- # ● 合成費用描画 #-------------------------------------------------------------------------- def covert_price_drawing(x,y,item) change_color(system_color) draw_text(x, y, 100, contents.font.size, "合成費用") change_color(normal_color) case KURE::Convert_Equip::PRICE_MODE when 1 price = KURE::Convert_Equip::CONVERT_PRICE when 2 price = ((item.price * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i when 3 price = ((@convert_window.main.price * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i when 4 total = item.price + @convert_window.main.price price = ((total * KURE::Convert_Equip::CONVERT_PRICE) / 100).to_i end draw_text(120, contents_height - contents.font.size, 200, contents.font.size, price) end end