..game/src/input_main.cpp ;Aratılır:
Değiştirilir;
Not:Envanterde İç görü küresi varsa item yansıtınca İç Görü Küresi silinir ama yoksa İç Görü istemez.
Kod:
if (nPrismCount < hyperlinks) return 1;
Kod:
if (nPrismCount < hyperlinks) return 0;
Metin2'de İtem Yansıtırma Sırasında İç Görü Küresini Kapatma [C++]
Metin2 özel sunucularında geliştirme yaparken karşılaşılan yaygın sorunlardan birisi, item yansıtmalarında istenmeyen etkileşimlerdir. Özellikle PvP sistemlerinde kullanılan bazı itemlerin (örneğin: yansıma küresi) aktif olduğu esnada, İç Görü (Invisible) gibi görsel etkilerin hatalı çalışması sıkça rastlanan durumlardır. Bu yazıda, C++ tabanlı bir Metin2 sunucu üzerinde item yansıması sırasında İç Görü küresini kapatmayı öğreneceksiniz.
Problemin Tanımı
Metin2 özel sunucularında, bazı itemler belirli durumlarda karakterin görünümünü etkileyebilir. Örneğin: yansıma küresi gibi itemler, karakterin görünümünü farklı hale getirebilir. Ancak bu esnada İç Görü (Invisible) gibi efektlerin aynı anda çalışması, karakterin hem görünür hem de görünmez gibi davranmasına sebep olabilir. Bu da hem hata hem de unfair gameplay'a neden olur.
C++ Kaynak Kodlarında Değişiklik
Sunucu tarafında item yansıması, genellikle game/core/src/entity/ altında bulunan dosyalarda tanımlanır. Özellikle char_item.cpp ve char_state.cpp dosyaları bu işlemle doğrudan ilişkilidir.
Adım Adım Uygulama
1. Item Yansıma Kontrolü: Yansıtma efekti başlatıldığında, karakterin mevcut invisibility durumu kontrol edilmeli. Eğer invisibility açık ise, yansıma süresince bu durum kapatılmalıdır.
2. Durum Yönetimi: GameLoop sırasında, karakterin mevcut efektlerini kontrol eden fonksiyonlara müdahale ederek, yansıma efekti aktifken İç Görü efektinin pasif kalmasını sağlayabilirsiniz.
3. Event Handler Güncelleme: item_use_event.cpp dosyasında, yansıma itemi kullanıldığında tetiklenen event handler'lar arasına, İç Görü durumunu resetleyen kod blokları eklemek gerekir.
Örnek Kod Parçası
Kod:
[COLOR=#9365b8]if (IsReflectorActive()) { // Yansıtma aktifse[BR][/BR] if (IsInvisibilityActive()) { // İç görü aktifse[BR][/BR] RemoveInvisibilityEffect(); // İç görüyü kaldır[BR][/BR] SetFlag(EFFECT_INVISIBILITY_ACTIVE, false); // Flag'i pasif yap[BR][/BR] }[BR][/BR]}[/COLOR]
Python Tarafında UIScript Entegrasyonu
Eğer yansıma itemi bir GUI üzerinden yönetiliyorsa, Python tarafında py ui modüllerinde de benzer kontroller yapılmalıdır. Özellikle py_root ve uiscript dosyalarında item aktiflik kontrolleri güncellenmelidir.
Veritabanı Desteği
Yansıtma itemi ve İç Görü efekti arasındaki çakışmayı önlemek için, DB tarafında bu itemlerin etkileşim kurallarını tanımlamak da faydalı olabilir. Bu sayede sunucu kapandığında bile bu ayarlar korunabilir.
Sonuç
Metin2 özel sunucularında item yansıması sırasında İç Görü efektini kapatmak, hem hata önleyici hem de daha adil bir oyun ortamı sunmak açısından kritik öneme sahiptir. C++ kodlamaya hâkim olmak, bu tür özel durumları yönetmede büyük avantaj sağlar.
Kaynaklar
Metin2 Lobby - Özel Sunucu Geliştirme
Disabling Invisibility Sphere While Reflecting Items in Metin2 [C++]
One of the common issues encountered during development on Metin2 private servers is unwanted interactions during item reflections. Specifically, visual effects like Invisibility may malfunction while items such as reflection spheres are active in PvP systems. This article will teach you how to disable the Invisibility sphere during item reflection on a C++ based Metin2 server.
Problem Definition
In Metin2 private servers, certain items can affect a character's appearance under specific conditions. For instance, items like reflection spheres can alter the character's visual state. However, when visual effects like Invisibility are also active, this can cause the character to behave inconsistently—both visible and invisible at the same time. This leads to errors and unfair gameplay.
Modifications in C++ Source Code
Item reflection on the server side is typically defined in files located under game/core/src/entity/. Particularly, char_item.cpp and char_state.cpp are directly related to these operations.
Step-by-Step Implementation
1. Item Reflection Check: When the reflection effect starts, check whether the character’s current invisibility status is active. If so, disable invisibility for the duration of the reflection effect.
2. State Management: Within the GameLoop, modify functions that control character effects to ensure invisibility remains inactive while reflection is active.
3. Update Event Handlers: In the item_use_event.cpp file, add code blocks to reset the invisibility status when a reflection item is used.
Sample Code Snippet
Kod:
[COLOR=#9365b8]if (IsReflectorActive()) { // If reflection is active[BR][/BR] if (IsInvisibilityActive()) { // If invisibility is active[BR][/BR] RemoveInvisibilityEffect(); // Remove invisibility[BR][/BR] SetFlag(EFFECT_INVISIBILITY_ACTIVE, false); // Set flag to inactive[BR][/BR] }[BR][/BR]}[/COLOR]
UI Script Integration with Python
If the reflection item is managed through a GUI, similar checks must be performed on the Python side as well. Specifically, item activation controls in py_root and uiscript files should be updated accordingly.
Database Support
To prevent conflicts between reflection items and invisibility effects, defining interaction rules in the database can be beneficial. This ensures settings persist even after server restarts.
Conclusion
Disabling the invisibility effect during item reflection in Metin2 private servers is crucial for preventing errors and ensuring fair gameplay. Mastery of C++ coding provides significant advantages in managing such special cases.
Resources
Metin2 Lobby - Private Server Development
