rebf-gaiden/Scripts/_Ver1_00a_by_.rb
2025-04-26 17:06:34 -05:00

206 lines
No EOL
6.8 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ RGSS3 条件特徴 Ver1.00a by 星潟
#------------------------------------------------------------------------------
# 特定の条件を満たす事で、特定の職業の特徴を自分の特徴として機能させる
# 特殊な特徴を作成する事が可能になります。
#------------------------------------------------------------------------------
# 最初の項目で職業IDを指定し、それ以降の項目をそれぞれ
# スクリプト条件式と見なし、全ての条件を満たす場合に
# 該当する職業IDを自分の特徴として扱います。
#------------------------------------------------------------------------------
# ※設定例で必要そうな項目は大体網羅していると思いますが
# ある程度のスクリプトに対する理解がなければ
# 使用するのは難しい可能性がある上
# ちょっとした設定ミスで簡単にエラーを吐きます。
#
# 例えば、特徴から能力値を算出する
# 最大HP/最大MP/攻撃力等の能力値や属性耐性値等を対象にすると
# スタックエラーを引き起こします。
# 逆に、特徴による変動が発生しない能力値現在HPや現在MP
# その他、参照可能かつ特徴が影響しない項目であれば問題ありません。
#------------------------------------------------------------------------------
# ★設定例色々
# アクター/職業/エネミー/武器/防具/ステート等の
# 元々特徴を有する項目のメモ欄を用います。
#
# ☆例1
# <条件特徴:11,equips.include?($data_weapons[1]),equips.include?($data_armors[1])>
# この場合、武器ID1と防具ID1を装備している場合
# 職業ID11の特徴を得る。
#
# ☆例2
# <条件特徴:12,self.actor?,self.id==2>
# この場合、自分がアクターID2のアクターの場合
# 職業ID12の特徴を得る。
#
# ☆例3
# <条件特徴:13,self.state?(2)>
# この場合、自分がステートID2にかかっている時
# 職業ID13の特徴を得る。
#
# ☆例4
# <条件特徴:14,equips.include?($data_armors[6]),equips.include?($data_armors[7]),equips.include?($data_armors[8])>
# この場合、自分が防具ID6、防具ID7、防具ID8を装備している時
# 職業ID14の特徴を得る。
#
# ☆例5
# <条件特徴:15,self.hp<100>
# この場合、自分のHPが100より低い場合
# 職業ID15の特徴を得る。
#
# ☆例6
# <条件特徴:16,SceneManager.scene_is?(Scene_Battle)>
# この場合、戦闘時のみ
# 職業ID16の特徴を得る。
#
# ☆例7
# <条件特徴:17,!SceneManager.scene_is?(Scene_Battle)>
# この場合、戦闘時以外
# 職業ID17の特徴を得る。
#
# ☆例8
# <条件特徴:18,$game_switches[1]>
# この場合、スイッチID1がONの時
# 職業ID18の特徴を得る。
#
# ☆例9
# <条件特徴:19,$game_party.members.include?($game_actors[2])>
# この場合、アクターID2のキャラが仲間にいる時
# 職業ID19の特徴を得る。
#
# ☆例10
# <条件特徴:20,equips.compact.empty?>
# この場合、自分が何も装備していない時
# 職業ID20の特徴を得る。
#
# ☆例11
# <条件特徴:21,SceneManager.scene_is?(Scene_Battle),$game_party.alive_members.size==1,alive?>
# この場合、戦闘中、生存している味方が自分一人だけの場合に
# 職業ID21の特徴を得る。
#
# ☆例12
# <条件特徴:22,$game_variables[1]>0>
# この場合、変数ID1が0より大きい場合
# 職業ID22の特徴を得る。
#------------------------------------------------------------------------------
# Ver1.00a 説明文を少し追加
#==============================================================================
module CBONUS
WORD = "条件特徴"
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# 特徴を有する項目を取得
#--------------------------------------------------------------------------
alias feature_objects_cbonus feature_objects
def feature_objects
#本来の処理を実行。
fo = feature_objects_cbonus
#空の配列を準備。
c_bonus = []
#特徴別に処理。
fo.each {|f|
#条件ボーナス別に処理。
f.c_bonus.each {|cb|
#条件に合致した条件ボーナスの職業データを配列に加える。
c_bonus.push(cb[0]) if cb_check(cb[1])
}
}
#特徴と条件ボーナスの職業を合わせて返す。
fo + c_bonus
end
def cb_check(cb_data)
begin
cb_data.each {|data| return false if !eval(data)}
rescue
return false
end
true
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# 特徴を有する項目を取得
#--------------------------------------------------------------------------
alias feature_objects_cbonus feature_objects
def feature_objects
#本来の処理を実行。
fo = feature_objects_cbonus
#空の配列を準備。
c_bonus = []
#特徴別に処理。
fo.each {|f|
#条件ボーナス別に処理。
f.c_bonus.each {|cb|
#条件に合致した条件ボーナスの職業データを配列に加える。
c_bonus.push(cb[0]) if cb_check(cb[1])
}
}
#特徴と条件ボーナスの職業を合わせて返す。
fo + c_bonus
end
def cb_check(cb_data)
cb_data.each {|data| return false if !eval(data)}
true
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# 条件ボーナス
#--------------------------------------------------------------------------
def c_bonus
#キャッシュがある場合はキャッシュを返す。
return @c_bonus if @c_bonus != nil
#条件ボーナス配列を作成。
@c_bonus = []
#メモ欄の行別に処理し、条件ボーナスデータを取得。
self.note.each_line {|l|
data = l.scan(/<#{CBONUS::WORD}[:](\S+)>/).flatten
if data != nil && !data.empty?
data = data[0].split(/\s*,\s*/)
next if data.size < 2
condition_data = [$data_classes[data.shift.to_i]]
condition_data.push(data)
@c_bonus.push(condition_data)
end
}
#データを返す。
@c_bonus
end
end