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

Ивенты

Only for requests.
Post Reply
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Ивенты

Post by MuDaCk »

Хотелось бы увидеть список всех ивентов и как их записывать. :wink:
Например:

Code: Select all

  SetEventProc(evICQDisconnect, ''); 
  SetEventProc(evICQError, ''); 
  SetEventProc(evICQIncomingText, ''); 
И ещё бы к ним пояснения. :oops:. С аськиными я разобрался:)
My name is Игорёшка Image
Пишу скрипты за едуImage
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Готовил статейку по ивентам, но она стала на этом варианте:
Установка обработчика событий.

Code: Select all

procedure SetEventProc(Eventname: TPacketEvent; Procname: String);

TPacketEvent = {
		evItemInfo,
		evItemDeleted,
		evSpeech,
		evDrawGamePlayer,
		evMoveRejection,
		evDrawContainer,
		evAddItemToContainer,
		evAddMultipleItemsInCont,
		evRejectMoveItem,
		evUpdateChar,
		evDrawObject,
		evMenu,
		evMapMessage,
		evAllow_RefuseAttack,
		evClilocSpeech,
		evClilocSpeechAffix,
		evUnicodeSpeech,
		evBuff_DebuffSystem,
		evClientSendResync,
		evCharAnimation,
		evICQDisconnect,
		evICQConnect,
		evICQIncomingText,
		evICQError,
		evIncomingGump,
		evTimer1,
		evTimer2
	};
Для сброса обработчика необходимо в параметре Procname передать пустую строку.

evItemInfo - получена информация о предмете.
Пример процедуры-обработчика: procedure OnItemInfo(ID: Cardinal);

evItemDeleted - удаление объекта.
Пример процедуры-обработчика: procedure OnItemDeleted(ID: Cardinal);

evSpeech - получение ANSI-сообщения.
Пример процедуры-обработчика: procedure OnSpeech(Text, SenderName: String; SenderID: Cardinal);

evDrawGamePlayer - в основном отрисовка Вашего чара, но не всегда.
Пример процедуры-обработчика: procedure OnDrawGamePlayer(ID: Cardinal);

evMoveRejection - сервер не разрешил шагнуть.
Пример процедуры-обработчика: procedure OnMoveRejection(Xorig, Yorig: Word; Dir:Byte; X, Y: Word);

evDrawContainer - отрисовка контейнера.
Пример процедуры-обработчика: procedure OnDrawContainer(ID: Cardinal; ModelGump: Word);

evAddItemToContainer - добавление предмета в контейнер.
Пример процедуры-обработчика: procedure OnAddItemToContainer(ID, ContainerID: Cardinal);

evAddMultipleItemsInCont - добавление нескольких предметов в контейнер.
Пример процедуры-обработчика: procedure OnAddMultipleItemsInCont(ContainerID: Cardinal);

evRejectMoveItem - запрет перемещения предмета.
Пример процедуры-обработчика: procedure OnRejectMoveItem(Reason: Byte);
Известные причины отказа:
0 - Невозможно поднять предмет.
1 - Предмет недоступен.
2 - Предмет не виден.
3 - Предмет может быть только украден.
4 - Вы уже держите предмет.

evUpdateChar - Отрисовка чара (необязательно Вашего).
Пример процедуры-обработчика: procedure OnUpdateChar(ID: Cardinal);

evDrawObject - Отрисока объекта.
Пример процедуры-обработчика: procedure OnDrawObject(ID: Cardinal);

evMenu - получение контекстного меню.
Пример процедуры-обработчика: procedure OnMenu(DialogID, MenuID: Cardinal);

evMapMessage - открылась карта.
Пример процедуры-обработчика: procedure OnMapMessage(ID:Cardinal; CenterX, CenterY: Integer);

evAllow_RefuseAttack - принята/отклонена атака.
Пример процедуры-обработчика: procedure OnAllow_RefuseAttack(ID: Cardinal; Allow: Boolean);

evClilocSpeech - получение сообщения клилока/тултипа (не предмета).
Пример процедуры-обработчика: procedure OnClilocSpeech(SenderID: Cardinal; SenderName: String; ClilocID: Cardinal; ClilocText: String);

evClilocSpeechAffix - получение сообщения клилока/тултипа (не предмета).
Пример процедуры-обработчика: procedure OnClilocSpeechAffix(SenderID: Cardinal; SenderName: String; ClilocID: Cardinal; Affix, ClilocText: String);

evUnicodeSpeech - получение Unidoce-сообщения.
Пример процедуры-обработчика: procedure OnUnicodeSpeech(Text, SenderName: String; SenderID: Cardinal);

evBuff_DebuffSystem - изменение состояния (касты и все такое).
Пример процедуры-обработчика: procedure OnBuff_DebuffSystem(ID, Attribute_ID: Cardinal; IsEnabled: Boolean);

evClientSendResync - стелс (или клиент через него) отослали ресинк.
Пример процедуры-обработчика: procedure OnClientSendResync();

evCharAnimation - отрисовка анимации чара.
Пример процедуры-обработчика: procedure OnCharAnimation(ID: Cardinal; Action: Word);

evICQDisconnect - событие отключения ICQ.
Пример процедуры-обработчика: procedure OnICQDisconnect();

evICQConnect - событие подключения ICQ.
Пример процедуры-обработчика: procedure OnICQConnect();

evICQIncomingText - получение сообщения через ICQ.
Пример процедуры-обработчика: procedure OnICQIncomingText(UIN: Cardinal; Text: String);

evICQError - ошибка ICQ.
Пример процедуры-обработчика: procedure OnICQError(Text: String);

evIncomingGump - пролучен гамп.
Пример процедуры-обработчика: procedure OnIncomingGump(Serial, GumpID, X, Y: Cardinal);

evTimer1 - первый таймер (срабатывает каждые 100 милисекунд).
Пример процедуры-обработчика: procedure OnTimer1();

evTimer2 - второй таймер (срабатывает каждые 100 милисекунд).
Пример процедуры-обработчика: procedure OnTimer2();
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Oasis
Novice
Novice
Posts: 52
Joined: 02.01.2014 14:15

Re: Ивенты

Post by Oasis »

Блин я уже несколько часов втыкаю в евенты о которых сегодня услышал, обсалютно ничего не понимаю, куда их вписывать, гдето ктото писал что в инклюды, кто-то писал что можно в евенты или процедурой, пробовал процедурой в инклюде, не знаю правильно ли я с примера переделал, но как то так:

Code: Select all

Program evMoveRejection; 
 
procedure OnRejectMoveItem(Reason: Byte); 
begin 
AddToSystemJournal('Event! Muver); 
end; 
 
begin 
SetEventProc(evRejectMoveItem,'OnRejectMoveItem');
 
while True do 
wait(50); 
end.
естестно ничего не получилось:

Code: Select all

00:13:20:840 [timy]: Compiling
00:13:20:866 [timy]: Compiler: [Error] (ev.inc at 1:1):  'BEGIN' expected
00:13:20:870 [timy]: Compiling failed
00:13:20:871 [timy]: Script fish test2.txt stopped successfuly
и процедурой:

Code: Select all

procedure OnRejectMoveItem(Reason: Byte);
begin
TPacketEvent = evMoveRejection; 
end; 
Сложно что-то делать, когда абсолютно не на грамм не понимаешь что ты делаешь и с чем.
Помогите пожалуууууууйста, примером, на evRejectMoveItem, и пожалууууууууййййййстааа, не поскупитесь лишним словом, каждое слово в этой сере весом на 1кг золота.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Ивенты

Post by Vizit0r »

ты вообще по форуму искал SetEventProc?

твой скрипт правильно работает, только закрывающую кавычку в конце текста от AddToSystemJournal добавить.

насчет вставки ивента в рабочий скрипт -

вставляешь обработчик

Code: Select all

procedure OnRejectMoveItem(Reason: Byte); 
begin 
AddToSystemJournal('Event! Muver); 
end; 
вначале основного блока скрипта (основной блок - это begin..end.) пишешь
SetEventProc(evRejectMoveItem,'OnRejectMoveItem');
и все, остальной скрипт не меняешь. Теперь при отказе сервера в поднятии\опускании айтема - твой обработчик сработает.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Oasis
Novice
Novice
Posts: 52
Joined: 02.01.2014 14:15

Re: Ивенты

Post by Oasis »

Получилось как-то так:

Журнал

Code: Select all

[21:41:19:458: ] You put 1 steak in your backpack.
[21:41:20:613: ] You finished looping.
[21:41:20:613: ] You stop fishing.
[21:41:23:296: ] You cannot pick up this item(cannot lift item), ID: $00000000
[21:41:23:296: ] You cannot pick up this item(cannot lift item), ID: $00000000
[21:41:25:707: ] You are stuffed
[21:41:27:873: ] Looping [1 more to go].
[21:41:33:013: ] You finished looping.
[21:41:33:013: ] You stop fishing.
[21:41:34:465: ] You are stuffed
Сис Журнал

Code: Select all

[21:40:20:504: ] стакаем фишстейки
[21:40:20:504: ] 23898 стейков.
[21:40:40:588: ] стакаем фишстейки
[21:40:40:589: ] 23899 стейков.
[21:41:23:296: ] Event! Muver
[21:41:23:297: ] Event! Muver
[21:41:25:312: ] стакаем фишстейки
[21:41:25:312: ] 23900 стейков.
[21:41:53:566: ] стакаем фишстейки
[21:41:53:567: ] 23901 стейков.
Не получается избавится от: You cannot pick up this item(cannot lift item), ID: $00000000
Может из-за версии 4.3.6
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Ивенты

Post by Vizit0r »

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