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
Вот так:

Code: Select all

DELETED

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 написал, но по сути, в большинстве случаев безразлично):

Code: Select all

DELETED
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. Видимо он все и путал.

Code: Select all

DELETED

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);
Соответственно получается:

Code: Select all

DELETED

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. Тот цикл это видит и выходит из ожидания.

Я не понимаю, в чем проблема =)