Topic: /announce (coloured)
Думаю кому-нибудь эта тема должна пригодится.
Если сделаете все верно , то получите себе на сервер красный(error) серый(цвет как /me) белый(обычное сообщение) announce:)
пишу практически на понятном русском языке :)
/redann
/whann
/grann
1)добавить после строки (~262)
static int _handle_announce_command(t_connection * c, char const * text);
строки
static int _handle_announcered_command(t_connection * c, char const * text);
static int _handle_announcewhite_command(t_connection * c, char const * text);
static int _handle_announcegray_command(t_connection * c, char const * text);
2)добавить после строки(~384)
{ "/announce" , _handle_announce_command },
строки
{ "/redann" , _handle_announcered_command },
{ "/whann" , _handle_announcewhite_command },
{ "/grann" , _handle_announcegray_command },
3)после кода(в строке ~2050)
static int _handle_announce_command(t_connection * c, char const *text)
{
unsigned int i;
t_message * message;
for (i=0; text[i]!=' ' && text[i]!='\0'; i++); /* skip command */
for (; text[i]==' '; i++);
if (text[i]=='\0')
{
message_send_text(c,message_type_info,c,"usage: /announce <announcement>");
return 0;
}
snprintf(msgtemp, sizeof(msgtemp), "%.64s: %.128s",conn_get_username(c),&text[i]);
if (!(message = message_create(message_type_broadcast,c,msgtemp)))
message_send_text(c,message_type_info,c,"Could not broadcast message.");
else
{
if (message_send_all(message)<0)
message_send_text(c,message_type_info,c,"Could not broadcast message.");
message_destroy(message);
}
return 0;
}
добавить вот это (тупо копирование и изменение названия и типа сообщения и ещё пару моментов)
static int _handle_announcewhite_command(t_connection * c, char const *text)
{
unsigned int i;
t_message * message;
for (i=0; text[i]!=' ' && text[i]!='\0'; i++); /* skip command */
for (; text[i]==' '; i++);
if (text[i]=='\0')
{
message_send_text(c,message_type_info,c,"usage: /announce <announcement>");
return 0;
}
snprintf(msgtemp, sizeof(msgtemp), "%.0s%.128s%.0s",conn_get_username(c),&text[i]);
if (!(message = message_create(message_type_talk,c,msgtemp)))
message_send_text(c,message_type_info,c,"Could not broadcast message.");
else
{
if (message_send_all(message)<0)
message_send_text(c,message_type_info,c,"Could not broadcast message.");
message_destroy(message);
}
return 0;
}
static int _handle_announcegray_command(t_connection * c, char const *text)
{
unsigned int i;
t_message * message;
for (i=0; text[i]!=' ' && text[i]!='\0'; i++); /* skip command */
for (; text[i]==' '; i++);
if (text[i]=='\0')
{
message_send_text(c,message_type_info,c,"usage: /announce <announcement>");
return 0;
}
snprintf(msgtemp, sizeof(msgtemp),":%.0s %.128s",conn_get_username(c),&text[i]);
if (!(message = message_create(message_type_emote,c,msgtemp)))
message_send_text(c,message_type_info,c,"Could not broadcast message.");
else
{
if (message_send_all(message)<0)
message_send_text(c,message_type_info,c,"Could not broadcast message.");
message_destroy(message);
}
return 0;
}
static int _handle_announcered_command(t_connection * c, char const *text)
{
unsigned int i;
t_message * message;
for (i=0; text[i]!=' ' && text[i]!='\0'; i++); /* skip command */
for (; text[i]==' '; i++);
if (text[i]=='\0')
{
message_send_text(c,message_type_info,c,"usage: /announce <announcement>");
return 0;
}
snprintf(msgtemp, sizeof(msgtemp), "%.64s: %.128s",conn_get_username(c),&text[i]);
if (!(message = message_create(message_type_error,c,msgtemp)))
message_send_text(c,message_type_info,c,"Could not broadcast message.");
else
{
if (message_send_all(message)<0)
message_send_text(c,message_type_info,c,"Could not broadcast message.");
message_destroy(message);
}
return 0;
}
во вложениях сам файл(если неполучается скомпилить или чтонибудь не так ввели(файл из последней версии pvpgn на данный момент этот файл из SVN 1.99...))
после всех этих действий , вам останется только добавить команды в command_groups.conf
для тестирования announce, добавьте там строку
1 /whann /redann /ann /grann
собирать лучше с помощью проги от harpywar
code.google.com/p/pvpgn-magic-builder/
magic-builder
если при компиляции вылетает ошибки о недостатке файла afxres и т.п, то я просто скопировал эти файлы в папку с исходниками(source) из папки module\include\vsexpress_include\
15 minutes and 15 seconds after:
на данный момент меня интересует как сделать защиту от флуда анонсами ? :)
30 minutes and 6 seconds after:
ещё можно сделать массовое ЛС, просто заменив тип сообщение на тип whisper