Назад

Антимат =)

Автор: 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 вписываете мат, например:

bla
сука
и т.д.

Автор: Respect: Дата: 07.01.2010

Майкрософт визуал установлен?если нет установи

Автор: ValikDRV: Дата: 07.01.2010

Установлен. Microsoft Visual Studio 2005 вроде.

Visual Studio и компилил при компилировании ошибок НЕБЫЛО, а тут такое:(

Помогите, пожалуйста.

Автор: nomn: Дата: 07.01.2010

Цитата Incubus;24484:
решил выложить свой антимат.


[COLOR="Indigo"]в с мысле антимат akrus'a?
[/COLOR]

Автор: Rectedo: Дата: 07.01.2010

оффтоп: Ржу нимагу над украинским))) Перервати - Повторити - пропустити
nomn не бань меня плиииз!!)

Автор: ValikDRV: Дата: 07.01.2010

nomn не бань меня плиииз!!)


Если админ посчитает, что ты что-то нарушаеш он тебя забанет даже с твоими "не бань меня плиз" (я на это надеюсь).

Автор: Incubus: Дата: 07.01.2010

в с мысле антимат akrus'a?
Свой, а не akrus'a.
Даже принцип разный.

Как устранить? Помогите, пожалуйста:)


Судя по ошибке в мап сервере, просто переведя ее:
Не все ip адреса в map_athena.conf настроены.
По поводу ошибки библиотеки, ничего не могу сказать.