sacred-ritual-academy/Scripts/_.1.rb
2025-03-18 19:45:34 -05:00

268 lines
No EOL
14 KiB
Ruby

=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 = "<pattern: HP回復: (-?\\d+)%: (-?\\d+)p>"
StrRexRecoverMP = "<pattern: MP回復: (-?\\d+)%: (-?\\d+)p>"
StrRexGainTP = "<pattern: TP増加: (\\d+)p>"
StrRexAddState = "<pattern: 付加: State\\[(\\d+)\\]: (\\d+)%>"
StrRexRemoveState = "<pattern: 解除: State\\[(\\d+)\\]: (\\d+)%>"
StrRexAddBuff = "<pattern: 付加: Buff\\[(\\d+)\\]: (\\d+)ターン>"
StrRexAddDebuff = "<pattern: 付加: Debuff\\[(\\d+)\\]: (\\d+)ターン>"
StrRexRemoveBuff = "<pattern: 解除: Buff\\[(\\d+)\\]>"
StrRexRemoveDebuff = "<pattern: 解除: Debuff\\[(\\d+)\\]>"
StrRexSpecial = "<pattern: 特殊効果: (.+?)>"
StrRexGrow = "<pattern: 成長: Param\\[(\\d+)\\]: (\\d+)p>"
StrRexLearnSkill = "<pattern: スキル習得: Skill\\[(\\d+)\\]>"
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