206 lines
No EOL
6.8 KiB
Ruby
206 lines
No EOL
6.8 KiB
Ruby
#==============================================================================
|
||
# ■ 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 |