#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ◆ 限界突破 - KGC_LimitBreak ◆ VXAce ◆ #_/ ◇ Last update : 2008/01/09 ◇ #_/ ◇ RGSS3移植 : faida ◇ #_/---------------------------------------------------------------------------- #_/ ゲーム中の各種上限値を変更します。 #_/============================================================================ #_/ 再定義が多いので、「素材」の最上部に導入してください。 #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #============================================================================== # ★ カスタマイズ項目 - 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_MHP_RATE = 100 # MaxHP ENEMY_MMP_RATE = 100 # MaxMP ENEMY_ATK_RATE = 100 # 攻撃力 ENEMY_DEF_RATE = 100 # 防御力 ENEMY_MAT_RATE = 100 # 魔法力 ENEMY_MDF_RATE = 100 # 魔法防御 ENEMY_AGI_RATE = 100 # 敏捷性 ENEMY_LUK_RATE = 100 # 運 # ◆ 所持金上限 GOLD_LIMIT = 99999999 # ◆ アイテム所持数上限 ITEM_NUMBER_LIMIT = 99 module_function #-------------------------------------------------------------------------- # ○ 敵能力値直接指定 # ここで、敵の MaxHP などを直接指定することができます。 # データベースに入りきらない数値を指定する場合に使用してください。 #-------------------------------------------------------------------------- def set_enemy_parameters # <例> ID:10 の敵の MaxHP を 2000000 にする場合 # $data_enemies[10].params[0] = 2000000 # <例> ID:16 の敵の攻撃力を 5000 にする場合 # $data_enemies[16].params[2] = 5000 # <例> ID:20 の敵の防御力を2倍にする場合 # $data_enemies[20].params[3] *= 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.params[0] = enemy.params[0] * ENEMY_MHP_RATE / 100 enemy.params[1] = enemy.params[1] * ENEMY_MMP_RATE / 100 enemy.params[2] = enemy.params[2] * ENEMY_ATK_RATE / 100 enemy.params[3] = enemy.params[3] * ENEMY_DEF_RATE / 100 enemy.params[4] = enemy.params[4] * ENEMY_MAT_RATE / 100 enemy.params[5] = enemy.params[5] * ENEMY_MDF_RATE / 100 enemy.params[6] = enemy.params[6] * ENEMY_AGI_RATE / 100 enemy.params[7] = enemy.params[7] * ENEMY_LUK_RATE / 100 } end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ○ 限界突破のキャッシュ生成 #-------------------------------------------------------------------------- def create_limit_break_cache @__number_limit = KGC::LimitBreak::ITEM_NUMBER_LIMIT self.note.split(/[\r\n]+/).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 #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ DataManager #============================================================================== class << DataManager #-------------------------------------------------------------------------- # ● データベースのロード #-------------------------------------------------------------------------- alias load_database_KGC_LimitBreak load_database def load_database load_database_KGC_LimitBreak set_enemy_parameters end #-------------------------------------------------------------------------- # ○ エネミーの能力値を設定 #-------------------------------------------------------------------------- def set_enemy_parameters KGC::LimitBreak.revise_enemy_parameters KGC::LimitBreak.set_enemy_parameters end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Battler #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ● 通常能力値の最大値取得 #-------------------------------------------------------------------------- def param_max(param_id) return KGC::LimitBreak::ENEMY_MAXHP_LIMIT if param_id == 0 # MHP return KGC::LimitBreak::ENEMY_MAXMP_LIMIT if param_id == 1 # MMP return KGC::LimitBreak::ENEMY_PARAMETER_LIMIT end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 最終レベルの取得 #-------------------------------------------------------------------------- def final_level n = KGC::LimitBreak::ACTOR_FINAL_LEVEL[self.id] return (n != nil ? n : KGC::LimitBreak::ACTOR_FINAL_LEVEL_DEFAULT) end #-------------------------------------------------------------------------- # ● 通常能力値の最大値取得 #-------------------------------------------------------------------------- def param_max(param_id) return KGC::LimitBreak::ACTOR_MAXHP_LIMIT if param_id == 0 # MHP return KGC::LimitBreak::ACTOR_MAXMP_LIMIT if param_id == 1 # MMP return KGC::LimitBreak::ACTOR_PARAMETER_LIMIT end #-------------------------------------------------------------------------- # ● 最大レベル #-------------------------------------------------------------------------- alias max_level_KGC_LimitBreak max_level def max_level limit = (KGC::LimitBreak::ACTOR_FINAL_LEVEL[self.id] || 1) [max_level_KGC_LimitBreak, limit].max end #-------------------------------------------------------------------------- # ○ 経験値の制限値取得 #-------------------------------------------------------------------------- def exp_limit return KGC::LimitBreak::ACTOR_EXP_LIMIT end #-------------------------------------------------------------------------- # ● 経験値の変更 #-------------------------------------------------------------------------- alias change_exp_KGC_LimitBreak change_exp def change_exp(exp, show) change_exp_KGC_LimitBreak([[exp, exp_limit].min, 0].max, show) end #-------------------------------------------------------------------------- # ● 通常能力値の基本値取得 #-------------------------------------------------------------------------- def param_base(param_id) 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) { "self.class.params[param_id, #{$1.to_i}]" } return self.class.params[param_id, 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 self.class.params[param_id, @level] end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● 所持金の最大値を取得 #-------------------------------------------------------------------------- def max_gold return KGC::LimitBreak::GOLD_LIMIT end #-------------------------------------------------------------------------- # ● アイテムの最大所持数取得 #-------------------------------------------------------------------------- def max_item_number(item) return item.number_limit end end