392 lines
No EOL
15 KiB
Ruby
392 lines
No EOL
15 KiB
Ruby
#==============================================================================
|
|
# ■ 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 |