Sunucunuza özel unvan sistemi
GM’ler, seçilen oyuncuların nickinin yanına [TITLE] ekleyebilir.
Örnek: [ŞAMPİYON] Oyuncu1 – tamamen özelleştirilebilir
Unvanlar anında görünür, bekleme yok!
🛡 Komut: /givetitle oyuncu_adi TITLE
char.h → Title Değişkeni Tanımla
2. char.cpp → Title Gönderme Fonksiyonu
3. packet.h → Yeni Paket Yapısı
char.cpp → karakter girişinde:
5. GM Komutu – Title Verme
cmd.cpp
7. Client C++ → Paket Alma
Client Python – Nick Gösterimi
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Reboot atınca title gitmemesi için
SQL Komutu (Navicat, veya diğer terminalde çalıştır):
Sunucu – C++ Kod Değişiklikleri
<h4>Title kaydet:</h4>
<h4>Title yükle:</h4>
Load kısmını, karakter yaratıldığında çağıracağız.
Karakter Girişinde Title Yükle
4. GM Komutlarına Kayıt Ekle
Metin2'de Title System Nedir ve Nasıl Uygulanır?
Metin2 özel sunucularında yetenek sistemi, karakter gelişimi ve oyun içi sosyal yapı açısından kritik öneme sahiptir. Title System, yani Başlık Sistemi, oyuncuların belirli başarılar kazanması durumunda karakterlerine özel başlıklar almasını sağlayan bir özelliktir. Bu sistem, hem PvP ortamında hem de genel oyun deneyiminde kişisel başarıları simgesel olarak yansıtmak için idealdir. Bu yazıda Metin2 özel sunucularında Title System kurulumu, yapılandırması ve geliştirilmesi üzerine detaylı bilgi vereceğiz.
Title System’in Amacı
Title System, oyuncuların belirli görevleri tamamlaması, seviye atlaması, turnuvalarda üst sıralarda yer alması veya diğer etkinliklerde başarı göstermesi durumunda karakterlerinin adının hemen üzerinde veya başka bir konumda özel bir başlık (title) görüntülenmesini sağlar. Bu başlık, örneğin 'Güçlü Savaşçı', 'Turnuva Galibi', 'Zindan Fatihi' gibi ifadeler olabilir. Bu sayede oyuncular arasında prestij oluşur ve oyun içi motivasyon artırılır.
Title System’in Teknik Yapısı
Title System, genellikle C++ tabanlı server-side (sunucu tarafı) kodlama ile entegre edilir. Metin2 sunucularında genellikle game server src üzerinde değişiklikler yapılır. Title verileri genellikle veritabanında (DB) saklanır. Oyuncunun karakteri giriş yaptığında, sistem veritabanından ilgili başlığı çeker ve oyun istemcisine (client) aktarır. Py root ve uiscript gibi client-side yapılar da başlığın doğru şekilde ekranda görünmesi için düzenlenmelidir.
Title Sistemine Özel Başlık Ekleme
Özel başlıklar, genellikle Python veya C++ ile yazılan komutlarla verilebilir. Örneğin, bir oyuncu bir görevi tamamladığında, server-side bir event handler çalışır ve oyuncuya özel bir title ID’si atanır. Bu ID, client tarafında belli bir font ve renk kombinasyonuyla ekrana yazdırılır. Bu tür sistemlerde Martysama tarzı kaynak kodlar referans alınabilir.
Title Sisteminin Geliştirilmesi
Title sistemini daha da geliştirmek isterseniz, başlıkların sadece statik değil, dinamik olarak da değiştirilebilmesini sağlayabilirsiniz. Örneğin, bir oyuncunun PvP skoruna göre başlığı otomatik güncellenebilir. Bu tür dinamik sistemler, Python GUI ile yapılabileceği gibi, Py GUI ile de geliştirilebilir. Ayrıca, farklı kanallarda farklı başlıklar gösterilebilir veya belirli zaman sınırlarına göre geçici başlıklar verilebilir.
Veritabanı (DB) Entegrasyonu
Title System, veritabanı ile sıkı bir şekilde entegredir. Oyuncunun sahip olduğu başlık bilgisi, genellikle 'player' veya 'character' tablosunda bir alan olarak tutulur. Yeni bir title verildiğinde, bu alan güncellenir. DB Core üzerinde yapılan bu güncellemeler, oyuncu giriş yaptığında aktif hale gelir. Bu işlem sırasında dikkat edilmesi gereken önemli noktalardan biri, veritabanı güvenliği ve performanstır.
Title Sisteminin Client Tarafında Görüntülenmesi
Client tarafında, karakterin adının üzerinde görünen başlık, genellikle uiscript dosyalarında tanımlanır. Bu scriptlerde, karakterin konumu, başlık rengi, font boyutu gibi ayarlar yapılır. Py Root klasörlerinde bulunan UI dosyalarında yapılan değişikliklerle, her karakterin başlığı özelleştirilebilir. Bu sayede, her server kendi markasını ve oyun içi sosyal yapısını güçlendirebilir.
Sonuç
Title System, Metin2 özel sunucularında kullanıcı deneyimini zenginleştiren, sosyal yapıyı güçlendiren ve oyuncu sadakatini artıran önemli bir özelliktir. Hem C++ hem de Python tabanlı geliştirme becerileri gerektirir. Doğru uygulandığında, oyuncuların daha fazla etkileşimde bulunmasını ve sunucuda daha uzun süre kalmasını sağlar. Bu sistem, Metin2 Lobby gibi platformlarda sunucu geliştiricileri için önemli bir araçtır.
What is Title System in Metin2 and How to Implement It?
In Metin2 private servers, the talent system, character development, and social structure within the game are of critical importance. The Title System allows players to obtain special titles upon achieving certain accomplishments. This system is ideal for symbolically reflecting personal achievements both in PvP environments and in overall gameplay. In this article, we will provide detailed information on Title System installation, configuration, and development in Metin2 private servers.
Purpose of Title System
The Title System enables special titles to appear above or near the player's name when they complete specific quests, level up, achieve top rankings in tournaments, or succeed in other events. These titles can be expressions such as 'Strong Warrior', 'Tournament Champion', or 'Dungeon Conqueror'. This creates prestige among players and increases in-game motivation.
Technical Structure of Title System
The Title System is typically integrated via C++-based server-side code modifications. In Metin2 servers, changes are usually made to the game server src. Title data is generally stored in the database (DB). When a player logs in, the system retrieves the relevant title from the database and transmits it to the game client. Client-side structures like py root and uiscript must also be adjusted to ensure the title appears correctly on screen.
Adding Custom Titles to Title System
Custom titles can be assigned using commands written in Python or C++. For example, when a player completes a quest, a server-side event handler runs and assigns a unique title ID to the player. This ID is then displayed with specific font and color combinations on the client side. Such systems can reference source codes like those by Martysama.
Enhancing Title System
To further develop the Title System, you can make titles not only static but dynamically changeable. For instance, a player's title may automatically update based on their PvP score. Such dynamic systems can be built using Python GUI or Py GUI. Additionally, different channels may display distinct titles, or temporary titles can be granted based on specific time limits.
Database (DB) Integration
The Title System is tightly integrated with the database. The player's current title is usually stored in a field within the 'player' or 'character' table. When a new title is assigned, this field is updated. These updates made on the DB Core become active when the player logs in. An important point here is database security and performance.
Displaying Titles on the Client Side
On the client side, the title appearing above the character's name is usually defined in uiscript files. Settings such as the character's position, title color, and font size are configured in these scripts. Modifications made in UI files located in the Py Root folders allow customization of each character's title. This strengthens each server's branding and in-game social structure.
Conclusion
The Title System is an important feature in Metin2 private servers that enriches user experience, strengthens social structure, and increases player loyalty. It requires skills in both C++ and Python development. When properly implemented, it encourages more interaction from players and helps retain them longer on the server. This system is an important tool for server developers on platforms like Metin2 Lobby.
GM’ler, seçilen oyuncuların nickinin yanına [TITLE] ekleyebilir.
Örnek: [ŞAMPİYON] Oyuncu1 – tamamen özelleştirilebilir
Unvanlar anında görünür, bekleme yok!
🛡 Komut: /givetitle oyuncu_adi TITLE
char.h → Title Değişkeni Tanımla
Kod:
private: std::string m_strCustomTitle; // GM title public: void SetCustomTitle(const std::string& title) { m_strCustomTitle = title; } const std::string& GetCustomTitle() const { return m_strCustomTitle; } void SendCustomTitle(); // Client'e gönder
2. char.cpp → Title Gönderme Fonksiyonu
Kod:
void CHARACTER::SendCustomTitle() { if (GetDesc()) { TPacketGCTitle p; p.header = HEADER_GC_CUSTOM_TITLE; p.dwVID = GetVID(); strlcpy(p.szTitle, m_strCustomTitle.c_str(), sizeof(p.szTitle)); GetDesc()->Packet(&p, sizeof(TPacketGCTitle)); } }
3. packet.h → Yeni Paket Yapısı
Sunucu (Gamesrc) ve client (Clientsrc) dosyalarına ekle:
Kod:
#define HEADER_GC_CUSTOM_TITLE 240 // Kullanılmayan bir ID seç typedef struct packet_gctitle { BYTE header; // HEADER_GC_CUSTOM_TITLE DWORD dwVID; // Oyuncu ID char szTitle[32]; // Title max 31 karakter } TPacketGCTitle;
char.cpp → karakter girişinde:
Kod:
// Giriş işlemleri tamamlandıktan sonra SendCustomTitle();
5. GM Komutu – Title Verme
Kod:
ACMD(do_givetitle) { char name[256], title[256]; two_arguments(argument, name, sizeof(name), title, sizeof(title)); if (!*name || !*title) { ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /givetitle <isim> <title>"); return; } CHARACTER* tch = CHARACTER_MANAGER::instance().FindPC(name); if (!tch) { ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı."); return; } if (strlen(title) > 20) { ch->ChatPacket(CHAT_TYPE_INFO, "Title çok uzun! Maksimum 20 karakter."); return; } std::string formattedTitle = "[" + std::string(title) + "]"; // [TITLE] tch->SetCustomTitle(formattedTitle); tch->SendCustomTitle(); ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncuya '%s' title verildi.", name, formattedTitle.c_str()); tch->ChatPacket(CHAT_TYPE_INFO, "GM size '%s' title verdi.", formattedTitle.c_str()); } ACMD(do_removetitle) { char name[256]; one_argument(argument, name, sizeof(name)); CHARACTER* tch = CHARACTER_MANAGER::instance().FindPC(name); if (!tch) { ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı."); return; } tch->SetCustomTitle(""); tch->SendCustomTitle(); ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncunun title'ı silindi.", name); tch->ChatPacket(CHAT_TYPE_INFO, "GM title'ınızı kaldırdı."); }
cmd.cpp
Kod:
ACMD(do_givetitle); ACMD(do_removetitle); { "givetitle", do_givetitle, GM_IMPLEMENTOR }, { "removetitle", do_removetitle, GM_IMPLEMENTOR },
7. Client C++ → Paket Alma
Kod:
void CPythonNetworkStream::RecvCustomTitlePacket() { TPacketGCTitle p; if (!Recv(sizeof(p), &p)) return; CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance(); CInstanceBase* pInstance = rkChrMgr.GetInstancePtr(p.dwVID); if (pInstance) { pInstance->SetTitle(p.szTitle); } }
Kod:
void RecvCustomTitlePacket();
Paket yönlendirme (packet switch kısmı):
Kod:
case HEADER_GC_CUSTOM_TITLE: RecvCustomTitlePacket(); break;
Client Python – Nick Gösterimi
Kod:
def GetNameString(self): if self.customTitle: return "%s %s" % (self.customTitle, self.name) else: return self.name
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Reboot atınca title gitmemesi için
SQL Komutu (Navicat, veya diğer terminalde çalıştır):
Kod:
ALTER TABLE player.player ADD COLUMN custom_title VARCHAR(32) DEFAULT '';
Sunucu – C++ Kod Değişiklikleri
Kod:
void LoadCustomTitle(); // DB'den oku void SaveCustomTitle(); // DB'ye kaydet
char.cpp içine ekle:
<h4>Title kaydet:</h4>
Kod:
void CHARACTER::SaveCustomTitle() { char szQuery[256]; snprintf(szQuery, sizeof(szQuery), "UPDATE player.player SET custom_title='%s' WHERE id=%u", get_table_safe_string(GetCustomTitle().c_str()).c_str(), GetPlayerID()); CDBManager::instance().ReturnQuery(szQuery, QID_NONE, NULL, NULL); }
<h4>Title yükle:</h4>
Load kısmını, karakter yaratıldığında çağıracağız.
Kod:
void CHARACTER::LoadCustomTitle() { char szQuery[256]; snprintf(szQuery, sizeof(szQuery), "SELECT custom_title FROM player.player WHERE id=%u", GetPlayerID()); std::unique_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(szQuery)); if (pMsg && pMsg->Get()->uiNumRows > 0) { MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult); if (row && row[0]) SetCustomTitle(row[0]); } }
Karakter Girişinde Title Yükle
Kod:
char.cpp veya CHARACTER::Create fonksiyonu içinde LoadCustomTitle(); // Veritabanından oku SendCustomTitle(); // Client'e gönder
4. GM Komutlarına Kayıt Ekle
Kod:
do_givetitle içinde: Unvan verildikten sonra kaydet: tch->SetCustomTitle(formattedTitle); tch->SendCustomTitle(); tch->SaveCustomTitle(); // Kalıcı kaydet do_removetitle içinde: Silindikten sonra veritabanını güncelle: tch->SetCustomTitle(""); tch->SendCustomTitle(); tch->SaveCustomTitle(); // Kalıcı sil
- <li data-xf-list-type="ul">Title veritabanına kaydolur <li data-xf-list-type="ul">Girişte otomatik yüklenir <li data-xf-list-type="ul">GM silerse, kalıcı silinir
Metin2'de Title System Nedir ve Nasıl Uygulanır?
Metin2 özel sunucularında yetenek sistemi, karakter gelişimi ve oyun içi sosyal yapı açısından kritik öneme sahiptir. Title System, yani Başlık Sistemi, oyuncuların belirli başarılar kazanması durumunda karakterlerine özel başlıklar almasını sağlayan bir özelliktir. Bu sistem, hem PvP ortamında hem de genel oyun deneyiminde kişisel başarıları simgesel olarak yansıtmak için idealdir. Bu yazıda Metin2 özel sunucularında Title System kurulumu, yapılandırması ve geliştirilmesi üzerine detaylı bilgi vereceğiz.
Title System’in Amacı
Title System, oyuncuların belirli görevleri tamamlaması, seviye atlaması, turnuvalarda üst sıralarda yer alması veya diğer etkinliklerde başarı göstermesi durumunda karakterlerinin adının hemen üzerinde veya başka bir konumda özel bir başlık (title) görüntülenmesini sağlar. Bu başlık, örneğin 'Güçlü Savaşçı', 'Turnuva Galibi', 'Zindan Fatihi' gibi ifadeler olabilir. Bu sayede oyuncular arasında prestij oluşur ve oyun içi motivasyon artırılır.
Title System’in Teknik Yapısı
Title System, genellikle C++ tabanlı server-side (sunucu tarafı) kodlama ile entegre edilir. Metin2 sunucularında genellikle game server src üzerinde değişiklikler yapılır. Title verileri genellikle veritabanında (DB) saklanır. Oyuncunun karakteri giriş yaptığında, sistem veritabanından ilgili başlığı çeker ve oyun istemcisine (client) aktarır. Py root ve uiscript gibi client-side yapılar da başlığın doğru şekilde ekranda görünmesi için düzenlenmelidir.
Title Sistemine Özel Başlık Ekleme
Özel başlıklar, genellikle Python veya C++ ile yazılan komutlarla verilebilir. Örneğin, bir oyuncu bir görevi tamamladığında, server-side bir event handler çalışır ve oyuncuya özel bir title ID’si atanır. Bu ID, client tarafında belli bir font ve renk kombinasyonuyla ekrana yazdırılır. Bu tür sistemlerde Martysama tarzı kaynak kodlar referans alınabilir.
Title Sisteminin Geliştirilmesi
Title sistemini daha da geliştirmek isterseniz, başlıkların sadece statik değil, dinamik olarak da değiştirilebilmesini sağlayabilirsiniz. Örneğin, bir oyuncunun PvP skoruna göre başlığı otomatik güncellenebilir. Bu tür dinamik sistemler, Python GUI ile yapılabileceği gibi, Py GUI ile de geliştirilebilir. Ayrıca, farklı kanallarda farklı başlıklar gösterilebilir veya belirli zaman sınırlarına göre geçici başlıklar verilebilir.
Veritabanı (DB) Entegrasyonu
Title System, veritabanı ile sıkı bir şekilde entegredir. Oyuncunun sahip olduğu başlık bilgisi, genellikle 'player' veya 'character' tablosunda bir alan olarak tutulur. Yeni bir title verildiğinde, bu alan güncellenir. DB Core üzerinde yapılan bu güncellemeler, oyuncu giriş yaptığında aktif hale gelir. Bu işlem sırasında dikkat edilmesi gereken önemli noktalardan biri, veritabanı güvenliği ve performanstır.
Title Sisteminin Client Tarafında Görüntülenmesi
Client tarafında, karakterin adının üzerinde görünen başlık, genellikle uiscript dosyalarında tanımlanır. Bu scriptlerde, karakterin konumu, başlık rengi, font boyutu gibi ayarlar yapılır. Py Root klasörlerinde bulunan UI dosyalarında yapılan değişikliklerle, her karakterin başlığı özelleştirilebilir. Bu sayede, her server kendi markasını ve oyun içi sosyal yapısını güçlendirebilir.
Sonuç
Title System, Metin2 özel sunucularında kullanıcı deneyimini zenginleştiren, sosyal yapıyı güçlendiren ve oyuncu sadakatini artıran önemli bir özelliktir. Hem C++ hem de Python tabanlı geliştirme becerileri gerektirir. Doğru uygulandığında, oyuncuların daha fazla etkileşimde bulunmasını ve sunucuda daha uzun süre kalmasını sağlar. Bu sistem, Metin2 Lobby gibi platformlarda sunucu geliştiricileri için önemli bir araçtır.
What is Title System in Metin2 and How to Implement It?
In Metin2 private servers, the talent system, character development, and social structure within the game are of critical importance. The Title System allows players to obtain special titles upon achieving certain accomplishments. This system is ideal for symbolically reflecting personal achievements both in PvP environments and in overall gameplay. In this article, we will provide detailed information on Title System installation, configuration, and development in Metin2 private servers.
Purpose of Title System
The Title System enables special titles to appear above or near the player's name when they complete specific quests, level up, achieve top rankings in tournaments, or succeed in other events. These titles can be expressions such as 'Strong Warrior', 'Tournament Champion', or 'Dungeon Conqueror'. This creates prestige among players and increases in-game motivation.
Technical Structure of Title System
The Title System is typically integrated via C++-based server-side code modifications. In Metin2 servers, changes are usually made to the game server src. Title data is generally stored in the database (DB). When a player logs in, the system retrieves the relevant title from the database and transmits it to the game client. Client-side structures like py root and uiscript must also be adjusted to ensure the title appears correctly on screen.
Adding Custom Titles to Title System
Custom titles can be assigned using commands written in Python or C++. For example, when a player completes a quest, a server-side event handler runs and assigns a unique title ID to the player. This ID is then displayed with specific font and color combinations on the client side. Such systems can reference source codes like those by Martysama.
Enhancing Title System
To further develop the Title System, you can make titles not only static but dynamically changeable. For instance, a player's title may automatically update based on their PvP score. Such dynamic systems can be built using Python GUI or Py GUI. Additionally, different channels may display distinct titles, or temporary titles can be granted based on specific time limits.
Database (DB) Integration
The Title System is tightly integrated with the database. The player's current title is usually stored in a field within the 'player' or 'character' table. When a new title is assigned, this field is updated. These updates made on the DB Core become active when the player logs in. An important point here is database security and performance.
Displaying Titles on the Client Side
On the client side, the title appearing above the character's name is usually defined in uiscript files. Settings such as the character's position, title color, and font size are configured in these scripts. Modifications made in UI files located in the Py Root folders allow customization of each character's title. This strengthens each server's branding and in-game social structure.
Conclusion
The Title System is an important feature in Metin2 private servers that enriches user experience, strengthens social structure, and increases player loyalty. It requires skills in both C++ and Python development. When properly implemented, it encourages more interaction from players and helps retain them longer on the server. This system is an important tool for server developers on platforms like Metin2 Lobby.
