Anlatım Tamamen Bana Aittir.
Merhaba Arkadaşlar Bugünlerde Durda veya Mali61 Arkadaşımız Yohara Haritalarının İçinde Bulunan sungma_attr.txt Güncellemesini Verdi.
Bu Nedenle Öncelikle Mali61 Arkadaşımıza Teşekkür Ediyorum.
LoadSungmaAttr İndir:
Hali Hazırda Mali61 Tarafından Böyle Bir Altyapımız Var Olmuş Oldu.
Peki Ben Ne Yaptım?
Benim Dosyalarımda Yohara Sistemi Var Bayağı Bir Dolu Dolu Var. Fakat Çoğunuzun Olduğu Gibi Benimde Tüm Sungma Move(Hareket Hızı) Game Tarafından Sorgulanıyor ve İşliyor.
Direk Game Dosyalarımdan Sungma Move İle Point_Mov_Speed İlişkisinin Bağlantısını Kestim ve Point_Mov_Speed İşlevini Eski Haline Geri Getirdim.
Ondan Sonra PythonNetworkStreamPhaseGame.cpp İçerisinde
bool CPythonNetworkStream::RecvPointChange() Fonksiyon İçerisine
Merhaba Arkadaşlar Bugünlerde Durda veya Mali61 Arkadaşımız Yohara Haritalarının İçinde Bulunan sungma_attr.txt Güncellemesini Verdi.
Bu Nedenle Öncelikle Mali61 Arkadaşımıza Teşekkür Ediyorum.
LoadSungmaAttr İndir:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Hali Hazırda Mali61 Tarafından Böyle Bir Altyapımız Var Olmuş Oldu.
Peki Ben Ne Yaptım?
Benim Dosyalarımda Yohara Sistemi Var Bayağı Bir Dolu Dolu Var. Fakat Çoğunuzun Olduğu Gibi Benimde Tüm Sungma Move(Hareket Hızı) Game Tarafından Sorgulanıyor ve İşliyor.
Direk Game Dosyalarımdan Sungma Move İle Point_Mov_Speed İlişkisinin Bağlantısını Kestim ve Point_Mov_Speed İşlevini Eski Haline Geri Getirdim.
Ondan Sonra PythonNetworkStreamPhaseGame.cpp İçerisinde
bool CPythonNetworkStream::RecvPointChange() Fonksiyon İçerisine
Gördüğünüz Üzere Bir TraceError Koydum. Bu, Ben Oyundayken Sürekli Oyuna İletilip İletilmediğini Bilmeme Fayda Sağlayacaktı.
Baktım Sürekli İletiliyor. Hımmmm. Fakat Bir Yerde Sıkıntı Vardı. Client, Benim POINT_SUNGMA_MOVE Sayımın Kaç Olduğunu Bilmiyordu.
O Nedenle Tek Yapmam Gereken Şey SQL'daki Olan Puanımı Client Tarafına Bir Şekilde İletmem Gerekiyordu. Bende Şu Şekilde Yaptım.
GameSource/Char.cpp Açın ve Aratın:
ENABLE_YOHARA_SYSTEM Tanımlaması Gibi Yapın.
Peki O Zaman Şimdi Paket Transferi İşleminde Gidecek Olan Değişkenimizi Ekleyelim.
GameSource/Packet.h Açın ve Aratın:
ENABLE_YOHARA_SYSTEM Tanımlaması Gibi Yapın.
Buraya Kadar Herşeyi İyi. Artık Client Tarafına Sungma Move Puanımız Gidiyor.
Önemli Not: Bu Test İçindi Char.cpp İçindeki İşlem Öncesine Karakterin Sungma Move Çalışan Haritalarda Olup Olmadığı Sorgusunu Ekleyin.
GameSource Build Edebilirsiniz. Gelelim ClientSource Kısmına.
*CLIENT SOURCE*
ClientSource/Packet.h Açın ve GameSource/Packet.h Gibi Ekleyin.
Bu İşe Girişmeden Önce ClientSource'de Birşeyin Benim Hareket Hızımı Kontrol Etmesi Gerektiğini Bilmem Gerekiyordu. Öncelikle Char.cpp'den
bMoveSpeed Gibi Değişkenlerin Client'e Nereye İletildiğini Oradan Nereye Gönderildiğini vs vs. Derken
Geldiğim En Son Nokta InstanceBaseMovement.cpp İçindeki
void CInstanceBase::SetMoveSpeed(UINT uMovSpd) Fonksiyonuydu.
Tamam Artık Hareket Hızımın Kim Tarafından Kontrol Edildiğini Buldum. Şimdi Diğer İşlemlere Geçelim.
Öncelikle bool CPythonNetworkStream::RecvPointChange() Fonksiyonundan Gelecek Puanımı Bir Değişkene Atamam Gerekiyordu.
Zaten void CInstanceBase::SetMoveSpeed(UINT uMovSpd) CInstanceBase Sınıfında Olduğu İçinde
Bu Değişkeni de CInstanceBase Sınıfı İçerisinde Yapmalıydım.
O Zaman Gelin Bir Değişken Yapalım.
InstanceBase.cpp Açın ve Aratın:
Kod:
m_bDamageEffectType = false; m_dwDuelMode = DUEL_NONE; m_dwEmoticonTime = 0;
Altına Ekleyin:
Şuan Değişkenimiz Hazır. Fakat Bu Değişkene Benim Sayı Vermem ve Bu Verdiğim Sayıyı Sorgulamam Gerekecek.
Hadi O Zaman Onu da Yapalım.
Tekrar Aratın:
bool CInstanceBase::SetWeapon(DWORD eWeapon)
Üstüne Ekleyin:
InstanceBase.h Açın ve Aratın:
Kod:
public: DWORD GetDuelMode(); void SetDuelMode(DWORD type); protected: DWORD m_dwDuelMode; DWORD m_dwEmoticonTime;
Altına Ekleyin:
Buraya Kadar Herşey İyi. Şimdi Game Tarafından Gelen Puanımı Bu Değişkene Vermemiz Gerekiyor.
Gelin Şimdi Onu Yapalım.
PythonNetworkStreamPhaseGame.cpp Açın ve Aratın:
bool CPythonNetworkStream::RecvPointChange()
İçinde Tekrar Aratın:
Kod:
if (POINT_GOLD == PointChange.Type) { if (PointChange.amount > 0) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnPickMoney", Py_BuildValue("(i)", PointChange.amount)); } }
Ve Altına Ekleyin:
Önemli Not: TraceError'u Devredışı Bırakmayı Unutmayın.
Geriye Kalan Tek Şey Game'den Gelen Puanımız Eğer Küçük İse sungma_attr.txt'deki move Karşısındaki Sayıdan Hareketimizi Yavaşlatalım.
Hadi Hep Beraber InstanceBaseMovement.cpp İçerisine Girelim ve Şu Şekilde Değiştirelim.
Önemli Not: TraceError'u Devredışı Bırakmayı Unutmayın.
Ayrıca Gelen Verilerin Bilgisi:
Verilere Ait Görsel
Video Kanıt:
1: Sungma Move Puanım sungma_attr.txt İçindeki Sayı'dan[move] Küçük Olduğunda:
2: Sungma Move Puanım sungma_attr.txt İçindeki Sayı'ya[move] Eşit veya Büyük Olursa:
Bu Sadece Test Aşamasındadır. Şuanda Ayakkabı Değiştirdiğinizde Hareket Hızınız da Değişir. Bu Nedenle
void CInstanceBase::SetMoveSpeed(UINT uMovSpd)
m_GraphicThingInstance.SetMoveSpeed(uMovSpd / 200.0f);
Burayı Sabit Bir Sayıya Bağlamanız Gerekmektedir.
Hepinize Kolay Gelsin Hayırlı Geceler ve Hayırlı Ramazanlar.
Akıl Akıldan Üstündür. O Nedenle Daha Bigili Arkadaşlarımızın Bilgilerini de Almak İsterim.
Metin2 Lobby olarak Metin2 özel sunucu geliştirme konusunda uzmanlaşıyoruz. Bu yazıda C++ tabanlı bir istemci üzerinde Yohara haritasında bulunan karakterin hareket hızını nasıl alabileceğimizi ele alacağız.
Yohara Haritası ve Hareket Sistemleri
Metin2 oyununda her haritanın kendine özgü fiziksel ve mekanik kuralları bulunabilir. Özellikle PvP sunucularında, Yohara gibi haritalarda hareket hızı stratejik bir öneme sahiptir. Oyuncuların strateji geliştirmesi ve dövüş mekaniklerini optimize etmesi için hareket hızı[/COORD] bilgisine erişmeleri gerekir.
Hareket Hızı Nedir?
Metin2'de hareket hızı, karakterin bir saniyede katettiği mesafe miktarıdır. Bu değer oyun içi ekipman, buff ve harita bazlı olarak değişebilir. Client tarafında bu değerin okunması, gelişmiş GUI ve script sistemleri için önemlidir.
C++ ile Hareket Hızını Alma
Metin2 client[/BR] kaynak kodları genellikle C++[/BR] ile yazılmıştır. Hareket hızı[/BR] bilgisi genellikle character manager[/BR] veya benzeri sınıflar[/BR] üzerinden alınabilir. Bu işlem için MoveSpeed[/BR] gibi bir değer[/BR] sorgulanmalıdır. Client[/BR] tarafında speed[/BR] bilgisi network[/BR] üzerinden sunucudan gelir. Bu veri packet[/BR] olarak parse edilmelidir[/BR].
Yohara Haritası İçin Özel Ayarlar
Yohara[/BR] gibi PvP[/BR] odaklı haritalarda hareket[/BR] hızı sabit[/BR] kalabilir ya da harita[/BR] dosyasında tanımlı özel[/BR] kurallara göre değişebilir[/BR]. Client[/BR] tarafında bu durum[/BR] algılanmalı ve hız[/BR] doğru şekilde hesaplanmalıdır. Bu, oyuncu[/BR] deneyimi için kritik bir özelliktir.
Kod Örneği
Aşağıda örnek bir C++[/BR] fonksiyonu yer almaktadır:
Kod:
int GetMovementSpeed() {[BR][/BR] int speed = CHARACTER_MANAGER::instance().GetMainCharacterPtr()->GetMoveSpeed();[BR][/BR] return speed;[BR][/BR]}
Sonuç
Metin2[/BR] özel sunucularında client[/BR] tarafında hareket hızı[/BR] bilgisi almak, oyuncu[/BR] deneyimini artırmak ve stratejik[/BR] oyun sistemleri geliştirmek için önemlidir. Yohara[/BR] gibi haritalarda bu bilgi strateji[/BR] açısından kritik rol oynar. C++[/BR] bilgisiyle bu veri kolayca elde edilebilir.
Metin2 Lobby specializes in Metin2 private server development. In this article, we will discuss how to retrieve the character's movement speed on the Yohara map from the client side using C++.
Yohara Map and Movement Systems
In Metin2, each map can have its own unique physical and mechanical rules. Especially in PvP servers, movement speed becomes strategically important in maps like Yohara. For players to develop strategies and optimize combat mechanics, accessing movement speed information is essential.
What is Movement Speed?
In Metin2, movement speed refers to the distance a character travels in one second. This value can vary based on in-game equipment, buffs, and map-specific settings. Accessing this value on the client side is crucial for advanced GUI and script systems.
Retrieving Movement Speed with C++
Metin2 client source codes are mostly written in C++. The movement speed information can usually be accessed through classes like character manager. To do this, you might query values like MoveSpeed. On the client side, the speed data comes from the server via network. This data must be parsed as a packet.
Special Settings for Yohara Map
Maps like Yohara, which are focused on PvP, may have fixed movement speeds or adjustable ones based on map file configurations. On the client side, such conditions should be detected, and the speed calculated accordingly. This is critical for player experience.
Code Example
Here is an example C++ function:
Kod:
int GetMovementSpeed() {[BR][/BR] int speed = CHARACTER_MANAGER::instance().GetMainCharacterPtr()->GetMoveSpeed();[BR][/BR] return speed;[BR][/BR]}
Conclusion
In Metin2 private servers, retrieving movement speed information on the client side is important for enhancing player experience and developing strategic gameplay systems. On maps like Yohara, this information plays a critical role in strategy. With C++ knowledge, this data can be easily retrieved.
