ボスフラグスクリプト



ボスにボスのフラグをたてることによってボスには無効なスキル、アイテムまたは、ボスのみ有効な
スキル、アイテムの作成を行います。

変更点
2009:10:01
・バトルより前にマップでスキルやアイテムを使用するとエラー落ちするバグを修正
 
2011:03:05
・インタープリターに関数を追加することで、呼び出し関数名を省略化

2017:11:03
・外部フラグ追加

2021:02:01
・ボス有効無効判定をエネミーの場合のみに変更
・skill_effect/item_effectで結果をreturnしていないバグを修正

2024:11:01
・ボスフラグを配列からハッシュに変更

#==============================================================================
# ボスフラグスクリプト By 貪藻矢射妥←
#------------------------------------------------------------------------------
# ボスにボスのフラグをたてることによってボスには無効なスキル、アイテム
# または、ボスのみ有効なスキル、アイテムの作成を行います。
# 
# 使用方法(トループのイベントにて・・・ターンの一番最初に行うのがベスト)
# 
# i_am_boss(ID)
# 
# にてボスフラグを立てます
# 
# また、ボスのみ有効なスキル、アイテムを作成したい場合はスキル、アイテムの
# ステートの部分のボス有効/無効ステートを + に、
# ボスのみ無効なスキル、アイテムを作成したい場合は逆で - にすればOKです。
# 
#==============================================================================
# 変更点
# 
# 2009:10:01
# ・バトルより前にマップでスキルやアイテムを使用するとエラー落ちするバグを修正
# 
# 2011:03:05
# ・インタープリターに関数を追加することで、呼び出し関数名を省略化
# 
# 2017:11:03
# ・外部フラグ追加
# 
# 2021:02:01
# ・ボス有効無効判定をエネミーの場合のみに変更
# ・skill_effect/item_effectで結果をreturnしていないバグを修正
# 
# 2024:11:01
# ・ボスフラグを配列からハッシュに変更

module DIAMOND
  # ボス有効/無効ステート
  BOSS_STS = 109
end

$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["I_Am_Boss"] = true

#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
# のインスタンスは $game_system で参照されます。
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :boss_flg  # ボスフラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_diamond_boss_flg initialize
  def initialize
    # 元の処理を実施
    initialize_diamond_boss_flg
    
    @boss_flg = {}
  end
  #--------------------------------------------------------------------------
  # ● 俺がボスだ!関数
  #--------------------------------------------------------------------------
  def i_am_boss(id)
    @boss_flg[id] = true
  end
end

#==============================================================================
# ■ Game_Battler (分割定義 3)
#------------------------------------------------------------------------------
#  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
# スのスーパークラスとして使用されます。
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● ボス有効無効判定
  #    tgt : skill / item
  #--------------------------------------------------------------------------
  def include_boss?(tgt)
    boss_flg = $game_system.boss_flg[self.id]
    
    if (boss_flg && tgt.minus_state_set.include?(DIAMOND::BOSS_STS)) || 
      (!boss_flg && tgt.plus_state_set.include?(DIAMOND::BOSS_STS))
      return true
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias skill_effect_diamond_boss_flg skill_effect
  def skill_effect(user, skill)
    if self.is_a?(Game_Enemy)
      root_hit = skill.hit
      
      skill.hit = 0 if include_boss?(skill)
    end
    
    result = skill_effect_diamond_boss_flg(user, skill)
    
    if self.is_a?(Game_Enemy)
      skill.hit = root_hit
    end
    
    return result
  end
  
  #--------------------------------------------------------------------------
  # ● アイテムの効果適用
  #     item : アイテム
  #--------------------------------------------------------------------------
  alias item_effect_diamond_boss_flg item_effect
  def item_effect(item)
    if self.is_a?(Game_Enemy)
      root_hit = item.hit
      
      item.hit = 0 if include_boss?(item)
    end
    
    result = item_effect_diamond_boss_flg(item)
    
    if self.is_a?(Game_Enemy)
      item.hit = root_hit
    end
    
    return result
  end
end

class Interpreter
  #--------------------------------------------------------------------------
  # ● 俺が、俺達がボスだ!
  #--------------------------------------------------------------------------
  def i_am_boss(id)
    if id.is_a?(Numeric)
      $game_system.i_am_boss(id)
    else
      p "エネミーIDが不正です。"
    end
  end
end
使用方法。 ボスステータスパワーアップと同じようにトループのイベントにて i_am_boss(エネミーID) を実行します。 後は、ボスのみ有効なスキル、アイテムを作成する場合は薄緑色の部分の番号のステートをに、 逆にボスのみ無効にしたい場合はにセットします。

戻る