From Stealth Client

Jump to: navigation, search

События

Что есть событие(event).

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

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

SetEventProc(evSpeech,'function_name');

для завершения работы ивента надо пересоздать ивент с пустым обработчиком.

SetEventProc(evSpeech,' ');

список доступных событий:

 * evItemInfo, evItemDeleted  : [ID]  - понятно 
 * evSpeech : [Text,SenderName,SenderID]  - приход сообщения не юникод(пакет 0x1C) 
 * evMoveRejection : [Xorig, Yorig, Dir, XDest, YDest] (все Word) - сервер отбросил, не разрешил шагнуть. 
 * evDrawContainer : [ID, ModelGump] - отрисовка контейнера (0x24 пакет) 
 * evAddItemToContainer : [ObjID, ContainerID] - добавление айтема в контейнер (0x25); 
 * evAddMultipleItemsInCont : [ContainerID] - отрисовка контейнера, пакет 0x3C 
 * evRejectMoveItem :[Reason] - запрет драг\дропа 
 * 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;) - клилок\тултип сообщение (текст, не тултип от айтема!) 
 * 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] - подробности отдельно 
 * evSound : [Sound_ID : Cardinal, X , Y, Z : Word] - айди звука и его координаты.
 * evDeath : [Dead : Boolean] - если True, то мертв, False - жив.
* evQuestArrow: [X, Y : Word; Active : Boolean] - стрелка-указатель на точку, обычно используется для поиска сокровищ. 
 * evPartyInvite: [Inviter_ID : Dword] - приглашение на вступление в группу
 * evMapPin: [ID :Dword; Action, PinID : : Byte; X, Y : Word ] - помеченная точка на карте. 
 * evGumpTextEntry: [fGumpTextEntryID : Dword; Title - String; InputStyle : Byte; MaxValue : Dword; Title2 : String] - Строка ввода, напоминающая гамп, но не он.
 * evGraphicalEffect: [_srcID: Cardinal; _srcX, _srcY: Word; _srcZ : SmallInt; _dstID : Cardinal; _dstX, _dstY: Word; _dstZ : Smallint; _type : Byte; _itemID: Word; _fixedDir: Byte] -граф. эффект.
 * evIRCIncomingText: [Message : String] - входящее сообщение из IRC
 * evSkypeEvent: [SenderNickName, SenderId, EventMsg: String; EventCode : Byte] - подробности в разделе скайпа.
 * evSetGlobalVar: [VarName: String; VarValue: String] - срабатывает при установке глобальной переменной через SetGlobal('stealth',VarName,VarValue)или из внешнего скрипта.


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.