@main / или как подружить кору с этим чатом [решено]

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

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

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Аватара пользователя
Xmpe
Бывалый
Сообщения: 751
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe »

Global symbol "@main" requires explicit package name at F:/___194SVN5618/src/Net
work/Receive.pm line 4268.
Compilation failed in require at openkore.pl line 57.
BEGIN failed--compilation aborted at openkore.pl line 57.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Стандартная еА держит эту команду. Так что проблемы c отладкой и с русским в WPE - это не проблемы. Вот пример понаглядней (герой почти везде "произносит" один символ - восклицательный знак):

@main-чат:

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

1  127.0.0.1:1233  127.0.0.1:5121  22  Send  
0000  F3 00 16 00 56 41 53 49 4C 49 59 20 3A 20 40 6D    ....VASILIY : @m
0010  61 69 6E 20 21 00                                  ain !.

2  127.0.0.1:5121  127.0.0.1:1233  24  Recv  
0000  8D 00 18 00 00 00 00 00 4D 61 69 6E 40 56 41 53    ........Main@VAS
0010  49 4C 49 59 3A 20 21 00                            ILIY: !.
Обычный публичный чат:

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

1  127.0.0.1:5121  127.0.0.1:4664  23  RecvFrom  
0000  8D 00 17 00 83 84 1E 00 50 6F 74 74 65 72 20 3A    ........Potter :
0010  20 68 65 6C 6C 6F 00                                hello.
свои собственные слова:

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

1  127.0.0.1:1233  127.0.0.1:5121  16  Send  
0000  F3 00 10 00 56 41 53 49 4C 49 59 20 3A 20 21 00    ....VASILIY : !.

2  127.0.0.1:5121  127.0.0.1:1233  16  Recv  
0000  8E 00 10 00 56 41 53 49 4C 49 59 20 3A 20 21 00    ....VASILIY : !.
админский /b-чат (желтый)

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

1  127.0.0.1:1233  127.0.0.1:5121  15  Send  
0000  99 00 0F 00 56 41 53 49 4C 49 59 3A 20 21 00       ....VASILIY: !.

2  127.0.0.1:5121  127.0.0.1:1233  15  Recv  
0000  9A 00 0F 00 56 41 53 49 4C 49 59 3A 20 21 00       ....VASILIY: !.
админский /bb-чат (голубой)

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

1  127.0.0.1:1233  127.0.0.1:5121  10  Send  
0000  99 00 0A 00 62 6C 75 65 21 00                      ....blue!.

2  127.0.0.1:5121  127.0.0.1:1233  10  Recv  
0000  9A 00 0A 00 62 6C 75 65 21 00                      ....blue!.
зеленый системный чат, фрагмент

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

3  127.0.0.1:1233  127.0.0.1:5121  20  Send  
0000  F3 00 14 00 56 41 53 49 4C 49 59 20 3A 20 40 68    ....VASILIY : @h
0010  65 6C 70 00                                        elp.

4  127.0.0.1:5121  127.0.0.1:1233  2048  Recv  
0000  8E 00 13 00 48 65 6C 70 20 63 6F 6D 6D 61 6E 64    ....Help command
0010  73 3A 00 8E 00 5A 00 54 6F 20 75 73 65 20 6F 6E    s:...Z.To use on
0020  65 20 63 6F 6D 6D 61 6E 64 2C 20 74 79 70 65 20    e command, type 
0030  69 74 20 69 6E 73 69 64 65 20 74 68 65 20 6D 65    it inside the me
0040  73 73 61 67 65 20 77 69 6E 64 6F 77 20 77 68 65    ssage window whe
...
приватный чат, пм:

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

1  127.0.0.1:5121  127.0.0.1:1233  30  Recv  
0000  97 00 1E 00 50 6F 74 74 65 72 00 00 00 00 00 00    ....Potter......
0010  00 00 00 00 00 00 00 00 00 00 00 00 21 00          ............!.
* * *

Btw:
2005/12/26
...
* Implemented main chat (global chat channel). Usage: @main <on|off>, @main <message>. [LuzZza]
и
2006/01/22
...
* Some changes of @main. Now you can send main-chat messages by sending whisper
to nick "Main" (or any other, it can be set in inter_athena.conf).[LuzZza]
А вот этого я что-то вообще не вижу:

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

			sprintf(atcmd_output, msg_txt(386), sd->status.name, message);
			// I use 0xFE000000 color for signalizing that this message is
			// main chat message. 0xFE000000 is invalid color, same using
			// 0xFF000000 for simple (not colored) GM messages. [LuzZza]
			intif_announce(atcmd_output, strlen(atcmd_output) + 1, 0xFE000000, 0);
Афтар, оно что, каким-то особенным цветом отображается? У меня обычным белым пишет.

* * *
R 008c <len>.w <str>.?B
’КЏн”­Њѕ‘—ђMЃBѓ`ѓѓѓbѓg’†‚Нѓ`ѓѓѓbѓg“а”­Њѕ—p‚Й‚И‚й
send normal speech. it become a speech for chat during a chat
ђж“Є‚М"<nick> : "‚М•”•Є‚НѓNѓ‰ѓCѓAѓ“ѓg‘¤‚Е•t‚Ї‚йЋ–
client adds "<nick> : " part.

R 008d <len>.w <ID>.l <str>.?B
ID‚і‚с‚М”­ЊѕЋуђMЃBѓ`ѓѓѓbѓg’†‚Нѓ`ѓѓѓbѓg“а”­Њѕ—p‚Й‚И‚й
receive a speech by ID. it become speech for chat during a chat

R 008e <len>.w <str>.?B
Ћ©•Є‚М”­ЊѕЋуђMЃBѓ`ѓѓѓbѓg’†‚Нѓ`ѓѓѓbѓg“а”­Њѕ—p‚Й‚И‚й
receive my character's speech. it become speech for chat during a chat

...

R 0097 <len>.w <nick>.24B <message>.?B
wisЋуђM
receive wisper
...

R 009a <len>.w <message>.?B
GM‚©‚з‚М“V‚Мђє
GM announce
* * *

Хм! У этих еА-шников x8D пакет засылается из разных место одинаковыми процедурами. Ню-ню.. :

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

int clif_message(struct block_list *bl, const char* msg)
{
	unsigned short msg_len = strlen(msg) + 1;
	unsigned char buf[256];

	nullpo_retr(0, bl);

	WBUFW(buf, 0) = 0x8d;
	WBUFW(buf, 2) = msg_len + 8;
	WBUFL(buf, 4) = bl->id;
	memcpy(WBUFP(buf, 8), msg, msg_len);

	clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC);	// by Gengar

	return 0;
}
В одном месте есть интересное замечание - "Works like 'announce' but outputs in the common chat window".
Последний раз редактировалось piroJOKE Пт май 04, 2007 3:17 pm, всего редактировалось 11 раз.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Xmpe
Ем.. попробуй поменять все @ на \@ точнее там где выдаёт ошибку.


ЗЫ: Я же говорил что не тестил.
Аватара пользователя
Xmpe
Бывалый
Сообщения: 751
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe »

пишеться обычным белым, заменить попробую чуть позже
ешё бы сделать бы это отдельно, чтобы алертсаунд на него не реагировал
отдельно Public и отдельно Main
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

А вот кое-что про это на форуме ОпенКоры:
http://forums.openkore.com/viewtopic.php?t=28736 ("@main chat")
(Типо, у нас всё работает, это вы чо-та там не включили!).

* * *

Ого, у меня еще веселее:
c @main
Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
c @main on
Main chat has been activated.
(---- здесь я засылаю чат, и... ----)
This program has encountered an unexpected problem. This is probably because
of a bug in this program. Please tell us about this problem.

The error message is:
Can't call method "name" on an undefined value at
C:/........../194SVN5597-local/plugins/alertsound.pl line 152.

A more detailed error report is saved to errors.txt. Please include the
contents of this file in your report, or we may not be able to help you!
Press ENTER to exit this program.
И чего они этим хотели сказать? Строка №152:
if (Utils::existsInList($config{"alertSound_".$i."_eventList"}, $event)
* * *
Тут ничего интересного, это мы уже видели:
Connecting to Map Server...
Connecting (127.0.0.1:5121)... connected
Requesting guild information...
You are now in the game
Your Coordinates: 53, 91
eAthena SVN version: Unknown
Welcome to eAthena SVN Version! Enjoy! Please report any bugs you find in
eAthena :).
c @main
Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
c @main on
Main chat has been activated.
c @main hello world
[dist=unknown] ():
Заслал это на форум OpenKore, чоб было.
Последний раз редактировалось piroJOKE Чт май 03, 2007 4:03 pm, всего редактировалось 2 раза.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Xmpe
Бывалый
Сообщения: 751
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe »

кстати ещё заметил багу, но ето уже не к мейну но раз речь о чатах
на русро гоняю в xkore 1
пишу с клиента общаюсь
пока немогу сказать с какого момента начинаеться
но кора начинает отставать на 2 мессаги
1) pm Вася приват
2) pm Вася как дела ?
3) pm неподскажешь бла бла бла
когда я пишу третью в коре отображаеться токо первая и заноситься в лог
Далее пишу Коле, который оффлайн,
в коре "Вася из нот онлайн"
Пишу Саше ещё привет в коре вылезает
"To Коля: привет"

При релогине бага пропадает
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Визуализировал процедуру KM'а, чоб было понятно, что вообще происходит. (Я еще не пробовал ее, просто посмотрел, ЧТО сделал КМ).

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

sub public_chat {
	my ($self, $args) = @_;
	# Type: String
	my $message = bytesToString($args->{message});
	my ($chatMsgUser, $chatMsg); # Type: String

	($chatMsgUser, $chatMsg) = $message =~ /(.*?) : (.*)/;
	$chatMsgUser =~ s/ $//;
	stripLanguageCode(\$chatMsg);

+	if ($args->{ID} > 0) {
	my $actor = Actor::get($args->{ID});

	my $dist = "unknown";
	if (!$actor->isa('Actor::Unknown')) {
		$dist = distance($char->{pos_to}, $actor->{pos_to});
		$dist = sprintf("%.1f", $dist) if ($dist =~ /\./);
	}

	$message = "$chatMsgUser ($actor->{binID}): $chatMsg";

	# this code autovivifies $actor->{pos_to} but it doesnt matter
	chatLog("c", "[$field{name} $char->{pos_to}{x}, $char->{pos_to}{y}] [$actor->{pos_to}{x}, $actor->{pos_to}{y}] [dist=$dist] ($actor->{nameID})" .
		"$message\n") if ($config{logChat});
	message TF("[dist=%s] %s\n", $dist, $message), "publicchat";
+	} else {
+		chatLog("c", "\@main [$field{name}] " .
+		"$message\n") if ($config{logChat});
+		$message = "$chatMsgUser (@main): $chatMsg";
+	}

	ChatQueue::add('c', $args->{ID}, $chatMsgUser, $chatMsg);
	Plugins::callHook('packet_pubMsg', {
		pubID => $args->{ID},
		pubMsgUser => $chatMsgUser,
		pubMsg => $chatMsg,
		MsgUser => $chatMsgUser,
		Msg => $chatMsg
	});
}
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
Поясню что Я зделал. Заметил что в теле тех сообщений ИД == 00 00 00 00. Соответвенно добавил условие на проверку ИД, и если ИД == 0 то пишем обычную мессагу в чатлог. Только вот забыл что должно быть так (ибо сначала формируем мессагу, потом выводим):
+ $message = "$chatMsgUser (@main): $chatMsg";
+ chatLog("c", "\@main [$field{name}] " .
+ "$message\n") if ($config{logChat});
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

После того, как я расставил "плюсики", я уже все понял. Это - для остальных юзеров. Кстати, это нифига не работает. Примерно такое выходит:

c @main hello
[dist=unknown] (@main):

* * *

Я не уверен, но по-моему проблема где-то здесь:
($chatMsgUser, $chatMsg) = $message =~ /(.*?) : (.*)/;
Походу, текст сообщения попадает куда-то "не туда". Строго говоря, тут вообще регэкспы не в тему (имхо): все поля заголовка имеют фиксированный размер!
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Xmpe
Бывалый
Сообщения: 751
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe »

Затестил то что написал км, теперь в консоли ничего непишеться :)
только алертсаунд орёт.

з.ы. открыл лог, в нём всё норм :)

[May 3 17:42:32 2007][C] @main [***_***0*] Main@Xmpe: блаблабла
Последний раз редактировалось Xmpe Чт май 03, 2007 4:47 pm, всего редактировалось 1 раз.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Xmpe
Потому что мессага не успела сформироватся пока оно выводило во внутренний лог, а уже когда сохранялось в файл, оно сформировало сообщение. потому так вышло, гляньте последнее исправление которое я писал немного ранее, должно пахать и выводить нормально.
Аватара пользователя
Xmpe
Бывалый
Сообщения: 751
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe »

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

Сообщение kLabMouse »

Xmpe
Ет алертсайнд нужно будет править.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Xmpe писал(а):то что написал км
Блин. Там по идее уже есть оба обработчика, которые пишут "unknown" (юзер, дистанц), а вы далее огород с условиями городите!
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Xmpe
Бывалый
Сообщения: 751
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe »

Все пляски с
$message = "$chatMsgUser (@main): $chatMsg";
+ chatLog("c", "\@main [$field{name}] " .
+ "$message\n") if ($config{logChat});
в итоге никчему непривели :( ни в консоль ни в лог не пишет.
Ответить