Автор: Incubus: Дата: 05.31.2010
Увидел тему маннер фильтр и решил выложить свой антимат.
Они разные, поэтому решать вам :)
Index: atcommand.c
===================================================================
--- atcommand.c (revision 14293)
+++ atcommand.c (working copy)
@@ -8530,11 +8530,21 @@
}
+int atcommand_reloadmanner(const int fd, struct map_session_data* sd, const char* command, const char* message)
+{
+ nullpo_retr(-1,sd);
+ load_badwords();
+ clif_displaymessage(fd,"Manner.conf перезагружен");
+ return 0;
+
+}
+
/*==========================================
* atcommand_info[] structure definition
*------------------------------------------*/
AtCommandInfo atcommand_info[] = {
+ { "reloadmanner", 99,99, atcommand_reloadmanner },
{ "rura", 40,40, atcommand_mapmove },
{ "warp", 40,40, atcommand_mapmove },
{ "mapmove", 40,40, atcommand_mapmove }, // + /mm
Index: clif.c
===================================================================
--- clif.c (revision 14293)
+++ clif.c (working copy)
@@ -8652,6 +8652,25 @@
clif_charnameack(fd, bl);
}
+ uint32 bwords_count = 0;
+ char* bwords[MAX_WORD];
+
+char* convert(char* str, char* str1)
+{
+ static char ruslet[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
+ static char englet[] = "ABVGDEEZ3IJKLMHOPRSTYFXC4WQN=6EU9ABVGDEEZ3IJKLMHOPRSTYFXC4WQN=6EU9";
+
+ int i,j;
+ for (i=0;i
+ {
+ str1 = tolower(str);
+ for (j=0;j
+ if (str==ruslet[j])
+ str1=englet[j];
+ }
+ return str1;
+}
+
/*==========================================
* Validates and processes global messages
* S 008c/00f3 .w .?B ( : ) 00
@@ -8660,10 +8679,13 @@
{
const char* text = (char*)RFIFOP(fd,4);
int textlen = RFIFOW(fd,2) - 4;
+ int i,k;
+ char line1[265];
char *name, *message;
int namelen, messagelen;
+ memset(line1, '\0', sizeof(line1));
// validate packet and retrieve name and message
if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) )
return;
@@ -8681,6 +8703,17 @@
sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
}
+ for(i = 0;i < bwords_count; i++)
+ {
+ while(strstr(convert(message,line1),bwords) != NULL)
+ {
+ strcpy(line1,strstr(line1,bwords));
+ for(k = 0;k < (strlen(bwords));k++)
+ message[strlen(message)-strlen(line1)+k] = '*';
+
+ strcpy(line1,message);
+ }
+ }
// send message to others (using the send buffer for temp. storage)
WFIFOHEAD(fd, 8 + textlen);
WFIFOW(fd,0) = 0x8d;
@@ -8741,6 +8774,53 @@
return;
}
+void break_badwords(void)
+{
+ int i;
+ for(i = 0;i < bwords_count; i++){
+ aFree(bwords);
+ bwords = NULL;
+ }
+ bwords_count = 0;
+ return;
+}
+
+void do_final_manner(void)
+{
+ break_badwords();
+ return;
+}
+
+void do_init_manner(void)
+{
+ load_badwords();
+ return;
+}
+
+void load_badwords(void)
+{
+ int k,i = 0;
+ char line[70];
+ char* fname = "conf/manner.conf";
+ FILE* fp = fopen(fname, "r");
+ break_badwords();
+ while(fgets(line, sizeof(line), fp))
+ {
+ if ((line[0] == '/' && line[1] == '/') || line[0] == '\0')
+ continue;
+
+ while ((k = strlen(line)) > 0 && isspace(line[k - 1]))
+ line[k - 1] = '\0';
+ bwords = (char *)aMalloc(sizeof (char *)*strlen(line));
+ convert(line,line);
+ memcpy(bwords,line,sizeof(char *)*strlen(line));
+ i++;
+ bwords_count++;
+ }
+ fclose(fp);
+ return;
+}
+
/*==========================================
* /mm /mapmove (as @rura GM command)
*------------------------------------------*/
@@ -14293,5 +14373,6 @@
add_timer_func_list(clif_clearunit_delayed_sub, "clif_clearunit_delayed_sub");
add_timer_func_list(clif_delayquit, "clif_delayquit");
+ load_badwords();
return 0;
}
Index: clif.h
===================================================================
--- clif.h (revision 14293)
+++ clif.h (working copy)
@@ -29,6 +29,7 @@
// packet DB
#define MAX_PACKET_DB 0x900
#define MAX_PACKET_VER 25
+#define MAX_WORD 1000
struct s_packet_db {
short len;
@@ -464,4 +465,9 @@
void clif_progressbar(struct map_session_data * sd, unsigned long color, unsigned int second);
void clif_progressbar_abort(struct map_session_data * sd);
+
+void do_init_manner(void);
+void do_final_manner(void);
+void load_badwords(void);
+
#endif /* _CLIF_H_ */
Index: map.c
===================================================================
--- map.c (revision 14293)
+++ map.c (working copy)
@@ -3388,7 +3388,9 @@
do_final_status();
do_final_unit();
do_final_battleground();
+ do_final_manner();
+
map_db->destroy(map_db, map_db_final);
for (i=0; i
@@ -3625,6 +3627,7 @@
do_init_npc();
do_init_unit();
do_init_battleground();
+ do_init_manner();
npc_event_do_oninit(); // npc‚МOnInitѓCѓxѓ“ѓg?Ќs
И дальше в файл conf\manner.conf вписываете мат, например:Автор: Respect: Дата: 07.01.2010
Майкрософт визуал установлен?если нет установи
Автор: ValikDRV: Дата: 07.01.2010
Установлен. Microsoft Visual Studio 2005 вроде.
Visual Studio и компилил при компилировании ошибок НЕБЫЛО, а тут такое:(
Помогите, пожалуйста.
Автор: nomn: Дата: 07.01.2010
Цитата Incubus;24484:
решил выложить свой антимат.
Автор: Rectedo: Дата: 07.01.2010
оффтоп: Ржу нимагу над украинским))) Перервати - Повторити - пропустити
nomn не бань меня плиииз!!)
Автор: ValikDRV: Дата: 07.01.2010
nomn не бань меня плиииз!!)
Автор: Incubus: Дата: 07.01.2010
в с мысле антимат akrus'a?Свой, а не akrus'a.
Как устранить? Помогите, пожалуйста:)