Page 1 of 1

Вопрос по работе с гампами!

Posted: 30.10.2013 0:54
by VeL
Вызываю после нажатия кнопки в гампе:

Code: Select all

function WaitForGump(const WaitMs: Cardinal): Boolean;
begin
  Result := CheckLag(WaitMs);
  if Result then  
    GetGumpInfo(GumpIndex, GumpInfo);
end;
Может здесь получиться так, что пакет с гампом придет после того как сработает чеклаг? А то я заметил например, если юзнуть контейнер, затем кликнуть по нему, то иногда сообщение в журнал приходит раньше чем открывается контейнер...

Или можно как то по другому отследить, что кнопка уже нажалась?

Re: Вопрос по работе с гампами!

Posted: 30.10.2013 2:50
by Vizit0r
жуткий изврат.

почему не ждать гампа с опр. гампид? можно через ивент, можно просто проверяя регулярно состояние гамплиста.

Re: Вопрос по работе с гампами!

Posted: 30.10.2013 6:38
by shinma
да можно ждать гамп ид. у меня в приме
http://stealth.od.ua/forum/viewtopic.php?f=3&t=2591
есть пример как.

но одно но там писец постоянно сыпят новые ид хотя гамп вроде один и тот же. ну я потихоньку добавляю список этими злосчастными гампами.
а вообще если думаешь что гамп выскочит раньше поставь банальную

wait()

против лома нет приема.

Code: Select all

procedure CloseGamp;
var
g:integer;
begin
AddToSystemJournal('CloseGamp') ;
    for g:=0 to  GetGumpsCount-1 do
        begin       
        if (GetGumpID(g) = $0326)  then
            begin 
                NumGumpButton(g,5);
                wait(500); 
                 NumGumpButton(g,0);
              //  AddToSystemJournal('ok') ;
            end;
        if (GetGumpID(g) = $FF3D ) or (GetGumpID(g) = $0320 )  then   
            begin
                NumGumpButton(g,7); 
                NumGumpButton(g,5);
                 //AddToSystemJournal('Брать квест') ;
                 wait(500);
            end
            else
           //  AddToSystemJournal('не дали квест') ;
        if (GetGumpID(g) = $E5DC) or (GetGumpID(g) =  $FF93) then   
            begin
            NumGumpButton(g,7);
            NumGumpButton(g,5);                 
          //  AddToSystemJournal('Check') ;
            end;
        //else 
          //  AddToSystemJournal('No Check') ;
        end;
        wait(500); 
        for g:=0 to  GetGumpsCount-1 do
        CloseSimpleGump(g);
end;

Re: Вопрос по работе с гампами!

Posted: 30.10.2013 10:40
by VeL
Vizit0r wrote:жуткий изврат.

почему не ждать гампа с опр. гампид? можно через ивент, можно просто проверяя регулярно состояние гамплиста.
Serial и ID гампов часто одинаковые, можно конечно работать с гамп листом, но тогда точно получится изврат)))

Решил через ивент, получилось так:

Code: Select all

var 
  ComeGump      : Boolean;

procedure OnIncomingGump(Serial, GumpID, X, Y: Cardinal);
begin
  ComeGump := True;
end;
  
function WaitForGump(const TimeoutMs: Word): Boolean;
var
  EndTime       : tDateTime;
begin
  ComeGump := False;
  EndTime := Now + MsToDateTime(TimeoutMs);

  SetEventProc(evIncomingGump, 'OnIncomingGump');
  while not ComeGump and (Now <= EndTime) do Wait(100);
  SetEventProc(evIncomingGump, '');
  
  Result := ComeGump;
  if Result then  
    GetGumpInfo(GumpIndex, GumpInfo);
end;
Нехватает инжектовского UO.LastGump('replyed')

Re: Вопрос по работе с гампами!

Posted: 30.10.2013 10:51
by VeL
shinma wrote: wait()
Никогда не использую Wait() для ожидания завершения чего либо...

Re: Вопрос по работе с гампами!

Posted: 30.10.2013 13:14
by Vizit0r
VeL wrote:Нехватает инжектовского UO.LastGump('replyed')
это что такое и что делает? смутное подозрение, что давным-давно есть в стелсе :)

Re: Вопрос по работе с гампами!

Posted: 30.10.2013 18:53
by nah nah
проверялка на гамп =)
if not uo.lastgump('replyed') then аналогично if IsGump():

ну а гампы ожидали обычно так:

Code: Select all

gumpscount = GetGumpsCount()
while gumpscount == GetGumpsCount():
    ...
    open gump
    ...
    CheckLag() или Wait(ping)
ps умел бы стелс актуальный пинг до сервера предоставлять... цены бы не было ;)

Re: Вопрос по работе с гампами!

Posted: 31.10.2013 19:49
by drabadan
про пинг поддержу!
Но функция CheckLag() - это примерно и есть пинг...

Гампы обычно ловил, по строчке текста в нем...
А хотя чем IsGump плох, ведь можно перед ним закрыть все гампы и потом ждать пока появится...

А хотя, про пинг не поддержу... Сервер то может пинговаться вопрос то в отклике в самом клиенте...

Re: Вопрос по работе с гампами!

Posted: 31.10.2013 20:00
by Vizit0r
протокол ультимы поддерживает пинг-понг, но из трех эмуляторов поддерживает его только один.
увы.