#============================================================================== # ■ RGSS3 敵レベル設定 Ver1.04 by 星潟 #------------------------------------------------------------------------------ # 敵のレベルを設定します。 # メモ欄を用いた直接指定する方式と # 各能力値を参照してレベルを自動算出する方式の2つを利用できます。 # 敵のレベルは$game_troop.members[敵グループ内ID].levelで取得できます。 # (敵グループ内IDは、通常は0〜7です) # 戦闘計算式で用いる場合は、a.levelやb.level等での記述が有効です。 #------------------------------------------------------------------------------ # ★直接指定する場合の例(エネミーのメモ欄に記述) # # <レベル:50> # # この敵のレベルは50となります。 #------------------------------------------------------------------------------ # Ver1.01 レベルを直接指定した際、エラー落ちしていた不具合を修正しました。 # Ver1.02 変身時にレベルが変化しない不具合を修正しました。 # 自動算出の際に小数点以下の値を考慮して計算する機能を追加しました。 # また、軽量化を施しました。 # Ver1.03 キャッシュ化による軽量化を施しました。 # Ver1.04 キャッシュ化による軽量化を更に改善しました。 #============================================================================== module LVP_SET #敵レベルの上限を設定します。 LEVEL_MAX = 99 #敵レベルの下限を設定します。 LEVEL_MIN = 1 #敵レベルを直接指定する場合の設定用ワードを設定します。 WORD = "レベル" #敵レベルを自動算出する場合に用いる能力値を数字で指定します。 #なお、数字に対応する能力値は以下の通りです。 #0 => 最大HP #1 => 最大MP #2 => 攻撃力 #3 => 防御力 #4 => 魔法力 #5 => 魔法防御 #6 => 敏捷性 #7 => 運 LEVEL_P = [2,3,4,5,6,7] #自動算出の際、該当能力がレベルに与える影響度を #小数点以下の値まで計算するか?(より精密なレベルの値になります) #true => 小数点以下まで計算 / false => 常に整数で計算 TO_F = false #空の配列を用意。 ARRAY = [] #最大HPいくつ分を1レベルとするかを設定します。 ARRAY[0] = 500 #最大MPいくつ分を1レベルとするかを設定します。 ARRAY[1] = 100 #攻撃力いくつ分を1レベルとするかを設定します。 ARRAY[2] = 25 #防御力いくつ分を1レベルとするかを設定します。 ARRAY[3] = 25 #魔法力いくつ分を1レベルとするかを設定します。 ARRAY[4] = 25 #魔法防御いくつ分を1レベルとするかを設定します。 ARRAY[5] = 25 #敏捷性いくつ分を1レベルとするかを設定します。 ARRAY[6] = 25 #運いくつ分を1レベルとするかを設定します。 ARRAY[7] = 25 end class Game_Enemy < Game_Battler attr_reader :level #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- alias initialize_lvset initialize def initialize(index, enemy_id) #本来の処理を実行。 initialize_lvset(index, enemy_id) #レベル設定を行う。 level_set end #-------------------------------------------------------------------------- # 変身 #-------------------------------------------------------------------------- alias transform_lvset transform def transform(enemy_id) #本来の処理を実行。 transform_lvset(enemy_id) #レベル設定を行う。 level_set end #-------------------------------------------------------------------------- # レベル設定 #-------------------------------------------------------------------------- def level_set #メモ欄からデータを取得。 #取得できない場合はステータス依存のレベル設定を行う。 r= !enemy.level_data.empty? ? eval(enemy.level_data) : status_level_set #レベル下限を反映。 r = LVP_SET::LEVEL_MIN if r < LVP_SET::LEVEL_MIN #レベル上限を反映。 r = LVP_SET::LEVEL_MAX if r > LVP_SET::LEVEL_MAX #レベルの値を設定する。 @level = r end #-------------------------------------------------------------------------- # ステータス依存のレベル設定 #-------------------------------------------------------------------------- def status_level_set #各能力別にレベル影響度を取得し、レベルとしてまとめる。 level = LVP_SET::LEVEL_P.inject(0) {|r, n| r += param_level_data(n)} #レベルを返す。 level.to_i end #-------------------------------------------------------------------------- # ステータス別のレベルへの影響度 #-------------------------------------------------------------------------- def param_level_data(number) #小数点以下の値まで求めるか否かで分岐して処理。 (LVP_SET::TO_F ? param_base(number).to_f : param_base(number)) / LVP_SET::ARRAY[number] end end class RPG::Enemy < RPG::BaseItem #-------------------------------------------------------------------------- # レベルデータ #-------------------------------------------------------------------------- def level_data #メモ欄からデータを取得。 @level_data ||= /<#{LVP_SET::WORD}[::](\S+)>/ =~ note ? $1.to_s : "" end end