Herkese Selamun Aleyküm arkadaşlar iyi forumlar uzatmadan direkt geçiyorum
Common/length.h Açılır
Aratılır
Değiştirilir
Game/src/locale_service.cpp Açılır
Aratılır
Değiştirilir
Game/src/char_change_empire.cpp Açılır
Aratılır
Ve değiştirilir
Aratılır
Değiştirilir
Tekrar aratılır
Değiştirilir
Aratılır
Değiştirilir
Db/src/ClientManager.cpp Açılır
Aratılır
Değiştirilir
Aratılır
Değiştirilir
Db/src/ClientManagerLogin.cpp Açılır
Aratılır
Kod satırının en altında tekrar aratılır
Değiştirilir
Aratılır
Kod satırında aratılır
Değiştirilir
Aratılır
Kod satırında aratılır
Değiştirilir
Şimdi Client'e geçelim...
Client/UserInterface/Packet.h Açılır
Aratılır
Değiştirilir
Pack/root/introselect.py Açılır
Aratılır
Değiştirilir
Aratılır
Değiştirilir
Aratılır
Değiştirilir
Aratılır
Değiştirilir
Aratılır
Değiştirilir
Mysql
Player/Player_index
Değiştirilir
Metin2 Lobby'da C++ ile Hesapta 8 Karakter Açma Sistemi Oluşturmak
Metin2 özel sunucularında C++ tabanlı geliştirmeler yaparken, oyuncu deneyimini artırmak adına bazı özelleştirme işlemleri yapmak oldukça yaygın bir uygulamadır. Bu makalemizde, Metin2 özel sunucularında bir oyuncu hesabında 8 karakter açılabilmesini sağlayacak olan C++ tabanlı yapıyı ele alacağız. Bu işlem, hem game server hem de auth server üzerinde değişiklikler gerektirir. Bu bağlamda source edit, server src, db core gibi konulara değineceğiz.
Neden 8 Karakter?
Metin2 orijinal versiyonunda bir oyuncu hesabı için maksimum 3 karakter açmaya izin verir. Ancak özel sunucularda bu limit artırılarak oyunculara daha fazla esneklik sağlanabilir. Özellikle PvP sunucularında farklı sınıflardan birden fazla karakter açmak isteyen oyuncular için bu büyük bir avantajdır. 8 karakter limiti, hem PvP hem de PvE oynayan oyuncuların farklı stratejiler geliştirmesini sağlar.
Gereksinimler
C++ ile geliştirme yapabilmek için aşağıdaki bileşenlerin hazır olması gerekir:
- Game Server Source Code
- Auth Server Source Code
- Database Schema (MySQL veya MSSQL)
- Client Side düzenlemeleri (isteğe bağlı)
Oyun Sunucusu Tarafında Değişiklikler
Game server tarafında öncelikle karakter listesi gönderimi yapılan fonksiyonlarda değişiklik yapılmalıdır. Bu fonksiyon genellikle CHARACTER_MANAGER.cpp dosyasında bulunur. Karakter listesinin maksimum uzunluğu burada artırılır. Örnek olarak, karakter listesi için dönen veri yapısı 3 değil, 8 karakterlik hale getirilir. Ayrıca, karakter oluşturma limit kontrolü yapan fonksiyonlar da bu limite göre güncellenmelidir.
Yetkilendirme Sunucusu (Auth Server) Ayarları
Auth server tarafında ise karakter listesi kullanıcıya gönderilmeden önce kontrol edilir. Burada login_data.cpp veya benzeri dosyalarda karakter sayısıyla ilgili kontroller yapılır. Bu kısımda da limit 8 olarak ayarlanmalıdır. Ayrıca, database tarafında karakter tablosunun yapısı da buna göre genişletilmelidir.
Veritabanı (DB) Ayarları
MySQL veya MSSQL veritabanlarında player adlı veritabanında bulunan account tablosunda karakter limitiyle ilgili alanlar olabilir. Eğer bu tabloda karakter sayısıyla ilgili bir alan yoksa, bu alanlar manuel olarak eklenmelidir. Karakter listesi için kullanılacak sütunlar 8 adet olacak şekilde genişletilmelidir.
Client Tarafında Gerekli Ayarlar
Sunucu tarafında yapılan değişikliklerin etkili olabilmesi için client tarafında da bazı düzenlemeler yapılmalıdır. Bu işlemler genellikle uiscript veya root klasörlerindeki dosyalarda yer alır. Karakter seçici arayüzde gösterilecek slot sayısı artırılır. Python GUI kullanıyorsanız, py files içindeki character selection ile ilgili koddaki slot sayısı 8 olacak şekilde değiştirilmelidir.
Test ve Derleme İşlemi
Tüm değişiklikler yapıldıktan sonra projeyi tekrar derlemek gerekir. Compile işlemi sırasında hata alınmaması için tüm dosyalar doğru şekilde düzenlenmelidir. Derleme sonrası test ortamında karakter oluşturma ve listeleme işlemleri kontrol edilir. Oyuncu, artık hesabında 8 karakter oluşturabilmelidir.
Sonuç
Metin2 özel sunucularında bir oyuncu hesabında 8 karakter açmak, hem PvP hem de PvE sistemler için oldukça faydalıdır. Bu işlem, C++ tabanlı server src düzenlemeleri ile mümkündür. Game ve auth sunucularında yapılacak küçük değişikliklerle oyuncu deneyimi ciddi anlamda geliştirilebilir. Metin2Lobby.com olarak bu tarz source edit ve development konularında size yardımcı olmaya devam edeceğiz.
Creating 8 Character Slots per Account with C++ on Metin2 Lobby
Metin2 private servers require customizations to enhance player experience, and one common modification involves allowing up to 8 characters per account. This article covers how to implement this feature using C++ in Metin2 private servers. The process involves changes to both game server and auth server codes, touching upon source edit, server src, db core, and more.
Why 8 Characters?
In the original Metin2 version, players can create up to 3 characters per account. However, increasing this limit allows for more flexibility in gameplay, especially in PvP servers where players may want multiple characters of different classes. Having 8 character slots supports both PvP and PvE strategies effectively.
Requirements
To modify the system using C++, you need:
- Game Server Source Code
- Auth Server Source Code
- Database Schema (MySQL or MSSQL)
- Client-Side modifications (optional)
Game Server Modifications
The character list sending function, usually located in CHARACTER_MANAGER.cpp, must be updated to support up to 8 characters. The structure returning the character list should be adjusted accordingly, and character creation limits must also be updated to reflect the new maximum number of allowed characters.
Authentication Server (Auth Server) Settings
On the auth server side, checks are performed before sending the character list to the user. Files like login_data.cpp handle these checks and must be modified to allow up to 8 characters. Additionally, the database schema must be expanded to support the increased number of character entries.
Database (DB) Configuration
In your MySQL or MSSQL database, ensure that the account table in the player database supports up to 8 character slots. If necessary, add columns to accommodate all 8 characters within the database schema.
Client-Side Adjustments
For the changes to take effect, modifications on the client side may also be needed. These adjustments typically occur in uiscript or root folder files. The UI must display up to 8 character slots, and if using Python GUI, adjust the character selection code to reflect the new slot count.
Testing and Compilation
After applying all changes, recompile the project. Ensure there are no errors during the compile process. Once compiled, test character creation and listing functions in a testing environment to confirm players can now create up to 8 characters.
Conclusion
Allowing 8 characters per account on Metin2 private servers enhances both PvP and PvE experiences. This modification requires C++-based edits to the server src and impacts both game and auth servers. At Metin2Lobby.com, we continue to provide resources and guides on such source edit and development topics.
Common/length.h Açılır
Aratılır
Kod:
PLAYER_PER_ACCOUNT= 4,
Değiştirilir
Kod:
PLAYER_PER_ACCOUNT= 8,
Game/src/locale_service.cpp Açılır
Aratılır
Kod:
static void __CheckPlayerSlot(const std::string& service_name) { if (PLAYER_PER_ACCOUNT != 4) { printf("<ERROR> PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT); exit(0); } }
Değiştirilir
Kod:
static void __CheckPlayerSlot(const std::string& service_name) { if (PLAYER_PER_ACCOUNT != 8) { printf("<ERROR> PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT); exit(0); } }
Game/src/char_change_empire.cpp Açılır
Aratılır
Kod:
snprintf(szQuery, sizeof(szQuery), "SELECT id, pid1, pid2, pid3, pid4 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(szQuery));
Ve değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aratılır
Kod:
MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult); str_to_number(dwAID, row[0]); str_to_number(dwPID[0], row[1]); str_to_number(dwPID[1], row[2]); str_to_number(dwPID[2], row[3]); str_to_number(dwPID[3], row[4]);
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Tekrar aratılır
Kod:
snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(szQuery));
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aratılır
Kod:
DWORD CHARACTER::GetAID() const { char szQuery[1024+1]; DWORD dwAID = 0; snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery);
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Db/src/ClientManager.cpp Açılır
Aratılır
Kod:
void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpireSelectPacket * p) { char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), p->bEmpire, p->dwAccountID); delete CDBManager::instance().DirectQuery(szQuery); sys_log(0, "EmpireSelect: %s", szQuery); { snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4 FROM player_index%s WHERE id=%u", GetTablePostfix(), p->dwAccountID); std::auto_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery)); SQLResult * pRes = pmsg->Get();
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aratılır
Kod:
void CClientManager::ChangeMonarchLord(CPeer * peer, DWORD dwHandle, TPacketChangeMonarchLord* info) { char szQuery[1024]; snprintf(szQuery, sizeof(szQuery), "SELECT a.name, NOW() FROM player%s AS a, player_index%s AS b WHERE (a.account_id=b.id AND a.id=%u AND b.empire=%u) AND " "(b.pid1=%u OR b.pid2=%u OR b.pid3=%u OR b.pid4=%u)", GetTablePostfix(), GetTablePostfix(), info->dwPID, info->bEmpire, info->dwPID, info->dwPID, info->dwPID, info->dwPID); SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Db/src/ClientManagerLogin.cpp Açılır
Aratılır
Kod:
void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketGDLoginByKey * p)
Kod satırının en altında tekrar aratılır
Kod:
sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip); char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id); CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aratılır
Kod:
void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg)
Kod satırında aratılır
Kod:
if (msg->Get()->uiNumRows == 0) { DWORD account_id = info->pAccountTable->id; char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id); std::auto_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER));
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aratılır
Kod:
void CClientManager::RESULT_PLAYER_INDEX_CREATE(CPeer * pkPeer, SQLMsg * msg)
Kod satırında aratılır
Kod:
char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), info->pAccountTable->id); CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Şimdi Client'e geçelim...
Client/UserInterface/Packet.h Açılır
Aratılır
Kod:
PLAYER_PER_ACCOUNT3 = 3, PLAYER_PER_ACCOUNT4 = 4,
Değiştirilir
Kod:
PLAYER_PER_ACCOUNT3 = 7, PLAYER_PER_ACCOUNT4 = 8,
Pack/root/introselect.py Açılır
Aratılır
Kod:
SLOT_COUNT = 4
Değiştirilir
Kod:
SLOT_COUNT = 8
Aratılır
Kod:
SLOT_ROTATION = [135.0, 225.0, 315.0, 45.0]
Değiştirilir
Kod:
SLOT_ROTATION = [135.0, 180.0, 225.0, 270.0, 315.0, 360.0, 45.0, 90.0]
Aratılır
Kod:
chr.DeleteInstance(0) chr.DeleteInstance(1) chr.DeleteInstance(2) chr.DeleteInstance(3)
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aratılır
Kod:
indexArray = (3, 2, 1, 0)
Değiştirilir
Kod:
indexArray = (8, 7, 6, 5, 4, 3, 2, 1, 0)
Aratılır
Kod:
def OnKeyDown(self, key): if 1 == key: self.ExitSelect() if 2 == key: self.SelectSlot(0) if 3 == key: self.SelectSlot(1) if 4 == key: self.SelectSlot(2) if 5 == key: self.SelectSlot(3)
Değiştirilir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Mysql
Player/Player_index
Kod:
`id` int(11) NOT NULL DEFAULT '0', `pid1` int(11) NOT NULL DEFAULT '0', `pid2` int(11) NOT NULL DEFAULT '0', `pid3` int(11) NOT NULL DEFAULT '0', `pid4` int(11) NOT NULL DEFAULT '0', `empire` tinyint(4) NOT NULL DEFAULT '0',
Değiştirilir
Kod:
`id` int(11) NOT NULL DEFAULT '0', `pid1` int(11) NOT NULL DEFAULT '0', `pid2` int(11) NOT NULL DEFAULT '0', `pid3` int(11) NOT NULL DEFAULT '0', `pid4` int(11) NOT NULL DEFAULT '0', `pid5` int(11) NOT NULL DEFAULT '0', `pid6` int(11) NOT NULL DEFAULT '0', `pid7` int(11) NOT NULL DEFAULT '0', `pid8` int(11) NOT NULL DEFAULT '0', `empire` tinyint(4) NOT NULL DEFAULT '0',
Metin2 Lobby'da C++ ile Hesapta 8 Karakter Açma Sistemi Oluşturmak
Metin2 özel sunucularında C++ tabanlı geliştirmeler yaparken, oyuncu deneyimini artırmak adına bazı özelleştirme işlemleri yapmak oldukça yaygın bir uygulamadır. Bu makalemizde, Metin2 özel sunucularında bir oyuncu hesabında 8 karakter açılabilmesini sağlayacak olan C++ tabanlı yapıyı ele alacağız. Bu işlem, hem game server hem de auth server üzerinde değişiklikler gerektirir. Bu bağlamda source edit, server src, db core gibi konulara değineceğiz.
Neden 8 Karakter?
Metin2 orijinal versiyonunda bir oyuncu hesabı için maksimum 3 karakter açmaya izin verir. Ancak özel sunucularda bu limit artırılarak oyunculara daha fazla esneklik sağlanabilir. Özellikle PvP sunucularında farklı sınıflardan birden fazla karakter açmak isteyen oyuncular için bu büyük bir avantajdır. 8 karakter limiti, hem PvP hem de PvE oynayan oyuncuların farklı stratejiler geliştirmesini sağlar.
Gereksinimler
C++ ile geliştirme yapabilmek için aşağıdaki bileşenlerin hazır olması gerekir:
- Game Server Source Code
- Auth Server Source Code
- Database Schema (MySQL veya MSSQL)
- Client Side düzenlemeleri (isteğe bağlı)
Oyun Sunucusu Tarafında Değişiklikler
Game server tarafında öncelikle karakter listesi gönderimi yapılan fonksiyonlarda değişiklik yapılmalıdır. Bu fonksiyon genellikle CHARACTER_MANAGER.cpp dosyasında bulunur. Karakter listesinin maksimum uzunluğu burada artırılır. Örnek olarak, karakter listesi için dönen veri yapısı 3 değil, 8 karakterlik hale getirilir. Ayrıca, karakter oluşturma limit kontrolü yapan fonksiyonlar da bu limite göre güncellenmelidir.
Yetkilendirme Sunucusu (Auth Server) Ayarları
Auth server tarafında ise karakter listesi kullanıcıya gönderilmeden önce kontrol edilir. Burada login_data.cpp veya benzeri dosyalarda karakter sayısıyla ilgili kontroller yapılır. Bu kısımda da limit 8 olarak ayarlanmalıdır. Ayrıca, database tarafında karakter tablosunun yapısı da buna göre genişletilmelidir.
Veritabanı (DB) Ayarları
MySQL veya MSSQL veritabanlarında player adlı veritabanında bulunan account tablosunda karakter limitiyle ilgili alanlar olabilir. Eğer bu tabloda karakter sayısıyla ilgili bir alan yoksa, bu alanlar manuel olarak eklenmelidir. Karakter listesi için kullanılacak sütunlar 8 adet olacak şekilde genişletilmelidir.
Client Tarafında Gerekli Ayarlar
Sunucu tarafında yapılan değişikliklerin etkili olabilmesi için client tarafında da bazı düzenlemeler yapılmalıdır. Bu işlemler genellikle uiscript veya root klasörlerindeki dosyalarda yer alır. Karakter seçici arayüzde gösterilecek slot sayısı artırılır. Python GUI kullanıyorsanız, py files içindeki character selection ile ilgili koddaki slot sayısı 8 olacak şekilde değiştirilmelidir.
Test ve Derleme İşlemi
Tüm değişiklikler yapıldıktan sonra projeyi tekrar derlemek gerekir. Compile işlemi sırasında hata alınmaması için tüm dosyalar doğru şekilde düzenlenmelidir. Derleme sonrası test ortamında karakter oluşturma ve listeleme işlemleri kontrol edilir. Oyuncu, artık hesabında 8 karakter oluşturabilmelidir.
Sonuç
Metin2 özel sunucularında bir oyuncu hesabında 8 karakter açmak, hem PvP hem de PvE sistemler için oldukça faydalıdır. Bu işlem, C++ tabanlı server src düzenlemeleri ile mümkündür. Game ve auth sunucularında yapılacak küçük değişikliklerle oyuncu deneyimi ciddi anlamda geliştirilebilir. Metin2Lobby.com olarak bu tarz source edit ve development konularında size yardımcı olmaya devam edeceğiz.
Creating 8 Character Slots per Account with C++ on Metin2 Lobby
Metin2 private servers require customizations to enhance player experience, and one common modification involves allowing up to 8 characters per account. This article covers how to implement this feature using C++ in Metin2 private servers. The process involves changes to both game server and auth server codes, touching upon source edit, server src, db core, and more.
Why 8 Characters?
In the original Metin2 version, players can create up to 3 characters per account. However, increasing this limit allows for more flexibility in gameplay, especially in PvP servers where players may want multiple characters of different classes. Having 8 character slots supports both PvP and PvE strategies effectively.
Requirements
To modify the system using C++, you need:
- Game Server Source Code
- Auth Server Source Code
- Database Schema (MySQL or MSSQL)
- Client-Side modifications (optional)
Game Server Modifications
The character list sending function, usually located in CHARACTER_MANAGER.cpp, must be updated to support up to 8 characters. The structure returning the character list should be adjusted accordingly, and character creation limits must also be updated to reflect the new maximum number of allowed characters.
Authentication Server (Auth Server) Settings
On the auth server side, checks are performed before sending the character list to the user. Files like login_data.cpp handle these checks and must be modified to allow up to 8 characters. Additionally, the database schema must be expanded to support the increased number of character entries.
Database (DB) Configuration
In your MySQL or MSSQL database, ensure that the account table in the player database supports up to 8 character slots. If necessary, add columns to accommodate all 8 characters within the database schema.
Client-Side Adjustments
For the changes to take effect, modifications on the client side may also be needed. These adjustments typically occur in uiscript or root folder files. The UI must display up to 8 character slots, and if using Python GUI, adjust the character selection code to reflect the new slot count.
Testing and Compilation
After applying all changes, recompile the project. Ensure there are no errors during the compile process. Once compiled, test character creation and listing functions in a testing environment to confirm players can now create up to 8 characters.
Conclusion
Allowing 8 characters per account on Metin2 private servers enhances both PvP and PvE experiences. This modification requires C++-based edits to the server src and impacts both game and auth servers. At Metin2Lobby.com, we continue to provide resources and guides on such source edit and development topics.
