Page 1 of 2
Как сделать таймаут для Move
Posted: 28.10.2010 20:33
by Antisiy
Если не может дойти до точки столько-то, что бы делал то-то?
Posted: 28.10.2010 23:20
by Vizit0r
помедленнее, я записываю...
Posted: 29.10.2010 8:09
by Antisiy
if чел moveXY уже 10 секунд then beep
Posted: 29.10.2010 8:23
by Vizit0r
а никак. получай массив точек пути через GetPathArray, и пишешь такую ходилку, какую тебе захочется - с проверками любыми и прочим.
Posted: 29.10.2010 9:27
by Antisiy
Ивентами точно никак? Жаль конечно, так не хочется ходилку писать, а через массив я все равно встроеной хожу типа этого =)
Code: Select all
rpatch := GetPathArray(1444, 1688, false, 0, MovePathArray);
For i := 0 to rpatch-1 do
begin
movetimeout:= 0;
repeat
MoveXY(MovePathArray[i].x,MovePathArray[i].y,false,0,false);
wait(100);
movetimeout:= movetimeout + 1;
until (GetX(self) = MovePathArray[i].x) and (GetY(self) = MovePathArray[i].y) or (movetimeout > 99)
end;
Posted: 29.10.2010 9:36
by Vizit0r
так что писать тогда, если она уже готова?

Posted: 29.10.2010 9:55
by Fenix
Перед началом движения запомни текущее время. Потом в основном цике ходилки проверяешь прошо нужное кол-во времени или нет.
В делфаке время - цисло с плавающей точкой. Кол-во дней в целой части, всё что меньше - в дробной. OldTime - Now возвратит кол-во дней, прошедших с OldTime. Чтобы получить кол-во часов нужно поделить полученое значение на 24, минут - поделить на (24*60) и так далее.
Posted: 29.10.2010 10:01
by Antisiy
...
Posted: 29.10.2010 10:05
by Antisiy
Vizit0r wrote:так что писать тогда, если она уже готова?

Не единственно кривым способом же люди это делают.
Fenix wrote:Перед начало движения запомни текущее время. Потом в основном цике ходилки проверяешь прошо нужное кол-во времени или нет.
В делфаке время - цисло с плавающей точкой. Кол-во дней в целой части, всё что меньше - в дробной. OldTime - Now возвратит кол-во дней, прошедших с OldTime. Чтобы получить кол-во часов нужно поделить полученое значение на 24, минут - поделить на (24*60) и так далее.
Так и будет наверное в итоге, только мне через юникстайм секундами проще таймштампы делать.
Всем спасибо, ивентами бы как-нибудь.
Posted: 29.10.2010 10:10
by Vizit0r
нуууу.
я могу придумать что-то такое, для прерывания ходилки из ивента, но имхо это уже костыли натуральнейшие...
Posted: 29.10.2010 11:23
by Savage
Может лучше реализовать прерывание в самой ходилке если она не может сделать шаг с некоторой попытки? Пусть возвращает флаг успешно или фэйл.
Posted: 29.10.2010 11:25
by Fenix
Savage wrote:Может лучше реализовать прерывание в самой ходилке если она не может сделать шаг с некоторой попытки? Пусть возвращает флаг успешно или фэйл.
А мне кажется, что так оно и есть:
Code: Select all
function MoveXY(Xdst, Ydst : Word; Optimized : Boolean; Accuracy : Integer; Running : Boolean) : Boolean
Posted: 29.10.2010 12:01
by Antisiy
Вообще зачет, я как-то не додумался.
Posted: 29.10.2010 12:06
by Vizit0r
выходит он из мувера, если не может получить путь до цели. при этом возвращается false.
А так вообще он 3 раза тыкнется в препятствие, его отбросит, он пометит точку как непроходимую, попробует заново маршрут найти и так по кругу.
Posted: 29.10.2010 13:23
by Savage
Вот в чем загвоздка оказывается. ТК не описал проблему полностью. У него чар двигается на скрипте, в момент движения злоумышленник обкладывает чара сеном. В итоге ходилка циклится изза своей внутренней организации.