=begin #============================================================================== [名前] 使用効果リストの拡張補助 [作者] 焼きノリ [配布元] まったりツクール雑貨 http://mata-tuku.ldblog.jp/ #------------------------------------------------------------------------------ [更新履歴] ・2014/03/05 公開 ・2014/03/28 extend することで問題があったため削除 ・2014/04/04 必須スクリプトが不要になりました ・2014/04/06 デフォルトの使用効果の適用処理をサポート ・2014/07/19 拡張使用効果リストの取得処理の修正 ・2014/11/27 HP,MPの回復時の割合と固定値が逆になっていたものを修正 ・2014/11/27 TP増加が機能していなかったので修正 #============================================================================== #------------------------------------------------------------------------------ [対応] ・RGSS3のみ可能 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ [機能] ・使用効果リスト追加の制作補助目的のため、 このスクリプトの初期状態の単体では、ほとんど意味が無いものだと思いますが、 デフォルトで用意されている使用効果を、メモから適用する最低限の処理を 追加したので、これを参考に各個人で拡張できるかと思います。 ・RPG::UsableItem をスーパークラスに持つ 「スキル、アイテム」 の使用効果を、メモから取得して追加する機能があります。 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ [使用方法] ・メモ帳に記述することで以下の使用効果が適用可能です。 <対象効果: HP回復: 0%: 300p> <対象効果: MP回復: 50%: 0p> <対象効果: TP増加: 10p> <対象効果: 付加: State[0]: 100%> # 100% で 通常攻撃のステート を付加 <対象効果: 解除: State[1]: 50%> # 50% で 戦闘不能 を解除 <対象効果: 付加: Buff[0]: 5ターン> # 最大HP を 5ターン 強化 <対象効果: 付加: Debuff[0]: 5ターン> # 最大HP を 5ターン 弱体 <対象効果: 解除: Buff[0]> # 最大HP の強化を解除 <対象効果: 解除: Debuff[0]> # 最大HP の弱体を解除 <対象効果: 特殊効果: 逃げる> # 逃げる <対象効果: 成長: Param[7]: 777p> # 運 を 777p 成長 させる <対象効果: スキル習得: Skill[51]> # スキルID:51 のスキルを習得 <コモンイベント: Common[1]> # ID:1 のコモンイベントを実行 ・このスクリプトの ExEffects.code, ExEffects.data_id, ExEffects.table に 直接記述していくかもしくは、この機能を使用したいスクリプト内で随時、 上記のメソッドをエイリアスしていくのが理想? ・拡張使用効果リストテーブルメソッドに、以下のフォーマットで追加していきます。 [正規表現, 使用効果コード, データID, 設定値1, 設定値2] ・このように追加するだけで、特徴リストに追加できます。 ・データIDと設定値は eval で評価するので、文字列にも対応しています。 ・データIDの評価が整数でない場合は 0 になるので注意してください。 ・変数 a には、正規表現のマッチした情報の配列が格納されているので、 "a[1].to_i"と記述しておけば、最初にマッチした文字列を 数値に変換して返すことができます。 ・上記の正規表現を満たす文字列をメモ欄に記述することで、使用効果が追加されます。 #------------------------------------------------------------------------------ [再定義箇所] ・なし #------------------------------------------------------------------------------ [○ : 新規定義, ◎ : エイリアス定義, ● : 再定義] #------------------------------------------------------------------------------ =end $YkNr_Scripts ||= {} $YkNr_Scripts[:ExEffects] = true #※このスクリプトを使用しない場合は、↑を false にすること if $YkNr_Scripts[:ExEffects] #============================================================================== # ■ ExEffects #------------------------------------------------------------------------------ # メモから使用効果の情報を取得するためのモジュールです。 #============================================================================== module ExEffects; end; class << ExEffects #-------------------------------------------------------------------------- # ○ 定数(使用効果の正規表現の文字列) # "pattern" は、内部で "対象効果" に置換されます。 #-------------------------------------------------------------------------- StrRexRecoverHP = "" StrRexRecoverMP = "" StrRexGainTP = "" StrRexAddState = "" StrRexRemoveState = "" StrRexAddBuff = "" StrRexAddDebuff = "" StrRexRemoveBuff = "" StrRexRemoveDebuff = "" StrRexSpecial = "" StrRexGrow = "" StrRexLearnSkill = "" StrRexCommonEvent = "<コモンイベント: Common\\[(\\d+)\\]>" #-------------------------------------------------------------------------- # ○ 使用効果コードリスト # 定数名が長いのでここでシンボルで取得できるようにします。 #-------------------------------------------------------------------------- def code b = Game_Battler _code = {} _code[:RECOVER_HP ] = b::EFFECT_RECOVER_HP # HP 回復 _code[:RECOVER_MP ] = b::EFFECT_RECOVER_MP # MP 回復 _code[:GAIN_TP ] = b::EFFECT_GAIN_TP # TP 増加 _code[:ADD_STATE ] = b::EFFECT_ADD_STATE # ステート付加 _code[:REMOVE_STATE ] = b::EFFECT_REMOVE_STATE # ステート解除 _code[:ADD_BUFF ] = b::EFFECT_ADD_BUFF # 能力強化 _code[:ADD_DEBUFF ] = b::EFFECT_ADD_DEBUFF # 能力弱体 _code[:REMOVE_BUFF ] = b::EFFECT_REMOVE_BUFF # 能力強化の解除 _code[:REMOVE_DEBUFF] = b::EFFECT_REMOVE_DEBUFF # 能力弱体の解除 _code[:SPECIAL ] = b::EFFECT_SPECIAL # 特殊効果 _code[:GROW ] = b::EFFECT_GROW # 成長 _code[:LEARN_SKILL ] = b::EFFECT_LEARN_SKILL # スキル習得 _code[:COMMON_EVENT ] = b::EFFECT_COMMON_EVENT # コモンイベント _code end #-------------------------------------------------------------------------- # ○ 使用効果データIDリスト # 定数名が長いのでここでは文字列で取得できるようにします。 #-------------------------------------------------------------------------- def data_id b = Game_Battler _data_id = {} _data_id["逃げる"] = b::SPECIAL_EFFECT_ESCAPE # 逃げる _data_id end #-------------------------------------------------------------------------- # ○ 拡張使用効果リストテーブル # 使用効果を増やすのであればここに記述していきます。 # pattern : 適用対象の文字列 #-------------------------------------------------------------------------- def table(code, data_id, pattern) [ struct_recover(pattern, StrRexRecoverHP, code[:RECOVER_HP]), struct_recover(pattern, StrRexRecoverMP, code[:RECOVER_MP]), struct_gain(pattern, StrRexGainTP, code[:GAIN_TP]), struct_state(pattern, StrRexAddState, code[:ADD_STATE]), struct_state(pattern, StrRexRemoveState, code[:REMOVE_STATE]), struct_params(pattern, StrRexAddBuff, code[:ADD_BUFF]), struct_params(pattern, StrRexAddDebuff, code[:ADD_DEBUFF]), struct_remove_params(pattern, StrRexRemoveBuff, code[:REMOVE_BUFF]), struct_remove_params(pattern, StrRexRemoveDebuff, code[:REMOVE_DEBUFF]), struct_special(pattern, StrRexSpecial, code[:SPECIAL]), struct_params(pattern, StrRexGrow, code[:GROW]), struct_skill(pattern, StrRexLearnSkill, code[:LEARN_SKILL]), struct_event(pattern, StrRexCommonEvent, code[:COMMON_EVENT]), ] end #-------------------------------------------------------------------------- # ○ 要素を構成 #-------------------------------------------------------------------------- def struct(pattern, str_rex, code, data_id, v1, v2) [/#{ str_rex.sub(/pattern/){pattern} }/, code, data_id, v1, v2] end #-------------------------------------------------------------------------- # ○ 回復の要素を構成 #-------------------------------------------------------------------------- def struct_recover(pattern, str_rex, code) struct(pattern, str_rex, code, 0, "a[1].to_i * 0.01", "a[2].to_i") end #-------------------------------------------------------------------------- # ○ TP増加の要素を構成 #-------------------------------------------------------------------------- def struct_gain(pattern, str_rex, code) struct(pattern, str_rex, code, 0, "a[1].to_i", 0) end #-------------------------------------------------------------------------- # ○ ステートの要素を構成 #-------------------------------------------------------------------------- def struct_state(pattern, str_rex, code) struct(pattern, str_rex, code, "a[1].to_i", "a[2].to_i * 0.01", 0) end #-------------------------------------------------------------------------- # ○ 能力値の要素を構成 #-------------------------------------------------------------------------- def struct_params(pattern, str_rex, code) struct(pattern, str_rex, code, "a[1].to_i", "a[2].to_i", 0) end #-------------------------------------------------------------------------- # ○ 能力値解除の要素を構成 #-------------------------------------------------------------------------- def struct_remove_params(pattern, str_rex, code) struct(pattern, str_rex, code, "a[1].to_i", 0, 0) end #-------------------------------------------------------------------------- # ○ 特殊効果の要素を構成 #-------------------------------------------------------------------------- def struct_special(pattern, str_rex, code) struct(pattern, str_rex, code, "data_id[a[1]]", 0, 0) end #-------------------------------------------------------------------------- # ○ スキルの要素を構成 #-------------------------------------------------------------------------- def struct_skill(pattern, str_rex, code) struct(pattern, str_rex, code, "a[1].to_i", 0, 0) end #-------------------------------------------------------------------------- # ○ コモンイベントの要素を構成 #-------------------------------------------------------------------------- def struct_event(pattern, str_rex, code) struct(pattern, str_rex, code, "a[1].to_i", 0, 0) end #-------------------------------------------------------------------------- # ○ アイテムのメモから拡張使用効果リストの取得 #-------------------------------------------------------------------------- def get(base_item, pattern) effects = [] klass, code, data_id = RPG::UsableItem::Effect, self.code, self.data_id base_item.note.each_line do |line| table(code, data_id, pattern).each do |list| if list[0] =~ line temp = $~.to_a ef_code = list[1] ef_data_id = parse_data_id(code, data_id,list[2], temp) ef_v1 = parse_value(code, data_id,list[3], temp) ef_v2 = parse_value(code, data_id,list[4], temp) effects.push( klass.new(ef_code, ef_data_id, ef_v1, ef_v2) ) end end end effects end #-------------------------------------------------------------------------- # ○ データIDの取得 #-------------------------------------------------------------------------- def parse_data_id(code, data_id, ef_data_id, a) id = eval(ef_data_id.to_s) rescue 0 id.is_a?(Integer) ? id : 0 end #-------------------------------------------------------------------------- # ○ 設定値の取得 # a : $&, $1, $2, ... を格納した配列 #-------------------------------------------------------------------------- def parse_value(code, data_id, ef_value, a) result = eval(ef_value.to_s) rescue ef_value.nil? ? 0 : ef_value result.nil? ? 0 : result end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem #-------------------------------------------------------------------------- # ○ 使用効果リスト #-------------------------------------------------------------------------- def effects @effects + ex_effects end #-------------------------------------------------------------------------- # ○ 拡張:使用効果リスト #-------------------------------------------------------------------------- def ex_effects @ex_effects ||= ExEffects.get(self, "対象効果") end end end # $YkNr_Scripts