[C++] Sorunsuz Grup Kutsama

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Hazır char_skill.cpp





Anlatım:

char_skill.cpp açılır:

Aratılır:

Kod:
// 상대방에게 쓰는 것이 아니면 나에게 써야 한다.     if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))         pkVictim = this;


altına eklenir:

Kod:
if (dwVnum == 94 || dwVnum == 95 || dwVnum == 96 && !GetParty())         pkVictim = this;


tekrar aratılır:


Kod:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))         pkVictim = this;

altına eklenir:

Kod:
if (dwVnum == 94 || dwVnum == 95 || dwVnum == 96 && !GetParty())         pkVictim = this;

tekrar aratılır:

Kod:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))         ComputeSkill(dwVnum, this);

altına eklenir:

Kod:
int GrupKutsama = 1;         else if (!GetParty())         {                     if (dwVnum == 94 || dwVnum == 95 || dwVnum == 96)         ComputeSkill(dwVnum, this);         }         else if (GetParty() && GrupKutsama == 1)         {                     if (dwVnum == 94 || dwVnum == 95 || dwVnum == 96)         {         FPartyPIDCollector f;         GetParty()->ForEachOnMapMember(f, GetMapIndex());         for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)         {         LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);         ComputeSkill(dwVnum, ch);         }         }         }

tekrar aratılır:

Kod:
static const DWORD s_adwSubSkillVnums[*] = {     SKILL_LEADERSHIP,     SKILL_COMBO,     SKILL_MINING,     SKILL_LANGUAGE1,     SKILL_LANGUAGE2,     SKILL_LANGUAGE3,     SKILL_POLYMORPH,     SKILL_HORSE,     SKILL_HORSE_SUMMON,     SKILL_HORSE_WILDATTACK,     SKILL_HORSE_CHARGE,     SKILL_HORSE_ESCAPE,     SKILL_HORSE_WILDATTACK_RANGE,     SKILL_ADD_HP,     SKILL_RESIST_PENETRATE };

altına eklenir:

Kod:
struct FPartyPIDCollector { std::vector <DWORD> vecPIDs; FPartyPIDCollector() { } void operator () (LPCHARACTER ch) { vecPIDs.push_back(ch->GetPlayerID()); } };


guild.cpp aratılır:

Kod:
if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))     {         // 이미 걸려 있으므로 사용하지 않음.         if (ch->FindAffect(pkSk->dwVnum))             return;         victim = ch;     }

altına eklenir:

Kod:
if ((pkSk->dwVnum == 94 || pkSk->dwVnum == 95 || pkSk->dwVnum == 96))     {         if (ch->FindAffect(pkSk->dwVnum))         return;         victim = ch;     }

C++ ile Metin2 Sunucusunda Grup Kutsama Sistemi Oluşturmak


Metin2 özel sunucularında kullanıcı deneyimini artırmak için birçok geliştirici, oyun içi sistemleri genişletmeyi tercih eder. Bunlardan birisi de grup kutsama sistemidir. Bu sistem sayesinde oyuncular, grup üyeleriyle birlikte belirli bonuslar alabilir ve PvP veya PvE maceralarında daha güçlü bir yapı kurabilirler. Bu yazıda, C++ kullanarak nasıl sorunsuz bir grup kutsama sistemi kurulacağını detaylıca ele alacağız.

Grup Kutsama Nedir?

Grup kutsama, oyuncuların bir araya gelerek belirli bonus efektlerinden yararlanmasını sağlayan bir özelliktir. Özellikle Metin2 gibi MMORPG oyunlarında, grupla hareket etmenin avantajları büyüktür. Oyuncular aynı zamanda grup bonusları sayesinde hasar, savunma, can ve diğer istatistikler konusunda artılar elde edebilirler.

C++ ile Uygulama Adımları

Grup kutsama sistemini C++ dilinde geliştirmek için öncelikle Metin2 sunucu kaynak kodlarına erişim sahibi olmanız gerekir. Bu sistemde, oyuncuların grup içinde olup olmadığını kontrol edecek ve grup kotasına göre bonuslar verecek bir yapı kurmalısınız.

1. Oyuncu Grup Kontrolü
Oyuncunun grupta olup olmadığını belirlemek için party_manager.cpp dosyasındaki fonksiyonları kullanabilirsiniz. Gerekli kontrolleri yaptıktan sonra, oyuncu grup içindeyse bonusları aktif edebilirsiniz.

2. Bonus Hesaplama
Her grup üyesi için belirli bonuslar tanımlanabilir. Örneğin, 2 kişilik grup için +%10 HP, 3 kişilik grup için +%15 gibi. Bu değerler client_info.buff üzerinden oyuncuya aktarılır.

3. Bonus Aktivasyonu
Sunucu tarafında, grup bonusları otomatik olarak hesaplanmalı ve oyunculara buff_effect olarak yansıtılmalıdır. Bu işlem sırasında hata oluşmaması için kodun dikkatlice test edilmesi gerekir.

Python Entegrasyonu

Eğer sistemde Python scriptleri de kullanıyorsanız, grup bonuslarını UI Script (uiscript) üzerinden de görselleştirebilirsiniz. Bu sayede oyuncular bonus durumlarını anlık takip edebilir.

Sorunsuz Çalışma İçin Tavsiyeler

• Kodunuzu düzenli test edin: Grup kutsama sistemi, oyuncu verileriyle doğrudan etkileşim halindedir. Her güncellemede tekrar test edilmelidir.
• Performans kaybına dikkat edin: Her grup değişikliğinde bonus güncellemesi yapılması performansı düşürebilir. Bu işlemleri zamanlayıcılarla optimize edin.
• DB kayıtları tutun: Grup bonuslarının sunucu yeniden başlatıldığında kaybolmaması için gerekirse veritabanına kayıt yapılmalıdır.

Sonuç

C++ kullanarak Metin2 özel sunucularında grup kutsama sistemi oluşturmak, oyuncu deneyimini ciddi anlamda artırabilir. Bu sistem, hem sosyal hem de stratejik açıdan oyunculara fayda sağlar. Doğru uygulandığında, sunucunuzun rekabet gücünü yükseltmek için etkili bir araç haline gelir.


Creating a Group Blessing System with C++ in Metin2 Server


To enhance the player experience in Metin2 private servers, many developers prefer expanding in-game systems. One of these is the group blessing system. This system allows players to gain specific bonuses together with their group members and build stronger structures during PvP or PvE adventures. In this article, we will detail how to create a seamless group blessing system using C++.

What Is Group Blessing?

Group blessing is a feature that allows players to benefit from certain bonus effects by gathering together in a group. In MMORPG games like Metin2, moving in groups offers significant advantages. Players can also gain increases in damage, defense, health, and other stats through group bonuses.

Implementation Steps with C++

To develop a group blessing system in C++, you first need access to the Metin2 server source codes. Within this system, you must check whether players are in a group and apply bonuses according to the group size.

1. Player Group Check
You can use functions in the party_manager.cpp file to determine if a player is in a group. After necessary checks, if the player is in a group, bonuses can be activated.

2. Bonus Calculation
Specific bonuses can be defined for each group member. For example, +%10 HP for a 2-player group, +%15 for a 3-player group, etc. These values are transferred to the player via client_info.buff.

3. Activating Bonuses
On the server side, group bonuses should be calculated automatically and reflected to the players as buff_effect. To avoid errors during this process, the code must be carefully tested.

Python Integration

If you are also using Python scripts in your system, you can visualize group bonuses via UI Script (uiscript). This way, players can track their bonus status instantly.

Recommendations for Smooth Operation

• Test your code regularly: The group blessing system interacts directly with player data and should be re-tested after every update.
• Watch out for performance loss: Updating bonuses with every group change might decrease performance. Optimize these operations using timers.
• Keep DB records: To ensure group bonuses do not disappear after a server restart, database entries may be required.

Conclusion

Creating a group blessing system in Metin2 private servers using C++ can significantly enhance the player experience. This system provides benefits both socially and strategically. When implemented correctly, it becomes an effective tool for increasing your server's competitive edge.
 

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

Benzer konular

Geri
Üst Alt