さらなる未練
ファイル移動なし起動への未練 - 永字八法の続き。
コメントでさらに示唆をいただいたので試してみる。
defineresetを使用するとどうだろうと言う提案である。
これは、いったんstart節に突入してセーブ場所を調べるなり確保するなりしてからもう一度defineresetで最初から読み込み、その時、変数に保持していたセーブ場所をsavedirに読ませるのはどうだろう、と言う提案だと理解した。(まちがっていたら容赦なくつっこんでくださいませ>ピト様)
で、試しに以下のスクリプトを組んで動かしてみた。
*define itoa $0,%0 mesbox $0,"" game *start itoa $0,%0 mesbox $0,"" rnd2 %0,1,100 itoa $0,%0 mesbox $0,"" 終了しますか? select "はい",*exit,"いいえ",*resume *exit end *resume definereset
で、これを動かすとわかるのだが、変数は起動時と、gameコマンド実行時に一度初期化されてしまう仕様なのだ。従って、defineresetをした時点で、変数に取っておいたディレクトリ名は初期化されてしまう。
以前、NScripterのバージョンアップの際に「game実行時に配列変数の初期化をしないことにした」と言うアナウンスがあったが、これは裏を返せば「game実行時に普通の変数は初期化します」と言う意味でもあったのだ。
残念ながら、defineresetを使って望んだような動きを得ることはできないようだ。
バッチファイル
色々と試した結果。
winexecを叩いてみると言う提案でしたが、ばっちりでした。
xxx.batファイルを作り、そこにMS-DOSプロンプトでスクリプトを記述します。記述方法自体はWebに転がっているのでいちいち説明をしませんが、環境変数を当たり前に使えるのでなんとも便利です。
winexec "xxx.bat",0
とすれば、セーブディレクトリを環境変数を使って作成することができます。ただし、作成したディレクトリのフルパスを取得することはできないので、NScripter内部で作れるものでなければならないでしょう。一番簡単なのは、以下の構成でしょう。
define節中
winexec "xxx.bat",0 getreg $0,"Volatile Environment","APPDATA" add $0,"\NScr\higurasi"
xxx.batの中身
@echo off if not exist "%APPDATA%\NScr\higurasi" mkdir "%APPDATA%\NScr\higurasi"
続き
ここまではいいんです。ここまではいいんですが……私は大事なことを失念しておりました。
実は、savedirはカレントディレクトリ以下しか受け付けないのです。
savedir "sample" →nscr.exeと同じディレクトリになるsampleディレクトリ
savedir "./sample" →同上
savedir "../sample" →無効
savedir "C:\...." →無効
となっているのです。
結局、一番最初の前提が間違っていることがわかりました。
もうディスクだけの起動はセーブ・ロードを諦めろと言うことですね。
はー、寝よ寝よ。
皆さん、お疲れ様でした。おやすみなさい。
バッチファイル
色々と試した結果。
winexecを叩いてみると言う提案でしたが、ばっちりでした。
xxx.batファイルを作り、そこにMS-DOSプロンプトでスクリプトを記述します。記述方法自体はWebに転がっているのでいちいち説明をしませんが、環境変数を当たり前に使えるのでなんとも便利です。
winexec "xxx.bat",0
とすれば、セーブディレクトリを環境変数を使って作成することができます。ただし、作成したディレクトリのフルパスを取得することはできないので、NScripter内部で作れるものでなければならないでしょう。一番簡単なのは、以下の構成でしょう。
define節中
winexec "xxx.bat",0 getreg $0,"Volatile Environment","APPDATA" add $0,"\NScr\higurasi"
xxx.batの中身
@echo off if not exist "%APPDATA%\NScr\higurasi" mkdir "%APPDATA%\NScr\higurasi"
続き
ここまではいいんです。ここまではいいんですが……私は大事なことを失念しておりました。
実は、savedirはカレントディレクトリ以下しか受け付けないのです。
savedir "sample" →nscr.exeと同じディレクトリになるsampleディレクトリ
savedir "./sample" →同上
savedir "../sample" →無効
savedir "C:\...." →無効
となっているのです。
結局、一番最初の前提が間違っていることがわかりました。
もうディスクだけの起動はセーブ・ロードを諦めろと言うことですね。
はー、寝よ寝よ。
皆さん、お疲れ様でした。おやすみなさい。
さらなる未練
ファイル移動なし起動への未練 - 永字八法の続き。
コメントでさらに示唆をいただいたので試してみる。
defineresetを使用するとどうだろうと言う提案である。
これは、いったんstart節に突入してセーブ場所を調べるなり確保するなりしてからもう一度defineresetで最初から読み込み、その時、変数に保持していたセーブ場所をsavedirに読ませるのはどうだろう、と言う提案だと理解した。(まちがっていたら容赦なくつっこんでくださいませ>ピト様)
で、試しに以下のスクリプトを組んで動かしてみた。
*define itoa $0,%0 mesbox $0,"" game *start itoa $0,%0 mesbox $0,"" rnd2 %0,1,100 itoa $0,%0 mesbox $0,"" 終了しますか? select "はい",*exit,"いいえ",*resume *exit end *resume definereset
で、これを動かすとわかるのだが、変数は起動時と、gameコマンド実行時に一度初期化されてしまう仕様なのだ。従って、defineresetをした時点で、変数に取っておいたディレクトリ名は初期化されてしまう。
以前、NScripterのバージョンアップの際に「game実行時に配列変数の初期化をしないことにした」と言うアナウンスがあったが、これは裏を返せば「game実行時に普通の変数は初期化します」と言う意味でもあったのだ。
残念ながら、defineresetを使って望んだような動きを得ることはできないようだ。
バッチファイル
色々と試した結果。
winexecを叩いてみると言う提案でしたが、ばっちりでした。
xxx.batファイルを作り、そこにMS-DOSプロンプトでスクリプトを記述します。記述方法自体はWebに転がっているのでいちいち説明をしませんが、環境変数を当たり前に使えるのでなんとも便利です。
winexec "xxx.bat",0
とすれば、セーブディレクトリを環境変数を使って作成することができます。ただし、作成したディレクトリのフルパスを取得することはできないので、NScripter内部で作れるものでなければならないでしょう。一番簡単なのは、以下の構成でしょう。
define節中
winexec "xxx.bat",0 getreg $0,"Volatile Environment","APPDATA" add $0,"\NScr\higurasi"
xxx.batの中身
@echo off if not exist "%APPDATA%\NScr\higurasi" mkdir "%APPDATA%\NScr\higurasi"
続き
ここまではいいんです。ここまではいいんですが……私は大事なことを失念しておりました。
実は、savedirはカレントディレクトリ以下しか受け付けないのです。
savedir "sample" →nscr.exeと同じディレクトリになるsampleディレクトリ
savedir "./sample" →同上
savedir "../sample" →無効
savedir "C:\...." →無効
となっているのです。
結局、一番最初の前提が間違っていることがわかりました。
もうディスクだけの起動はセーブ・ロードを諦めろと言うことですね。
はー、寝よ寝よ。
皆さん、お疲れ様でした。おやすみなさい。
さらなる未練
ファイル移動なし起動への未練 - 永字八法の続き。
コメントでさらに示唆をいただいたので試してみる。
defineresetを使用するとどうだろうと言う提案である。
これは、いったんstart節に突入してセーブ場所を調べるなり確保するなりしてからもう一度defineresetで最初から読み込み、その時、変数に保持していたセーブ場所をsavedirに読ませるのはどうだろう、と言う提案だと理解した。(まちがっていたら容赦なくつっこんでくださいませ>ピト様)
で、試しに以下のスクリプトを組んで動かしてみた。
*define itoa $0,%0 mesbox $0,"" game *start itoa $0,%0 mesbox $0,"" rnd2 %0,1,100 itoa $0,%0 mesbox $0,"" 終了しますか? select "はい",*exit,"いいえ",*resume *exit end *resume definereset
で、これを動かすとわかるのだが、変数は起動時と、gameコマンド実行時に一度初期化されてしまう仕様なのだ。従って、defineresetをした時点で、変数に取っておいたディレクトリ名は初期化されてしまう。
以前、NScripterのバージョンアップの際に「game実行時に配列変数の初期化をしないことにした」と言うアナウンスがあったが、これは裏を返せば「game実行時に普通の変数は初期化します」と言う意味でもあったのだ。
残念ながら、defineresetを使って望んだような動きを得ることはできないようだ。