#============================================================================== # ■ RGSS3 特殊エラー検出 Ver1.03 by 星潟 #------------------------------------------------------------------------------ # 解放済みビューポート内のスプライトを解放しようとした際に生じると思われる # RGSS Playerの動作停止エラーの原因となっている部分を検出します。 # # Ver1.01 # 解放済みスプライトへのビューポートチェック時にエラー落ちしていた不具合を修正。 # (既に解放済みの場合、処理そのものを行わないように変更) # # Ver1.02 # 頂いたご意見を元に、チェック箇所を追加。 # また、ウィンドウにもチェックを入れました。 # # Ver1.02a # alias部分にちょっと手を加えました。多分動作に影響はありません。 # # Ver1.03 # 新たに天候とタイルチップもエラー検出対象に加えました。 #============================================================================== module SPR_E_C #問題のある処理の実行までの経緯を表示するかどうかを設定します。 #(true 表示する/false 表示しない) DETAIL = true end class Sprite #-------------------------------------------------------------------------- # ● スプライトの生成 #-------------------------------------------------------------------------- alias initialize_check initialize unless $! def initialize(viewport = nil) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたスプライト生成命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end initialize_check(viewport) end #-------------------------------------------------------------------------- # ● ビューポートの指定 #-------------------------------------------------------------------------- alias viewport_check viewport unless $! def viewport=(viewport) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたビューポート指定命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end viewport_check=(viewport) end #-------------------------------------------------------------------------- # ● スプライトの解放 #-------------------------------------------------------------------------- alias dispose_check dispose unless $! def dispose #ビューポートが設定されているスプライトでなければ飛ばす if !self.disposed? && self.viewport != nil begin #ビューポートの可視状態を参照 self.viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたスプライト解放命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end dispose_check end end class Tilemap #-------------------------------------------------------------------------- # ● スプライトの生成 #-------------------------------------------------------------------------- alias initialize_check initialize unless $! def initialize(viewport = nil) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたスプライト生成命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end initialize_check(viewport) end #-------------------------------------------------------------------------- # ● ビューポートの指定 #-------------------------------------------------------------------------- alias viewport_check viewport unless $! def viewport=(viewport) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたビューポート指定命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end viewport_check=(viewport) end #-------------------------------------------------------------------------- # ● スプライトの解放 #-------------------------------------------------------------------------- alias dispose_check dispose unless $! def dispose #ビューポートが設定されているスプライトでなければ飛ばす if !self.disposed? && self.viewport != nil begin #ビューポートの可視状態を参照 self.viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたスプライト解放命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end dispose_check end end class Plane #-------------------------------------------------------------------------- # ● スプライトの生成 #-------------------------------------------------------------------------- alias initialize_check initialize unless $! def initialize(viewport = nil) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたスプライト生成命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end initialize_check(viewport) end #-------------------------------------------------------------------------- # ● ビューポートの指定 #-------------------------------------------------------------------------- alias viewport_check viewport unless $! def viewport=(viewport) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたビューポート指定命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end viewport_check=(viewport) end #-------------------------------------------------------------------------- # ● スプライトの解放 #-------------------------------------------------------------------------- alias dispose_check dispose unless $! def dispose #ビューポートが設定されているスプライトでなければ飛ばす if !self.disposed? && self.viewport != nil begin #ビューポートの可視状態を参照 self.viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたスプライト解放命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end dispose_check end end class Window_Base #-------------------------------------------------------------------------- # ● ビューポートの指定 #-------------------------------------------------------------------------- alias viewport_check viewport unless $! def viewport=(viewport) if viewport != nil begin #ビューポートの可視状態を参照 viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたビューポート指定命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end super(viewport) end #-------------------------------------------------------------------------- # ● ウィンドウの解放 #-------------------------------------------------------------------------- alias dispose_check dispose unless $! def dispose #ビューポートが設定されているウィンドウでなければ飛ばす if !self.disposed? && self.viewport != nil begin #ビューポートの可視状態を参照 self.viewport.visible #エラーになった場合は既にそのビューポートは解放されているので #出力処理を実行する rescue RGSSError data = caller text = [] text.push(data[1].to_s.scan(/{(\S+)}/)[0][0].to_s) text.push(data[1].to_s.scan(/:(\S+):/)[0][0].to_s) text.push(self.to_s.scan(/#<(\S+):/)[0][0].to_s) p "エラー要因を検出しました" p text[0] + "番目のセクション - " + $RGSS_SCRIPTS[text[0].to_i][1].to_s + "の" p text[1] + "行目に呼び出されたウィンドウ解放命令の対象である" p text[2] + "のビューポートが既に解放されています" if SPR_E_C::DETAIL p "詳細な処理順" data.reverse! data.each do |t| p t end end end end dispose_check end end