From Stealth Client

Jump to: navigation, search

Гамп

AddGumpIgnoreByID

procedure AddGumpIgnoreByID(ID : Cardinal);

после добавления в игнор-лист, все входящие гампы, имеющие GumpID равный ID - игнорируются и не добавляются в список гампов.

Добавление в игнор-лист не затрагивает уже полученные гампы в списке гампов стелса.

Добавление в игнор-лист не затрагивает отображение гампов в подключенном клиенте.

AddGumpIgnoreBySerial

procedure AddGumpIgnoreBySerial(Serial : Cardinal);

после добавления в игнор-лист, все входящие гампы, имеющие GumpSerial равный Serial - игнорируются и не добавляются в список гампов.

Добавление в игнор-лист не затрагивает уже полученные гампы в списке гампов стелса.

Добавление в игнор-лист не затрагивает отображение гампов в подключенном клиенте.

ClearGumpsIgnore

procedure ClearGumpsIgnore;

CloseClientGump

def CloseClientGump( ID : Integer) -> None

CloseSimpleGump

procedure CloseSimpleGump(GumpIndex : Word)

Закрывает "простой" гамп с индексом GumpIndex

Закрывает спец. путем, без нажатия каких-либо кнопок на них - как это происходит в клиенте при нажатии правой кнопки мыши.

Пример:

If IsGump then
  if IsGumpCanBeClosed(GetGumpsCount-1) then
    CloseSimpleGump(GetGumpsCount-1);

GetGumpButtonsDescription

procedure GetGumpButtonsDescription(GumpIndex : Integer; var TL : TStringList)

Заносит в текстовый список TL сокращенное содержимое гампа, находящимся в списке стелса под номером GumpIndex

В отличие от Doc:RU/Api/GetGumpShortLines, в результате работы этой функции в список, кроме общих параметров гампа, попадают только кнопки (Buttons)

ВНИМАНИЕ! UserList должен быть предварительно создан через var_list_name := TStringList.Create и обязательно удален после окончания пользования через var_list_name.Free;

Если указан неверный индекс гампа (или гампов нет), то в TLбудет пусто.

Пример:

Program takegump; 
 
var 
b : TStringList; 
i : Integer; 
 
Begin 
b := TStringList.Create; 
SetSilentMode(False); 
for  i := 0 to GetGumpsCount - 1 do 
  GetGumpButtonsDescription(i,b); 
b.free; 
End.

GetGumpFullLines

procedure GetGumpFullLines(GumpIndex : Integer; var TL : TStringList)

Заносит в текстовый список TL ВСЁ содержимое гампа, находящимся в списке стелса под номером GumpIndex

ВНИМАНИЕ! UserList должен быть предварительно создан через var_list_name := TStringList.Create и обязательно удален после окончания пользования через var_list_name.Free;

Если указан неверный индекс гампа (или гампов нет), то в TLбудет пусто.

Пример:

Program takegump; 
 
var 
b : TStringList; 
i : Integer; 
 
Begin 
b := TStringList.Create; 
SetSilentMode(False); 
for  i := 0 to GetGumpsCount - 1 do 
  GetGumpFullLines(i,b); 
b.free; 
End.

В результате работы примера в строковом списке будет что-то типа:

Serial: 1A1B9F 
GumpID: 11CC34F 
X: 0000 
Y: 0000 
Pages: 13 
Gump Options: NoDispose NoClose 
 
GumpPics: X Y ID  Page 
GumpPic: 480  367  2443  0 
 
TilePics: X   Y   ID   Page 
0   TilePic: 80  94  5099  2 
1   TilePic: 230  94  5103  2 
... 
47   TilePic: 230  184  5176  12 
48   TilePic: 80  274  5181  12 
 
ResizePics: X   Y   ID   Width   Height   Page 
0   ResizePic: 20  20  5054  540  40  0 
1   ResizePic: 20  60  5054  360  300  0 
2   ResizePic: 380  60  5054  180  300  0 
3   ResizePic: 20  360  5054  540  70  0 
 
 
CheckBoxes: X   Y   Released_ID  Pressed_ID   Status   Return_value   Page 
0   CheckBox: 140  395  210  211  0  1537  0 
 
 
GumpTexts: X   Y   Color   Text_ID   Page 
0   GumpText: 159  30  51  0  0 
1   GumpText: 60  371  900  1  0 
... 
61   GumpText: 223  229  900  62  12 
62   GumpText: 73  319  900  63  12 
 
TextEntries: X   Y   Width   Height   Status   Color   Return_value   Default_text_id   Page 
0   TextEntry: 487  370  100  30  0  513  5  0 
 
Text Lines: 
BLACKSMITH SELECTION MENU 
Make last (ringmail gloves) 
Repair Item 
Hardening 
How Many? 
1 
 
... 
 
War Hammer 
Hammer Pick 
 
GumpButtons: X   Y   Released_ID  Pressed_ID   Quit   Page_ID   Return_value   Page 
0   GumpButton: 40  372  208  209  1  0  1025  0 
1   GumpButton: 40  395  208  209  1  0  1026  0 
... 
50   GumpButton: 200  164  1209  1210  1  0  5176  12 
51   GumpButton: 50  254  1209  1210  1  0  5180  12

GetGumpID

function GetGumpID(GumpIndex : Integer) : Cardinal

Возвращает параметр гампа - Ид. номер (Gump ID).

В случае, если отсутствует соединение с UO сервером либо задан неверный номер гампа - вернет 0.

Пример:

If GetGumpsCount > 0 then
  if GetGumpID(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);


GetGumpInfo

procedure GetGumpInfo(GumpIndex : Word; var gumpInfo : TGumpInfo);

Заполняет структуру gumpInfo информацией гампа находящимся в списке стелса под номером GumpIndex Для определения количества тех или иных элементов используется функция Length.

Пример:

GetGumpInfo(0, gi);
AddToSystemJournal('Gump has ' + IntToStr(Length(gi.GumpButtons)) + ' buttons');

Структура TGumpInfo:

TGumpInfo = record
    Serial : Cardinal;
    GumpID : Cardinal;
    X : Word;
    Y : Word;
    Pages : Integer;
    NoMove : Boolean;
    NoResize : Boolean;
    NoDispose : Boolean;
    NoClose : Boolean;
 
 
    Groups : array of TGroup;
    EndGroups : array of TEndGroup;
    GumpButtons : array of TGumpButton;
    ButtonTileArts : array of TButtonTileArt;
    CheckBoxes : array of TCheckBox;
    CheckerTrans : array of TCheckerTrans;
    CroppedText : array of TCroppedText;
    GumpPics : array of TGumpPic;
    GumpPicTiled : array of TGumpPicTiled;
    RadioButtons : array of TRadio;
    ResizePics : array of TResizePic;
    GumpText : array of TGumpText;
    TextEntries : array of TTextEntry;
    Text : array of string;
    TextEntriesLimited : array of TTextEntryLimited;
    TilePics : array of TTilePic;
    TilePicHue : array of TTilePicHue;
    Tooltips : array of TTooltip;
    HtmlGump : array of THtmlGump;
    XmfHtmlGump : array of TXmfHtmlGump;
    XmfHTMLGumpColor : array of TXmfHTMLGumpColor;
    XmfHTMLTok : array of TXmfHTMLTok;
    ItemProperties : array of TItemProperty;
end;

Описание используемых структур:

  TGroup = record
    groupnumber : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TEndGroup = record
    groupnumber : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TPage =  record
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TMasterGump =  record
    ID : Cardinal;
    ElemNum : Integer;
 end;
 
  TGumpButton =  record
    x, y : Integer;
    released_id : Integer;
    pressed_id : Integer;
    quit : Integer;
    page_id : Integer;
    return_value : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TButtonTileArt =  record
    x, y : Integer;
    released_id : Integer;
    pressed_id : Integer;
    quit : Integer;
    page_id : Integer;
    return_value : Integer;
    art_id : Integer;
    Hue :  Integer;
    art_x, art_y : Integer;
    ElemNum : Integer;
  end;
 
  TCheckBox =  record
    x, y : Integer;
    released_id : Integer;
    pressed_id : Integer;
    status : Integer;
    return_value : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TCheckerTrans =  record
    x, y : Integer;
    width, height : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TCroppedText =  record
    x, y,width, height,color,text_id : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TGumpPic =  record
    x, y : Integer;
    id : Integer;
    Hue : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TGumpPicTiled =  record
    x, y : Integer;
    width, height : Integer;
    gump_id : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TRadio =  record
    x, y : Integer;
    released_id : Integer;
    pressed_id : Integer;
    status : Integer;
    return_value : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TResizePic =  record
    x, y : Integer;
    gump_id : Integer;
    width, height : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TGumpText =  record
    x, y, color : Integer;
    text_id : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TTextEntry =  record
    x, y, width, height, color : Integer;
    return_value : Integer;
    default_text_id : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TTextEntryLimited =  record
    x, y, width, height, color : Integer;
    return_value : Integer;
    default_text_id : Integer;
    Limit : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TTilePic =  record
    x, y : Integer;
    id : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TTilePichue =  record
    x, y : Integer;
    id : Integer;
    color : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TTooltip =  record
    Cliloc_ID : Cardinal;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  THtmlGump =  record
    x, y : Integer;
    width, height : Integer;
    text_id : Integer;
    background : Integer;
    scrollbar : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TXmfHTMLGump =  record
    x, y : Integer;
    width, height : Integer;
    Cliloc_id : Cardinal;
    background : Integer;
    scrollbar : Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TXmfHTMLGumpColor =  record
    x, y : Integer;
    width, height : Integer;
    Cliloc_id : Cardinal;
    background : Integer;
    scrollbar : Integer;
    Hue :  Integer;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TXmfHTMLTok =  record
    x, y : Integer;
    width, height : Integer;
    background : Integer;
    scrollbar : Integer;
    Color : Integer;
    Cliloc_id : Cardinal;
    Arguments : String;
    Page : Integer;
    ElemNum : Integer;
  end;
 
  TItemProperty = packed record
    Prop : Cardinal;
    ElemNum : Integer;
  end;

GetGumpSerial

function GetGumpSerial(GumpIndex : Integer) : Cardinal

Возвращает параметр гампа - Серийный номер (Serial ID).

В случае, если отсутствует соединение с UO сервером либо задан неверный номер гампа - вернет 0.

Пример:

If GetGumpsCount > 0 then
  if GetGumpSerial(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);

GetGumpShortLines

procedure GetGumpShortLines(GumpIndex : Integer; var TL : TStringList)

Заносит в текстовый список TL сокращенное содержимое гампа, находящимся в списке стелса под номером GumpIndex

В отличие от Doc:RU/Api/GetGumpFullLines, в котором в список идет все содержимое гампа, в результате работы этой функции в список, кроме общих параметров гампа, попадают следующие элементы:

  • TextEntries
  • TextLines
  • Buttons

ВНИМАНИЕ! UserList должен быть предварительно создан через var_list_name := TStringList.Create и обязательно удален после окончания пользования через var_list_name.Free;

Если указан неверный индекс гампа (или гампов нет), то в TLбудет пусто.

Пример:

Program takegump; 
 
var 
b : TStringList; 
i : Integer; 
 
Begin 
b := TStringList.Create; 
SetSilentMode(False); 
for  i := 0 to GetGumpsCount - 1 do 
  GetGumpShortLines(i,b); 
b.free; 
End.

GetGumpTextLines

procedure GetGumpTextLines(GumpIndex : Integer; var TL : TStringList)

Заносит в текстовый список TL все текстовые строки из гампа, находящимся в списке стелса под номером GumpIndex

ВНИМАНИЕ! UserList должен быть предварительно создан через var_list_name := TStringList.Create и обязательно удален после окончания пользования через var_list_name.Free;

Если указан неверный индекс гампа (или гампов нет), то в TLбудет пусто.

Пример:

TempSL := TStringList.Create;
WaitTargetGround($1BDD);
UseObject(FindType($1EB9,ground));
GetGumpTextLines(GetGumpsCount-1,TempSL);
{тут обрабатываем полученный список}
TempSL.Free;

GetGumpsCount

function GetGumpsCount() : Word

Возвращает количество висящих на чаре гампов

В случае, если отсутствует соединение с UO сервером либо гампов нет - вернет 0, иначе возвращает количество.

В скриптах очень часто используется выражение GetGumpsCount-1, которое идет параметром GumpIndex к функциям, что означает последний гамп в списке.

Пример:

If IsGump then
  if IsGumpCanBeClosed(GetGumpsCount-1) then
    CloseSimpleGump(GetGumpsCount-1);

GumpAutoCheckBox

procedure GumpAutoCheckBox(CheckBoxID, Value : Integer)

Принцип работы похож на Doc:RU/Api/WaitGump, с тем лишь отличием, что ищется не return_value кнопки, а return_value "галочек" (CheckBox). Если найдено - то старое значение status этого CheckBox заменяется на Value.

При этом ответ на гамп серверу НЕ отправляется! Это надо сделать через Doc:RU/Api/WaitGump либо Doc:RU/Api/NumGumpButton

Работает и как ловушка, и как для обработки уже пришедшего гампа.

Пример:

  WaitTargetGround($1BF5);  
  GumpAutoCheckBox(1537, 1);
  WaitGump('7956');
  UseObject(FindType($1EB9,backpack));

GumpAutoRadiobutton

procedure GumpAutoRadiobutton(RadiobuttonID , Value : Integer);

GumpAutoTextEntry

procedure GumpAutoTextEntry(TextEntryID: Integer; Value: String)

Принцип работы похож на Doc:RU/Api/WaitGump, с тем лишь отличием, что ищется не return_value кнопки, а return_value поля ввода (textentry). Если найдено - то старое значение этого textentry заменяется на Value. При этом ответ на гамп серверу НЕ отправляется! Это надо сделать через Doc:RU/Api/WaitGump либо Doc:RU/Api/NumGumpButton

Работает и как ловушка, и как для обработки уже пришедшего гампа.

Пример:

{кусок крафтерского скрипта. 
Сначала ставится ловушка на таргет на инготы на полу, 
потом ловушка на входящий гамп, для замены значения TextEntry, 
затем ловушка на гамп на кнопку, 
и только потом использование тинкертулзов для вызова гампа.}
  WaitTargetGround($1BF5);  
  GumpAutoTextEntry(513, '30');
  WaitGump('7956');
  UseObject(FindType($1EB9,backpack));

Принцип схож с Doc:RU/Api/NumGumpTextEntry.

IsGump

function IsGump() : Boolean

Возвращает наличие на чаре хотя бы одного висящего гампа

В случае, если отсутствует соединение с UO сервером либо гампов нет - вернет False, если есть хотя бы один - True.

Пример:

If IsGump then
  if IsGumpCanBeClosed(GetGumpsCount-1) then
    CloseSimpleGump(GetGumpsCount-1);

IsGumpCanBeClosed

function IsGumpCanBeClosed(GumpIndex : Integer) : Boolean

Возвращает наличие свойства гампа - NoClose

В случае, если отсутствует соединение с UO сервером либо задан неверный номер гампа - вернет False.

Если свойство NoClose присутсвует - то гамп НЕ может закрыт с помощью Doc:RU/Api/CloseSimpleGump

Пример:

If GetGumpsCount > 0 then
  if GetGumpID(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);

NumGumpButton

function NumGumpButton(GumpIndex, Value : Integer) : Boolean

Не работает как ловушка на гамп, а только для обработки уже пришедших гампов.

Принцип работы такой же, как и у Doc:RU/Api/WaitGump, с тем лишь отличием, что нет перебора ВСЕХ гампов в списке, а перебираются кнопки только того гампа, индекс которого указан в GumpIndex

Если такая кнопка не найдена - то ничего серверу не отсылается, а функция вернет False.


Пример:

{кусок крафтерского скрипта. 
Сначала ставится ловушка на таргет на инготы на полу, 
потом использование тинкертулзов для вызова гампа,
затем замена значения TextEntry гампа, 
затем жмется кнопка гампа.}
  WaitTargetGround($1BF5); 
  a := GetGumpsCount; 
  UseObject(FindType($1EB9,backpack));
  while a = GetGumpsCount do
    Wait(50);
  NumGumpTextEntry(GetGumpsCount-1,513, '30');
  NumGumpButton(GetGumpsCount-1,7956);

NumGumpCheckBox

function NumGumpCheckBox(GumpIndex, CBID, Value : Integer) : Boolean

Не работает как ловушка на гамп, а только для обработки уже пришедших гампов.

Принцип работы такой же, как и у Doc:RU/Api/GumpAutoCheckBox, с тем лишь отличием, что нет перебора ВСЕХ гампов в списке, а перебираются CheckBox только того гампа, индекс которого указан в GumpIndex

Если такой CheckBox не найдена, то функция вернет False.

При этом ответ на гамп серверу НЕ отправляется! Это надо сделать через Doc:RU/Api/WaitGump либо Doc:RU/Api/NumGumpButton

Пример:

  WaitTargetGround($1BF5); 
  a := GetGumpsCount; 
  UseObject(FindType($1EB9,backpack));
  while a = GetGumpsCount do
    Wait(50);
  NumGumpCheckBox(GetGumpsCount-1,1537, 1);
  NumGumpButton(GetGumpsCount-1,'7956');

NumGumpRadiobutton

function NumGumpRadiobutton(GumpIndex : Word; RadiobuttonID,Value : Integer): Boolean;

NumGumpTextEntry

function NumGumpTextEntry(GumpIndex, TextEntryID : Integer; Value : String) : Boolean

Не работает как ловушка на гамп, а только для обработки уже пришедших гампов.

Принцип работы такой же, как и у Doc:RU/Api/GumpAutoTextEntry, с тем лишь отличием, что нет перебора ВСЕХ гампов в списке, а перебираются TextEntry только того гампа, индекс которого указан в GumpIndex

Если такой TextEntry не найдена, то функция вернет False.

Пример:

{кусок крафтерского скрипта. 
Сначала ставится ловушка на таргет на инготы на полу, 
потом ловушка на входящий гамп, для замены значения TextEntry, 
затем ловушка на гамп на кнопку, 
и только потом использование тинкертулзов для вызова гампа.}
  WaitTargetGround($1BF5); 
  a := GetGumpsCount; 
  UseObject(FindType($1EB9,backpack));
  while a = GetGumpsCount do
    Wait(50);
  NumGumpTextEntry(GetGumpsCount-1,513, '30');
  NumGumpButton(GetGumpsCount-1, 7956);

WaitGump

procedure WaitGump(Value : String)

Ловушка на гамп. Впрочем, абсолютно так же может использоваться и для обработки уже пришедших гампов.

Работает так:

начинает перебирать гампы от первого пришедшего до последнего пришедшего. В каждом из перебираемых гампов идет просмотр всех имеющихся на нем кнопок на предмет совпадения параметра функции Value со значением return_value кнопки. Если есть совпадение - то перебор прекращается, и отсылается ответ на гамп серверу, а в стелсе гамп уничтожается.

Если такая кнопка не найдена - то ничего серверу не отсылается. При этом процедура не возвращает в скрипт ничего для определения успешности выполнения, и это есть одна из недоработок этой процедуры, исправленная в Doc:RU/Api/NumGumpButton

Пример 1:

WaitTargetGround($1BDD);
WaitGump('3636');
UseObject(FindType($1EB9,ground));

Пример 2:

if Dead then 
  WaitGump('1'); ''gump of ressurection

WaitTextEntry

procedure WaitTextEntry(Value : String)

Обработка слегка особенного гампа, состоящего ТОЛЬКО из поля ввода и 2 кнопок - ОК и Cancel.

Работает и как ловушка, и для обработки уже пришедших полей ввода.

Если поле ввода уже есть - пакет с ответом отсылается серверу, в стелсе уничтожается поле ввода. Если еще не пришло - ставится ловушка, которая срабатывает сразу по приходу.

Пример:

WaitTargetGround($XXXX);
WaitTextEntry('20');
UseObject(FindType(pestyle_type,backpack));