• Страница 1 из 1
  • 1
Модератор форума: MD_Shved  
GM PORTAL(ФОРУМ) » МЕТИН 2 » РУКОВОДСТВА » РУКОВОДСТВА ПО СОЗДАНИЮ СЕРВЕРОВ Метин 2 » [C++]Улучшение чата & защита от спама.
[C++]Улучшение чата & защита от спама.
VeryBad Дата: Четверг, 21.08.2014, 18:52 | Сообщение # 1
    Пирятин
    Сообщений: 36
    Награды: 0
    Репутация: 18
    Статус:
    Награды
Здравствуйте, эта тема создана для того, чтобы защитить игровой чат от лишних идиотов. Что будет добавлено:
 - Игрок сможет написать сообщение повторно только через 5 секунд.
 - Игрок получит бан чата на 1 минуту, если попытается написать одно сообщение более, чем 3 раза в течении 5 секунд.
 - В файл "blockspamlist.lst" можно написать слова, которые не можно будет писать в чате, если игрок напишет слово из этого файла, он получит бан чата на 5 минут (время можно изменить).
 - В файл "bannspamlist.lst" можно написать слова, которые не можно будет писать в чате, если игрок напишет слово из этого файла, он получит
бан чата на длительный период.(время можно изменить).
_________________________________________
Открываем game/input_main.cpp и ищем: 
Код
if (ch->IncreaseChatCounter() >= 10)
После этого добавляем:

Код
if (!strcmp(ch->LastPlayerMessage, buf) && (thecore_pulse() < (ch->LastMessageAt +  
SPAM_WAIT_SEC * 25)) && !ch->SpamAllowBuf(buf) &&  
ch->GetGMLevel() < GM_LOW_WIZARD)
{
     if (ch->BlockChatAfter < 2)
     {
         ch->ChatPacket(CHAT_TYPE_INFO, ("Повторить свое сообщение можно только через 5 секунд. "));
         ch->BlockChatAfter++;
         return iExtraLen;
     }
     else
     {
         ch->BlockChatAfter = 0;
         ch->PlayerPunish(false, SPAM_CHAT_BAN_TIME);
         return iExtraLen;
     }
}
else
{
     if (!ch->BannListCheck(buf) && ch->GetGMLevel() < GM_LOW_WIZARD)
     {
         ch->PlayerPunish(true, SPAM_BAN_TIME);
         return iExtraLen;
     }
     if (!ch->SpamListCheck(buf) && ch->GetGMLevel() < GM_LOW_WIZARD)
     {
         ch->ChatPacket(CHAT_TYPE_INFO, ("В вашем тексте запрещенные слова!"));
         ch->PlayerPunish(false, SPAM_CHAT_BAN_TIME);
         return iExtraLen;
     }
}

После этого ищем:

Код
ch->GetMapIndex(), strlen(ch->GetName())));
и добавляем после него:

Код
strcpy(ch->LastPlayerMessage, buf);
ch->LastMessageAt = thecore_pulse();
ch->BlockChatAfter = 0;
Открываем game/char.h и ищем:

Код
BYTE            GetChatCounter() const;
и добавляем после него:

Код
int             LastMessageAt;
int             BlockChatAfter;
char            LastPlayerMessage[CHAT_MAX_LEN + 1];
void            PlayerPunish(bool PowerPunish, int Duration);
bool            SpamListCheck(const char *Message);
bool            BannListCheck(const char *Message);
bool            SpamAllowBuf(const char *Message);
Открываем game/char.cpp и добавляем:

Код
void CHARACTER::PlayerPunish(bool PowerPunish, int Duration)
{
     if (!PowerPunish)
     {
         AddAffect(AFFECT_BLOCK_CHAT, POINT_NONE, 0, AFF_NONE, Duration, 0, true);
         sys_log(0, "%s[%d] has been chatbanned because of spamming/writing words which are in the spamlist.txt", GetName(), GetPlayerID());
     }
     else
     {
         std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET availDt = FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) + %i) WHERE id = %d", Duration, GetAID()));
         sys_log(0, "%s[%d] has been banned because of saying blacklisted word", GetName(), GetPlayerID());
         GetDesc()->DelayedDisconnect(5);
     }
}
   
bool CHARACTER::SpamAllowBuf(const char *Message)
{
     if (!strcmp(Message, "(Ȳ´ç)") || !strcmp(Message, "(µ·)") || !strcmp(Message, "(±â»Ý)") || !strcmp(Message, "(ÁÁľĆ)") || !strcmp(Message, "(»ç¶ű)") || !strcmp(Message, "(şĐłë)") || !strcmp(Message, "(ľĆÇĎ)") || !strcmp(Message, "(żěżď)") || !strcmp(Message, "(ÁËĽŰ)"))
     {
         return true;
     }
   
     return false;
}
   
bool CHARACTER::SpamListCheck(const char *Message)
{
     for (int i = 0; i < SpamBlockListArray.size(); i++)
     {
         if (!strcmp(Message, SpamBlockListArray[i].c_str()))
         {
             return false;
         }
     }
   
     return true;
}
   
bool CHARACTER::BannListCheck(const char *Message)
{
     for (int i = 0; i < SpamBannListArray.size(); i++)
     {
         if (!strcmp(Message, SpamBannListArray[i].c_str()))
         {
             return false;
         }
     }
   
     return true;
}
Создаем 2 файла
  • spamblock.cpp
  • spamblock.h

Открываем spamblock.cpp и в него вставляем:

Код
#include "fstream"
#include "string"
#include "sstream"
#include "stdafx.h"
#include "../../common/length.h"
   
   
std::vector<std::string> SpamBlockListArray;
std::vector<std::string> SpamBannListArray;
   
void LoadBlockSpamList()
{
     std::string TempBlockList;
     std::ifstream File("chat/blockspamlist.lst");
   
     if (!File.is_open())
     {
         sys_log(0, "WARNING: cannot open chat/blockspamlist.lst");
         return;
     }
   
     SpamBlockListArray.clear();
   
     while (!File.eof())
     {
         File >> TempBlockList;
         SpamBlockListArray.push_back(TempBlockList);
     }
   
     File.close();
}
   
void LoadBannSpamList()
{
     std::string TempBannList;
     std::ifstream File("chat/bannspamlist.lst");
   
     if (!File.is_open())
     {
         sys_log(0, "WARNING: cannot open chat/bannspamlist.lst");
         return;
     }
   
     SpamBannListArray.clear();
   
     while (!File.eof())
     {
         File >> TempBannList;
         SpamBannListArray.push_back(TempBannList);
     }
   
     File.close();
}
Открываем spamblock.h и в него вставляем:

Код
#include "string"
#include "../../common/length.h"
   
   
extern void LoadBlockSpamList();
extern void LoadBannSpamList();
extern std::vector<std::string> SpamBlockListArray;
extern std::vector<std::string> SpamBannListArray;
Добавляем это в  game/char.cpp:

Код
#include "spamblock.h"
Добавляем это в  game/main.cpp:

Код
#include "spamblock.h"
Ищем это в game/main.cpp:

Код
PanamaLoad();
После этого добавляем:

Код
LoadBlockSpamList();
LoadBannSpamList();
Открываем common/length.h и добавляем это:

Код
SPAM_WAIT_SEC               = 5,  
SPAM_CHAT_BAN_TIME      = 60,  
SPAM_BAN_TIME               = 3600,
Открываем game/cmd_gm.cpp и ищем:

Код
ACMD(do_reload)
Добавляем это после "switch" функции:

Код
case 'b':
     ch->ChatPacket(CHAT_TYPE_INFO, "Reloading bann/spam list infomations.");
     LoadBlockSpamList();
     LoadBannSpamList();
     sys_log(0, "Reloading bann/spam list infomations.");
     break;
В этом же файле добавляем в самый верх:

Код
#include "spamblock.h"
_________________
Послед. шаги:
1) Переверяем, все ли правильно.
2) В каждой папке канала создаем новую папку  - chat.
3) В этой папке создаем 2 файла - blockspamlist.lst и bannspamlist.lst.
4) Добавить слова в эти файлы.
5) Перезагрузите сервер.

blockspamlist.lst пример:

Код
obsceneword1
obsceneword2
obsceneword3
obsceneword4
bannspamlist.lst пример:

Код
WWW.CHEAP-FARM-SERVICE.COM
WWW.CHEAP-GOLD.COM
WWW.EASY-HACKS.COM
WWW.FREE-YANG.COM

Гайд создан Sanchez'ом, переведен мною специально для olbaid.ru
 
GM PORTAL(ФОРУМ) » МЕТИН 2 » РУКОВОДСТВА » РУКОВОДСТВА ПО СОЗДАНИЮ СЕРВЕРОВ Метин 2 » [C++]Улучшение чата & защита от спама.
  • Страница 1 из 1
  • 1
Поиск:

Статистика Форума
Последние обновленные темы Самые популярные темы Самые активные Новые участники
  • ВОПРОСИК
  • Все команды и ID
  • BlackRaven
  • [RELEASE] Metin2 Карта инструмент v1.3 - Создайте свою собст
  • [Hades World] - International -> Join us!
  • [Hades World] - International -> Join us!
  • CrazyMT2-RUSSIA
  • Защита от досса
  • [SF] The Dark.
  • [SERVERFILE] Serenity2
  • Metin2 Serene v1
  • ВОПРОСИК
  • ๖ۣۜGAniviaMT๖ۣۜG SF+CLIENT๖ۣۜG
  • Mt2WordOnline(Rus)
  • [HowTo]Server file by Bancaq, руководство для новичков.
  • Гайды по созданию сервера Metin2 на Хамачах
  • [SF]crazymt2
  • ЗАПУСКАЕМ 2011 СФ НА ХАМАЧАХ
  • [SF] The Dark.
  • [Release] Server Files Develope
  • NOMED(999)
  • Vagabund(652)
  • Cs_pRo45_RBK_Shtorm(286)
  • 1DJONIK1(201)
  • Jase(193)
  • Inferno(159)
  • Nakiner3190(146)
  • Nagato(137)
  • MrBloodyKill(126)
  • MD_Shved(118)
  • kuma_914:04-Среда
    Kessias11:24-Среда
    mykolarememivit22:25-Суббота
    milkydadm18:50-Пятница
    reiiiet12:40-Среда
    ostap106201:05-Суббота
    mishasaltan9120:27-Вторник
    vitaliy1202199213:18-Вторник
    nazarbartush05:06-Вторник
    bartusholegg05:05-Вторник

    Лучшая рип студия!