Uzun zamandır metin2 ile ilgilenmiyordum şu sıralar yine bi göz atasım geldi baktım
makara konusu açmış
gülüp keyfim yerine geldi bir kaç bir şey paylaşayım dedim o yüzden ona daha çok teşekkür edin 
Sisteme geçelim.
Başlıkta gördüğünüz gibi oyuncu engelleme sistemi lakin fazlasıyla kapsamlı yaklaşık 1 sene önce yazmıştım.
Metin2 kitlesi malum küfür şikayetleri bitmiyordu.
Şimdi bir dallama geldi size küfür etti engellediniz sonucu ne oluyor hemen açıklayalım.
<a role="button" tabindex="0">Genişletmek için tıkla</a> </blockquote>
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
uzun zaman sonramakara konusu açmış
Sisteme geçelim.
Başlıkta gördüğünüz gibi oyuncu engelleme sistemi lakin fazlasıyla kapsamlı yaklaşık 1 sene önce yazmıştım.
Metin2 kitlesi malum küfür şikayetleri bitmiyordu.
Şimdi bir dallama geldi size küfür etti engellediniz sonucu ne oluyor hemen açıklayalım.
Kod:
// Open player_block.h // Search: auto DeletePlayerBlock(const std::string &strBlockingPlayerName, const std::string &strBlockedPlayerName) -> void; // Add below: auto ChangeName(const std::string &strOldName, const std::string &strNewName) -> void; // Open player_block.cpp // Search: auto CPlayerBlock::DeletePlayerBlock(const std::string &strBlockingPlayerName, const std::string &strBlockedPlayerName) -> void { DBManager::Instance().DirectQuery("DELETE FROM player.player_block_list WHERE blockingplayername = '%s' AND blockedplayername = '%s'", strBlockingPlayerName.c_str(), strBlockedPlayerName.c_str()); } // Add below: auto CPlayerBlock::ChangeName(const std::string &strOldName, const std::string &strNewName) -> void { auto it = m_map_PlayerBlock.find(strOldName); if (it != m_map_PlayerBlock.end()) { m_map_PlayerBlock[strNewName] = std::move(it->second); m_map_PlayerBlock.erase(it); } for (auto &it : m_map_PlayerBlock) { auto it2 = it.second.find(strOldName); if (it2 != it.second.end()) { it.second.erase(it2); it.second.emplace(strNewName); } } DBManager::Instance().DirectQuery("UPDATE player.player_block_list SET blockingplayername = '%s' WHERE blockingplayername = '%s'", strNewName.c_str(), strOldName.c_str()); DBManager::Instance().DirectQuery("UPDATE player.player_block_list SET blockedplayername = '%s' WHERE blockedplayername = '%s'", strNewName.c_str(), strOldName.c_str()); sys_log(0, "PLAYER_BLOCK: ChangeName: %s -> %s", strOldName.c_str(), strNewName.c_str()); } // Open questlua_pc.cpp // Add includes: #ifdef ENABLE_PLAYER_BLOCK_SYSTEM #include "player_block.h" #endif // Search: /* delete messenger list */ MessengerManager::instance().RemoveAllList(ch->GetName()); // Add below: #ifdef ENABLE_PLAYER_BLOCK_SYSTEM /* player block list */ CPlayerBlock::Instance().ChangeName(ch->GetName(), szName); #endif
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
biraz paket nasıl yazılıyor görelim demi :XDOyuncu Engelleme Sistemi Nedir?
Metin2 özel sunucularında güvenlik ve deneyim kalitesi açısından kritik öneme sahip olan Oyuncu Engelleme Sistemi, sunucu yöneticilerinin istismarcı veya saldırgan oyuncularla etkili bir biçimde mücadele edebilmesini sağlar. Bu sistem, genellikle C++ tabanlı game server üzerinde çalışır ve oyuncuların belirli eylemleri sırasında otomatik veya manuel olarak engellenmesini sağlar.
Engelleme Sisteminin Temel Özellikleri
Oyuncu engelleme sistemi, Metin2 özel sunucularında PvP sistemlerinin daha adil ve güvenli bir ortamda işlemesi için tasarlanmıştır. Bu sistem sayesinde;
- Hile kullanan oyuncular engellenir.
- Spam yapan oyuncular geçici veya kalıcı olarak kara listeye alınır.
- Sunucuya zarar verebilecek komutları veya eylemleri gerçekleştiren kullanıcılar otomatik olarak bloke edilir.
- Yetkilendirme sunucusu (auth server) ile entegre çalışarak IP bazlı engeller uygulanabilir.
Sistem Geliştirme ve Kodlama
Bu tür sistemler genellikle C++ dilinde yazılmış server src dosyalarına entegre edilir. Sistem geliştirme sürecinde martysama gibi deneyimli Metin2 development kaynaklarından faydalanmak, geliştirme hızını ve kaliteyi artırır. Ayrıca Python tabanlı sistemlerle GUI arayüzler üzerinden de engelleme listeleri yönetilebilir.
Kodlama yapılırken core yapıya dokunmadan modüler bir yaklaşım benimsenmelidir. Bu sayede sistem hem channel sunucularında hem de ana game server yapısında sorunsuz çalışabilir.
Engelleme Türleri
Oyuncu engelleme sistemleri şu türleri içerebilir:
- Kalıcı Engelleme: Belirli bir sebepten dolayı oyuncu sonsuza kadar engellenir.
- Geçici Engelleme: Belirlenen süre boyunca oyuncu erişimi engellenir.
- IP Engelleme: Belirtilen IP adresi veya aralığı tamamen engellenir.
- Hesap Engelleme: Kullanıcı adı veya karakter ismi üzerinden engelleme yapılır.
Database Entegrasyonu
Engelleme sistemi, MySQL veya MariaDB gibi DB sistemlerine entegre edilerek, engellenen kullanıcılar veritabanında tutulur. Bu sayede sunucu yeniden başlatıldığında bile engellemeler korunur. Game DB ve Auth DB arasında senkronizasyon sağlanarak kullanıcıların farklı sunuculara geçiş yaparak engeli atlaması engellenir.
Otomatik Engelleme Kuralları
Sistem, belirli kurallara göre otomatik olarak engelleme yapabilir. Örneğin:
- Aynı IP'den birden fazla hesap açılırsa.
- Belirli bir süre içinde çok sayıda istek gönderilirse.
- Yasaklanmış komutlar çalıştırılırsa.
Bu kurallar, uiscript ve py root üzerinden client src tarafında da desteklenebilir. Böylece hem sunucu hem de istemci tarafında güvenlik artırılır.
What is a Player Blocking System?
The Player Blocking System is of critical importance for security and experience quality on Metin2 private servers. This system allows server administrators to effectively combat abusive or malicious players. It typically operates on C++-based game servers and enables automatic or manual blocking of players during certain actions.
Key Features of the Blocking System
The player blocking system is designed for Metin2 private servers to ensure PvP systems operate in a fair and secure environment. With this system:
- Players using cheats are blocked.
- Spammers are added to blacklists temporarily or permanently.
- Users performing harmful commands or actions are automatically blocked.
- IP-based blocks can be applied through integration with the authorization server (auth server).
System Development and Coding
Such systems are usually integrated into C++-based server src files. During development, utilizing experienced Metin2 development resources like martysama increases both speed and quality. Additionally, Python-based systems allow blocking lists to be managed via GUI interfaces.
When coding, a modular approach should be adopted without interfering with the core structure. This ensures the system works smoothly on both channel servers and the main game server.
Types of Blocking
Player blocking systems may include these types:
- Permanent Block: The player is blocked indefinitely due to a specific reason.
- Temporary Block: The player's access is blocked for a set duration.
- IP Block: A specific IP address or range is completely blocked.
- Account Block: Blocking based on username or character name.
Database Integration
The blocking system integrates with databases such as MySQL or MariaDB, ensuring blocked users are stored in the database. Thus, even after server restarts, blocks remain active. Sync between Game DB and Auth DB prevents users from bypassing blocks by switching servers.
Automatic Blocking Rules
The system can automatically block based on predefined rules, such as:
- Multiple accounts created from the same IP.
- Excessive requests sent within a short period.
- Execution of forbidden commands.
These rules can also be supported on the client side via uiscript and py root within the client src. This strengthens security on both server and client ends.
