Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Проверка на смерть и перезапуск скрипта

Рег
8 Дек 2015
Сообщения
191
Реакции
0
Добрый день.
Обычно в своих скриптах все проверку на смерть

while not user.dead do

кидают в поток основного скрипта. Мне кажется это немножко неправильно. Например, если в скрипте будут циклы и если в эти циклы не втыкнуть проверку на смерть, то цикл может просто зациклиться, если в момент его выполнения вашего персонажа убьют. Тогда он не улетит в город и кач остановится. Либо же персонаж бежит куда-то далеко, а его убивают в самом начале пути. В этом случае адрик отправит вашего перса в город с очень большим запозданием.
Чтобы такого небыло, предлагаю запускать проверку на смерть другим потоком

Procedure ControlDead;
begin
while not user.dead do
delay(10000);
Script.Suspend;
Engine.FaceControl(0,false);
delay(random(3000));
Engine.gohome;
Print('Убили негра');
delay(5000);
Script.Replace;
end;

begin
script.newthread(@ControlDead);
end;

Данная процедура через каждые 10 секунд проверяет, жив или нет персонаж, и если мертв - останавливает выполнение скрипта, возвращает перса в город и перезапускает основной скрипт.
 
@savant, Хорошая вещь, тогда при написании скрипта с использованием этой процедуры нужно правильно строить тело скрипта таким образом чтобы при выполнении процедуры и перезапуске основного скрипта Бот понимал с какого места ему начинать действия. Я так понимаю чаще всего используют условие if User.inrange ...
 
@XoXoJl, конечно. Я все свои скрипты на кач запускаю из города, где персонаж определяет свое местоположение и бежит бафаться.
 
Я от такого метода отказался, и вставлял процедуру CheckDeath(так я ее обозвал) в начало каждой итерации цикла с качем. Не помню уже, но когда смерть проверялась отдельным потоком, я столкнулся с проблемой. Как вспомню - отпишу :)
Хотя да, у меня не было перезапуска скрипта. Наверное, это решило бы проблему.
 
@SARCAZM, у меня все нормально работает :) Сделал проверку отдельным потоком, т.к. скрипты уже превышают 500 строк и стало трудновато описывать все ситуации, где персонаж может умереть.

Если у кого не работает script.replace - попробуйте явно указать путь до текущего скрипта
Код:
Script.Replace(Script.Path + 'Katy_50-60.txt');
 
Подскажите в чем проблема, после Script.Suspend у меня полностью скрипт останавливает и следующий шаг выключение Engine.FaceControl(0,false) не происходит...
 
Назад
Сверху