ANLATIM TAMAMEN BANA AİTTİR
Dönüşüm Kürelerini Denerken Tesadüfen Üzerimde Resimde Gördüğünüz Elektrik Efektine Sahip Zırh Vardı. Dönüşüm Küresine Tıkladığım'da Bu Elektrik Efektinin Temizlenmediğini Gördüm. Bu Nedenle Bunun Böyle Olmaması Gerektiğini Düşündüm. Bir Canavara Dönüşüyorsun ve Üzerinizde Zırh'a Ait Efekt Var. Bence Biraz Komik.
O Nedenle Bunu Nasıl Düzeltebileceğimin Yollarını Aradım. Öncelikle ClientSource'de Karakterimin Dönüştüğünü Tanımlayan Bir İfade Var mı Diye Baktım.
Yani Şey Gibi Düşünün Otobüsün Kapı Açma Düğmesine Bastınız ve Bir Ses "Otobüsün Kapısını Açtınız." diye Bilgi Veriyor.
Yani Anlatmak İstediğim Ben Dönüştüğümde Birşeyin Benim Dönüştüğümü Bilmesi Lazım.
İşte O --> IsPoly()
Peki Dönüştüğümde IsPoly()'in Çalıştığını Nasıl Anladım?
TraceError("IsPoly()");
Ben Dönüştüğümde Eğer IsPoly() Gerçekten Çalışırsa Bunu Client/Syserr.txt'ye Yazdırmasını İstedim. Böylelikle Bu Bana Almak İstediğim Tüm Bilgiyi ve Başlangıçta Kolaylık Sağlayacak Tüm Bilgiyi Vermiş Olacaktı.
İşte InstanceBase.cpp'de Böyle Görünecekti:
Dönüşüm Kürelerini Denerken Tesadüfen Üzerimde Resimde Gördüğünüz Elektrik Efektine Sahip Zırh Vardı. Dönüşüm Küresine Tıkladığım'da Bu Elektrik Efektinin Temizlenmediğini Gördüm. Bu Nedenle Bunun Böyle Olmaması Gerektiğini Düşündüm. Bir Canavara Dönüşüyorsun ve Üzerinizde Zırh'a Ait Efekt Var. Bence Biraz Komik.
O Nedenle Bunu Nasıl Düzeltebileceğimin Yollarını Aradım. Öncelikle ClientSource'de Karakterimin Dönüştüğünü Tanımlayan Bir İfade Var mı Diye Baktım.
Yani Şey Gibi Düşünün Otobüsün Kapı Açma Düğmesine Bastınız ve Bir Ses "Otobüsün Kapısını Açtınız." diye Bilgi Veriyor.
Yani Anlatmak İstediğim Ben Dönüştüğümde Birşeyin Benim Dönüştüğümü Bilmesi Lazım.
İşte O --> IsPoly()
Peki Dönüştüğümde IsPoly()'in Çalıştığını Nasıl Anladım?
TraceError("IsPoly()");
Ben Dönüştüğümde Eğer IsPoly() Gerçekten Çalışırsa Bunu Client/Syserr.txt'ye Yazdırmasını İstedim. Böylelikle Bu Bana Almak İstediğim Tüm Bilgiyi ve Başlangıçta Kolaylık Sağlayacak Tüm Bilgiyi Vermiş Olacaktı.
İşte InstanceBase.cpp'de Böyle Görünecekti:
ve Bu Şekilde Derleyip Dönüştüğümde Syserr'a Bu Yazı Geliyordu. Hımmm...
O Zaman Başlayalım.
InstanceBase.cpp'de
void CInstanceBase::Update()
Fonksyionu var. Buraya Gelelim ve Bu Fonksyion İçinde Aratalım:
Kod:
m_GraphicThingInstance.UpdateAdvancingPointInstance(); AttackProcess(); MovementProcess(); m_GraphicThingInstance.MotionProcess(IsPC());
Ve Altına Ekleyelim:
Eğer Karakterim IsPoly() Olmuş İse Armor Efeklerimi Temizle Diyorum. Zaten Bu Efekleri Sürekli Güncel Tutması İçin Bir Update Var. O Nedenle Dönüşümden Çıktığım Vakit Zırh Efeklerimi Tekrar Client'e Görüntüyü İletecektir.
İşte Kanıt:
Öncesi:
Sonrası:
Metin2 Özel Sunucu Geliştirme Serisi: [C++] Dönüşümdeyken Zırh'a Ait Efekti Temizleme
Giriş
Metin2 özel sunucularında geliştirme yaparken, oyuncuların karakter dönüşümleri sırasında bazı görsel efektlerin kalıcı kalması gibi durumlarla karşılaşabilirsiniz. Özellikle dönüşüm esnasında giyilen zırhların efektlerinin (örneğin aura, parlama, renk geçişleri gibi) dönüştükten sonra da devam etmesi istenmeyen bir durumdur. Bu yazıda, C++ tabanlı game server üzerinde nasıl dönüşüm sırasında zırha ait efektlerin temizleneceğini detaylıca inceleyeceğiz.
Zırh Efektleri ve Dönüşüm Sistemi Nedir?
Metin2'de zırh efektleri genellikle item_proto dosyasında belirlenen özel efekt değerleriyle tanımlanır. Örneğin, bir zırhın özel bir aura efekti olabilir. Bu efektler, karakter zırhı giydiğinde aktif olur. Dönüşüm sistemi ise oyuncunun belirli bir zırh giymişken bir başka forma dönüşmesidir. Dönüşüm esnasında zırh kaldırılır, ancak efektler hâlâ aktif kalabilir. Bu da oyun deneyimini olumsuz yönde etkileyebilir.
Kodlama Adımları
Öncelikle, dönüşüm başlatılırken zırh efektlerinin temizlenmesi gerekir. Bu işlem genellikle char.cpp veya char_item.cpp dosyasında gerçekleştirilir. Aşağıda basit bir örnek verilmiştir:
Kod:
[B]void CHARACTER::RemoveArmorEffects()[/B]{[BR][/BR] for (int i = WEAR_BODY; i <= WEAR_ARROW; ++i) {[BR][/BR] LPITEM pItem = GetWear(i);[BR][/BR] if (pItem && pItem->GetType() == ITEM_ARMOR) {[BR][/BR] // Zırh efektini kaldır[BR][/BR] RemoveAffect(AFFECT_TYPE_ARMOR_EFFECT, pItem->GetVnum());[BR][/BR] }[BR][/BR] }[BR][/BR]}[BR][/BR]
UYARI: Bu kodun çalışabilmesi için RemoveAffect fonksiyonunun doğru şekilde tanımlandığından emin olun. Ayrıca, efekt türlerinin doğru şekilde belirlendiğinden emin olun.
Neden Bu İşlem Gereklidir?
Efektlerin kalıcı olması, hem sunucu performansını düşürebilir hem de oyuncuların deneyimini bozabilir. Örneğin, bir oyuncu Dragon Armor giyer ve bu zırhın mavi bir aura efekti vardır. Eğer dönüşüm esnasında bu efekt kaldırılmazsa, dönüşüm sonrası da bu efekt görünmeye devam eder. Bu da grafiksel tutarsızlıklara neden olur.
Test ve Uygulama[/BR][/BR]Kodunuzu test etmek için öncelikle bir geliştirme ortamında derleyin. Ardından, dönüşüm yaparken zırh efektlerinin temizlendiğini kontrol edin. Hata mesajlarını takip ederek kodunuzu optimize edin. Metin2Lobby forumlarında benzer sorunlarla karşılaşan geliştiricilerle fikir alışverişinde bulunabilirsiniz.
Sonuç
Metin2 özel sunucu geliştirme sürecinde küçük gibi görünen ama kullanıcı deneyimini doğrudan etkileyen bu gibi detaylara dikkat etmek oldukça önemlidir. Dönüşüm esnasında zırh efektlerinin temizlenmesi, profesyonel bir oyun yapısı sunmanın önemli parçalarındandır.
Metin2 Private Server Development Series: Removing Armor Effects During Transformation in [C++]
Introduction
While developing Metin2 private servers, you may encounter issues where visual effects related to equipped armor persist after character transformation. For instance, unwanted effects like aura, glow, or color transitions may continue even after transformation, which can negatively impact gameplay. In this article, we will detail how to remove armor-related effects during transformation on a C++-based game server.
What Are Armor Effects and Transformation Systems?
In Metin2, armor effects are usually defined via special effect values set in the item_proto file. For example, an armor might have a unique aura. These effects activate once the player equips the armor. The transformation system allows a character to change into another form while wearing specific armor. However, during transformation, although the armor is removed, its effects may still remain active, which degrades the user experience.
Coding Steps
Firstly, before starting the transformation process, armor effects must be cleared. This operation typically occurs within files such as char.cpp or char_item.cpp. Below is a simple code example:
Kod:
[B]void CHARACTER::RemoveArmorEffects()[/B]{[BR][/BR] for (int i = WEAR_BODY; i <= WEAR_ARROW; ++i) {[BR][/BR] LPITEM pItem = GetWear(i);[BR][/BR] if (pItem && pItem->GetType() == ITEM_ARMOR) {[BR][/BR] // Remove armor effect[BR][/BR] RemoveAffect(AFFECT_TYPE_ARMOR_EFFECT, pItem->GetVnum());[BR][/BR] }[BR][/BR] }[BR][/BR]}[BR][/BR]
WARNING: Ensure that the RemoveAffect function is properly defined and that effect types are correctly identified.
Why Is This Operation Necessary?
Persistent effects can reduce both server performance and user satisfaction. For example, if a player equips a Dragon Armor with a blue aura and the effect does not get removed during transformation, the aura will continue to appear after the transformation, causing graphical inconsistencies.
Testing and Implementation[/BR][/BR]To test your code, first compile it in a development environment. Then, verify that armor effects are cleared during transformation. Monitor error logs to optimize your code. You can discuss similar issues with other developers on the Metin2Lobby forums.
Conclusion
In Metin2 private server development, attention to small details like these—though seemingly minor—directly impacts the user experience. Properly removing armor effects during transformation is one of the essential elements of delivering a professional game structure.
