[C++]Questte belirtilen uniqueler dışındaki herşeyi kaldırmak

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba Arkadaşlar,

Yabancı bir forumda yeni paylaşılan gördüğüm gönderiyi paylaşmak istiyorum.

Kod:
// Arat, void SetPartyNull(); // Ekle, bool IsUnique(LPCHARACTER ch);

Kod:
// Dosya Sonuna Ekle, bool CDungeon::IsUnique(LPCHARACTER ch) {     TUniqueMobMap::iterator it = m_map_UniqueMob.begin();     while (it != m_map_UniqueMob.end())     {         if (it->second == ch)         {             return true;         }         ++it;     }     return false; }

Kod:
// Arat, void RegisterDungeonFunctionTable() // Üstüne Ekle,         struct FuncPurgeNormalMonster {   LPDUNGEON pDungeon = NULL;   FuncPurgeNormalMonster(LPDUNGEON pDun) : pDungeon(pDun)   {   }   void operator () (LPENTITY ent)   {     if (!ent->IsType(ENTITY_CHARACTER))       return;     LPCHARACTER pkChr = (LPCHARACTER)ent;     if (!pkChr)       return;     if (pkChr->IsNPC() && (pkChr->IsMonster() || pkChr->IsStone()) && !pDungeon->IsUnique(pkChr))     {       M2_DESTROY_CHARACTER(pkChr);     }   } }; int dungeon_purge_normal_mob(lua_State* L) {   CQuestManager& q = CQuestManager::instance();   LPDUNGEON pDungeon = q.GetCurrentDungeon();   LPSECTREE_MAP pSectree = SECTREE_MANAGER::instance().GetMap(pDungeon->GetMapIndex());   if (NULL != pSectree)   {     FuncPurgeNormalMonster func(pDungeon);     pSectree->for_each(func);   }   return 0; } // Ekle, { "purge_normal_monster",                    dungeon_purge_normal_mob },

questfunctions dosyasına ekleme yapmayı unutmayın.​

Metin2 Private Server Geliştirme Serisi: [C++]Questte Belirtilen Uniqueler Dışındaki Her Şeyi Kaldırmak

Metin2 özel sunucularında oyun içi deneyimi optimize etmek, istenmeyen öğelerden kurtulmak ve belirli questlerin akışını kontrol etmek oldukça önemlidir. Bu bağlamda, bir quest sırasında yalnızca belirli uniquelerin (eşsiz eşyaların) düşmesini sağlamak istiyorsanız, diğer tüm itemlerin düşmemesi için özel bir filtreleme sistemi geliştirmeniz gerekir. Bu yazıda, [C++] dilinde yazılmış bir sistem üzerinden, quest sırasında sadece belirtilen uniquelerin düşmesini sağlayacak kodlama yöntemlerinden bahsedeceğiz.

Uniqueler Nedir?
Metin2'de 'unique' olarak adlandırılan eşyalar, genellikle sadece belirli boss düşüşlerinden ya da quest ödüllerinden elde edilebilen özel ve güçlü eşyalardır. Bu eşyaların düşüş oranları genellikle düşüktür ve çok değerlidir. Ancak bazı questlerde, oyunculara özel olarak sadece unique itemler verilmek istenebilir. Bu durumda, o quest kapsamında diğer tüm itemlerin düşmemesi sağlanmalıdır.

Neden Sadece Belirli Uniqueler?
Bazı özel questler, oyuncuların dikkatini yönlendirmek, belirli eşyaları toplamalarını teşvik etmek veya hikaye akışını desteklemek için tasarlanır. Eğer bu questler sırasında rastgele diğer itemler düşmeye devam ederse, oyuncu ilgisini dağıtabilir veya questin odak noktası bozulabilir. Bu yüzden, sadece belirtilen uniquelerin düşeceği bir sistem oluşturmak, hem oyun dengesini korumada hem de kullanıcı deneyimini iyileştirmede büyük rol oynar.

Sistem Mimarisi ve Kodlama
Öncelikle, questte düşmesine izin verilen unique item ID’lerini bir listede tutmalısınız. Bu liste genellikle bir vnum (virtual number) listesi şeklinde olur. Ardından, düşüş mekanizmasının çalıştığı ana fonksiyonu modifiye ederek, düşecek olan itemin bu listeye dahil olup olmadığını kontrol ettirirsiniz. Eğer listede değilse, düşüş gerçekleşmez.

Aşağıda örnek bir yapı gösterilmiştir:

Kod:
[B]bool[/B] IsItemAllowedInQuest([B]int[/B] itemVnum, [B]const std::vector<int>&[/B] allowedUniques) {[BR][/BR]    [B]for ([/B][B]int[/B] uniqueId : allowedUniques) {[BR][/BR]        [B]if ([/B]itemVnum == uniqueId) {[BR][/BR]            [B]return true[/B];[BR][/BR]        }[BR][/BR]    }[BR][/BR]    [B]return false[/B];[BR][/BR]}


Not: Bu fonksiyon, düşüş mekanizmasında çağrılırken, her item düşmeden önce kontrol edilmelidir. Bu sayede sadece izin verilen uniqueler düşer.

Uygulama Önerileri
- Quest ID bazlı filtreleme yapılabilir. Her quest için ayrı bir unique listesi tanımlanabilir.
- Sunucu tarafında bir config dosyası kullanarak, quest düşüşlerini dinamik olarak yönetebilirsiniz.
- Performans etkisini azaltmak için, unique listeleri map yapısıyla indekslenebilir.

Sonuç
Metin2 özel sunucularında quest tabanlı unique item düşüşlerini kontrol etmek, oyun içi deneyimi ciddi anlamda artırabilir. Doğru yapılandırılmış bir sistemle, oyunculara daha odaklı ve sürükleyici bir oyun akışı sunabilirsiniz. [C++] ile yazılmış bu tarz sistemler, hem güvenli hem de esnek bir şekilde entegre edilebilir. Metin2Lobby olarak bu tür gelişmiş sistemler üzerinde sizlere destek vermeye devam ediyoruz.


Metin2 Private Server Development Series: Removing Everything Except Specified Uniques in [C++]Quest

In Metin2 private servers, optimizing the in-game experience, removing unwanted items, and controlling the flow of specific quests is highly important. In this context, if you want only certain uniques (unique items) to drop during a quest, you need to develop a custom filtering system to prevent all other items from dropping. In this article, we will discuss coding methods using [C++] to ensure that only specified uniques drop during a quest.

What Are Uniques?
In Metin2, 'unique' items are special and powerful items typically obtainable only from specific boss drops or quest rewards. Their drop rates are generally low and they are highly valuable. However, in some quests, players may be specifically intended to receive only unique items. In such cases, preventing all other items from dropping during that quest becomes necessary.

Why Only Specific Uniques?
Some special quests are designed to direct player attention, encourage collecting specific items, or support the story flow. If random items continue to drop during these quests, it can distract the player or disrupt the focus of the quest. Therefore, creating a system where only specified uniques drop helps maintain game balance and improves user experience.

System Architecture and Coding
Firstly, you should store the unique item IDs allowed to drop in the quest within a list. This list is usually in the form of a vnum (virtual number) list. Then, by modifying the main function responsible for the drop mechanism, you check whether the item about to drop is included in this list. If not, the drop does not occur.

An example structure is shown below:

Kod:
[B]bool[/B] IsItemAllowedInQuest([B]int[/B] itemVnum, [B]const std::vector<int>&[/B] allowedUniques) {[BR][/BR]    [B]for ([/B][B]int[/B] uniqueId : allowedUniques) {[BR][/BR]        [B]if ([/B]itemVnum == uniqueId) {[BR][/BR]            [B]return true[/B];[BR][/BR]        }[BR][/BR]    }[BR][/BR]    [B]return false[/B];[BR][/BR]}


Note: This function should be called before each item drop occurs within the drop mechanism, ensuring only allowed uniques drop.

Implementation Suggestions
- Filtering based on Quest ID can be implemented. Each quest can have its own unique list defined.
- You can manage quest drops dynamically using a configuration file on the server side.
- To reduce performance impact, unique lists can be indexed using a map structure.

Conclusion
Controlling unique item drops based on quests in Metin2 private servers can significantly enhance the in-game experience. With a properly configured system, you can offer players a more focused and engaging gameplay flow. Systems written in [C++] can be integrated securely and flexibly. At Metin2Lobby, we continue to provide support for such advanced systems.
 

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

Benzer konular

Geri
Üst Alt