Lonca Arenası ve Ox Haritasında bineğe binmeyi engelleme C++

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba sevgili Turkmmo ailesi
Buna benzer kodlar daha önce paylaşılmış olduğunu gördüm fakat;
hem warning bulunuyordu hemde gereksiz yere 2 dosyada toplanmıştı
birazcık düzeltme yaptım



İyi kullanımlar dilerim.
Lonca Arenası ve Ox Haritasında Bineğe Binmeyi Engelleme Sistemi

Metin2 özel sunucularında geliştirme yaparken, oyuncuların belirli alanlarda binek kullanmasını engellemek önemli bir deneyim kontrolüdür. Özellikle Lonca Arenası ve Ox Haritası gibi PvP odaklı alanlarda binek kullanımı dengesizlik yaratabilir. Bu nedenle, C++ tabanlı sunucu tarafında geliştirilen bir sistemle bu engellemeyi yapmak gerekir. Bu yazıda, C++ kullanarak bu sistemi nasıl entegre edebileceğinizi adım adım anlatacağız.

Sistem Gereksinimleri
Bu sistemi uygulamak için öncelikle game_src dosyalarına erişiminiz olması gerekir. Ayrıca, client_map_location veya map_index bilgilerini tanımlayabilmek için harita indekslerini biliyor olmanız gerekir. Lonca Arenası genellikle map index 101, Ox Haritası ise map index 102 olarak tanımlıdır. Bu değerler sunucuya göre değişebilir.

Engelleme Mantığı
Sunucu tarafında, oyuncu bir haritaya geçerken ya da bineğe binmeye çalıştığında bir kontrol mekanizması devreye girer. Eğer oyuncu belirlenen haritalardaysa, binek komutu iptal edilir. Bu işlem genellikle CHARACTER::MountVnum fonksiyonuna müdahale edilerek yapılır. Bu fonksiyon, binek ataması yapılmadan önce çağrılır ve burada harita kontrolü yapılır.

Kod Entegrasyonu
char.cpp dosyasında bulunan MountVnum fonksiyonuna şu şekilde bir kontrol eklenebilir:

Kod:
[COLOR=#9365b8]int CHARACTER::MountVnum() const {[/COLOR][BR][/BR][COLOR=#9365b8]    if (IsMapIndex(101) || IsMapIndex(102)) {[/COLOR][BR][/BR][COLOR=#9365b8]        ChatPacket(CHAT_TYPE_INFO, '[COLOR=red]Bu haritada bineğe binemezsiniz.[/COLOR]');[/COLOR][BR][/BR][COLOR=#9365b8]        return 0; // Binek engellenir[/COLOR][BR][/BR][COLOR=#9365b8]    }[/COLOR][BR][/BR][COLOR=#9365b8]    // Normal binek ataması[/COLOR][BR][/BR][COLOR=#9365b8]    return m_mount_vnum;[/COLOR][BR][/BR][COLOR=#9365b8]}[/COLOR]


Harita Kontrolü Nasıl Yapılır?
IsMapIndex fonksiyonu, oyuncunun bulunduğu haritanın indeksini kontrol eder. Bu indeks, map_info.txt dosyasında tanımlanmıştır. Bu dosyayı kontrol ederek hangi haritanın hangi indekse sahip olduğunu öğrenebilirsiniz. Bu sayede farklı haritalarda da benzer engellemeler kolayca uygulanabilir.

Sunucu Derleme İşlemi
Yapılan değişikliklerden sonra game serveri yeniden derlenmelidir. Derleme sırasında hata alınmaması için tüm parantezlerin ve koşulların doğru olduğundan emin olun. make clean && make komutları ile derleme işlemini gerçekleştirebilirsiniz.

Test ve Geliştirme
Değişikliği test etmek için Lonca Arenası ve Ox Haritası'na gidip bineğe binmeye çalışın. Sistem düzgün çalışıyorsa, bineğe binme işlemi engellenmeli ve bilgi mesajı görünmelidir. Hatalı kullanım durumlarında log dosyalarını kontrol ederek sorunu tespit edebilirsiniz.

Diğer Engelleme Alternatifleri
Ayrıca, binek sadece belirli saatlerde ya da belirli PvP durumlarında engellenebilir. Örneğin, IsPVPInstance() kontrolü ile sadece PvP modundayken binek kullanımını da sınırlayabilirsiniz. Bu sayede daha gelişmiş sistemler geliştirilebilir.

Sonuç
Bu makalede, Metin2 özel sunucularında Lonca Arenası ve Ox Haritası gibi PvP alanlarında bineğe binmeyi engellemek için C++ seviyesinde nasıl bir sistem geliştirilebileceğini anlattık. Bu tür sistemler, oyun deneyimini daha adil ve dengeli hale getirmek için geliştiriciler tarafından sıkça kullanılmaktadır. Sistem doğrudan game_src üzerinde çalıştığı için dikkatli bir şekilde uygulanmalıdır.


Blocking Mount Usage in Guild Arena and Ox Map

When developing Metin2 private servers, blocking players from using mounts in certain areas is an important gameplay control. In PvP-focused areas such as Guild Arena and Ox Map, mount usage can create imbalances. Therefore, it is necessary to implement a system on the server-side using C++. In this article, we will explain step-by-step how to integrate this system using C++.

System Requirements
To implement this system, you need access to game_src files. Additionally, you must know the map indices for client_map_location or map_index. Typically, Guild Arena is defined as map index 101, while Ox Map is map index 102. These values may vary depending on the server.

Blocking Logic
On the server side, a control mechanism activates when a player enters a map or attempts to mount. If the player is on one of the specified maps, the mount command is canceled. This process is generally done by modifying the CHARACTER::MountVnum function. This function is called before assigning a mount, where the map check occurs.

Code Integration
In the char.cpp file, the following control can be added to the MountVnum function:

Kod:
[COLOR=#9365b8]int CHARACTER::MountVnum() const {[/COLOR][BR][/BR][COLOR=#9365b8]    if (IsMapIndex(101) || IsMapIndex(102)) {[/COLOR][BR][/BR][COLOR=#9365b8]        ChatPacket(CHAT_TYPE_INFO, '[COLOR=red]You cannot mount in this map.[/COLOR]');[/COLOR][BR][/BR][COLOR=#9365b8]        return 0; // Mount blocked[/COLOR][BR][/BR][COLOR=#9365b8]    }[/COLOR][BR][/BR][COLOR=#9365b8]    // Normal mount assignment[/COLOR][BR][/BR][COLOR=#9365b8]    return m_mount_vnum;[/COLOR][BR][/BR][COLOR=#9365b8]}[/COLOR]


How to Check Map Index
The IsMapIndex function checks the map index where the player is located. This index is defined in the map_info.txt file. By checking this file, you can see which map corresponds to which index. Thus, similar blocks can easily be applied in other maps.

Server Compile Process
After making changes, the game server must be recompiled. Ensure all brackets and conditions are correct to avoid errors during compilation. You can use the commands make clean && make to perform the compilation.

Testing and Development
To test the changes, go to Guild Arena or Ox Map and attempt to mount. If the system works correctly, the mount action should be blocked and an info message should appear. In case of errors, check log files to identify issues.

Alternative Blocking Options
Additionally, mounts can be restricted only during specific hours or PvP modes. For example, with IsPVPInstance() checks, you can limit mount usage only during PvP. This allows more advanced systems to be developed.

Conclusion
In this article, we explained how to develop a system in C++ to block mount usage in PvP areas like Guild Arena and Ox Map on Metin2 private servers. Such systems are frequently used by developers to make the gaming experience fairer and more balanced. Since this system operates directly on game_src, it must be implemented carefully.
 

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

Benzer konular

Geri
Üst Alt