#============================================================================== # ■ パラメータ上限チェック Ver 0.80                  By むー #------------------------------------------------------------------------------ # ドラゴンクエストのように、パラメータを基本と装備品分とで分けて考えます。 # その上で、パラメータの上昇が可能かをチェックするスクリプトです。 # VX Aceのパラメータは、基本とプラス値(装備品+別途上昇値)となっており、 # 装備品の上昇値だけを引いたパラメータがないので作成しました。 #============================================================================== module MOO_STATUS_PLUS_MINUS #-------------------------------------------------------------------------- # 以下、設定箇所です。 #-------------------------------------------------------------------------- # 装備品を含まないパラメータの限界値 MAX_STATUS = [999, 999, 255, 255, 255, 255, 255, 255] # MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK # 各パラメータのゲーム上での限界値 MAX_GENERAL = [999, 999, 999, 999, 999, 999, 999, 999] # MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK #-------------------------------------------------------------------------- # ここまで。 #-------------------------------------------------------------------------- # ★考え方★ # # ドラゴンクエスト(以下DQ)をご存じであれば、理解しやすいと思います。 # DQ(5まで?)でのパラメータの考え方は、以下のようになっています。 # # [例: 力と攻撃力] # 力は255までです。それが上記設定のMAX_STATUS(この場合ATK)です。 # 253の時に力の種(上昇値1〜3)を使っても、上昇限界値は2です。3は上がりません。 # 力255の時、装備品の攻撃力総計が150であった場合、攻撃力は255+150の405です。 # それでバイキルトを使えば、たぶん810です。それが上記設定のMAX_GENERALです。 #   a = 基本パラメータ(力) #   b = 別途上昇値(アイテムやイベントなどでの上昇) #   c = 装備品の上昇値 #   d = 攻撃力 # とすると、DQでは #   x = a + b (x <= 255) #   d = x + c # となっています。ですがAceでは、 #   x = a (スクリプト内ではparam_base) #   y = b + c (スクリプト内ではparam_plus/装備を外すとbだけになる) #   d = x + y # となっており、装備品を持たない場合の最大値(a + b)が算出できません。 # AceでDQの種のようなアイテムを作りたい場合、計算するのが少々厄介です。 # それは、上限値が装備品込みの値であり、基本値の限界がないからです。 # そのために本スクリプトを作成しました。ああ、ややこしい(笑) # 要は a + b を算出するために d - c を計算するスクリプトです。 # # ★使い方★ # # pm_params_a(アクターID, パラメータID, 上昇値, [変数番号]) # pm_params_m(メンバーID, パラメータID, 上昇値, [変数番号]) # # 上記をイベントのスクリプトに記述して下さい。 # # [アクターID] # チェックしたいアクターのIDです。 # # [メンバーID] # パーティーの何番目のキャラクターかを指定します(1から)。 # 用途によってpm_params_aかpm_params_mかを使い分けられます。 # # [パラメータID] # 0=最大HP 1=最大MP 2=攻撃力 3=防御力 4=魔法力 5=魔法防御 6=敏捷性 7=運 # # [上昇値] # 上昇させたい値を指定します。 # # [変数番号] # 上昇可能な値を格納する変数番号を指定します。省略可能です。 # # 返り値は変数番号に格納されるものと同じです。 # 例えばMAX_STATUSのATKを255としたとして、武器を含まない現攻撃力が250とします。 # ATK+5のアイテムを使ったとして、以下のようにしたとします。 # pm_params_a(1, 2, 5, 1) # pm_params_m(1, 2, 5, 1) # この場合、変数1に5が入り、返り値としても5が戻ります。 # # MAX_STATUSのATKが255で、装備品を含まない現攻撃力が254、アイテムATK+5の場合 # pm_params_a(1, 2, 5, 1) # pm_params_m(1, 2, 5, 1) # この場合、変数1に1が入り、返り値としても1が戻ります。 # 最大値が255に対して現在が254なので、+5を試みても1しか上昇しないという事です。 # この変数に格納した値をプラスにして下さい。DQの種のできあがりです。 end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) # の内部で使用され、Game_Party クラス($game_party)からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 装備品を除くステータス最大値の配列 #-------------------------------------------------------------------------- def moo_max_status MOO_STATUS_PLUS_MINUS::MAX_STATUS end #-------------------------------------------------------------------------- # ○ ステータス最大値の配列 #-------------------------------------------------------------------------- def moo_max_general MOO_STATUS_PLUS_MINUS::MAX_GENERAL end #-------------------------------------------------------------------------- # ◎ 通常能力値の最大値取得 #-------------------------------------------------------------------------- def param_max(param_id) # 各パラメータのゲーム上での最大値を設定 for i in 0...moo_max_general.size return moo_max_general[i] if param_id == i end end #-------------------------------------------------------------------------- # ○ 装備品による能力上昇値を配列で取得 #-------------------------------------------------------------------------- def moo_equip_plus # 配列初期化 get_params = [0, 0, 0, 0, 0, 0, 0, 0] # 装備可処分ループ for i in 0...@equips.size # 装備品があった場合 if @equips[i].object != nil # 8つのパラメータを加算 for j in 0..7 get_params[j] += @equips[i].object.params[j] end end end # 戻り return get_params end #-------------------------------------------------------------------------- # ○ パラメータ上昇チェック # param_id : パラメータID # point : 上昇させたい値 #-------------------------------------------------------------------------- def pm_params(param_id, point) pt = param_id pm = param_base(pt) + param_plus(pt) - moo_equip_plus[pt] + point point = moo_max_status[pt] - pm if pm > moo_max_status[pt] return point end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ パラメータ上昇チェック(アクター指定) # actor_id : アクターID # param_id : パラメータID # point : 上昇させたい値 # val : 上昇可能な値を格納する変数番号 #-------------------------------------------------------------------------- def pm_params_a(actor_id, param_id, point, val = 0) pnt = $game_actors[actor_id].pm_params(param_id, point) pnt = point + pnt if pnt <= 0 $game_variables[val] = pnt if val > 0 return pnt end #-------------------------------------------------------------------------- # ○ パラメータ上昇チェック(パーティーメンバーから指定) # party_id : パーティーの何番目か(1〜) # param_id : パラメータID # point : 上昇させたい値 # val : 上昇可能な値を格納する変数番号 #-------------------------------------------------------------------------- def pm_params_m(party_id, param_id, point, val = 0) aid = $game_party.members[party_id - 1].id pnt = $game_actors[aid].pm_params(param_id, point) pnt = point + pnt if pnt <= 0 $game_variables[val] = pnt if val > 0 return pnt end end