Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Как сделать таймаут для Move

тут можно задать вопрос по скриптингу
Antisiy
Posts: 9
Joined: 19.10.2010 21:53

Как сделать таймаут для Move

Post by Antisiy »

Если не может дойти до точки столько-то, что бы делал то-то?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

помедленнее, я записываю...
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antisiy
Posts: 9
Joined: 19.10.2010 21:53

Post by Antisiy »

if чел moveXY уже 10 секунд then beep
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

а никак. получай массив точек пути через GetPathArray, и пишешь такую ходилку, какую тебе захочется - с проверками любыми и прочим.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Antisiy
Posts: 9
Joined: 19.10.2010 21:53

Post 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;
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

так что писать тогда, если она уже готова? :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Перед началом движения запомни текущее время. Потом в основном цике ходилки проверяешь прошо нужное кол-во времени или нет.
В делфаке время - цисло с плавающей точкой. Кол-во дней в целой части, всё что меньше - в дробной. OldTime - Now возвратит кол-во дней, прошедших с OldTime. Чтобы получить кол-во часов нужно поделить полученое значение на 24, минут - поделить на (24*60) и так далее.
Last edited by Fenix on 29.10.2010 10:03, edited 1 time in total.
Antisiy
Posts: 9
Joined: 19.10.2010 21:53

Post by Antisiy »

...
Last edited by Antisiy on 29.10.2010 10:44, edited 2 times in total.
Antisiy
Posts: 9
Joined: 19.10.2010 21:53

Post by Antisiy »

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

Всем спасибо, ивентами бы как-нибудь.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

нуууу.
я могу придумать что-то такое, для прерывания ходилки из ивента, но имхо это уже костыли натуральнейшие...
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Savage
Neophyte
Neophyte
Posts: 18
Joined: 27.09.2010 5:57
Contact:

Post by Savage »

Может лучше реализовать прерывание в самой ходилке если она не может сделать шаг с некоторой попытки? Пусть возвращает флаг успешно или фэйл.
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Savage wrote:Может лучше реализовать прерывание в самой ходилке если она не может сделать шаг с некоторой попытки? Пусть возвращает флаг успешно или фэйл.
А мне кажется, что так оно и есть:

Code: Select all

function MoveXY(Xdst, Ydst : Word; Optimized : Boolean; Accuracy : Integer; Running : Boolean) : Boolean
Antisiy
Posts: 9
Joined: 19.10.2010 21:53

Post by Antisiy »

Вообще зачет, я как-то не додумался.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

выходит он из мувера, если не может получить путь до цели. при этом возвращается false.
А так вообще он 3 раза тыкнется в препятствие, его отбросит, он пометит точку как непроходимую, попробует заново маршрут найти и так по кругу.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Savage
Neophyte
Neophyte
Posts: 18
Joined: 27.09.2010 5:57
Contact:

Post by Savage »

Вот в чем загвоздка оказывается. ТК не описал проблему полностью. У него чар двигается на скрипте, в момент движения злоумышленник обкладывает чара сеном. В итоге ходилка циклится изза своей внутренней организации.
Post Reply