スクリプトで自動的に待機させる

スクリプトで待機メニューを表示して、勝手に待機時間を決定して、勝手に待機ボタンを押す方法。
もっとエレガントな方法がありそうなんですが、この方法しか思いつきませんでした。
また、色々と変な暗黙の了解というか罠があり、試行錯誤の末にできたものです。

クエストスクリプトとして作成。

ScriptName なんかてきとーなの

float fQuestDelayTime
short state
float timer

begin GameMode
  let fQuestDelayTime := 0.1
  let state := 0
  if OnKeyDown 78 ;テンキーの+
    let state := 1
    let timer := 6.0 ;待機するゲーム内時間
    TapControl 16
  endif
end

begin MenuMode 1012
  if state == 2 || state == 3
    float parent_w
    float marker_w
    float min
    float range
    float marker_x
    let parent_w := GetMenuFloatValue "sleep_background\sleep_scroll\width" 1012
    let marker_w := GetMenuFloatValue "sleep_background\sleep_scroll\horizontal_scroll_marker\width" 1012
    let min := GetMenuFloatValue "sleep_background\sleep_scroll\user1" 1012
    let range := GetMenuFloatValue "sleep_background\sleep_scroll\_scrollable_range" 1012
    let marker_x := (parent_w - marker_w) * (timer - min) / range
    SetMenuFloatValue "sleep_background\sleep_scroll\horizontal_scroll_marker\x" 1012 marker_x
    SetMenuFloatValue "sleep_background\sleep_scroll\user7" 1012 timer
    SetMenuStringValue "sleep_background\rest_time_text\string|%.0f" timer 1012
  endif
  if state == 1
    ClickMenuButton "sleep_background\sleep_button_sleep_wait" 1012
    let state := 2
  elseif state == 2 && IsTimePassing
    let timer -= GetSecondsPassed
    if timer < 0
      let timer := 0
    endif
  endif
end

テンキーの+キーを押したら、スクリプトで待機メニューを表示(TapControl 16)して、指定した待機時間が勝手に設定され、勝手に待機ボタンが押され(ClickMenuButton)ます。

SetMenuFloatButtonで待機メニューにあるスクロールバーの情報を色々設定するんですが、機能として重要なのは sleep_background\sleep_scroll\user7 のみで、後は見た目に影響するだけです。
スクロールバーボタンの位置がおかしくても、待機時間の表示テキストがおかしくても、前述の設定さえしておけば、きっちり設定した時間分の待機はしてくれます。

fQuestDelayTimeに設定した時間間隔で待機メニューのスクロールバーボタンが動きます。
サンプルだと0.1秒毎に残りの待機時間を調べて、スクロールバーボタンの位置を適切な位置に変更しています。
見た目に関しては、ひとつ改良の余地があります。
待機メニューにはゲーム内の時刻が表示されていますが、この時刻が変わるタイミングと、残り待機時間が更新されるタイミングがちょっとズレています。
長い時間待機するほど、このズレが大きくなります。
気になるなら、このタイミングの調整が必要です。

通常では、待機時間を決定して待機ボタンを押すと、残りの待機時間を表すスクロールバーボタンが1秒ごとに←に動いて行きます。
ゲーム起動後の初回の待機メニューだと、何故かスクロールバーボタンが動いてくれません。
二回目以降は問題なく動きます。
仕方がないので、スクリプトで強制的に位置を変えています。

敵が近くにいると待機できないのと、敵が近づくと待機状態が解除されます。
そこは通常の待機メニューと同じです。

気になっている点がふたつあります。

1つは、Vanillaのものではなく、独自のHUD(Darkなんとかかんとか等)を使っている場合にきちんと動くか?という点。
もう1つは、待機時間を設定するスクロールバーの1メモリあたりの変化量を調整するようなMODを使っている場合にきちんと動くか?という点です。
例えば、Vanillaだと最大でも24時間しか待機できませんが、一度に1000時間まで待機できて、5時間ずつしか調整できないというようなケース。
 


この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。