#============================================================================== # ■ スキル使用条件 Ver1.1                       By むー #------------------------------------------------------------------------------ # スキルに使用制限を付けます。 # 付けられる制限は、使用者のパラメータ値です。 # 例えばレベルが5の倍数、攻撃力が100以上、TPの下1桁が6の時、などです。 # アイテムは、メモ欄取得までは作りましたが、やめました。 # アイテムはスキルのようにアクター個別ではなく全員共通なので、 # 戦闘中ならともかく、移動中に条件の判断を付けさせるのが非常に面倒に思え、 # また仕様自体が曖昧になってしまいそうだったので、スキルだけにしました。 # # [使い方] # # スキルのメモ欄に <使用条件LEV倍数:5> のように記述します。 # この場合、レベルが5の倍数の時のみ、該当のスキルが使えます。 # 移動中、戦闘中、いずれも有効です。 # また、複数条件を付ける事ができます。 # <使用条件LEV倍数:5> # <使用条件MHP以上:500> # などとすると、レベルが5の倍数かつ最大HPが500以上の時に使えるようになります。 # また応用として # <使用条件LEV倍数:9,-3> # のようにすると、3の倍数では使用不可、 # けれど例外で9の倍数の時には使用可能となります。書く順番は逆でも構いません。 # # 条件を指定しなかったスキルは、VX Aceのデフォルト判断と成ります。 # # なお「使用条件LEV倍数」などの文字は、ここより少し下にある内容を変えて、 # 好きな文字にする事ができます。デフォルトが気に入らない場合は変えてください。 # # [注意点] # # ・同一の条件をひとつのスキルに書くと、使えなくなります(たぶん)。 #   →(例) <使用条件LEV倍数:5> と <使用条件LEV倍数:7> #       こういった場合は <使用条件LEV倍数:35> としてください。 # # ・スキル使用条件には、デフォルトの仕様も含まれています。 #  たとえこのスクリプトの仕様上で使用条件がそろっていても、 #  元々TPが10必要なのに足りないなどの場合は使えません。 # # いろいろ条件が複雑ですので、全てのパターンをテストしていません。 # 大体こんなモンだろうというところで精根尽きました(笑) #============================================================================== $moo_item_condition = true module MOO_ITEM_CONDITION #-------------------------------------------------------------------------- # 以下、設定箇所です。 #-------------------------------------------------------------------------- # 使用可能と使用不可どちらを優先させるか EITHER = false # true = 使用可能を優先 # false = 使用不可を優先 # # [例] # LVが5の倍数で使用可能 # 現在HP100以上で使用可能 # →現状がLV50でHPが90の場合にどちらの条件を優先させるか #  true = 使える / false = 使えない # # <使用条件LEV倍数:9,-3> # のように指定した場合は、この条件は無視して、使用可能を優先します。 #-------------------------------------------------------------------------- # 設定ここまで。 #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- # 以下、スキルのメモ欄に指定する項目の説明です。 #-------------------------------------------------------------------------- # パラメータの倍数によって使用可能が決まります。 MULTIPLE = ["使用条件LEV倍数", # レベル倍数 "使用条件MHP倍数", # 最大HP倍数 "使用条件MMP倍数", # 最大MP倍数 "使用条件NHP倍数", # 現在HP倍数 "使用条件NMP倍数", # 現在MP倍数 "使用条件NTP倍数", # 現在TP倍数 "使用条件ATK倍数", # 攻撃力倍数 "使用条件DEF倍数", # 守備力倍数 "使用条件MAT倍数", # 魔法力倍数 "使用条件MDF倍数", # 魔法防御倍数 "使用条件AGL倍数", # 敏捷性倍数 "使用条件LUK倍数"] # 運倍数 # <使用条件LEV倍数:5> とすると、LVが5の倍数の時に使用可能となります。 # <使用条件LEV倍数:-5> とすると、LVが5の倍数の時には使用不可となります。 # パラメータの値によって使用可能が決まります。 JUST = ["使用条件LEV定数", # レベルちょうど "使用条件MHP定数", # 最大HPちょうど "使用条件MMP定数", # 最大MPちょうど "使用条件NHP定数", # 現在HPちょうど "使用条件NMP定数", # 現在MPちょうど "使用条件NTP定数", # 現在TPちょうど "使用条件ATK定数", # 攻撃力ちょうど "使用条件DEF定数", # 守備力ちょうど "使用条件MAT定数", # 魔法力ちょうど "使用条件MDF定数", # 魔法防御ちょうど "使用条件AGL定数", # 敏捷性ちょうど "使用条件LUK定数"] # 運ちょうど # <使用条件LEV定数:5> とすると、LVが5の時に使用可能となります。 # <使用条件LEV定数:-5> とすると、LVが5の時には使用不可となります。 # パラメータの値(以上)によって使用可能が決まります。 ABOVE = ["使用条件LEV以上", # レベル以上 "使用条件MHP以上", # 最大HP以上 "使用条件MMP以上", # 最大MP以上 "使用条件NHP以上", # 現在HP以上 "使用条件NMP以上", # 現在MP以上 "使用条件NTP以上", # 現在TP以上 "使用条件ATK以上", # 攻撃力以上 "使用条件DEF以上", # 守備力以上 "使用条件MAT以上", # 魔法力以上 "使用条件MDF以上", # 魔法防御以上 "使用条件AGL以上", # 敏捷性以上 "使用条件LUK以上"] # 運以上 # <使用条件LEV定数:5> とすると、LVが5以上の時に使用可能となります。 # <使用条件LEV定数:-5> とすると、LVが5以上の時には使用不可となります。 # パラメータの値(以下)によって使用可能が決まります。 FOLLOWING =["使用条件LEV以下", # レベル以下 "使用条件MHP以下", # 最大HP以下 "使用条件MMP以下", # 最大MP以下 "使用条件NHP以下", # 現在HP以下 "使用条件NMP以下", # 現在MP以下 "使用条件NTP以下", # 現在TP以下 "使用条件ATK以上", # 攻撃力以下 "使用条件DEF以下", # 守備力以下 "使用条件MAT以下", # 魔法力以下 "使用条件MDF以下", # 魔法防御以下 "使用条件AGL以下", # 敏捷性以下 "使用条件LUK以下"] # 運以上 # <使用条件LEV定数:5> とすると、LVが5以下の時に使用可能となります。 # <使用条件LEV定数:-5> とすると、LVが5以下の時には使用不可となります。 # 以上と以下の併用で、HP100以下かつHP200以上というのが可能かも知れません。 # パラメータの下1桁によって使用可能が決まります。 GAIN = ["使用条件LEV付く", # レベル付く "使用条件MHP付く", # 最大HP付く "使用条件MMP付く", # 最大MP付く "使用条件NHP付く", # 現在HP付く "使用条件NMP付く", # 現在MP付く "使用条件NTP付く", # 現在TP付く "使用条件ATK付く", # 攻撃力付く "使用条件DEF付く", # 守備力付く "使用条件MAT付く", # 魔法力付く "使用条件MDF付く", # 魔法防御付く "使用条件AGL付く", # 敏捷性付く "使用条件LUK付く"] # 運付く # <使用条件LEV以上:5> とすると、LVの1桁目が5の時に使用可能となります。 # <使用条件LEV以上:-5> とすると、LVの1桁目が5の時には使用不可となります。 #-------------------------------------------------------------------------- # 説明ここまで。 #-------------------------------------------------------------------------- end #============================================================================== # ■ Window_Selectable #------------------------------------------------------------------------------ #  カーソルの移動やスクロールの機能を持つウィンドウクラスです。 #============================================================================== class Window_Selectable < Window_Base #-------------------------------------------------------------------------- # ○ 本スクリプトでの使用可能・不可能の判断 #-------------------------------------------------------------------------- def moo_item_condition_get_value(actor, item) # 判断配列変数初期化 n = [] # 各条件による使用可能および不可能判断を取得 for i in 1..5 n << moo_item_condition_judgment(moo_item_condition_judg(actor, item, i)) end # 最終結果 (1=使用可能/2=使用不可/3=判断付かず) val = if moo_item_condition_judgment(n) == 2 then false else true end return val end #-------------------------------------------------------------------------- # ○ メモ取得 #-------------------------------------------------------------------------- def moo_item_condition_get_item_memo(item, str) # スキルかアイテムか if item.class == RPG::Skill # スキルのメモ欄取得 memo = $data_skills[item.id].note.scan((/<#{str}[::](\S+)>/)) elsif item.class == RPG::Item # アイテムのメモ欄取得 memo = $data_items[item.id].note.scan((/<#{str}[::](\S+)>/)) end memo = memo.flatten # 配列変数初期化 arr = [] # メモに指定文字があった場合 if memo != nil and not memo.empty? # 内容を配列で取得 memo_arr = memo[0].split(",") # 条件として書かれている数字分ループ for i in memo_arr # 返り値の配列へ格納 arr << i.to_i end end # 戻り return arr end #-------------------------------------------------------------------------- # ○ パラメータの数値取得(本スクリプト用) #-------------------------------------------------------------------------- def moo_item_condition_get_params(actor, param_id) val = actor.level if param_id == 0 # レベル val = actor.mhp if param_id == 1 # 最大HP val = actor.mmp if param_id == 2 # 最大MP val = actor.hp if param_id == 3 # 現在HP val = actor.mp if param_id == 4 # 現在MP val = actor.tp if param_id == 5 # 現在TP val = actor.atk if param_id == 6 # 攻撃力 val = actor.def if param_id == 7 # 防御力 val = actor.mat if param_id == 8 # 魔法力 val = actor.mdf if param_id == 9 # 魔法防御 val = actor.agi if param_id == 10 # 敏捷性 val = actor.luk if param_id == 11 # 運 return val.truncate end #-------------------------------------------------------------------------- # ○ 使用判断 #-------------------------------------------------------------------------- def moo_item_condition_judg(actor, item, kind) judg = MOO_ITEM_CONDITION::MULTIPLE if kind == 1 # 倍数 judg = MOO_ITEM_CONDITION::JUST if kind == 2 # 定数 judg = MOO_ITEM_CONDITION::ABOVE if kind == 3 # 以上 judg = MOO_ITEM_CONDITION::FOLLOWING if kind == 4 # 以下 judg = MOO_ITEM_CONDITION::GAIN if kind == 5 # 下1桁 # 配列変数初期化 f_val = [] for str in judg # 配列に格納 f_val << moo_item_condition_get_item_memo(item, str) end # 可能フラグ初期化 en_flg = [] for i in 0..judg.size - 1 en_flg[i] = nil end # 条件文ループ for param_id in 0..judg.size - 1 # 条件があった場合 if f_val[param_id] != nil # アクターのレベルを取得 val = moo_item_condition_get_params(actor, param_id) for i in f_val[param_id] # プラス数字の場合 if i >= 0 # 指定数値以上の場合 case kind when 1 # 指定数値の倍数の場合 en_flg[param_id] = -1 if val % i == 0 en_flg[param_id] = 0 if val % i != 0 and en_flg[param_id] != -1 when 2 # 指定数値の場合 en_flg[param_id] = -1 if val == i en_flg[param_id] = 0 if val != i and en_flg[param_id] != -1 when 3 # 指定数値以上の場合 en_flg[param_id] = -1 if val >= i en_flg[param_id] = 0 if val < i and en_flg[param_id] != -1 when 4 # 指定数値以下の場合 en_flg[param_id] = -1 if val <= i en_flg[param_id] = 0 if val > i and en_flg[param_id] != -1 when 5 # 指定数値が下1桁の場合 en_flg[param_id] = -1 if val - ((val / 10).truncate * 10) == i en_flg[param_id] = 0 if val - ((val / 10).truncate * 10) != i and en_flg[param_id] != -1 end # マイナス数字の場合 else case kind when 1 # 指定数値の倍数以外の場合 en_flg[param_id] = -1 if val % (-1 * i) != 0 en_flg[param_id] = 0 if val % (-1 * i) == 0 and en_flg[param_id] != -1 when 2 # 指定数値以外の場合 en_flg[param_id] = -1 if val != (-1 * i) en_flg[param_id] = 0 if val == (-1 * i) and en_flg[param_id] != -1 when 3 # 指定数値以上以外の場合 en_flg[param_id] = -1 if val < (-1 * i) en_flg[param_id] = 0 if val >= (-1 * i) and en_flg[param_id] != -1 when 4 # 指定数値以下以外の場合 en_flg[param_id] = -1 if val > (-1 * i) en_flg[param_id] = 0 if val <= (-1 * i) and en_flg[param_id] != -1 when 5 # 指定数値が下1桁以外の場合 en_flg[param_id] = -1 if val - ((val / 10).truncate * 10) != (-1 * i) en_flg[param_id] = 0 if val - ((val / 10).truncate * 10) == (-1 * i) and en_flg[param_id] != -1 end end end end end return en_flg end #-------------------------------------------------------------------------- # ○ 無条件・使用可能・使用不可の判断 (1=使用可能/2=使用不可/3=判断付かず) #-------------------------------------------------------------------------- def moo_item_condition_judgment(arr) # 変数初期化 flag_ok = false flag_ng = false # 配列分ループ for i in arr flag_ok = true if i == -1 flag_ng = true if i == 0 flag_ok = true if i == 1 flag_ng = true if i == 2 end # 使用可能条件のみだった場合 if flag_ok == true and flag_ng == false return 1 end # 使用不可条件のみだった場合 if flag_ok == false and flag_ng == true return 2 end # 使用可能条件と使用不可条件の両方があった場合 if flag_ok == true and flag_ng == true # 使用可能が優先だった場合 if MOO_ITEM_CONDITION::EITHER return 1 else return 2 end end # どの条件もなかった場合 if flag_ok == false and flag_ng == false return 3 end end end #============================================================================== # ■ Window_SkillList #------------------------------------------------------------------------------ #  スキル画面で、使用できるスキルの一覧を表示するウィンドウです。 #============================================================================== class Window_SkillList < Window_Selectable #-------------------------------------------------------------------------- # ◎ スキルを許可状態で表示するかどうか #-------------------------------------------------------------------------- alias moo_item_condition_enable? enable? def enable?(item) return false if moo_item_condition_get_value(@actor, item) == false moo_item_condition_enable?(item) end end