ボスフラグスクリプト



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

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

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

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

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

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  # ボスフラグ
  
  #--------------------------------------------------------------------------
  # ● 俺がボスだ!関数
  #--------------------------------------------------------------------------
  def i_am_boss(id)
    @boss_flg[id] = true
  end
  
  #--------------------------------------------------------------------------
  # ● ボスフラグ初期化関数
  #--------------------------------------------------------------------------
  def init_boss_flg
    if @boss_flg == nil
      @boss_flg = Array.new(1000)
      @boss_flg[0] = false
    end
    for i in 0..999
      if @boss_flg[i] == nil
        @boss_flg[i] = false
      end
    end
  end
end

#==============================================================================
# ■ Scene_Battle (分割定義 1)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias main_diamond_boss_flg main
  def main
    # ボスフラグ初期化
    $game_system.init_boss_flg
    
    main_diamond_boss_flg
  end
  
end


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

class Game_Battler
  include DIAMOND
  #--------------------------------------------------------------------------
  # ● ボス有効無効判定
  #    tgt : skill / item
  #--------------------------------------------------------------------------
  def include_boss?(tgt)
    boss_flg = $game_system.boss_flg[self.id]
    
    if (boss_flg && tgt.minus_state_set.include?(BOSS_STS)) || 
      (!boss_flg && tgt.plus_state_set.include?(BOSS_STS))
      return true
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias skill_effect_diamond_boss_flg skill_effect
  def skill_effect(user, skill)
    # ボスフラグ初期化
    $game_system.init_boss_flg
    
    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)
    # ボスフラグ初期化
    $game_system.init_boss_flg
    
    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) を実行します。 後は、ボスのみ有効なスキル、アイテムを作成する場合は薄緑色の部分の番号のステートをに、 逆にボスのみ無効にしたい場合はにセットします。

戻る