Event-EI インタプリタ 例外情報強化スクリプトにおいての詳細情報です。
WFRGSS_Event_EI モジュールの値を設定することで動作を調整することができます。通常の利用では、特に必要ない限りSCRIPT_TUNE以外、falseのままにしてください。
デバッグモードのみ有効なオプションにてデバッグモード以外でも動作するように編集を行った場合、本来知られたくない情報が漏れたり、思わぬ動作を引き起こす恐れがあります。
特に次のクラスやモジュールを編集する場合は特に注意してください。
SnapShotWorking
EvalExec
WFRGSS_Event_EI ※ カスタマイズポイント以外の部分
作成したゲームを配布する前に、SCRIPT_TUNE 以外の設定が無効( false )になっているかをかならず確認してください。
それでも 不安なら、SnapShotWorking モジュール全体を次のように置き換えてください。
module SnapShotWorking
def self.snapshot
nil
end
end
規定値 : true (TrueClass)
設定値 : true (TrueClass) / false(FalseClass)
スクリプト、インタプリタの動作を高速化する場合は、true を指定します。高速化を行わない場合は、false を指定します。
このオブションで互換性の問題が発生する場合は、false に指定してください。
互換性の問題が多発するため、この設定値はrev-5で廃止されました。
規定値 : false (FalseClass)(XP版) / true (TrueClass)(VX版)
設定値 : true (TrueClass) / false(FalseClass)
イベントコマンド、スクリプトで無限ループになる恐れがあるスクリプトを検出したとき例外 RuntimeError を発生させるかを指定します。
この値が true の場合、検出されると例外 RuntimeError を発生させます。
この値が false の場合、検出を行いません。
この機能により例外が発生した場合は、スクリプトは1行目に false または nil を返しているため、無限ループになる恐れがあること通知します。
条件を満たすまで処理を繰り返す事を想定している場合は例外により処理が中断してしまいますので、ご注意ください。
trueに設定しても無限ループに陥る場合は、例外を破棄していないか、リトライしていないかを確認してください。
VX版では、イベントコマンド スクリプトの動作がXP版のような動作をします。 そのため、記述方法によっては無限ループになる恐れがあります。 (無限ループは検出できます。)
なお、次のようなスクリプトの無限ループは検出しません。
このような無限ループが発生する恐れがあるスクリプトを検出するには、後述するASSERT_GRAPHICS_METHOD_CHECK をtrueに設定します。
# 無限ループの例。これではハングアップにすらならない。
while true
Graphics.update
end
規定値 : false (FalseClass)
設定値 : true (TrueClass) / false(FalseClass)
スクリプトに、Graphics.updateが記述されていないかをチェックします。記述されていた場合は、例外AssertionErrorが発生します。
例外 AssertionError が発生した場合、スクリプトにGraphics.updateが呼ばれていることを示します。
このオブションは、次のような無限ループに陥るスクリプトを検出するためのものです。
# 無限ループの例。これではハングアップにすらならない。
while true
Graphics.update
end
メソッドの内部などで、Graphics.update が呼ばれていた場合は後述する、 ASSERT_GRAPHICS_DEEP を true に設定していないと検出されません。
デバックモードのみこのオブションは有効です。無限ループ検出目的以外では、 false に設定してください。
規定値 : false (FalseClass)
設定値 : true (TrueClass) / false(FalseClass)
ASSERT_GRAPHICS_METHOD_CHECKの補助オプションで、メソッド内部で、Graphics.update が呼ばれていた場合も例外AssertionErrorを発生させます。
例外AssertionErrorが発生した場合、スクリプトを実行中に、Graphics.updateが呼ばれています。
このオブションは、次のような無限ループに陥るスクリプトを検出するためのものです。
# 予め Graphics.update が呼ばれるメソッドが定義してある
class Interpreter
def foo
Graphics.update
end
end
# 無限ループの例。これではハングアップにすらならない。
# 実際に動作させるスクリプト
while true
foo
end
デバックモードのみこのオブションは有効です。無限ループ検出目的以外では、 false に設定してください。
スレッドを同時に動かしていた場合、別のスレッドからのGraphics.updateも検出する恐れがあります。
このオブションを有効( true ) にした場合、 スクリプトの動作が遅くなりますのでご注意ください。
規定値 : false (FalseClass)
設定値 : true (TrueClass) / false(FalseClass)
ゲームを配布される前にこのオプションが無効( false ) になっていることを かならず確認してください。
このオプション設定は、内部の状態を出力するものです。
配布した作品でこのオプションが有効になっていた場合、内部の情報が流出する恐れがあります。
イベントコマンド スクリプトで例外が発生したとき、$game_ ではじまるグローバル変数の状態を取得します。
取得結果は、グローバル変数名から、$を取り除いたテキストファイルに出力されます。
既にファイルが存在する場合は上書きされますのでご注意ください。
この機能は、Object#inspectの機能に依存します。
情報は大量に出力されます。特に$game_mapでは非常に多くのデータが出力されますのでご注意ください。
デバックモードのみこのオブションは有効です。通常は、false にしておくことをお勧めします。
Tableクラスの内容は出力されません。
他にも Object#inspect またはオーバーライドされたメソッドから状態を取得できない場合も取得を行う事はできません。
イベントコマンド スクリプト、または条件分岐でのエラーの詳細情報の説明です。
スクリプトがマップイベントなのか、バトルイベントなのかを示します。
例外が発生したときに評価されていたスクリプトを表示します。
現在のマップ名を取得して表示します。
( data/MapInfos.rxdata が存在して、形式が変わっていないことが前提 )
現在のマップIDを取得します。
現在のコモンイベントIDです。コモンイベントでなければ0になります。
プレイヤーの x 座標を取得します。
プレイヤーの y 座標を取得します。
現在のイベントコマンドがコモンイベントであれば、 コモンイベント名を取得します。
マップイベントであれば、イベントの x 座標を取得します。
マップイベントであれば、イベントの y 座標を取得します。
マップイベントであれば、イベントIDを取得します。
マップイベントであれば、イベント名を取得します。
バトルイベントであれば、トループ名を取得します。
バトルイベントであれば、トループIDを取得します。
現在のイベントページです。
イベントリストの進行度です。
イベントの深さです。
実際に発生した例外の詳細情報です。
キャラクターエラーであることを示します。
イベントIDを取得します。
イベント名です。!Player Object! となっていた場合は、プレイヤーです。
イベントのx座標です。
イベントのy座標です。
現在のイベントページです。
現在のイベントがロックされているかを取得します。
現在のイベントが移動ルート強制中であるかを取得します。
現在の移動リストの進行度です。
実際に発生した例外の詳細情報です。
このスクリプトでは、 次のところを編集、追加しています。次にあげるメソッドの動作が変わっていなければ、通常は動作するようになっています。
initialize(depth = 0, main = false)
clear
setup(list, event_id , page_id = 0 , common_event_id = 0 ) setup(list, event_id )
setup_starting_event
command_117
command_355
calling_event_command( event_id , page_id )
exception_messages( errorobj = nil , script = nil )
このスクリプトでは、 次のところを編集、追加しています。次にあげるメソッドの動作が変わっていなければ、通常は動作するようになっています。
initialize(depth = 0, main = false)
clear
setup(list, event_id , page_id = 0 , common_event_id = 0 ) setup(list, event_id )
setup_starting_event
command_117
command_355
calling_event_command( event_id , page_id )
exception_messages( errorobj = nil , script = nil )
このスクリプトでは、ページ数を明示的に取得しているため、 RPGツクール(R)200xにあったイベントの呼び出し互換のスクリプト動作も可能となります。
in : event_id -> Fixnum ( 1 ~ 999 )
page_id -> Fixnum ( 1 ~ 100 )
out: true (TrueClass)
イベントのID の指定したページのイベントを呼び出します。 指定したイベントIDが存在しない、または指定したページが存在しないときは、 何も行いません。
イベントIDまたはページの指定が Fixnumでない場合は 例外 TypeError が発生します。
イベントIDまたはページの指定が範囲外の場合は 例外 RangeError が発生します。
このメソッドはイベントコマンド スクリプトから直接呼び出す事ができます。
このメソッドは、コモンイベントで指定するのが安全ですが、コモンイベントから呼び出した場合、イベントの深さが余計に1段階深くなりますのでご注意ください。