Как установить фильтр Анти-мата на сервере MU Online: файлы, помощь

Автор SenD, 2011 Июнь 12, 19:26

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] установкасервер mu onlineфильтр анти-мата

SenD

как установить фильтр Анти-мата на сервер?

Sky_

#1
1. Заменить файлик в Data/Local https://x-mu.net/index.php?showtopic=10100
2. А вот кусок кода для дллки:
Спойлер
void gObjChatBannedTime(int aIndex)
{
int PlayerID = aIndex-MIN_PLAYERID;

pObj[PlayerID].uPostBan = ANTIMAT.PunishBanPostTime*60;

while(true)
{
_beginthread( ChatRecerveTimeGo, 0, NULL  );
pObj[PlayerID].uPostBan -= 1;
if(pObj[PlayerID].uPostBan == 0)
break;
}
}
[свернуть]
на lcteam.ru форуме был готовый код, только сейчас домен под мамонтовский сервер перенаправлен.

Everybody

#2
Цитата: Sky_ от 2011 Июнь 12, 19:17  ...на lcteam.ru форуме был готовый код, только сейчас домен под мамонтовский сервер перенаправлен.
[Source][C++] Анти-Мат система

Антим Мат система с подменой матных слов на "*",есть наказаниями, для работы наказаний, требует новых глоб. переменных,и место где хранить уровень наказаний.

AntiMat.h
#include "StdAfx.h"

#define MAX_ANTIMAT 2000

struct ANTIMATDATA
{
int aIndex;
char szWord[200];
};

class CAntiMat
{
public:
void Init();
void LoadFile(char *filename);
void Manager(int aIndex,char* Msg);

void Insert(int iIndex, char *szWord);

ANTIMATDATA m_Anti[MAX_ANTIMAT];

int PunishZen;
int PunishPoints;
int PunishDC;

}; extern CAntiMat ANTIMAT;

AntiMat.cpp
#include "AntiMat.h"
#include "GameServer.h"
#include "Protocol.h"
#include "SMDToken.h"
#include "Log.h"
#include "NewQuery.h"
#include "PCPoint.h"
#include "DuelSystem.h"

CAntiMat ANTIMAT;
ANTIMATS AntiMat[OBJ_MAX];

void CAntiMat::Init()
{
for(int i=0;i<MAX_ANTIMAT;i++)
{
this->m_Anti[i].aIndex = -1;
}

PunishZen = GetPrivateProfileInt("AntiMat","PunishZen",100000,"./LCTeam.ini");
PunishPoints = GetPrivateProfileInt("AntiMat","PunishPoints",2,"./LCTeam.ini");
PunishDC = GetPrivateProfileInt("AntiMat","PunishDC",1,"./LCTeam.ini");
}

void CAntiMat::LoadFile(char *filename)
{
this->Init();

if((SMDFile = fopen(filename, "r")) == NULL)
{
MessageBoxA(0,"CAntiMat::LoadFile() error","CRITICAL ERROR",0);
ExitProcess(1);
return;
}

SMDToken Token;
int iIndex;
char szWord[200] = {0};

while(true)
{
Token = GetToken();

if(Token == END)
break;

if(Token == NUMBER)
{
iIndex = TokenNumber;

while(true)
{
Token = GetToken();

if(strcmp("end",TokenString) == 0)
break;

iIndex = TokenNumber;

Token = GetToken();
memcpy(szWord,TokenString,sizeof(szWord));

this->Insert(iIndex,szWord);
//Log.outError("Added[%d][%s]",iIndex,szWord);
}
}
}

fclose(SMDFile);
return;
}

void CAntiMat::Insert(int iIndex, char *szWord)
{
this->m_Anti[iIndex].aIndex = iIndex;
strcpy(this->m_Anti[iIndex].szWord,szWord);
}

void CAntiMat::Manager(int aIndex, char *Msg)
{
OBJECTSTRUCT *gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);

int count=0;
for(int i=0;i<MAX_ANTIMAT;i++)
{
if(this->m_Anti[i].aIndex != -1)
{
if(_tcsstr(Msg, _T(this->m_Anti[i].szWord)))
{
char * pch;
pch = strstr (Msg,this->m_Anti[i].szWord);
strncpy (pch,"*****************",strlen(this->m_Anti[i].szWord)-1);
Log.outError("Used Word : %s",this->m_Anti[i].szWord);
Log.outError("Msg : %s",Msg);
count++;
//return;
}
}
}

Log.outError("%d",count);

if(count > 0)
{
AntiMat[aIndex].Warning++;
Messages.outNormal(aIndex,"Stop using bad words. Warning [%d/8].",AntiMat[aIndex].Warning);

char dateStr [9];
char timeStr [9];
_strdate(dateStr);
_strtime(timeStr);

FILE* FileHwnd2;
FileHwnd2 = fopen("MyAntiMat.log","a+");
fprintf(FileHwnd2,""%s" "%s" "%s"n",gObj->Name,Msg,timeStr);
fclose(FileHwnd2);
}

if(AntiMat[aIndex].Warning == 3 && count > 0)
{
//AntiMat[aIndex].Warning = 0;
if(PunishZen > 0)
{
Messages.outNormal(aIndex,"You have been punished.");
gObj->Money -= PunishZen;
GCMoneySend(aIndex,gObj->Money);
Log.outNormal("Punished[%s][%s] Zen[%d][%d]",gObj->AccountID,gObj->Name,PunishZen,gObj->Money);
}
}

if(AntiMat[aIndex].Warning == 5 && count > 0)
{
if(PunishPoints > 0)
{
Messages.outNormal(aIndex,"You have been punished.");
gObj->Money -= PunishZen*2;
GCMoneySend(aIndex,gObj->Money);
Log.outNormal("Punished[%s][%s] Zen[%d][%d]",gObj->AccountID,gObj->Name,PunishZen*2,gObj->Money);
// Messages.outNormal(aIndex,"You have been punished.");
/* gObj->Strength -= PunishPoints;
gObj->Dexterity -= PunishPoints;
gObj->Vitality -= PunishPoints;
gObj->Energy -= PunishPoints;
gObj->Leadership -= PunishPoints;
GCUseEffectItem(gObj, 2, 1, 9, 0);*/
// Log.outNormal("Punished[%s][%s] Points[%d]",gObj->AccountID,gObj->Name,PunishPoints);
}
}

if(AntiMat[aIndex].Warning == 8 && count > 0)
{
AntiMat[aIndex].Warning = 0;

if(PunishDC > 0)
{
Messages.outNormal(aIndex,"You have been punished.");
CloseClient(aIndex);
Log.outNormal("Punished[%s][%s] Disconnected",gObj->AccountID,gObj->Name);
}
}
}

Protocol.cpp
case 0x00: //Chat proto
ChatDataSend(aIndex,aRecv);
break;

Commands.cpp
void ChatDataSend(DWORD gObjId,LPBYTE Protocol)
{
ANTIMAT.Manager(gObjId,(char*)Protocol+13);
}

Пример конфига :
0
//ID Word
0 "suka"
1 "pidor"
2 "лох"
3 "пидор"
end

Credits; SmallHabit

Спойлер
to MaMoHT: просто SteveMcQeen написал Спасибо SmallHabit, самому себе :rolleyes:
[свернуть]

MaMoHT

#3
Спойлер
SmallHabit и SteveMcQeen  один и тот же человек ^_^
[свернуть]

на lcteam.ru форуме был готовый код, только сейчас домен под мамонтовский сервер перенаправлен.
=
от всегда и был у меня просто ты этого не знал=)
как только появится время сразу же верну форум обратно=)

Похожие темы (5)