さらなる未練

ファイル移動なし起動への未練 - 永字八法の続き。
コメントでさらに示唆をいただいたので試してみる。
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を使って望んだような動きを得ることはできないようだ。

レジストリに差異

えー、ファイル移動なし起動への未練 - 永字八法なんて書いた私ですが。
念のためにマシン変えてレジストリを見たら、こんなのがあった。

  1. HKEY_CURRENT_USER\Volatile Environment\HOMEPATH
  2. HKEY_CURRENT_USER\Volatile Environment\HOMEDRIVE

まさに、%HOMEPATH%と%HOMEDRIVE%を格納しているレジストリなんですが、これってマシンによってあったりなかったりするんでしょうか。どなたか詳しい情報を教えてくださいませ。

バッチファイル

色々と試した結果。
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:\...." →無効
となっているのです。
結局、一番最初の前提が間違っていることがわかりました。
もうディスクだけの起動はセーブ・ロードを諦めろと言うことですね。
はー、寝よ寝よ。
皆さん、お疲れ様でした。おやすみなさい。

レジストリに差異

えー、ファイル移動なし起動への未練 - 永字八法なんて書いた私ですが。
念のためにマシン変えてレジストリを見たら、こんなのがあった。

  1. HKEY_CURRENT_USER\Volatile Environment\HOMEPATH
  2. HKEY_CURRENT_USER\Volatile Environment\HOMEDRIVE

まさに、%HOMEPATH%と%HOMEDRIVE%を格納しているレジストリなんですが、これってマシンによってあったりなかったりするんでしょうか。どなたか詳しい情報を教えてくださいませ。

さらなる未練

ファイル移動なし起動への未練 - 永字八法の続き。
コメントでさらに示唆をいただいたので試してみる。
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:\...." →無効
となっているのです。
結局、一番最初の前提が間違っていることがわかりました。
もうディスクだけの起動はセーブ・ロードを諦めろと言うことですね。
はー、寝よ寝よ。
皆さん、お疲れ様でした。おやすみなさい。

レジストリに差異

えー、ファイル移動なし起動への未練 - 永字八法なんて書いた私ですが。
念のためにマシン変えてレジストリを見たら、こんなのがあった。

  1. HKEY_CURRENT_USER\Volatile Environment\HOMEPATH
  2. HKEY_CURRENT_USER\Volatile Environment\HOMEDRIVE

まさに、%HOMEPATH%と%HOMEDRIVE%を格納しているレジストリなんですが、これってマシンによってあったりなかったりするんでしょうか。どなたか詳しい情報を教えてくださいませ。

さらなる未練

ファイル移動なし起動への未練 - 永字八法の続き。
コメントでさらに示唆をいただいたので試してみる。
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を使って望んだような動きを得ることはできないようだ。