#============================================================================ # # ■アクター毎のアイテム所持 拡張スクリプト # アイテム強化システム □Ver1.01 □製作者:月紳士 # # ・RPGツクールVX用 RGSS2スクリプト # # ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド # # ※二次配布禁止!配布元には利用規約があります。必ずそちらを見てください。 #---------------------------------------------------------------------------- # 更新履歴 # Ver1.01 注釈使用オプション機能整理。 #============================================================================ =begin  このスクリプトは【アクター毎のアイテム所持】に機能を拡張するスクリプトです。  機能を増せる反面、他との競合の可能性も高くなるのでご注意ください。  問題解決にあたってのポリシー等につきましては、配布元利用規約をご確認ください。   ※ アクター毎のアイテム所持より後に導入してください。 アップデートする際は共に最新版にするよう、お願いします。 #------------------------------------------------------------------------------  ●スクリプトによる追加機能の概要:    追加するのはアイテムの強化に関するシステムです。アイテムに能力を強化す   るような変化を与えることが出来、それを個別に管理できます。アイテムは“強   化レベル”という数値を保有し、その数値を元に設定した強化を反映させます。    プレイヤーは強化ショップで代金を支払い、任意にアイテムを強化できます。   すでに強化されたアイテムを入手することや、エネミーからランダムに強化レベ   ルの違うアイテムをドロップさせたりも出来ます。 #------------------------------------------------------------------------------  ●強化情報設定   設定は、アイテムのメモ欄に指定のオプション記述を行います。順に説明します。 <強化可能Lv:5>   ・アイテムが(何Lvまで)強化できるかどうかを示す。必須オプション。   ・ 5 の部分には任意の強化レベルを入れる。この数値まで強化できる。 <攻撃力強化値:4>   ・装備品専用。強化レベル毎の攻撃力のUP値を設定。 4 の部分に任意の数字を。   ・例)強化レベル1なら元攻撃力+4、Lv2なら+8、Lv3なら+12…といった具合に。   ・<防御力強化値:?> <精神力強化値:?> <敏捷性強化値:?>も用意。 <チャージ強化値:2>   ・強化レベル毎のチャージ数のUP値を設定。 2 の部分に任意の数字を入れる。   ・攻撃力強化と同様、しかし元々のチャージがなければ機能しない。 <連続攻撃強化Lv:3>   ・武器専用。3 の部分に任意の数字=レベル。   ・設定したレベルを強化レベルが越えた際にオプション「連続攻撃」が付与。   ・武器には他に <ターン内先制強化Lv:?> <クリティカル頻発強化Lv:?> も用意。   ・同様に防具用に <クリティカル防止強化Lv:?> <消費MP半分強化Lv:?>     <取得経験値2倍強化Lv:?> も用意。 <属性[1]強化Lv:2>   ・装備品専用。設定したレベルを越えた際に、設定した属性を付与する。   ・武器ならば攻撃属性、防具の場合は半減する属性。   ・1 の部分に設定したい属性IDを。2 の部分はレベルの指定。 <ステート[3]強化Lv:4>   ・装備品専用。設定したレベルを越えた際に、設定したステートを付与する。   ・武器ならば付加するステート、防具の場合は無効化するステートの設定。   ・3 の部分に設定したいステートIDを。4 の部分はレベルの指定。 <強化名(Lv1):???>   ・強化時に名前を変更できる。   ・1 の部分に任意の数字。???の部分が変えたいアイテム名。   ・レベル別に設定できる。設定がないレベルはそれより低いレベルの設定を流用。 <強化ヘルプ文(Lv1):???>   ・強化時にヘルプ文を変更できる。   ・1 の部分に任意の数字。???の部分が変えたいアイテム名。   ・レベル別に設定できる。設定がないレベルはそれより低いレベルの設定を流用。 <強化レベル非表示>   ・強化時に表示される +1 という数字を表示しないようにする。   ・強化名を変更しても +1 等と表示されるので必要なければこれで消す。 <強化時変化:1,15>   ・強化によってアイテムを別のアイテムに変化させる。   ・1 の部分はkind。アイテムなら 0 、武器なら 1 、防具なら 2。15の部分はid。   ・変化がおこるのは最大強化レベルに達する強化時。    <強化可能Lv:5>が設定されていればLv4からLv5に強化される際に変化。   ・変化後のアイテムにさらに高い強化可能レベルを設定すれば続けて強化できる。 <強化費:100>   ・強化に必要なお金を設定。100 の部分が代金。   ・設定省略時は強化後のアイテム価格から算出される。   ・非売品(価格0)の場合、強化費もタダになってしまうのでこの項目は設定必須。     #------------------------------------------------------------------------------  ●ショップ設定   プレイヤーがアイテム強化をする為に、強化項目のある特殊ショップを利用します。   (まずはマニュアル基本編 特殊ショップについて をご覧ください。) 特殊ショップ:強化   で強化の項目を表示します。   また強化対象アイテムの制限をショップタグで行うことも出来ます。   さらに注釈に 強化レベル:2   と書くことで、ショップで行う強化のレベルに制限をつけることが出来ます。   設定したレベル(上記だと 2レベル)までしか強化できません。   強化する回数に変数で制限を設ける事も出来ます。   (変数設定についてはカスタマイズ項目参照)   強化毎に設定した変数を減らし、ゼロになると強化画面を閉じます。   これらのショップ設定は、「注釈使用オプション」です。   これら注釈使用オプションは、同じ注釈内に書くことができます。   続けて書く場合は、オプション毎に改行し、別々の行となるようにしてください。     #------------------------------------------------------------------------------      ●強化品の入手   エネミーから強化品のレベルをランダムに入手させたい場合はアイテムのメモ欄に <強化品オッズ:4:2:1>   と書きます。4:2:1 の部分は、左から順に   ノーマル品:レベル1強化品:レベル2強化品 のオッズを示します。   4:2:1:1:1 と増やせば、さらに高いレベルの強化品ドロップ率を設定できます。   ただし、そのレベルまで強化出来る事をあらかじめ設定する必要はあります。   ( <強化可能:4>というように )   イベントコマンドで強化品を入手させたい場合はイベントコマンド・スクリプトで party_gain_ex_item(1, 13, "強化Lv:2")   と記述します。カッコ内は(kind, id, tags)となり   1 の部分にあたる、kind は種類、 アイテムなら 0 、武器なら 1 、防具なら 2。   13 の部分にあたる、id はkindで指定したオブジェクトのid。   tags の "強化Lv:2" と書かれた部分が強化レベルを指定している部分です。   2 の部分を任意の数字に変えてください。      同じアイテムを複数入手させたい場合は party_gain_ex_item(1, 13, "強化Lv:2", 3)   と拡張して書きます。付け加えられた 3 の部分が入手させたい数になります。     #------------------------------------------------------------------------------  ●その他と覚書  ・スタックアイテムを強化することは出来ません。  ・チャージを消耗した状態では強化は出来ません。チャージ回復する必要があります。  ・強化されたアイテムを預かり所に預けることは出来ません。  ・強化されたアイテムは、強化前の2倍の価格になります。   レベルが上がるたびに倍々にその価格が増していきます。 =end #============================================================================== # □ カスタマイズ項目 #============================================================================== module Actor_Item_Remodel REMODEL_COMMAND = "強化する" #→# ショップコマンド:「強化」のコマンド表示。 # 上記、改変用にコマンド部分を抜き出していますが、 # 強化といった用語を変更するならば # 他にも変更すべき箇所がいくつかあります。 # “カスタマイズ”もしくは“強化”で直接スクリプト内検索を! # (比較的簡単にカスタマイズ可能な部分です) REMODEL_ANIMATION_ID = 44 #→# 強化時にウインドウ上に表示するアニメーションのIDです。 # = 0 (ゼロ)でアニメーション非表示になります。 REMODEL_VARIABLES = 0 #→# 強化回数を制限する変数のID設定です。使用する変数のIDを入れてください。 # = 0 にすると回数の制限はなくなります。 # = -1 にすると、一度だけ強化が可能となります。 # ↓以下に補足説明。 =begin #---------------------------------------------------------------------- ここでの強化回数を制限する変数設定は初期設定です。 ゲーム中(強化ショップを開く直前あたりに) 注釈使用オプションとして、注釈に下記、 強化回数の参照変数:1  と記述することで変更できます。1 の部分に変数IDを入れます。  もしくは、制限をなくすなら 0 、一度だけの強化なら -1 を記述してください。  この設定はイベントページ毎に、  上記カスタマイズ項目で指定した初期設定に初期化されます。 =end #------------------------------------------------------------------------ end #============================================================================== # ■ Sound(効果音のカスタマイズはここを直接書き換えて下さい) #------------------------------------------------------------------------------ #  効果音を演奏するモジュールです。グローバル変数 $data_system からデータベー # スで設定された SE の内容を取得し、演奏します。 #============================================================================== module Sound # 強化 def self.play_remodel Audio.se_play("Audio/SE/Equip", 80, 100) end end #============================================================================== # ■ Game_Temp #------------------------------------------------------------------------------ #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン # スタンスは $game_temp で参照されます。 #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :shop_remodel_level # ショップでの強化可能最大レベル attr_accessor :remodel_variables # 残り強化回数変数 end #============================================================================== # ■ Game_Actor_Item #------------------------------------------------------------------------------ #  Game_Actorクラス及び、Game_Party内で共通して使用するメソッドをまとめた # モジュールです。Game_Party内では主に袋のアイテム用の処理となります。 #============================================================================== module Game_Actor_Item #-------------------------------------------------------------------------- # ◎ indexから所持アイテムを取得 # ※ 強化状態を反映させる #-------------------------------------------------------------------------- alias tig_ais_ir_carry_item carry_item def carry_item(index) return equip_remodel_effect(tig_ais_ir_carry_item(index), index) end #-------------------------------------------------------------------------- # ○ 装備の強化状態反映 #-------------------------------------------------------------------------- def equip_remodel_effect(object, index) return nil if object == nil return object unless carry_items_data[index]["remodel"] object = object.clone remodel_level = @carry_items_data[index]["remodel"] if object.is_a?(RPG::Weapon) or object.is_a?(RPG::Armor) if object.atk_remodel # 攻撃力強化 object.atk += object.atk_remodel * remodel_level end if object.def_remodel # 防御力強化 object.def += object.def_remodel * remodel_level end if object.spi_remodel # 精神力強化 object.spi += object.spi_remodel * remodel_level end if object.agi_remodel # 敏捷性強化 object.agi += object.agi_remodel * remodel_level end unless object.element_set_remodel(remodel_level).empty? # 属性強化 object.element_set = object.element_set.clone + object.element_set_remodel(remodel_level) object.element_set.uniq! end unless object.state_set_remodel(remodel_level).empty? # ステート強化 object.state_set = object.state_set.clone + object.state_set_remodel(remodel_level) object.state_set.uniq! end end if object.is_a?(RPG::Weapon) if object.fast_attack_remodel and remodel_level >= object.fast_attack_remodel # ターン内先制強化 object.fast_attack = true end if object.dual_attack_remodel and remodel_level >= object.dual_attack_remodel # 連続攻撃強化 object.dual_attack = true end if object.critical_bonus_remodel and remodel_level >= object.critical_bonus_remodel # クリティカル頻発強化 object.critical_bonus = true end elsif object.is_a?(RPG::Armor) if object.prevent_critical_remodel and remodel_level >= object.prevent_critical_remodel # クリティカル防止強化 object.prevent_critical = true end if object.half_mp_cost_remodel and remodel_level >= object.half_mp_cost_remodel # 消費MP半分強化 object.half_mp_cost = true end if object.double_exp_gain_remodel and remodel_level >= object.double_exp_gain_remodel # 取得経験値2倍強化 object.double_exp_gain = true end if object.auto_hp_recover_remodel and remodel_level >= object.auto_hp_recover_remodel # HP自動回復強化 object.auto_hp_recover = true end end return object end #-------------------------------------------------------------------------- # ◎ indexから所持アイテム名を取得 #-------------------------------------------------------------------------- alias tig_ais_ir_carry_item_name carry_item_name def carry_item_name(index) if @carry_items_data[index]["remodel"] remodel_level = @carry_items_data[index]["remodel"] name = carry_item(index).remodel_name(remodel_level) name = name ? name : tig_ais_ir_carry_item_name(index) if carry_item(index).hide_remodel_level return name else return name + "+" + remodel_level.to_s end else return tig_ais_ir_carry_item_name(index) end end #--------------------------------------------------------------------------- # ◎ indexアイテムの価格 # ※ 強化時の価格上昇を反映させる #--------------------------------------------------------------------------- alias tig_ais_ir_carry_item_price carry_item_price def carry_item_price(price, index) price = tig_ais_ir_carry_item_price(price, index) item = carry_item(index) remodel_level_max = item.remodel_level return price if remodel_level_max == nil return price unless remodel_item?(index) remodel_level = @carry_items_data[index]["remodel"] price = remodel_item_price(price, remodel_level) return price end #--------------------------------------------------------------------------- # ○ 強化アイテムの価格(計算式) #--------------------------------------------------------------------------- def remodel_item_price(item_price, remodel_level) item_price = item_price * 2 ** remodel_level return item_price end #-------------------------------------------------------------------------- # ◎ indexのアイテムの最大チャージ数取得 #-------------------------------------------------------------------------- alias tig_ais_ir_item_max_charge item_max_charge def item_max_charge(index) if carry_item(index).charge and carry_items_data[index]["remodel"] and carry_item(index).charge_remodel return tig_ais_ir_item_max_charge(index) + carry_item(index).charge_remodel * @carry_items_data[index]["remodel"] else return tig_ais_ir_item_max_charge(index) end end #-------------------------------------------------------------------------- # ◎ indexのアイテムと同じアイテムか? # ※ 強化品への対応 #-------------------------------------------------------------------------- alias tig_ais_ir_same_item_index? same_item_index? def same_item_index?(index, check_item, remodel_level = nil) if remodel_level return false unless remodel_item?(index) return false if carry_items_data[index]["remodel"] != remodel_level else return false if remodel_item?(index) end return tig_ais_ir_same_item_index?(index, check_item) end #-------------------------------------------------------------------------- # ○ 指定強化アイテム所持indexを配列で取得 # item : アイテム # include_equip : 装備品も含める #-------------------------------------------------------------------------- def carry_item_hold_address_remodel(item, remodel_level, include_equip = false) return [] if item == nil result = [] @carry_items_data.size.times do |index| next if actor? and not include_equip and equipping?(index) if same_item_index?(index, item, remodel_level) result.push(index) end end return result end #-------------------------------------------------------------------------- # ○ 指定強化アイテム所持数取得 # item : アイテム # remodel_level : 強化レベル # include_equip : 装備品も含める #-------------------------------------------------------------------------- def carry_item_number_remodel(item, remodel_level, include_equip = false) return carry_item_hold_address_remodel(item, remodel_level, include_equip).size end #-------------------------------------------------------------------------- # ○ 指定強化アイテムを所持しているか? # item : アイテム # remodel_level : 強化レベル # include_equip : 装備品も含める #-------------------------------------------------------------------------- def carrying_item_remodel?(item, remodel_level, include_equip = false) return carry_item_number_remodel(item, remodel_level, include_equip) >= 1 end #-------------------------------------------------------------------------- # ◎ indexのアイテムを預けることが出来るか? #-------------------------------------------------------------------------- alias tig_ais_ir_can_entrust_index? can_entrust_index? def can_entrust_index?(index) return false if remodel_item?(index) return tig_ais_ir_can_entrust_index?(index) end #-------------------------------------------------------------------------- # ○ indexのアイテムが強化可能か? #-------------------------------------------------------------------------- def item_can_remodel?(index, test = false) item = carry_item(index) return false if item == nil return false if item_need_charge?(index) and not test return false if item_max_remodel?(index) return true if item.remodel_level return false end #-------------------------------------------------------------------------- # ○ indexのアイテムが強化状態か? #-------------------------------------------------------------------------- def remodel_item?(index) item = carry_item(index) return false if item == nil return false if @carry_items_data[index] == nil return carry_items_data[index]["remodel"] end #-------------------------------------------------------------------------- # ○ indexのアイテムが最大強化状態か? #-------------------------------------------------------------------------- def item_max_remodel?(index) item = carry_item(index) return false if item == nil if $game_temp.shop_remodel_level return true if item.remodel_level and remodel_item?(index) and carry_items_data[index]["remodel"] >= $game_temp.shop_remodel_level end return true if item.remodel_level and remodel_item?(index) and carry_items_data[index]["remodel"] == item.remodel_level return true if not item.remodel_level and remodel_item?(index) return false end #-------------------------------------------------------------------------- # ○ indexのアイテムの強化 #-------------------------------------------------------------------------- def remodel_item(index) item = carry_item(index) return false if item == nil return false unless item_can_remodel?(index) change_data = item.remodel_change if item.remodel_level if @carry_items_data[index]["remodel"] if @carry_items_data[index]["remodel"] >= item.remodel_level return false # これ以上の強化は出来ない end @carry_items_data[index]["remodel"] += 1 # 強化レベルの増加 else @carry_items_data[index]["remodel"] = 1 # 強化状態(レベル1)へ end if change_data and @carry_items_data[index]["remodel"] == item.remodel_level change_item(index, change_data[0], change_data[1]) # 強化時変化 end @carry_items_data[index]["charge"] = item_max_charge(index) return true end return false end #-------------------------------------------------------------------------- # ◎ アイテムの増加用アイテムデータの作成 #-------------------------------------------------------------------------- alias tig_ais_ir_obtain_item_data obtain_item_data def obtain_item_data(item, tags) item_data = tig_ais_ir_obtain_item_data(item, tags) return item_data if item.stack_item? if tags.include?("drop") #- ドロップアイテムの際の強化値判定 if item.remodel_odds roulette = [] item.remodel_odds.size.times do |i| break if i > item.remodel_level item.remodel_odds[i].times{roulette.push(i)} end remodel_level = roulette[rand(roulette.size)] if remodel_level > 0 item_data["remodel"] = remodel_level end end end #- 強化値を指定して入手させる場合 tags.each do |tag| if /^強化[LlLl]?[VvVv]?[::]?(\d+)/ =~ tag remodel_level = $1.to_i if remodel_level <= item.remodel_level item_data["remodel"] = remodel_level end end end return item_data end end #============================================================================== # ■ Game_Party #------------------------------------------------------------------------------ #  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク # ラスのインスタンスは $game_party で参照されます。 #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ○ 強化された所持品の減少 # ※ いくつ減少できたか、を結果として返す。 # item : 所持品 # remodel_level : 強化レベル # n : 個数 # include_equip : 装備品も含めるか(省略可、省略時含めない) #-------------------------------------------------------------------------- def remove_remodel_item(item, remodel_level, n, include_equip = false) return 0 if item.is_a?(RPG::Item) and item.valuables? #- 貴重品の場合 result = 0 for actor in members break if n.abs == result address = actor.carry_item_hold_address_remodel(item, remodel_level) next if address.empty? for index in address.reverse break if n.abs == result break unless actor.remove_item_index(index) result += 1 end actor.carry_items_refresh end if bag_can_use? address = carry_item_hold_address_remodel(item, remodel_level) unless address.empty? for index in address.reverse break if n.abs == result break unless remove_item_index(index) result += 1 end end end if include_equip for actor in members break if n.abs == result address = actor.carry_item_hold_address_remodel(item, remodel_level, true) next if address.empty? for index in address.reverse break if n.abs == result break unless actor.remove_item_index(index, true) result += 1 end actor.carry_items_refresh end end return result end #-------------------------------------------------------------------------- # ○ 指定強化アイテムの所持数取得(パーティー全体) # item : アイテム # remodel_level : 強化レベル # include_equip : 装備品も含める #-------------------------------------------------------------------------- def item_number_remodel(item, remodel_level, include_equip = false) number = 0 for actor in members number += actor.carry_item_number_remodel(item, remodel_level, include_equip) end if bag_can_use? number += $game_party.carry_item_number_remodel(item, remodel_level) end return number end #-------------------------------------------------------------------------- # ○ 指定強化アイテムの所持判定(パーティー全体) # item : アイテム # remodel_level : 強化レベル # include_equip : 装備品も含める #-------------------------------------------------------------------------- def has_item_remodel?(item, remodel_level, include_equip = false) return item_number_remodel(item, remodel_level, include_equip) > 0 end #-------------------------------------------------------------------------- # ○ 指定強化アイテムを所持するアクターをID配列で取得 # item : アイテム # remodel_level : 強化レベル # include_equip : 装備品も含める #-------------------------------------------------------------------------- def item_remodel_holder(item, remodel_level, include_equip = false) if item.is_a?(RPG::Item) and item.valuables? return [-1] if $game_party.has_item?(item) end result = [] for actor in members if actor.carrying_item_remodel?(item, remodel_level, include_equip) result.push(actor.id) end end if $game_party.bag_can_use? if $game_party.carrying_item_remodel?(item, remodel_level) result.push(0) end end return result end end #============================================================================== # □ Window_Actor_Item #------------------------------------------------------------------------------ #  アクターの所持アイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_Actor_Item < Window_Selectable #-------------------------------------------------------------------------- # ◎ 不透明度取得 #-------------------------------------------------------------------------- alias tig_ais_ir_item_enabled item_enabled def item_enabled(mode, index) enabled = tig_ais_ir_item_enabled(mode, index) if mode == "remodel" enabled = false unless @actor.item_can_remodel?(index) enabled = false unless $game_temp.shop_handling?(@actor.carry_item(index)) end return enabled end #-------------------------------------------------------------------------- # ○ 不透明度表示モード変更(強化) #-------------------------------------------------------------------------- def fixation_mode_remodel @fixation_mode = "remodel" refresh end #-------------------------------------------------------------------------- # ◎ ヘルプテキスト生成 #-------------------------------------------------------------------------- alias tig_ais_ir_create_help_text create_help_text def create_help_text(text) if @actor.carry_items_data[@index]["remodel"] remodel_level = @actor.carry_items_data[@index]["remodel"] help = @actor.carry_item(@index).remodel_help(remodel_level) return tig_ais_ir_create_help_text(help) if help end return tig_ais_ir_create_help_text(text) end end #============================================================================== # □ Window_AIS_Shop_Command #------------------------------------------------------------------------------ #  アクター毎アイテムのコマンドウインドウです。 #============================================================================== class Window_AIS_Shop_Command < Window_Transforms_Command #-------------------------------------------------------------------------- # ○ 定数(テキストカスタマイズ可能部分) #-------------------------------------------------------------------------- HELP_REMODEL_COMMAND = "アイテムを強化します。" HELP_REMODEL_COMMAND_CANOT = "強化することはできません。" #-------------------------------------------------------------------------- # ◎ 追加コマンド設定 #-------------------------------------------------------------------------- alias tig_ais_ir_additional_command_set additional_command_set unless $@ def additional_command_set tig_ais_ir_additional_command_set @commands.push(Actor_Item_Remodel::REMODEL_COMMAND) end #-------------------------------------------------------------------------- # ◎ 追加ヘルプテキスト設定(テキストカスタマイズ可能部分) #-------------------------------------------------------------------------- alias tig_ais_ir_additional_help_set additional_help_set unless $@ def additional_help_set tig_ais_ir_additional_help_set if $game_temp.remodel_variables > 0 and $game_variables[$game_temp.remodel_variables] <= 0 @help_text.push(HELP_REMODEL_COMMAND_CANOT) else @help_text.push(HELP_REMODEL_COMMAND) end end #-------------------------------------------------------------------------- # ◎ コマンド表示条件 #-------------------------------------------------------------------------- # このメソッド内の "強化" という用語部分は、 # 注釈による特殊ショップ項目指定の判別に使われる部分ですので、 # ここの部分の書き換えは推奨しません。 # (書き換えた場合、特殊ショップ: の後の用語もそれに対応させる必要が出ます) #-------------------------------------------------------------------------- alias tig_ais_ir_command_display? command_display? unless $@ def command_display?(command_number) case command_number when @commands.index(Actor_Item_Remodel::REMODEL_COMMAND) return $game_temp.ex_shop.key?("強化") end return tig_ais_ir_command_display?(command_number) end #-------------------------------------------------------------------------- # ◎ コマンド選択の条件 (内容は継承先で定義する) #-------------------------------------------------------------------------- alias tig_ais_ir_command_enabled? command_enabled? unless $@ def command_enabled?(command_number) case command_number when @commands.index(Actor_Item_Remodel::REMODEL_COMMAND) return false if $game_temp.remodel_variables > 0 and $game_variables[$game_temp.remodel_variables] <= 0 end return tig_ais_ir_command_enabled?(command_number) end end #============================================================================== # □ Window_Item_Remodel_Price #------------------------------------------------------------------------------ #  アクター毎アイテムの強化確認用ウインドウです。 #============================================================================== class Window_Item_Remodel_Price < Window_Selectable #-------------------------------------------------------------------------- # ○ 定数(テキストカスタマイズ可能部分) #-------------------------------------------------------------------------- REMODEL_PRICE = "強化費" NO_ITEM = "アイテムがありません" MAX_REMODEL = "これ以上の強化は出来ません" USED_REMODEL = "中古品の強化は出来ません" #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :item_index attr_reader :actor #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 240, WLH * 3 + 32) self.index = -1 self.active = false self.back_opacity = Actor_Item::CUSTOM_OPACITY_1 @item_index = 0 refresh end #-------------------------------------------------------------------------- # ○ アイテム情報のセット #-------------------------------------------------------------------------- def set_item(actor, item_index) @actor = actor @item_index = item_index refresh end #-------------------------------------------------------------------------- # ○ チャージ数 #-------------------------------------------------------------------------- def charge return @actor.carry_items_data[@item_index]["charge"] end #-------------------------------------------------------------------------- # ○ 強化時変化アイテム取得 #-------------------------------------------------------------------------- def remodeled_change_item(item) change_data = item.remodel_change return nil if change_data == nil case change_data[0] when 0 ; return $data_items[change_data[1]] when 1 ; return $data_weapons[change_data[1]] when 2 ; return $data_armors[change_data[1]] end return nil end #-------------------------------------------------------------------------- # ○ 強化費 # ※ アイテム強化費の計算式的な定義もこのメソッドが兼ねています。 # (ここで算出される価格を元に、強化時の所持金減少をしています) #-------------------------------------------------------------------------- def price if @actor.remodel_item?(@item_index) level = @actor.carry_items_data[@item_index]["remodel"] else level = 0 end level_max = @item.remodel_level level_max = 0 if level_max == nil change_item = remodeled_change_item(@item) if @item.remodel_price and @item.remodel_price[level] != nil # 強化価格の設定がある場合 value = remodel_price[level] ### 設定価格とする else # 強化価格の設定がない場合 value = @actor.carry_item_price(@item.price, @item_index) * 80 / 100 ### 現価格の価格の8割 end return value end #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear return if @actor == nil or @item_index < 0 @item = @actor.carry_item(@item_index) if @item == nil # アイテムが無い場合の記述 self.contents.font.color = system_color self.contents.draw_text(0, WLH, self.width - 32, WLH, NO_ITEM, 1) return elsif not @actor.item_can_remodel?(@item_index) or not $game_temp.shop_handling?(@item) # 強化出来ないアイテムの場合 draw_item_name_ais([@actor, @item_index], 0, 0, false) if @actor.item_max_remodel?(@item_index) # 最大強化状態の場合の記述 self.contents.font.color = system_color self.contents.draw_text(0, WLH * 2, self.width - 32, WLH, MAX_REMODEL, 1) elsif @actor.item_can_remodel?(@item_index, true) and @actor.item_need_charge?(@item_index) # 中古の場合の記述 self.contents.font.color = system_color self.contents.draw_text(0, WLH * 2, self.width - 32, WLH, USED_REMODEL, 1) end return end #- 強化対象アイテムの表示 draw_item_name_ais([@actor, @item_index], 0, 0, true) #- 強化後アイテムの表示 self.contents.font.color = system_color self.contents.draw_text(0, WLH, 22, WLH, ">>") temp_actor = @actor.clone temp_actor.make_clone temp_actor.remodel_item(@item_index) draw_item_name_ais([temp_actor, @item_index], 22, WLH, true) #- 強化費用の表示 self.contents.font.color = system_color self.contents.draw_text(0, WLH * 2, self.width - 32, WLH, REMODEL_PRICE) w = self.width - 32 cx = contents.text_size(Vocab::gold).width if cx <= 36 self.contents.draw_text(0, WLH * 2, w, WLH, Vocab::gold, 2) w -= ( cx + 2 ) end self.contents.font.color = normal_color self.contents.font.color.alpha = price <= $game_party.gold ? 255 : 128 self.contents.draw_text(0, WLH * 2, w, WLH, price, 2) end #-------------------------------------------------------------------------- # ○ カーソルの更新 #-------------------------------------------------------------------------- def update_cursor if @index < 0 self.cursor_rect.empty elsif @index == 0 self.cursor_rect.set(0, 0, self.width - 32, self.height - 32) end end end #============================================================================== # □ Window_Remodel_Frequency #------------------------------------------------------------------------------ #  アクター毎アイテムの、残り強化数を表示するウインドウです。 #============================================================================== class Window_Remodel_Frequency < Window_Selectable #-------------------------------------------------------------------------- # ○ 定数(テキストカスタマイズ可能部分) #-------------------------------------------------------------------------- REMODEL_FREQUENCY = "残り強化回数:" #-------------------------------------------------------------------------- # ○ オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 200, 56) self.opacity = 0 refresh end #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(0, 0, self.contents.width - 30, WLH, REMODEL_FREQUENCY, 2) self.contents.font.color = normal_color self.contents.draw_text(self.contents.width - 30, 0, 30, WLH, $game_variables[$game_temp.remodel_variables]) end end #============================================================================== # □ Scene_AIS_Shop #------------------------------------------------------------------------------ #  アクター毎アイテム用のショップ画面の処理を行うクラスです。 #============================================================================== class Scene_AIS_Shop < Scene_Base #-------------------------------------------------------------------------- # ○ 定数(テキストカスタマイズ可能部分) #-------------------------------------------------------------------------- HELP_REMODEL_MEMBER_CHOICES = "強化するアイテムを持つメンバーを選択します。" HELP_REMODEL_FINAL_REMINDER = "料金を支払いアイテムを強化します。" # ※ ウインドウの項目依存のヘルプ文はウインドウクラスで指定しています。 #-------------------------------------------------------------------------- # ◎ カーソル動作の更新 #-------------------------------------------------------------------------- alias tig_ais_ir_cursor_action_update cursor_action_update def cursor_action_update if @remodel_price_window != nil and @remodel_price_window.active @remodel_price_window.update update_remodel_item_confirmation else tig_ais_ir_cursor_action_update end end #-------------------------------------------------------------------------- # ○ 強化価格ウインドウ作成 #-------------------------------------------------------------------------- def create_remodel_price_window return if @remodel_price_window != nil @remodel_price_window = Window_Item_Remodel_Price.new(18, 124) end #-------------------------------------------------------------------------- # ○ 強化価格ウインドウ消去 #-------------------------------------------------------------------------- def remodel_price_window_dispose return if @remodel_price_window == nil @remodel_price_window.dispose @remodel_price_window = nil end #-------------------------------------------------------------------------- # ○ 残り強化回数ウインドウ作成 #-------------------------------------------------------------------------- def create_remodel_frequency_window return if @remodel_frequency_window != nil return if $game_temp.remodel_variables <= 0 return if $game_variables[$game_temp.remodel_variables] <= 0 @remodel_frequency_window = Window_Remodel_Frequency.new(190, 80) end #-------------------------------------------------------------------------- # ○ 残り強化回数ウインドウ消去 #-------------------------------------------------------------------------- def remodel_price_frequency_dispose return if @remodel_frequency_window == nil @remodel_frequency_window.dispose @remodel_frequency_window = nil end #-------------------------------------------------------------------------- # ◎ @pass_window 動作時の更新 #-------------------------------------------------------------------------- alias tig_ais_ir_pass_window_update pass_window_update def pass_window_update tig_ais_ir_pass_window_update case @command_window.select_item_name when Actor_Item_Remodel::REMODEL_COMMAND update_remodel_actor_selection end end #-------------------------------------------------------------------------- # ◎ @item_window 動作時の更新 #-------------------------------------------------------------------------- alias tig_ais_ir_item_window_update item_window_update def item_window_update tig_ais_ir_item_window_update case @command_window.select_item_name when Actor_Item_Remodel::REMODEL_COMMAND update_remodel_item_selection end end #-------------------------------------------------------------------------- # ◎ 取引内容選択コマンドの開始 #-------------------------------------------------------------------------- alias tig_ais_ir_start_command_selection start_command_selection def start_command_selection tig_ais_ir_start_command_selection remodel_price_window_dispose remodel_price_frequency_dispose end #-------------------------------------------------------------------------- # ◎ 取引内容選択コマンドの更新 #-------------------------------------------------------------------------- alias tig_ais_ir_update_command_selection update_command_selection def update_command_selection tig_ais_ir_update_command_selection if Input.trigger?(Input::C) case @command_window.select_item_name when Actor_Item_Remodel::REMODEL_COMMAND # 強化する if $game_temp.remodel_variables > 0 and $game_variables[$game_temp.remodel_variables] <= 0 Sound.play_buzzer else Sound.play_decision start_remodel_actor_selection end end end end #-------------------------------------------------------------------------- # ○ 強化アクター選択の開始 #-------------------------------------------------------------------------- def start_remodel_actor_selection @command_window.active = false @command_window.update_help @item_window.fixation_mode_remodel @item_window.visible = true @item_window.active = false @item_window.index = -1 @pass_window.x = @pass_window_left_x @pass_window.increase = false @pass_window.refresh @pass_window.visible = true @pass_window.active = true remodel_price_window_dispose create_remodel_frequency_window if $game_party.members.size == 1 and not $game_party.bag_can_use? @pass_window.index = -1 start_remodel_item_selection @remodel_price_window.set_item(@actor, 0) @item_window.index = 0 else @help_window.set_text(HELP_REMODEL_MEMBER_CHOICES) if HELP_REMODEL_MEMBER_CHOICES != "" end end #-------------------------------------------------------------------------- # ○ 強化アクター選択の更新 #-------------------------------------------------------------------------- def update_remodel_actor_selection if Input.trigger?(Input::B) Sound.play_cancel start_command_selection elsif Input.trigger?(Input::C) if @actor.carry_items_data.empty? Sound.play_buzzer else Sound.play_decision start_remodel_item_selection @remodel_price_window.set_item(@actor, 0) @item_window.index = 0 end elsif Input.trigger?(Input::R) unless @pass_window.index == -1 next_actor @pass_window.index = @actor_index end elsif Input.trigger?(Input::L) unless @pass_window.index == -1 prev_actor @pass_window.index = @actor_index end elsif @pass_window.index != -1 and @pass_window.index != @actor_index chenge_actor(@pass_window.index) end end #-------------------------------------------------------------------------- # ○ 強化アイテム選択の開始 #-------------------------------------------------------------------------- def start_remodel_item_selection @pass_window.active = false @item_window.active = true create_remodel_price_window dispose_remodel_analyze_windows @remodel_price_window.active = false @remodel_price_window.index = -1 end #-------------------------------------------------------------------------- # ○ 強化アイテム選択の更新 #-------------------------------------------------------------------------- def update_remodel_item_selection if @item_window.index != @remodel_price_window.item_index or @actor != @remodel_price_window.actor @remodel_price_window.set_item(@actor, @item_window.index) end if Input.trigger?(Input::B) Sound.play_cancel start_remodel_actor_selection start_command_selection if $game_party.members.size == 1 and not $game_party.bag_can_use? elsif Input.trigger?(Input::C) if @item_window.item == nil Sound.play_buzzer elsif @actor.item_can_remodel?(@item_window.index) and $game_temp.shop_handling?(@item_window.item) Sound.play_decision start_remodel_item_confirmation else Sound.play_buzzer end elsif Input.trigger?(Input::R) unless @pass_window.index == -1 next_actor @pass_window.index = @actor_index end elsif Input.trigger?(Input::L) unless @pass_window.index == -1 prev_actor @pass_window.index = @actor_index end end end #-------------------------------------------------------------------------- # ○ アイテム強化の決定確認の開始 #-------------------------------------------------------------------------- def start_remodel_item_confirmation create_remodel_analyze_windows @item_window.active = false @remodel_price_window.index = 0 @remodel_price_window.active = true @help_window.set_text(HELP_REMODEL_FINAL_REMINDER) if HELP_REMODEL_FINAL_REMINDER != "" end #-------------------------------------------------------------------------- # ○ 強化情報ウインドウの作成 #-------------------------------------------------------------------------- def create_remodel_analyze_windows return unless Actor_Item::USE_ITEM_ANALYZE @analyze_window_base = Window_Base.new(4, 236, 536, 152) @analyze_window_base.back_opacity = Actor_Item::CUSTOM_OPACITY_2 # ↑下記ウインドウをつなげる外枠描画のみをしています。 @analyze_window_after = Window_Actor_Item_Analyze.new(268, 236, @actor) @analyze_window_before = Window_Actor_Item_Analyze.new(4, 236, @actor) # ↑実際に情報を表示する二つのウインドウを作ります。 @analyze_window_before.contents = Bitmap.new(@analyze_window_before.width, @analyze_window_before.height-32) # ↑スクロール用の▽(右向き)を表示する為の処理です。 @analyze_window_after.opacity = 0 @analyze_window_before.opacity = 0 # ↑二つのウインドウバックと外枠を消しています。 @analyze_window_before.set_item_pos([@actor, @item_window.index]) # 強化前のアイテム情報を登録しています。 temp_actor = @actor.clone temp_actor.make_clone temp_actor.remodel_item(@item_window.index) @analyze_window_after.set_item_pos([temp_actor, @item_window.index]) # クローンを使用し強化後のアイテム準備し、情報を登録後しています。 end #-------------------------------------------------------------------------- # ○ 強化情報ウインドウの消去 #-------------------------------------------------------------------------- def dispose_remodel_analyze_windows return if @analyze_window_before == nil @analyze_window_before.dispose @analyze_window_before = nil @analyze_window_after.dispose @analyze_window_after = nil @analyze_window_base.dispose @analyze_window_base = nil end #-------------------------------------------------------------------------- # ○ アイテム強化の決定確認の更新 #-------------------------------------------------------------------------- def update_remodel_item_confirmation if Input.trigger?(Input::B) Sound.play_cancel start_remodel_item_selection elsif Input.trigger?(Input::C) if @remodel_price_window.price > $game_party.gold Sound.play_buzzer else Sound.play_shop dispose_remodel_analyze_windows $game_party.lose_gold(@remodel_price_window.price) @gold_window.refresh Graphics.wait(20) @item_window.window_animation(Actor_Item_Remodel::REMODEL_ANIMATION_ID, @item_window.cursor_rect) Graphics.wait(20) Sound.play_remodel @actor.remodel_item(@item_window.index) @item_window.refresh if @remodel_frequency_window != nil $game_variables[$game_temp.remodel_variables] -= 1 @remodel_frequency_window.refresh end Graphics.wait(45) 45.times do Input.update break if Input.trigger?(Input::C) or Input.trigger?(Input::B) Graphics.wait(1) end return interruption_remodel if remode_linterruption? @remodel_price_window.refresh start_remodel_item_selection end end end #-------------------------------------------------------------------------- # ○ 強化を中断するか? #-------------------------------------------------------------------------- def remode_linterruption? return true if $game_temp.remodel_variables < 0 return false if $game_temp.remodel_variables == 0 return true if $game_variables[$game_temp.remodel_variables] <= 0 return false end #-------------------------------------------------------------------------- # ○ 強化の中断 #-------------------------------------------------------------------------- def interruption_remodel start_remodel_item_selection start_command_selection if @command_window.item_max == 2 $scene = Scene_Map.new else @command_window.create_command @command_window.refresh end end end #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ○ 強化可否(最大強化レベル)取得 #-------------------------------------------------------------------------- def remodel_level if /^[<<]強化可能?[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]強化可能?[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ 強化名取得 #-------------------------------------------------------------------------- def remodel_name(level) level.downto(1) do |l| if/^[<<]強化名[((][LlLl]?[VvVv]?#{l}[))][::](\S+)[>>]/ =~ self.note return $1 end end if/^[<<]強化名[::](\S+)[>>]/ =~ self.note return $1 end return nil end #-------------------------------------------------------------------------- # ○ 強化時ヘルプ取得 #-------------------------------------------------------------------------- def remodel_help(level) level.downto(1) do |l| if/^[<<]強化時?ヘルプ文?[((][LlLl]?[VvVv]?#{l}[))][::](\S+)[>>]/ =~ self.note return $1 end end if/^[<<]強化時?ヘルプ文?[::](\S+)[>>]/ =~ self.note return $1 end return nil end #-------------------------------------------------------------------------- # ○ チャージ強化値取得 #-------------------------------------------------------------------------- def charge_remodel if /^[<<]チャージ強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ アイテム強化時変化 #-------------------------------------------------------------------------- def remodel_change if /^[<<]強化時変化[::](\d+)[,,]\s*(\d+)[>>]/ =~ self.note return [$1.to_i, $2.to_i] else return nil end end #-------------------------------------------------------------------------- # ○ 強化費(リスト) #-------------------------------------------------------------------------- def remodel_price price_data = self.note.scan(/[<<]強化費[::](.*?)[>>]/).flatten return nil if price_data.empty? price_list = [] price_data.each{|i|i.split(/\D+/).each{|j|price_list.push(j.to_i)}} return price_list end #-------------------------------------------------------------------------- # ○ 強化品ドロップオッズ #-------------------------------------------------------------------------- def remodel_odds odds_data = self.note.scan(/[<<]強化品オッズ[::](.*?)[>>]/).flatten return nil if odds_data.empty? odds = [] odds_data.each{|i|i.split(/\D+/).each{|j|odds.push(j.to_i)}} return odds end #-------------------------------------------------------------------------- # ○ 使用時装備解除(戦闘用) #-------------------------------------------------------------------------- def hide_remodel_level return true if /^[<<]強化レベル非表示[>>]/ =~ self.note return false end end #============================================================================== # ■ RPG::Weapon #============================================================================== class RPG::Weapon < RPG::BaseItem #-------------------------------------------------------------------------- # ○ 攻撃力強化値取得 #-------------------------------------------------------------------------- def atk_remodel if /^[<<]攻撃力?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ 防御力強化値取得 #-------------------------------------------------------------------------- def def_remodel if /^[<<]防御力?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ 精神力強化値取得 #-------------------------------------------------------------------------- def spi_remodel if /^[<<]精神力?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ 敏捷性強化値取得 #-------------------------------------------------------------------------- def agi_remodel if /^[<<]敏捷性?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ ターン内先制強化取得 #-------------------------------------------------------------------------- def fast_attack_remodel if /^[<<]ターン内先制強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]ターン内先制強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ 連続攻撃強化取得 #-------------------------------------------------------------------------- def dual_attack_remodel if /^[<<]連続攻撃強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]連続攻撃強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ クリティカル頻発強化取得 #-------------------------------------------------------------------------- def critical_bonus_remodel if /^[<<]クリティカル頻発強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]クリティカル頻発強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ 追加属性強化取得 #-------------------------------------------------------------------------- def element_set_remodel(remodel_level) result = [] datas = self.note.scan(/^[<<]属性[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[>>]/) datas.flatten.each{|data|result.push(data.to_i)} datas = self.note.scan(/^[<<]属性[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[::]\s*(\d+)[>>]/) for data in datas result.push(data[0].to_i) if data[1].to_i <= remodel_level end return result end #-------------------------------------------------------------------------- # ○ 追加付加ステート強化取得 #-------------------------------------------------------------------------- def state_set_remodel(remodel_level) result = [] datas = self.note.scan(/^[<<]ステート[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[>>]/) datas.flatten.each{|data|result.push(data.to_i)} datas = self.note.scan(/^[<<]ステート[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[::]\s*(\d+)[>>]/) for data in datas result.push(data[0].to_i) if data[1].to_i <= remodel_level end return result end end #============================================================================== # ■ RPG::Armor #============================================================================== class RPG::Armor < RPG::BaseItem #-------------------------------------------------------------------------- # ○ 攻撃力強化値取得 #-------------------------------------------------------------------------- def atk_remodel if /^[<<]攻撃力?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ 防御力強化値取得 #-------------------------------------------------------------------------- def def_remodel if /^[<<]防御力?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ 精神力強化値取得 #-------------------------------------------------------------------------- def spi_remodel if /^[<<]精神力?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ 敏捷性強化値取得 #-------------------------------------------------------------------------- def agi_remodel if /^[<<]敏捷性?強化値?[::](\d+)[>>]/ =~ self.note return $1.to_i else return nil end end #-------------------------------------------------------------------------- # ○ クリティカル防止強化取得 #-------------------------------------------------------------------------- def prevent_critical_remodel if /^[<<]クリティカル防止強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]クリティカル防止強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ 消費MP半分強化取得 #-------------------------------------------------------------------------- def half_mp_cost_remodel if /^[<<]消費[MM][PP]半分強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]消費[MM][PP]半分強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ 取得経験値2倍強化取得 #-------------------------------------------------------------------------- def double_exp_gain_remodel if /^[<<]取得経験値[22]倍強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<]取得経験値[22]倍強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ HP自動回復強化取得 #-------------------------------------------------------------------------- def auto_hp_recover_remodel if /^[<<][HH][PP]自動回復強化[LlLl]?[VvVv]?[::>>]/ =~ self.note if /^[<<][HH][PP]自動回復強化[LlLl]?[VvVv]?[::](\d+)[>>]/ =~ self.note return $1.to_i else return 1 end else return nil end end #-------------------------------------------------------------------------- # ○ 追加属性強化取得 #-------------------------------------------------------------------------- def element_set_remodel(remodel_level) result = [] datas = self.note.scan(/^[<<]属性[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[>>]/) datas.flatten.each{|data|result.push(data.to_i)} datas = self.note.scan(/^[<<]属性[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[::]\s*(\d+)[>>]/) for data in datas result.push(data[0].to_i) if data[1].to_i <= remodel_level end return result end #-------------------------------------------------------------------------- # ○ 追加付加ステート強化取得 #-------------------------------------------------------------------------- def state_set_remodel(remodel_level) result = [] datas = self.note.scan(/^[<<]ステート[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[>>]/) datas.flatten.each{|data|result.push(data.to_i)} datas = self.note.scan(/^[<<]ステート[\[[](\d+)[\]]]強化[LlLl]?[VvVv]?[::]\s*(\d+)[>>]/) for data in datas result.push(data[0].to_i) if data[1].to_i <= remodel_level end return result end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ◎ クリア #-------------------------------------------------------------------------- alias tig_ais_ir_clear clear def clear tig_ais_ir_clear $game_temp.shop_remodel_level = nil # ショップでの強化可能最大レベル初期化 $game_temp.remodel_variables = Actor_Item_Remodel::REMODEL_VARIABLES # 残り強化回数変数初期化 end #-------------------------------------------------------------------------- # ◎ 特殊ショップリスト作成 #-------------------------------------------------------------------------- alias tig_ais_ir_make_ex_shop_list make_ex_shop_list def make_ex_shop_list(text) tig_ais_ir_make_ex_shop_list(text) $game_temp.ex_shop["強化"] = true if /強化/ =~ text end #-------------------------------------------------------------------------- # ◎ 注釈使用オプション #-------------------------------------------------------------------------- alias tig_ais_ir_annotation_option_ais annotation_option_ais def annotation_option_ais(text) if /\A強化レベル[::](\d+)/ =~ text $game_temp.shop_remodel_level = $1.to_i elsif /\A強化レベル初期化/ =~ text $game_temp.shop_remodel_level = nil elsif /\A強化回数の参照変数[::](\d+)/ =~ text $game_temp.remodel_variables = $1.to_i elsif /\A強化回数の参照変数[::]-(\d+)/ =~ text $game_temp.remodel_variables = 0 - $1.to_i elsif /\A強化回数の参照変数初期化/ =~ text $game_temp.remodel_variables = Actor_Item_Remodel::REMODEL_VARIABLES end tig_ais_ir_annotation_option_ais(text) end #-------------------------------------------------------------------------- # ○ パーティーが強化可能なアイテムを持っているか? #-------------------------------------------------------------------------- def party_has_remodel_item? for actor in $game_party.members for index in 0...actor.carry_items_data.size next unless $game_temp.shop_handling?(actor.carry_item(index)) return true if actor.item_can_remodel?(index) end end if $game_party.bag_can_use? for index in 0...$game_party.carry_items_data.size next unless $game_temp.shop_handling?($game_party.carry_item(index)) return true if $game_party.item_can_remodel?(index) end end return false end #-------------------------------------------------------------------------- # ○ アクターの部位を指定して装備を強化する # actor_id : アクターID # equip_type : 装備部位 # value : 強化回数(省略可、省略時1回) #-------------------------------------------------------------------------- def actor_equip_remodel(actor_id, equip_type, value = 1) actor = $game_actors[actor_id] index = actor.equip_item_index(equip_type) return if index == nil value.times{actor.remodel_item(index)} end #-------------------------------------------------------------------------- # ○ 強化された所持品の減少 # ※ いくつ減少できたか、を結果として返す。 # item : 所持品 # remodel_level : 強化レベル # n : 個数 # include_equip : 装備品も含めるか(省略可、省略時含めない) #-------------------------------------------------------------------------- def remove_remodel_item(item, remodel_level, n, include_equip = false) return $game_party.remove_remodel_item(item, n, remodel_level, include_equip) end end