기타

레벨, 능력치 무한 스크립트

by 백호 posted Feb 22, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆능력치 한계 돌파 - KGC_ParameterLimitOver◆
#_/----------------------------------------------------------------------------
#_/ 능력치의 상한을 변경합니다.
#_/  (터무니 없는 값을 설정한다면 버그(bug)る 가능성 있고)
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

# 도입 끝나고 플래그(flag)를 온(on)
$imported["ParameterLimitOver"] = true

#==============================================================================
# ★ 커스터마이즈(customize)항목 ★
#==============================================================================

# 능력치 보정치(소수점 사용 가)
$maxhp_correct = 1  # MAXHP
$maxsp_correct = 1  # MAXSP

class Game_Battler
  # 적의 HP 상한
  ENEMY_HP_LIMIT = 9999999
  # 적의 SP 상한
  ENEMY_SP_LIMIT = 99999
  # 적의 「str, dex, agi, int」상한
  ENEMY_ETC_LIMIT = 9999
end

class Game_Actor < Game_Battler
  # 배우(actor)의 레벨(level) 상한
  #  배우(actor) ID 순서로 배열에 격납(처음은 nil)
  ACTOR_LV_LIMIT = [nil]
  # 상한미 지정 배우(actor)의 레벨(level) 상한
  #  상한미 지정(nil)의 배우(actor)는 이 값을 사용
  ACTOR_LV_LIMIT_DEFAULT = 512
  # 배우(actor)의 경험치 상한
  ACTOR_EXP_LIMIT = 9999999999
  # 배우(actor)의 HP 상한
  ACTOR_HP_LIMIT = 9999999
  # 배우(actor)의 SP 상한
  ACTOR_SP_LIMIT = 9999999
  # 배우(actor)의 「str, dex, agi, int」상한
  ACTOR_ETC_LIMIT = 99999

  # 레벨(level) 100 이후의 능력치 계산 식(lv:현실 레벨(level) p[x]:레벨(level) x의 능력 치)
  #  이 계산 결과를 레벨(level) 99 의(것) 능력치에 가산
  ACTOR_LV100_CALC = "(p[2] - p[1]) * (lv - 99)"
end

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

#==============================================================================
# ■ Game_Battler (분할 정의 1)
#------------------------------------------------------------------------------
#  버틀러(butler)를 취급한 클래스(class)입니다.이 클래스(class)는 Game_Actor 클래스(class)와 Game_Enemy 쿠라
# 스의 슈퍼(super) 클래스(class)로서 사용됩니다.
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● MaxHP 의(것) 취득
  #--------------------------------------------------------------------------
  def maxhp
    n = [[base_maxhp + @maxhp_plus, 1].max, ENEMY_HP_LIMIT].min
    for i in @states
      n *= $data_states[i].maxhp_rate / 100.0
    end
    n = [[Integer(n), 1].max, ENEMY_HP_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxSP 의(것) 취득
  #--------------------------------------------------------------------------
  def maxsp
    n = [[base_maxsp + @maxsp_plus, 0].max, ENEMY_SP_LIMIT].min
    for i in @states
      n *= $data_states[i].maxsp_rate / 100.0
    end
    n = [[Integer(n), 1].max, ENEMY_SP_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 완력의 취득
  #--------------------------------------------------------------------------
  def str
    n = [[base_str + @str_plus, 1].max, ENEMY_ETC_LIMIT].min
    for i in @states
      n *= $data_states[i].str_rate / 100.0
    end
    n = [[Integer(n), 1].max, ENEMY_ETC_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 손재주가  사노 취득
  #--------------------------------------------------------------------------
  def dex
    n = [[base_dex + @dex_plus, 1].max, ENEMY_ETC_LIMIT].min
    for i in @states
      n *= $data_states[i].dex_rate / 100.0
    end
    n = [[Integer(n), 1].max, ENEMY_ETC_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 신속함의 취득
  #--------------------------------------------------------------------------
  def agi
    n = [[base_agi + @agi_plus, 1].max, ENEMY_ETC_LIMIT].min
    for i in @states
      n *= $data_states[i].agi_rate / 100.0
    end
    n = [[Integer(n), 1].max, ENEMY_ETC_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 마력의 취득
  #--------------------------------------------------------------------------
  def int
    n = [[base_int + @int_plus, 1].max, ENEMY_ETC_LIMIT].min
    for i in @states
      n *= $data_states[i].int_rate / 100.0
    end
    n = [[Integer(n), 1].max, ENEMY_ETC_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxHP 의(것) 설정
  #    maxhp : 새롭다 MaxHP
  #--------------------------------------------------------------------------
  def maxhp=(maxhp)
    @maxhp_plus += maxhp - self.maxhp
    @maxhp_plus = [[@maxhp_plus, -ENEMY_HP_LIMIT].max, ENEMY_HP_LIMIT].min
    @hp = [@hp, self.maxhp].min
  end
  #--------------------------------------------------------------------------
  # ● MaxSP 의(것) 설정
  #    maxsp : 새롭다 MaxSP
  #--------------------------------------------------------------------------
  def maxsp=(maxsp)
    @maxsp_plus += maxsp - self.maxsp
    @maxsp_plus = [[@maxsp_plus, -SP_LIMIT].max, SP_LIMIT].min
    @sp = [@sp, self.maxsp].min
  end
  #--------------------------------------------------------------------------
  # ● 완력의 설정
  #    str : 새로운 완력
  #--------------------------------------------------------------------------
  def str=(str)
    @str_plus += str - self.str
    @str_plus = [[@str_plus, -ENEMY_ETC_LIMIT].max, ENEMY_ETC_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● 손재주가  사노 설정
  #    dex : 새로운 손재주가 
  #--------------------------------------------------------------------------
  def dex=(dex)
    @dex_plus += dex - self.dex
    @dex_plus = [[@dex_plus, -ENEMY_ETC_LIMIT].max, ENEMY_ETC_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● 신속함의 설정
  #    agi : 새로운 신속함
  #--------------------------------------------------------------------------
  def agi=(agi)
    @agi_plus += agi - self.agi
    @agi_plus = [[@agi_plus, -ENEMY_ETC_LIMIT].max, ENEMY_ETC_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● 마력의 설정
  #    int : 새로운 마력
  #--------------------------------------------------------------------------
  def int=(int)
    @int_plus += int - self.int
    @int_plus = [[@int_plus, -ENEMY_ETC_LIMIT].max, ENEMY_ETC_LIMIT].min
  end
end

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

#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  배우(actor)를 취급한 클래스(class)입니다.이 클래스(class)는 Game_Actors 클래스(class) ($game_actors)
# 의(것) 내부에서 사용되고,Game_Party 클래스(class) ($game_party) 얽히다 참조됩니다.
#==============================================================================

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
    for i in 2..self.final_level + 1
      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
  end
  #--------------------------------------------------------------------------
  # ● EXP 의(것) 변경
  #    exp : 새롭다 EXP
  #--------------------------------------------------------------------------
  def exp=(exp)
    @exp = [[exp, ACTOR_EXP_LIMIT].min, 0].max
    # 레벨업(level up)
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      # 숙련(skill) 습득
      for j in $data_classes[@class_id].learnings
        if j.level == @level
          learn_skill(j.skill_id)
        end
      end
    end
    # 레벨(level) 다운(down)
    while @exp < @exp_list[@level]
      @level -= 1
    end
    # 레벨(level)가 100 이상의 경우
    if @level >= 100
      $data_actors[@actor_id].parameters.resize(6, @level + 1)
      for k in 0..5
        # 능력치 미설정의 경우
        if $data_actors[@actor_id].parameters[k, @level] == 0
          # 해당 레벨(level)에서의 능력치를 계산
          calc_text = ACTOR_LV100_CALC
          calc_text.gsub!(/lv/) { "@level" }
          calc_text.gsub!(/p[([0-9]+)]/) { "$data_actors[@actor_id].parameters[k, #{$1.to_i}]" }
          n = $data_actors[@actor_id].parameters[k, 99]
          n += eval(calc_text)
          $data_actors[@actor_id].parameters[k, @level] = [n, 32767].min
        end
      end
    end
    # 현재의 HP 라고(와) SP 이(가) 최대치를 초과하고 있다면 수정
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end
  #--------------------------------------------------------------------------
  # ● MaxHP 의(것) 취득
  #--------------------------------------------------------------------------
  def maxhp
    n = [[base_maxhp + @maxhp_plus, 1].max, ACTOR_HP_LIMIT].min
    for i in @states
      n *= $data_states[i].maxhp_rate / 100.0
    end
    n = [[Integer(n), 1].max, ACTOR_HP_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 기본 MaxHP 의(것) 취득
  #--------------------------------------------------------------------------
  def base_maxhp
    n = $data_actors[@actor_id].parameters[0, @level]
    n *= $maxhp_correct
    # MAXHP 을(를) 정수에 고치고 돌려 준다
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # ● MaxSP 의(것) 취득
  #--------------------------------------------------------------------------
  def maxsp
    n = [[base_maxsp + @maxsp_plus, 0].max, ACTOR_SP_LIMIT].min
    for i in @states
      n *= $data_states[i].maxsp_rate / 100.0
    end
    n = [[Integer(n), 1].max, ACTOR_SP_LIMIT].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 기본 MaxSP 의(것) 취득
  #--------------------------------------------------------------------------
  def base_maxsp
    n = $data_actors[@actor_id].parameters[1, @level]
    n *= $maxsp_correct
    # MAXSP 을(를) 정수에 고치고 돌려 준다
    return Integer(n)
  end
  unless $imported["EquipIncrease"]
  #--------------------------------------------------------------------------
  # ● 기본 완력의 취득
  #--------------------------------------------------------------------------
  def base_str
    n = $data_actors[@actor_id].parameters[2, @level]
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.str_plus : 0
    n += armor1 != nil ? armor1.str_plus : 0
    n += armor2 != nil ? armor2.str_plus : 0
    n += armor3 != nil ? armor3.str_plus : 0
    n += armor4 != nil ? armor4.str_plus : 0
    return [[n, 1].max, ACTOR_ETC_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● 기본 손재주가  사노 취득
  #--------------------------------------------------------------------------
  def base_dex
    n = $data_actors[@actor_id].parameters[3, @level]
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.dex_plus : 0
    n += armor1 != nil ? armor1.dex_plus : 0
    n += armor2 != nil ? armor2.dex_plus : 0
    n += armor3 != nil ? armor3.dex_plus : 0
    n += armor4 != nil ? armor4.dex_plus : 0
    return [[n, 1].max, ACTOR_ETC_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● 기본 신속함의 취득
  #--------------------------------------------------------------------------
  def base_agi
    n = $data_actors[@actor_id].parameters[4, @level]
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.agi_plus : 0
    n += armor1 != nil ? armor1.agi_plus : 0
    n += armor2 != nil ? armor2.agi_plus : 0
    n += armor3 != nil ? armor3.agi_plus : 0
    n += armor4 != nil ? armor4.agi_plus : 0
    return [[n, 1].max, ACTOR_ETC_LIMIT].min
  end
  #--------------------------------------------------------------------------
  # ● 기본 마력의 취득
  #--------------------------------------------------------------------------
  def base_int
    n = $data_actors[@actor_id].parameters[5, @level]
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.int_plus : 0
    n += armor1 != nil ? armor1.int_plus : 0
    n += armor2 != nil ? armor2.int_plus : 0
    n += armor3 != nil ? armor3.int_plus : 0
    n += armor4 != nil ? armor4.int_plus : 0
    return [[n, 1].max, ACTOR_ETC_LIMIT].min
  end
  end
  #--------------------------------------------------------------------------
  # ● 레벨(level)의 변경
  #    level : 새로운 레벨(level)
  #--------------------------------------------------------------------------
  def level=(level)
    # 상하한 체크(check)
    level = [[level, self.final_level].min, 1].max
    # EXP 을(를) 변경
    self.exp = @exp_list[level]
  end
  #--------------------------------------------------------------------------
  # ● 최종 레벨(level)의 취득
  #--------------------------------------------------------------------------
  def final_level
    return ACTOR_LV_LIMIT[@actor_id] != nil ? ACTOR_LV_LIMIT[@actor_id] : ACTOR_LV_LIMIT_DEFAULT
  end
end

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

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  에네미를 취급한 클래스(class)입니다.이 클래스(class)는 Game_Troop 클래스(class) ($game_troop) 의(것)
# 내부에서 사용됩니다.
#==============================================================================

class Game_Enemy < Game_Battler
  unless $imported["BattleDifficulty"]
  #--------------------------------------------------------------------------
  # ● 기본 MaxHP 의(것) 취득
  #--------------------------------------------------------------------------
  def base_maxhp
    n = $data_enemies[@enemy_id].maxhp
    n *= $maxhp_correct
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # ● 기본 MaxSP 의(것) 취득
  #--------------------------------------------------------------------------
  def base_maxsp
    n = $data_enemies[@enemy_id].maxsp
    n *= $maxsp_correct
    return Integer(n)
  end
  end
end

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

#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  파티(party)를 취급한 클래스(class)입니다.골드(gold)나 아이템(item)등의 정보가 포함됩니다.이 쿠
# 래스(RAS)의 인(in) 스탠스(stance)는 $game_party 로 참조됩니다.
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # ● 골드(gold)의 증가 (감소)
  #    n : 금액
  #--------------------------------------------------------------------------
  def gain_gold(n)
    # 소지금의 한계치 변경
    @gold = [[@gold + n, 0].max, 99999999].min
  end
end

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

#==============================================================================
# ■ Scene_Battle (분할 정의 4)
#------------------------------------------------------------------------------
#  전투(battle) 화면의 처리를 행한 클래스(class)입니다.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 기본 액션(action) 결과 작성
  #--------------------------------------------------------------------------
  alias make_basic_action_result_KGC_ParameterLimitOver make_basic_action_result
  def make_basic_action_result
    # 효과 발동전의 HP를 보존
    last_hp = []
    battlers = $game_party.actors + $game_troop.enemies
    for i in 0...battlers.size
      last_hp[i] = battlers[i].hp
    end

    # 원래의 처리를 실행
    make_basic_action_result_KGC_ParameterLimitOver

    # 공격의 경우
    if @active_battler.current_action.basic == 0
      for target in @target_battlers
        # 데미지(damage)가 수치가 아닌 경우는 차에
        next if !target.damage.is_a?(Numeric) || target.damage <= 0
        # 데미지(damage)치 조정
        target.damage = Integer(target.damage * $maxhp_correct * 0.75)
        target.base_damage = target.damage if $imported["BonusGauge"]
        # HP 감소 처리
        for i in 0...battlers.size
          if battlers[i] == target
            target.hp = last_hp[i]
            target.hp -= target.damage
            break
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 숙련(skill) 액션(action) 결과 작성
  #--------------------------------------------------------------------------
  alias make_skill_action_result_KGC_ParameterLimitOver make_skill_action_result
  def make_skill_action_result
    # 효과 발동전의 HP를 보존
    last_hp = []
    battlers = $game_party.actors + $game_troop.enemies
    for i in 0...battlers.size
      last_hp[i] = battlers[i].hp
    end

    # 원래의 처리를 실행
    make_skill_action_result_KGC_ParameterLimitOver

    # 기력 증감 속성을 갖고 있지 않다,또한 비율 데미지(damage)가 아닌  경우
    if !@skill.element_set.include?($game_special_elements["spirit_id"]) &&
        ($imported["RateDamage"] && check_damage_rate(@skill) == nil) &&
        ($imported["SPCostAlter"] && check_sp_rate(@skill) == nil)
      for target in @target_battlers
        # 데미지(damage)가 수치가 아닌 경우는 차에
        next if !target.damage.is_a?(Numeric)
        # 데미지(damage)치 조정
        target.damage = Integer(target.damage * $maxhp_correct * 0.75)
        target.base_damage = target.damage if $imported["BonusGauge"]
        # HP 감소 처리
        for i in 0...battlers.size
          if battlers[i] == target
            target.hp = last_hp[i]
            target.hp -= target.damage
            break
          end
        end
      end
    end
  end
end

===================================================================
이건 능력치 상승하는것이
다른버전과 다르게 데이터 베이스에서 설정하는거랑 같습니다
전 이걸 사용중입니다