Slm,
kendim alman bir server yaptigim icin birazda sizlerle paylasayim dedim
(official Serverde bulunuyor)
Hepsi Client üzerine yapiliyor
Client/Userinterface/Game'e girip PythonNonPlayer.h: aciyoruz
aratilir ve kod blogun altina eklenir:
sonra bu aratilir
altina bunu ekliyoruz
Kayit edip kapadiyoruz ve PythonNonPlayer.cpp aciyoruz
en asaya bunu ekliyoruz
Kaydet kapat
sonra Client/UserInterface/InstanceBase'a girip oradan InstanceBase.cpp aciyoruz
ve CInstanceBase::SetNameString aratiyoruz
son olarak bunun altina bu kodu ekliyoruz
Bukadar iyi EGLENCELER^^
kendim alman bir server yaptigim icin birazda sizlerle paylasayim dedim
(official Serverde bulunuyor)
Hepsi Client üzerine yapiliyor
Client/Userinterface/Game'e girip PythonNonPlayer.h: aciyoruz
Kod:
enum EClickEvent { ON_CLICK_EVENT_NONE = 0, ON_CLICK_EVENT_BATTLE = 1, ON_CLICK_EVENT_SHOP = 2, ON_CLICK_EVENT_TALK = 3, ON_CLICK_EVENT_VEHICLE = 4, ON_CLICK_EVENT_MAX_NUM, };
aratilir ve kod blogun altina eklenir:
Kod:
enum EMobAIFlags { AIFLAG_AGGRESSIVE = (1 << 0), AIFLAG_NOMOVE = (1 << 1), AIFLAG_COWARD = (1 << 2), AIFLAG_NOATTACKSHINSU = (1 << 3), AIFLAG_NOATTACKJINNO = (1 << 4), AIFLAG_NOATTACKCHUNJO = (1 << 5), AIFLAG_ATTACKMOB = (1 << 6 ), AIFLAG_BERSERK = (1 << 7), AIFLAG_STONESKIN = (1 << 8), AIFLAG_GODSPEED = (1 << 9), AIFLAG_DEATHBLOW = (1 << 10), AIFLAG_REVIVE = (1 << 11), };
sonra bu aratilir
Kod:
BYTE GetMobLevel(DWORD dwVnum);
altina bunu ekliyoruz
Kod:
DWORD GetMobAIFlag(DWORD dwVnum);
Kayit edip kapadiyoruz ve PythonNonPlayer.cpp aciyoruz
en asaya bunu ekliyoruz
Kod:
DWORD CPythonNonPlayer::GetMobAIFlag(DWORD dwVnum) { const CPythonNonPlayer::TMobTable * c_pTable = GetTable(dwVnum); if (!c_pTable) return 0; return c_pTable->dwAIFlag; }
Kaydet kapat
sonra Client/UserInterface/InstanceBase'a girip oradan InstanceBase.cpp aciyoruz
ve CInstanceBase::SetNameString aratiyoruz
Kod:
m_stName.assign(c_szName, len);
son olarak bunun altina bu kodu ekliyoruz
Kod:
if (GetInstanceType() == CActorInstance::TYPE_ENEMY && IS_SET(CPythonNonPlayer::Instance().GetMobAIFlag(GetRace()), CPythonNonPlayer::AIFLAG_AGGRESSIVE)) m_stName.append("*");
Bukadar iyi EGLENCELER^^
Metin2 Client Geliştirme Serisi: Agressive Moblarda * İşareti
Metin2 özel sunucularında oyun deneyimini artırmak için birçok küçük ama dikkat çeken detay geliştirilir. Bu detaylardan birisi de 'agressive mob' olarak adlandırılan, oyuncuya otomatik saldırabilen düşman karakterlerin başında gelen yıldız (*) işaretidir. Bu yazıda, C++ tabanlı bir client üzerinde bu işareti nasıl uygulayacağımızı adım adım ele alacağız.
Agressive Mob Nedir?
Metin2 oyununda bazı canavarlar belirli bir menzildeyse oyuncuya otomatik olarak saldırır. Bu canavarlar genellikle 'agressive' (saldırgan) olarak sınıflandırılır. Oyuncu bu tür mobların yakınına yaklaştığında, karakterin üstünde kırmızı bir yıldız belirir. Bu işaret, mobun saldırgan olduğunu ve bir tehdit oluşturduğunu gösterir.
* İşaretinin Görsel Temsili
Bu işaret genellikle karakterin isminin solunda veya sağında belirir. Bazı özel sunucularda bu simge farklı şekillerde de gösterilebilir: bir simge, bir ikon ya da özel bir renk kombinasyonu şeklinde. Ancak klasik ve en yaygın olanı yine '*' karakteridir. Bu görsel işaret kullanıcıya anlık olarak hangi mobun saldırıya geçebileceğini gösterir.
Client Tarafında Uygulama Adımları
C++ tabanlı bir client üzerinde bu özelliği aktif etmek için birkaç dosyanın düzenlenmesi gerekir. Bu dosyalar genellikle UI ile ilgilidir ve genellikle 'uiscript', 'root', 'locale' gibi klasörlerde bulunur.
1. UI Elementinin Tanımlanması: Öncelikle, yıldız işaretinin ekranda gösterileceği nesne tanımlanmalıdır. Bu işlem genellikle bir .py dosyasında yapılır. Karakter ismi üzerinde gösterilmek isteniyorsa, bu nesnenin konumu ve görünümü ayarlanmalıdır.
2. Agressive Durumun Kontrolü: Sunucudan gelen veriye göre, mobun agresif olup olmadığı kontrol edilir. Bu bilgi genellikle 'packet' üzerinden gelir. Client, bu paketi okuyarak ilgili karakterin üzerine yıldız koymayı tetikler.
3. Render Fonksiyonunun Güncellenmesi: Yıldız işareti sadece görünür olmalı, aynı zamanda doğru konumda ve doğru durumda gösterilmelidir. Bu da render fonksiyonuna özel bir kontrol eklenerek sağlanabilir.
Yanlış Uygulamalardan Kaçının[/BR]Client tarafında yapılan küçük değişiklikler, tüm oyun deneyimini etkileyebilir. Özellikle render ve paket yönetimi ile ilgili işlemlerde dikkatli olunmalıdır. Yanlış bir kontrol eklemek, performans kaybına veya grafiksel hatalara yol açabilir.
Sonuç
Metin2 özel sunucularında agresif mobları daha belirgin hale getirmek, hem oyun içi stratejiyi artırır hem de kullanıcı deneyimini olumlu yönde etkiler. C++ client tarafında bu işlemi yaparken dikkat edilmesi gereken temel konular render süreçleri, paket kontrolleri ve UI yönetimidir. Bu yapılandırmaları doğru yaparsanız, sunucunuzda oynayan oyuncular için daha etkileyici ve stratejik bir oyun ortamı yaratmış olursunuz.
Metin2 Client Development Series: The * Sign on Aggressive Mobs
In Metin2 private servers, many small but noticeable details are developed to enhance the gameplay experience. One of these details is the star (*) sign that appears on top of 'aggressive mobs'—monsters that automatically attack players. In this article, we will walk through how to implement this sign on a C++-based client step by step.
What Are Aggressive Mobs?
In the Metin2 game, certain monsters automatically attack the player if they are within a specific range. These monsters are generally classified as 'aggressive'. When a player approaches such a mob, a red star appears above the character, indicating that the mob is aggressive and poses a threat.
Visual Representation of the * Sign
This sign usually appears to the left or right of the character's name. On some private servers, it may also be shown as an icon, a symbol, or with a special color scheme. However, the most common and classic representation remains the '*' character. This visual sign instantly alerts the user which mob might initiate an attack.
Implementation Steps on the Client Side
To activate this feature on a C++-based client, several files need to be modified. These files typically involve UI components and are located in folders like 'uiscript', 'root', 'locale', etc.
1. Defining the UI Element: First, the object for displaying the star must be defined. This is usually done in a .py file. If the star is to appear above the character's name, its position and appearance must be configured accordingly.
2. Checking the Aggressive State: Based on data received from the server, the client checks whether the mob is aggressive. This information typically arrives via a 'packet'. The client reads this packet and triggers the display of the star over the relevant character.
3. Updating the Render Function: The star must not only be visible but also displayed in the correct position and state. This can be achieved by adding a custom check inside the render function.
Avoid Common Mistakes
Small changes made on the client side can significantly impact the overall gaming experience. Especially in areas involving rendering and packet handling, caution is essential. Adding incorrect controls can lead to performance loss or graphical errors.
Conclusion
Making aggressive mobs more visible in Metin2 private servers enhances both in-game strategy and user experience. When implementing this feature on the C++ client side, key considerations include render processes, packet handling, and UI management. With proper configuration, you can create a more immersive and strategic gaming environment for players on your server.
