Selamlar.
Kendim için yaptığım ufak bir eklenti. Kullanmak isteyen olur mu bilmem, paylaşması benden gerisi size kalmış.
Pet atak ve level sistemlerini de paylaşmayı düşünüyorum.
Not: Aşağıda yazılı olan tüm kodları
petsystem.cpp açın
en başta bulun:
altına ekleyin
bulun:
kod bloğunu silip aşağıdaki şekilde değiştirin:
questlua_pet.cpp açın
en başa ekleyin
bulun
kod bloğunun altına ekleyin:
bulun
altına ekleyin
Game src ile işimiz bitti kapatabilirsiniz.
Navicat tablosu için mysql query kodu :
Eklemek için Navicat giriş yaptıktan sonra üst menüde "Query" göreceksiniz, ona tıklayın
Quest_functions içine ekleyin
Quest:
Quest içinde lua dilinin string özelliğini kullandım, aşağıda gördüğünüz şekilde özel karakterleri bulup engelleyebilirsiniz.
Türkçe karakterleri engellemiştim kaldırdım, verdiğim kodlar da tr karakter problemi yoktur.
Yukarıda :
tt > tek tırnak işareti
ct > iki nokta üst üste
nk > tek nokta
vg > virgül
aynı şekilde diğer karakterleri (yıldız sharp vs.) engellersiniz.
Verilen pet ismi tüm petler için geçerlidir.
Kodları değiştirdim, normal kodlarda verilen isim anında petin üstünde yazıyor fakat her pet için ayrı ayrı yapmamız gerekiyor bu da gereksiz diye düşündüm.
Not: Pet ismi quest içinde maximum 12 karakter olarak ayarlı ama mysql tablosu 24 karaktere kadar açık.
İsterseniz 12'yi değiştirip 24'e kadar çıkarabilirsiniz.
Metin2 Lobby'da C++ ile Pet'e İsim Vermek
Metin2 özel sunucularında C++ tabanlı sistem geliştirmek isteyen geliştiriciler için pet sistemleri oldukça önemli bir konudur. Özellikle oyuncu deneyimini artırmak adına petlere isim verebilme özelliği, Metin2 özel sunucularında farklılaştırıcı bir özelliktir. Bu yazıda C++ kullanarak Metin2 özel sunucusunda pet'e nasıl isim verileceğini detaylıca ele alacağız.
Pet Sistemi Nedir?
Metin2 oyununda petler, oyunculara yardımcı olan canavarlardır. Pet sistemleri, oyuncuların belirli seviyelerde veya görevlerle kazandıkları bu yaratıklar sayesinde savaşlarda destek almasını sağlar. Ancak standart sistemde petlere isim verme özelliği bulunmaz. Bu nedenle geliştiriciler kendi özel sunucularında bu özelliği eklemek isterler.
C++ ile Pet'e İsim Verme Sistemi
C++ tabanlı game server üzerinde pet isimlendirme işlemi için birkaç adımı izlemek gerekir. İlk olarak, pet veri yapısının bulunduğu sınıfa isim değişkenini eklemek gerekir. Bu değişken genellikle std::string tipinde tanımlanır.
Örnek Kod Yapısı:
class CPetActor {
private:
std::string m_stName;
public:
void SetName(const std::string& name);
const std::string& GetName() const;
};
Sunucu Tarafında Komut Tanımı[/BR]Oyuncunun pete isim vermesi için bir komut tanımlamak gerekir. Bu komut genellikle bir packet üzerinden gönderilir. Sunucuda bu paket yakalanarak pet nesnesine isim atanır. Paket tanımı genellikle client src tarafında yapılmıştır ve game server tarafından işlenir.
Client Side Değişiklikler
Pet isim verme komutunu başlatmak için client üzerinde bir GUI ekranı ya da komut satırı üzerinden isim alma işlemi yapılmalıdır. Bu işlem genellikle uiscript dosyalarında tanımlanır. Oyuncu ismini girdiğinde, bu bilgi sunucuya gönderilir ve pet nesnesine aktarılır.
Veritabanı Entegrasyonu
Pet isimlerinin kalıcı olması için bu bilgilerin veritabanında saklanması gerekir. Genellikle pet_system tablosuna yeni bir alan eklenerek isim bilgisi burada tutulur. Sunucu başlatıldığında bu isimler okunarak pet nesnesine aktarılır.
Python GUI ile İsim Arayüzü
Eğer arayüz kısmını Python ile geliştirmeyi tercih ediyorsanız, py gui kullanarak kullanıcı dostu bir pencere tasarlayabilirsiniz. Oyuncu ismi girdikten sonra bu bilgi py root üzerinden sunucuya aktarılır. Bu sayede hem kullanıcı dostu hem de güçlü bir sistem oluşturulmuş olur.
Sistem Güvenliği ve Doğrulama
Pet isimleri alınırken bazı doğrulamalar yapılmalıdır. Örneğin, isim uzunluğu, özel karakter kullanımı gibi kontroller sağlanmalıdır. Bu doğrulamalar, server side yapılır ve hatalı girişler engellenir. Ayrıca, isim değiştirme hakkı sadece pet sahibine verilmelidir.
Sonuç
Metin2 özel sunucularında petlere isim vermek, oyuncu deneyimini ciddi anlamda artırır. C++ kullanarak bu sistemi geliştirmek, hem güçlü hem de esnek bir çözüm sunar. Geliştiriciler, core seviyesinde değişiklikler yaparak bu sistemi entegre edebilir. Bu sayede hem sunucu yönetimi kolaylaşır hem de oyuncular daha kişisel bir deneyim yaşar.
Naming Pets in C++ on Metin2 Lobby
In Metin2 private servers, pet systems are quite important for developers working with C++ based systems. Naming pets is a differentiating feature that enhances the player experience. In this article, we will cover in detail how to implement pet naming functionality in a Metin2 private server using C++.
What is the Pet System?
Pets in Metin2 are monsters that assist players. Pet systems allow players to obtain these creatures through certain levels or quests, helping them during battles. However, the default system does not include a name-changing feature for pets. Therefore, developers often add this functionality to their private servers.
Implementing Pet Naming with C++
To implement pet naming functionality in a game server based on C++, several steps must be followed. First, you need to add a name variable to the class where the pet data structure is defined. This variable is usually defined as std::string.
Example Code Structure:
class CPetActor {
private:
std::string m_stName;
public:
void SetName(const std::string& name);
const std::string& GetName() const;
};
Command Definition on Server SideTo allow the player to name their pet, a command must be defined. This command is typically sent via a packet. On the server side, this packet is intercepted and the name is assigned to the pet object. The packet definition is usually made in the client src and processed by the game server.
Client-Side Modifications
To initiate the pet naming process, there should be a GUI screen or command-line input in the client to enter the name. This is generally defined in uiscript files. When the player enters the name, the information is sent to the server and transferred to the pet object.
Database Integration
For pet names to be persistent, they must be stored in the database. Usually, a new field is added to the pet_system table to store the name. When the server starts, these names are read and assigned to the pet objects.
GUI Interface with Python
If you prefer to develop the interface in Python, you can design a user-friendly window using py gui. After the player enters the name, this data is sent to the server via py root. This creates both a user-friendly and robust system.
System Security and Validation
Certain validations must be applied when accepting pet names. For example, checks for name length and special character usage should be implemented. These validations are performed on the server side to prevent invalid inputs. Additionally, only the pet owner should be allowed to change the name.
Conclusion
Naming pets in Metin2 private servers significantly improves the player experience. Implementing this system with C++ provides a powerful and flexible solution. Developers can integrate this functionality by making modifications at the core level, simplifying server management while offering players a more personalized experience.
Kendim için yaptığım ufak bir eklenti. Kullanmak isteyen olur mu bilmem, paylaşması benden gerisi size kalmış.
Pet atak ve level sistemlerini de paylaşmayı düşünüyorum.
Not: Aşağıda yazılı olan tüm kodları
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
satır kayması olmadan alabilirsiniz. petsystem.cpp açın
en başta bulun:
Kod:
#include "item.h"
altına ekleyin
Kod:
#include "db.h"
bulun:
Kod:
void CPetActor::SetName(const char* name)
kod bloğunu silip aşağıdaki şekilde değiştirin:
Kod:
void CPetActor::SetName(const char* name) { std::string petName = m_pkOwner->GetName(); if (0 != m_pkOwner && 0 == name && 0 != m_pkOwner->GetName()) { petName += "'s Pet"; } else petName += name; char sorgu[512]; snprintf(sorgu, sizeof(sorgu), "SELECT name FROM pet_name WHERE id = %u", m_pkOwner->GetPlayerID()); std::auto_ptr<SQLMsg> cekgelsin( DBManager::instance().DirectQuery(sorgu) ); if (cekgelsin->Get()->uiNumRows != 0) { MYSQL_ROW row = mysql_fetch_row(cekgelsin->Get()->pSQLResult); char petad[CHARACTER_NAME_MAX_LEN + 1]; strlcpy(petad, row[0], sizeof(petad)); petName = petad; } if (true == IsSummoned()) m_pkChar->SetName(petName); m_name = petName; }
questlua_pet.cpp açın
en başa ekleyin
Kod:
#include "db.h"
bulun
Kod:
int pet_spawn_effect(lua_State* L)
kod bloğunun altına ekleyin:
Kod:
int pet_namever(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr() ; if ( lua_isstring(L, 1) != true ) { lua_pushnumber(L, 1); return 1; } const char * szName = lua_tostring(L, 1); char sorgu[512]; snprintf(sorgu, sizeof(sorgu), "REPLACE INTO pet_name VALUES(%u, '%s')", ch->GetPlayerID(), szName); std::auto_ptr<SQLMsg> yolla( DBManager::instance().DirectQuery(sorgu) ); if (yolla->Get()->uiAffectedRows != 0) { lua_pushboolean(L, 3); return 3; } return 4; }
bulun
Kod:
{ "spawn_effect",pet_spawn_effect},
altına ekleyin
Kod:
{ "adver",pet_namever},
Game src ile işimiz bitti kapatabilirsiniz.
Navicat tablosu için mysql query kodu :
Eklemek için Navicat giriş yaptıktan sonra üst menüde "Query" göreceksiniz, ona tıklayın
Kod:
DROP TABLE IF EXISTS `pet_name`; CREATE TABLE `pet_name` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(24) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL DEFAULT 'NONAME', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci;
Quest_functions içine ekleyin
Kod:
pet.adver
Quest:
Kod:
quest ademin begin state start begin when 71115.use begin say_title("yeni isim ver") local str = input() if str == "" or str == nill then say_title("Kutuyu bos birakma") return end if string.len(str) <= 0 or string.len(str) > 12 then say_title("isim en fazla 12 karakter olabilir") return end local tt = "%'" local ct = "%:" local nk = "%." local vg = "%," if string.find(str, tt) or string.find(str, ct) or string.find(str, nk) or string.find(str, vg) then say_title("ozel isaret kullanamazsin") return end local t = pet.adver(str) say_title("pet adi degistirildi. peti gonder") if t == 1 then say_title("kutuyu bos bırakma") return elseif t == 2 then say_title("12 karakteri gecme") return elseif t == 3 then say_title("isim degisti") end end end end
Quest içinde lua dilinin string özelliğini kullandım, aşağıda gördüğünüz şekilde özel karakterleri bulup engelleyebilirsiniz.
Türkçe karakterleri engellemiştim kaldırdım, verdiğim kodlar da tr karakter problemi yoktur.
Kod:
local tt = "%'" local ct = "%:" local nk = "%." local vg = "%,"
Yukarıda :
tt > tek tırnak işareti
ct > iki nokta üst üste
nk > tek nokta
vg > virgül
aynı şekilde diğer karakterleri (yıldız sharp vs.) engellersiniz.
Verilen pet ismi tüm petler için geçerlidir.
Kodları değiştirdim, normal kodlarda verilen isim anında petin üstünde yazıyor fakat her pet için ayrı ayrı yapmamız gerekiyor bu da gereksiz diye düşündüm.
Not: Pet ismi quest içinde maximum 12 karakter olarak ayarlı ama mysql tablosu 24 karaktere kadar açık.
İsterseniz 12'yi değiştirip 24'e kadar çıkarabilirsiniz.
Metin2 Lobby'da C++ ile Pet'e İsim Vermek
Metin2 özel sunucularında C++ tabanlı sistem geliştirmek isteyen geliştiriciler için pet sistemleri oldukça önemli bir konudur. Özellikle oyuncu deneyimini artırmak adına petlere isim verebilme özelliği, Metin2 özel sunucularında farklılaştırıcı bir özelliktir. Bu yazıda C++ kullanarak Metin2 özel sunucusunda pet'e nasıl isim verileceğini detaylıca ele alacağız.
Pet Sistemi Nedir?
Metin2 oyununda petler, oyunculara yardımcı olan canavarlardır. Pet sistemleri, oyuncuların belirli seviyelerde veya görevlerle kazandıkları bu yaratıklar sayesinde savaşlarda destek almasını sağlar. Ancak standart sistemde petlere isim verme özelliği bulunmaz. Bu nedenle geliştiriciler kendi özel sunucularında bu özelliği eklemek isterler.
C++ ile Pet'e İsim Verme Sistemi
C++ tabanlı game server üzerinde pet isimlendirme işlemi için birkaç adımı izlemek gerekir. İlk olarak, pet veri yapısının bulunduğu sınıfa isim değişkenini eklemek gerekir. Bu değişken genellikle std::string tipinde tanımlanır.
Örnek Kod Yapısı:
class CPetActor {
private:
std::string m_stName;
public:
void SetName(const std::string& name);
const std::string& GetName() const;
};
Sunucu Tarafında Komut Tanımı[/BR]Oyuncunun pete isim vermesi için bir komut tanımlamak gerekir. Bu komut genellikle bir packet üzerinden gönderilir. Sunucuda bu paket yakalanarak pet nesnesine isim atanır. Paket tanımı genellikle client src tarafında yapılmıştır ve game server tarafından işlenir.
Client Side Değişiklikler
Pet isim verme komutunu başlatmak için client üzerinde bir GUI ekranı ya da komut satırı üzerinden isim alma işlemi yapılmalıdır. Bu işlem genellikle uiscript dosyalarında tanımlanır. Oyuncu ismini girdiğinde, bu bilgi sunucuya gönderilir ve pet nesnesine aktarılır.
Veritabanı Entegrasyonu
Pet isimlerinin kalıcı olması için bu bilgilerin veritabanında saklanması gerekir. Genellikle pet_system tablosuna yeni bir alan eklenerek isim bilgisi burada tutulur. Sunucu başlatıldığında bu isimler okunarak pet nesnesine aktarılır.
Python GUI ile İsim Arayüzü
Eğer arayüz kısmını Python ile geliştirmeyi tercih ediyorsanız, py gui kullanarak kullanıcı dostu bir pencere tasarlayabilirsiniz. Oyuncu ismi girdikten sonra bu bilgi py root üzerinden sunucuya aktarılır. Bu sayede hem kullanıcı dostu hem de güçlü bir sistem oluşturulmuş olur.
Sistem Güvenliği ve Doğrulama
Pet isimleri alınırken bazı doğrulamalar yapılmalıdır. Örneğin, isim uzunluğu, özel karakter kullanımı gibi kontroller sağlanmalıdır. Bu doğrulamalar, server side yapılır ve hatalı girişler engellenir. Ayrıca, isim değiştirme hakkı sadece pet sahibine verilmelidir.
Sonuç
Metin2 özel sunucularında petlere isim vermek, oyuncu deneyimini ciddi anlamda artırır. C++ kullanarak bu sistemi geliştirmek, hem güçlü hem de esnek bir çözüm sunar. Geliştiriciler, core seviyesinde değişiklikler yaparak bu sistemi entegre edebilir. Bu sayede hem sunucu yönetimi kolaylaşır hem de oyuncular daha kişisel bir deneyim yaşar.
Naming Pets in C++ on Metin2 Lobby
In Metin2 private servers, pet systems are quite important for developers working with C++ based systems. Naming pets is a differentiating feature that enhances the player experience. In this article, we will cover in detail how to implement pet naming functionality in a Metin2 private server using C++.
What is the Pet System?
Pets in Metin2 are monsters that assist players. Pet systems allow players to obtain these creatures through certain levels or quests, helping them during battles. However, the default system does not include a name-changing feature for pets. Therefore, developers often add this functionality to their private servers.
Implementing Pet Naming with C++
To implement pet naming functionality in a game server based on C++, several steps must be followed. First, you need to add a name variable to the class where the pet data structure is defined. This variable is usually defined as std::string.
Example Code Structure:
class CPetActor {
private:
std::string m_stName;
public:
void SetName(const std::string& name);
const std::string& GetName() const;
};
Command Definition on Server SideTo allow the player to name their pet, a command must be defined. This command is typically sent via a packet. On the server side, this packet is intercepted and the name is assigned to the pet object. The packet definition is usually made in the client src and processed by the game server.
Client-Side Modifications
To initiate the pet naming process, there should be a GUI screen or command-line input in the client to enter the name. This is generally defined in uiscript files. When the player enters the name, the information is sent to the server and transferred to the pet object.
Database Integration
For pet names to be persistent, they must be stored in the database. Usually, a new field is added to the pet_system table to store the name. When the server starts, these names are read and assigned to the pet objects.
GUI Interface with Python
If you prefer to develop the interface in Python, you can design a user-friendly window using py gui. After the player enters the name, this data is sent to the server via py root. This creates both a user-friendly and robust system.
System Security and Validation
Certain validations must be applied when accepting pet names. For example, checks for name length and special character usage should be implemented. These validations are performed on the server side to prevent invalid inputs. Additionally, only the pet owner should be allowed to change the name.
Conclusion
Naming pets in Metin2 private servers significantly improves the player experience. Implementing this system with C++ provides a powerful and flexible solution. Developers can integrate this functionality by making modifications at the core level, simplifying server management while offering players a more personalized experience.
