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
протокол ультимы поддерживает пинг-понг, но из трех эмуляторов поддерживает его только один.
увы.