#============================================================================== # ■ RGSS2 スキル使用回数制 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 各スキルを使用回数制にします。 # スキルの消費MP表示部分に残使用回数を表示するようになります。 #============================================================================== # スキルのメモ欄に指定。 #============================================================================== # <使用回数:10> # # このスキルの使用回数は10となる。 #------------------------------------------------------------------------------ # <使用回数:self.level/10+1> # # このスキルの使用回数は使用者の現在のレベル÷10+1の値となります。 #------------------------------------------------------------------------------ # <使用回数回復用タグ:1> # # このスキルの使用回数関連処理のタグとして1が設定されます。 #------------------------------------------------------------------------------ # <使用回数回復用タグ:1,2,3> # # このスキルの使用回数関連処理のタグとして1、2、3が設定されます。 #------------------------------------------------------------------------------ # <使用回数読み替え:67> # # このスキルの使用回数はスキルID67の物と共有とします。 # このスキルのスキルIDの使用回数を回復しても無意味となります。 # 回復させる場合、スキルID67の使用回数を回復させる必要があります。 # なお、読み替え先からさらに読み替える事は出来ません。 # 読み替え先にはぬかりなく使用回数を指定して下さい。 #============================================================================== # スキル・アイテムのメモ欄に指定。 #============================================================================== # <使用回数リセット> # # 対象のスキル使用回数が全てリセットされます。 #------------------------------------------------------------------------------ # <指定スキルリセット:21> # # スキルID21の使用回数をリセットします。 #------------------------------------------------------------------------------ # <指定スキルリセット:21,22,23,24> # # スキルID21、22、23、24の使用回数をリセットします。 #------------------------------------------------------------------------------ # <指定タグリセット:1> # # 使用回数関連処理のタグとして1が設定されているスキルの # 使用回数をリセットします。 #------------------------------------------------------------------------------ # <指定タグリセット:1,2,3,4> # # 使用回数関連処理のタグとして1、2、3、4のいずれかが # 設定されているスキルの使用回数をリセットします。 #------------------------------------------------------------------------------ # <指定スキル回復:21,5> # # スキルID21の使用回数を5回復します。 #------------------------------------------------------------------------------ # <指定スキル回復:22,-3> # # スキルID21の使用回数を3減少させます。 #------------------------------------------------------------------------------ # <指定タグ回復:1,3> # # 使用回数関連処理のタグとして1が設定されているスキルの # 使用回数を3回復します。 #------------------------------------------------------------------------------ # <指定タグ回復:2,-4> # # 使用回数関連処理のタグとして1が設定されているスキルの # 使用回数を4減少させます。 #============================================================================== # イベントコマンドのスクリプトや条件分岐や変数の操作等で使用。 #============================================================================== # skill_count_by_id(1,50) # # アクターID1のスキルID50の使用回数を取得する。(使った回数) #------------------------------------------------------------------------------ # skill_count_by_id(0,50) # # 敵グループ内ID0の敵のスキルID50の使用回数を取得する。(使った回数) #------------------------------------------------------------------------------ # skill_rest_by_id(2,25) # # アクターID2のスキルID25の残り使用回数を取得する。(残り回数) #------------------------------------------------------------------------------ # skill_rest_by_id(-1,25) # # 敵グループ内ID1の敵のスキルID25の残り使用回数を取得する。(残り回数) #------------------------------------------------------------------------------ # skill_count_max_by_id(3,15) # # アクターID3のスキルID15の最大使用回数を取得する。 #------------------------------------------------------------------------------ # skill_count_max_by_id(-2,15) # # 敵グループ内ID2の敵のスキルID15の最大使用回数を取得する。 #============================================================================== # 主にイベントコマンドのスクリプトで使用。 #============================================================================== # skill_count_reset(1) # # アクターID1のスキル使用回数をリセットする。 #------------------------------------------------------------------------------ # skill_count_reset_by_id(-1,20) # # 敵グループ内ID1の敵のスキルID20の使用回数をリセットする。 #------------------------------------------------------------------------------ # skill_count_reset_by_tag(2,3) # # アクターID2の3のタグを含むスキルの使用回数をリセットする。 #------------------------------------------------------------------------------ # skill_count_restore_by_id(-3,15,2) # # 敵グループ内ID3の敵のスキルID15の使用回数を2回復させる。 #------------------------------------------------------------------------------ # skill_count_restore_by_tag(4,5,-3) # # アクターID4の5のタグを含むスキルの使用回数を3減少させる。 #------------------------------------------------------------------------------ # $game_party.skill_count_reset # # パーティ全体のスキル使用回数をリセットする。 #------------------------------------------------------------------------------ # $game_party.skill_count_reset_by_id(20) # # パーティ全体のスキルID20の使用回数をリセットする。 #------------------------------------------------------------------------------ # $game_party.skill_count_reset_by_tag(3) # # パーティ全体の3のタグを含むスキルの使用回数をリセットする。 #------------------------------------------------------------------------------ # $game_party.skill_count_restore_by_id(15,2) # # パーティ全体のスキルID15の使用回数を2回復させる。 #------------------------------------------------------------------------------ # $game_party.skill_count_restore_by_tag(5,-3) # # パーティ全体の5のタグを含むスキルの使用回数を3減少させる。 #------------------------------------------------------------------------------ # $game_troop.skill_count_reset # # 敵グループ全体のスキル使用回数をリセットする。 #------------------------------------------------------------------------------ # $game_troop.skill_count_reset_by_id(20) # # 敵グループ全体のスキルID20の使用回数をリセットする。 #------------------------------------------------------------------------------ # $game_troop.skill_count_reset_by_tag(3) # # 敵グループ全体の3のタグを含むスキルの使用回数をリセットする。 #------------------------------------------------------------------------------ # $game_troop.skill_count_restore_by_id(15,2) # # 敵グループ全体のスキルID15の使用回数を2回復させる。 #------------------------------------------------------------------------------ # $game_troop.skill_count_restore_by_tag(5,-3) # # 敵グループ全体の5のタグを含むスキルの使用回数を3減少させる。 #============================================================================== module SK_Count #スキル使用回数設定用キーワードを指定。 Word1 = "使用回数" #スキル使用回数設定用キーワードを指定。 Word2 = "使用回数リセット" #スキル使用回数読み替え設定用キーワードを指定。 Word3 = "使用回数読み替え" #関連配列1の作成。(変更しないで下さい) Worda = [] #使用回数回復用タグ設定用キーワードを指定。 Worda.push("使用回数回復用タグ") #指定スキルリセット設定用キーワードを指定。 Worda.push("指定スキルリセット") #指定タグリセット設定用キーワードを指定。 Worda.push("指定タグリセット") #関連配列2の作成。(変更しないで下さい) Wordb = [] #指定スキル回復設定用キーワードを指定。 Wordb.push("指定スキル回復") #指定タグ回復設定用キーワードを指定。 Wordb.push("指定タグ回復") #使用回数表示フォーマットを指定。 #回数制限がある場合。 #2桁までの数字を想定していますが、3桁や1桁にしたい場合等は #2の部分の値を変更して下さい。 T1 = "残%2d回" #回数制限がない場合。 #(""と表記する事で通常表記化) T2 = "無制限" #「全回復」でスキル使用回数も回復するか? FR = true end class Game_Temp attr_accessor :draw_skill_count end class Scene_Skill < Scene_Base #-------------------------------------------------------------------------- # スキルの使用 (味方対象以外の使用効果を適用) #-------------------------------------------------------------------------- alias use_skill_nontarget_skill_count use_skill_nontarget def use_skill_nontarget tsid = $data_skills[@skill.id].skill_count_scape @actor.skill_count_restore_by_id(tsid,-1) use_skill_nontarget_skill_count end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # 戦闘行動の実行 : スキル #-------------------------------------------------------------------------- alias execute_action_skill_skill_count execute_action_skill def execute_action_skill skill = @active_battler.action.skill execute_action_skill_skill_count tsid = $data_skills[skill.id].skill_count_scape @active_battler.skill_count_restore_by_id(tsid,-1) end end class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # 項目の描画 #-------------------------------------------------------------------------- alias draw_item_skill_count draw_item def draw_item(index) $game_temp.draw_skill_count = true draw_item_skill_count(index) $game_temp.draw_skill_count = nil end end class Game_Battler #-------------------------------------------------------------------------- # スキルの適用テスト #-------------------------------------------------------------------------- alias skill_test_skill_count skill_test def skill_test(user, skill) return true if is_skill_count_test(user,skill) skill_test_skill_count(user, skill) end #-------------------------------------------------------------------------- # アイテムの適用テスト #-------------------------------------------------------------------------- alias item_test_skill_count item_test def item_test(user, item) return true if is_skill_count_test(user,item) item_test_skill_count(user, item) end #-------------------------------------------------------------------------- # スキル使用回数変更テスト #-------------------------------------------------------------------------- def is_skill_count_test(user,obj) s1 = skill_count.clone skill_count_change(obj) s2 = skill_count @skill_count = s1 s1 != s2 end #-------------------------------------------------------------------------- # 全回復 #-------------------------------------------------------------------------- alias recover_all_skill_count recover_all def recover_all recover_all_skill_count skill_count_reset if SK_Count::FR end #-------------------------------------------------------------------------- # スキルの使用可能判定 #-------------------------------------------------------------------------- alias skill_can_use_skill_count? skill_can_use? def skill_can_use?(skill) t = $game_temp.draw_skill_count $game_temp.draw_skill_count = nil r = skill_can_use_skill_count?(skill) && skill_rest_by_id(skill.id) != 0 $game_temp.draw_skill_count = t r end #-------------------------------------------------------------------------- # スキルの消費 MP 計算 #-------------------------------------------------------------------------- alias calc_mp_cost_skill_count calc_mp_cost def calc_mp_cost(skill) return calc_mp_cost_skill_count(skill) unless $game_temp.draw_skill_count tsid = skill.skill_count_scape if skill_count_through(tsid) (SK_Count::T2.empty? ? calc_mp_cost_skill_count($data_skills[tsid]) : SK_Count::T2) else sprintf(SK_Count::T1,(skill_rest_by_id(tsid)).to_s) end end #-------------------------------------------------------------------------- # ステート変化の適用 #-------------------------------------------------------------------------- alias apply_state_changes_skill_count apply_state_changes def apply_state_changes(obj) apply_state_changes_skill_count(obj) skill_count_change(obj) end #-------------------------------------------------------------------------- # スキル使用回数変更 #-------------------------------------------------------------------------- def skill_count_change(obj) return unless (obj.is_a?(RPG::UsableItem) && obj.skill_count_relation) skill_count_reset if obj.skill_count_reset == 1 for i in obj.skill_count_reset_by_id;skill_count_reset_by_id(i);end for i in obj.skill_count_reset_by_tag;skill_count_reset_by_tag(i);end obj.skill_count_restore_by_id.each {|k,v| skill_count_restore_by_id(k,v)} obj.skill_count_restore_by_tag.each {|k,v| skill_count_restore_by_tag(k,v)} end #-------------------------------------------------------------------------- # スキル使用回数ハッシュ #-------------------------------------------------------------------------- def skill_count @skill_count ||= {} end #-------------------------------------------------------------------------- # ID別スキル使用回数 #-------------------------------------------------------------------------- def skill_count_by_id(sid) i = skill_count[$data_skills[sid].skill_count_scape] i ? i : 0 end #-------------------------------------------------------------------------- # ID別スキル最大使用回数 #-------------------------------------------------------------------------- def skill_count_max_by_id(sid) c = $data_skills[$data_skills[sid].skill_count_scape].skill_count c.empty? ? -1 : [eval(c),0].max end #-------------------------------------------------------------------------- # ID別スキル残り回数 #-------------------------------------------------------------------------- def skill_rest_by_id(sid) max = skill_count_max_by_id(sid) return max if max == -1 [max - skill_count_by_id(sid),0].max end #-------------------------------------------------------------------------- # スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset @skill_count = {} end #-------------------------------------------------------------------------- # ID別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_id(sid) tsid = $data_skills[sid].skill_count_scape return if skill_count_through(tsid) @skill_count.delete(tsid) end #-------------------------------------------------------------------------- # タグ別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_tag(tag) @skill_count.each_key {|k| next if skill_count_through(k) skill_count_reset_by_id(k) if $data_skills[k].skill_count_tag.include?(tag)} end #-------------------------------------------------------------------------- # ID別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_id(sid,value) tsid = $data_skills[sid].skill_count_scape return if skill_count_through(tsid) skill_count[tsid] = [[skill_count_by_id(tsid) - eval(value.to_s),skill_count_max_by_id(tsid)].min,0].max @skill_count.delete(tsid) if skill_count[tsid] == 0 end #-------------------------------------------------------------------------- # タグ別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_tag(tag,value) @skill_count.each_key {|k| next if skill_count_through(k) skill_count_restore_by_id(k,value) if $data_skills[k].skill_count_tag.include?(tag)} end #-------------------------------------------------------------------------- # スキル使用回数処理スルーフラグ #-------------------------------------------------------------------------- def skill_count_through(sid) skill_count_max_by_id(sid) == -1 end end class RPG::UsableItem #-------------------------------------------------------------------------- # スキル使用回数関連アイテム/スキルか? #-------------------------------------------------------------------------- def skill_count_relation !(skill_count_reset == 0 && skill_count_reset_by_id.empty? && skill_count_reset_by_tag.empty? && skill_count_restore_by_id.empty? && skill_count_restore_by_tag.empty?) end #-------------------------------------------------------------------------- # スキル使用回数関連配列作成 #-------------------------------------------------------------------------- def create_skill_count_array(type) a1 = [] a2 = (/<#{SK_Count::Worda[type]}[::](\S+)>/ =~ note ? $1.to_s : "").split(/\s*,\s*/) for i in a2;a1.push(i.to_i);end a1.uniq end #-------------------------------------------------------------------------- # スキル使用回数関連ハッシュ作成 #-------------------------------------------------------------------------- def create_skill_count_hash(type) h = {} note.each_line{|l| h[$1.to_i] = $2.to_s if /<#{SK_Count::Wordb[type]}[::](\d+),(\S+)>/ =~ l} h end #-------------------------------------------------------------------------- # スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset @skill_count_reset ||= /<#{SK_Count::Word2}>/ =~ note ? 1 : 0 end #-------------------------------------------------------------------------- # ID別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_id @skill_count_reset_by_id ||= create_skill_count_array(1) end #-------------------------------------------------------------------------- # タグ別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_tag @skill_count_reset_by_tag ||= create_skill_count_array(2) end #-------------------------------------------------------------------------- # ID別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_id @skill_count_restore_by_id ||= create_skill_count_hash(0) end #-------------------------------------------------------------------------- # タグ別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_tag @skill_count_restore_by_tag ||= create_skill_count_hash(1) end end class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # スキル使用回数 #-------------------------------------------------------------------------- def skill_count @skill_count ||= /<#{SK_Count::Word1}[::](\S+)>/ =~ note ? $1.to_s : "" end #-------------------------------------------------------------------------- # スキル使用回数読み替え #-------------------------------------------------------------------------- def skill_count_scape @skill_count_scape ||= /<#{SK_Count::Word3}[::](\d+)>/ =~ note ? $1.to_i : self.id end #-------------------------------------------------------------------------- # スキル使用回数タグ #-------------------------------------------------------------------------- def skill_count_tag @skill_count_tag ||= create_skill_count_array(0) end end class Game_Interpreter #-------------------------------------------------------------------------- # スキル使用回数関連指定バトラー取得 #-------------------------------------------------------------------------- def skill_count_actor(aid) aid > 0 ? $game_actors[aid] : $game_troop.members[aid] end #-------------------------------------------------------------------------- # スキル使用回数取得 #-------------------------------------------------------------------------- def skill_count_by_id(aid,sid) a = skill_count_actor(aid) return unless a a.skill_count_by_id(sid) end #-------------------------------------------------------------------------- # スキル残り使用回数取得 #-------------------------------------------------------------------------- def skill_rest_by_id(aid,sid) a = skill_count_actor(aid) return unless a a.skill_rest_by_id(sid) end #-------------------------------------------------------------------------- # スキル最大使用回数取得 #-------------------------------------------------------------------------- def skill_count_max_by_id(aid,sid) a = skill_count_actor(aid) return unless a a.skill_count_max_by_id(sid) end #-------------------------------------------------------------------------- # スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset(aid) a = skill_count_actor(aid) return unless a a.skill_count_reset end #-------------------------------------------------------------------------- # ID別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_id(aid,sid) a = skill_count_actor(aid) return unless a a.skill_count_reset_by_id(sid) end #-------------------------------------------------------------------------- # タグ別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_tag(aid,tag) a = skill_count_actor(aid) return unless a a.skill_count_reset_by_tag(tag) end #-------------------------------------------------------------------------- # ID別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_id(aid,sid,value) a = skill_count_actor(aid) return unless a a.skill_count_restore_by_id(sid,value) end #-------------------------------------------------------------------------- # タグ別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_tag(aid,tag,value) a = skill_count_actor(aid) return unless a a.skill_count_restore_by_tag(tag,value) end end class Game_Unit #-------------------------------------------------------------------------- # スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset members.each {|a| a.skill_count_reset} end #-------------------------------------------------------------------------- # ID別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_id(sid) members.each {|a| a.skill_count_reset_by_id(sid)} end #-------------------------------------------------------------------------- # タグ別スキル使用回数リセット #-------------------------------------------------------------------------- def skill_count_reset_by_tag(tag) members.each {|a| a.skill_count_reset_by_tag(tag)} end #-------------------------------------------------------------------------- # ID別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_id(sid,value) members.each {|a| a.skill_count_restore_by_id(sid,value)} end #-------------------------------------------------------------------------- # タグ別スキル使用回数加算 #-------------------------------------------------------------------------- def skill_count_restore_by_tag(tag,value) members.each {|a| a.skill_count_restore_by_tag(tag,value)} end end