#============================================================================== # RGSS2_SRPG2拡張 連続攻撃スキル・アイテム # 2011/12/17公開 # C Winter (http://ccwinter.blog.fc2.com/) # # ・「行動回数拡張 統合版」より上に入れてください #============================================================================== module TSRPG module Pattern MULTI_ATTACK = /<連撃,(\d+),(\d+)>/i end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem #-------------------------------------------------------------------------- # ○ 連撃の取得 #-------------------------------------------------------------------------- def multi_attack n = @note =~ TSRPG::Pattern::MULTI_ATTACK ? [$1.to_i,$2.to_i] : false return n end end #============================================================================== # ■ Scene_Srpg #============================================================================== class Scene_Srpg < Scene_Base #-------------------------------------------------------------------------- # ● スキル(アイテム)の実行 #update1.011 #-------------------------------------------------------------------------- def execute_action_obj(targets) level = 0 animation_lock = false obj = @event.unit.action.obj if obj.double_anime > 0 # ダブルアニメーション @event.animation_id = obj.double_anime wait_for_animation # アニメーション終了待ち end for event in targets @event.back_attack?(event) # 背後を取っているかチェック if obj.is_a?(RPG::Skill) # スキルの場合 @event.unit.mp -= @event.unit.calc_mp_cost(obj) if level == 0 # MP消費 if obj.id == 2 # 会話 talk(event) return @event.unit.level # 自分のレベルを返す elsif obj.id == 3 # 防御 execute_action_guard return @event.unit.level-5 # 自分のレベルを返す end if event.unit.reflect? # 魔法反射 if obj.spi_f > 0 and not obj.physical_attack and not obj.pierce? and @event.id != event.id event.animation_id = TSRPG::ANIME_REFLECT wait_for_animation # アニメーション終了待ち level += @event.unit.level targets.push(@event) next end end event.unit.skill_effect(@event.unit, obj) # スキルの効果適用 else # アイテムの場合 $game_party.consume_item(obj) if level == 0 # アイテム消費 event.unit.item_effect(@event.unit, obj) # アイテムの効果適用 end if event.unit.hp_damage > 0 steal(event) if rand(100) < obj.steal_rate # 盗む knock_back(event, obj) # ノックバック end @event.move_end = true if obj.nomove? # 移動不可 event.reset if obj.for_dead_friend? # 蘇生処理 animation_lock = set_animation(event, @event, obj) unless animation_lock @message_mini_window.refresh(obj.name) # スキル(アイテム)名表示 set_popup(event, @event) if obj.multi_attack n = obj.multi_attack for i in 1...n[0] break if event.unit.dead? break if rand(100) >= n[1] if obj.is_a?(RPG::Skill) # スキルの場合 event.unit.skill_effect(@event.unit, obj) # スキルの効果適用 else event.unit.item_effect(@event.unit, obj) # アイテムの効果適用 end animation_lock = set_animation(event, @event, obj) unless animation_lock set_popup(event, @event) end end event.damage(@event) event.refresh_state # キャラクターの状態を更新 if obj.common_event_id > 0 # コモンイベント $game_temp.common_event_id = obj.common_event_id $game_temp.common_event_user = @event.id end level += (event.unit.level == 0 ? @event.unit.level : event.unit.level) end return level / targets.size # 行動対象の平均レベルを返す end end