限界突破カスタム



なるべく [Scene_Debug] のすぐ下に導入してください。

改造内容:
・アクターのレベル上限を配列からハッシュへ変更
・HP/SP/ステータス、アイテム/武器/防具の上限もキャラ毎に設定可能に

変更点
まだなし


#----------------------------------------------------------------------------
# 限界突破カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作:     ◆ 限界突破 - KGC_LimitBreak ◆
#           ◇ Last update : 2008/01/10 ◇
# 原作者:   TOMY様
# HP:       Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# なるべく [Scene_Debug] のすぐ下に導入してください。
# 
# 改造内容:
# ・アクターのレベル上限を配列からハッシュへ変更
# ・HP/SP/ステータス、アイテム/武器/防具の上限もキャラ毎に設定可能に
# 
#============================================================================
# 変更点
# まだなし

#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

module KGC
  include BM
  # ◆能力値算出方式
  #   0..データベース通り。
  #      (100以降は計算式として ACTOR_LV100_CALC を使用)
  #
  #   1..データベースを用いた二次関数。
  #        a:レベル1の値  b:レベル2の値  c:レベル3の値  x:現レベル
  #      として、
  #        ax^2 + bx + c
  #      を用いて能力値を算出。
  #
  #   2..データベースを用いた一次関数。
  #        b:レベル2の値  c:レベル3の値  x:現レベル
  #      として、
  #        bx + c
  #      を用いて能力値を算出。
  #      (レベル2,3の値を使うのは、二次関数方式との使い分けを楽にするため)
  LB_CALC_PARAMETER_METHOD = 0

  # ◆レベル 100 以降の能力値計算式
  #  (CALC_PARAMETER_METHOD が 0 のときに使用)
  #  【lv..現レベル  p[x]..レベル x の能力値】
  #  この計算結果をレベル 99 の能力値に加算。
  LB_ACTOR_LV100_CALC = "(p[99] - p[98]) * (lv - 99)"

  # ◆アクターの上限設定セット
  # アクターの経験値上限
  # 経験値上限はアクター毎に個別設定する意味がない(と思う)ので共通
  LB_ACTOR_EXP_LIMIT            = BM::MAX_EXP
  # アクターのレベル上限
  # アクターID=>レベル上限 で記載
  LB_ACTOR_LV_LIMIT_INDIVIDUAL  = {}
  # 上限未指定アクターのレベル上限
  #  上限未指定(nil)のアクターはこの値を使用
  LB_ACTOR_LV_LIMIT_DEFAULT     = BM::MAX_LV
  # アクターのHP上限
  # アクターID=>レベル上限 で記載
  LB_ACTOR_HP_LIMIT_INDIVIDUAL  = {}
  # 上限未指定アクターのHP上限
  #  上限未指定(nil)のアクターはこの値を使用
  LB_ACTOR_HP_LIMIT_DEFAULT     = BM::MAX_HP
  # アクターのSP上限
  # アクターID=>レベル上限 で記載
  LB_ACTOR_SP_LIMIT_INDIVIDUAL  = {}
  # 上限未指定アクターのSP上限
  #  上限未指定(nil)のアクターはこの値を使用
  LB_ACTOR_SP_LIMIT_DEFAULT     = BM::MAX_SP
  # アクターの「str, dex, agi, int」上限
  # アクターID=>レベル上限 で記載
  LB_ACTOR_ETC_LIMIT_INDIVIDUAL = {}
  # 上限未指定アクターの「str, dex, agi, int」上限
  #  上限未指定(nil)のアクターはこの値を使用
  LB_ACTOR_ETC_LIMIT_DEFAULT    = BM::MAX_STR

  # ◆エネミーの上限設定セット
  # エネミーのHP上限
  LB_ENEMY_HP_LIMIT  = BM::MAX_HP
  # エネミーのSP上限
  LB_ENEMY_SP_LIMIT  = BM::MAX_SP
  # エネミーの「腕力, 器用さ, 素早さ, 魔力」上限
  LB_ENEMY_ETC_LIMIT = BM::MAX_STR

  # ◆アクター能力値修正値(百分率)
  #  アクターの能力値がデータベースの設定値の○%になる。
  #  (上限値が高い場合に使用。データベースの値を使う場合は 100)
  LB_ACTOR_MAXHP_REVISE = 100  # MAXHP
  LB_ACTOR_MAXSP_REVISE = 100  # MAXSP
  LB_ACTOR_STR_REVISE   = 100  # 腕力
  LB_ACTOR_DEX_REVISE   = 100  # 器用さ
  LB_ACTOR_AGI_REVISE   = 100  # 素早さ
  LB_ACTOR_INT_REVISE   = 100  # 魔力

  # ◆敵能力値修正値(百分率)
  #  敵の能力値がデータベースの設定値の○%になる。
  LB_ENEMY_MAXHP_REVISE = 100  # MAXHP
  LB_ENEMY_MAXSP_REVISE = 100  # MAXSP
  LB_ENEMY_STR_REVISE   = 100  # 腕力
  LB_ENEMY_DEX_REVISE   = 100  # 器用さ
  LB_ENEMY_AGI_REVISE   = 100  # 素早さ
  LB_ENEMY_INT_REVISE   = 100  # 魔力
  LB_ENEMY_ATK_REVISE   = 100  # 攻撃力
  LB_ENEMY_PDEF_REVISE  = 100  # 物理防御
  LB_ENEMY_MDEF_REVISE  = 100  # 魔法防御

  # ◆所持金上限
  LB_GOLD_LIMIT = BM::MAX_GOLD

  # ◆アイテム所持数上限
  # アイテムID=>上限 で記載
  LB_ITEM_LIMIT_INDIVIDUAL   = {}
  # ◆武器所持数上限
  # 武器ID=>上限 で記載
  LB_WEAPON_LIMIT_INDIVIDUAL = {}
  # ◆防具所持数上限
  # 防具ID=>上限 で記載
  LB_ARMOR_LIMIT_INDIVIDUAL  = {}

  # ◆アイテム/武器/防具所持数上限 (デフォルト)
  #  上限を指定しなかったアイテム、武器、防具はこの値を上限として使用。
  LB_ITEM_LIMIT_DEFAULT = BM::DEFAULT_MH

  module_function
  #--------------------------------------------------------------------------
  # ○ 敵能力値直接指定
  #     ここで、敵の最大HPなどを直接指定することができます。
  #     データベースに入りきらない数値を指定する場合に使用してください。
  #--------------------------------------------------------------------------
  def set_enemy_status
    #  <例> ID:10 の敵のHPを 2000000 にする場合
    # $data_enemies[10].maxhp = 2000000
    #  <例> ID:16 の敵の攻撃力を 5000 にする場合
    # $data_enemies[16].atk = 5000
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["LimitBreak"] = true

if $game_special_elements == nil
  $game_special_elements = {}
  $data_system = load_data(FIX_PATH::PATH_DATA_SYSM)
end

module KGC
  module_function
  #--------------------------------------------------------------------------
  # ● 敵の能力補正を適用
  #--------------------------------------------------------------------------
  def revise_enemy_parameters
    (1...$data_enemies.size).each { |i|
      enemy = $data_enemies[i]
      enemy.maxhp = enemy.maxhp * LB_ENEMY_MAXHP_REVISE / 100
      enemy.maxsp = enemy.maxsp * LB_ENEMY_MAXSP_REVISE / 100
      enemy.str   = enemy.str   * LB_ENEMY_STR_REVISE   / 100
      enemy.dex   = enemy.dex   * LB_ENEMY_DEX_REVISE   / 100
      enemy.agi   = enemy.agi   * LB_ENEMY_AGI_REVISE   / 100
      enemy.int   = enemy.int   * LB_ENEMY_INT_REVISE   / 100
      enemy.atk   = enemy.atk   * LB_ENEMY_ATK_REVISE   / 100
      enemy.pdef  = enemy.pdef  * LB_ENEMY_PDEF_REVISE  / 100
      enemy.mdef  = enemy.mdef  * LB_ENEMY_MDEF_REVISE  / 100
    }
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Item
#==============================================================================

class RPG::Item
  #--------------------------------------------------------------------------
  # ● 所持数上限
  #--------------------------------------------------------------------------
  def number_limit
    if KGC::LB_ITEM_LIMIT_INDIVIDUAL[self.id] != nil
      return KGC::LB_ITEM_LIMIT_INDIVIDUAL[self.id]
    else
if $OuterFlgs["Max_Hold_Change"]
    return BM::MAX_HOLD[$game_system.max_hold_value]
else
    return KGC::LB_ITEM_LIMIT_DEFAULT
end # $OuterFlgs["Max_Hold_Change"]
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Weapon
#==============================================================================

class RPG::Weapon
  #--------------------------------------------------------------------------
  # ● 所持数上限
  #--------------------------------------------------------------------------
  def number_limit
    if KGC::LB_WEAPON_LIMIT_INDIVIDUAL[self.id] != nil
      return KGC::LB_WEAPON_LIMIT_INDIVIDUAL[self.id]
    else
if $OuterFlgs["Max_Hold_Change"]
    return BM::MAX_HOLD[$game_system.max_hold_value]
else
    return KGC::LB_ITEM_LIMIT_DEFAULT
end # $OuterFlgs["Max_Hold_Change"]
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Armor
#==============================================================================

class RPG::Armor
  #--------------------------------------------------------------------------
  # ● 所持数上限
  #--------------------------------------------------------------------------
  def number_limit
    if KGC::LB_ARMOR_LIMIT_INDIVIDUAL[self.id] != nil
      return KGC::LB_ARMOR_LIMIT_INDIVIDUAL[self.id]
    else
if $OuterFlgs["Max_Hold_Change"]
    return BM::MAX_HOLD[$game_system.max_hold_value]
else
    return KGC::LB_ITEM_LIMIT_DEFAULT
end # $OuterFlgs["Max_Hold_Change"]
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● MaxHP の取得
  #--------------------------------------------------------------------------
  def maxhp
    n = [base_maxhp + @maxhp_plus, 1].max
    @states.each { |i| n *= $data_states[i].maxhp_rate / 100.0 }
    n = [[Integer(n), 1].max, maxhp_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxSP の取得
  #--------------------------------------------------------------------------
  def maxsp
    n = [base_maxsp + @maxsp_plus, 0].max
    @states.each { |i| n *= $data_states[i].maxsp_rate / 100.0 }
    n = [[Integer(n), 0].max, maxsp_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 腕力の取得
  #--------------------------------------------------------------------------
  def str
    n = [base_str + @str_plus, 1].max
    @states.each { |i| n *= $data_states[i].str_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 器用さの取得
  #--------------------------------------------------------------------------
  def dex
    n = [base_dex + @dex_plus, 1].max
    @states.each { |i| n *= $data_states[i].dex_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 素早さの取得
  #--------------------------------------------------------------------------
  def agi
    n = [base_agi + @agi_plus, 1].max
    @states.each { |i| n *= $data_states[i].agi_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 魔力の取得
  #--------------------------------------------------------------------------
  def int
    n = [base_int + @int_plus, 1].max
    @states.each { |i| n *= $data_states[i].int_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxHP の設定
  #     maxhp : 新しい MaxHP
  #--------------------------------------------------------------------------
  def maxhp=(maxhp)
    @maxhp_plus += maxhp - self.maxhp
    @maxhp_plus = [[@maxhp_plus, -maxhp_limit].max, maxhp_limit].min
    @hp = [@hp, self.maxhp].min
  end
  #--------------------------------------------------------------------------
  # ● MaxSP の設定
  #     maxsp : 新しい MaxSP
  #--------------------------------------------------------------------------
  def maxsp=(maxsp)
    @maxsp_plus += maxsp - self.maxsp
    @maxsp_plus = [[@maxsp_plus, -maxsp_limit].max, maxsp_limit].min
    @sp = [@sp, self.maxsp].min
  end
  #--------------------------------------------------------------------------
  # ● 腕力の設定
  #     str : 新しい腕力
  #--------------------------------------------------------------------------
  def str=(str)
    @str_plus += str - self.str
    @str_plus = [[@str_plus, -parameter_limit].max, parameter_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 器用さの設定
  #     dex : 新しい器用さ
  #--------------------------------------------------------------------------
  def dex=(dex)
    @dex_plus += dex - self.dex
    @dex_plus = [[@dex_plus, -parameter_limit].max, parameter_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 素早さの設定
  #     agi : 新しい素早さ
  #--------------------------------------------------------------------------
  def agi=(agi)
    @agi_plus += agi - self.agi
    @agi_plus = [[@agi_plus, -parameter_limit].max, parameter_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 魔力の設定
  #     int : 新しい魔力
  #--------------------------------------------------------------------------
  def int=(int)
    @int_plus += int - self.int
    @int_plus = [[@int_plus, -parameter_limit].max, parameter_limit].min
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● EXP 計算
  #--------------------------------------------------------------------------
  def make_exp_list
    actor = $data_actors[@actor_id]
    @exp_list[1] = 0
    pow_i = 2.4 + actor.exp_inflation / 100.0
    (2..(self.final_level + 1)).each { |i|
      if i > self.final_level
        @exp_list[i] = 0
      else
        n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
        @exp_list[i] = @exp_list[i-1] + Integer(n)
      end
    }
  end
  #--------------------------------------------------------------------------
  # ● EXP の変更
  #     exp : 新しい EXP
  #--------------------------------------------------------------------------
  def exp=(exp)
if $imported["ExpGoldIncrease"]
    rate = calc_exp_increase_rate(KGC::EXPGLD_INC_PERMIT_DOUBLE)
    exp = @exp + (exp - @exp) * rate / 100
end # $imported["ExpGoldIncrease"]
    
    @exp = [[exp, KGC::LB_ACTOR_EXP_LIMIT].min, 0].max
    # レベルアップ
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      # スキル習得
      $data_classes[@class_id].learnings.each { |j|
        if j.level == @level
          learn_skill(j.skill_id)
        end
      }
    end
    # レベルダウン
    while @exp < @exp_list[@level]
      @level -= 1
    end
    # 現在の HP と SP が最大値を超えていたら修正
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end
  #--------------------------------------------------------------------------
  # ○ パラメータの取得
  #--------------------------------------------------------------------------
  def parameter(type)
    if KGC::LB_CALC_PARAMETER_METHOD == 0 # データベース通り
      if @level >= 100
        calc_text = KGC::LB_ACTOR_LV100_CALC.dup
        calc_text.gsub!(/lv/i) { "@level" }
        calc_text.gsub!(/p\[(\d+)\]/i) {
          "$data_actors[@actor_id].parameters[type, #{$1.to_i}]"
        }
        return $data_actors[@actor_id].parameters[type, 99] + eval(calc_text)
      else
        return $data_actors[@actor_id].parameters[type, @level]
      end
    elsif KGC::LB_CALC_PARAMETER_METHOD == 1 # データベースを用いた二次関数
      a = $data_actors[@actor_id].parameters[type, 1]
      b = $data_actors[@actor_id].parameters[type, 2]
      c = $data_actors[@actor_id].parameters[type, 3]
      return a * @level * @level + b * @level + c
    elsif KGC::LB_CALC_PARAMETER_METHOD == 2 # データベースを用いた一次関数
      b = $data_actors[@actor_id].parameters[type, 2]
      c = $data_actors[@actor_id].parameters[type, 3]
      return b * @level + c
    else # 異常の場合
      return 0
    end
  end
  
  #--------------------------------------------------------------------------
  # ● パラメータを再生成
  #--------------------------------------------------------------------------
  def restore_parameter
    return if @level < 100
    $data_actors[@actor_id].parameters.resize(6, @level + 1)
    for type in 0..5
      # 能力値未設定の場合
      if $data_actors[@actor_id].parameters[type, @level] == 0
        # 該当レベルでの能力値を計算
        calc_text = KGC::LB_ACTOR_LV100_CALC.dup
        calc_text.gsub!(/lv/i) { "@level" }
        calc_text.gsub!(/p\[(\d+)\]/i) {
          "$data_actors[@actor_id].parameters[type, #{$1.to_i}]"
        }
        val_b = $data_actors[@actor_id].parameters[type, 99]
        
        val_b += eval(calc_text)
        
        if type < 2
          val_m = 65535 - (999 - $data_actors[@actor_id].parameters[type, 1])
        else
          val_m = 16383 - (99  - $data_actors[@actor_id].parameters[type, 1])
        end
        $data_actors[@actor_id].parameters[type, @level] = [val_b, val_m].min
        
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● MaxHP の取得
  #--------------------------------------------------------------------------
  def maxhp
    n = [base_maxhp + @maxhp_plus, 1].max
    @states.each { |i| n *= $data_states[i].maxhp_rate / 100.0 }
    n = [[Integer(n), 1].max, maxhp_limit].min
    
    @hp = [@hp, n].min
    
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxSP の取得
  #--------------------------------------------------------------------------
  def maxsp
    n = [base_maxsp + @maxsp_plus, 0].max
    @states.each { |i| n *= $data_states[i].maxsp_rate / 100.0 }
    n = [[Integer(n), 0].max, maxsp_limit].min
    
    @sp = [@sp, n].min
    
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxHP の取得
  #--------------------------------------------------------------------------
  def base_maxhp
if $imported["LimitBreak"]
    restore_parameter if $data_actors[@actor_id].parameters[0, @level] == nil
end # $imported["LimitBreak"]
    n = $data_actors[@actor_id].parameters[0, @level] * 1.02
    
    # MaxHP を整数に直して返す
if $imported["LimitBreak"]
    return Integer(n * KGC::LB_ACTOR_MAXHP_REVISE / 100)
else
    return Integer(n)
end # $imported["LimitBreak"]
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxSP の取得
  #--------------------------------------------------------------------------
  def base_maxsp
if $imported["LimitBreak"]
    restore_parameter if $data_actors[@actor_id].parameters[1, @level] == nil
end # $imported["LimitBreak"]
    n = $data_actors[@actor_id].parameters[1, @level] * 1.01
    
    # MaxSP を整数に直して返す
if $imported["LimitBreak"]
    return Integer(n * KGC::LB_ACTOR_MAXSP_REVISE / 100)
else
    return Integer(n)
end # $imported["LimitBreak"]
  end
  
  #--------------------------------------------------------------------------
  # ● 基本腕力の取得
  #--------------------------------------------------------------------------
  def base_str
if $imported["LimitBreak"]
    restore_parameter if $data_actors[@actor_id].parameters[2, @level] == nil
end # $imported["LimitBreak"]
    n = $data_actors[@actor_id].parameters[2, @level]
    
if $imported["EquipExtension"]
    n += equipment_parameter(2)
elsif $OuterFlgs["Equip_Extend"]
    list = [$data_weapons[@weapon_id]]
    list = get_equip_list(list)
    
    list.each { |item| n += (item != nil ? item.str_plus : 0) }
else
    equip_item_list.each { |item| n += (item != nil ? item.str_plus : 0) }
end # $imported["EquipExtension"], $OuterFlgs["Equip_Extend"]
    
if $imported["LimitBreak"]
    return [[n * KGC::LB_ACTOR_STR_REVISE / 100, 1].max, parameter_limit].min
else
    return [[n, 1].max, BM::MAX_STR].min
end # $imported["LimitBreak"]
  end
  
  #--------------------------------------------------------------------------
  # ● 基本器用さの取得
  #--------------------------------------------------------------------------
  def base_dex
if $imported["LimitBreak"]
    restore_parameter if $data_actors[@actor_id].parameters[3, @level] == nil
end # $imported["LimitBreak"]
    n = $data_actors[@actor_id].parameters[3, @level]
    
if $imported["EquipExtension"]
    n += equipment_parameter(3)
elsif $OuterFlgs["Equip_Extend"]
    list = [$data_weapons[@weapon_id]]
    list = get_equip_list(list)
    
    list.each { |item| n += (item != nil ? item.dex_plus : 0) }
else
    equip_item_list.each { |item| n += (item != nil ? item.dex_plus : 0) }
end # $imported["EquipExtension"], $OuterFlgs["Equip_Extend"]
    
if $imported["LimitBreak"]
    return [[n * KGC::LB_ACTOR_DEX_REVISE / 100, 1].max, parameter_limit].min
else
    return [[n, 1].max, BM::MAX_STR].min
end # $imported["LimitBreak"]
  end
  
  #--------------------------------------------------------------------------
  # ● 基本素早さの取得
  #--------------------------------------------------------------------------
  def base_agi
if $imported["LimitBreak"]
    restore_parameter if $data_actors[@actor_id].parameters[4, @level] == nil
end # $imported["LimitBreak"]
    n = $data_actors[@actor_id].parameters[4, @level]
    
if $imported["EquipExtension"]
    n += equipment_parameter(4)
elsif $OuterFlgs["Equip_Extend"]
    list = [$data_weapons[@weapon_id]]
    list = get_equip_list(list)
    
    list.each { |item| n += (item != nil ? item.agi_plus : 0) }
else
    equip_item_list.each { |item| n += (item != nil ? item.agi_plus : 0) }
end # $imported["EquipExtension"], $OuterFlgs["Equip_Extend"]
    
if $imported["LimitBreak"]
    return [[n * KGC::LB_ACTOR_AGI_REVISE / 100, 1].max, parameter_limit].min
else
    return [[n, 1].max, BM::MAX_STR].min
end # $imported["LimitBreak"]
  end
  
  #--------------------------------------------------------------------------
  # ● 基本魔力の取得
  #--------------------------------------------------------------------------
  def base_int
if $imported["LimitBreak"]
    restore_parameter if $data_actors[@actor_id].parameters[5, @level] == nil
end # $imported["LimitBreak"]
    n = $data_actors[@actor_id].parameters[5, @level]
    
if $imported["EquipExtension"]
    n += equipment_parameter(5)
elsif $OuterFlgs["Equip_Extend"]
    list = [$data_weapons[@weapon_id]]
    list = get_equip_list(list)
    
    list.each { |item| n += (item != nil ? item.int_plus : 0) }
else
    equip_item_list.each { |item| n += (item != nil ? item.int_plus : 0) }
end # $imported["EquipExtension"], $OuterFlgs["Equip_Extend"]
    
if $imported["LimitBreak"]
    return [[n * KGC::LB_ACTOR_INT_REVISE / 100, 1].max, parameter_limit].min
else
    return [[n, 1].max, BM::MAX_STR].min
end # $imported["LimitBreak"]
  end
  
  #--------------------------------------------------------------------------
  # ● レベルの変更
  #     level : 新しいレベル
  #--------------------------------------------------------------------------
  def level=(level)
    # 上下限チェック
    level = [[level, self.final_level].min, 1].max
    # EXP を変更
    self.exp = @exp_list[level]
  end
  #--------------------------------------------------------------------------
  # ● 最終レベルの取得
  #--------------------------------------------------------------------------
  def final_level
    if KGC::LB_ACTOR_LV_LIMIT_INDIVIDUAL[@actor_id] != nil
      return KGC::LB_ACTOR_LV_LIMIT_INDIVIDUAL[@actor_id]
    else
      return KGC::LB_ACTOR_LV_LIMIT_DEFAULT
    end
  end
  #--------------------------------------------------------------------------
  # ○ MaxHP 限界値の取得
  #--------------------------------------------------------------------------
  def maxhp_limit
    if KGC::LB_ACTOR_HP_LIMIT_INDIVIDUAL[@actor_id] != nil
      return KGC::LB_ACTOR_HP_LIMIT_INDIVIDUAL[@actor_id]
    else
      return KGC::LB_ACTOR_HP_LIMIT_DEFAULT
    end
  end
  #--------------------------------------------------------------------------
  # ○ MaxSP 限界値の取得
  #--------------------------------------------------------------------------
  def maxsp_limit
    if KGC::LB_ACTOR_SP_LIMIT_INDIVIDUAL[@actor_id] != nil
      return KGC::LB_ACTOR_SP_LIMIT_INDIVIDUAL[@actor_id]
    else
      return KGC::LB_ACTOR_SP_LIMIT_DEFAULT
    end
  end
  #--------------------------------------------------------------------------
  # ○ パラメータ限界値の取得
  #--------------------------------------------------------------------------
  def parameter_limit
    if KGC::LB_ACTOR_ETC_LIMIT_INDIVIDUAL[@actor_id] != nil
      return KGC::LB_ACTOR_ETC_LIMIT_INDIVIDUAL[@actor_id]
    else
      return KGC::LB_ACTOR_ETC_LIMIT_DEFAULT
    end
  end
  
  #--------------------------------------------------------------------------
  # ○ 装備武器リストの取得
  #--------------------------------------------------------------------------
  def equip_weapon_list
    result = [$data_weapons[@weapon_id]]
    return result.compact
  end
  #--------------------------------------------------------------------------
  # ○ 装備防具リストの取得
  #--------------------------------------------------------------------------
  def equip_armor_list
    result = []
    (1..4).each { |i| result << $data_armors[eval("@armor#{i}_id")] }
    return result.compact
  end
  #--------------------------------------------------------------------------
  # ○ 装備品リストの取得
  #--------------------------------------------------------------------------
  def equip_item_list
    return equip_weapon_list + equip_armor_list
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ○ MaxHP 限界値の取得
  #--------------------------------------------------------------------------
  def maxhp_limit
    return KGC::LB_ENEMY_HP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ○ MaxSP 限界値の取得
  #--------------------------------------------------------------------------
  def maxsp_limit
    return KGC::LB_ENEMY_SP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ○ パラメータ限界値の取得
  #--------------------------------------------------------------------------
  def parameter_limit
    return KGC::LB_ENEMY_ETC_LIMIT
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Party
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # ● ゴールドの増加 (減少)
  #     n : 金額
  #--------------------------------------------------------------------------
  def gain_gold(n)
    # 所持金の限界値変更
    @gold = [[@gold + n, 0].max, KGC::LB_GOLD_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● アイテムの増加 (減少)
  #     item_id : アイテム ID
  #     n       : 個数
  #--------------------------------------------------------------------------
  def gain_item(item_id, n)
    # ハッシュの個数データを更新
    if item_id > 0
      limit = $data_items[item_id].number_limit
      @items[item_id] = [[item_number(item_id) + n, 0].max, limit].min
    end
  end
  #--------------------------------------------------------------------------
  # ● 武器の増加 (減少)
  #     weapon_id : 武器 ID
  #     n         : 個数
  #--------------------------------------------------------------------------
  def gain_weapon(weapon_id, n)
    # ハッシュの個数データを更新
    if weapon_id > 0
      limit = $data_weapons[weapon_id].number_limit
      @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, limit].min
    end
  end
  #--------------------------------------------------------------------------
  # ● 防具の増加 (減少)
  #     armor_id : 防具 ID
  #     n        : 個数
  #--------------------------------------------------------------------------
  def gain_armor(armor_id, n)
    # ハッシュの個数データを更新
    if armor_id > 0
      limit = $data_armors[armor_id].number_limit
      @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, limit].min
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_ShopBuy
#==============================================================================

class Window_ShopBuy < Window_Selectable
  include BM
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    # アイテムの所持数を取得
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    # 価格が所持金以下、かつ所持数が上限でなければ通常文字色に、
    # そうでなければ無効文字色に設定
    if item.price <= $game_party.gold && number < item.number_limit
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, BM::NILCOLOR)
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Title
#==============================================================================

class Scene_Title
  include KGC
  #--------------------------------------------------------------------------
  # ● コマンド : ニューゲーム
  #--------------------------------------------------------------------------
  alias command_new_game_KGC_LimitBreak command_new_game
  def command_new_game
    command_new_game_KGC_LimitBreak

    revise_enemy_parameters
    set_enemy_status
  end
  #--------------------------------------------------------------------------
  # ● コマンド : コンティニュー
  #--------------------------------------------------------------------------
  alias command_continue_KGC_LimitBreak command_continue
  def command_continue
    command_continue_KGC_LimitBreak

    revise_enemy_parameters
    set_enemy_status
  end
  #--------------------------------------------------------------------------
  # ● 戦闘テスト
  #--------------------------------------------------------------------------
  alias battle_test_KGC_LimitBreak battle_test
  def battle_test
    battle_test_KGC_LimitBreak

    revise_enemy_parameters
    set_enemy_status
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Shop
#==============================================================================

class Scene_Shop
  #--------------------------------------------------------------------------
  # ● フレーム更新 (購入ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_buy
    # ステータスウィンドウのアイテムを設定
    @status_window.item = @buy_window.item
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # ウィンドウの状態を初期モードへ
      @command_window.activate
      @dummy_window.show
      @buy_window.deactivate
      @buy_window.hide
      @status_window.hide
      @status_window.item = nil
      # ヘルプテキストを消去
      @help_window.set_text("")
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムを取得
      @item = @buy_window.item
      # アイテムが無効の場合、または価格が所持金より上の場合
      if @item == nil or @item.price > $game_party.gold
        # ブザー SE を演奏
        Sound.play_buzzer
        return
      end
      # アイテムの所持数を取得
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      # すでに上限まで個所持している場合
      limit = @item.number_limit
      if number >= limit
        # ブザー SE を演奏
        Sound.play_buzzer
        return
      end
      # 決定 SE を演奏
      Sound.play_ok
      # 最大購入可能個数を計算
      max = (@item.price == 0 ? limit : $game_party.gold / @item.price)
      max = [max, limit - number].min
      # ウィンドウの状態を個数入力モードへ
      @buy_window.deactivate
      @buy_window.hide
      @number_window.set(@item, max, @item.price)
      @number_window.activate
      @number_window.show
    end
  end
end

戻る