OX'da birden fazla girişi engelleme

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 62

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
char.cpp


Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]#include "buff_on_attributes.h"[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]#include "OXEvent.h"[/FONT][/COLOR]





Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]MessengerManager::instance().Logout(GetName());[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]if (GetMapIndex() == OXEVENT_MAP_INDEX)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]COXEventManager::instance().RemoveFromIpList(GetDe sc()->GetHostName());[/FONT][/COLOR]





*OXEvent.h


Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]bool EnterAttender(LPCHARACTER pChar);[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]std::set<std::string> m_list_iplist;[/FONT][/COLOR]





Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]bool LoadQuizScript(const char* szFileName);[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]void CheckIpAdr(DWORD pidm);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void RemoveFromIpList(const char* gelenip);[/FONT][/COLOR]





*OXEvent.cpp


Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]COXEventManager::Initialize()[/FONT][/COLOR]

Bul:
Kod:
[COLOR=#BB0000][FONT=Verdana]m_vec_quiz.clear();[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]m_list_iplist.clear();[/FONT][/COLOR]

Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]COXEventManager::Destroy()[/FONT][/COLOR]

Bul:
Kod:
[COLOR=#BB0000][FONT=Verdana]m_vec_quiz.clear();[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]m_list_iplist.clear();[/FONT][/COLOR]



Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]bool COXEventManager::EnterAttender(LPCHARACTER pkChar)[/FONT][/COLOR]

Üstüne ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]void COXEventManager::RemoveFromIpList(const char* gelenip){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]std::string silinecekip = gelenip;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_list_iplist.erase(silinecekip);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void COXEventManager::CheckIpAdr(DWORD pidm){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]LPCHARACTER pkMyChar = CHARACTER_MANAGER::instance().FindByPID(pidm);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]char pkChrIP[250];[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]snprintf(pkChrIP, sizeof(pkChrIP), "%s", pkMyChar->GetDesc()->GetHostName());[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]for (itertype(m_list_iplist) it = m_list_iplist.begin(); it != m_list_iplist.end(); ++it)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]const std::string& loopdaki_ip = *it;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (loopdaki_ip.empty()) return;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]char listdekiIp[250];[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]snprintf(listdekiIp, sizeof(listdekiIp), "%s", loopdaki_ip.c_str());[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (!strcmp(listdekiIp, pkChrIP)) {[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]pkMyChar->GetDesc()->DelayedDisconnect(5);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]pkMyChar->ChatPacket(CHAT_TYPE_INFO, "Multi IP Tespit edildi");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR]



Arat:
Kod:
[COLOR=#BB0000][FONT=Verdana]m_map_attender.insert(std::make_pair(pid, pid));[/FONT][/COLOR]

Altına ekle:
Kod:
[COLOR=#BB0000][FONT=Verdana]CheckIpAdr(pid);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_list_iplist.insert(pkChar->GetDesc()->GetHostName());[/FONT][/COLOR]

a0q2Oz.jpg


zYRrPY.jpg

OX'da Birden Fazla Girişi Engelleme

Metin2 özel sunucularında güvenlik ve oyun deneyimi açısından en önemli konulardan birisi, aynı oyuncunun birden fazla kez giriş yapmasını engellemektir. Bu durum özellikle PVP sistemlerinin yoğun olduğu sunucularda büyük önem taşır. Bu yazıda, OpenXRay (OX) tabanlı Metin2 istemcilerinde birden fazla girişin nasıl engelleneceğini ele alacağız.

Neden Birden Fazla Giriş Engellenmeli?

Birden fazla giriş, oyuncuların farklı karakterlerle eş zamanlı olarak savaşmalarına veya oyun içi avantaj elde etmelerine neden olabilir. Bu durum, adil oyun ilkelerine aykırıdır ve PVP sistemlerinde ciddi dengesizliklere yol açabilir. Ayrıca, sunucu performansını da olumsuz etkileyebilir. Özellikle Metin2 gibi MMORPG oyunlarında bu kontrollerin sağlanması kritik öneme sahiptir.

OpenXRay (OX) Nedir?

OpenXRay, Metin2 istemci tabanlı projelerde sıklıkla kullanılan açık kaynak kodlu bir grafik motorudur. Geliştiriciler, OX sayesinde daha stabil ve optimize bir istemci ortamı oluşturabilirler. Bu yapı, C++ tabanlıdır ve yüksek düzeyde özelleştirilebilirlik sunar. Bu sebeple, Metin2 özel sunucularında OX kullanımı giderek yaygınlaşmaktadır.

Birden Fazla Girişi Engelleme Mantığı

Engelleme işlemi, genellikle sunucu tarafında (auth/game) yapılır. Ancak bazı özel durumlarda istemci tarafında da kontrol yapılabilir. OX tabanlı istemcilerde bu kontrol, kullanıcı kimliği (PID), IP adresi veya karakter adı gibi bilgilere göre yapılabilir. Sunucu, bir kullanıcı oturumu açtığında, bu bilgiyi geçici olarak saklar. Eğer aynı kullanıcı başka bir oturum açmaya çalışırsa, sunucu bu isteği reddeder.

C++ Kaynak Kodda Uygulama

Metin2 sunucu tarafında, authserver.cpp dosyası üzerinden giriş kontrolü yapılır. Burada, kullanıcı adı doğrulandıktan sonra, aynı kullanıcı adıyla başka bir bağlantı varsa, mevcut bağlantı koparılır ya da yeni bağlantı reddedilir. Bu kontrol, sunucu tarafında güvenliği artırmak için zorunludur. Ayrıca, istemci tarafında da bir kontrol mekanizması geliştirilebilir. Örneğin, OX üzerinde bir 'session_id' tutularak, sunucuyla senkronize şekilde bu ID karşılaştırılabilir.

Python ve Py GUI ile Yönetim

Metin2 geliştiricileri, bazı yönetim süreçlerini Python tabanlı sistemlerle kolaylaştırabilir. Py GUI kullanarak, giriş yapan kullanıcıları listeleyen bir arayüz geliştirilebilir. Bu arayüz, birden fazla giriş yapan kullanıcıları belirlemek ve müdahale etmek için kullanılabilir. PyRoot klasöründe yer alan scriptlerle bu işlemler entegre edilebilir.

Sunucu Performansını Etkileyen Faktörler

Birden fazla giriş kontrolü, sunucu üzerinde küçük de olsa bir yük oluşturabilir. Özellikle çok oyunculu sunucularda, bu kontrol mekanizmalarının verimli ve optimize şekilde tasarlanması gerekir. DB Core üzerinden bu kontroller yapıldığında, veritabanı sorguları optimize edilmelidir. Yanlış yapılandırılmış bir sistem, sunucunun yavaşlamasına neden olabilir.

Martysama ve Diğer Geliştiriciler Tarafından Paylaşılan Sistemler

Metin2 geliştirme topluluğunda, Martysama gibi isimler, birçok sistemle katkı sağlamıştır. Bu sistemlerden bazıları, birden fazla giriş kontrolünü içerir. Bu tür kaynak kodlar, Metin2Dev topluluklarında paylaşılır ve geliştiriciler tarafından özelleştirilerek kullanılır. Metin2Lobby, bu tarz sistemlerin doğru uygulanması ve geliştirilmesi için önemli bir bilgi merkezidir.

Sonuç

Metin2 özel sunucularında birden fazla girişin engellenmesi, hem adil oyun ilkeleri hem de sunucu güvenliği açısından büyük önem taşır. OX tabanlı istemcilerde bu kontrol, C++ kaynak kodlar üzerinden稳健 bir şekilde yapılabilir. Geliştiriciler, Python tabanlı yönetim sistemleriyle bu süreci daha da kolaylaştırabilir. Doğru uygulandığında, oyuncular için daha adil ve güvenli bir oyun ortamı oluşturulabilir.


Blocking Multiple Logins in OX

One of the most important aspects regarding security and gameplay experience in Metin2 private servers is preventing the same player from logging in multiple times simultaneously. This issue is particularly crucial in servers with intense PVP systems. In this article, we will discuss how to block multiple logins in OpenXRay (OX)-based Metin2 clients.

Why Should Multiple Logins Be Blocked?

Multiple logins can allow players to fight or gain in-game advantages using different characters at the same time. This violates fair play principles and can cause significant imbalances in PVP systems. Moreover, it can negatively affect server performance. In MMORPG games like Metin2, ensuring such controls is critical.

What is OpenXRay (OX)?

OpenXRay is an open-source graphics engine frequently used in Metin2 client-based projects. Developers can create more stable and optimized client environments thanks to OX. This structure is based on C++ and offers high-level customization capabilities. For this reason, using OX in Metin2 private servers is becoming increasingly popular.

Logic Behind Blocking Multiple Logins

The blocking process is usually handled on the server-side (auth/game). However, in some special cases, checks can also be performed on the client-side. In OX-based clients, this check can be done based on user ID (PID), IP address, or character name. After a user session is opened, the server temporarily stores this information. If the same user attempts to open another session, the request is rejected by the server.

Implementation in C++ Source Code

On the Metin2 server side, login checks are performed via the authserver.cpp file. After validating the username, if there is already another connection with the same username, either the existing connection is terminated or the new one is denied. This control is essential for increasing security on the server-side. Additionally, a control mechanism can be developed on the client-side as well. For example, by storing a 'session_id' on OX, this ID can be compared synchronously with the server.

Management with Python and Py GUI

Metin2 developers can simplify certain management processes using Python-based systems. By using Py GUI, an interface that lists logged-in users can be developed. This interface can be used to identify and take action against users attempting multiple logins. Scripts located in the PyRoot folder can integrate these operations.

Factors Affecting Server Performance

Controlling multiple logins may place a small load on the server. Especially on multiplayer servers, these control mechanisms must be designed efficiently and optimally. When these controls are implemented through the DB Core, database queries should be optimized. A poorly configured system may cause the server to slow down.

Systems Shared by Developers Like Martysama

Within the Metin2 development community, contributors like Martysama have provided many systems. Some of these systems include multiple login controls. Such source codes are shared within Metin2Dev communities and customized by developers for use. Metin2Lobby serves as an important knowledge hub for the correct implementation and development of such systems.

Conclusion

Preventing multiple logins in Metin2 private servers is vital both for fair gameplay principles and server security. In OX-based clients, this control can be robustly implemented via C++ source code. Developers can further simplify this process using Python-based management systems. When properly applied, a fairer and safer gaming environment can be created for players.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Geri
Üst Alt