#============================================================================== # ■ RGSS3 スキル使用回数制 Ver2.10 by 星潟 #------------------------------------------------------------------------------ # スキルに使用回数を設けます。この効果は敵味方共に影響します。 # 使用回数は使用するごとに1ずつ減少していき # 使用回数が0のスキルは使用できなくなります。 # (使用回数を設定しないスキルについては無制限となります) # # また、複数スキルで、1つのスキルの使用回数を共有するスキルの設定や # スキル使用回数を消費しなくなる特徴の設定や # スキル使用回数を回復/減少させるアイテム/スキルの設定と # スキル使用回数を回復/減少させるイベントコマンドの追加や # 全回復時にスキル使用回数を回復させるか否か等を設定できるようになります。 # # コスト表示の部分を使用して回数表示を行う為、使用回数を設定するスキルには # MPやTP等のコストを設定しないようにして下さい。 # (当方のスキルコスト拡張を使用する場合はこの限りではありません) #------------------------------------------------------------------------------ # ※当方のスキルコスト拡張 Ver2.00〜 と併用される場合は # このスクリプトをスキルコスト拡張 Ver2.00〜よりも下に配置して下さい。 #------------------------------------------------------------------------------ # ★スキルへの設定(スキルのメモ欄に設定) #------------------------------------------------------------------------------ # ☆使用回数設定(一般) # # <使用回数:10> # # これで、このスキルの初期使用回数は10回までとなります。 #------------------------------------------------------------------------------ # ☆使用回数設定(上級者向け?) # # <使用回数:$game_variables[20]> # # これで、このスキルの初期使用回数は変数20の値までとなります。 # (変数20の値を変更して回復させないと、0のままです) # このように、計算式として使える物を入れる事も可能です。 #------------------------------------------------------------------------------ # ☆複数スキル間でのスキル使用回数の共有等 # # <使用回数参照先:30> # # これで、このスキルの使用回数はスキルID30番の物と同一なり共有化されます。 #------------------------------------------------------------------------------ # ☆使用回数用タグ設定 # # <使用回数用タグ:1,2,火> # # これで、このスキルには使用回数用タグとして1と2と火が設定されます。 # この設定は使用回数無視特徴や、使用回数回復効果で利用できます。 #------------------------------------------------------------------------------ # ☆スキル使用回数を複数消費する場合 # # <使用回数消費数:3> # # これで、このスキルの使用回数は1回使用する度に3回分の回数を消費します。 #------------------------------------------------------------------------------ # ★アイテム/スキルへの設定(アイテム/スキルのメモ欄に設定) #------------------------------------------------------------------------------ # ☆全てのスキルの使用回数を回復する場合の設定(一般) # # <使用回数回復:0,999> # # このアイテム/スキルの効果対象は全てのスキル使用回数を999回復します。 #------------------------------------------------------------------------------ # ☆全てのスキルの使用回数を回復する場合の設定(上級者向け?) # # <使用回数回復:0,rand(5)+1> # # このアイテム/スキルの効果対象は全てのスキル使用回数を1〜5回復します。 #------------------------------------------------------------------------------ # ☆1つのスキルの使用回数を回復する場合の設定(一般) # # <使用回数回復:50,5> # # このアイテム/スキルの効果対象はID50のスキル使用回数を5回復します。 #------------------------------------------------------------------------------ # ☆1つのスキルの使用回数を回復する場合の設定(上級者向け?) # # <使用回数回復:50,$game_party.alive_members.size> # # このアイテム/スキルの効果対象はID50のスキル使用回数を # 生存している味方の数分回復します。 #------------------------------------------------------------------------------ # ☆特定タグのついたスキルの使用回数を回復する場合の設定 # # <使用回数タグ回復:闇,999> # # このアイテム/スキルの効果対象は闇タグがついたスキルの使用回数を999回復します。 # # <使用回数タグ回復:炎,闇,999> # # このアイテム/スキルの効果対象は炎もしくは闇タグがついたスキルの # 使用回数を999回復します。 #------------------------------------------------------------------------------ # ★特徴への設定(アクター/エネミー/職業/装備/ステート等のメモ欄に設定) #------------------------------------------------------------------------------ # ☆使用回数無視特徴の設定 # # <使用回数無視特徴:5,6,氷> # # これで、この特徴は5、6、氷の何れかの使用回数用タグがついたスキルを # 使用回数の制限を受けることなく使用できます。 #------------------------------------------------------------------------------ # ★追加イベントコマンド(イベントコマンドのスクリプトで使用) #------------------------------------------------------------------------------ # ☆全てのアクターのスキル使用回数を初期化する(全快) # # skill_all_actor_recovery # # これで全てのアクター(現在仲間にいないアクターも含む)の # スキル使用回数が全て初期化(全回復)されます。 #------------------------------------------------------------------------------ # ☆アクター一人の全スキル使用回数を全快させる # # $game_actors[1].skill_rec # # この場合、ID1のアクターのスキル使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー一人の全スキル使用回数を全快させる # # $game_party.members[0].skill_rec # # この場合、パーティ先頭のアクターのスキル使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆パーティ全体の全スキル使用回数を全快させる # # $game_party.skill_rec # # この場合、パーティ全体の全スキル使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆アクター一人の全スキル使用回数を一定値回復させる # # $game_actors[1].skill_rec(0,1) # # この場合、ID1のアクターの全スキル使用回数を1回復させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー一人のスキル使用回数を一定値回復させる # # $game_party.members[0].skill_rec(0,5) # # この場合、パーティ先頭のアクターの全スキル使用回数を5回復させます。 #------------------------------------------------------------------------------ # ☆パーティ全体のスキル使用回数を一定値回復させる # # $game_party.skill_rec(0,3) # # この場合、パーティ全体の全スキル使用回数を3回復させます。 #------------------------------------------------------------------------------ # ☆アクター一人の特定のスキル使用回数を全快させる # # $game_actors[2].skill_rec(5) # # この場合、ID2のアクターのID5のスキルの使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆アクター一人の特定のタグがついたスキルの使用回数を全快させる # # $game_actors[3].skill_rec_by_tag("炎") # # この場合、ID3のアクターの炎タグがついたスキルの使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー一人の特定のスキル使用回数を全快させる # # $game_party.members[1].skill_rec(10) # # この場合、パーティ先頭から2番目の # アクターのスキルID10の使用回数を全快させます。 # (パーティ先頭を0と数える為、2番目の指定IDは1となります) #------------------------------------------------------------------------------ # ☆パーティメンバー一人の特定のタグがついたスキルの使用回数を全快させる # # $game_party.members[7].skill_rec_by_tag("回復") # # この場合、パーティ先頭から8番目のアクターの # 回復タグがついたスキルの使用回数を全快させます。 # (パーティ先頭を0と数える為、8番目の指定IDは7となります) #------------------------------------------------------------------------------ # ☆パーティメンバー全体の特定のスキル使用回数を全快させる # # $game_party.skill_rec(20) # # この場合、パーティ全体のスキルID20の使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー一人の特定のタグがついたスキルの使用回数を全快させる # # $game_party.skill_rec_by_tag("氷") # # この場合、パーティ全体の氷タグがついたスキルの使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆アクター一人の特定のスキル使用回数を一定値回復させる # # $game_actors[3].skill_rec(14, 7) # # この場合、ID3のアクターのID14のスキルの使用回数を7回復させます。 #------------------------------------------------------------------------------ # ☆アクター一人の特定のスキル使用回数を一定値回復させる # # $game_actors[3].skill_rec_by_tag("雷", 5) # # この場合、ID3のアクターの雷タグがついたスキルの使用回数を5回復させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー一人の特定のスキル使用回数を一定値回復させる # # $game_party.members[2].skill_rec(22, 3) # # この場合、パーティ先頭から3番目のアクターの # ID22のスキルの使用回数を3回復させます。 # (パーティ先頭を0と数える為、3番目の指定IDは2となります) #------------------------------------------------------------------------------ # ☆パーティメンバー一人の特定のタグがついたスキルの使用回数を一定値回復させる # # $game_party.members[5].skill_rec_by_tag("風", 10) # # この場合、パーティ先頭から6番目のアクターの # 風タグがついたスキルの使用回数を10回復させます。 # (パーティ先頭を0と数える為、6番目の指定IDは5となります) #------------------------------------------------------------------------------ # ☆パーティメンバー全体の特定のスキル使用回数を一定値回復させる # # $game_party.skill_rec(45, 1) # # この場合、パーティ全体のID45のスキルの使用回数を1回復させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー全体の特定のタグがついたスキルの使用回数を一定値回復させる # # $game_party.skill_rec_by_tag("地", 25) # # この場合、パーティ全体の地タグがついたスキルの使用回数を25回復させます。 #------------------------------------------------------------------------------ # ☆敵グループメンバー一人のスキル使用回数を全快させる # # $game_troop.members[0].skill_rec # # この場合、敵グループ先頭のエネミーのスキル使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆敵グループ全体のスキル使用回数を全快させる # # $game_troop.skill_rec # # この場合、敵グループ全体のスキル使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆敵グループメンバー一人の特定のスキル使用回数を全快させる # # $game_troop.members[1].skill_rec(10) # # この場合、敵グループ先頭から2番目のエネミーの # スキルID10の使用回数を全快させます。 # (敵グループ先頭を0と数える為、2番目の指定IDは1となります) #------------------------------------------------------------------------------ # ☆敵グループメンバー全体の特定のスキル使用回数を全快させる # # $game_troop.skill_rec(20) # # この場合、敵グループ全体のスキルID20の使用回数を全快させます。 #------------------------------------------------------------------------------ # ☆敵グループメンバー一人の特定のスキル使用回数を一定値回復させる # # $game_troop.members[2].skill_rec(22, 3) # # この場合、敵グループ先頭から3番目のエネミーの # ID22のスキルの使用回数を3回復させます。 # (敵グループ先頭を0と数える為、3番目の指定IDは2となります) #------------------------------------------------------------------------------ # ☆敵グループメンバー全体の特定のスキル使用回数を一定値回復させる # # $game_troop.skill_rec(45, 1) # # この場合、敵グループ全体のID45のスキルの使用回数を1回復させます。 #------------------------------------------------------------------------------ # ☆パーティメンバー全体の特定のタグがついたスキルの使用回数を一定値回復させる # # $game_party.skill_rec_by_tag("無", 32) # # この場合、パーティ全体の無タグがついたスキルの使用回数を32回復させます。 #============================================================================== module EXTRA_SKILL_COST #スキル使用回数設定用ワード WORD11 = "使用回数" #スキル使用回数設定用ワード WORD12 = "使用回数参照先" #スキル欄に表示する使用回数の名称 WORD13 = "残" #使用回数無限の場合の使用回数表示 WORD14 = "--" #スキル使用回数無視用タグ設定用ワード WORD15 = "使用回数用タグ" #スキル使用回数無視特徴設定用ワード WORD16 = "使用回数無視特徴" #スキル使用回数回復設定用ワード WORD17 = "使用回数回復" #スキル使用回数タグ回復設定用ワード WORD18 = "使用回数タグ回復" #スキル使用回数消費数設定用ワード WORD19 = "使用回数消費数" #使用回数無限の場合、使用回数を表示するか? NOT_D = false #全回復コマンド使用時にスキル使用回数を全回復させるか? F_RCV = true #スキル欄に表示する使用回数の名称に対するX座標調整 COS_OXC = -20 #スキルコスト拡張と併用時の為の表示位置調整 COS_OX = -50 end class Game_BattlerBase #-------------------------------------------------------------------------- # スキル使用回数 #-------------------------------------------------------------------------- def skill_not skill_n_o_t_r unless @skill_not @skill_not end #-------------------------------------------------------------------------- # スキル使用回数最大値 #-------------------------------------------------------------------------- def skill_not_master skill_n_o_t_r unless @skill_not_master @skill_not_master end #-------------------------------------------------------------------------- # スキル使用回数の変更 #-------------------------------------------------------------------------- def skill_not=(data) skill_n_o_t_r unless @skill_not @skill_not = data end #-------------------------------------------------------------------------- # スキル使用回数最大値の変更 #-------------------------------------------------------------------------- def skill_not_master=(data) skill_n_o_t_r unless @skill_not_master @skill_not_master = data end #-------------------------------------------------------------------------- # スキル使用回数無視特徴 #-------------------------------------------------------------------------- def skill_n_ignore(skill) #各特徴からのデータを加えた配列を作る。 array = feature_objects.inject([]) {|r,f| r += f.skill_n_ignore} #同一のデータを削除した配列内のタグ毎に使用回数無視判定を実行。 array.uniq.each {|a| return true if skill.skill_n_tag.include?(a)} #どれにも当てはまらない場合はfalseを返す。 false end #-------------------------------------------------------------------------- # スキル使用回数の初期化 #-------------------------------------------------------------------------- def skill_n_o_t_r #スキル使用回数最大値の初期化 @skill_not_master = {} #スキル使用回数の初期化 @skill_not = {} #各スキル別にスキル使用回数最大値及びスキル使用回数を設定 $data_skills.each {|s| #スキルが存在しない場合は飛ばす next unless s #参照するIDを取得 st = s.true_skill_not #該当IDのスキルデータが存在する場合はその使用回数を返す。 #そうでない場合は-1を返す。 data = $data_skills[st] ? eval($data_skills[st].usable_number_data) : -1 #使用回数データが存在しない場合は設定する。 @skill_not[st] ||= data #最大使用回数データが存在しない場合は設定する。 @skill_not_master[st] ||= data} end #-------------------------------------------------------------------------- # スキル最大使用回数の初期化 #-------------------------------------------------------------------------- def skill_n_o_t_r_master(id = "0") si = eval(id.to_s) #そもそものスキル使用回数最大値が存在しない場合は初期設定を実行 return skill_n_o_t_r unless @skill_not_master #データを設定。 data = (si == 0 ? $data_skills : ($data_skills[si] ? [$data_skills[si]] : [])) data.each {|s| #スキルが存在しない場合は飛ばす next unless s #参照するIDを取得 i = s.true_skill_not #該当IDのスキルデータが存在する場合はその使用回数を返す。 #そうでない場合は-1を返す。 @skill_not_master[i] = $data_skills[i] ? eval($data_skills[i].usable_number_data) : -1} end #-------------------------------------------------------------------------- # 全回復時の処理 #-------------------------------------------------------------------------- alias recover_all_skill_not recover_all def recover_all #本来の処理を実行する。 recover_all_skill_not #設定に応じてスキル使用回数を初期化する。 skill_n_o_t_r if EXTRA_SKILL_COST::F_RCV end #-------------------------------------------------------------------------- # スキル使用可否のチェック #-------------------------------------------------------------------------- alias usable_item_conditions_skill_not? usable_item_conditions_met? def usable_item_conditions_met?(item) #本来の処理を実行し、その時点で不可なら不可とする return false unless usable_item_conditions_skill_not?(item) #スキルであり、なおかつ使用回数のチェックが不可であれば不可とする !(item.is_a?(RPG::Skill) && !skill_not_check(item)) end #-------------------------------------------------------------------------- # スキル使用回数のチェック #-------------------------------------------------------------------------- def skill_not_check(skill) #スキル使用回数のデータが存在しない場合は設定し直す skill_n_o_t_r unless (@skill_not && @skill_not_master) st = skill.true_skill_not skill_rec(skill.id) if !@skill_not[st] #スキル使用回数無視が有効な場合は使用可能とする return true if skill_n_ignore(skill) #スキル使用回数データが0より大きいか、0より小さい場合は使用可能とする @skill_not[st] >= skill.snc_count or @skill_not[st] < 0 end #-------------------------------------------------------------------------- # スキル使用回数の回復 #-------------------------------------------------------------------------- def skill_rec(skill_id = "0", number = nil) si = eval(skill_id.to_s) #スキルIDも回復量も設定されていない場合 #もしくは使用回数が設定されていない場合は初期化して終了する return skill_n_o_t_r if (si == 0 && !number) or !(@skill_not && @skill_not_master) #使用回数の回復量が指定されている場合は、文字列に変換後に計算する ni = eval(number.to_s) if number #スキル使用回数最大値を再設定 skill_n_o_t_r_master(si) #スキルIDが未設定の場合 if si == 0 #スキル別に判定を行う。 $data_skills.each {|s| #スキルデータが存在しない場合は飛ばす。 next unless s #そのスキルの参照先IDを取得する。 st = s.true_skill_not #該当する使用回数のデータが存在しない場合は設定し直してから処理続行。 @skill_not[st] = @skill_not_master[st] if @skill_not[st] == nil #使用回数が無限の場合 if @skill_not_master[st] == -1 #使用回数を無限に設定し直して処理を飛ばす。 @skill_not[st] = @skill_not_master[st] next end #最大値と現在値が一致している場合は飛ばす。 next if @skill_not[st] == @skill_not_master[st] #スキルの使用回数に回復を反映する。 @skill_not[st] = number ? [[@skill_not[st] + ni, @skill_not_master[st]].min, 0].max : @skill_not_master[st]} else #スキルIDからスキルを設定。 skill = $data_skills[si] #スキルの参照先IDを取得。 st = skill.true_skill_not #スキル使用回数最大値を再設定。 skill_n_o_t_r_master(st) #スキルの使用回数に回復を反映する。 @skill_not[st] = number ? [[@skill_not[st] + number, @skill_not_master[st]].min, 0].max : @skill_not_master[st] end end #-------------------------------------------------------------------------- # 使用回数タグを用いたスキル使用回数の回復 #-------------------------------------------------------------------------- def skill_rec_by_tag(tag_array, number = nil) #配列で指定されていない場合は配列にする tag_array = [tag_array] if !tag_array.is_a?(Array) #念の為、全て文字列にする ta = tag_array.inject([]) {|r,t| r.push(t.to_s)} #使用回数の回復量が指定されている場合は、文字列に変換後に計算する number = eval(number.to_s) if number #スキル使用回数のデータが存在しない場合は設定し直す skill_n_o_t_r unless (@skill_not && @skill_not_master) #スキル別に判定を行う $data_skills.each {|skill| #スキルデータが存在しないか、該当タグが含まれていない場合は飛ばす next unless (skill && ta.any? {|tag| skill.skill_n_tag.include?(tag)}) #スキルの参照先を取得する st = skill.true_skill_not #スキル使用回数最大値を再設定 skill_n_o_t_r_master(st) #スキルの使用回数に回復を反映する。 @skill_not[st] = number ? [[@skill_not[st] + number, @skill_not_master[st]].min, 0].max : @skill_not_master[st]} end #-------------------------------------------------------------------------- # 使用回数の消費 #-------------------------------------------------------------------------- alias pay_skill_cost_skill_not pay_skill_cost def pay_skill_cost(skill) #スキル使用回数のデータが存在しない場合は設定し直す skill_n_o_t_r unless (@skill_not && @skill_not_master) #本来の処理を実行 pay_skill_cost_skill_not(skill) #スキル使用回数無視が有効な場合は使用可能とする return if skill_n_ignore(skill) #スキルの参照先を取得する st = skill.true_skill_not #スキル使用回数が無限でない場合は使用回数を1減らす @skill_not[st] -= skill.snc_count if @skill_not[st] > 0 end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムに有効な使用効果が一つでもあるかを判定 #-------------------------------------------------------------------------- alias item_has_any_valid_effects_skill_not? item_has_any_valid_effects? def item_has_any_valid_effects?(user, item) item_has_any_valid_effects_skill_not?(user, item) or skill_rec_effect_check(item) end #-------------------------------------------------------------------------- # 効果適用 #-------------------------------------------------------------------------- alias item_user_effect_skill_not item_user_effect def item_user_effect(user, item) #本来の処理を実行する item_user_effect_skill_not(user, item) #スキル使用回数回復効果を実行する skill_rec_effect_execute(item) end #-------------------------------------------------------------------------- # スキル使用回数回復効果チェック #-------------------------------------------------------------------------- def skill_rec_effect_check(item) #それぞれのスキル使用回数回復効果が存在するかのフラグを取得 flag = [item.skill_rec_effect.empty?,item.skill_rec_effect_by_tag.empty?] #どちらも存在しない場合はfalseを返す return false if flag[0] && flag[1] #そもそものスキル使用回数が存在しない場合は初期設定を実行。 #そうでない場合は最大値を取得。 !@skill_not ? skill_n_o_t_r : skill_n_o_t_r_master #スキル使用回数回復効果が存在する場合 if !flag[0] #効果別に判定 item.skill_rec_effect.each {|k1,v1| #効果量を計算する kn = eval(k1) number = v1.inject(0) {|r,n| r += eval(n)} if kn == 0#全てのスキルの使用回数を対象とする場合 if number > 0#回復量がプラスの場合 #スキル使用回数毎に判定 skills_data ||= skills @skill_not.each {|k2,v2| #アクターであり、なおかつそのスキルがスキル一覧に存在しない場合は飛ばす next if self.actor? && !skills_data.include?($data_skills[k2]) #最大使用回数よりも現在値の方が少ない場合はtrueを返す return true if v2 < @skill_not_master[k2]} elsif number < 0#回復量がマイナスの場合 skills_data ||= skills #スキル使用回数毎に判定 @skill_not.each {|k2,v2| #アクターであり、なおかつそのスキルがスキル一覧に存在しない場合は飛ばす next if self.actor? && !skills_data.include?($data_skills[k2]) #現在値が0より大きい場合はtrueを返す return true if v2 > 0} end else#特定スキルの使用回数を対象とする場合 #アクターであり、なおかつそのスキルがスキル一覧に存在しない場合は飛ばす if self.actor? skills_data ||= skills if skills_data.include?($data_skills[kn]) if number > 0#回復量がプラスの場合 #最大値と現在値が違う場合はtrueを返す return true if @skill_not[kn] != @skill_not_master[kn] elsif number < 0#回復量がマイナスの場合 #現在値が0より大きい場合はtrueを返す return true if @skill_not[kn] > 0 end end end end } end #タグを用いたスキル使用回数回復効果が存在する場合 if !flag[1] #効果別に処理 item.skill_rec_effect_by_tag.each {|ka,v| #スキル別に処理 $data_skills.each {|s| #スキルが存在しないか該当タグがついていない場合は飛ばす next unless (s && ka.any? {|k| s.skill_n_tag.include?(k)}) #アクターであり、なおかつそのスキルがスキル一覧に存在しない場合は飛ばす skills_data ||= skills next if self.actor? && !skills_data.include?(s) #効果量を計算する number = v.inject(0) {|r,n| r += eval(n)} if number > 0#効果量がプラスの場合 #最大値と現在値が違う場合はtrueを返す return true if @skill_not[s.id] != @skill_not_master[s.id] elsif number < 0#効果量がマイナスの場合 #現在値が0より大きい場合はtrueを返す return true if @skill_not[s.id] > 0 end}} end false end #-------------------------------------------------------------------------- # スキル使用回数回復実行 #-------------------------------------------------------------------------- def skill_rec_effect_execute(item) #スキル使用回数回復効果が存在する場合 if !item.skill_rec_effect.empty? #効果別に処理 item.skill_rec_effect.each {|k,v| #回復処理を実行する skill_rec(k,v.inject(0) {|r,n| r += eval(n)}) #効果発動判定をtrueにしておく。 @result.success = true} end #タグを用いたスキル使用回数回復効果が存在する場合 if !item.skill_rec_effect_by_tag.empty? #効果別に処理 item.skill_rec_effect_by_tag.each {|ka,v| #回復処理を実行する skill_rec_by_tag(ka,v.inject(0) {|r,n| r += eval(n)}) #効果発動判定をtrueにしておく。 @result.success = true} end end end class Game_Actors #-------------------------------------------------------------------------- # 全アクターのスキル使用回数初期化 #-------------------------------------------------------------------------- def skill_all_actor_recovery #既に存在するアクター全てに処理。 @data.each {|actor| actor.skill_n_o_t_r if actor} end end class Game_Interpreter #-------------------------------------------------------------------------- # 全アクターのスキル使用回数初期化 #-------------------------------------------------------------------------- def skill_all_actor_recovery #処理はGame_Actorsで行う。 $game_actors.skill_all_actor_recovery end end class Game_Unit #-------------------------------------------------------------------------- # スキル回復効果の全体化 #-------------------------------------------------------------------------- def skill_rec(skill_id = 0, number = nil) #メンバー別に処理。 members.each {|actor| actor.skill_rec(skill_id, number)} end #-------------------------------------------------------------------------- # タグ依存のスキル回復効果の全体化 #-------------------------------------------------------------------------- def skill_rec_by_tag(tag, number = nil) #メンバー別に処理。 members.each {|actor| actor.skill_rec_by_tag(tag, number)} end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # セットアップ時にスキル使用回数の回復 #-------------------------------------------------------------------------- alias setup_n_o_t setup def setup(actor_id) #本来の処理を実行 setup_n_o_t(actor_id) #スキル使用回数の初期化 skill_n_o_t_r end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 初期化時にスキル使用回数の回復 #-------------------------------------------------------------------------- alias initialize_n_o_t initialize def initialize(index, enemy_id) #本来の処理を実行 initialize_n_o_t(index, enemy_id) #スキル使用回数の初期化 skill_n_o_t_r end end class Window_SkillList < Window_Selectable #-------------------------------------------------------------------------- # スキル使用回数の描画 #-------------------------------------------------------------------------- alias draw_skill_cost_skill_not draw_skill_cost def draw_skill_cost(rect, skill) #本来の処理を実行 draw_skill_cost_skill_not(rect, skill) #参照先を取得 st = skill.true_skill_not #スキル使用回数無限であり、無限の場合は描写しないのであれば処理を飛ばす。 return if !EXTRA_SKILL_COST::NOT_D && @actor.skill_not[st] < 0 #システムカラーで描写 change_color(system_color, enable?(skill)) #使用回数の名称部分描写 draw_text(rect.x + EXTRA_SKILL_COST::COS_OXC, rect.y, rect.width, rect.height, EXTRA_SKILL_COST::WORD13, 2) #通常色で描写 change_color(normal_color, enable?(skill)) #スキル使用回数が無限の場合か設定されている場合かで処理を変更。 draw_text(rect, @actor.skill_not[skill.true_skill_not] < 0 ? EXTRA_SKILL_COST::WORD14 : @actor.skill_not[st], 2) end end class RPG::BaseItem #-------------------------------------------------------------------------- # スキル使用回数無視特徴の設定 #-------------------------------------------------------------------------- def skill_n_ignore #キャッシュがある場合はキャッシュを返す。 return @skill_n_ignore if @skill_n_ignore #メモ欄からデータを取得。 memo = /<#{EXTRA_SKILL_COST::WORD16}[::](\S+)>/ =~ @note ? $1.to_s : "" #データを取得出来無かった場合は飛ばす。 @skill_n_ignore = memo.split(/\s*,\s*/).inject([]) {|r,i| r += [i]} #データを返す @skill_n_ignore end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # スキル使用回数回復効果 #-------------------------------------------------------------------------- def skill_rec_effect return @skill_rec_effect if @skill_rec_effect @skill_rec_effect = {} #データを取得して返す。 @note.each_line {|l| a = /<#{EXTRA_SKILL_COST::WORD17}[::](\S+)>/ =~ l ? $1.to_s : "" next if a.empty? a = a.split(/\s*,\s*/).inject([]) {|r,i| r += [i]} next if a.size < 2 value = a.pop a.each {|tag| @skill_rec_effect[tag] ||= [] @skill_rec_effect[tag].push(value)}} @skill_rec_effect end #-------------------------------------------------------------------------- # タグによるスキル使用回数回復効果 #-------------------------------------------------------------------------- def skill_rec_effect_by_tag return @skill_rec_effect_by_tag if @skill_rec_effect_by_tag @skill_rec_effect_by_tag = {} #データを取得して返す。 @note.each_line {|l| a = /<#{EXTRA_SKILL_COST::WORD18}[::](\S+)>/ =~ l ? $1.to_s : "" next if a.empty? a = a.split(/\s*,\s*/).inject([]) {|r,i| r += [i]} next if a.size < 2 value = a.pop ka = a.sort @skill_rec_effect_by_tag[ka] ||= [] @skill_rec_effect_by_tag[ka].push(value)} @skill_rec_effect_by_tag end end class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # スキル使用回数の設定 #-------------------------------------------------------------------------- def usable_number_data @usable_number_data ||= /<#{EXTRA_SKILL_COST::WORD11}[::](\S+)>/ =~ @note ? $1.to_s : "-1" end #-------------------------------------------------------------------------- # スキル間の使用回数共有設定 #-------------------------------------------------------------------------- def true_skill_not return @true_skill_not if @true_skill_not #データを取得して返す。 @true_skill_not ||= /<#{EXTRA_SKILL_COST::WORD12}[::](\S+)>/ =~ @note ? $1.to_i : self.id end #-------------------------------------------------------------------------- # スキル使用回数無視タグの設定 #-------------------------------------------------------------------------- def skill_n_tag #キャッシュがある場合はキャッシュを返す。 return @skill_n_tag if @skill_n_tag #メモ欄からデータを取得。 memo = /<#{EXTRA_SKILL_COST::WORD15}[::](\S+)>/ =~ @note ? $1.to_s : "" #データを取得出来無かった場合は飛ばす。 @skill_n_tag = memo.split(/\s*,\s*/).inject([]) {|r,i| r += [i]} #データを返す。 @skill_n_tag end #-------------------------------------------------------------------------- # 複数回消費 #-------------------------------------------------------------------------- def snc_count #データを取得して返す。 @snc_count = /<#{EXTRA_SKILL_COST::WORD19}[::](\S+)>/ =~ @note ? $1.to_i : 1 end end