#============================================================================== # ■装備品個別管理(統合ベース対応) for RGSS3 Ver4.02-β2 # □作成者 kure #=============================================================================== $kure_integrate_script = {} if $kure_integrate_script == nil $kure_integrate_script[:SortOut] = 4012 p "装備品個別管理" #-------------------------------------------------------------------------- # ★ 設定項目(各設定の値を変更してください) #-------------------------------------------------------------------------- module KURE module SortOut #基本設定------------------------------------------------------------------- #ID管理用変数 ID_BASE = 10000 #獲得アイテムログ最大数 MAX_ITEM_LOG = 30 #能力付与に関する項目------------------------------------------------------- #ランダム能力付与の設定--------------------------------------------------- #装備品のランダム能力付与機能(0=OFF、1=ON) USE_RANDOM_PARAM = 0 #ショップ購入アイテムのランダム能力付与(0=OFF 1=ON) #USE_RANDOM_PARAM= 1の時のみ有効 SHOP_RANDOM_PARAM = 0 #接頭語能力付与の設定----------------------------------------------------- #装備品接頭語別能力管理機能(0=OFF 1=ON) USE_NAME_VALUE = 1 #ショップ購入アイテムの接頭語付与(0=OFF 1=ON) #USE_NAME_VALUE = 1の時のみ有効 SHOP_NAME_VALUE = 1 #初期装備アイテムの接頭語付与(0=OFF 1=ON) #USE_NAME_VALUE = 1の時のみ有効 FIRST_EQUIP_NAME_VALUE = 1 #スロット関連の設定------------------------------------------------------- #スロット装備システムの機能使用の設定(0=OFF、1=ON) USE_SLOT_EQUIP = 1 #スロット数の設定の反映方法(0=設定数を反映 1=設定数を上限としてランダム) SLOT_NUM_MODE = 0 #シンボル関連の設定------------------------------------------------------- #シンボル能力付与の機能仕様の設定(0=OFF、1=ON) USE_SYMBOL = 1 #耐久値関連の設定----------------------------------------------------------- #耐久値機能使用の設定(0=OFF、1=ON) USE_DURABLE = 1 #破壊したアイテムの設定(0=以下の設定を適用 1=消滅) BROKEN_SETTING = 0 #BROKEN_SETTING = 0の時の処理設定----------------------------------------- #破損中のアイテムにつく名前 BROKEN_ITEM_NAME = "[壊]" #能力下降設定 #破損時の装備能力発揮率(%指定) BROKEN_PERFORM = 30 #特徴反映設定(0=反映される 1=反映されない) BROKEN_FEATURE = 0 #装備可能設定(0=装備可能 1=装備不可) BROKEN_CAN_EQUIP = 0 #破損中装備の価格設定(0=通常通り 1=2になる) BROKEN_PRICE = 1 end end #メモ欄の取得に関するスクリプト処理群------------------------------------------- module KURE #-------------------------------------------------------------------------- # ☆ 数値配列に畳む(追加定義) #-------------------------------------------------------------------------- def self.arr_num_slice(arr) result_arr = Array.new unless arr == [] and arr.empty? arr.flatten! arr.each{|value| value.scan(/\d+/).each { |num| result_arr.push(num.to_i)}} end return result_arr end end #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ★基本設定の呼び出し #-------------------------------------------------------------------------- def identify_id ; return 0 ;end #固有ID def custom_num ; return 0 ;end #強化値 def symbol_list ; return [] ;end #シンボル def prise ; return 0 ;end #合成費用 #-------------------------------------------------------------------------- # ◆ エンチャントアイテムの取得 #-------------------------------------------------------------------------- def enchant_item? return @note.include?("<エンチャント品>") end #-------------------------------------------------------------------------- # ◆ 合成不可アイテムの取得 #-------------------------------------------------------------------------- def convert_item_main? return !@note.include?("<主合成不可>") end #-------------------------------------------------------------------------- # ◆ 合成不可アイテムの取得 #-------------------------------------------------------------------------- def convert_item_sub? return !@note.include?("<副合成不可>") end #-------------------------------------------------------------------------- # ◆ シンボル復元アイテムの取得 #-------------------------------------------------------------------------- def restore_symbol? return @note.include?("<初期シンボル復元>") end #-------------------------------------------------------------------------- # ◆ 継承処理の必要性を判定 #-------------------------------------------------------------------------- def need_succeed_process? return false if add_name_value_list == [] && succeed_symbol == [] && restore_symbol? == false return true end #-------------------------------------------------------------------------- # ◆ 値段倍率の定義(追加定義) #-------------------------------------------------------------------------- def price_rate @note.match(/<価格補正\s?(\d+)%\s?>/) return $1 ? ($1.to_f / 100) : 1 end #-------------------------------------------------------------------------- # ◆ 追加カスタム数取得 #-------------------------------------------------------------------------- def add_customize @note.match(/<追加強化値\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 追加シンボル数取得 #-------------------------------------------------------------------------- def add_symbol_num @note.match(/<追加シンボル数\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 追加シンボル数取得 #-------------------------------------------------------------------------- def add_slot_num @note.match(/<追加スロット数\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 耐久値の定義(追加定義) #-------------------------------------------------------------------------- def first_durable @note.match(/<耐久値\s?(\d+)\s?>/) return $1 ? $1.to_i : 100 end #-------------------------------------------------------------------------- # ◆ シンボル数の定義(追加定義) #-------------------------------------------------------------------------- def symbol_number @note.match(/<シンボル数\s?(\d+)\s?>/) return $1 ? $1.to_i : 5 end #-------------------------------------------------------------------------- # ◆ スロット数の定義(追加定義) #-------------------------------------------------------------------------- def slot_number @note.match(/<スロット数\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 接頭語数の定義(追加定義) #-------------------------------------------------------------------------- def name_value_number @note.match(/<接頭語数\s?(\d+)\s?>/) return $1 ? $1.to_i : 1 end #-------------------------------------------------------------------------- # ◆ 拡張接頭語数の定義(追加定義) #-------------------------------------------------------------------------- def add_name_value_number @note.match(/<追加最大接頭語数\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 拡張スロット最大数の定義(追加定義) #-------------------------------------------------------------------------- def add_max_slot_number @note.match(/<追加最大スロット数\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 拡張シンボル最大数の定義(追加定義) #-------------------------------------------------------------------------- def add_max_symbol_number @note.match(/<追加最大シンボル数\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 使用する接頭語リストの定義(追加定義) #-------------------------------------------------------------------------- def use_name_value_list @note.match(/<接頭語リスト\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◆ 追加する接頭語の定義(追加定義) #-------------------------------------------------------------------------- def add_name_value_list return [] unless @note cheak_note = @note read_arr = Array.new while cheak_note do cheak_note.match(/<追加接頭語\s?(\d+)\s?,\s?(\d+)\s?>/) read_arr.push([$1.to_i, $2.to_i]) if $1 && $2 cheak_note = $' end return read_arr end #-------------------------------------------------------------------------- # ◇ ランダム能力付与倍率の定義(追加定義) #-------------------------------------------------------------------------- def vest_random_rate cheack_note = @note random_list = [1,1,1,1,1,1,1,1] #メモ欄から配列を作成 cheack_note.match(//) random_list[0] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(//) random_list[1] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(/<攻撃力付与倍率\s?(\d+)%\s?-\s?(\d+)%\s?>/) random_list[2] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(/<防御力付与倍率\s?(\d+)%\s?-\s?(\d+)%\s?>/) random_list[3] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(/<魔法力付与倍率\s?(\d+)%\s?-\s?(\d+)%\s?>/) random_list[4] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(/<魔法防御付与倍率\s?(\d+)%\s?-\s?(\d+)%\s?>/) random_list[5] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(/<敏捷性付与倍率\s?(\d+)%\s?-\s?(\d+)%\s?>/) random_list[6] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 cheack_note.match(/<運付与倍率\s?(\d+)%\s?-\s?(\d+)%\s?>/) random_list[7] = ($1.to_i + rand($2.to_i - $1.to_i)).to_f / 100 if $1 && $2 return random_list end #-------------------------------------------------------------------------- # ◇ 強化補正上限の定義(追加定義) #-------------------------------------------------------------------------- def add_plus_revise_limit save_list = [10,10,10,10,10,10,10,10] return save_list unless @note @note.match(//) save_list[0] = $1.to_i if $1 @note.match(//) save_list[1] = $1.to_i if $1 @note.match(/<攻撃力強化上限\s?(\d+)\s?>/) save_list[2] = $1.to_i if $1 @note.match(/<防御力強化上限\s?(\d+)\s?>/) save_list[3] = $1.to_i if $1 @note.match(/<魔法力強化上限\s?(\d+)\s?>/) save_list[4] = $1.to_i if $1 @note.match(/<魔法防御強化上限\s?(\d+)\s?>/) save_list[5] = $1.to_i if $1 @note.match(/<敏捷性強化上限\s?(\d+)\s?>/) save_list[6] = $1.to_i if $1 @note.match(/<運強化上限\s?(\d+)\s?>/) save_list[7] = $1.to_i if $1 return save_list end #-------------------------------------------------------------------------- # ◇ 強化補正値の定義(追加定義) #-------------------------------------------------------------------------- def add_plus_revise save_list = [0,0,0,0,0,0,0,0] return save_list unless @note @note.match(/<強化全補正\s?(\d+)\s?>/) save_list = [$1.to_i, $1.to_i, $1.to_i, $1.to_i, $1.to_i, $1.to_i, $1.to_i, $1.to_i] if $1 @note.match(/<強化補正HP\s?(\d+)\s?>/) save_list[0] = $1.to_i if $1 @note.match(/<強化補正MP\s?(\d+)\s?>/) save_list[1] = $1.to_i if $1 @note.match(/<強化補正攻撃力\s?(\d+)\s?>/) save_list[2] = $1.to_i if $1 @note.match(/<強化補正防御力\s?(\d+)\s?>/) save_list[3] = $1.to_i if $1 @note.match(/<強化補正魔法力\s?(\d+)\s?>/) save_list[4] = $1.to_i if $1 @note.match(/<強化補正魔法防御\s?(\d+)\s?>/) save_list[5] = $1.to_i if $1 @note.match(/<強化補正敏捷性\s?(\d+)\s?>/) save_list[6] = $1.to_i if $1 @note.match(/<強化補正運\s?(\d+)\s?>/) save_list[7] = $1.to_i if $1 return save_list end #-------------------------------------------------------------------------- # ◆ ランダム強化値付与の定義 #-------------------------------------------------------------------------- def random_customize @note.match(/<初期最大強化値\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ◇ 強化上限の定義(追加定義) #-------------------------------------------------------------------------- def add_plus_limit @note.match(/<強化上限\s?(\d+)\s?>/) return $1 ? $1.to_i : 10 end #-------------------------------------------------------------------------- # ◇ 強化上限の定義(追加定義) #-------------------------------------------------------------------------- def add_plus_limit_convert @note.match(/<合成強化上限\s?(\d+)\s?>/) return $1 ? $1.to_i : 10 end #-------------------------------------------------------------------------- # ◆ 接頭語付与許可の定義(追加定義) #-------------------------------------------------------------------------- def permit_namevalue return !@note.include?("<接頭語付与禁止>") end #-------------------------------------------------------------------------- # ◆ 耐久値減少無効の定義(追加定義) #-------------------------------------------------------------------------- def protect_durable return @note.include?("<耐久値減少無効>") end #-------------------------------------------------------------------------- # ◆ 強化値減少無効の定義(追加定義) #-------------------------------------------------------------------------- def protect_custom return @note.include?("<強化値減少無効>") end #-------------------------------------------------------------------------- # ● スロット対応装備タイプの定義(追加定義) #-------------------------------------------------------------------------- def adopt_slot_type KURE.arr_num_slice(@note.scan(/<スロット対応装備タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)) end #-------------------------------------------------------------------------- # ● 継承シンボルの定義(追加定義) #-------------------------------------------------------------------------- def succeed_symbol KURE.arr_num_slice(@note.scan(/<シンボル\s?(\d+(?:\s?*,\s?*\d+)*)>/)) end #-------------------------------------------------------------------------- # ◆ 初期シンボルの取得(追加定義) #-------------------------------------------------------------------------- def first_symbol_list result = Array.new succeed_symbol.each{|id| next unless KURE::SortOut::SYMBOL[id] case KURE::SortOut::SYMBOL[id][0] when "W" ; result.push([$data_weapons[KURE::SortOut::SYMBOL[id][1]],id]) when "A" ; result.push([$data_armors[KURE::SortOut::SYMBOL[id][1]],id]) when "J" ; result.push([$data_classes[KURE::SortOut::SYMBOL[id][1]],id]) when "S" ; result.push([$data_states[KURE::SortOut::SYMBOL[id][1]],id]) end } return result end #-------------------------------------------------------------------------- # ◆ 追加接頭語のリストの取得(追加定義) #-------------------------------------------------------------------------- def first_name_value result = Array.new #接頭語リストからデータ読み込み出力 add_name_value_list.each do |id| if KURE::SortOut::NAME_VALUE_LIST[id[0]] && KURE::SortOut::NAME_VALUE_LIST[id[0]][id[1]] add_name = KURE::SortOut::NAME_VALUE_LIST[id[0]][id[1]] #ネームバリューを出力 case add_name[0] when "W" ; result.push([$data_weapons[add_name[1]],add_name[3],1]) when "A" ; result.push([$data_armors[add_name[1]],add_name[3],1]) when "J" ; result.push([$data_classes[add_name[1]],add_name[3],2]) when "S" ; result.push([$data_states[add_name[1]],add_name[3],3]) end end end return result end end #============================================================================== # ■ RPG::EquipItem #============================================================================== class RPG::EquipItem < RPG::BaseItem attr_accessor :customize #強化値 attr_accessor :name_value #接頭語オブジェクト attr_accessor :symbol #シンボル attr_accessor :custom_param #強化パラメータ attr_accessor :reinforced_id #能力強化ID attr_accessor :durable_value #耐久値 #-------------------------------------------------------------------------- # ● 同一オブジェクトの作成 #-------------------------------------------------------------------------- def clone same_obj = super return same_obj end #-------------------------------------------------------------------------- # ● 装備品のidを返す #-------------------------------------------------------------------------- def id return identify_id * KURE::SortOut::ID_BASE + @id if identify_id return @id end #-------------------------------------------------------------------------- # ● 装備品データベースのidを返す #-------------------------------------------------------------------------- def database_id return @id end #-------------------------------------------------------------------------- # ● 同一アイテムの判定処理 #-------------------------------------------------------------------------- def ==(obj) return equal?(obj) end #-------------------------------------------------------------------------- # ◆ 取得時初期の処理 #-------------------------------------------------------------------------- def first_setting(first_equip = nil) return if @first_seted common_setting set_name_value unless first_equip set_name_value if KURE::SortOut::FIRST_EQUIP_NAME_VALUE == 1 && first_equip set_first_symbol set_randamize reset_name_random_params @first_seted = true end #-------------------------------------------------------------------------- # ◆ 共通の初期化処理 #-------------------------------------------------------------------------- def common_setting #強化値 @customize = 0 #強化パラーメータ @custom_param = [0,0,0,0,0,0,0,0] #能力付与リスト @reinforced_id = [] @reinforce = [] #ランダムパラメータ @randamize_param = [1,1,1,1,1,1,1,1] #接頭語オブジェクト @name_value = [] @name_value_param = [0,0,0,0,0,0,0,0] @name_value_feature = [] @name_value_note = '' @add_name_value = 0 #シンボル @symbol = [] @symbol_param = [0,0,0,0,0,0,0,0] @symbol_feature = [] @symbol_note = '' @symbol_number = symbol_number @add_symbol = 0 #スロット @slot = [] @slot_param = [0,0,0,0,0,0,0,0] @slot_feature = [] @slot_note = '' @slot_number = slot_number @slot_number = rand(slot_number + 1) if KURE::SortOut::SLOT_NUM_MODE == 1 @add_slot = 0 #耐久値 @durable_value = first_durable #基本設定 @base_note = @note.clone unless @base_note @base_price = @price @view_name = "" @uniq_name = "" end #-------------------------------------------------------------------------- # ◆ ランダムステータス付与 #-------------------------------------------------------------------------- def set_randamize return if KURE::SortOut::SHOP_RANDOM_PARAM == 0 && SceneManager.scene_is?(Scene_Shop) #強化値 if random_customize != 0 @customize = [rand(random_customize + 1), add_plus_limit].min end #ステータス @randamize_param = vest_random_rate.clone if KURE::SortOut::USE_RANDOM_PARAM == 1 end #-------------------------------------------------------------------------- # ◆ データ継承処理 #-------------------------------------------------------------------------- def succeed_data(succeed) #カスタム数(加算継承) @customize = [@customize + succeed[0], add_plus_limit_convert].min #接頭語(上書き継承) @name_value = succeed[1] #シンボル(上書き継承) @symbol = succeed[2] #スロット数(加算継承) succeed[3].times{gain_slot_number} #耐久値(継承未実装) #@durable_value += succeed[4] #シンボル数(加算継承) succeed[5].times{gain_symbol_number} reset_name_random_params end #-------------------------------------------------------------------------- # ◆ データ抽出処理 #-------------------------------------------------------------------------- def drain_data return [@customize, @name_value, @symbol, add_slot_num, @durable_value, add_symbol_num] end #-------------------------------------------------------------------------- # ◆ 接頭語のランダム付与 #-------------------------------------------------------------------------- def set_name_value @name_value ||= [] #接頭語付与の管理 return if KURE::SortOut::USE_NAME_VALUE == 0 #ショップシーンで付与しない設定 return if KURE::SortOut::SHOP_NAME_VALUE == 0 && SceneManager.scene_is?(Scene_Shop) #固有IDが振られていなければ付与しない return unless identify_id #禁止されていれば付与しない return unless permit_namevalue #使用するネームバリューリストの確認 list = use_name_value_list #ネームバリューリストを読み込む use_list = KURE::SortOut::NAME_VALUE_LIST[list] return unless use_list #ネームバリューリストよりリスト決定変数を算出 total_dice = 0 for i in 1..use_list.size - 1 total_dice += use_list[i][2] end #付与するネームバリューを決定する dice = 1 + rand(total_dice) add_value = 1 while dice > 0 do dice -= use_list[add_value][2] add_value += 1 end add_value -= 1 #ネームバリューを付与 cat = 0 case use_list[add_value][0] when "W" cat = 1 @name_value.push([$data_weapons[use_list[add_value][1]],use_list[add_value][3],1]) when "A" cat = 2 @name_value.push([$data_armors[use_list[add_value][1]],use_list[add_value][3],1]) when "J" cat = 3 @name_value.push([$data_classes[use_list[add_value][1]],use_list[add_value][3],2]) when "S" cat = 4 @name_value.push([$data_states[use_list[add_value][1]],use_list[add_value][3],3]) end $game_party.push_name_value_list(list, add_value, cat) #能力更新 reset_name_random_params end #-------------------------------------------------------------------------- # ◆ 接頭語の指定(追加処理) #-------------------------------------------------------------------------- def set_reserved_name_value(value) @name_value = [] @name_value.push(value) #能力更新 reset_name_random_params end #-------------------------------------------------------------------------- # ◆ 接頭語数の取得 #-------------------------------------------------------------------------- def max_name_value_number @add_name_value ||= 0 return name_value_number + @add_name_value end #-------------------------------------------------------------------------- # ◆ 接頭語数の拡張 #-------------------------------------------------------------------------- def gain_name_value_number @add_name_value ||= 0 @add_name_value = [@add_name_value + 1,add_name_value_number].min end #-------------------------------------------------------------------------- # ◆ 接頭語を拡張できるか #-------------------------------------------------------------------------- def gain_name_value? @add_name_value ||= 0 return true if @add_name_value < add_name_value_number return false end #-------------------------------------------------------------------------- # ● 接頭語のリスト指定付与の処理 #-------------------------------------------------------------------------- def add_name_value(list,value) return if @name_value.size >= max_name_value_number && max_name_value_number > 1 @name_value = [] if name_value_number == 1 @name_value ||= [] @name_value_param = [0,0,0,0,0,0,0,0] add_name = KURE::SortOut::NAME_VALUE_LIST[list][value] #ネームバリューを付与 cat = 0 case add_name[0] when "W" cat = 1 @name_value.push([$data_weapons[add_name[1]],add_name[3],1]) when "A" cat = 2 @name_value.push([$data_armors[add_name[1]],add_name[3],1]) when "J" cat = 3 @name_value.push([$data_classes[add_name[1]],add_name[3],2]) when "S" cat = 4 @name_value.push([$data_states[add_name[1]],add_name[3],3]) end #付与済みリスト更新 $game_party.push_name_value_list(list, value, cat) reset_name_random_params end #-------------------------------------------------------------------------- # ● 接頭語の取得 #-------------------------------------------------------------------------- def set_name_value_str return unless @name_value @add_name_before = "" ;@add_name_after = "" @name_value.each do |data| case data[1] when 1 @add_name_before += data[0].name when 2 @add_name_after += data[0].name end end end #-------------------------------------------------------------------------- # ● 接頭語用パラメータの取得 #-------------------------------------------------------------------------- def set_name_value_param @name_value_param = [0,0,0,0,0,0,0,0] @name_value_feature = [] @name_value_note = '' @name_value.each do |data| @name_value_feature += data[0].features @name_value_note += data[0].note if data[2] == 1 for param in 0..7 @name_value_param[param] += data[0].params[param] end end end end #-------------------------------------------------------------------------- # ◆ 指定位置の接頭語消去の処理 #-------------------------------------------------------------------------- def delete_name_value(pos) @name_value[pos] = nil @name_value.compact! reset_name_random_params end #-------------------------------------------------------------------------- # ◆ 全ての接頭語消去の処理 #-------------------------------------------------------------------------- def delete_all_name_value @name_value = [] reset_name_random_params end #-------------------------------------------------------------------------- # ◆ スロットの取得 #-------------------------------------------------------------------------- def slot_list @slot ||= [] return @slot end #-------------------------------------------------------------------------- # ◆ スロット数の取得 #-------------------------------------------------------------------------- def max_slot_number @add_slot ||= 0 return @slot_number + @add_slot end #-------------------------------------------------------------------------- # ◆ スロット数の拡張 #-------------------------------------------------------------------------- def gain_slot_number @add_slot ||= 0 @add_slot = [@add_slot + 1,add_max_slot_number].min end #-------------------------------------------------------------------------- # ◆ スロット拡張できるか #-------------------------------------------------------------------------- def gain_slot? @add_slot ||= 0 return true if @add_slot < add_max_slot_number return false end #-------------------------------------------------------------------------- # ◆ スロットにアイテムを追加する処理 #-------------------------------------------------------------------------- def set_slot_value(slot, item) return if KURE::SortOut::USE_SLOT_EQUIP == 0 @slot ||= [] unless item @slot[slot] = nil reset_name_random_params return end return if slot - 1 >= max_slot_number return if item.identify_id == 0 etype = 2 etype = 1 if item.is_a?(RPG::Weapon) case etype when 1 @slot[slot] = $game_party.set_weapon(item.id) when 2 @slot[slot] = $game_party.set_armor(item.id) end reset_name_random_params end #-------------------------------------------------------------------------- # ● スロット用パラメータの取得 #-------------------------------------------------------------------------- def set_slot_param @slot_param = [0,0,0,0,0,0,0,0] @slot_feature = [] @slot_note = '' @slot.each do |slot| next unless slot @slot_feature += slot.features @slot_note += slot.note for param in 0..7 @slot_param[param] += slot.params[param] end end end #-------------------------------------------------------------------------- # ◆ シンボルの取得 #-------------------------------------------------------------------------- def symbol_list @symbol ||= [] return @symbol end #-------------------------------------------------------------------------- # ◆ シンボル数の取得 #-------------------------------------------------------------------------- def max_symbol_number @add_symbol ||= 0 return @symbol_number + @add_symbol end #-------------------------------------------------------------------------- # ◆ シンボル数の拡張 #-------------------------------------------------------------------------- def gain_symbol_number @add_symbol ||= 0 @add_symbol = [@add_symbol + 1,add_max_symbol_number].min end #-------------------------------------------------------------------------- # ◆ シンボル拡張できるか #-------------------------------------------------------------------------- def gain_symbol? @add_symbol ||= 0 return true if @add_symbol < add_max_symbol_number return false end #-------------------------------------------------------------------------- # ● 初期シンボルの設定 #-------------------------------------------------------------------------- def set_first_symbol #シンボル継承データを読み込む first_symbol = succeed_symbol return if first_symbol == [] #全シンボルデータを出力する。 first_symbol.each do |id| if KURE::SortOut::SYMBOL[id] case KURE::SortOut::SYMBOL[id][0] when "W" @symbol.push([$data_weapons[KURE::SortOut::SYMBOL[id][1]],id]) when "A" @symbol.push([$data_armors[KURE::SortOut::SYMBOL[id][1]],id]) when "J" @symbol.push([$data_classes[KURE::SortOut::SYMBOL[id][1]],id]) when "S" @symbol.push([$data_states[KURE::SortOut::SYMBOL[id][1]],id]) end end end end #-------------------------------------------------------------------------- # ◆ シンボルを追加する処理 #-------------------------------------------------------------------------- def set_symbol(id,limit) @symbol ||= [] return unless id return if limit && @symbol.size >= max_symbol_number if KURE::SortOut::SYMBOL[id] case KURE::SortOut::SYMBOL[id][0] when "W" @symbol.push([$data_weapons[KURE::SortOut::SYMBOL[id][1]],id]) when "A" @symbol.push([$data_armors[KURE::SortOut::SYMBOL[id][1]],id]) when "J" @symbol.push([$data_classes[KURE::SortOut::SYMBOL[id][1]],id]) when "S" @symbol.push([$data_states[KURE::SortOut::SYMBOL[id][1]],id]) end end reset_name_random_params end #-------------------------------------------------------------------------- # ◆ シンボルを削除する処理 #-------------------------------------------------------------------------- def delete_symbol(randmize, protect) return unless @symbol delete_id = [] @symbol.each do |data| if protect && succeed_symbol.include?(data[1]) else delete_id.push(slot) end end return if delete_id == [] if randmize delete = delete_id.sort_by{rand} else delete = delete_id end @symbol[delete[0]] = nil @symbol.compact! reset_name_random_params end #-------------------------------------------------------------------------- # ● シンボル用パラメータの取得 #-------------------------------------------------------------------------- def set_symbol_param @symbol_param = [0,0,0,0,0,0,0,0] @symbol_feature = [] @symbol_note = '' @symbol.each do |symbol| next unless symbol[0] @symbol_feature += symbol[0].features @symbol_note += symbol[0].note next unless symbol[0].is_a?(RPG::EquipItem) for param in 0..7 @symbol_param[param] += symbol[0].params[param] end end end #-------------------------------------------------------------------------- # ◆ メモ欄の取得 #-------------------------------------------------------------------------- def set_note @slot_note ||= '' ; @name_value_note ||= '' @symbol_note ||= '' ; @base_note ||= '' #反映しては困る設定を消去 #装備タイプ @name_value_note.gsub!(/<装備タイプ\s?(\d+)\s?>/,'') @slot_note.gsub!(/<装備タイプ\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<装備タイプ\s?(\d+)\s?>/,'') #強化設定 @name_value_note.gsub!(/<強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<合成強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<合成強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<合成強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正\s?(\d+(?:\s?*,\s?*\d+)*)>/,'') @slot_note.gsub!(/<強化補正\s?(\d+(?:\s?*,\s?*\d+)*)>/,'') @symbol_note.gsub!(/<強化補正\s?(\d+(?:\s?*,\s?*\d+)*)>/,'') @name_value_note.gsub!(/<強化全補正\s?(\d+(?:\s?*,\s?*\d+)*)>/,'') @slot_note.gsub!(/<強化全補正\s?(\d+(?:\s?*,\s?*\d+)*)>/,'') @symbol_note.gsub!(/<強化全補正\s?(\d+(?:\s?*,\s?*\d+)*)>/,'') @name_value_note.gsub!(/<強化補正HP\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正HP\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正HP\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正MP\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正MP\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正MP\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正攻撃力\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正攻撃力\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正攻撃力\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正防御力\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正防御力\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正防御力\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正魔法力\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正魔法力\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正魔法力\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正魔法防御\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正魔法防御\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正魔法防御\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正敏捷性\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正敏捷性\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正敏捷性\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<強化補正運\s?(\d+)\s?>/,'') @slot_note.gsub!(/<強化補正運\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<強化補正運\s?(\d+)\s?>/,'') @name_value_note.gsub!(//,'') @slot_note.gsub!(//,'') @symbol_note.gsub!(//,'') @name_value_note.gsub!(//,'') @slot_note.gsub!(//,'') @symbol_note.gsub!(//,'') @name_value_note.gsub!(/<攻撃力強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<攻撃力強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<攻撃力強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<防御力強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<防御力強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<防御力強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<魔法力強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<魔法力強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<魔法力強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<魔法防御強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<魔法防御強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<魔法防御強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<敏捷性強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<敏捷性強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<敏捷性強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<運強化上限\s?(\d+)\s?>/,'') @slot_note.gsub!(/<運強化上限\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<運強化上限\s?(\d+)\s?>/,'') @name_value_note.gsub!(/<表示色\s?(\d+)\s?>/,'') @slot_note.gsub!(/<表示色\s?(\d+)\s?>/,'') @symbol_note.gsub!(/<表示色\s?(\d+)\s?>/,'') @note = @base_note + @slot_note + @name_value_note + @symbol_note end #-------------------------------------------------------------------------- # ● 価格 #-------------------------------------------------------------------------- def set_price price = 0 ; rate = 1 #接頭語オブジェクトの価格を読み込む @name_value.each do |data| next unless data[0] next unless data[0].is_a?(RPG::EquipItem) price += data[0].price rate *= data[0].price_rate end #シンボルオブジェクトの価格を読み込む @symbol.each do |symbol| next unless symbol[0] next unless symbol[0].is_a?(RPG::EquipItem) price += symbol[0].price rate *= symbol[0].price_rate end @price = ((@base_price + price) * rate).to_i @price = 2 if KURE::SortOut::BROKEN_PRICE == 1 && broken? end #-------------------------------------------------------------------------- # ● 基礎能力値変化量の取得 #-------------------------------------------------------------------------- def set_basic_params set_name_value_param unless @name_value_param set_slot_param unless @slot_param @basic_params = @params.clone for param in 0..7 #ランダムステータス付与の処理(一番最初) @basic_params[param] *= @randamize_param[param] if @randamize_param #強化値の付与 @basic_params[param] += @customize * add_plus_revise[param] #カスタムの付与 @basic_params[param] += custom_param[param] #ネームバリューの付与 @basic_params[param] += @name_value_param[param] #スロット能力の付与 @basic_params[param] += @slot_param[param] #シンボル能力の付与 @basic_params[param] += @symbol_param[param] #破損中は補正 if @basic_params[param] > 0 if broken? per = KURE::SortOut::BROKEN_PERFORM @basic_params[param] = (@basic_params[param] * (per.to_f / 100)).to_i end end @basic_params[param] = @basic_params[param].to_i end return @basic_params end #-------------------------------------------------------------------------- # ● アイテム名をセット #-------------------------------------------------------------------------- def set_name @uniq_name ||= "" ; @view_name ||= "" set_name_value_str unless @add_name_before set_name_value_str unless @add_name_after break_name = broken? ? KURE::SortOut::BROKEN_ITEM_NAME : "" if @uniq_name == "" @view_name = break_name + @add_name_before + @name + @add_name_after if custom_num == 0 @view_name = break_name + @add_name_before + @name + @add_name_after + "+" + custom_num.to_s if custom_num != 0 else @view_name = break_name + @uniq_name if custom_num == 0 @view_name = break_name + @uniq_name + "+" + custom_num.to_s if custom_num != 0 end end #-------------------------------------------------------------------------- # ● アイテム名 #-------------------------------------------------------------------------- def name return @name unless identify_id set_name unless @view_name return @view_name end #-------------------------------------------------------------------------- # ◆ 能力更新処理 #-------------------------------------------------------------------------- def reset_name_random_params #接頭語をセット set_name_value_str #接頭語用パラメータセット set_name_value_param #スロット用パラメータセット set_slot_param #シンボル用パラメータセット set_symbol_param #メモ欄の更新 set_note #価格更新 set_price #基礎能力値を更新 set_basic_params #表示名を更新 set_name @adv_feature_flag = nil end #-------------------------------------------------------------------------- # ◆ 耐久値の取得 #-------------------------------------------------------------------------- def durable_value @durable_value ||= first_durable return @durable_value end #-------------------------------------------------------------------------- # ◆ 破損状態の取得 #-------------------------------------------------------------------------- def broken? return false unless @durable_value return true if @durable_value < 0 return false end #-------------------------------------------------------------------------- # ◆ 修復する #-------------------------------------------------------------------------- def recover_durable @durable_value = first_durable reset_name_random_params end #-------------------------------------------------------------------------- # ◆ 耐久値の増減 #-------------------------------------------------------------------------- def reduce_durable_value=(value) return if KURE::SortOut::USE_DURABLE == 0 return if protect_durable && value > 0 @durable_value ||= first_durable @durable_value -= value @durable_value = first_durable if @durable_value > first_durable if @durable_value < 1 @durable_value = -1 reset_name_random_params end end #-------------------------------------------------------------------------- # ◆ 本体のメモ欄の取得 #-------------------------------------------------------------------------- def base_note @base_note ||= '' return @base_note end #-------------------------------------------------------------------------- # ◆ 本体のメモ欄を更新 #-------------------------------------------------------------------------- def add_txt(str) @base_note += str reset_name_random_params end #-------------------------------------------------------------------------- # ◆ 個別の名前を設定 #-------------------------------------------------------------------------- def set_uniq_name(str) @uniq_name ||= "" @uniq_name = str set_name end #-------------------------------------------------------------------------- # ● カスタム数取得 #-------------------------------------------------------------------------- def custom_num return @customize end #-------------------------------------------------------------------------- # ● カスタム配列の取得 #-------------------------------------------------------------------------- def custom_param @custom_param ||= [0,0,0,0,0,0,0,0] return @custom_param end #-------------------------------------------------------------------------- # ◆ カスタムステータスの増減 #-------------------------------------------------------------------------- def custom_status(param,value) @custom_param ||= [0,0,0,0,0,0,0,0] @custom_param[param] += value if @custom_param[param] > add_plus_revise_limit[param] @custom_param[param] = add_plus_revise_limit[param] end reset_name_random_params end #-------------------------------------------------------------------------- # ◆ 強化値の増減 #-------------------------------------------------------------------------- def custom_value(value) return if value < 0 && protect_custom if value > 0 && @customize < add_plus_limit @customize = [@customize + value, add_plus_limit].min end @customize = [@customize + value, 0].max if value < 0 reset_name_random_params end #-------------------------------------------------------------------------- # ● 能力値変化量の取得 #-------------------------------------------------------------------------- def params return @params unless identify_id set_basic_params unless @basic_params return @basic_params end #-------------------------------------------------------------------------- # ● 経験値 #-------------------------------------------------------------------------- def equip_exp return 0 unless @equip_exp return @equip_exp end #-------------------------------------------------------------------------- # ● 経験値 #-------------------------------------------------------------------------- def equip_exp=(value) @equip_exp ||= 0 @equip_exp += value end #-------------------------------------------------------------------------- # ● スロット用経験値加算 #-------------------------------------------------------------------------- def slot_equip_exp=(value) return unless @slot @slot.each do |obj| next unless obj obj.equip_exp = value end end #-------------------------------------------------------------------------- # ● 付与された特徴の個別ID配列 #-------------------------------------------------------------------------- def reinforced_id_list @reinforced_id ||= [] return @reinforced_id end #-------------------------------------------------------------------------- # ● 特徴の付与 #-------------------------------------------------------------------------- def add_reinforce_features(id, double) @reinforce ||= [] #二重付与を弾く return if double && @reinforced_id.include?(id) @reinforced_id.push(id) f_data = KURE::SortOut::R_ENCHANT[id] @reinforce.push(RPG::BaseItem::Feature.new(f_data[0], f_data[1], f_data[2])) end #-------------------------------------------------------------------------- # ● 特徴の取得 #-------------------------------------------------------------------------- def features return [] if KURE::SortOut::BROKEN_FEATURE == 1 && @durable_value == -1 features = @features.clone features += @reinforce if @reinforce features += @name_value_feature if @name_value_feature features += @slot_feature if @slot_feature features += @symbol_feature if @symbol_feature return features end end #============================================================================== # ■ RPG::Weapon #============================================================================== class RPG::Weapon < RPG::EquipItem attr_accessor :weapon_id #-------------------------------------------------------------------------- # ● 固有IDを設定する #-------------------------------------------------------------------------- def identify_id=(value) @weapon_id = value end #-------------------------------------------------------------------------- # ● 固有IDを取得(判定用) #-------------------------------------------------------------------------- def self.identify_id @weapon_id end #-------------------------------------------------------------------------- # ● 固有IDを取得 #-------------------------------------------------------------------------- def identify_id return @weapon_id end #-------------------------------------------------------------------------- # ● 同ーオブジェクトか判定します。 #-------------------------------------------------------------------------- def equal?(obj) return false unless obj.is_a?(RPG::Weapon) if obj.weapon_id == nil return obj.id == id end return obj.weapon_id == @weapon_id end end #============================================================================== # ■ RPG::Armor #============================================================================== class RPG::Armor < RPG::EquipItem attr_accessor :armor_id #-------------------------------------------------------------------------- # ● 固有IDを設定する #-------------------------------------------------------------------------- def identify_id=(value) @armor_id = value end #-------------------------------------------------------------------------- # ● 固有IDを取得(判定用) #-------------------------------------------------------------------------- def self.identify_id @armor_id end #-------------------------------------------------------------------------- # ● 固有IDを取得 #-------------------------------------------------------------------------- def identify_id return @armor_id end #-------------------------------------------------------------------------- # ● 同ーオブジェクトか判定します。 #-------------------------------------------------------------------------- def equal?(obj) return false unless obj.is_a?(RPG::Armor) if obj.armor_id == nil return obj.id == id end return obj.armor_id == @armor_id end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● 全アイテムリストの初期化(再定義) #-------------------------------------------------------------------------- def init_all_items @items = [] @weapons = [] @weapons_master = [] @weapons_name_list = [] @armors = [] @armors_master = [] @armors_name_list = [] @get_list = [] end #-------------------------------------------------------------------------- # ● 獲得アイテム名リストを取得(追加定義) #-------------------------------------------------------------------------- def get_list if @get_list.size > KURE::SortOut::MAX_ITEM_LOG @get_list = @get_list.slice(0..KURE::SortOut::MAX_ITEM_LOG - 1) end return @get_list.select{|obj| obj[2][0] != RPG::Item }.collect{|obj| obj[0] } end #-------------------------------------------------------------------------- # ● 獲得アイテム名リストを取得(追加定義) #-------------------------------------------------------------------------- def get_all_list if @get_list.size > KURE::SortOut::MAX_ITEM_LOG @get_list = @get_list.slice(0..KURE::SortOut::MAX_ITEM_LOG - 1) end return @get_list.collect{|obj| obj[0]} end #-------------------------------------------------------------------------- # ● 獲得アイテムのデータリストを取得(追加定義) #-------------------------------------------------------------------------- def get_full_list if @get_list.size > KURE::SortOut::MAX_ITEM_LOG @get_list = @get_list.slice(0..KURE::SortOut::MAX_ITEM_LOG - 1) end return @get_list end #-------------------------------------------------------------------------- # ● 獲得アイテム名リストを初期化(追加定義) #-------------------------------------------------------------------------- def clear_get_list @get_list = [] end #-------------------------------------------------------------------------- # ● マスターコンテナオブジェクトを取得(追加定義) #-------------------------------------------------------------------------- def item_master_container(item_class) return @weapons_master if item_class == RPG::Weapon return @armors_master if item_class == RPG::Armor return nil end #-------------------------------------------------------------------------- # ● マスターコンテナオブジェクトを圧縮(追加定義) #-------------------------------------------------------------------------- def compact_item_master_container(item_class) container = item_master_container(item_class) return unless container count = container.size - 1 while count > 0 break if container[count] container.delete_at(-1) unless container[count] count -= 1 end end #-------------------------------------------------------------------------- # ● アイテムオブジェクトの配列取得(再定義) #-------------------------------------------------------------------------- def items item = Array.new @items.each_with_index{|num, index| next unless num next if num == 0 item.push($data_items[index]) } return item end #-------------------------------------------------------------------------- # ● 付与済み接頭語オブジェクトを出力(追加定義) #-------------------------------------------------------------------------- def push_name_value_list(list, id, cat) @push_name_value_list ||= [] @push_name_value_list[list] ||= [] @push_name_value_list[list][id] = cat end #-------------------------------------------------------------------------- # ● 付与済み接頭語オブジェクトを取得(追加定義) #-------------------------------------------------------------------------- def know_name_value_list @push_name_value_list ||= [] return @push_name_value_list end #-------------------------------------------------------------------------- # ● 固有ID判定(追加定義) #-------------------------------------------------------------------------- def identify?(item_id) return item_id > KURE::SortOut::ID_BASE end #-------------------------------------------------------------------------- # ● 固有ID取得(追加定義) #-------------------------------------------------------------------------- def turn_identify_id(item_id) return item_id / KURE::SortOut::ID_BASE end #-------------------------------------------------------------------------- # ● アイテムID取得(追加定義) #-------------------------------------------------------------------------- def turn_item_id(item_id) return item_id % KURE::SortOut::ID_BASE end #-------------------------------------------------------------------------- # ● 武器オブジェクトの取得(追加定義) #-------------------------------------------------------------------------- def set_weapon(item_id) if identify?(item_id) identify_id = turn_identify_id(item_id) return @weapons_master[identify_id] end return $data_weapons[item_id] end #-------------------------------------------------------------------------- # ● 防具オブジェクトの取得(追加定義) #-------------------------------------------------------------------------- def set_armor(item_id) if identify?(item_id) identify_id = turn_identify_id(item_id) return @armors_master[identify_id] end return $data_armors[item_id] end #-------------------------------------------------------------------------- # ● 武器オブジェクトの配列取得(再定義) #-------------------------------------------------------------------------- def weapons weapon = @weapons.compact.flatten return weapon end #-------------------------------------------------------------------------- # ● 防具オブジェクトの配列取得(再定義) #-------------------------------------------------------------------------- def armors armors = @armors.compact.flatten return armors end #-------------------------------------------------------------------------- # ● 装備の名称の配列の更新(追加定義) #-------------------------------------------------------------------------- def refresh_equip_name_list_both refresh_equip_name_list refresh_equip_master_name_list end #-------------------------------------------------------------------------- # ● 装備の名称の配列の更新(追加定義) #-------------------------------------------------------------------------- def refresh_equip_name_list refresh_equip_master_name_list @weapons_name_list = [] @armors_name_list = [] for i in 0..@weapons.size - 1 if @weapons[i] != nil && @weapons[i] != [] @weapons_name_list.push($data_weapons[i]) end end for i in 0..@armors.size - 1 if @armors[i] != nil && @armors[i] != [] @armors_name_list.push($data_armors[i]) end end end #-------------------------------------------------------------------------- # ● 装備の名称のマスター配列の更新(追加定義) #-------------------------------------------------------------------------- def refresh_equip_master_name_list @weapons_master_name_list = [] @armors_master_name_list = [] weapon_ids = party_weapons_master.select{|obj| obj != nil}.collect{|obj| turn_item_id(obj.id)} weapon_ids.sort!.uniq! weapon_ids.each do |id| @weapons_master_name_list.push($data_weapons[id]) end armors_ids = party_armors_master.select{|obj| obj != nil}.collect{|obj| turn_item_id(obj.id)} armors_ids.sort!.uniq! armors_ids.each do |id| @armors_master_name_list.push($data_armors[id]) end end #-------------------------------------------------------------------------- # ● PT内の武器のアイテムオブジェクトの配列取得(追加定義) #-------------------------------------------------------------------------- def party_weapons_master all_actor = $data_actors.compact.collect {|obj| $game_actors[obj.id] } cheacker_list = all_actor - all_members push_list = Array.new @weapons_master.each do |item| push_list.push(item) unless cheacker_list.any? {|actor| actor.equips.include?(item) } end return push_list end #-------------------------------------------------------------------------- # ● PT内の防具のアイテムオブジェクトの配列取得(追加定義) #-------------------------------------------------------------------------- def party_armors_master all_actor = $data_actors.compact.collect {|obj| $game_actors[obj.id] } cheacker_list = all_actor - all_members push_list = Array.new @armors_master.each do |item| push_list.push(item) unless cheacker_list.any? {|actor| actor.equips.include?(item) } end return push_list end #-------------------------------------------------------------------------- # ● 武器のアイテム名の配列取得(追加定義) #-------------------------------------------------------------------------- def weapons_name_list refresh_equip_name_list unless @weapons_name_list return @weapons_name_list end #-------------------------------------------------------------------------- # ● 防具のアイテム名の配列取得(追加定義) #-------------------------------------------------------------------------- def armors_name_list refresh_equip_name_list unless @armors_name_list return @armors_name_list end #-------------------------------------------------------------------------- # ● 武器のアイテム名のマスター配列取得(追加定義) #-------------------------------------------------------------------------- def weapons_master_name_list refresh_equip_master_name_list unless @weapons_master_name_list return @weapons_master_name_list end #-------------------------------------------------------------------------- # ● 防具のアイテム名のマスター配列取得(追加定義) #-------------------------------------------------------------------------- def armors_master_name_list refresh_equip_master_name_list unless @armors_master_name_list return @armors_master_name_list end #-------------------------------------------------------------------------- # ● 武器のIDオブジェクトブロックの配列取得(追加定義) #-------------------------------------------------------------------------- def weapons_block(id) return [] unless @weapons[id] return @weapons[id] end #-------------------------------------------------------------------------- # ● 防具のIDオブジェクトブロックの配列取得(追加定義) #-------------------------------------------------------------------------- def armors_block(id) return [] unless @armors[id] return @armors[id] end #-------------------------------------------------------------------------- # ● 武器オブジェクトのマスター配列取得(追加定義) #-------------------------------------------------------------------------- def master_weapons_list return @weapons_master end #-------------------------------------------------------------------------- # ● 武器オブジェクトのマスターブロック配列を作成(追加定義) #-------------------------------------------------------------------------- def master_weapons_block(id) return @weapons_master.select{|obj| obj && id == turn_item_id(obj.id)} end #-------------------------------------------------------------------------- # ● 武器オブジェクトのPT内マスターブロック配列を作成(追加定義) #-------------------------------------------------------------------------- def master_weapons_block_pt(id) return party_weapons_master.select{|obj| obj && id == turn_item_id(obj.id)} end #-------------------------------------------------------------------------- # ● 防具オブジェクトのマスター配列取得(追加定義) #-------------------------------------------------------------------------- def master_armors_list return @armors_master end #-------------------------------------------------------------------------- # ● 防具オブジェクトのマスターブロック配列を作成(追加定義) #-------------------------------------------------------------------------- def master_armors_block(id) return @armors_master.select{|obj| obj && id == turn_item_id(obj.id)} end #-------------------------------------------------------------------------- # ● 防具オブジェクトのマスターブロック配列を作成(追加定義) #-------------------------------------------------------------------------- def master_armors_block_pt(id) return party_armors_master.select{|obj| obj && id == turn_item_id(obj.id)} end #-------------------------------------------------------------------------- # ● アイテムの所持数取得(再定義) #-------------------------------------------------------------------------- def item_number(item) #対応するコンテナを取得 container = item_container(item.class) return 0 unless container #通常アイテムの場合 if item.class == RPG::Item return 0 if container[item.id] == 0 return 0 if container[item.id] == nil return container[item.id] else return 0 unless container[turn_item_id(item.id)] return container[turn_item_id(item.id)].size end end #-------------------------------------------------------------------------- # ● アイテムのデータベース数取得(追加定義) #-------------------------------------------------------------------------- def item_master_number(item) #対応するコンテナを取得 return 0 if item.class == RPG::Item container = master_weapons_block_pt(item.id) if item.class == RPG::Weapon container = master_armors_block_pt(item.id) if item.class == RPG::Armor return 0 unless container return container.size end #-------------------------------------------------------------------------- # ● 入手したアイテムのデータを記録(追加定義) #-------------------------------------------------------------------------- def memory_get_item(item, amount) return if amount < 0 @get_list.unshift([item.name,amount,[item.class,item.id]]) end #-------------------------------------------------------------------------- # ● アイテムの増加(減少)(再定義) # include_equip : 装備品も含める #-------------------------------------------------------------------------- def gain_item(item, amount, include_equip = false, change_equip = false, recycle_slot = true) #対応するアイテムコンテナを取得 container = item_container(item.class) master_container = item_master_container(item.class) compact_item_master_container(item.class) return unless container #現在の所持数と、増加後のアイテム数を設定 last_number = item_number(item) new_number = last_number + amount #通常アイテムならば個数をID位置に出力 if item.class == RPG::Item container[item.id] = [[new_number, 0].max, max_item_number(item)].min memory_get_item(item, [amount, max_item_number(item) - last_number].min) else #アイテムが増える場合 if new_number > last_number count = new_number - last_number same_object = Marshal.load(Marshal.dump(item)) #装備切り替えの場合の処理 if change_equip if same_object.identify_id != (0 or nil) item_id = $game_party.turn_item_id(same_object.id) container[item_id] = [] unless container[item_id] container[item_id].push(same_object) count -= 1 end end count.times{ same_object = Marshal.load(Marshal.dump(item)) new_identify_id = set_id(same_object) same_object.identify_id = new_identify_id same_object.first_setting item_id = $game_party.turn_item_id(same_object.id) container[item_id] = [] unless container[item_id] container[item_id].push(same_object) master_container[new_identify_id] = same_object memory_get_item(same_object, 1) } #アイテムが減る場合 else #減少個数を算出 count = last_number - new_number #同一アイテムを検索する same_object = Marshal.load(Marshal.dump(item)) #装備切り替えの場合の処理 if change_equip item_id = $game_party.turn_item_id(same_object.id) lose_item_id = set_delete(item_id,same_object) if lose_item_id container[item_id][lose_item_id] = nil container[item_id].compact! count -= 1 end else #同一アイテムを検索して削除する item_id = $game_party.turn_item_id(same_object.id) lose_item_id = set_delete(item_id,same_object) delete_identify_id = same_object.identify_id if lose_item_id && delete_identify_id recycle_slot(container[item_id][lose_item_id]) if recycle_slot master_container[delete_identify_id] = nil container[item_id][lose_item_id] = nil container[item_id].compact! count -= 1 end #同一アイテムが存在しなければ弱いアイテムより削除 item_id = $game_party.turn_item_id(same_object.id) count.times{ lose_item_id = week_object(item_id,same_object) if lose_item_id && container[item_id][lose_item_id] recycle_slot(container[item_id][lose_item_id]) if recycle_slot master_container[container[item_id][lose_item_id].identify_id] = nil container[item_id][lose_item_id] = nil container[item_id].compact! end } end end end if include_equip && new_number < 0 discard_members_equip(item, -new_number) end $game_map.need_refresh = true end #-------------------------------------------------------------------------- # ● アイテムの減少(再定義) # include_equip : 装備品も含める #-------------------------------------------------------------------------- def lose_item(item, amount, include_equip = false, change_equip = false, recycle_slot = true) gain_item(item, -amount, include_equip, change_equip, recycle_slot) end #-------------------------------------------------------------------------- # ● スロットにささった装備の回収(追加定義) #-------------------------------------------------------------------------- def recycle_slot(item) return unless item.class == RPG::EquipItem return if item.identify_id == 0 item.slot_list.each do |item| $game_party.gain_item(item, 1 ,false ,true) if item end end #-------------------------------------------------------------------------- # ● 空白のID位置を取得(追加定義) #-------------------------------------------------------------------------- def set_id(item) if item.class == RPG::Weapon return 1 if @weapons_master.size == 0 for weapon in 1..@weapons_master.size - 1 if @weapons_master[weapon] == nil return weapon end end return @weapons_master.size end if item.class == RPG::Armor return 1 if @armors_master.size == 0 for armor in 1..@armors_master.size - 1 if @armors_master[armor] == nil return armor end end return @armors_master.size end end #-------------------------------------------------------------------------- # ● 削除する配列位置を取得(追加定義) #-------------------------------------------------------------------------- def set_delete(item_id,item) container = @weapons[item_id] if item.class == RPG::Weapon container = @armors[item_id] if item.class == RPG::Armor return nil unless container for block_id in 0..container.size - 1 if container[block_id].id == item.id return block_id break end end end #-------------------------------------------------------------------------- # ● メンバーの装備品を破棄する #-------------------------------------------------------------------------- def discard_members_equip(item, amount) n = amount if item.class == RPG::Weapon seek_item = $data_weapons[turn_item_id(item.id)] elsif item.class == RPG::Armor seek_item = $data_armors[turn_item_id(item.id)] end for actor in members if n > 0 for slot in 0..actor.equips.size - 1 if actor.equips[slot] if actor.equips[slot].class == RPG::Weapon if seek_item == $data_weapons[turn_item_id(actor.equips[slot].id)] actor.discard_equip(seek_item) n -= 1 end elsif actor.equips[slot].class == RPG::Armor if seek_item == $data_armors[turn_item_id(actor.equips[slot].id)] actor.discard_equip(seek_item) n -= 1 end end end end end end end #-------------------------------------------------------------------------- # ● 該当アイテムの中で最も能力が低いもののIDを取得(追加定義) #-------------------------------------------------------------------------- def week_object(item_id,item) if item.class == RPG::Weapon weapon = @weapons[item_id] return nil unless @weapons[item_id] result = 0 keep = nil for i in 0..weapon.size - 1 if weapon[i] keep = weapon[i].custom_num unless keep if keep > weapon[i].custom_num keep = weapon[i].custom_num result = i end end end return result return nil end if item.class == RPG::Armor armor = @armors[item_id] return nil unless @armors[item_id] result = 0 keep = nil for i in 0..armor.size - 1 if armor[i] keep = armor[i].custom_num unless keep if keep > armor[i].custom_num keep = armor[i].custom_num result = i end end end return result return nil end end #-------------------------------------------------------------------------- # ● 指定アクターの指定スロットのアイテムを取得(追加定義) #-------------------------------------------------------------------------- def actor_slot_item(actor_id, slot_id) #指定アイテムが存在しなけれなnilを返す item = $game_actors[actor_id].equips[slot_id] return nil unless item #固有IDが存在しなければnilを返す serch_identify_id = item.identify_id return nil if serch_identify_id == 0 #マスターコンテナ上にアイテムが無ければnilを返す master_container = item_master_container(item.class) int_item = master_container[serch_identify_id] return nil unless int_item return item end #-------------------------------------------------------------------------- # ● 装備品の強化(追加定義) #-------------------------------------------------------------------------- def custom_object_plus(actor_id, slot_id, param, plus) int_item = actor_slot_item(actor_id, slot_id) return unless int_item if param == -1 int_item.custom_value(plus) else int_item.custom_status(param, plus) end end #-------------------------------------------------------------------------- # ● 装備品に特徴を追加(追加定義) #-------------------------------------------------------------------------- def custom_equip_features(actor_id, slot_id, id, double) int_item = actor_slot_item(actor_id, slot_id) return unless int_item int_item.add_reinforce_features(id, double) end #-------------------------------------------------------------------------- # ● 装備品の耐久値操作(追加定義) #-------------------------------------------------------------------------- def custom_equip_durable_value(actor_id, slot_id, value) int_item = actor_slot_item(actor_id, slot_id) return unless int_item int_item.reduce_durable_value = value end #-------------------------------------------------------------------------- # ● 装備品にスロットを追加(追加定義) #-------------------------------------------------------------------------- def custom_object_add_slot(actor_id, slot_id, plus) int_item = actor_slot_item(actor_id, slot_id) return unless int_item plus.times{int_item.gain_slot_number} end #-------------------------------------------------------------------------- # ● 装備品のシンボルを拡張(追加定義) #-------------------------------------------------------------------------- def custom_object_add_symbol(actor_id, slot_id, plus) int_item = actor_slot_item(actor_id, slot_id) return unless int_item plus.times{int_item.gain_symbol_number} end #-------------------------------------------------------------------------- # ● 装備品のシンボルを追加(追加定義) #-------------------------------------------------------------------------- def custom_object_add_symbol_obj(actor_id, slot_id, id, limit) int_item = actor_slot_item(actor_id, slot_id) return unless int_item int_item.set_symbol(id,limit) end #-------------------------------------------------------------------------- # ● 装備品のシンボルを削除(追加定義) #-------------------------------------------------------------------------- def custom_object_delete_symbol_obj(actor_id, slot_id, rand, protect) int_item = actor_slot_item(actor_id, slot_id) return unless int_item int_item.delete_symbol(rand, protect) end #-------------------------------------------------------------------------- # ● 装備品にメモを追加(追加定義) #-------------------------------------------------------------------------- def custom_equip_notes(actor_id, slot_id, str) int_item = actor_slot_item(actor_id, slot_id) return unless int_item int_item.add_txt(str) end #-------------------------------------------------------------------------- # ● 装備品の名前を変更(追加定義) #-------------------------------------------------------------------------- def custom_equip_name(actor_id, slot_id, str) int_item = actor_slot_item(actor_id, slot_id) return unless int_item int_item.set_uniq_name(str) end #-------------------------------------------------------------------------- # ● 指定したアクターの破損した装備の数を取得(追加定義) #-------------------------------------------------------------------------- def broken_equip_num(actor_id) eruip = $game_actors[actor_id].equips.select{|obj| obj != nil && obj.broken?} return eruip.size end #-------------------------------------------------------------------------- # ● 指定したアクターの破損した装備を全て修復(追加定義) #-------------------------------------------------------------------------- def fix_all_equip(actor_id) actor = $game_actors[actor_id] for slot in 0..actor.equips.size - 1 next unless actor.equips[slot] actor.equips[slot].recover_durable container = item_master_container(actor.equips[slot].class) container[actor.equips[slot].identify_id].recover_durable end end #-------------------------------------------------------------------------- # ● 所持している全ての破損装備を数える(追加定義) #-------------------------------------------------------------------------- def all_broken_equip_num num = 0 @weapons_master.each do |weapon| num += 1 if weapon && weapon.broken? end @armors_master.each do |armor| num += 1 if armor && armor.broken? end return num end #-------------------------------------------------------------------------- # ● 所持している破損装備を全て修復(追加定義) #-------------------------------------------------------------------------- def fix_all_party_equip @weapons_master.each do |weapon| if weapon && weapon.broken? weapon.recover_durable item_id = turn_item_id(weapon.id) identify_id = set_delete(item_id,weapon) unless $game_party.all_members.any? {|actor| actor.equips.include?(weapon) } if @weapons[item_id] && @weapons[item_id][identify_id] @weapons[item_id][identify_id].recover_durable end end end end @armors_master.each do |armor| if armor && armor.broken? armor.recover_durable item_id = turn_item_id(armor.id) identify_id = set_delete(item_id,armor) unless $game_party.all_members.any? {|actor| actor.equips.include?(armor) } if @armors[item_id] && @armors[item_id][identify_id] @armors[item_id][identify_id].recover_durable end end end end $game_party.refresh_equip_name_list_both end end #============================================================================== # ■ Game_BaseItem #============================================================================== class Game_BaseItem #-------------------------------------------------------------------------- # ● IDの取得 #-------------------------------------------------------------------------- def id return @item_id % KURE::SortOut::ID_BASE if @item_id > KURE::SortOut::ID_BASE return @item_id end #-------------------------------------------------------------------------- # ● 固有IDの設定 #-------------------------------------------------------------------------- def identify_id=(value) object.identify_id = value if object end #-------------------------------------------------------------------------- # ● 固有IDの呼び出し #-------------------------------------------------------------------------- def identify_id return object.identify_id if object end #-------------------------------------------------------------------------- # ● カスタム数の呼び出し #-------------------------------------------------------------------------- def custom_num return object.custom_num if object end #-------------------------------------------------------------------------- # ● スロットの呼び出し #-------------------------------------------------------------------------- def slot_list return object.slot_list if object return [] end #-------------------------------------------------------------------------- # ● アイテムオブジェクトの設定 #-------------------------------------------------------------------------- def object=(item) @class = item ? item.class : nil @item_id = item ? item.id : 0 end #-------------------------------------------------------------------------- # ● アイテムオブジェクトの取得 #-------------------------------------------------------------------------- def object return $data_skills[@item_id] if is_skill? return $data_items[@item_id] if is_item? return $game_party.set_weapon(@item_id) if is_weapon? return $game_party.set_armor(@item_id) if is_armor? return nil end #-------------------------------------------------------------------------- # ● 装備品を ID で設定 # is_weapon : 武器かどうか # item_id : 武器/防具 ID #-------------------------------------------------------------------------- def set_equip(is_weapon, item_id) @class = is_weapon ? RPG::Weapon : RPG::Armor @item_id = item_id #固有IDが未設定の場合 if @item_id < KURE::SortOut::ID_BASE obj = $data_armors[item_id] obj = $data_weapons[item_id] if is_weapon if obj same_obj = Marshal.load(Marshal.dump(obj)) new_identify_id = $game_party.set_id(same_obj) same_obj.identify_id = new_identify_id same_obj.first_setting(true) master_container = $game_party.item_master_container(same_obj.class) master_container[new_identify_id] = same_obj @item_id = same_obj.id if object end end end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● パーティとアイテムを交換する # new_item : パーティから取り出すアイテム # old_item : パーティに返すアイテム #-------------------------------------------------------------------------- def trade_item_with_party(new_item, old_item) return false if new_item && !$game_party.has_item?(new_item) $game_party.gain_item(old_item, 1, false, true) $game_party.lose_item(new_item, 1, false, true) return true end #-------------------------------------------------------------------------- # ● 装備の強制変更 # slot_id : 装備スロット ID # item : 武器/防具(nil なら装備解除) #-------------------------------------------------------------------------- def force_change_equip(slot_id, item) same_object = nil same_object = Marshal.load(Marshal.dump(item)) if item if same_object && same_object.identify_id == 0 new_identify_id = $game_party.set_id(same_object) same_object.identify_id = new_identify_id same_object.first_setting master_container = $game_party.item_master_container(same_object.class) master_container[new_identify_id] = same_object end @equips[slot_id].object = item release_unequippable_items(false) force_refresh end #-------------------------------------------------------------------------- # ● 装備の変更(ID で指定)(再定義) # slot_id : 装備スロット ID # item_id : 武器/防具 ID #-------------------------------------------------------------------------- def change_equip_by_id(slot_id, item_id) change_item = nil if item_id != (0 or nil) if equip_slots[slot_id] == 0 item = $data_weapons[item_id] container = $game_party.item_container(item.class) if container[item_id] for block in 0..container[item_id].size - 1 if container[item_id][block] && change_item == nil if $game_party.turn_item_id(container[item_id][block].id) == item.id change_item = container[item_id][block] end end end if change_item change_equip(slot_id, change_item) #過剰削除? #container[block] = nil end end else item = $data_armors[item_id] container = $game_party.item_container(item.class) if container[item_id] for block in 0..container[item_id].size - 1 if container[item_id][block] && change_item == nil if $game_party.turn_item_id(container[item_id][block].id) == item.id change_item = container[item_id][block] end end end if change_item change_equip(slot_id, change_item) #過剰削除? #container[block] = nil end end end else change_equip(slot_id, nil) end end #-------------------------------------------------------------------------- # ● 装備の破棄 # item : 破棄する武器/防具 #-------------------------------------------------------------------------- def discard_equip(item) slot_id = nil equips.each_with_index{|object, index| next unless object if object.class == RPG::Weapon slot_id = index if $data_weapons[$game_party.turn_item_id(object.id)] == item else object.class == RPG::Armor slot_id = index if $data_armors[$game_party.turn_item_id(object.id)] == item end } if slot_id master_container = $game_party.item_master_container(item.class) delete_item_id = @equips[slot_id].identify_id @equips[slot_id].object = nil master_container[delete_item_id] = nil end end end #============================================================================== # ■ Game_Interpreter(追加定義) #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 指定アクターの装備武器を強化(+値追加)(追加定義) #-------------------------------------------------------------------------- def custom_equip_item(actor_id, slot_id, plus) $game_party.custom_object_plus(actor_id, slot_id, -1, plus) end #-------------------------------------------------------------------------- # ● 指定アクターの装備武器のステータスを強化(追加定義) #-------------------------------------------------------------------------- def custom_equip_param(actor_id, slot_id, param, plus) $game_party.custom_object_plus(actor_id, slot_id, param, plus) end #-------------------------------------------------------------------------- # ● 指定アクターの武器に特徴を追加(追加定義) #-------------------------------------------------------------------------- def custom_equip_features(actor_id, slot_id, id, double = false) $game_party.custom_equip_features(actor_id, slot_id, id, double) end #-------------------------------------------------------------------------- # ● 指定アクターの武器のメモ欄を追加(追加定義) #-------------------------------------------------------------------------- def custom_equip_notes(actor_id, slot_id, txt) $game_party.custom_equip_notes(actor_id, slot_id, txt) end #-------------------------------------------------------------------------- # ● 指定アクターの武器の名前を変更(追加定義) #-------------------------------------------------------------------------- def custom_equip_name(actor_id, slot_id, txt) $game_party.custom_equip_name(actor_id, slot_id, txt) end #-------------------------------------------------------------------------- # ● 指定アクターの破損装備数を取得(追加定義) #-------------------------------------------------------------------------- def broken_equip_num(actor_id) $game_party.broken_equip_num(actor_id) end #-------------------------------------------------------------------------- # ● 指定アクターの装備を修復(追加定義) #-------------------------------------------------------------------------- def fix_all_equip(actor_id) $game_party.fix_all_equip(actor_id) end #-------------------------------------------------------------------------- # ● 全ての破損装備数を取得(追加定義) #-------------------------------------------------------------------------- def all_broken_equip_num $game_party.all_broken_equip_num end #-------------------------------------------------------------------------- # ● 全ての装備を修復(追加定義) #-------------------------------------------------------------------------- def fix_all_party_equip $game_party.fix_all_party_equip end #-------------------------------------------------------------------------- # ● 指定アクターの装備武器にスロットを追加(追加定義) #-------------------------------------------------------------------------- def custom_equip_add_slot(actor_id, slot_id, plus) $game_party.custom_object_add_slot(actor_id, slot_id, plus) end #-------------------------------------------------------------------------- # ● 指定アクターの装備武器のシンボル数を拡張(追加定義) #-------------------------------------------------------------------------- def custom_equip_add_symbol(actor_id, slot_id, plus) $game_party.custom_object_add_symbol(actor_id, slot_id, plus) end #-------------------------------------------------------------------------- # ● 指定アクターの装備武器のシンボルを追加(追加定義) #-------------------------------------------------------------------------- def custom_equip_add_symbol_obj(actor_id, slot_id, id, limit = true) $game_party.custom_object_add_symbol_obj(actor_id, slot_id, id, limit) end #-------------------------------------------------------------------------- # ● 指定アクターの装備武器のシンボルを削除(追加定義) #-------------------------------------------------------------------------- def custom_equip_delete_symbol_obj(actor_id, slot_id, rand = true ,protect = true) $game_party.custom_object_delete_symbol_obj(actor_id, slot_id, rand, protect) end #-------------------------------------------------------------------------- # ● 指定アクターの装備武器の耐久値を操作(追加定義) #-------------------------------------------------------------------------- def custom_equip_durable_value(actor_id, slot_id, value) $game_party.custom_equip_durable_value(actor_id, slot_id, value) end #-------------------------------------------------------------------------- # ● 指定アクターの装備をチェック #-------------------------------------------------------------------------- def equip_cheak(actor_id, type, id) case type when 0 id_arr = $game_actors[1].weapons.collect{|obj| $game_party.turn_item_id(obj.id)} when 1 id_arr = $game_actors[1].armors.collect{|obj| $game_party.turn_item_id(obj.id)} end return id_arr.include?(id) end end #============================================================================== # ■ Window_ItemList #------------------------------------------------------------------------------ #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_ItemList < Window_Selectable #-------------------------------------------------------------------------- # ● アイテムの個数を描画(再定義) #-------------------------------------------------------------------------- def draw_item_number(rect, item) num = item.is_a?(RPG::EquipItem) ? 1 : $game_party.item_number(item) draw_text(rect, sprintf(":%2d", num), 2) end end