Nasıl Kullanılır?:
Örnek karakterin id'si varsa;
Kod:
lonca_isim = chr.GetLoncaNameByVID(vid) levelf = chr.GetLevelByVid(karakter_vid) chat.AppendChat(chat.CHAT_TYPE_INFO, "Lonca ismi " + lonca_isim) chat.AppendChat(chat.CHAT_TYPE_INFO, "Level: " + levelf) if TRUE == chr.IsGMByVid(vid): chat.AppendChat(chat.CHAT_TYPE_INFO, "Bu adam gm.") else: chat.AppendChat(chat.CHAT_TYPE_INFO, "Bu adam gm degil.")
Karakterin sadece ismi varsa;
Kod:
karakter_vid = chr.GetVidByName(karakter ismi) lonca_isim = chr.GetLoncaNameByVID(karakter_vid) levelf = chr.GetLevelByVid(karakter_vid) chat.AppendChat(chat.CHAT_TYPE_INFO, "Lonca ismi: " + lonca_isim) chat.AppendChat(chat.CHAT_TYPE_INFO, "Level: " + levelf) if TRUE == chr.IsGMByVid(karakter_vid): chat.AppendChat(chat.CHAT_TYPE_INFO, "Bu adam gm.") else: chat.AppendChat(chat.CHAT_TYPE_INFO, "Bu adam gm degil.")
Kod:
PyObject * chrGetGuildID(PyObject* poSelf, PyObject* poArgs) { int iVirtualID; if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID)) return Py_BuildException(); CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID); if (!pInstance) return Py_BuildValue("i", 0); return Py_BuildValue("i", pInstance->GetGuildID()); }
Kod:
PyObject * chrGetLoncaNameByVID(PyObject* poSelf, PyObject* poArgs) { int iVirtualID; if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID)) return Py_BuildException(); CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID); if (!pInstance) { return Py_BuildValue("s", "None"); } DWORD dwID = pInstance->GetGuildID(); std::string strName; if (CPythonGuild::Instance().GetGuildName(dwID, &strName)) return Py_BuildValue("s", strName.c_str()); else return Py_BuildValue("s", "Yok"); } PyObject * chrGetLevelByVID(PyObject* poSelf, PyObject* poArgs) { int iVirtualID; if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID)) return Py_BuildException(); CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID); if (!pInstance) { return Py_BuildValue("i", 0); } const char * szlevel = pInstance->GetLevelString(); return Py_BuildValue("s", szlevel); } PyObject * chrIsGMbyVID(PyObject* poSelf, PyObject* poArgs) { int iVirtualID; if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID)) return Py_BuildException(); CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID); if (!pInstance) { return Py_BuildValue("i", 0); } bool gm_mi = pInstance->IsGameMaster() ? TRUE : FALSE; return Py_BuildValue("i", gm_mi); } PyObject * chrGetVIDByName(PyObject* poSelf, PyObject* poArgs) { char * szName; if (!PyTuple_GetString(poArgs, 0, &szName)) return Py_BadArgument(); CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtrByName(szName); if (!pInstance) { return Py_BuildValue("i", 0); } else return Py_BuildValue("i", pInstance->GetVirtualID()); }
Aratılır:
Kod:
{"GetGuildID", chrGetGuildID, METH_VARARGS},
Kod:
{ "GetVidByName", chrGetVIDByName, METH_VARARGS }, { "GetLoncaNameByVID", chrGetLoncaNameByVID, METH_VARARGS }, { "GetLevelByVid", chrGetLevelByVID, METH_VARARGS }, { "IsGMByVid", chrIsGMbyVID, METH_VARARGS },
Metin2 Özel Sunucu Geliştirme: Sorgulama Sistemi Nedir?
Metin2 özel sunucularında sorgulama sistemi, oyuncuların sunucu veritabanı ile etkileşim kurmasını sağlayan temel yapı taşlarından biridir. Bu sistem, oyun içindeki karakter bilgileri, envanter içerikleri, hesap verileri gibi kritik bilgilerin doğru ve güvenli bir şekilde alınıp gönderilmesini sağlar. Özellikle game server programming ve db core süreçlerinde bu sorgulamaların optimize edilmesi büyük önem taşır.
Sorgulama Sisteminin Temelleri
Sorgulama işlemleri genellikle MySQL veya benzeri bir veritabanı yönetim sistemi üzerinden gerçekleştirilir. Metin2 sunucularında iki ana sunucu yapısı vardır: auth server ve game server. Auth sunucusu kullanıcı girişi, hesap doğrulama gibi işlemlerden sorumludur. Game sunucusu ise oyun içindeki verileri yönetir. Her iki sunucu da sorgulama sistemine ihtiyaç duyar. Python veya C++ tabanlı sistemlerde bu sorgulamalar genellikle fonksiyonlar aracılığıyla yapılır. Py root veya uiscript dosyalarında bu sorguları kontrol etmek mümkündür.
Python GUI ile Sorgulama Arayüzü
Geliştiriciler bazen sorgulama süreçlerini görselleştirmek ve test etmek için py GUI sistemleri kullanırlar. Bu tür arayüzler sayesinde, db üzerindeki sorgular daha kolay takip edilebilir ve hata ayıklama süreçleri hızlandırılabilir. Örneğin bir Python GUI aracı ile karakter silme, ekleme veya güncelleme gibi işlemleri görsel olarak test etmek mümkündür. Bu süreçte martysama gibi sistemler de yardımcı olabilir.
Sorgulama Performansını Arttırmak
Sorgulama sisteminin performansı, sunucu tıkanıklığı yaşamaması açısından kritiktir. Gecikmeleri önlemek için sorgular optimize edilmelidir. Özellikle çok oyunculu PvP sunucularda, her saniye binlerce sorgu çalışabilir. Bu nedenle source edit sırasında sorgulama mantığı dikkatlice planlanmalıdır. Metin2 compile aşamasında da bu sorguların etkin yönetimi büyük rol oynar. Core yapılar üzerinde yapılan değişiklikler, sorgulama sistemini doğrudan etkiler.
Sorgulama Güvenliği
Sorgulama sistemlerinde güvenlik ihmal edilmemelidir. SQL injection gibi saldırılar, sorgulama işlemlerinden yararlanarak veritabanına zarar verebilir. Bu yüzden sorguların parametreleştirilmesi ve doğrulanması gerekir. Client src üzerinde yapılan değişikliklerle birlikte sunucu tarafında da gerekli kontroller yapılmalıdır. Bu, hem game hem de auth sunucuları için geçerlidir.
Sonuç
Metin2 özel sunucu geliştirme sürecinde sorgulama sistemi, hem oyun içi deneyimi hem de sunucu performansını doğrudan etkileyen önemli bir unsurdur. Doğru yapılandırılmış bir sorgulama sistemi sayesinde daha hızlı, güvenli ve stabil bir sunucu ortamı oluşturulabilir. Metin2 development ile ilgilenen geliştiricilerin bu konuya özel önem göstermesi, uzun vadeli projeler için hayati bir adımdır.
Metin2 Private Server Development: What is Query System?
In Metin2 private servers, the query system is one of the fundamental building blocks that allows players to interact with the server database. This system ensures that critical information such as character data, inventory contents, and account details are retrieved and sent correctly and securely. Especially during game server programming and db core processes, optimizing these queries holds great importance.
Basics of Query System
Query operations are typically performed through database management systems like MySQL. In Metin2 servers, there are two main server structures: auth server and game server. The auth server handles user login and account validation, while the game server manages in-game data. Both servers require query systems. In systems based on Python or C++, these queries are often handled via functions. It is possible to control these queries in py root or uiscript files.
Query Interface with Python GUI
Developers sometimes use py GUI systems to visualize and test query processes. With such interfaces, db queries can be tracked more easily, and debugging processes can be accelerated. For instance, it's possible to visually test operations like deleting, adding, or updating characters using a Python GUI tool. Systems like martysama can also assist during this process.
Improving Query Performance
The performance of the query system is critical to prevent server lag. Queries must be optimized to avoid delays. Especially in multiplayer PvP servers, thousands of queries may run every second. Therefore, the query logic must be carefully planned during source edit. During the Metin2 compile stage, effective management of these queries plays a significant role. Changes made to core structures directly affect the query system.
Query Security
Security should not be overlooked in query systems. Attacks like SQL injection can harm the database by exploiting query operations. Therefore, queries must be parameterized and validated. Necessary checks must be done both on the server side and through modifications made to client src. This applies to both game and auth servers.
Conclusion
In the Metin2 private server development process, the query system is a vital component that directly affects both in-game experience and server performance. With a well-configured query system, a faster, safer, and more stable server environment can be created. Developers involved in Metin2 development should give special attention to this topic, as it is a crucial step for long-term projects.
