#============================================================================== # □ 敵レベル実装 (for VX Ace) #------------------------------------------------------------------------------ # Version : 1_20120521 # by サリサ・タイクーン # http://www.tycoon812.com/rgss/ #============================================================================== #============================================================================== # □ 素材スイッチ #============================================================================== $rgsslab = {} if $rgsslab == nil $rgsslab["敵レベル実装"] = true if $rgsslab["敵レベル実装"] #============================================================================== # □ カスタマイズポイント #============================================================================== module RGSSLAB end module RGSSLAB::Enemy_Level #-------------------------------------------------------------------------- # ○ レベルタイプの設定 # 敵のレベル設定の方法を指定します。 # (後からイベントコマンドのスクリプトで変更可能です) # # "個別指定" # 敵レベル実装・個別指定のLISTから # 取得して設定する方法です。 # (併用していない場合は、全て1になります) # ---------------------------------------------------------------------- # "平均" # パーティメンバーの平均(少数切捨て)が # 敵のレベルとして設定されます。 # ---------------------------------------------------------------------- # "最大" # 今現在のパーティメンバーの最も高いレベルが # 敵のレベルとして設定されます。 # ---------------------------------------------------------------------- # "最小" # 今現在のパーティメンバーの最も低いレベルが # 敵のレベルとして設定されます。 # ---------------------------------------------------------------------- # "ランダム" # ランダムにレベルが設定されます。 # (敵のレベルの最大値よりも超える事はありません) # ---------------------------------------------------------------------- # "無効" # このタイプである限り # 敵のレベルが強制的に1になります。 # (この素材に対しての設定まで全て無効になる訳ではありません) # ---------------------------------------------------------------------- # "固定" # $game_system.rgsslab033.fixの値で # 敵のレベルが設定されます。 # ($game_system.rgsslab033.fixの値は、最初1で設定されています) # ---------------------------------------------------------------------- # 上記以外のものにした場合は、全て1として設定されます。 # # ・イベントコマンドのスクリプトで、固定の値を変更する方法 # $game_system.rgsslab033.fix = 値 #-------------------------------------------------------------------------- TYPE = "個別指定" #-------------------------------------------------------------------------- # ○ 敵のレベルの最大値 # 敵のレベルの最大値を設定します。 # # ・イベントコマンドのスクリプトでの変更方法 # $game_troop.max_level = 値 #-------------------------------------------------------------------------- MAX_LEVEL = 100 #-------------------------------------------------------------------------- # ○ レベル表示の描画許可フラグ # trueにすると、敵の名前の後ろにレベルが描画されるようになります。 # # イベントコマンドのスクリプトで、この機能の切替ができます。 # # ・イベントコマンドのスクリプトでの変更方法 # $game_system.rgsslab033.name_flag = true/false #-------------------------------------------------------------------------- NAME_FLAG = true #-------------------------------------------------------------------------- # ○ レベル表示 # 敵の名前の後ろにレベルの文字列を描画する文字列を設定します。 # (当然、レベル表示の描画許可フラグが有効でなければ描画されません) #-------------------------------------------------------------------------- NAME_STRING = " Lv." #-------------------------------------------------------------------------- # ○ レベルの値を隠す文字列設定 # 特定の敵に対して、レベルの値を何らかの文字列で隠す設定ができます。 # # データベースの敵キャラにあるメモ欄にて # INVISIBLE_NOTEで設定した文字列(前後に[]を付けて下さい)を # 記述すると、その敵はINVISIBLE_STRINGで指定した文字列でレベルの値を # 隠す事ができます。 # # 設定例 # INVISIBLE_NOTEが"レベルを隠す"の場合 # データベースでの敵キャラのメモ欄に # [レベルを隠す] # と書きます。 #-------------------------------------------------------------------------- INVISIBLE_STRING = "???" INVISIBLE_NOTE = "レベルを隠す" #-------------------------------------------------------------------------- # ○ スイッチで解除する文字列 # INVISIBLE_STRINGで隠している敵に対して # 指定されたスイッチがオンの時のみ、解除されて見る事のできる # 文字列を設定します。 # # データベースで、VISIBLE_SW_NOTEで指定した文字列(前後に[]を付けて下さい)と # その後ろに、スイッチ番号(半角)で記述します。 # # 例えば、VISIBLE_SW_NOTEが"スイッチ番号:"で、スイッチ番号10にしたい場合 # データベースでの敵キャラのメモ欄に # [スイッチ番号:10] と書きます。 # # この場合、スイッチ番号10がオンであれば、解除されて見る事ができます。 # # 又、スイッチ拡張(RGSS研究所)からのスイッチの設定の場合は # 10000を加えた値で指定して下さい。 # (例:1の場合→[スイッチ番号:10001]) #-------------------------------------------------------------------------- VISIBLE_SW_NOTE = "スイッチ番号:" #-------------------------------------------------------------------------- # ○ 指定ターンで解除する文字列 # INVISIBLE_STRINGで隠している敵に対して # 指定されたターン数が経過した時のみ、解除されて見る事のできる # 文字列を設定します。 # # データベースで、VISIBLE_TRUN_NOTEで指定した文字列(前後に[]を付けて下さい)と # その後ろに、必要ターン数(半角)で記述します。 # # 例えば、VISIBLE_TURN_NOTEが"ターン数:"で、3ターンで解除したい場合 # データベースでの敵キャラのメモ欄に # [ターン数:3] と書きます。 #-------------------------------------------------------------------------- VISIBLE_TURN_NOTE = "ターン数:" #-------------------------------------------------------------------------- # ○ ステート状態で解除する文字列 # INVISIBLE_STRINGで隠している敵に対して # 指定されたステートの状態である時のみ、解除されて見る事のできる # 文字列を設定します。 # # データベースで、VISIBLE_STATE_NOTEで指定した文字列(前後に[]を付けて下さい)と # その後ろに、該当のステートID(半角)で記述します。 # # 例えば、VISIBLE_STATE_NOTEが"ステートID:"で、ステートID 2の場合 # データベースでの敵キャラのメモ欄に # [ステートID:2] と書きます。 #-------------------------------------------------------------------------- VISIBLE_STATE_NOTE = "ステートID:" #-------------------------------------------------------------------------- # ○ レベル完全非表示の文字列設定 # NAME_STRINGの文字列とレベルの値を完全に描画したくない場合の # 敵キャラのメモ欄に指定する文字列を設定します。 # # ここで指定した文字列(前後に[]を付けて下さい)を記述すると # その敵はレベルの表示(レベルの文字列も含む)が一切描画されなくなります。 # # INVISIBLE_STRINGの設定とは異なり、これによる解除方法はありません。 # (上記の文字列を同時に書いてあっても、こちらの設定が優先となります) # # 設定例 # HIDE_NOTEが"レベル非表示"の場合 # データベースでの敵キャラのメモ欄に # [レベル非表示] # と書きます。 #-------------------------------------------------------------------------- HIDE_NOTE = "レベル非表示" end # カスタマイズポイントは、ここまで #============================================================================== # □ RGSSLAB::Enemy_Level [module] #============================================================================== module RGSSLAB::Enemy_Level #-------------------------------------------------------------------------- # ○ 素材設定用の定数定義 #-------------------------------------------------------------------------- MATERIAL_NAME = "敵レベル実装" VERSION = 1 RELEASE = 20120521 end #============================================================================== # ■ Game_System [class] #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :rgsslab033 #-------------------------------------------------------------------------- # ● オブジェクト初期化 [エイリアス] #-------------------------------------------------------------------------- alias enemy_level_initialize initialize def initialize enemy_level_initialize @rgsslab033 = RgssLab_033.new end end #============================================================================== # □ RgssLab_033 [class] #============================================================================== class RgssLab_033 #-------------------------------------------------------------------------- # ○ モジュールの設定 #-------------------------------------------------------------------------- RGSSLAB_033 = RGSSLAB::Enemy_Level #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :name_flag attr_reader :enemy_list attr_accessor :max_level attr_accessor :fix attr_accessor :level_type #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize @name_flag = RGSSLAB_033::NAME_FLAG @enemy_list = $rgsslab["敵レベル実装・個別指定"] ? RGSSLAB_033_01::LIST.dup : {} @max_level = RGSSLAB_033::MAX_LEVEL @fix = 1 @level_type = RGSSLAB_033::TYPE end end #============================================================================== # ■ Game_Enemy [class] #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ○ モジュールの設定 #-------------------------------------------------------------------------- RGSSLAB_033 = RGSSLAB::Enemy_Level #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :level #-------------------------------------------------------------------------- # ● オブジェクト初期化 [再定義] # index : インデックス ID # enemy_id : 敵 ID #-------------------------------------------------------------------------- def initialize(index, enemy_id) super() @index = index @enemy_id = enemy_id enemy = $data_enemies[@enemy_id] @original_name = enemy.name @letter = "" @plural = false @screen_x = 0 @screen_y = 0 @battler_name = enemy.battler_name @battler_hue = enemy.battler_hue enemy_level_initialize if $rgsslab["敵レベル実装"] @hp = mhp @mp = mmp item_steal_initialize if $rgsslab["アイテムスティール"] gold_steal_initialize if $rgsslab["所持金スティール"] append_parameter_initialize if $rgsslab["パラメータの追加"] end #-------------------------------------------------------------------------- # ○ 敵のレベルの初期設定メソッド #-------------------------------------------------------------------------- def enemy_level_initialize @level = initial_level level_correct end #-------------------------------------------------------------------------- # ○ 敵のレベル設定 #-------------------------------------------------------------------------- def initial_level case $game_system.rgsslab033.level_type when "個別指定" ; return initial_individual_designation when "平均" ; return initial_average when "最大" ; return initial_max when "最小" ; return initial_min when "ランダム" ; return initial_random when "無効" ; return 1 when "固定" ; return [[$game_system.rgsslab033.fix, 1].max, $game_system.rgsslab033.max_level].min else ; return 1 end end #-------------------------------------------------------------------------- # ○ 敵のレベル設定:個別指定 #-------------------------------------------------------------------------- def initial_individual_designation return 1 unless $rgsslab["敵レベル実装・個別指定"] return $game_system.rgsslab033.enemy_list[@enemy_id] ? $game_system.rgsslab033.enemy_list[@enemy_id] : 1 end #-------------------------------------------------------------------------- # ○ 敵のレベル設定:平均 #-------------------------------------------------------------------------- def initial_average n = 0 for i in 0...$game_party.members.size do n += $game_party.members[i].level end return [[n / $game_party.members.size, 1].max, $game_system.rgsslab033.max_level].min end #-------------------------------------------------------------------------- # ○ 敵のレベル設定:最大 #-------------------------------------------------------------------------- def initial_max return [[$game_party.highest_level, 1].max, $game_system.rgsslab033.max_level].min end #-------------------------------------------------------------------------- # ○ 敵のレベル設定:最小 #-------------------------------------------------------------------------- def initial_min result = 0 for i in 0...$game_party.members.size if i == 0 result = $game_party.members[i].level next end result = $game_party.members[i].level if result > $game_party.members[i].level end return [[result, 1].max, $game_system.rgsslab033.max_level].min end #-------------------------------------------------------------------------- # ○ 敵のレベル設定:ランダム #-------------------------------------------------------------------------- def initial_random return rand($game_system.rgsslab033.max_level + 1) end #-------------------------------------------------------------------------- # ○ レベルの範囲外の修正 #-------------------------------------------------------------------------- def level_correct if @level < 1 @level = 1 else if $game_system.rgsslab033.max_level < 1 return elsif $game_system.rgsslab033.max_level < @level @level = $game_system.rgsslab033.max_level @hp = [@hp, self.mhp].min @mp = [@mp, self.mmp].min max_check if $rgsslab["パラメータの追加"] end end end #-------------------------------------------------------------------------- # ○ レベルの変更 # new_level : 新しいレベル #-------------------------------------------------------------------------- def level=(new_level) @level = new_level level_correct end #-------------------------------------------------------------------------- # ● 表示名の取得 [エイリアス/再定義] #-------------------------------------------------------------------------- alias default_name name def name return default_name unless $game_system.rgsslab033.name_flag enemy_name = @original_name enemy_name += (@plural ? letter : "") return enemy_name if $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::HIDE_NOTE}\]/] != nil return enemy_name += RGSSLAB_033::NAME_STRING + @level.to_s unless $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::INVISIBLE_NOTE}\]/] != nil flag = false if $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::VISIBLE_SW_NOTE}([0-9]+)\]/] != nil value = $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::VISIBLE_SW_NOTE}([0-9]+)\]/] flag = true if $game_switches_ex[value.scan(/[0-9]/)[0].to_i - 10000] if $rgsslab["スイッチ拡張"] if value.scan(/[0-9]/)[0].to_i >= 10000 flag = true if $game_switches[value.scan(/[0-9]/)[0].to_i] if value.scan(/[0-9]/)[0].to_i < 10000 end if $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::VISIBLE_TURN_NOTE}([0-9]+)\]/] != nil value = $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::VISIBLE_TURN_NOTE}([0-9]+)\]/] flag = true if $game_troop.turn_count >= value.scan(/[0-9]/)[0].to_i end if $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::VISIBLE_STATE_NOTE}([0-9]+)\]/] != nil value = $data_enemies[@enemy_id].note[/\[#{RGSSLAB_033::VISIBLE_STATE_NOTE}([0-9]+)\]/] flag = true if self.state?(value.scan(/[0-9]/)[0].to_i) end return enemy_name += RGSSLAB_033::NAME_STRING + (flag ? @level.to_s : RGSSLAB_033::INVISIBLE_STRING) end end end