Npc İteme Göre Sıralama

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
DEV İstek kısmında Bir Arkadaş İstemişti bende X Bir Forumdan Bulup Bu Forumda olmadığını Gördüğüm için Herkezle Paylaşıyorum
Kod:
Root/uishop.py: #Arat     def Ref#Aratself): Root/uishop.py: # Altına ekle     def GetEmptyLines(self):         emptyLines = 8         for i in xrange(5):             empty = 8             for j in xrange(8):                 itemIndex = shop.GetItemID(5*j+i)                 if itemIndex > 0:                     item.SelectItem(itemIndex)                     (w, h) = item.GetItemSize()                     empty -= h             if empty < emptyLines:                 emptyLines = empty         return emptyLines Root/uishop.py: # Arat             self.itemSlotWindow = GetObject("ItemSlot") Root/uishop.py: # Altına ekle             self.board = GetObject("board") Root/uishop.py: # Arat         self.itemSlotWindow = 0 Root/uishop.py: # Altına Ekle         self.board = 0 Root/uishop.py: # Arat     # def Open(self, vid): Root/uishop.py: # değiştir     def Open(self, vid):         isPrivateShop = FALSE         isMainPlayerPrivateShop = FALSE         import chr         if chr.IsNPC(vid):             isPrivateShop = FALSE         else:             isPrivateShop = TRUE         self.board.SetSize(184, 348)         self.itemSlotWindow.ArrangeSlot(0, 5, 8, 32, 32, 0, 0)         self.itemSlotWindow.RefreshSlot()         self.itemSlotWindow.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)         self.btnBuy.SetPosition(21, 292)         self.btnSell.SetPosition(104, 292)         if player.IsMainCharacterIndex(vid):             isMainPlayerPrivateShop = TRUE             self.btnBuy.Hide()             self.btnSell.Hide()             self.btnClose.Show()         else:             if isPrivateShop == FALSE:                 EMPTY_LINES = 32 * self.GetEmptyLines()                 self.board.SetSize(184, 348 - EMPTY_LINES)                 self.itemSlotWindow.ArrangeSlot(0, 5, 8 - EMPTY_LINES / 32, 32, 32, 0, 0)                 self.itemSlotWindow.RefreshSlot()                 self.itemSlotWindow.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)                 self.btnBuy.SetPosition(21, 292 - EMPTY_LINES)                 self.btnSell.SetPosition(104, 292 - EMPTY_LINES)             isMainPlayerPrivateShop = FALSE             self.btnBuy.Show()             self.btnSell.Show()             self.btnClose.Hide()         shop.Open(isPrivateShop, isMainPlayerPrivateShop)         self.Refresh()         self.SetTop()         self.Show()         (self.xShopStart, self.yShopStart, z) = player.GetMainCharacterPosition()        //65 slot icin eklesin     def Open(self, vid):         isPrivateShop = FALSE         isMainPlayerPrivateShop = FALSE         import chr         if chr.IsNPC(vid):             isPrivateShop = FALSE         else:             isPrivateShop = TRUE         self.board.SetSize(283, 320)         self.itemSlotWindow.ArrangeSlot(0, 8, 8, 32, 32, 0, 0)         self.itemSlotWindow.RefreshSlot()         self.itemSlotWindow.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)         # self.btnBuy.SetPosition(21, 292)         # self.btnSell.SetPosition(104, 292)         if player.IsMainCharacterIndex(vid):             isMainPlayerPrivateShop = TRUE             # self.btnBuy.Hide()             # self.btnSell.Hide()             self.btnClose.Show()         else:             if isPrivateShop == FALSE:                 EMPTY_LINES = 32 * self.GetEmptyLines()                 self.board.SetSize(283, 320 - EMPTY_LINES)                 self.itemSlotWindow.ArrangeSlot(0, 8, 8 - EMPTY_LINES / 32, 32, 32, 0, 0)                 self.itemSlotWindow.RefreshSlot()                 self.itemSlotWindow.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)                 #self.btnBuy.SetPositi#self.btnBuy.SetPosition(21               #self.btnSell.SetPosit#self.btnSell.SetPosition(104            isMainPlayerPrivateShop = FALSE             #self.btnBuy.Show()   #self.btnBuy.Show(nSell.Show()  #self.btnSell.Show(Close.Hide()         shop.Open(isPrivateShop, isMainPlayerPrivateShop)         self.Refresh()         self.SetTop()         self.Show()         (self.xShopStart, self.yShopStart, z) = player.GetMainCharacterPosition()
[TABLE=full][TR][TD][/TD][TD][/TD][TD][/TD][TD][/TD][/TR][TR][TD][/TD][TD][/TD][TD][/TD][TD][/TD][/TR][TR][TD][/TD][TD][/TD][TD] [TABLE=full][TR][TD][/TD][/TR][/TABLE] [/TD][TD][/TD][/TR][/TABLE]
Metin2'de NPC Üzerinden Öğeleri Sıralama Rehberi

Metin2 özel sunucularında geliştirme yaparken, oyuncuların NPC üzerinden öğelere erişimini kolaylaştırmak büyük önem taşır. Bu süreçte, NPC üzerinde sunulan öğelerin mantıklı ve kullanıcı dostu bir şekilde sıralanması gerekir. Bu yazıda, NPC üzerinden öğelerin nasıl sıralanacağını, hangi tekniklerin kullanılacağını ve bunun sunucu performansı üzerindeki etkilerini detaylı olarak ele alacağız.

NPC İteme Göre Sıralama Nedir?

NPC üzerinden öğe sunumu yapılırken, belirli bir sıraya göre listeleme yapılması gerekir. Bu sıralama, genellikle öğe türüne, isim alfabetik sırasına, niteliğine veya rüt değerine göre yapılabilir. Bu sayede oyuncular istedikleri ögeyi daha hızlı bulabilir. Özellikle PvP sistemli sunucularda, eşyaların ve güçlendirici itemlerin kolayca bulunabilir olması oyun içi deneyimi artırır.

Sıralama Yöntemleri ve Uygulamaları

1. Alfabetik Sıralama: Öğelerin ismine göre A-Z sıralaması yapılır. Bu yöntem, oyuncuların belirli bir eşyayı ararken kolayca bulmasını sağlar. Python GUI üzerinden yapılan arayüzlerde bu tür sıralamalar kolaylıkla uygulanabilir.
2. Türüne Göre Sıralama: Örneğin, silahlar, zırhlar, aksesuarlar gibi kategorilere göre gruplanabilir. Bu, kullanıcıların daha organize bir şekilde gezmesini sağlar.
3. Nitelik Derecesine Göre Sıralama: Öğelerin sahip olduğu bonuslara veya güçlendirme seviyesine göre sıralanmasıdır. Özellikle PvP sunucularında bu tür sıralamalar çok tercih edilir.

C++ Kaynak Kodlarında Sıralama Mantığı

Metin2 sunucu tarafında C++ ile geliştirilen sistemlerde, veritabanından alınan öğe listesi std::sort fonksiyonu ile belirli kriterlere göre sıralanabilir. Örneğin:

int compareItems(const Item& a, const Item& b) { return a.getName() < b.getName(); }

Bu fonksiyon, isme göre sıralama yapar. Benzer şekilde, başka parametrelere göre de sıralama yapılabilir. Bu işlemler game core kısmında tanımlanmalıdır.

Python Arayüz Tarafında Sıralama

Py Root dosyalarında, UI üzerinden gösterilen öğeler Python tarafından yönetilir. Py GUI ile geliştirilen menülerde, sorted() fonksiyonu ile liste sıralanabilir. Örneğin:

sorted_items = sorted(item_list, key=lambda x: x.level)

Bu sayede, öğeler seviyeye göre sıralanır ve kullanıcıya daha okunabilir bir liste gösterilir.

Performans Etkileri

Sıralama işlemi, özellikle çok sayıda öğe olduğu durumlarda performansı etkileyebilir. Bu nedenle sıralama algoritmalarının optimize edilmesi ve sunucu tarafında minimum işlem yüküyle çalışması önemlidir. Martysama gibi gelişmiş sistemlerde, bu tür optimizasyonlar önceden planlanmıştır.

Sonuç

NPC üzerinden öğeleri sıralamak, kullanıcı deneyimini artıran küçük ama etkili bir özelliktir. C++, Python ve UI script tarafında yapılan değişikliklerle bu işlem sorunsuzca entegre edilebilir. Metin2 özel sunucularında geliştirme yapan geliştiricilerin dikkat etmesi gereken önemli detaylardan biridir.


Guide to Sorting Items by NPC in Metin2

When developing private Metin2 servers, making items accessible through NPCs in a user-friendly way is crucial. In this process, organizing and sorting the items displayed on NPCs logically is essential. This article will thoroughly examine how to sort items via NPCs, which techniques can be used, and their impact on server performance.

What Is Sorting Items by NPC?

When displaying items via NPCs, they should be listed in a specific order. This sorting may be based on item type, alphabetical name order, attributes, or raw value. By doing so, players can find desired items more quickly. Especially in PvP-based servers, having easily accessible items and power-up equipment enhances the in-game experience.

Sorting Methods and Applications

1. Alphabetical Sorting: Sorting according to the item's name in A-Z order. This method allows players to find a specific item faster. Such sorting can be easily implemented in interfaces created with Python GUI.
2. Sorting by Type: Grouping items like weapons, armors, accessories, etc., helps users navigate more systematically.
3. Sorting by Attribute Level: Sorting based on bonuses or enhancement levels of items. This kind of sorting is highly preferred especially in PvP servers.

Sorting Logic in C++ Source Code

In C++-based systems developed for Metin2 servers, item lists retrieved from the database can be sorted using the std::sort function based on specific criteria. For example:

int compareItems(const Item& a, const Item& b) { return a.getName() < b.getName(); }

This function sorts by name. Similarly, sorting can also be done based on other parameters. These operations must be defined within the game core.

Sorting in Python Interface Side

In Py Root files, items shown via UI are managed by Python. In menus developed with Py GUI, the list can be sorted using the sorted() function. For example:

sorted_items = sorted(item_list, key=lambda x: x.level)

Thus, items are sorted by level, and a more readable list is presented to the user.

Performance Impacts

The sorting process may affect performance, especially when there are many items. Therefore, optimizing sorting algorithms and ensuring minimal server-side processing load is important. In advanced systems like Martysama, such optimizations are planned beforehand.

Conclusion

Sorting items via NPCs is a small but effective feature that enhances user experience. With modifications on C++, Python, and UI script sides, this operation can be seamlessly integrated. It is one of the important details developers working on custom Metin2 servers need to pay attention to.
 

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

Geri
Üst Alt