記事へ移動
NeuraCoreユーザーWiki
← この章に戻る
組み込み Python

10 本のスクリプトと、どれが実行中か

1 体のアバターは 10 本のスクリプトを持てます。それぞれに名前と番号があり、それぞれに出力欄があり、それぞれを自動で開始させられます。

どれを見るかを選ぶ

Python Runner の一番上のドロップダウンに、このアバターのスクリプトがすべて並びます。選ぶとそのコードと出力が表示され、それ以外は何も変わりません。他の実行中のスクリプトはそのまま実行を続け、自分の出力を集め続けます。

スクリプトを追加するとひな形から 1 本作られます。削除は表示中のものを消しますが、コードも一緒に失われるため先に確認します。

名前と番号

スクリプトにはあなたが付ける名前と、NeuraCore が与える番号があります。名前はあなたのためのもので、番号はコマンドや履歴が使います。

番号が別のスクリプトに使い回されることはありません。スクリプト 2 を削除しても、次に追加されるのは 2 ではなく 4 です。削除のあとに番号が繰り上がると、スクリプト 4 を実行するコマンドがある日から別のスクリプトを開始してしまい、それを知らせるものが何もないからです。

開始の優先度

優先度は、複数のスクリプトが同じ瞬間に開始するときの順序を決めます。番号が小さいものからです。1 本だけのときは何もしません。

その後は並行して実行されます。優先度は開始の順序であって待ち行列ではないので、終わらないループのスクリプトが後ろを待たせることはありません。

自動で開始する

「アバターがオンラインになったら自動的に開始する」にチェックを入れると、そのアバターが接続するたびに、チェック済みの他のスクリプトと優先度順で自動に開始します。初期状態ではどのスクリプトもオフです。

もう一方の側面として、アバターがオフラインになると実行中のスクリプトはすべて停止します。アバターがいないスクリプトは拒否されるだけで、動かし続けても実行履歴が無駄な失敗で埋まるだけだからです。

実行と停止

Run は表示中のスクリプトを開始し、Stop は終了させます。すでに実行中のスクリプトは二重に開始せずそのままにされるので、Run をもう一度押しても安全で、何も起きません。

Stop は待機中のスクリプトにもループ中のスクリプトにも届き、その場で中断させます。きれいに終えたければ、スクリプト側に確認させましょう。

import time

while not avatar.stop_requested():
    for person in avatar.get_nearby_avatars():
        print(person["name"])
    time.sleep(30)

print("Asked to stop, so stopping.")
  • stop_requested は、このスクリプトの停止が要求された時点で真を返します。
  • ループの毎回確認すれば、あなたが選んだ場所でスクリプトを終えられます。
  • 確認しないスクリプトも結局は停止されます。これは場所を決めるだけです。

スクリプトから一覧を読む

スクリプトはドロップダウンと同じ一覧を見られます。

for script in avatar.list_scripts():
    print(script["id"], script["name"], script["priority"], script["running"])
  • 各項目には、番号、名前、優先度、自動で開始するか、いま実行中かどうかが入っています。

スクリプトが別のスクリプトを開始する

スクリプトは他のスクリプトを番号または名前で開始し、停止できます。

print(avatar.run_script("Greeter"))
print(avatar.kill_script(2))
  • run_script は started または already_running を返します。後者はエラーではなく、そのままの意味です。
  • kill_script は killed または not_running を返します。
  • Run Script は Action Permissions で初期状態では無効です。スクリプトの開始は 1 つの機能ではなく、その行が到達するすべての機能だからです。スクリプトや AI、IM から開始できるようにしたいときに有効にしてください。

IM で開始する

Master は run にスクリプトの番号または名前を続けて送れます。kill も同じです。アバターは、開始したのか、すでに実行中だったのか、停止したのか、実行されていなかったのかを答えます。

許可された住人も同じことができますが、「許可された住人が IM で実行できる」にチェックのあるスクリプトに限られます。初期状態ではどのスクリプトも空で、鍵を渡したくないものはそのままにしておくのが良いでしょう。スクリプトは 1 つの操作ではなく、その行がすることすべてだからです。