Page 1 of 2
Animal Lore / Анимал Лоре (шард: Короли Махаона / uolife.ru)
Posted: 27.04.2010 13:00
by pickwill
При использовании скила Animal Lore / Анимал Лоре, выскакивает гамп информации о животном без каких либо кнопок. Закрывается который либо кликом правой кнопкой мыши, либо в нашем случае
CloseSimpleGump'ом.
Code: Select all
Program AnimalLore;
var
b : TStringList;
i : Integer;
Begin
b := TStringList.Create;
while true do
begin
UseSkill('Animal Lore');
WaitTargetObject($00079662); //ID любой рядом стоящей живности
wait(2000);
for i := 0 to GetGumpsCount - 1 do
begin
CloseSimpleGump(i);
end;
end;
End.
Posted: 27.04.2010 13:38
by Zeppelin
СтрингЛист не нужен, и wait(2000) - не очень, нужно ждать появляния гампа, или строки журнала. fail
Re: Animal Lore / Анимал Лоре (шард: Короли Махаона / uolife
Posted: 27.04.2010 13:48
by Zeppelin
Posted: 27.04.2010 15:44
by pickwill
Изящно конечно, но не работает.
Code: Select all
while GetGumpsCount > 0 do CloseSimpleGump;
потому что у
CloseSimpleGump есть ещё параметр
GumpIndex
и ждать, если открыт гамп, в качестве паузы между юзами скила, тоже не годиться, т.к. гамп сразу закрывается, а пауза до следующего гампа 2 секунды:
Code: Select all
repeat
wait(50);
until (InJournal(WaitLine)<>-1) or (IsGump)
но с учётом небольших исправлений имеем следующий вид:
Code: Select all
Program AnimalLore;
{$Include 'all.inc'}
var
i :integer;
const
Animal = $00079662; //ID животного
begin
while GetSkillValue('Animal Lore') < 100 do
begin
UseSkill('Animal Lore');
WaitTargetObject(Animal);
for i := 0 to GetGumpsCount - 1 do
begin
CloseSimpleGump(i);
end;
wait(1000);
end;
end.
Posted: 27.04.2010 16:01
by Vizit0r
зачем закрывать(точнее, пытаться закрыть) каждый раз ВСЕ гампы?
просто и удобно:
Code: Select all
a := GetGumpsCount;
while a = GetGumpsCount do wait(50);
CloseSimpleGump(a+1);
это чисто демонстрационный образец, допиливания на таймауты ожидания гампа и прочее - обязательны
Posted: 27.04.2010 16:13
by Zeppelin
Насчет паузы, видимо специфика шарда (именно!), а у КлоузГампов забыл про параметр, на скорую руку набрасал. На тех шардах, где я играл, выходит (можно как Visitor написал, но по сути, в большинстве случаев безразлично):
pickwill, а почему с задержкой проблемы? Такой вариант всегда был наилучшим. То есть, после появления гампа нужно еще две секунды ждать, а потом только заново применять скилл? Я просто не очень понял в чем там проблема =)
Posted: 27.04.2010 16:38
by pickwill
Проблема в гампе, когда он открыт - скил повторно не юзается, т.е. нужно принудительно его закрыть сперва для продолжения нормальной работы скрипта.
Code: Select all
repeat
wait(50);
until (InJournal(WaitLine)<>-1) or (IsGump)
Гамп появился, мы его закрыли, дальше у нас стоит проверка с паузой на предмет есть ли гамп или нет, а т.к. гампа уже нет, то блок с repeat/until проскакивает сразу с первого-же прохода и пытается дальше использовать скил, но у скила то интервал использования две секунды...
Posted: 27.04.2010 17:00
by Zeppelin
Нет, как же так, смотри в моем примере - сначала закрываются все гампы, потом юзается скилл, и соответственно, ждем появления гампа, и сначала.. На момент применения скила все гампы закрыты, и вообще блок должен ждать появления гампа, а не проскакивать, если его нет =)
Posted: 27.04.2010 17:04
by Zeppelin
А, забыл ClearJournal. Видимо он все и путал.
Posted: 27.04.2010 17:28
by Gauhar
Господа, в первом посте не было вопроса. Это же рабочий скрипт для шарда Махаон, такая там специфика.
П.С. Моя затычка на такие гампы:
Code: Select all
Procedure CloseGumps;
var k : Integer;
begin
if IsGump then
begin
for k:=(GetGumpsCount-1) downto 0 do
begin
CloseSimpleGump(k);
end;
end;
end;
Алгоритм использования подобных навыков простой:
используем навык
пауза
закрываем гамп, если есть.
И никаких хитростей.
Posted: 27.04.2010 17:42
by Zeppelin
Мы обсуждаем, пытаемся улучшить. =)
Вот, я откопал наконец свои скрипты - там было такое решение для закрытия всех гампов без переменных: =))
Вот это будет полезно:
Code: Select all
while (GetGumpsCount > 0) do CloseSimpleGump(0);
Соответственно получается:
Posted: 27.04.2010 18:17
by pickwill
Получается - мы закрыли гамп, использовали скил инициировав т.о. появление нового гампа, и... зависли в ожидании когда гамп исчезнет.
Posted: 27.04.2010 18:22
by Zeppelin
pickwill wrote:Получается - мы закрыли гамп, использовали скил инициировав т.о. появление нового гампа, и... зависли в ожидании когда гамп исчезнет.
Нет, он выходит из цикла, когда появляется гамп (IsGump).
Posted: 27.04.2010 18:57
by pickwill
Тогда, он выходит из цикла когда появляется гамп, т.е. ровно через Wait(50)?
Posted: 27.04.2010 19:05
by Zeppelin
Ну если гамп появляется сразу после применения скила, то да. У вас он там сразу появляется?) Обычно как происходит:
1. Юзается скилл
2. Проходит время (2-3 секунды) (которые как раз ждет тот цикл, с высокой точностью).
3. Появляется гамп или сообщение о неудаче.
4. Тот цикл это видит и выходит из ожидания.
Я не понимаю, в чем проблема =)