[C++ / Python] Official Elemental World Haritası (Ölüm Eklentisi)

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 34

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Anlatım Tamamen Bana Aittir.

Şimdi Official'de Öldüğünüzde Eğer Mapİndex'iniz Eşit İse Elemental World 4 Yani Set Parçalarının 2.ci Parçasının Düştüğü Haritaya
Karşınıza Bir QuestionDialog Gelir ve Burada Sizin Öldüğünüzü ve Buradan Gitmenizi İsteyen Bir Mesaj ve Tamam Butonu Gelir.

Tamam Butonuna Bastığınızda Sizi Şavaşçı Heykelinin Yani Liman Haritasına Işınlar. (Set Demiricilerinin Olduğu Yere)

Peki Biz Nasıl Yapacağız?

Zaten Hali Hazır'da Öldüğümüzde Sol Yukarıya Restart Dialoglarımız Geliyor.

Peki Onlar Nedir?

Burada yeniden başla ve Şehirde yeniden başla.

Bu Butonlar Oraya Aslen char_battle.cpp'den Game’den Client'e Gönderilen Paket Aracılığı ile ve Client'den Python İşlevine Gönderilir.

Hali Hazırda Böyle Bir Altyapımız Varken Hızlıca char_battle.cpp İçerisine Girip Buradan Dead Fonksiyonuna Gidelim.

15.png


Ve Biraz Alt Kısımlara Geldikten Sonra Şurayı Şu Şekilde Değiştirelim:

141741_b8921a656b61cafc49ba0bc6f132f6a6.png


Şimdi Gelelim Packet.h Dosyamıza ve Resimdeki Struct Yapımızdaki Gibi Yapalım.

141743_12cf9feb5a6aed473b155ebee3ae5baa.png


GameSource İşlemi Bitti Şimdi ClientSource Kısmına Gelelim.

ClientSource'de Packet.h'deki Yapacaklarınız GameSource'deki Packet.h ile Aynı Olacak Orayı Eklemiyorum.

Şimdi Gördüğünüz Üzere Geçenlerde Client-Game ve Game-Client Paket Transfer İletişiminden Bahsetmiştim. Anlayacağınız Üzere Game'den Gelen Paketimiz Çalıştığı Zaman Yani "HEADER_GC_DEAD"


3.png


RecvDeadPacket İsimli Fonksiyonun Çalışmasını İstiyor.

Gelelim O Fonksiyona ve İçeriğine

141745_9ccc613b4a3b5596e1b0c88033a63cfa.png


İçeriğini Tamamen Göstermiyorum Fakat Biraz Alt Tarafına Geldiğinizde Python Tarafındaki OnGameOver İsimli İşlevi Çalıştır Diyor.

Yukarıdaki Resimdeki Gibi Yapın (Kendinize Göre Düzenleyin.)

ve ClientSource Derleyin.

Root Tarafına Gelelim ve Game.py Açın:

141747_f2d5fa003d4b0cad118336c0bc739ad0.png


ClientSourceden Gelen OnGameOver İsimli İşlevi Çalıştırsın Dediğim İşlev.
Argüman Olarak GameSource'den ClientSource'ye Gelen GetMapIndex'imiz.

Ardından İnterFaceModule.py Açın Çünkü Oraya Yönlendiriyor OpenRestartDialog İşlev İsmi İle.
Argüman Olarak GameSource'den ClientSource'ye Gelen GetMapIndex'imiz.

6-png.93451


self.dlgRestart Ne Olum? (Merak Edenler İçin)

141751_4cc8d7c3a245f7b0743e7c9125dcc161.png


Evet Şimdi uiRestart Açalım ve RestartDialog Sınıfına Gelelim

141753_fc8272ce2406c40a9291e9211425a58a.png


Burada Haritamın MapIndex Sayısını Tanımlıyorum.

ve Ardından OpenDialog'a Gelin ve Şu Şekilde Değiştirin

141755_98abae96428288112472dde073e93703.png


AnswerRestartElementalWorld İşlevi

18.png


LocaGame.txt İçin

RESTART_POPUP_GIVEUP_ELEMENTAL_DUNGEON Öldün. \nElementer dünyasından geri dön!

Ben uiCommon'da Yeni Bir Class Oluşturdum Onu'da Ekleyeceğim.

İşte Kanıt: (Sol Yukarıya Dikkat - Non Official ) Onların Olmasını İstemedim.


141757_e119cb6d2fdae34ebbdfb142c6e850a3.jpg


Peki Öldüğüm Harita MapIndex'i Bu Haritaya Eşit Değil İse? (Sol Yukarıya Dikkat)

141759_cc275691fa8a01530ede74ae35573b0f.jpg




Anlatımda Hata veya Problem Varsa Kusura Bakmayın. Bu Eklentide Tamam Butonuna Bastığınızda QuestinDialog Kapanır. En Yakın Zaman'da Küçük Bir Eklenti İle Sizi Heykel Savaşçısının Oraya Warp Etmesini Yapacağım. Bu Konu Sadece Ekrana QuestionDialog'u Getirmekti.

HERKESE KOLAY GELSİN İYİ AKŞAMLAR
[C++ / Python] Official Elemental World Haritası (Ölüm Eklentisi)

Metin2 özel sunucularında oyun deneyimini zenginleştirmek amacıyla geliştirilen eklentilerden biri olan Elemental World Haritası, oyuncuların farklı dünyalara açılan kapılar aracılığıyla seyahat etmesine olanak tanır. Bu harita, özellikle PvP odaklı sunucularda büyük bir rol oynar. Bugün bu haritanın ölüm eklentisi konusunu ele alacağız ve hem C++ hem de Python tarafında nasıl entegre edileceği hakkında detaylı bilgiler sunacağız.

Elemental World Haritası Nedir?
Elemental World, Metin2 oyununda mevcut olan Ana Dünya haritalarının ötesinde, yeni harita ve sistemler sunan gelişmiş bir yapıdır. Oyuncular, belirli görevleri tamamlayarak bu haritaya geçiş yapabilir. Harita, farklı elementlerle (ateş, su, toprak, hava gibi) ilişkilendirilmiş bölgeler içerir ve her bölge kendine has canavarlar, görevler ve ödüller sunar. Özellikle PvP sistemlerinde bu harita, rekabetin daha da arttığı bir saha olarak öne çıkar.

Ölüm Eklentisinin Amacı
Elemental World haritasında, oyuncuların öldüğü durumda ne olacağı önemli bir sorudur. Normal haritalarda öldürülen bir oyuncu belirli bir süre sonra rastgele bir şehirde canlanır. Ancak Elemental World gibi özel alanlarda, bu durumu kontrol etmek sunucu sahipleri için kritik öneme sahiptir. Ölüm eklentisi, oyuncuların Elemental World içinde öldüklerinde hangi koordinata veya haritaya geri döneceğini belirlemeye yarar. Bu sayede sunucu yönetimi daha stabil ve kullanıcı dostu olur.

C++ Tarafında Entegrasyon
C++ tarafında bu sistemi entegre etmek için game core üzerinde değişiklikler yapılması gerekir. Öncelikle, oyuncunun Elemental World haritasında olup olmadığını belirleyen bir fonksiyon yazılır. Eğer oyuncu bu haritada ise, ölümü takiben respawn işlemi sırasında özel bir koordinat atanır. Bu işlem genellikle char_manager.cpp veya benzeri dosyalarda yapılır. Ayrıca, harita ID numarası kontrolü yapılarak, doğru davranış sağlanması sağlanır.

Python Tarafında Entegrasyon
Python tarafında bu işlem genellikle root klasöründe bulunan game.py veya player.py gibi dosyalar üzerinden yapılır. Oyuncunun bulunduğu harita kontrol edilir ve Elemental World haritasında ise özel bir respawn noktası tanımlanır. Bu işlem sırasında uiscript veya py gui üzerinden kullanıcıya bilgi verilebilir. Ayrıca, db üzerinden bu respawn noktaları saklanabilir ve dinamik olarak değiştirilebilir.

Sunucu Geliştirme ve Paketleme
Bu tür eklentileri compile ederken, source edit işlemleri dikkatlice yapılmalıdır. Hatalı bir derleme, sunucuda ciddi sorunlara yol açabilir. Bu nedenle, Martysama veya diğer güvenilir kaynaklardan alınan src dosyaları üzerinde çalışmak, süreci kolaylaştırır. Paketleme aşamasında, tüm dosyalar doğru şekilde pack edilmeli ve sunucuya aktarılmalıdır.

Sonuç
Elemental World haritası, Metin2 özel sunucularında kullanıcı deneyimini ciddi anlamda artırır. Ölüm eklentisi gibi küçük ama etkili sistemler, oyuncuların oyun içi akışını olumlu yönde etkiler. Hem C++ hem de Python tarafında yapılacak küçük değişikliklerle bu sistemler sorunsuzca entegre edilebilir. Metin2Lobby olarak, bu tür gelişmiş sistemlerin geliştirilmesine ve paylaşılmasına devam ediyoruz.


[C++ / Python] Official Elemental World Map (Death Addon)

One of the addons developed to enrich the gameplay experience on Metin2 private servers is the Elemental World Map, which allows players to travel to different worlds through portals. This map plays a significant role especially in PvP focused servers. Today we will focus on the topic of the death addon for this map and provide detailed information about how it can be integrated both on the C++ and Python sides.

What Is The Elemental World Map?
Elemental World is an advanced structure that offers new maps and systems beyond the main world maps in Metin2. Players can enter this map by completing specific quests. The map contains regions associated with different elements (fire, water, earth, air, etc.) and each region offers unique monsters, quests, and rewards. Especially in PvP systems, this map stands out as an area where competition increases further.

Purpose Of The Death Addon
In the Elemental World map, an important question is what happens when a player dies. In normal maps, a killed player respawns randomly in a city after a certain amount of time. However, in special areas like Elemental World, controlling this situation is critically important for server owners. The death addon determines where the player respawns upon death in Elemental World. This ensures more stable and user-friendly server management.

Integration On The C++ Side
To integrate this system on the C++ side, modifications must be made to the game core. First, a function is written to determine if the player is in the Elemental World map. If the player is in this map, a custom coordinate is assigned during the respawn process upon death. This process is usually done in files such as char_manager.cpp. Additionally, a check for the map ID ensures the correct behavior is applied.

Integration On The Python Side
On the Python side, this operation is typically done via files like game.py or player.py located in the root folder. The map where the player is located is checked, and if it is the Elemental World map, a custom respawn point is defined. During this process, users can be informed via uiscript or py gui. Additionally, these respawn points can be stored in the db and dynamically changed.

Server Development And Packaging
While compiling such addons, source edit operations must be performed carefully. An incorrect build may cause serious issues on the server. Therefore, working with src files obtained from reliable sources like Martysama can ease the process. During packaging, all files must be correctly packed and transferred to the server.

Conclusion
The Elemental World map significantly enhances the user experience in Metin2 private servers. Small but effective systems like the death addon positively impact the flow of gameplay for players. These systems can be seamlessly integrated using small changes on both the C++ and Python sides. At Metin2Lobby, we continue to develop and share such advanced systems.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt