ingameMail - использование игровой почты

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Вот небольшая функция, которая возвращает номер предмета в инвентаре по имени предмета.
Например так: $itemIndex = getInventoryItemIndex("apple");

Код: Выделить всё

sub getInventoryItemIndex {
	return -1 unless $char->inventory->size();
	my $find = shift;
	foreach my $item (@{$char->inventory->getItems}) {
		if(lc($item->{name}) eq lc($find)){
			return $item->{invIndex};
		}
	}
	return -1;
}
Возвращает -1 в случае ошибки или если предмет не найден в инвентаре персонажа.
Аватара пользователя
Chimer[a]
Энтузиаст
Сообщения: 75
Зарегистрирован: Вт июн 24, 2008 3:51 pm

Сообщение Chimer[a] »

у меня процедура отправки изначально принимала номер в инвентаре как параметр
и этот номер я получал через макрос с помощью @inventory (apple)
это не одно и тоже?
номер в инвентаре это ведь то что выводится по команде "i"?
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Дааа '-'
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Chimer[a]
Кора очень хорошо знает где лежит предмет в инвентаре.
Правда, оно не для юзверей.

Делай так: Возьми и посмотри как кора складывает в Кафру. Тогда будеш знать откудова берётся ид предмета (ид ячейки инвентаря).

Добавлено спустя 7 минут 48 секунд:

Kissa2k
НЕТ! Не то-же.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

OMG, разве номер вещи инвентаря в openkore не совпадает с ид ячейки инвентаря?
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Kissa2k
Дык. Нет конечно.
Точнее. когда пишем команду "i" то номера Явно не совпадают с номерами ячеек инвентаря.
Аватара пользователя
Chimer[a]
Энтузиаст
Сообщения: 75
Зарегистрирован: Вт июн 24, 2008 3:51 pm

Сообщение Chimer[a] »

спасибо КМ, Кисса
работает
а я как дурак прибавлял 0x10 )
осталось сделать удаление предмета и зеней из инвентаря, потому что пакет от сервера об этом не приходит
может подскажите опять какую процедуру смотреть как пример?
пробовал inventory_item_removed из Receive копать, но запутался, летят ошибки
попозже еще попробую
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Chimer[a]
В общем.
Шаг нумбер одын: Добавляем нужные пакеты отправки
Шаг номер двась: Добавляем нужные пакеты приёма с хуками внутри (желательно).
Шаг нумбер трись: Пишем плуг который пашед с нашими новыми хуками и функциями.

Поверь, кора просто нифига не знает о пакетах игровой почты.
За полность реализованую систему тебе медаль (в виде комента в одном ОК файлике) + уважуха. А мне говно медаль, потому что ленив.
Аватара пользователя
Chimer[a]
Энтузиаст
Сообщения: 75
Зарегистрирован: Вт июн 24, 2008 3:51 pm

Сообщение Chimer[a] »

сделал, добавил в 1 пост
работу с приемом писем делать не буду
делал для себя, медаль мне тоже нафик не нужна
надеюсь кому-нибудь пригодится этот плаг
Straus
Начинающий
Сообщения: 35
Зарегистрирован: Пт мар 02, 2007 4:20 pm

Сообщение Straus »

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

Код: Выделить всё

[Sep 25 22:02:37 2008.27] NPC Exists: Почтовый ящик#alb1 (90, 60) (ID 57152) - (3)
[Sep 25 22:02:37 2008.30] Packet SENT_BY_CLIENT: 0094 - Get Unit Info
[Sep 25 22:02:38 2008.98] Packet SENT_BY_CLIENT: 0094 - Get Unit Info
[Sep 25 22:02:39 2008.23] Packet SENT_BY_CLIENT: 0094 - Get Unit Info
[Sep 25 22:02:39 2008.85] Packet SENT_BY_CLIENT: 009B - Look
[Sep 25 22:02:39 2008.86] Packet SENT_BY_CLIENT: 0090 - Talk
[Sep 25 22:02:40 2008.42] Почтовый ящик#alb1: [Почтовый ящик]
[Sep 25 22:02:40 2008.42] Почтовый ящик#alb1: Чтобы воспользоваться почтовым
[Sep 25 22:02:40 2008.42] Почтовый ящик#alb1: ящиком, нужно заплатить 130 зени.
[Sep 25 22:02:40 2008.43] Почтовый ящик#alb1: Хотите воспользоваться услугой?
[Sep 25 22:02:40 2008.44] Почтовый ящик#alb1: Auto-continuing talking
[Sep 25 22:02:40 2008.45] Sent packet    : 00B9    [ 6 bytes]  [Talk Continue]
[Sep 25 22:02:40 2008.79] ----------Responses-----------
#  Response
0  Да
1  Нет
2  Cancel Chat
-------------------------------
[Sep 25 22:02:40 2008.79] Почтовый ящик#alb1: Type 'talk resp #' to choose a response.
[Sep 25 22:02:42 2008.23] Packet SENT_BY_CLIENT: 00B8 - Talk Response
[Sep 25 22:02:42 2008.67] Почтовый ящик#alb1: [Почтовый ящик]
[Sep 25 22:02:42 2008.67] Почтовый ящик#alb1: Спасибо, приходите еще.
[Sep 25 22:02:42 2008.69] You lost 130 zeny.
[Sep 25 22:02:42 2008.69] Почтовый ящик#alb1: Done talking
[Sep 25 22:02:42 2008.69] Sent packet    : 0146    [ 6 bytes]  [Talk Cancel]
[Sep 25 22:02:42 2008.79] Packet SENT_BY_CLIENT: 023F
[Sep 25 22:02:45 2008.17] Packet SENT_BY_CLIENT: 0241
[Sep 25 22:02:45 2008.35] Sent packet    : 0089    [ 7 bytes]  [Attack / Sit / Stand]
[Sep 25 22:02:45 2008.67] You are sitting.
[Sep 25 22:02:48 2008.36] Packet SENT_BY_CLIENT: 0244
[Sep 25 22:02:48 2008.67] Item added to inventory: Large Jellopy (1) x 15 - Non-usable
[Sep 25 22:02:48 2008.98] Packet SENT_BY_CLIENT: 007E - Sync
[Sep 25 22:02:49 2008.97] Packet SENT_BY_CLIENT: 0243
[Sep 25 22:02:53 2008.29] Packet SENT_BY_CLIENT: 0246
[Sep 25 22:02:54 2008.30] Packet SENT_BY_CLIENT: 0146 - Talk Cancel
[Sep 25 22:02:42 2008.79] Packet SENT_BY_CLIENT: 023F - чтение общее
[Sep 25 22:02:45 2008.17] Packet SENT_BY_CLIENT: 0241 - открытие определенного 1 письма
[Sep 25 22:02:45 2008.35] Sent packet : 0089 [ 7 bytes] [Attack / Sit / Stand]
[Sep 25 22:02:45 2008.67] You are sitting.
[Sep 25 22:02:48 2008.36] Packet SENT_BY_CLIENT: 0244 - взять что в письме прислали
[Sep 25 22:02:48 2008.67] Item added to inventory: Large Jellopy (1) x 15 - Non-usable

когда пытаюсь сделать что-нибудь подобно
send 3F 02
send 41 02
send 44 02
дальше происходит дисконект, может я что то не учел ?
Straus
Начинающий
Сообщения: 35
Зарегистрирован: Пт мар 02, 2007 4:20 pm

Сообщение Straus »

эх никто не хочет помочь, спрошу по другому ...


10 192.168.1.100:1520 217.112.84.14:5122 2 Send
0000 3F 02 ?.

11 217.112.84.14:5122 192.168.1.100:1520 527 Recv
0000 40 02 07 02 07 00 00 00 6E 03 00 00 31 00 00 00 @.......n...1...
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030 00 00 00 00 00 53 6F 6C 76 65 69 67 00 00 00 00 .....Solveig....
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 3F 5F B0 .............?_.
0050 48 76 03 00 00 31 00 00 00 00 00 00 00 00 00 00 Hv...1..........
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53 6F ..............So
0080 6C 76 65 69 67 00 00 00 00 00 00 00 00 00 00 00 lveig...........
0090 00 00 00 00 00 00 AD 60 B0 48 79 03 00 00 32 00 .......`.Hy...2.
00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00C0 00 00 00 00 00 00 00 53 6F 6C 76 65 69 67 00 00 .......Solveig..
00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CF ................
00E0 60 B0 48 7A 03 00 00 32 00 00 00 00 00 00 00 00 `.Hz...2........
00F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

12 192.168.1.100:1520 217.112.84.14:5122 6 Send
0000 41 02 6E 03 00 00 A.n...

13 217.112.84.14:5122 192.168.1.100:1520 640 Recv
0000 42 02 71 00 6E 03 00 00 31 00 00 00 00 00 00 00 B.q.n...1.......


Это то что получилось с почтой,
В чем была ошибка при отсылание пакетов тоже понял, осталась маленькая загвоздка , как выцепить из ответа сервера номер письма он выделен 6E 03 00 00 в каком направление плыть ? просто пытаюсь на примерах разобрать, но упираюсь в то что пакет 0240 не разбираеться в Receive.pm. На путь дальнейший поставьте :oops:
Straus
Начинающий
Сообщения: 35
Зарегистрирован: Пт мар 02, 2007 4:20 pm

Сообщение Straus »

продолжу разговор сам с собой, нашел как прочитать пакет от сервера даже сделал это

sub mail_handler {
my ($self, $args) = @_;

my $msg = $args->{RAW_MSG};
my $msg_size = unpack("v1",substr($msg, 2, 2));
#my $ID = $args->unpack("v1", substr($msg, 9, 2));

for (my $i = 8; $i < $msg_size; $i += 73) {

my $nameID = unpack("h4", substr($msg, $i , 4));
my $Name = unpack("a24", substr($msg, $i + 45, 24));
my $Topic = unpack("a40", substr($msg, $i + 4, 40));

message(swrite(
"@<<<<<<<<@<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<< ",
[ $nameID,$Name, $Topic]),
"list");

}
}

Опять вопрос, мне это надо как-то использовать, как это предать куда -нибудь, в макрос например, и интересно я правильно определил код письма ?

my $nameID = unpack("h4", substr($msg, $i , 4));
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

Добавь хук сюда и потом используй в плагинах/макросах
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Straus
Начинающий
Сообщения: 35
Зарегистрирован: Пт мар 02, 2007 4:20 pm

Сообщение Straus »

примерчик бы самый простенький, а то на форуме коры ссылка на вызов hook не работает. а приведенный в пособие как писать плагины показывает как то не совсем понятно.

Да функцию я добавил в src/Network/Receive.pm так как пакет с почтой кора просто игнорировала.
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

Код: Выделить всё

Plugins::callHook('<название_хука>');
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Ответить