Merhaba TurkMMO ;
Bugün paylaşacağım geliştirme efsun değiştirme ile alakalı, yaptığımız işlem sonucu efsun botlarının değiştirme hızı da artacaktır.
Nedir Bu Geliştirme ?
Her efsun değiştirme işlemi esnasında server, client'e update paketi gönderir bunların içinde 4 adet önemsiz paket vardır.Bir efsun botu kullandığınızı ve 500 ms aralıklarla efsun değiştirdiğini düşünün, aynı anda 5 itemi efsunladığınızı varsayalım bu hesapla server her saniye (5*5*2 = 50) cliente 50 adet paket göndermekte, bunu 100 oyuncunun aynı anda yaptığını düşünün saniyede 5000 paket demek.Bu düzenlemeyi yaparak daha hızlı bir bot ve daha pürüzsüz bir oyun deneyimi elde etmiş olacaksınız.
Nasıl Etki Eder ?
150 ms ile efsun atarken ; ( Düzeltme yapılmadan önce )
<a href="
Bugün paylaşacağım geliştirme efsun değiştirme ile alakalı, yaptığımız işlem sonucu efsun botlarının değiştirme hızı da artacaktır.
Nedir Bu Geliştirme ?
Her efsun değiştirme işlemi esnasında server, client'e update paketi gönderir bunların içinde 4 adet önemsiz paket vardır.Bir efsun botu kullandığınızı ve 500 ms aralıklarla efsun değiştirdiğini düşünün, aynı anda 5 itemi efsunladığınızı varsayalım bu hesapla server her saniye (5*5*2 = 50) cliente 50 adet paket göndermekte, bunu 100 oyuncunun aynı anda yaptığını düşünün saniyede 5000 paket demek.Bu düzenlemeyi yaparak daha hızlı bir bot ve daha pürüzsüz bir oyun deneyimi elde etmiş olacaksınız.
Nasıl Etki Eder ?
150 ms ile efsun atarken ; ( Düzeltme yapılmadan önce )
<a href="
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
" class="link link--external" target="_blank" rel="nofollow ugc noopener" data-proxy-href="/proxy.php?link=https%3A%2F%2Fi.gyazo.com%2Fe63752aaa27e6eb09df2478f8ee1718e.mp4&hash=82e83271f75b6014fbeb07e61dbff074">
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
</a> 150 ms ile efsun atarken ; ( Düzeltme yapıldıktan sonra )
<a href="
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
" class="link link--external" target="_blank" rel="nofollow ugc noopener" data-proxy-href="/proxy.php?link=https%3A%2F%2Fi.gyazo.com%2F04e0ecde16dcdfad9619549458dce6ea.mp4&hash=32588b9d5fb28346961de328f3048d8a">
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
</a> Nasıl Yapılır ?
Game Source
item_attribute.cpp Açılır.
ChangeAttribute fonksiyonunun içinde bulunur ;
Kod:
int iAttributeCount = GetAttributeCount();
Altına eklenir ;
Kod:
SetChangingAttr(true);
ChangeAttribute fonksiyonunun içinde bulunur ;
Kod:
for (int i = GetAttributeCount(); i < iAttributeCount; ++i) { if (aiChangeProb == NULL) { PutAttribute(tmpChangeProb); } else { PutAttribute(aiChangeProb); } }
Altına eklenir ;
Kod:
SetChangingAttr(false); UpdatePacket();
item.h Açılır.
Aşağıdaki kod bulunur ;
Kod:
DWORD GetSIGVnum() const { return m_dwSIGVnum; }
Altına eklenir ;
Kod:
public: bool IsChangingAttr() { return m_bIsChangingAttr; } void SetChangingAttr(bool changing) { m_bIsChangingAttr = changing; } private: bool m_bIsChangingAttr;
item.cpp Açılır.
Aşağıdaki kod bloğu bulunur ;
Kod:
CItem::CItem(DWORD dwVnum) : m_dwVnum(dwVnum), m_bWindow(0), m_dwID(0), m_bEquipped(false), m_dwVID(0), m_wCell(0), m_dwCount(0), m_lFlag(0), m_dwLastOwnerPID(0), m_bExchanging(false), m_pkDestroyEvent(NULL), m_pkUniqueExpireEvent(NULL), m_pkTimerBasedOnWearExpireEvent(NULL), m_pkRealTimeExpireEvent(NULL), m_pkExpireEvent(NULL), m_pkAccessorySocketExpireEvent(NULL), m_pkOwnershipEvent(NULL), m_dwOwnershipPID(0), m_bSkipSave(false), m_isLocked(false), m_dwMaskVnum(0), m_dwSIGVnum (0) { memset( &m_alSockets, 0, sizeof(m_alSockets) ); memset( &m_aAttr, 0, sizeof(m_aAttr) ); }
Komple değiştirilir ;
Kod:
CItem::CItem(DWORD dwVnum) : m_dwVnum(dwVnum), m_bWindow(0), m_dwID(0), m_bEquipped(false), m_dwVID(0), m_wCell(0), m_dwCount(0), m_lFlag(0), m_dwLastOwnerPID(0), m_bExchanging(false), m_pkDestroyEvent(NULL), m_pkUniqueExpireEvent(NULL), m_pkTimerBasedOnWearExpireEvent(NULL), m_pkRealTimeExpireEvent(NULL), m_pkExpireEvent(NULL), m_pkAccessorySocketExpireEvent(NULL), m_pkOwnershipEvent(NULL), m_dwOwnershipPID(0), m_bSkipSave(false), m_isLocked(false), m_dwMaskVnum(0), m_dwSIGVnum (0), m_bIsChangingAttr(false) { memset( &m_alSockets, 0, sizeof(m_alSockets) ); memset( &m_aAttr, 0, sizeof(m_aAttr) ); }
Aşağıdaki kod bulunur ;
Kod:
m_bSkipSave = false;
Altına eklenir ;
Kod:
m_bIsChangingAttr = false;
Aşağıdaki kod bulunur ;
Kod:
if (!m_pOwner || !m_pOwner->GetDesc()) return;
Altına eklenir ;
Kod:
if (IsChangingAttr()) return;
Bu geliştirmeyi paylaşan Metin2Dev'den filipw1 adlı arkadaşa teşekkürler, kendisinden alıntıdır.
Metin2 Lobby'de [C++] Ufak Bir Geliştirme - Efsun Değişimi
Metin2 özel sunucularında geliştirme yaparken zaman zaman oyuncuların deneyimini artırmak için ufak ama etkili sistemler geliştirmek önemlidir. Bu yazıda Efsun Değişimi adlı bir [C++] tabanlı küçük sistemi ele alacağız. Bu sistem sayesinde oyuncular elindeki eşyalara farklı efsunlar ekleyebilecek ya da mevcut efsunları değiştirebilecek. Özellikle PvP odaklı sunucularda bu tür sistemler büyük bir avantaj sağlar.
Efsun Değişimi Nedir?
Efsun Değişimi, oyuncuların sahip oldukları eşyalara özel efektler kazandıran bir sistemdir. Örneğin bir oyuncu bir kılıca +%10 hasar efsunu yerine +%15 hasar efsunu eklemek isteyebilir. Bu işlem genellikle özel item veya coin karşılığı yapılır. Sistem, C++ ile geliştirildiğinde hem sunucu tarafında hem de oyuncu deneyiminde büyük bir esneklik sağlar.
Neden C++ Kullanmalıyız?
C++ tabanlı sistemler, Metin2 özel sunucularında performans ve güvenlik açısından tercih edilir. Game Server tarafında çalışan bu sistemler, doğrudan core ile entegre çalışarak yüksek hızda işlemler yapabilir. Ayrıca source edit işlemleri ile özelleştirme kolaylığı sunar. Efsun değişimi gibi sistemlerde database bağlantısı, güvenlik kontrolleri ve item kontrolü gibi kritik işlemler C++ ile daha verimli yönetilebilir.
Sistemin Temel Yapısı
Bu sistemde temel olarak 3 ana bileşen vardır:
- Oyuncu tarafından seçilen eşya
- Yeni eklenecek efsun türü ve seviyesi
- Gerekli item/coin kontrolü
C++ tarafında bu işlemi başlatmak için bir packet tanımlamak gerekir. Oyuncu GUI üzerinden işlem gerçekleştirdiğinde bu packet sunucuya gönderilir. Sunucu bu paketi analiz eder, gerekli kontrolleri yapar ve efsun değişikliğini onaylarsa eşyanın veritabanındaki değerlerini günceller.
Sistem Avantajları
Efsun Değişimi sistemi sayesinde:
- Oyuncular eşyalarını özelleştirebilir
- PvP deneyimi daha dengeli hale gelir
- Oyuncu sadakati artar
- Sunucu içi ekonomi döngüsü sağlanır
Dikkat Edilmesi Gerekenler
Sistem geliştirilirken security ön planda tutulmalıdır. Yanlışlıkla exploit yaratılmaması için tüm input kontrolleri titizlikle yapılmalıdır. Ayrıca database tarafında yapılan her işlem loglanmalıdır. Bu sayede olası hatalar takip edilebilir.
Sonuç
Metin2 özel sunucularında Efsun Değişimi gibi sistemler, oyuncu deneyimini ciddi anlamda artırır. C++ ile geliştirilen bu tür sistemler, hem performans hem de özelleştirme açısından büyük avantajlar sağlar. Metin2 Lobby olarak, bu tarz gelişmeleri paylaşarak topluluğun gelişmesine katkı sunuyoruz.
A Small Development in [C++] - Enchant Change at Metin2 Lobby
While developing Metin2 private servers, sometimes small but effective systems are needed to enhance the player experience. In this article, we will discuss a small [C++] based system called Enchant Change. With this system, players can add different enchants to their items or replace existing ones. Such systems provide great advantages especially in PvP oriented servers.
What Is Enchant Change?
Enchant Change is a system that allows players to add special effects to their items. For example, a player may want to replace a +%10 damage enchant with a +%15 damage enchant on a sword. This process is usually done in exchange for special items or coins. When developed in C++, this system provides flexibility both on the server-side and in player experience.
Why Use C++?
C++ based systems are preferred in Metin2 private servers due to performance and security reasons. Systems running on the Game Server side work directly integrated with the core and can perform operations at high speed. Additionally, source edit processes allow customization. Critical operations like database connection, security checks, and item control in enchant change systems can be managed more efficiently with C++.
Basic Structure of the System
This system has 3 main components:
- The item selected by the player
- The new enchant type and level to be added
- Required item/coin check
To initiate this process in C++, a packet must be defined. When the player performs an action via the GUI, this packet is sent to the server. The server analyzes the packet, performs necessary checks, and if approved, updates the item's values in the database.
Advantages of the System
With the Enchant Change system:
- Players can customize their items
- PvP experience becomes more balanced
- Player loyalty increases
- An in-game economy cycle is created
Points to Consider
Security must be prioritized during development. All input checks must be performed carefully to avoid creating exploits. Also, every operation on the database should be logged for error tracking purposes.
Conclusion
Enchant Change systems like this one significantly enhance the player experience in Metin2 private servers. Systems developed with C++ offer great advantages in terms of performance and customization. At Metin2 Lobby, we contribute to the community by sharing such developments.
