#============================================================================== # ■ XP-RGSS-37 用語辞典-アナライザ [Ver.1.0.0] by Claimh #------------------------------------------------------------------------------ # スキル、アイテムを使って、敵の能力を調べることができるようになります。 # 使用可能時 :バトルのみ # 効果範囲 :単体のみ #------------------------------------------------------------------------------ # 必須 : 自動生成Plugin、自動更新Plugin #------------------------------------------------------------------------------ # 自動生成 : ATC_ENEMY_A を使用してください # 自動更新 : A_UP[ATC_ENEMY_A] を有効にしてください #------------------------------------------------------------------------------ module DictAnalizer # アナライザとして使用するスキルID SKILL_ID = [81, 82] # アナライザとして使用するアイテムID ITEM_ID = [33] # 画面背景の不透明度 BACK_OPACITY = 160 end class Game_Battler #-------------------------------------------------------------------------- # ● スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- alias skill_effect_analizer skill_effect def skill_effect(user, skill) flag = skill_effect_analizer(user, skill) if $game_temp.in_battle if DictAnalizer::SKILL_ID.include?(skill.id) and self.damage == "Miss" if user.is_a?(Game_Actor) and self.is_a?(Game_Enemy) and skill.scope == 1 and skill.power == 0 and rand(100) < skill.hit self.damage = "" # Missにしない end end end return flag end #-------------------------------------------------------------------------- # ● アイテムの効果適用 # item : アイテム #-------------------------------------------------------------------------- alias item_effect_analizer item_effect def item_effect(item) flag = item_effect_analizer(item) if $game_temp.in_battle if DictAnalizer::ITEM_ID.include?(item.id) and self.damage == "Miss" if item.recover_sp_rate == 0 and item.recover_sp == 0 and (item.parameter_type == 0 or item.parameter_points == 0) and item.scope == 1 and rand(100) < item.hit self.damage = "" # Missにしない end end end return flag end end class Scene_Battle #-------------------------------------------------------------------------- # ● プレバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase1_analizer start_phase1 def start_phase1 start_phase1_analizer @enemy_analizer = false end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias update_phase4_step5_analizer update_phase4_step5 def update_phase4_step5 update_phase4_step5_analizer return unless @active_battler.is_a?(Game_Actor) return if @target_battlers.size != 1 return unless @target_battlers[0].is_a?(Game_Enemy) return if @target_battlers[0].damage == "Miss" case @active_battler.current_action.kind when 0; return when 1 # スキル if DictAnalizer::SKILL_ID.include?(@active_battler.current_action.skill_id) setup_analizer end when 2 # アイテム if DictAnalizer::ITEM_ID.include?(@active_battler.current_action.item_id) setup_analizer end end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ) #-------------------------------------------------------------------------- alias update_phase4_analizer update_phase4 def update_phase4 if @enemy_analizer update_analizer return end update_phase4_analizer end #-------------------------------------------------------------------------- # ● アナライザ起動 #-------------------------------------------------------------------------- def setup_analizer if !defined?(DictAutoUpdate) or !defined?(DictAutoCreate) p "自動生成、自動更新がありません。" return end @enemy_analizer = true @analizer = Window_DictInfo.new @analizer.back_opacity = DictAnalizer::BACK_OPACITY a_up = DictAutoUpdate::A_UP[DictDef::ATC_ENEMY_A] enemy_id = @target_battlers[0].id data = $game_system.dictionary[a_up.category_id][enemy_id] data.show_flg = true unless data.show_flg data.info = DictAutoCreate.enemy_text(enemy_id) if data.info == "" @analizer.refresh(data, 0) end #-------------------------------------------------------------------------- # ● アナライザ待機 : フレーム更新 #-------------------------------------------------------------------------- def update_analizer @analizer.update_arrow # 決定ボタンが押された場合 if Input.trigger?(Input::C) $game_system.se_play($data_system.decision_se) exit_analizer # キャンセルボタンが押された場合 elsif Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) exit_analizer # 上ボタンが押された場合 elsif Input.repeat?(Input::UP) or Input.repeat?(Input::L) @analizer.page_up # 下ボタンが押された場合 elsif Input.repeat?(Input::DOWN) or Input.repeat?(Input::R) @analizer.page_dw end end #-------------------------------------------------------------------------- # ● アナライザ終了 #-------------------------------------------------------------------------- def exit_analizer @analizer.dispose @analizer = nil @enemy_analizer = false end end