Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

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

тут можно задать вопрос по скриптингу
Post Reply
VeL
Novice
Novice
Posts: 54
Joined: 03.12.2010 18:15

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

Post by VeL »

Вызываю после нажатия кнопки в гампе:

Code: Select all

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

Или можно как то по другому отследить, что кнопка уже нажалась?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

жуткий изврат.

почему не ждать гампа с опр. гампид? можно через ивент, можно просто проверяя регулярно состояние гамплиста.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

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

Post 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;
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
VeL
Novice
Novice
Posts: 54
Joined: 03.12.2010 18:15

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

Post 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')
Last edited by VeL on 30.10.2013 10:54, edited 1 time in total.
VeL
Novice
Novice
Posts: 54
Joined: 03.12.2010 18:15

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

Post by VeL »

shinma wrote: wait()
Никогда не использую Wait() для ожидания завершения чего либо...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

VeL wrote:Нехватает инжектовского UO.LastGump('replyed')
это что такое и что делает? смутное подозрение, что давным-давно есть в стелсе :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

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

Post 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 умел бы стелс актуальный пинг до сервера предоставлять... цены бы не было ;)
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

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

Post by drabadan »

про пинг поддержу!
Но функция CheckLag() - это примерно и есть пинг...

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

А хотя, про пинг не поддержу... Сервер то может пинговаться вопрос то в отклике в самом клиенте...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

протокол ультимы поддерживает пинг-понг, но из трех эмуляторов поддерживает его только один.
увы.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply