♊ Асинхронные действия
- Как работает 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