Sziasztok,
Valakinek nincs esetleg régről, vagy bárhonnan egy káromkodásszűrő scriptje?
Vagy valamilyen megoldása arra, hogy a káromkodásokat #&@$ jelekre cserélje?
Keresgéltem a fórumon, de nem találtam erre megoldást :(
Hello, van egy scriptem erre még régen írtam, adatbázisból szedi ki a káromkodásokat amiket tiltani szeretnél, egyetlen kis szépség hibája van, hogy a kis-nagy betűket megkülönbözteti ezért pl a szAr-t már nem írná felül ha a db-be csak szar-ként szerepel. ( egyik megoldása ennek ha a string karaktereit kisbetűvé alakítod vizsgálat előtt és utána vizsgáltatod pl: void lowerCase(string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
strToConvert[i] = tolower(strToConvert[i]);
}
}
SCRIPT :
/*
Készítette Tóth Máté (AximCore) 2012
*/
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");
if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}
do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());
}while(result->NextRow());
}
void GetCensuredWord(std::string& msg)
{
for(uint64 i=0; i<Words.size(); i++)
{
if(msg == Words[i] ){ msg = "!&@$ß"; }
}
}
void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg);
}
void OnChat(Player /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg);
}
};
void AddSC_System_Censure()
{
new System_Censure();
}
És a teljes megoldás :D :
/*
Készítette Tóth Máté (AximCore) 2012
*/
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");
if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}
do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());
}while(result->NextRow());
}
void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
strToConvert[i] = tolower(strToConvert[i]);
}
}
void GetCensuredWord(std::string& msg)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
if(msg == Words[i] ){ msg = "!&@$ß"; }
}
}
void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg);
}
void OnChat(Player /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg);
}
};
void AddSC_System_Censure()
{
new System_Censure();
}
World adatbázisba pedig csinálsz egy player_karomkodas táblát amibe a egy mezőt létrehozol ami típusa text tehát szöveg.
UI: Ez sem jó hiszen szöveg nem fog meg egyezni egy szóval. Ezért nem == operatorral kel hanem más fvgel pl find...
Nagyon szépen köszönöm!! :)
https://github.com/GMBlue/BlueCodes/blob/master/FunScripts/censure_system.cpp
Egyszerűbb megoldás.
Axim megoldása jobb, adatbázisból dolgozik, és szavanként ellenőriz, viszont amit belinkeltél mondatokat ellenőriz, csak 20 féle káromkodást lehet meghatározni, és mindig újra kell forgatni a core-t ha változtatunk valamit. De minden esetre nem rossz.
Így már szövegben ha megtalálja azt a részt akkor elnyeli ( nem írja ki ) a szöveget. Majd utána nézek ha lesz kedvem hozzá vagy azt se bánom ha ti oldjátok meg. :D
/*
Készítette Tóth Máté (AximCore) 2012
*/
#include <string>
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");
if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">> Nem sikerult betolteni a tablat. A 'player_karomkodas' tabla ures.");
return;
}
do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());
}while(result->NextRow());
}
void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
strToConvert[i] = tolower(strToConvert[i]);
}
}
void GetCensuredWord(std::string& msg)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
int Find = msg.find(Words[i]);
if( Find != -1 )
{
msg = "!&@$ß×";
}
}
}
void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg);
}
void OnChat(Player /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg);
}
void OnChat(Player /**player*/, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg);
}
};
void AddSC_System_Censure()
{
new System_Censure();
}
Esetleg ha még van kedved módosítani rajta, meg lehetne csinálni hogy logolja azokat akik rosszak, meg hogy mit rosszalkodtak ;)
Idézetet írta: hunti Dátum 2012 november 08, 08:19:46 DÉLUTÁN
Esetleg ha még van kedved módosítani rajta, meg lehetne csinálni hogy logolja azokat akik rosszak, meg hogy mit rosszalkodtak ;)
Így logolja azt, hogy ki és mit káromkodott, tudom van feles nyitás/zárás( nem hatékony, már akkor jobb lenne ha konstruktor/de-konstruktorba írom a fájl nyitás/zárás részt ) meg a emuba is van erre írva külön egy log rendszer, de estére megteszi. Majd holnap ha haza értem. ;)
/*
Készítette Tóth Máté (AximCore) 2012
*/
#include <string>
#include <fstream>
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
fstream File;
public:
System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");
if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}
do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());
}while(result->NextRow());
}
void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
strToConvert[i] = tolower(strToConvert[i]);
}
}
void WriteFile(std::string& msg,Player *player){
File.open("blasphemers.txt", fstream::out | fstream::app);
if(File.is_open())
{
File << "Name: " << player->GetName() << " by: " << msg << std::endl;
File.close();
}
}
void GetCensuredWord(std::string& msg,Player *player)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
int Find = msg.find(Words[i]);
if( Find != -1 )
{
WriteFile(msg,player);
msg = "!&@$ß×";
}
}
}
void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg,player);
}
};
void AddSC_System_Censure()
{
new System_Censure();
}
Esetleg egy mysql insert nem lenne célratörőbb? :)
Idézetet írta: hunti Dátum 2012 november 08, 09:37:46 DÉLUTÁN
Esetleg egy mysql insert nem lenne célratörőbb? :)
Igaz. :) Így sikerült megoldanom...
/*
Készítette Tóth Máté (AximCore) 2012
*/
#include <string>
class System_Censure : public PlayerScript
{
std::vector<std::string> Words;
public:
System_Censure() : PlayerScript("System_Censure")
{
QueryResult result = WorldDatabase.Query("SELECT * FROM player_karomkodas");
if (!result)
{
sLog->outError(LOG_FILTER_SQL, ">>Nem sikerult betolteni a táalat. A 'player_karomkodas' tabla ures.");
return;
}
do{
Field* fields = result->Fetch();
Words.push_back(fields[0].GetString());
}while(result->NextRow());
}
void lowerCase(std::string& strToConvert)
{
for(unsigned int i=0;i<strToConvert.length();i++)
{
strToConvert[i] = tolower(strToConvert[i]);
}
}
void GetCensuredWord(std::string& msg,Player *player)
{
for(uint64 i=0; i<Words.size(); i++)
{
lowerCase(msg);
int Find = msg.find(Words[i]);
if( Find != -1 )
{
const char* MSG = msg.c_str();
CharacterDatabase.PExecute("INSERT INTO karomkodas (Name,Message,Date) VALUES ('%s','%s',CURDATE()) ", player->GetName() ,MSG);
msg = "!&@$ß×";
}
}
}
void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Player /*receiver*/)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Group* /**group*/)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Guild* /**guild*/)
{
GetCensuredWord(msg,player);
}
void OnChat(Player *player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* /**channel*/)
{
GetCensuredWord(msg,player);
}
};
void AddSC_System_Censure()
{
new System_Censure();
}
DROP TABLE IF EXISTS `karomkodas`;
CREATE TABLE `karomkodas` (
`Name` varchar(40) NOT NULL,
`Message` varchar(500) NOT NULL,
`Date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;