From Stealth Client

Jump to: navigation, search

Объект Поиск

Backpack

function Backpack() : Cardinal

Возвращает параметр чара - ID рюкзака (Backpack ID).

В случае, если отсутствует соединение с UO сервером - вернет 0.

Часто используется, например, в поиске, указателем получателя для перетаскивания вещей, и прочее.

Пример 1:

if Count(runes) < 10 then
begin
   MoveItem(runestack,10-Count(runes),Backpack,0,0,0)
end;

Пример 2:

  FindType($EED,Backpack)

FindAtCord

function FindAtCoord(X : Word;Y : Word) : Cardinal

возвращает последний найденный в указанной точке объект.

Пример:

ObjId := FindAtCoord(GetX(Self), GetY(Self));

FindCount

function FindCount() : Integer

Возвращает кол-во айтемов, найденных с помощью функций Doc:RU/Api/FindType или Doc:RU/Api/FindTypeEx

При подсчете кол-ва надо учитывать, что стопка из нескольких "стекированных" айтемов считается как один айтем!

В случае, если ничего не найдено - вернет 0.


Пример:

FindType(runes,backpack);
  AddAddToSystemJournal('Runes found: ' + IntToStr(FindCount));

FindDistance

var FindDistance : Integer

задает дальность поиска функций Doc:RU/Api/FindType или Doc:RU/Api/FindTypeEx по горизонтали в клетках

Например, 3 - значит будет искать под собой и в радиусе трех клеток.


По умолчанию имеет значение 2 (принято за умолчание на большинстве серверов как максимальная дальность, с которой обычный игрок при обычных условиях может поднять или положить вещь)

Пример:

FindDistance := 0; ''искать только под собой
FindType(bandage_type,ground);
  AddAddToSystemJournal('Bandages found: ' + IntToStr(FindQuantity));

В Python эта функция разведена на две отдельные: GetFindDistance() и SetFindDistance(integer).

FindFullQuantity

function FindFullQuantity : Integer

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

Суммируются также стекированные айтемы!

Если стопок (стеков) в результатах поиска нет, то функция вернет число, равное возвразаемому значению от Doc:RU/Api/FindCount

В случае, если ничего не найдено - вернет 0.


Пример:

FindType(BM,backpack);
  AddAddToSystemJournal('BM total found: ' + IntToStr(FindFullQuantity));

FindItem

function FindItem() : Cardinal

Возвращает последний обьект, найденный с помощью функций Doc:RU/Api/FindType или Doc:RU/Api/FindTypeEx

В случае, если ничего не найдено - вернет 0.


Пример 1:

if FindTypeEx(bottle_type,bottle_color,Ground,false) > 0 then
begin
  UseObject(FindItem);
end;

Пример 2:

  IF FindType($190,ground) > 0 THEN
    WaitTargetObject(FindItem);

FindNotoriety

function FindNotoriety(ObjType: Word; Notoriety: Byte) : Cardinal

Ищет обьект указанного типа ObjType и указанного "цвета"* Notoriety.

на земле.


Результаты поиска:

  • список найденных обьектов заносится в FindedList, который можно получить, ипользуя функцию Doc:RU/Api/GetFindedList
  • Последний найденный обьект заносится в Doc:RU/Api/FindItem
  • Последний найденный обьект возвращается резутатом выполнения ЭТОЙ функции
  • В Doc:RU/Api/FindCount заносится кол-во найденных айтемов
  • если найден хотя бы один обьект, то Doc:RU/Api/FindQuantity = 1, иначе ноль.
  • Doc:RU/Api/FindFullQuantity равно Doc:RU/Api/FindCount

На дальность поиска влияет:

  • Doc:RU/Api/FindDistance - задает дальность поиска по горизонтали в клетках. 3 - значит будет искать под собой и в радиусе трех клеток. По умолчанию имеет значение 2 (принято за умолчание на большинстве серверов как максимальная дальность, с которой обычный игрок при обычных условиях может поднять или положить вещь)
  • Doc:RU/Api/FindVertical - задает дальность поиска по вертикали. По умолчанию принято 5, чтобы не задевать соседние этажи при поиске.

В случае, если ничего не найдено - вернет 0.

В качестве параметра Notoriety можно использовать:

  • 1 - innocent (blue)
  • 2 - guilded/ally (green)
  • 3 - attackable but not criminal (gray)
  • 4 - criminal (gray)
  • 5 - enemy (orange)
  • 6 - murderer (red)

0 и 7 клиент получить не может

Пример:

if FindNotoriety($190,6) > 0 then
begin
  AddAddToSystemJournal('Murderer found!');
  '' make something 
end;


  • Вообще-то Notoriety - переводится как "дурная слава". Но здесь этот перевод как-то не очень применим.

FindQuantity

function FindQuantity() : Integer

Возвращает кол-во айтемов в стеке последнего обьекта, найденного с помощью функций Doc:RU/Api/FindType или Doc:RU/Api/FindTypeEx

Если последний айтем не стек (стопка), то вернет 1

В случае, если ничего не найдено - вернет 0.


Пример:

FindType(BM,backpack);
  AddAddToSystemJournal('BM in last found stack: ' + IntToStr(FindQuantity));

FindType

function FindType(ObjType: Word; Container: Cardinal) : Cardinal

Ищет обьект указанного типа ObjType в указанном контейнере Container.


НЕ ищет в подсумках (контейнерах внутри заданного контейнера). Для такого поиска есть Doc:RU/Api/FindTypeEx

Фактически, Findtype = FindTypeEx(ObjType,$FFFF,Container,false);

Если обьект удовлетворяет всем условиям, то перед внесением в FindedList проверяется его наличие в IgnoreList. Если там он есть - значит отбор не проходит. Подробнее смотреть Doc:RU/Api/Ignore

Результаты поиска:

  • список найденных обьектов заносится в FindedList, который можно получить, ипользуя функцию Doc:RU/Api/GetFindedList
  • Последний найденный обьект заносится в Doc:RU/Api/FindItem
  • Последний найденный обьект возвращается резутатом выполнения ЭТОЙ функции
  • В Doc:RU/Api/FindCount заносится кол-во найденных айтемов (стопка из нескольких "стекированных" айтемов считается как один айтем!)
  • В Doc:RU/Api/FindQuantity заносится кол-во айтемов в стеке (стопке), если последний айтем является стеком (стопкой)
  • В Doc:RU/Api/FindFullQuantity заносится общее кол-во айтемов во всех найденых стопках (если таких в результатах нет, то будет равно Doc:RU/Api/FindCount


На дальность поиска влияет:

  • Doc:RU/Api/FindDistance - задает дальность поиска по горизонтали в клетках. 3 - значит будет искать под собой и в радиусе трех клеток. По умолчанию имеет значение 2 (принято за умолчание на большинстве серверов как максимальная дальность, с которой обычный игрок при обычных условиях может поднять или положить вещь)
  • Doc:RU/Api/FindVertical - задает дальность поиска по вертикали. По умолчанию принято 5, чтобы не задевать соседние этажи при поиске.


В случае, если ничего не найдено - вернет 0.

В качестве параметра Container можно использовать:

Если указан ID несуществующего контейнера, то поиск производится в рюкзаке чара

Если ObjType = -1 поиск вернет ВСЕ доступные объекты в контейнере \ на земле(с учетом FindDistance и FindVertical)

Пример 1:

if FindType(bottle_type,Ground) > 0 then
begin
  UseObject(FindItem);
end;

Пример 2:

  FindType(runes,backpack);
  AddAddToSystemJournal('Runes found: ' + IntToStr(FindCount));

FindTypeEx

function FindTypeEx(ObjType: Word; Color: Word; Container: Cardinal; InSub: Boolean): Cardinal

Ищет обьект указанного типа ObjType и цвета Color в указанном контейнере Container.


InSub включает режим поиска в подсумках (контейнерах внутри заданного контейнера).

Результаты поиска:

  • список найденных обьектов заносится в FindedList, который можно получить, ипользуя функцию Doc:RU/Api/GetFindedList
  • Последний найденный обьект заносится в Doc:RU/Api/FindItem
  • Последний найденный обьект возвращается резутатом выполнения ЭТОЙ функции
  • В Doc:RU/Api/FindCount заносится кол-во найденных айтемов (стопка из нескольких "стекированных" айтемов считается как один айтем!)
  • В Doc:RU/Api/FindQuantity заносится кол-во айтемов в стеке (стопке), если последний айтем является стеком (стопкой)
  • В Doc:RU/Api/FindFullQuantity заносится общее кол-во айтемов во всех найденых стопках (если таких в результатах нет, то будет равно Doc:RU/Api/FindCount


На дальность поиска влияет:

  • Doc:RU/Api/FindDistance - задает дальность поиска по горизонтали в клетках. 3 - значит будет искать под собой и в радиусе трех клеток. По умолчанию имеет значение 2 (принято за умолчание на большинстве серверов как максимальная дальность, с которой обычный игрок при обычных условиях может поднять или положить вещь)
  • Doc:RU/Api/FindVertical - задает дальность поиска по вертикали. По умолчанию принято 5, чтобы не задевать соседние этажи при поиске.


В случае, если ничего не найдено - вернет 0.

В качестве параметра Container можно использовать:

Если указан ID несуществующего контейнера, то поиск производится в рюкзаке чара

В качестве параметра Color можно использовать:

  • $FFFF (-1) - тогда цвет в поиске не учитывается
  • нужный цвет айтема

FindTypeEx с параметрами Color = $FFFF и InSub = False равно функции Doc:RU/Api/FindType

Пример 1:

if FindTypeEx(bottle_type,bottle_color,Ground,false) > 0 then
begin
  UseObject(FindItem);
end;

Пример 2:

  FindTypeEx(runes,runes_color,backpack,true);
  AddAddToSystemJournal('Runes found: ' + IntToStr(FindCount));

FindTypesArrayEx

FindTypesArrayEx(ObjTypes,Colors : Array of Word; Containers : Array of Cardinal; InSub : Boolean) : Cardinal

Ищет по заданному массиву типов ObjTypes и массиву цветов Colors в массиве контейнеров Containers. Если InSub включено, то поиск будет осуществляться в сабконтейнерах (рекурсивно).

Внутри метод перебором проходит через все типы\цвета\контейнеры и выполняет обычный Findtypeex.

Example 1 - ищет на земле заданные типы (животные, чаты и т.д.):

FindDistance := 20;
FindVertical := 10;
FindTypesArrayEx([$29A, $29B, $190, $191, $25d, $25e, $192, $193, $25f, $260, $2ea, $2ec, $2ed, $84, $f6, $19, $db, $51, $7a, $2ee, $2e8, $2e9, $2eb, $117, $116, $115],[$FFFF],[Ground],false);
AddToSystemJournal('FindCount = ' + IntToStr(FindCount));

FindVertical

var FindVertical : Integer

задает дальность поиска функций Doc:RU/Api/FindType или Doc:RU/Api/FindTypeEx по вертикали


По умолчанию принято 5, чтобы не задевать соседние этажи при поиске.

Пример:

FindVertical := 25; ''искать этажом выше и ниже
FindType(sheep_type,ground);
  AddAddToSystemJournal('На трех этажах найдено овец: ' + IntToStr(FindQuantity));

В Python это две отдельные функции: GetFindVertical() and SetFindVertical(integer).

GetFindedList

function GetFindedList(var UserList : TStringList) : Boolean

Заполняет строковый список UserList результатами поиска.


В UserList заносится список найденных обьектов, найденных с помощью Doc:RU/Api/FindType или Doc:RU/Api/FindTypeEx

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

ВНИМАНИЕ! ID обьектов, занесенных этот список, имеют hex-формат!

В случае, если ничего не найдено - вернет False и пустой список в UserList.

Пример:

function GetFoundItemsFromStringList(var Items: Array Of Cardinal): Integer;
var List: TStringList; i: Integer;
begin
  List := TStringList.Create;
  if GetFindedList(List) = False then Result := 0
  else begin
    SetLength(Items, List.Count);
    for i := 0 to Length(Items)-1 do Items[i] := StrToInt('$'+List.Strings[i]);
    Result := Length(Items);
  end;
  List.Free;
end;

Примечание: Начиная с версии 7.9.0 вы можете использовать следующий вид этой функции:

type TCardinalDynArray = Array of Cardinal;
function GetFoundItems():TCardinalDynArray;

GetIgnoreList

function GetIgnoreList(var UserList : TStringList) : Boolean

Заполняет строковый список UserList обьектами из IgnoreList.


В UserList заносится список обьектов, расположенных в IgnoreList

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

В случае, если IgnoreList пустой и заполнять нечем - вернет False и пустой список в UserList.

Пример работы со строковым списком можно посмотреть в Doc:RU/Api/GetFindedList

Ground

function Ground() : Cardinal

Указатель на землю. Часто используется, например, в поиске.

В случае, если отсутствует соединение с UO сервером - вернет 0.

Пример 1: Поиск золотых монет на земле (установить радиус поиска можно используя FindDistance и FindVertical)

  FindType($EED, Ground);

Ignore

procedure Ignore(ObjID : Cardinal)

Добавляет объект ObjID в IgnoreList

В результате до сброса игнора или перезапуска скрипта объект не будет находиться функциями Doc:RU/Api/FindType, Doc:RU/Api/FindTypeEx и Doc:RU/Api/FindNotoriety

Примеры не требуются.

IgnoreOff

procedure IgnoreOff(ObjID : Cardinal)

Удаляет объект ObjID из IgnoreList

После выполнения процедуры объект будет находиться функциями Doc:RU/Api/FindType, Doc:RU/Api/FindTypeEx и Doc:RU/Api/FindNotoriety

Примеры не требуются.

IgnoreReset

procedure IgnoreReset()

Очищает IgnoreList

В результате игнорлист полностью очищается, и все объекты будут находиться функциями Doc:RU/Api/FindType, Doc:RU/Api/FindTypeEx и Doc:RU/Api/FindNotoriety

Примеры не требуются.

LastContainer

function LastContainer() : Cardinal

Возвращает параметр чара - ID последнего открытого контейнера (Last Opened Container).

В случае, если отсутствует соединение с UO сервером - вернет 0.

Пример 1:

if LastContainer <>MyGoldContainer then
begin
  UseObject(MyGoldContainer)
end;

Пример 2:

  AddToSystemJournal('Последний открытый контейнер(Last Opened Container): ' + IntToStr(LastContainer))