Перейти к статье
NeuraCoreВики пользователя
← Назад к главе
Встроенный Python

Десять сценариев, и какие из них выполняются

У одного аватара может быть десять сценариев. У каждого есть название и номер, своё окно вывода, и каждый может запускаться сам.

Выбор того, на что вы смотрите

Выпадающий список вверху Python Runner содержит все сценарии этого аватара. Выбор одного показывает его код и его вывод и не меняет больше ничего: каждый другой выполняющийся сценарий продолжает работать и собирать свой вывод, пока вы смотрите на этот.

Добавить сценарий создаёт новый из шаблона. Удалить убирает тот, что на экране, и сначала спрашивает, потому что код уйдёт вместе с ним.

Названия и номера

У каждого сценария есть название, которое выбираете вы, и номер, который даёт NeuraCore. Название для вас, а номер используют команды и журнал.

Номер никогда не достаётся второму сценарию. Удалите сценарий 2, и следующий добавленный будет 4, а не 2: номера, сдвигающиеся после удаления, привели бы к тому, что команда запуска сценария 4 однажды запустила бы другой, и ничто об этом не сообщило бы.

Приоритет запуска

Приоритет решает порядок, когда несколько сценариев запускаются в один и тот же момент: меньший номер первым. Когда запускается один, он не делает ничего.

Дальше они работают рядом. Приоритет это порядок запуска, а не очередь: сценарий, циклящийся бесконечно, не задерживает следующие.

Запуск без вас

Отметьте «запускать автоматически, как только аватар в сети», и этот сценарий будет стартовать сам при каждом подключении этого аватара, в порядке приоритета вместе с другими отмеченными. Изначально она снята у всех сценариев.

Другая половина правила: каждый выполняющийся сценарий останавливается, когда его аватар выходит из сети. Сценарий, чей аватар ушёл, может лишь получать отказы, и если оставить его, история выполнения заполнится никому не нужными неудачами.

Запуск и остановка

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, потому что запуск сценария это не одна возможность, а все, до которых дотягиваются его строки. Включите её, когда хотите, чтобы сценарии, ИИ или личное сообщение могли запустить сценарий.

Запуск личным сообщением

Master может отправить run и номер или название сценария, и kill так же. Аватар отвечает, запустил ли он его, выполнялся ли он уже, остановил ли его или он не выполнялся.

Разрешённый житель может то же самое, но только для сценария, у которого отмечено «разрешённые жители могут запускать его в личном сообщении». Изначально она снята у всех, и так стоит оставить всё, от чего вы не дали бы ключи: сценарий это не одно действие, а всё, что делают его строки.