#==============================================================================
# □ 敵レベル実装 (for VX Ace)
#------------------------------------------------------------------------------
# Version : 1_20120119
# by サリサ・タイクーン
# [url]http://www.tycoon812.com/rgss/[/url]
#==============================================================================
#==============================================================================
# □ 素材スイッチ
#==============================================================================
$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 = 20120119
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["アイテムスティール"]
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
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