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