#============================================================================== # ■ RGSS3 クイックコモンイベント Ver1.00 by 星潟 #------------------------------------------------------------------------------ # アイテム・スキル使用時、8種のタイミングを任意で選択して # 指定したコモンイベントを瞬時に実行します。 # もしくは、イベントコマンドから指定したコモンイベントを瞬時に実行します。 # ただし、動作の都合上、本来の動作を行わないものや # 使用出来ないものもありますし # 素材スクリプトとの併用などにより # 予期しない問題が起きる場合もありますので # 使用される場合は注意してください。 #============================================================================== # アイテム・スキルのメモ欄に記述 #------------------------------------------------------------------------------ # <使用前クイックコモン:1> # # このアイテム・スキル使用前にコモンイベントID1を実行します。 #------------------------------------------------------------------------------ # <使用後クイックコモン:2> # # このアイテム・スキル使用後にコモンイベントID2を実行します。 #------------------------------------------------------------------------------ # <適用前クイックコモン:3> # # このアイテム・スキル適用前(命中判定等の前)にコモンイベントID3を実行します。 #------------------------------------------------------------------------------ # <命中判定成功時クイックコモン:4> # # このアイテム・スキル適用後、命中判定に成功していれば # コモンイベントID4を実行します。 # なお、相手が回避判定に成功していても命中判定が成功していれば # この機能による処理は実行されます。 # # XPスタイルバトル等、命中判定と回避判定で同じポップアップが出るスクリプトを # 使用されている場合は注意して下さい。 #------------------------------------------------------------------------------ # <命中判定失敗時クイックコモン:5> # # このアイテム・スキル適用後、命中判定に失敗していれば # コモンイベントID5を実行します。 #------------------------------------------------------------------------------ # <回避判定成功時クイックコモン:6> # # このアイテム・スキル適用後、相手が回避判定に成功していれば # コモンイベントID6を実行します。 #------------------------------------------------------------------------------ # <命中時クイックコモン:7> # # このアイテム・スキル適用後、命中判定に成功し、相手が回避判定に失敗していれば # コモンイベントID7を実行します。 #------------------------------------------------------------------------------ # <適用後クイックコモン:7> # # このアイテム・スキル適用後、コモンイベントID7を実行します。 #============================================================================== # イベントコマンドのスクリプトや移動ルートの設定のスクリプトで記述 #------------------------------------------------------------------------------ # quick_common(1) # # コモンイベントID1を実行します。 #============================================================================== # 以下、イベントコマンドの動作説明 # # ○が通常と動作内容が変わらないもの。 # # △が動作の一部変更があるもの。補足情報あり。 # # ×が動作しないもの。 # # ただし、素材スクリプトによって動作内容が変更されている場合は # 必ずこの通りとは限らず、フリーズ要因となる場合もあります。 #------------------------------------------------------------------------------ # [×]文章の表示 #------------------------------------------------------------------------------ # [×]選択肢の表示 #------------------------------------------------------------------------------ # [×]数値入力の処理 #------------------------------------------------------------------------------ # [×]アイテム選択の処理 #------------------------------------------------------------------------------ # [×]スクロール文章の表示 #------------------------------------------------------------------------------ # [○]注釈 #------------------------------------------------------------------------------ # [○]条件分岐 #------------------------------------------------------------------------------ # [○]ループ #------------------------------------------------------------------------------ # [○]ループの中断 #------------------------------------------------------------------------------ # [○]イベント処理の中断 #------------------------------------------------------------------------------ # [△]コモンイベント # 実行内容がGame_InterpreterではなくGame_QuickInterpreterで管理される為 # 内容を丸ごと入れ変えられています。 # 基本的には動作内容に変更はありませんが、手は加えてあるので注意。 #------------------------------------------------------------------------------ # [○]ラベル #------------------------------------------------------------------------------ # [○]ラベルジャンプ #------------------------------------------------------------------------------ # [○]スイッチの操作 #------------------------------------------------------------------------------ # [○]変数の操作 #------------------------------------------------------------------------------ # [○]セルフスイッチの操作 #------------------------------------------------------------------------------ # [○]タイマーの操作 #------------------------------------------------------------------------------ # [○]所持金の増減 #------------------------------------------------------------------------------ # [○]アイテムの増減 #------------------------------------------------------------------------------ # [○]武器の増減 #------------------------------------------------------------------------------ # [○]防具の増減 #------------------------------------------------------------------------------ # [○]メンバーの入れ替え #------------------------------------------------------------------------------ # [○]戦闘 BGM の変更 #------------------------------------------------------------------------------ # [○]戦闘終了 ME の変更 #------------------------------------------------------------------------------ # [○]セーブ禁止の変更 #------------------------------------------------------------------------------ # [○]メニュー禁止の変更 #------------------------------------------------------------------------------ # [○]エンカウント禁止の変更 #------------------------------------------------------------------------------ # [○]並び替え禁止の変更 #------------------------------------------------------------------------------ # [○]ウィンドウカラーの変更 #------------------------------------------------------------------------------ # [×]場所移動 #------------------------------------------------------------------------------ # [○]乗り物の位置設定 #------------------------------------------------------------------------------ # [○]イベントの位置設定 #------------------------------------------------------------------------------ # [×]マップのスクロール #------------------------------------------------------------------------------ # [×]移動ルートの設定 #------------------------------------------------------------------------------ # [×]乗り物の乗降 #------------------------------------------------------------------------------ # [○]透明状態の変更 #------------------------------------------------------------------------------ # [×]アニメーションの表示 #------------------------------------------------------------------------------ # [×]フキダシアイコンの表示 #------------------------------------------------------------------------------ # [×]イベントの一時消去 #------------------------------------------------------------------------------ # [○]隊列歩行の変更 #------------------------------------------------------------------------------ # [△]隊列メンバーの集合 # 集合する移動処理がカットされ、既に集合した状態になります。 #------------------------------------------------------------------------------ # [△]画面のフェードアウト # 戦闘中でもマップでもない場合 # 時間を無視し、マップ画面について即座にフェードアウトが反映されます。 #------------------------------------------------------------------------------ # [△]画面のフェードイン # 戦闘中でもマップでもない場合 # 時間を無視し、マップ画面について即座にフェードインが反映されます。 #------------------------------------------------------------------------------ # [△]画面の色調変更 # 戦闘中でもマップでもない場合 # 時間を無視し、マップ画面について即座に色調変更が反映されます。 #------------------------------------------------------------------------------ # [△]画面のフラッシュ # 戦闘中でもマップでもない場合 # マップ画面に戻った時にフラッシュが実行されます。 #------------------------------------------------------------------------------ # [△]画面のシェイク # ウェイトを無視します。 # 戦闘中でもマップでもない場合 # マップ画面に戻った時にシェイクが実行されます。 #------------------------------------------------------------------------------ # [×]ウェイト #------------------------------------------------------------------------------ # [△]ピクチャの表示 # 戦闘中であれば戦闘中、それ以外はマップのピクチャに作用します。 #------------------------------------------------------------------------------ # [△]ピクチャの移動 # 戦闘中であれば戦闘中、それ以外はマップのピクチャに作用します。 # 設定フレームが1フレームの場合、例外的に即時移動処理を完了させます。 #------------------------------------------------------------------------------ # [△]ピクチャの回転 # 戦闘中であれば戦闘中、それ以外はマップのピクチャに作用します。 #------------------------------------------------------------------------------ # [△]ピクチャの色調変更 # 戦闘中であれば戦闘中、それ以外はマップのピクチャに作用します。 # 設定フレームが1フレームの場合、例外的に即時色調変更処理を完了させます。 #------------------------------------------------------------------------------ # [△]ピクチャの消去 # 戦闘中であれば戦闘中、それ以外はマップのピクチャに作用します。 #------------------------------------------------------------------------------ # [△]天候の設定 # ウェイトを無視します。 #------------------------------------------------------------------------------ # [○]BGM の演奏 #------------------------------------------------------------------------------ # [○]BGM のフェードアウト #------------------------------------------------------------------------------ # [○]BGM の保存 #------------------------------------------------------------------------------ # [○]BGM の再開 #------------------------------------------------------------------------------ # [○]BGS の演奏 #------------------------------------------------------------------------------ # [○]BGS のフェードアウト #------------------------------------------------------------------------------ # [○]ME の演奏 #------------------------------------------------------------------------------ # [○]SE の演奏 #------------------------------------------------------------------------------ # [○]SE の停止 #------------------------------------------------------------------------------ # [○]マップ名表示の変更 #------------------------------------------------------------------------------ # [○]タイルセットの変更 #------------------------------------------------------------------------------ # [○]戦闘背景の変更 #------------------------------------------------------------------------------ # [○]遠景の変更 #------------------------------------------------------------------------------ # [○]指定位置の情報取得 #------------------------------------------------------------------------------ # [×]バトルの処理 #------------------------------------------------------------------------------ # [×]ショップの処理 #------------------------------------------------------------------------------ # [×]名前入力の処理 #------------------------------------------------------------------------------ # [○]HP の増減 #------------------------------------------------------------------------------ # [○]MP の増減 #------------------------------------------------------------------------------ # [○]ステートの変更 #------------------------------------------------------------------------------ # [○]全回復 #------------------------------------------------------------------------------ # [○]経験値の増減 #------------------------------------------------------------------------------ # [○]レベルの増減 #------------------------------------------------------------------------------ # [○]能力値の増減 #------------------------------------------------------------------------------ # [○]スキルの増減 #------------------------------------------------------------------------------ # [○]装備の変更 #------------------------------------------------------------------------------ # [○]名前の変更 #------------------------------------------------------------------------------ # [○]職業の変更 #------------------------------------------------------------------------------ # [○]アクターのグラフィック変更 #------------------------------------------------------------------------------ # [○]乗り物のグラフィック変更 #------------------------------------------------------------------------------ # [○]二つ名の変更 #------------------------------------------------------------------------------ # [○]敵キャラの HP 増減 #------------------------------------------------------------------------------ # [○]敵キャラの MP 増減 #------------------------------------------------------------------------------ # [○]敵キャラのステート変更 #------------------------------------------------------------------------------ # [○]敵キャラの全回復 #------------------------------------------------------------------------------ # [○]敵キャラの出現 #------------------------------------------------------------------------------ # [○]敵キャラの変身 #------------------------------------------------------------------------------ # [○]戦闘アニメーションの表示 #------------------------------------------------------------------------------ # [○]戦闘行動の強制 #------------------------------------------------------------------------------ # [×]バトルの中断 #------------------------------------------------------------------------------ # [×]メニュー画面を開く #------------------------------------------------------------------------------ # [×]セーブ画面を開く #------------------------------------------------------------------------------ # [×]ゲームオーバー #------------------------------------------------------------------------------ # [×]タイトル画面に戻す #------------------------------------------------------------------------------ # [○]スクリプト # ただ、幅広くいろんな処理を扱える分 # ここで何をしたら止まるか把握していないと # フリーズやエラー他、問題が起きる可能性大。要注意。 #============================================================================== module QuickCommon #使用前クイックコモンの設定用キーワードを指定 Word1 = "使用前クイックコモン" #使用後クイックコモンの設定用キーワードを指定 Word2 = "使用後クイックコモン" #適用前クイックコモンの設定用キーワードを指定 Word3 = "適用前クイックコモン" #命中判定成功時クイックコモンの設定用キーワードを指定 Word4 = "命中判定成功時クイックコモン" #命中判定失敗時クイックコモンの設定用キーワードを指定 Word5 = "命中判定失敗時クイックコモン" #回避判定成功時クイックコモンの設定用キーワードを指定 Word6 = "回避判定成功時クイックコモン" #命中時クイックコモンの設定用キーワードを指定 Word7 = "命中時クイックコモン" #適用後クイックコモンの設定用キーワードを指定 Word8 = "適用後クイックコモン" #使用者のIDを保存する変数IDを指定 #アクターの場合はアクターのまま、エネミーの場合は敵グループ内のインデックス VID1 = 21 #対象のIDを保存する変数IDを指定 #アクターの場合はアクターのまま、エネミーの場合は敵グループ内のインデックス VID2 = 22 #スキル・アイテムのIDを保存する変数IDを指定 #スキルの場合はスキルIDのまま、アイテムの場合はアイテムIDに負の値にしたもの VID3 = 23 #クイックコモン実行後、戦闘中の場合は速やかにウィンドウに反映させるか BWQR = true end class Game_Interpreter #-------------------------------------------------------------------------- # クイックコモンイベントの呼び出し #-------------------------------------------------------------------------- def quick_common(id) SceneManager.scene.quick_common_event_execute(id) if SceneManager.scene end end class Game_CharacterBase #-------------------------------------------------------------------------- # クイックコモンイベントの呼び出し #-------------------------------------------------------------------------- def quick_common(id) SceneManager.scene.quick_common_event_execute(id) if SceneManager.scene end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの効果適用 #-------------------------------------------------------------------------- alias item_apply_quick_common item_apply def item_apply(user, item) a = item.quick_common[:item_apply_before] if a @result.clear SceneManager.scene.quick_common_event_execute(a,user,self,item) end item_apply_quick_common(user, item) u = @result.used m = @result.missed e = @result.evaded h = @result.hit? if u a = item.quick_common[:item_apply_used] SceneManager.scene.quick_common_event_execute(a,user,self,item) if a end if m a = item.quick_common[:item_apply_missed] SceneManager.scene.quick_common_event_execute(a,user,self,item) if a end if e a = item.quick_common[:item_apply_evaded] SceneManager.scene.quick_common_event_execute(a,user,self,item) if a end if h a = item.quick_common[:item_apply_hit] SceneManager.scene.quick_common_event_execute(a,user,self,item) if a end a = item.quick_common[:item_apply_after] SceneManager.scene.quick_common_event_execute(a,user,self,item) if a end end class Scene_Base #-------------------------------------------------------------------------- # クイックコモン実行 #-------------------------------------------------------------------------- def quick_common_event_execute(cids,u = nil,t = nil,it = nil) cea = $data_common_events return unless cea if cids.is_a?(Array) cids.each {|cid| quick_common_event_execute_main(cea[cid],u,t,it) if cea[cid]} else quick_common_event_execute_main(cea[cids],u,t,it) if cea[cids] end end #-------------------------------------------------------------------------- # クイックコモンのイベントコマンド実行 #-------------------------------------------------------------------------- def quick_common_event_execute_main(ce,u = nil,t = nil,it = nil) $game_variables[QuickCommon::VID1] = u.actor? ? u.id : -u.index if u $game_variables[QuickCommon::VID2] = t.actor? ? t.id : -t.index if t $game_variables[QuickCommon::VID3] = it.id * (it.is_a?(RPG::Skill) ? 1 : -1) if it temp_interpreter = Game_QuickInterpreter.new temp_interpreter.setup(ce.list) loop do temp_interpreter.update break unless temp_interpreter.running? end if $game_party.in_battle && SceneManager.scene_is?(Scene_Battle) && QuickCommon::BWQR refresh_status end end end class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # アイテムの使用 #-------------------------------------------------------------------------- alias use_item_quick_common use_item def use_item u = user it = item a = it.quick_common[:use_item_before] SceneManager.scene.quick_common_event_execute(a,u,nil,it) if a use_item_quick_common a = it.quick_common[:use_item_after] SceneManager.scene.quick_common_event_execute(a,u,nil,it) if a end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # スキル/アイテムの使用 #-------------------------------------------------------------------------- alias use_item_quick_common use_item def use_item u = @subject it = @subject.current_action.item a = it.quick_common[:use_item_before] SceneManager.scene.quick_common_event_execute(a,u,nil,it) if a use_item_quick_common a = it.quick_common[:use_item_after] SceneManager.scene.quick_common_event_execute(a,u,nil,it) if a end end class Game_Message attr_accessor :force_invisible alias visible_quick_common visible def visible return false if @force_invisible visible_quick_common end end class Game_Screen def quick_fadeout @brightness = 0 @fadeout_duration = 0 @fadein_duration = 0 end def quick_fadein @brightness = 255 @fadeout_duration = 0 @fadein_duration = 0 end end class Game_Picture #-------------------------------------------------------------------------- # 瞬間移動 #-------------------------------------------------------------------------- def quick_move(origin,x,y,zoom_x,zoom_y,opacity,blend_type) @origin = origin @x = x.to_f @y = y.to_f @zoom_x = zoom_x.to_f @zoom_y = zoom_y.to_f @opacity = opacity.to_f @blend_type = blend_type init_target end end class Game_QuickInterpreter < Game_Interpreter #-------------------------------------------------------------------------- # ウェイト #-------------------------------------------------------------------------- def wait(duration) end #-------------------------------------------------------------------------- # メッセージ表示がビジー状態の間ウェイト #-------------------------------------------------------------------------- def wait_for_message end #-------------------------------------------------------------------------- # 文章の表示 #-------------------------------------------------------------------------- def command_101 end #-------------------------------------------------------------------------- # 選択肢の表示 #-------------------------------------------------------------------------- def command_102 end #-------------------------------------------------------------------------- # [**] の場合 #-------------------------------------------------------------------------- def command_402 command_skip if @branch[@indent] != @params[0] end #-------------------------------------------------------------------------- # キャンセルの場合 #-------------------------------------------------------------------------- def command_403 command_skip if @branch[@indent] != 4 end #-------------------------------------------------------------------------- # 選択肢の表示 #-------------------------------------------------------------------------- def command_102 end #-------------------------------------------------------------------------- # 数値入力の処理 #-------------------------------------------------------------------------- def command_103 end #-------------------------------------------------------------------------- # アイテム選択の処理 #-------------------------------------------------------------------------- def command_104 end #-------------------------------------------------------------------------- # スクロール文章の表示 #-------------------------------------------------------------------------- def command_105 end #-------------------------------------------------------------------------- # コモンイベント #-------------------------------------------------------------------------- def command_117 common_event = $data_common_events[@params[0]] if common_event child = Game_QuickInterpreter.new(@depth + 1) child.setup(common_event.list, same_map? ? @event_id : 0) child.run end end #-------------------------------------------------------------------------- # 場所移動 #-------------------------------------------------------------------------- def command_201 end #-------------------------------------------------------------------------- # マップのスクロール #-------------------------------------------------------------------------- def command_204 end #-------------------------------------------------------------------------- # 移動ルートの設定 #-------------------------------------------------------------------------- def command_205 end #-------------------------------------------------------------------------- # 乗り物の乗降 #-------------------------------------------------------------------------- def command_206 end #-------------------------------------------------------------------------- # アニメーションの表示 #-------------------------------------------------------------------------- def command_212 end #-------------------------------------------------------------------------- # フキダシアイコンの表示 #-------------------------------------------------------------------------- def command_213 end #-------------------------------------------------------------------------- # イベントの一時消去 #-------------------------------------------------------------------------- def command_214 end #-------------------------------------------------------------------------- # 隊列メンバーの集合 #-------------------------------------------------------------------------- def command_217 return if $game_party.in_battle $game_player.followers.synchronize($game_player.x, $game_player.y, $game_player.direction) end #-------------------------------------------------------------------------- # 画面のフェードアウト #-------------------------------------------------------------------------- def command_221 if !$game_party.in_battle && !SceneManager.scene.is_a?(Scene_Map) screen.quick_fadeout else $game_message.force_invisible = true super $game_message.force_invisible = nil end end #-------------------------------------------------------------------------- # 画面のフェードイン #-------------------------------------------------------------------------- def command_222 if !$game_party.in_battle && !SceneManager.scene.is_a?(Scene_Map) screen.quick_fadein else $game_message.force_invisible = true super $game_message.force_invisible = nil end end #-------------------------------------------------------------------------- # 画面の色調変更 #-------------------------------------------------------------------------- def command_223 if !$game_party.in_battle && !SceneManager.scene.is_a?(Scene_Map) && @params[1] == 1 screen.start_tone_change(@params[0], 0) else super end end #-------------------------------------------------------------------------- # ウェイト #-------------------------------------------------------------------------- def command_230 end #-------------------------------------------------------------------------- # ピクチャの移動 #-------------------------------------------------------------------------- def command_232 if !$game_party.in_battle && !SceneManager.scene.is_a?(Scene_Map) && @params[10] == 1 if @params[3] == 0 # 直接指定 x = @params[4] y = @params[5] else # 変数で指定 x = $game_variables[@params[4]] y = $game_variables[@params[5]] end screen.pictures[@params[0]].quick_move( @params[2],x,y,@params[6],@params[7],@params[8],@params[9]) else super end end #-------------------------------------------------------------------------- # ピクチャの色調変更 #-------------------------------------------------------------------------- def command_234 if !$game_party.in_battle && !SceneManager.scene.is_a?(Scene_Map) && @params[2] == 1 screen.start_tone_change(@params[0], 0) else super end end #-------------------------------------------------------------------------- # ムービーの再生 #-------------------------------------------------------------------------- def command_261 end #-------------------------------------------------------------------------- # バトルの処理 #-------------------------------------------------------------------------- def command_301 end #-------------------------------------------------------------------------- # 勝った場合 #-------------------------------------------------------------------------- def command_601 end #-------------------------------------------------------------------------- # 逃げた場合 #-------------------------------------------------------------------------- def command_602 end #-------------------------------------------------------------------------- # 負けた場合 #-------------------------------------------------------------------------- def command_603 end #-------------------------------------------------------------------------- # ショップの処理 #-------------------------------------------------------------------------- def command_302 end #-------------------------------------------------------------------------- # 名前入力の処理 #-------------------------------------------------------------------------- def command_303 end #-------------------------------------------------------------------------- # バトルの中断 #-------------------------------------------------------------------------- def command_340 end #-------------------------------------------------------------------------- # メニュー画面を開く #-------------------------------------------------------------------------- def command_351 end #-------------------------------------------------------------------------- # セーブ画面を開く #-------------------------------------------------------------------------- def command_352 end #-------------------------------------------------------------------------- # ゲームオーバー #-------------------------------------------------------------------------- def command_353 end #-------------------------------------------------------------------------- # タイトル画面に戻す #-------------------------------------------------------------------------- def command_354 end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # クイックコモン #-------------------------------------------------------------------------- def quick_common @quick_common ||= create_quick_common end #-------------------------------------------------------------------------- # クイックコモンデータ作成 #-------------------------------------------------------------------------- def create_quick_common @quick_common = {} create_quick_common_detail(:use_item_before,QuickCommon::Word1) create_quick_common_detail(:use_item_after,QuickCommon::Word2) create_quick_common_detail(:item_apply_before,QuickCommon::Word3) create_quick_common_detail(:item_apply_used,QuickCommon::Word4) create_quick_common_detail(:item_apply_missed,QuickCommon::Word5) create_quick_common_detail(:item_apply_evaded,QuickCommon::Word6) create_quick_common_detail(:item_apply_hit,QuickCommon::Word7) create_quick_common_detail(:item_apply_after,QuickCommon::Word8) @quick_common end #-------------------------------------------------------------------------- # クイックコモンデータ登録 #-------------------------------------------------------------------------- def create_quick_common_detail(symbol,word) if /<#{word}[::](\S+)/ =~ note @quick_common[symbol] = $1.to_s.split(/\s*,\s*/).inject([]) {|r,t| r.push(t.to_i)} end end end