VX 스크립트

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 限界突破 - KGC_LimitBreak ◆ VX ◆
#_/    ◇ Last update : 2008/01/09 ◇
#_/----------------------------------------------------------------------------
#_/  ゲーム中の各種上限値を変更します。
#_/============================================================================
#_/  再定義が多いので、「素材」の最上部に導入してください。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

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

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

  # ◆ レベル 100 以降の能力値計算式
  #  PARAMETER_CALC_METHOD = 0 のときに使用します。
  #  【 level..現レベル  param[x]..レベル x の能力値 】
  #  この計算結果をレベル 99 の能力値に加算します。
  PARAMETER_CALC_EXP = "(param[99] - param[98]) * (level - 99)"

  # ◆ アクターのレベル上限
  ACTOR_FINAL_LEVEL = []  # ← これは消さないこと!
  # ここから下に、アクターごとの最終レベルを
  #   ACTOR_FINAL_LEVEL[アクターID] = 最終レベル
  # という形式で設定します。
  # <例> ↓ アクター 1 の最終レベル 999
  ACTOR_FINAL_LEVEL[1] = 999

  # ◆ アクターのレベル上限 (デフォルト)
  #  上限を指定しなかった場合は、この値を最終レベルとして使用します。
  ACTOR_FINAL_LEVEL_DEFAULT = 999
  # ◆ アクターの経験値上限
  ACTOR_EXP_LIMIT = 99999999

  # ◆ アクターの MaxHP 上限
  ACTOR_MAXHP_LIMIT     = 99999
  # ◆ アクターの MaxMP 上限
  ACTOR_MAXMP_LIMIT     = 99999
  # ◆ アクターの攻撃力、防御力、精神力、敏捷性上限
  ACTOR_PARAMETER_LIMIT = 9999

  # ◆ エネミーの MaxHP 上限
  ENEMY_MAXHP_LIMIT     = 9999999
  # ◆ エネミーの MaxMP 上限
  ENEMY_MAXMP_LIMIT     = 9999999
  # ◆ エネミーの攻撃力、防御力、精神力、敏捷性上限
  ENEMY_PARAMETER_LIMIT = 9999

  # ◆ エネミーの能力値補正
  #  エネミーの各種能力値をデータベースの ○% にします。
  #  データベース通りにする場合は 100 にしてください。
  ENEMY_MAXHP_RATE = 100  # MaxHP
  ENEMY_MAXMP_RATE = 100  # MaxMP
  ENEMY_ATK_RATE   = 100  # 攻撃力
  ENEMY_DEF_RATE   = 100  # 防御力
  ENEMY_SPI_RATE   = 100  # 精神力
  ENEMY_AGI_RATE   = 100  # 敏捷性

  # ◆ 所持金上限
  GOLD_LIMIT = 99999999

  # ◆ アイテム所持数上限
  ITEM_NUMBER_LIMIT = 99

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

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

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

module KGC::LimitBreak
  # 正規表現を定義
  module Regexp
    # ベースアイテム
    module BaseItem
      # 所持数上限
      NUMBER_LIMIT = /<(?:NUMBER_LIMIT|所持数上限)[ ]*(d+)>/i
    end
  end

  module_function
  #--------------------------------------------------------------------------
  # ○ 敵の能力補正を適用
  #--------------------------------------------------------------------------
  def revise_enemy_parameters
    (1...$data_enemies.size).each { |i|
      enemy = $data_enemies[i]
      enemy.maxhp = enemy.maxhp * ENEMY_MAXHP_RATE / 100
      enemy.maxmp = enemy.maxmp * ENEMY_MAXMP_RATE / 100
      enemy.atk = enemy.atk * ENEMY_ATK_RATE / 100
      enemy.def = enemy.def * ENEMY_DEF_RATE / 100
      enemy.spi = enemy.spi * ENEMY_SPI_RATE / 100
      enemy.agi = enemy.agi * ENEMY_AGI_RATE / 100
    }
  end
end

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

#==============================================================================
# ■ RPG::BaseItem
#==============================================================================

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ○ 限界突破のキャッシュ生成
  #--------------------------------------------------------------------------
  def create_limit_break_cache
    @__number_limit = KGC::LimitBreak::ITEM_NUMBER_LIMIT

    self.note.split(/[rn]+/).each { |line|
      if line =~ KGC::LimitBreak::Regexp::BaseItem::NUMBER_LIMIT
        # 所持数上限
        @__number_limit = $1.to_i
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 所持数上限取得
  #--------------------------------------------------------------------------
  def number_limit
    create_limit_break_cache if @__number_limit == nil
    return @__number_limit
  end
end

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

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● MaxHP の制限値取得
  #--------------------------------------------------------------------------
  def maxhp_limit
    return KGC::LimitBreak::ENEMY_MAXHP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ○ MaxMP の制限値取得
  #--------------------------------------------------------------------------
  def maxmp_limit
    return KGC::LimitBreak::ENEMY_MAXMP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ● MaxMP の取得
  #--------------------------------------------------------------------------
  def maxmp
    return [[base_maxmp + @maxmp_plus, 0].max, maxmp_limit].min
  end
  #--------------------------------------------------------------------------
  # ○ 各種パラメータの制限値取得
  #--------------------------------------------------------------------------
  def parameter_limit
    return KGC::LimitBreak::ENEMY_PARAMETER_LIMIT
  end
  #--------------------------------------------------------------------------
  # ● 攻撃力の取得
  #--------------------------------------------------------------------------
  def atk
    n = [base_atk + @atk_plus, 1].max
    states.each { |state| n *= state.atk_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 防御力の取得
  #--------------------------------------------------------------------------
  def def
    n = [base_def + @def_plus, 1].max
    states.each { |state| n *= state.def_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 精神力の取得
  #--------------------------------------------------------------------------
  def spi
    n = [base_spi + @spi_plus, 1].max
    states.each { |state| n *= state.spi_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 { |state| n *= state.agi_rate / 100.0 }
    n = [[Integer(n), 1].max, parameter_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxHP の設定
  #     new_maxhp : 新しい MaxHP
  #--------------------------------------------------------------------------
  def maxhp=(new_maxhp)
    @maxhp_plus += new_maxhp - self.maxhp
    @maxhp_plus = [[@maxhp_plus, -maxhp_limit].max, maxhp_limit].min
    @hp = [@hp, self.maxhp].min
  end
  #--------------------------------------------------------------------------
  # ● MaxMP の設定
  #     new_maxmp : 新しい MaxMP
  #--------------------------------------------------------------------------
  def maxmp=(new_maxmp)
    @maxmp_plus += new_maxmp - self.maxmp
    @maxmp_plus = [[@maxmp_plus, -maxmp_limit].max, maxmp_limit].min
    @mp = [@mp, self.maxmp].min
  end
  #--------------------------------------------------------------------------
  # ● 攻撃力の設定
  #     new_atk : 新しい攻撃力
  #--------------------------------------------------------------------------
  def atk=(new_atk)
    @atk_plus += new_atk - self.atk
    @atk_plus = [[@atk_plus, -parameter_limit].max, parameter_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 防御力の設定
  #     new_def : 新しい防御力
  #--------------------------------------------------------------------------
  def def=(new_def)
    @def_plus += new_def - self.def
    @def_plus = [[@def_plus, -parameter_limit].max, parameter_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 精神力の設定
  #     new_spi : 新しい精神力
  #--------------------------------------------------------------------------
  def spi=(new_spi)
    @spi_plus += new_spi - self.spi
    @spi_plus = [[@spi_plus, -parameter_limit].max, parameter_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 敏捷性の設定
  #     agi : 新しい敏捷性
  #--------------------------------------------------------------------------
  def agi=(new_agi)
    @agi_plus += new_agi - self.agi
    @agi_plus = [[@agi_plus, -parameter_limit].max, parameter_limit].min
  end
end

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

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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 経験値計算
  #--------------------------------------------------------------------------
  def make_exp_list
    @exp_list = Array.new(final_level + 2)
    @exp_list[1] = @exp_list[final_level + 1] = 0
    m = actor.exp_basis
    n = 0.75 + actor.exp_inflation / 200.0
    (2..final_level).each { |i|
      @exp_list[i] = @exp_list[i-1] + Integer(m)
      m *= 1 + n
      n *= 0.9
    }
  end
  #--------------------------------------------------------------------------
  # ○ 最終レベルの取得
  #--------------------------------------------------------------------------
  def final_level
    n = KGC::LimitBreak::ACTOR_FINAL_LEVEL[self.id]
    return (n != nil ? n : KGC::LimitBreak::ACTOR_FINAL_LEVEL_DEFAULT)
  end
  #--------------------------------------------------------------------------
  # ● MaxHP の制限値取得
  #--------------------------------------------------------------------------
  def maxhp_limit
    return KGC::LimitBreak::ACTOR_MAXHP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ○ MaxMP の制限値取得
  #--------------------------------------------------------------------------
  def maxmp_limit
    return KGC::LimitBreak::ACTOR_MAXMP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ○ 各種パラメータの制限値取得
  #--------------------------------------------------------------------------
  def parameter_limit
    return KGC::LimitBreak::ACTOR_PARAMETER_LIMIT
  end
  #--------------------------------------------------------------------------
  # ○ 経験値の制限値取得
  #--------------------------------------------------------------------------
  def exp_limit
    return KGC::LimitBreak::ACTOR_EXP_LIMIT
  end
  #--------------------------------------------------------------------------
  # ● 経験値の変更
  #     exp  : 新しい経験値
  #     show : レベルアップ表示フラグ
  #--------------------------------------------------------------------------
  def change_exp(exp, show)
    last_level = @level
    last_skills = skills
    @exp = [[exp, exp_limit].min, 0].max
    while @exp >= @exp_list[@level+1] && @exp_list[@level+1] > 0
      level_up
    end
    while @exp < @exp_list[@level]
      level_down
    end
    @hp = [@hp, maxhp].min
    @mp = [@mp, maxmp].min
    if show && @level > last_level
      display_level_up(skills - last_skills)
    end
  end
  #--------------------------------------------------------------------------
  # ● レベルの変更
  #     level : 新しいレベル
  #     show  : レベルアップ表示フラグ
  #--------------------------------------------------------------------------
  def change_level(level, show)
    level = [[level, final_level].min, 1].max
    change_exp(@exp_list[level], show)
  end
  #--------------------------------------------------------------------------
  # ○ 基本パラメータの取得
  #--------------------------------------------------------------------------
  def base_parameter(type)
    case KGC::LimitBreak::PARAMETER_CALC_METHOD
    when 0  # 数式定義
      if @level >= 100
        calc_text = KGC::LimitBreak::PARAMETER_CALC_EXP.dup
        calc_text.gsub!(/level/i) { "@level" }
        calc_text.gsub!(/param[(d+)]/i) {
          "actor.parameters[type, #{$1.to_i}]"
        }
        return actor.parameters[type, 99] + eval(calc_text)
      end
    when 1  # 二次関数
      a = actor.parameters[type, 1]
      b = actor.parameters[type, 2]
      c = actor.parameters[type, 3]
      return ((a * @level + b) * @level + c)
    when 2  # 一次関数
      b = actor.parameters[type, 2]
      c = actor.parameters[type, 3]
      return (b * @level + c)
    end
    return actor.parameters[type, @level]
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxHP の取得
  #--------------------------------------------------------------------------
  def base_maxhp
    return base_parameter(0)
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxMP の取得
  #--------------------------------------------------------------------------
  def base_maxmp
    return base_parameter(1)
  end
  #--------------------------------------------------------------------------
  # ● 基本攻撃力の取得
  #--------------------------------------------------------------------------
  def base_atk
    n = base_parameter(2)
    equips.compact.each { |item| n += item.atk }
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本防御力の取得
  #--------------------------------------------------------------------------
  def base_def
    n = base_parameter(3)
    equips.compact.each { |item| n += item.def }
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本精神力の取得
  #--------------------------------------------------------------------------
  def base_spi
    n = base_parameter(4)
    equips.compact.each { |item| n += item.spi }
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本敏捷性の取得
  #--------------------------------------------------------------------------
  def base_agi
    n = base_parameter(5)
    equips.compact.each { |item| n += item.agi }
    return n
  end
end

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

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

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ○ 所持金の制限値取得
  #--------------------------------------------------------------------------
  def gold_limit
    return KGC::LimitBreak::GOLD_LIMIT
  end
  #--------------------------------------------------------------------------
  # ● ゴールドの増加 (減少)
  #     n : 金額
  #--------------------------------------------------------------------------
  def gain_gold(n)
    @gold = [[@gold + n, 0].max, gold_limit].min
  end
  #--------------------------------------------------------------------------
  # ● アイテムの増加 (減少)
  #     item          : アイテム
  #     n             : 個数
  #     include_equip : 装備品も含める
  #--------------------------------------------------------------------------
  def gain_item(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      @items[item.id] = [[number + n, 0].max, item.number_limit].min
    when RPG::Weapon
      @weapons[item.id] = [[number + n, 0].max, item.number_limit].min
    when RPG::Armor
      @armors[item.id] = [[number + n, 0].max, item.number_limit].min
    end
    n += number
    if include_equip && n < 0
      members.each { |actor|
        while n < 0 && actor.equips.include?(item)
          actor.discard_equip(item)
          n += 1
        end
      }
    end
  end
end

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

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

class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    number = $game_party.item_number(item)
    enabled = (item.price <= $game_party.gold && number < item.number_limit)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    draw_item_name(item, rect.x, rect.y, enabled)
    rect.width -= 4
    self.contents.draw_text(rect, item.price, 2)
  end
end

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

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

class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # ● データベースのロード
  #--------------------------------------------------------------------------
  alias load_database_KGC_LimitBreak load_database
  def load_database
    load_database_KGC_LimitBreak

    set_enemy_parameters
  end
  #--------------------------------------------------------------------------
  # ● 戦闘テスト用データベースのロード
  #--------------------------------------------------------------------------
  alias load_bt_database_KGC_LimitBreak load_bt_database
  def load_bt_database
    load_bt_database_KGC_LimitBreak

    set_enemy_parameters
  end
  #--------------------------------------------------------------------------
  # ○ エネミーの能力値を設定
  #--------------------------------------------------------------------------
  def set_enemy_parameters
    KGC::LimitBreak.revise_enemy_parameters
    KGC::LimitBreak.set_enemy_parameters
  end
end

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

#==============================================================================
# ■ Scene_File
#==============================================================================

class Scene_File < Scene_Base
  #--------------------------------------------------------------------------
  # ● セーブデータの読み込み
  #     file : 読み込み用ファイルオブジェクト (オープン済み)
  #--------------------------------------------------------------------------
  alias read_save_data_KGC_LimitBreak read_save_data
  def read_save_data(file)
    read_save_data_KGC_LimitBreak(file)

    (1...$data_actors.size).each { |i|
      actor = $game_actors[i]
      actor.make_exp_list
      # レベル上限チェック
      if actor.level > actor.final_level
        while actor.level > actor.final_level
          actor.level_down
        end
        # 減少した HP などを反映させるためのおまじない
        actor.change_level(actor.final_level, false)
      end
    }
  end
end

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

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

class Scene_Shop < Scene_Base
  #--------------------------------------------------------------------------
  # ● 購入アイテム選択の更新
  #--------------------------------------------------------------------------
  def update_buy_selection
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      number = $game_party.item_number(@item)
      if @item == nil || @item.price > $game_party.gold ||
          number == @item.number_limit
        Sound.play_buzzer
      else
        Sound.play_decision
        max = (@item.price == 0 ?
          @item.number_limit : $game_party.gold / @item.price)
        max = [max, @item.number_limit - number].min
        @buy_window.active = false
        @buy_window.visible = false
        @number_window.set(@item, max, @item.price)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
end

 

Who's 작은샛별

?

제작중게임

 

1.코아스타온라인

2. 신비의숲

Comment '18'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
337 중복이지만...제가 올린 단체 액알 스크립트에서 오류가 너무 많이 나서...개인 액알로 다시 올려드리는 겁니다. 15 21stcentury 2008.10.12 3429
336 전투 VX SRPG 스크립트를 살짝 손대봤습니다. 13 아이미르 2011.03.31 3428
335 전투 방패가없어? 그럼 방어못하게하는 스크립트. 16 file 할렘 2009.02.07 3425
334 웨이포인트 9 file RPGbooster 2008.10.08 3415
333 그래픽 먼가이상한데... 밤낮 변환 vx 44 작은악마 2008.03.18 3414
332 스킬 Yanfly Engine RD - Display Skill Query (스킬 상세 정보) 8 file communnn 2011.10.24 3405
331 전투 커먼이벤트 컷인 스크립트 15 허걱 2009.08.23 3399
330 메뉴 전투 결과 팝업 스크립트 12 file 카르와푸딩의아틀리에 2009.06.30 3381
329 스킬 Yanfly Engine RD - Custom Dmg Formulas (커스텀 데미지, 관계도) 6 file communnn 2011.10.25 3377
328 메시지 NMS 3.0 Beta 주석 번역본(한글) 4 인천항 2010.01.13 3369
327 원경 원경(파노라마) 바꾸기 9 file 허걱 2010.05.28 3369
326 타이틀/게임오버 [NO.0 간단 스크립트] 타이틀에 제작자 정보 올려보기 14 file NO.0 2011.01.30 3362
325 전투 GTBS_VX 1.0 택틱컬rpg 14 file RPGbooster 2008.10.08 3352
324 메뉴 헬프 윈도우 중앙표시 스크립트 11 file 양념통닼 2008.06.10 3348
323 키입력 커맨드 입력 스킬 시스템 17 file 양념통닼 2008.05.29 3345
322 MOG 스토리 씬 22 file RPGbooster 2008.10.08 3345
321 메뉴 전투 결과 상세 표시 스크립트 (한글화) 15 file 강진수 2010.02.26 3344
320 기타 높이(층)를 설정하는 스크립트 11 file 카르와푸딩의아틀리에 2009.07.01 3343
319 타이틀/게임오버 심플한 게임오버화면 28 file RPGbooster 2008.10.08 3328
318 상태/속성 MOG - Menu Status V 2.0 16 아방스 2011.01.01 3316
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 32 Next
/ 32