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. Тот цикл это видит и выходит из ожидания.
Я не понимаю, в чем проблема =)