Merhabalar, böyle bir sistem daha önce paylaşıldı mı bilmiyorum, fakat sistem ve kodlar hiç bir yerden alıntı değildir.
Sistemin genel amacı : Öncelikle bir banword listesi belirlenir oyuncunun normal konuşmadan yazdığı cümlenin içinde , banword listesinde ki kelimelerden herhangi birisi mevcut mu diye kontrol eder. Eğer mevcutsa sizin belirlediğiniz süre boyunca oyuncuya block chat atılır.
Yapılışı:
input_main.cpp dosyası açılır
aratılır
hemen üstüne bu kod eklenir.
Kod bloğunun son hali:
if bloğu aratılır ve süslü parantezle bittiği yerin sonuna
eklenir.
Kod bloğunun son hali:
Altını çizdiğim yerleri kendinize göre düzenleyebilirsiniz.
locale/turkey klasörüne banword.txt diye bir txt dosyası açılır içine otomatik block chat attırmak istediğiniz kelimeler yazılır. Burda önemli bir nokta var kelimeleri virgülle ayırmak gerekiyor ve bu kelimeler virgülle explode olduğu için kelimelerin sonuna da virgül koymanız gerekir.
Örnek banword.txt içerik : (bu,bir,deneme,banword,listesi,)
bu linktende örnek banword.txt dosyasını indirebilirsiniz.
Kendinize göre düzenleyeceğiniz yerler :
Sistemin genel amacı : Öncelikle bir banword listesi belirlenir oyuncunun normal konuşmadan yazdığı cümlenin içinde , banword listesinde ki kelimelerden herhangi birisi mevcut mu diye kontrol eder. Eğer mevcutsa sizin belirlediğiniz süre boyunca oyuncuya block chat atılır.
Kanıt ve Sistemin işleyişi:
Yapılışı:
input_main.cpp dosyası açılır
PHP:
int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
aratılır
PHP:
ACMD(do_block_chat);
hemen üstüne bu kod eklenir.
Kod bloğunun son hali:
PHP:
if (buflen > 1 && *buf == '/')
if bloğu aratılır ve süslü parantezle bittiği yerin sonuna
PHP:
std::string playerName(ch->GetName());
std::string banTime(" 60");
std::string totalChat = playerName + banTime;
const char *fullBan = totalChat.c_str();
char line[1024];
std::string fileName = "locale/turkey/banword.txt";
std::string word(buf);
FILE *file = fopen(fileName.c_str(), "r");
fscanf(file, "%[^\n]", line);
std::string s(line);
std::string delimiter = ",";
size_t pos = 0;
std::string token;
while ((pos = s.find(delimiter)) != std::string::npos) {
token = s.substr(0, pos);
s.erase(0, pos + delimiter.length());
std::size_t found = word.find(token);
if (found != std::string::npos)
do_block_chat(NULL, fullBan, 0, 0);
}
eklenir.
Kod bloğunun son hali:
Altını çizdiğim yerleri kendinize göre düzenleyebilirsiniz.
locale/turkey klasörüne banword.txt diye bir txt dosyası açılır içine otomatik block chat attırmak istediğiniz kelimeler yazılır. Burda önemli bir nokta var kelimeleri virgülle ayırmak gerekiyor ve bu kelimeler virgülle explode olduğu için kelimelerin sonuna da virgül koymanız gerekir.
Örnek banword.txt içerik : (bu,bir,deneme,banword,listesi,)
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
bu linktende örnek banword.txt dosyasını indirebilirsiniz.
Kendinize göre düzenleyeceğiniz yerler :
PHP:
std::string banTime(" 60");
// Buradaki 60, saniye cinsinden attırmak istediğiniz block chat'in süresini ifade eder.
//Burdakine göre 60 saniye yani 1 dakika block chat atar.
PHP:
std::string fileName = "locale/turkey/banword.txt";
// Burdaki locale/turkey/banword.txt değeri istemediğiniz kelime listesinin yolunu ifade eder.
En Çok Reaksiyon Alan Mesajlar
1. SQL'i ilk olarak IBM geliştirmeye başladı ve SEQUEL adıyla çıktı sonrasında SQL olarak değişti microsoft satın alınca Microsoft sql olarak tanımlanmaya başlandı ama hala kullanılan adı SQL'dir. İstersen google üzerinden mssql yazabilirsin karşına ilk ne çıkıcak kontrol et. Öğeyi görmek için üye olmalısınız.
SQL(Structured English Query Language)
MSSQL(Microsoft SQL Server)
Birinin alması ya da birinin ismini değiştirmesi ne olduğunu değiştirmez. Dediğin gibi en başa dönecek olursak SEQUEL ile SQL aynı şeydir, MSSQL ve SQL farklı şeydir.
2. fopen, memcache bi fonksiyondur. C,C++ ve PHP'de de bu böyledir. Dikkat ettiysen 3 dilde de fopen fonksiyonu mevcut. Yani 2.seferde dosyayı açmaz istersen büyük bir dosya oluşturup okut ve RAM değerlerini kontrol et. Ayrıca bellekten yürütülen işlemler daha hızlı cevap verir.
1) fopen'i async çalışan bir uygulamada(game gibi) bu şekilde kullanamazsın.
2) C, C++ ile PHP i kıyaslayamazsın.
3) Memcache dediğin şey konuyla çok alakasız.
4) Tekrar başa dönüyoruz.
- fopen ile file handle oluşturduğunda kapatana kadar başka bir uygulama ya da başka bir fonksiyon o dosyaya erişemez.
- fclose ile handle'ı kapatmazsan memory leak oluşur.
- fclose ile kapatmadığın sürece o dosyayı tekrar açamazsın.
- Dosyanın açılıp açılmadığını kontrol etmediğin için açılmayan dosyanın boş file handle'ını işlemeye çalıştığında uygulama patlar.
- Düzgün bir şekilde çalışması için fclose ile işin bitince kapatmalısın, Bu şekilde her defasında aç - işle -kapat yaparak verimsiz bir sonuç alırsın.
1. Dediğin şey SQL değil MsSQL
2.
Sorunsuz değil; fclose kullanmamışsın, ikinci kullanımda zaten açık olduğu için ve fopen den sonra kontrol olmadığı için patlar.
Bug vs. var; İki kişi aynı anda kullandığında sistem bir dosyayı iki kere açamayacağından ve gene fopen den sonra kontrol olmadığından patlar.
Performanslı değil; Her chat kullanımında dosyayı baştan açıp baştan parserleyip baştan kontrol edeceğinden disk patlar.
Her chatte yazı yazdığımızda sunucu kontrolu yerine bence python'da insult mesajı *** çevirdiği yere coreye istek yapabiliriz. Ama bu istek sadece oyuncunun yasaklanması için olmalı.
Benim fikrim de bu geliştirmeye açık.
The currently code is a bit worm, you give him ban multiples and more then this and some things unsafe.
Here is rewritted something:
But structure is shit at the moment because you will destroy the server if you have 5k onlines, all people what write all time on chat he try to open and read the file.
Öğeyi görmek için üye olmalısınız.
You have to load all words into a vector just when server start and compare current chat line with all vectors elements.
I hope you get my points.
bilmiş gibi daha iyi olur demenTxtden değilde sqlden cektirseydin bir tık daha iyi olabilirdi çalışma için teşekkürlerburda txt den çektirmek daha sağlıklı birdaha sql den verimi alcaksın
onun en iyi yaptığı gereksiz boş konuşmak takmaYanlış olduğunu düşündüğüm 2 husus var. Kesinlikle yanlış anlama herhangi bir art niyetle değil tamamen doğru bilgiyi öğretme amacıyla bu post'u atıyorum.
1.Husus: Sql ve Mysql farklı database yapılarıdır. Sql genelde windows işletim sisteminde kullanılır ve kullanım için Microsoft sizden yıllık lisans ücreti talep eder(crackleri mevcut o ayrı olay). Mysql ise ücretsiz,açık kaynak kodlu ve daha basit bir database yapısıdır. Metin2'nin database bağlantısında Mysql kullanılır.
2.Husus: Bir sistem ya da proje yapılırken 3 önemli nokta baz alınır. ilk olarak sorunsuz olması, ikinci olarak bug vs. olmaması, üçüncü olarak performans açısından yüksek sonuç vermesi. Bu olayı ben her oyuncu mesaj attığında query olarak bunu gönderip kontrol ettirseydim yüksek kullanımda düşük performans verirdi gereksiz yere mysql bağlantısı kurulup query atmış olucaktım. Bunu tekil kullanımlarda farketmen imkansız ama select sorgusunun benchmark sonuçlarını incelersen ne demek istediğimi anlarsın. Yanlış hatırlamıyorsan PHP'nin veri okuma hızı saniyede 400bin karakterdi, C++'nin PHP'den daha hızlı bir dil olduğunu biliyoruz gerisini sen hesap et![]()
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 288
- Cevaplar
- 3
- Görüntüleme
- 641
- Cevaplar
- 5
- Görüntüleme
- 685
- Cevaplar
- 10
- Görüntüleme
- 1K
burda txt den çektirmek daha sağlıklı birdaha sql den verimi alcaksın