268 lines
No EOL
14 KiB
Ruby
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 |