From Stealth Client

Jump to: navigation, search


S

SA

function SA : Word;

Returns reagent type: Sulphurous Ash

SACount

function SACount : Word;

Returns Sulphurous Ash count in packpack.

SS

function SS : Word;

Returns reagent type: Spider Silk

SSCount

function SSCount : Word;

Returns Spider Silk count in backpack.


Salute

function Salute

Salute - это жест, который сделает ваш персонаж

Пример:

  Salute;


Self

function Self() : Cardinal

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

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

Пример:

  WaitTargetObject(Self);
  CastSpell('Bless');


SellLayer

function SellLayer() : Byte

Возвращает номер слоя 0x1C - Товарный бекпак 3 у вендора (NPC Sell container).

У обычных игровых чаров контейнер на этом слое отсутствует, т.е. ObjAtLayer(SellLayer) = 0.

Пример 1:

if ObjAtLayer(SellLayer) > 0 then 
  AddToSystemJournal('NPC Sell container ID: '+IntToStr(ObjAtLayer(SellLayer)));


SetARStatus

procedure SetARStatus(Value : Boolean)

Устанавливает режим реконнектора: True - реконектор включен, False - выключен

Пример 1: {{page>:examples:connect&nofooter}}

См. также

SetAutoBuyDelay

procedure SetAutoBuyDelay(Value : Word)

SetAutoSellDelay

procedure SetAutoSellDelay(Value : Word)


SetBadLocation

procedure SetBadLocation(X,Y: Word)

Помечает точку с координатами X, Y как непроходимую.

Таймаут 15 минут, после - флаг непроходимости снимается.

Пример:

if FindType($0190,Ground) > 0 then
  SetBadLocation(GetX(FindItem),GetY(FindItem));


SetBadObject

procedure SetBadObject(ObjType : Word;Color : Word;Radius : Byte);

Помечает объект как "плохой". Functions хождения это учитывают при построении маршрута.

Таймаут 15 минут, после - флаг непроходимости снимается.

Пример:

if FindType($0190,Ground) > 0 then
  SetBadLocation(GetX(FindItem),GetY(FindItem));

SetCatchBag

function SetCatchBag(ObjID : Cardinal) : Byte;

SetCmdPrefix

procedure SetCmdPrefix(Value : Char);

устанавливает символ-префикс после которого можно ввести команду, по умолчанию «запятая» : ,useobject

SetContextMenuHook

procedure SetContextMenuHook(VendorID : Cardinal; EntryNumber : Byte)

Для сброса ловушки контекстного меню используйте VendorID = 0:

SetContextMenuHook(0, 0);


SetDress

procedure SetDress()

Сохранение набора одежды/екипировки

SetEasyUO

procedure SetEasyUO(num: Integer; Regvalue : String)

Создает, если не было, или изменяет переменную, со звездочкой (*) в начале в регистре Windows в ветке HKEY_CURRENT_USER\Software\EasyUO. Такая переменная может быть считана или поменяна из EasyUO, создавая таким образом некий вариант совместимости.

Пример (Python):

SetEasyUO(56, "Kill them all!")

создаст в ветке реестра переменную *56 со значением "Kill them all!". Из EasyUO считать можно:

display This is your text: *56
 
set %myvar *56
display This is your text: %myvar

SetEasyUO в качестве параметра num, принимает только Integer, хотя EasyUO нормально работает и с текстовыми переменными типа: *database, *alert, *any_other_text. Такие текстовые переменные недоступны из скриптов Stealth.

Функция обратного действия: Doc:RU/Api/GetEasyUO

SetEventProc

procedure SetEventProc(Event : EventType, FunctionName : String);

простой пример - шард с антимакрос-гампами. крафт стоит на макросе (неважно каком). Ему прилетает гамп. Сейчас чар должен постоянно проверять (через каждое действие) наличие гампа, а так он себе возится неспеша, а тем временем ивент на приход гампа сработал, и процедура в скрипте моментально обработает этот гамп и отправит ответ, а основной скрипт ничего и не заметит.

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

Список доступных событий(EventType):

  • evItemInfo, evItemDeleted  : [ID] - понятно
  • evSpeech : [Text,SenderName,SenderID] - приход сообщения не юникод(пакет 0x1C)
  • evUnicodeSpeech : [Text,SenderName,SenderID] - сообщение в юникоде (пакет 0xAE).
  • зачастую на серверах используются оба пакета.
  • evDrawGamePlayer : [ID] - пакет 0x20, в основном используется для отрисовки нашего чара, но не всегда.
  • evMoveRejection : [Xorig, Yorig, Dir, XDest, YDest] (все Word) - сервер отбросил, не разрешил шагнуть.
  • evDrawContainer : [ID, ModelGump] - отрисовка контейнера (0x24 пакет)
  • evAddItemToContainer : [ObjID, ContainerID] - добавление айтема в контейнер (0x25);
  • evAddMultipleItemsInCont : [ContainerID] - отрисовка контейнера, пакет 0x3C
  • evRejectMoveItem :[Reason] - запрет драг\дропа.
    • 0-you can not pick that up.
    • 1-that is too far away.
    • 2-That is out of sight.
    • 3-that item does not belong to you. You'll have to steal it
    • 4-you are already holding an item.
    • 5-you must wait to perform another action.
  • evUpdateChar, evDrawObject : [ID] - отрисовка чара (не обязательно нашего!)
  • evMenu : [DialogID,MenuID] (DialogID : Cardinal;MenuID : Word;) - понятно
  • evMapMessage : [ID,centerx,centery] - карта открылась
  • evAllow_RefuseAttack [ID,Attack_OK] Attack_OK: Boolean(ID = 0,если Attack_OK = False) - понятно
  • evClilocSpeech : [SenderID,SenderName,ClilocID,Text] (ClilocID : Cardinal;) - клилок\тултип сообщение (текст, не тултип от айтема!)
  • evClilocSpeechAffix : [SenderID,SenderName,ClilocID,Affix,ClilocText] (Affix : String, ClilocID : Cardinal) - то же самое, с мелкими отличиями
  • evBuff_DebuffSystem : [ID,Attribute_ID,IsEnabled] (Attribute_ID : Word;IsEnabled : Boolean;) - при изменении состояния (касты и все такое)
  • evClientSendResync : [] (нет параметров, голый вызов функции) - стелс (или клиент через него) отослали ресинк
  • evCharAnimation : [ID,Action] (Action : Word;)
  • evIncomingGump : [Serial,GumpID,X,Y] (все Cardinal)
  • evICQIncomingText, 'ICQ Disconnect' - понятно.
  • evICQDisconnect,
  • evICQConnect,
  • evICQIncomingText,
  • evICQError
  • evTimer1, evTimer2 - никаких параметров, просто вызов каждые 100 мс.
  • evWindowsMessage : [Dword] - подробности отдельно

ID, SenderID, ContainerID и прочие ID - все Cardinal.

Пример:

Program Test; 
 
procedure Unicode_Speech(text,SenderName : String; SenderID : Cardinal); 
begin 
AddToSystemJournal('Event! Unicode Speech: SenderID = $'+ IntToHex(SenderID,8) + ' ; SenderName =  ' + SenderName + '; SenderText : ' + text); 
end; 
 
procedure Char_Animation(ID : Cardinal; Action : Word); 
begin 
AddToSystemJournal('Event! Char Animation: ID = $'+ IntToHex(ID,8) + ' ; Action =  ' + IntToStr(Action)); 
end; 
 
procedure multiple_Items(ContainerID : Cardinal); 
begin 
AddToSystemJournal('Event! Add multiple Items In Cont: ContID = $'+ IntToHex(ContainerID,8)); 
end; 
 
begin 
SetEventProc(evUnicodeSpeech,'Unicode_Speech'); 
SetEventProc(evCharAnimation,'Char_Animation'); 
SetEventProc(evAddMultipleItemsInCont,'multiple_Items'); 
 
while True do 
wait(50); 
end.

Ещё один нюанс для Python. Передать информацию из сработавшего Event-а в основной скрипт можно или через Doc:RU/Api/SetGlobal или внутри Event-а объявлять питоновскую global:

ItemID, BagID=0,0
 
def AddItemToContainer(ObjID, ContainerID):
  global ItemID, BagID
 
SetEventProc(evAddItemToContainer, AddItemToContainer)

В этом случае ItemID, BagID могут быть оперативно использованы из других частей скрипта.


SetGlobal

procedure SetGlobal(GlobalRegion : String; VarName : String; VarValue : String)

Устанавливает глобальной переменной с именем VarName значение VarValue в области видимости GlobalRegion. Область видимости может быть 'char' или 'stealth'. Если область видимости 'char', то переменная видна всем скриптам запущенном на данном чаре, область видимости 'stealth' делает переменную видимой для всех чаров и скриптов. GlobalRegion и VarName не чувствительны к регистру.

Пример 1: {{page>:examples:globals&nofooter}}

См. также

SetGoodLocation

procedure SetGoodLocation(X, Y : Word);

Помечает точку (X, Y) как проходимую.

SetJournalLine

procedure SetJournalLine(StringIndex : Integer; Text : String)

меняем содержимое строки в журнале


SetPauseScriptOnDisconnectStatus

procedure SetPauseScriptOnDisconnectStatus(Value : Boolean)

Задает поведение скрипта при дисконнекте. если Value True то при дисконнекте, все запущенные скрипты встанут на паузу.

Пример 1: {{page>:examples:pausescript&nofooter}}

См. также

SetRunMountTimer

procedure SetRunMountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetRunUnmountTimer

procedure SetRunUnmountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetSilentMode

procedure SetSilentMode(Value : Boolean)

SetSkillLockState

// v7.9.1+
procedure SetSkillLockState(SkillName : String; skillState : Byte);

Устанавливает Lock State навыку SkillName .

SetStatLockState

// v7.9.1+
procedure SetStatLockState(statNum : Byte; statState : Byte);

Устанавливает Lock State силе, ловкости или интеллекту.

SetWalkMountTimer

procedure SetWalkMountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetWalkUnmountTimer

procedure SetWalkUnmountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetWarMode

procedure SetWarMode(Value : Boolean)

Установить/сбросить режим боя.

Пример:

if (WarMode = false) then
  SetWarMode(true);


Sex

function Sex() : Byte

Возвращает параметр чара - Пол (Sex).

Если возврщает 0 - male мужской, 1- female женский

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

Пример:

case Sex of
  0: AddToSystemJournal('Чар мужского пола')
  1: AddToSystemJournal('Чар женского пола')
  else AddToSystemJournal('Чар еще не определился :)');


ShardName

function ShardName : String

Возвращает название шарда указанное в настройках стелса.

Пример:

  AddToSystemJournal(ShardName);


ShirtLayer

function ShirtLayer() : Byte

Возвращает номер слоя 0x05 - Рубашка (Shirt).

Пример 1:

if ObjAtLayer(ShirtLayer) > 0 then 
  AddToSystemJournal('Shirt ID: '+IntToStr(ObjAtLayer(ShirtLayer)));

Пример 2:

{Если на слое чтото есть, то снимаем}
if ObjAtLayer(ShirtLayer) <> 0 then
  begin
    unequip(ShirtLayer);
    wait(1000);
  end;


ShoesLayer

function ShoesLayer() : Byte

Возвращает номер слоя 0x03 - Обувь (Shoes).

Пример 1:

if ObjAtLayer(ShoesLayer) > 0 then 
  AddToSystemJournal('Shoes ID: '+IntToStr(ObjAtLayer(ShoesLayer)));

Пример 2:

{Если на слое чтото есть, то снимаем}
if ObjAtLayer(ShoesLayer) <> 0 then
  begin
    unequip(ShoesLayer);
    wait(1000);
  end;

ShowMessage

procedure ShowMessage

Sign

function Sign(constAValue : Integer) : ShortInt;


Stam

function Stam() : Integer

Возвращает параметр чара - стамина (Stamina).

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

Пример 1:

if (Stam > 0) then
begin
  ''Do something
end;

Пример 2:

AddToSystemJournal('Стамина чара: ' + IntToStr(Stam));

StealthPath

function StealthPath: String;

Возвращает путь к папке, в которой находится исполняемый файл Stealth.

Пример:

AddToSystemJournal(StealthPath());

Результат:

22:50:48:546 [CharName]: V:\Stealth Client\

Step

function Step(Direction : Byte; Running : Boolean) : Byte

Если направление чара и Direction совпадает делает шаг в данном направлении, иначе разворачивает чара в этом направлении. Running определяет бежит чар (True) или идет (False).

Возвращает следующие значения:

  • 0 - Неизвестная ошибка
  • 1 - Отправлен запрос на ресинк, запрос не обработан.
  • 2 - Буфер шагов заполнен, запрос не обработан.
  • 3 - Стелс считает шаг в данном направлении невозможным, запрос не отсылается.
  • 4 - Таймаут ожидания ответа от сервера.
  • 5 - Сервер запретил перемещение в этом направлении.
  • 6 - Запрос принят, ожидание ответа сервера.
  • 7 - Сервер разрешил перемещение в этом направлении.

Если функция вернула, что-то отличное от 7, можно считать что шаг сделать не удалось.

Направление шагов

Uo-directions.png

StepQ

function StepQ(Direction : Byte; Running : Boolean) : Integer

По параметрам аналогична функциям Doc:RU/Api/Step и Doc:RU/Api/Raw_Move, но в отличии от них сразу же возвращает управление не дожидаясь ответа от сервера.

Возвращает следующие значения:

  • 0-255 - Запрос на шаг отправлен
  • 256 - Была предпринята попытка открыть дверь, и чар развернулся в нужном направлении.
  • -1 - Очередь шагов полна, запрос проигнорирован
  • -2 - Стелс считает шаг в данном направлении невозможным

Поскольку функция не дожидается ответа от сервера, координаты чара возвращаемые функциями Doc:RU/Api/GetX, Doc:RU/Api/GetY, Doc:RU/Api/GetZ и Doc:RU/Api/GetDirection изменяются не сразу. Что бы получить координаты с учетом сделанных шагов надо воспользоваться функциями Doc:RU/Api/PredictedX, Doc:RU/Api/PredictedY, Doc:RU/Api/PredictedZ и Doc:RU/Api/PredictedDirection

Uo-directions.png

Пример 1:

if StepQ(0, True) < 0 then
  AddToSystemJournal('Не удалось шагнуть');
end;


Str

function Str() : Integer

Возвращает параметр чара - сила (STR).

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

Пример 1:

if (Str > 0) then
begin
  ''Do something
end;

Пример 2:

AddToSystemJournal('Сила чара(Char strength): ' + IntToStr(Str));

StrBreakApart

procedure StrBreakApart(const S, Delimeter : string; Parts : TStrings)

Разбивает строки на под-строки.

Пример:

Program StrBreakApartDemo;
var i : Integer;
    SL : TStringList;
 
Begin
{Before working with TStringList Object - You must CREATE it!}
SL := TStringList.Create;
 
StrBreakApart('This is a StrBreakApart Demo', ' ', SL);
if SL.Count > 0 then for i := 0 to SL.Count - 1 do
    begin
    AddToSystemJournal(SL.Strings[i]);
    end;
 
{Note:
When you finish working with TStringList Object - You must FREE it!}
SL.Free;
 
End.

StrToBool

function StrToBool(constS : string) : Boolean;

StrToDateTime

function StrToDateTime(const s: string): TDateTime

StrToTime

function StrToTime(const s: String): TDateTime