Herkese İyi Geceler.
Sistemin Çalışma Prensibi Şu Şekildedir;
Bölüm 1
1: Hedefin RaceFlag'ında ATT_ICE Var İse (Örneğin Buz Golem)
2: Rastgele Bir Tam Sayı Üret
3: Rastgele Sayının Sonucu Küçük ve Eşit İse 15'e - den
4: Tekrar Mersenne İle Rastgele Bir Sayı Üret
5: Mersenne'den Gelen Sonucu Şuan ki Süreye Ekle
6: Bir bonus kazandın. %d saniye boyunca buz canavarlarından hasar almayacaksın.
Bölüm 2
1: Eğer Bir Saldıran Var ve Bu Saldıran IsPC Değil İse
2: Eğer Saldıranın RaceFlagında ATT_ICE Var İse
3: Eğer Değişkenime Eklediğim Süre Büyük İse Şuan ki Zamandan
4: Saldıranın Hasarını Sıfırla
İşte Kodlarımız:
Char.cpp Açın ve Aratın:
Altına Ekleyin:
Char.h Açın ve Aratın:
Üstüne Ekleyin:
Char_Battle.cpp Açın ve Aratın:
Altına Ekleyin:
Tekrar Aratın :
Üstüne Ekleyin:
Tekrar Aratın:
Üstüne Ekleyin:
Kanıt:
1: Canavarlara Damage Problemi Olmaz. (Bonus var iken veya yok iken)
Sistemin Çalışma Prensibi Şu Şekildedir;
Bölüm 1
1: Hedefin RaceFlag'ında ATT_ICE Var İse (Örneğin Buz Golem)
2: Rastgele Bir Tam Sayı Üret
3: Rastgele Sayının Sonucu Küçük ve Eşit İse 15'e - den
4: Tekrar Mersenne İle Rastgele Bir Sayı Üret
5: Mersenne'den Gelen Sonucu Şuan ki Süreye Ekle
6: Bir bonus kazandın. %d saniye boyunca buz canavarlarından hasar almayacaksın.
Bölüm 2
1: Eğer Bir Saldıran Var ve Bu Saldıran IsPC Değil İse
2: Eğer Saldıranın RaceFlagında ATT_ICE Var İse
3: Eğer Değişkenime Eklediğim Süre Büyük İse Şuan ki Zamandan
4: Saldıranın Hasarını Sıfırla
İşte Kodlarımız:
Char.cpp Açın ve Aratın:
Kod:
m_iMoveCount = 0;
Altına Ekleyin:
Kod:
#if defined(ENABLE_EXTRA_DEFENCE_SYSTEM) m_defence_time = 0; #endif
Char.h Açın ve Aratın:
Kod:
}; ESex GET_SEX(LPCHARACTER ch); #endif
Üstüne Ekleyin:
Kod:
#if defined(ENABLE_EXTRA_DEFENCE_SYSTEM) public: DWORD GetDefenseRemainingTime() const { return m_defence_time; } void SetDefenseRemainingTime(DWORD time) { m_defence_time = time; } int GenerateRandomTime(int min, int max); private: DWORD m_defence_time; #endif
Char_Battle.cpp Açın ve Aratın:
Kod:
if (true == IsMonster() && 2493 == GetMobTable().dwVnum) { if (NULL != pkKiller && NULL != pkKiller->GetGuild()) { CDragonLairManager::instance().OnDragonDead( this, pkKiller->GetGuild()->GetID() ); } else { sys_err("DragonLair: Dragon killed by nobody"); } }
Altına Ekleyin:
Kod:
#if defined (ENABLE_EXTRA_DEFENCE_SYSTEM) if (IsMonster() && IsRaceFlag(RACE_FLAG_ICE)) { int iDefenceGiveTime = GenerateRandomTime(20, 40); int kill_prob = number(1, 100); if (kill_prob <= 15) { pkKiller->SetDefenseRemainingTime(get_global_time() + iDefenceGiveTime); pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You earned a bonus. You will not take damage from ice monsters for %d seconds."), iDefenceGiveTime); } } #endif
Tekrar Aratın :
Kod:
struct FuncSetLastAttacked
Üstüne Ekleyin:
Kod:
#if defined (ENABLE_EXTRA_DEFENCE_SYSTEM) int CHARACTER::GenerateRandomTime(int min, int max) { std::random_device rd; std::mt19937 mt(rd()); std::uniform_int_distribution<int> dist(min, max); return dist(mt); } #endif
Tekrar Aratın:
Kod:
if (DAMAGE_TYPE_MAGIC == type) { dam = (int)((float)dam * (100 + (pAttacker->GetPoint(POINT_MAGIC_ATT_BONUS_PER) + pAttacker->GetPoint(POINT_MELEE_MAGIC_ATT_BONUS_PER))) / 100.f + 0.5f); }
Üstüne Ekleyin:
Kod:
#if defined(ENABLE_EXTRA_DEFENCE_SYSTEM) if (pAttacker && !pAttacker->IsPC()) { if (pAttacker->IsRaceFlag(RACE_FLAG_ICE)) { if (GetDefenseRemainingTime() > get_global_time()) dam = 0; } } #endif
Kanıt:
1: Canavarlara Damage Problemi Olmaz. (Bonus var iken veya yok iken)
2: Bonus Yok İken ATT_ICE Canavarın Bana Verdiği Hasar
3: ATT_ICE Olmayan Canavarların Bana Verdiği Hasar
4: ATT_ICE Canavarını Kestiğim Zaman Aldığım Bilgi
5: ATT_ICE Canavarından Hasar Kilitleme Bonusunu Aldıktan Sonra Bana Verilen Süre Boyunca Hasar Verememesi
Not:
Sistemi Dilediğiniz Gibi Değiştirip Kullanabilirsiniz.
Eğer Hata Alırsanız veya Eksik yada Hataya Sebebiyet Verecek Kod ile Karşılaşırsanız Konuya Dahil Edebilirsiniz.
Teşekkür Ederim.
Bir Süreliğine Hasar Bloklama Sistemi (Bonus)
Metin2 özel sunucularında oyuncuların daha dengeli ve stratejik bir oyun deneyimi yaşamasını sağlamak adına geliştirilen sistemlerden birisi de 'Bir Süreliğine Hasar Bloklama Sistemi'dir. Bu sistem, belirli zaman dilimlerinde hasar almayı geçici olarak engelleme imkanı sunarak, oyunculara kritik anlarda avantaj sağlar. Özellikle Metin2 PvP sistemlerinde bu tür bonus mekaniklerin tasarımı, oyunun rekabetçi yapısını güçlendirir ve strateji katmanını derinleştirir.
Hasar Bloklama Sisteminin Temel Amacı
Hasar bloklama sistemi, oyuncuların belirli koşullar altında düşman saldırılarından korunabilmesini sağlar. Bu sistem genellikle belli bir süre için aktif edilir ve sınırlı bir zaman boyunca oyuncuya hasar almadan hareket etme veya saldırı planlaması yapma imkanı verir. Bu bonus, PvP savaşlarında kritik anlarda hayatta kalma şansını artırabilir. Sistem genellikle skill bazlı ya da item bazlı olarak çalışır ve geliştiriciler tarafından C++ ya da Python tabanlı scriptlerle entegre edilir.
Sistem Nasıl Çalışır?
Bu sistem genellikle oyun içinde belirli bir skill veya item kullanılarak aktive edilir. Aktivasyon sonrası, oyuncu belirli bir süre (örneğin 3-5 saniye) boyunca gelen tüm fiziksel ve büyü hasarlarını bloke eder. Bu esnada karakterin görünümüne özel efektler eklenerek bonusun aktif olduğunu göstermek için UI arayüzünde görsel ipuçları verilir. Bu sistem genellikle belirli cooldown süresine sahiptir ve tekrar kullanılması için beklemek gerekir.
C++ ile Uygulama Örneği[/CHARACTER][/BR]
C++ tabanlı Metin2 sunucularında bu sistem genellikle 'game core' üzerinde tanımlanır. Oyuncunun hasar alma fonksiyonu kontrol edilir ve belirli bir durum değişkeni aktifse (örneğin 'block_damage == true') hasar hesaplamaları iptal edilir. Bu işlem için 'py root' dosyalarında da gerekli değişiklikler yapılmalıdır. Bu sayede hem sunucu tarafında hem de istemci tarafında tutarlı bir sistem çalıştırılır.
Python GUI ve Py Root Entegrasyonu
Python tabanlı sistemlerde bu bonus genellikle 'uiscript' dosyaları üzerinden UI tarafında da desteklenir. Py GUI kullanılarak kullanıcı dostu bir arayüz tasarlanabilir ve oyuncuya hasar bloğu süresi, cooldown süresi gibi bilgileri göstermek mümkündür. Bu sayede kullanıcı deneyimi artırılır ve sistem daha anlaşılır hale gelir.
Dikkat Edilmesi Gereken Hususlar
Bu tür bonus sistemler tasarlanırken dengenin bozulmamasına dikkat edilmelidir. Hasar bloklama süresi fazla uzun tutulursa oyuncuların fazla avantaj sağlamasına neden olabilir. Bu yüzden sistem dikkatli test edilmeli ve 'db core' üzerinde loglamalar yapılarak performans analizi yapılmalıdır. Ayrıca, sistem 'pack' dosyaları ile birlikte sunucuya entegre edilirken doğru yapılandırılmış olmalıdır.
Sonuç
Bir süreliğine hasar bloklama sistemi, Metin2 özel sunucularında oyun dengesi ve stratejik derinliği artırmak için güçlü bir araçtır. C++ ve Python tabanlı geliştirme ortamlarında bu sistem kolayca entegre edilebilir. Bu tür sistemlerin doğru tasarlanması, 'server src', 'client src', 'martysama', 'auth', 'game' gibi temel bileşenlerin uyumlu çalışmasını gerektirir. Oyun geliştiricileri için bu sistem, hem teknik hem de deneyimsel açıdan değerli bir bonus mekanik örneğidir.
Temporary Damage Blocking System (Bonus)
In Metin2 private servers, one of the systems developed to provide players with a more balanced and strategic gaming experience is the 'Temporary Damage Blocking System'. This system allows temporary blocking of damage during specific time periods, giving players an advantage at critical moments. Especially in Metin2 PvP systems, the design of such bonus mechanics strengthens the competitive structure of the game and deepens the strategy layer.
Main Purpose of the Damage Blocking System
The damage blocking system enables players to protect themselves from enemy attacks under certain conditions. Usually activated by using a specific skill or item within the game, this system allows the player to move or plan attacks without taking damage for a limited duration (e.g., 3-5 seconds). This bonus can increase survival chances during critical moments in PvP battles. The system typically operates on either a skill-based or item-based approach and is integrated via C++ or Python-based scripts.
How Does the System Work?
This system is usually activated by using a specific skill or item within the game. Once activated, the player blocks all incoming physical and magic damage for a set period. During this time, special effects are added to the character's appearance to indicate that the bonus is active, and visual cues are provided in the UI interface to show the active state. The system usually has a cooldown period after use, requiring a wait before it can be used again.
C++ Implementation Example
In C++ based Metin2 servers, this system is generally defined on the 'game core'. The function responsible for taking damage is checked, and if a specific condition variable (e.g., 'block_damage == true') is active, damage calculations are canceled. Necessary modifications must also be made in 'py root' files to ensure consistent operation on both the server and client sides.
Python GUI and Py Root Integration
In Python-based systems, this bonus is often supported on the UI side through 'uiscript' files. Using Py GUI, a user-friendly interface can be designed to display information like damage block duration and cooldown times to the player, enhancing user experience and making the system more understandable.
Important Considerations
When designing such bonus systems, care must be taken not to upset game balance. If the damage blocking duration is too long, it may give players excessive advantages. Therefore, the system should be carefully tested and performance analysis conducted by logging via the 'db core'. Additionally, the system must be properly configured when integrated into the server via 'pack' files.
Conclusion
The temporary damage blocking system is a powerful tool for increasing game balance and strategic depth in Metin2 private servers. Such systems can be easily integrated into C++ and Python-based development environments. Correctly designing these systems requires harmonious operation of key components such as 'server src', 'client src', 'martysama', 'auth', and 'game'. For game developers, this system serves as a valuable example of a bonus mechanic both technically and experientially.
