PDA

Просмотр полной версии : Несколько вопросов по коду


kkim
19.03.2011, 02:13
Я ни в misc.pl ни в utils.pl не нашел описания функции timeOut.
Что она делает(я так понимаю возвращает faulse пока не прошло N секунд, где N - какой-то из аргументов)?
Почему в конце обычно используется такая хрень:

$timeout{ai_teleport_retry}{time} = time;

Можно обьяснить на примере такого куска?

if (!$timeout{ai_teleport_delay}{time} && timeOut($timeout
{ai_teleport_retry}))
{
# тут что-нибудь поделать
$timeout{ai_teleport_retry}{time} = time;
}

Например в конце processItemsAutoGather стоит
$timeout{ai_items_gather_auto}{time} = time;
Но даже если выставить 20 секунд в timeouts.txt по этому ключу ничего не меняется. clientSuspend же нормально все тормозит.
Еще вопрос. В том же processItemsAutoGather() лут в @itemsID лежит в случайном порядке и соответственно абы как из этого массива извлекается.В каком-нибудь оркданже бот берет 1 лутину потом чешет за 5 клеток ко второй и снова возвращается собирать барахло на старое место. Как отсортировать этот массив по дистанции как например в getBestTarget() для processAutoAttack()?
Perl-а не знаю тупо по аналогии вляпал такую хрень:
@sorted = sort{ round(distance($myPos,calcPosition($a))) cmp round(distance($myPos,calcPosition($a)))} @itemsID;
Естественно она не работает.Как сделать такую штуку?

manticora
19.03.2011, 16:39
Вот же написано, что такое функция timeOut: openkore\src\Utils.pm.

##
# timeOut(r_time, [timeout])
# r_time: a time value, or a hash.
# timeout: the timeout value to use if $r_time is a time value.
# Returns: a boolean.
...

Дальше расписывается, как предполагается этой функцией пользоваться. Что принимает и что возвращает. Приведены два примера. В самом конце комментария сказано, откуда эта функция берётся:

# timeOut() is implemented in tools/misc/fastutils.xs


Еще вопрос. В том же processItemsAutoGather() лут в @itemsID лежит в случайном порядке и соответственно абы как из этого массива извлекается.В каком-нибудь оркданже бот берет 1 лутину потом чешет за 5 клеток ко второй и снова возвращается собирать барахло на старое место. Как отсортировать этот массив по дистанции как например в getBestTarget() для processAutoAttack()?
Тупо сортировка массива по такому параметру как "удалённость лежащего лута от персонажа" мало что даст. Например, что будет, если положить слева и справа две кучки лута? А если эти кучки растащить равномерно в разные стороны?