♊ Асинхронные действия
- Как работает async{} в целом?
- Простой async
- Расширенный async
async
(или же Асинхронное действие) - Запускает часть скрипта независимо от основной части скрипта.
- Как Вы знаете, весь скрипт работает последовательно (условно, пока НИП не дойдёт до указанных координат, скрипт дальше не продолжит следующие действия). Если же нужно чтобы некоторые участки скрипта работали одновременно, то Вы можете использовать метод
async { ... }
, добавив в фигурных скобках ваши действия, которые будут запущены не зависимо от основной части скрипта.
Схема работы:
Пример правильного использования метода:
async {
npc moveTo { pos(135, 67, 345) }
}
wait { 5.sec }
npc say{"Привет Андрей!"}
НИП начнёт идти к указанной точке, но уже через 5 секунд после начала напишет сообщение в чат и продолжит идти к точке. Если же не использовать в данном случае async { ... }
, то тогда нпс сначала дойдёт до координат, потом подождёт 5 секунд и лишь после этого напишет сообщение в чат.
Примечание: Не рекомендуется делать похожие действия в разных async и основном скрипте. Например, не стоит давать НИПу две задачи, идти к разным точкам одновременно...
Появляется возможность выполнять несколько действий в 1 момент. Можно ставить друг за другом или внутри 1-го ещё парочку.
// Данные действия будут работать в другом потоке
async{
...
}
Создаваемый
async { ... }
можно записать в переменную и в последствии останавливать или продолжать.
val <id> = async{
...
}
Как работает:
- Вы создаёте переменную async и присваиваете ей имя.
- Через имя вы можете:
- Останавливать async ->
<id>.stop()
- Продолжать работу async ->
<id>.resume()
<id>.stop() // Останавливает работу async с именем: id
<id>.resume() // Продолжает работу async с именем: id, после остановки
<id>.join() // Останавливает основную часть скрипта, пока не будет завершён async с именем: id
Примеры
async{ // Запустить простой async
npc moveTo{...}
...
}
// или же
val looks = async{ // Привязать async к переменной и запустить
npc lookAt{...}
...
}
...
look.stop() // Остановить работу привязанного async
...
look.resume() // Восстановить работу привязанного async