Rubinum Envanter

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Öncelikle bunu yazan rubinumculara, sonra yabancı forumda paylaşan Dex adlı arkadaşa ve en önemliside bu kaynağı bana atan 'e çok teşekkür ederim.






arat

Kod:
def __LoadWindow(self):         if self.isLoaded == 1:             return         self.isLoaded = 1         try:             pyScrLoader = ui.PythonScriptLoader()             pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py")         except:             import exception             exception.Abort("InventoryWindow.LoadWindow.LoadObject")         try:             wndItem = self.GetChild("ItemSlot")             wndEquip = self.GetChild("EquipmentSlot")

altına ekle

Kod:
wndCostume = self.GetChild("CostumeSlot")             wndSecondary = self.GetChild("SecondarySlot")             wndTalisman = self.GetChild("TalismanSlot")             wndEffect = self.GetChild("EffectSlot")

arat

Kod:
self.DSSButton = self.GetChild2("DSSButton")

altına ekle

Kod:
mask1 = self.GetChild("Equipment_Base")             mask2 = self.GetChild("Costume_Base")             mask3 = self.GetChild("Secondary_Base")             mask4 = self.GetChild("Talisman_Base")             mask5 = self.GetChild("Effect_Base")

arat

Kod:
self.equipmentTab = [*]             self.equipmentTab.append(self.GetChild("Equipment_Tab_01"))             self.equipmentTab.append(self.GetChild("Equipment_Tab_02"))

altına ekle

Kod:
self.costumeTab = [*]             self.costumeTab.append(self.GetChild("Costume_Tab_01"))             self.costumeTab.append(self.GetChild("Costume_Tab_02"))             self.costumeTab.append(self.GetChild("Costume_Tab_03"))             self.costumeTab.append(self.GetChild("Costume_Tab_04"))             self.costumeTab.append(self.GetChild("Costume_Tab_05"))

arat

Kod:
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))             wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))             wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))             wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))             wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))             wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))

altına ekle

Kod:
## New EQUIPMENT         ## Costume         wndCostume.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))         wndCostume.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))         wndCostume.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndCostume.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndCostume.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))         wndCostume.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))         ## Secondary         wndSecondary.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))         wndSecondary.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))         wndSecondary.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndSecondary.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndSecondary.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))         wndSecondary.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))         ## Talisman         wndTalisman.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))         wndTalisman.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))         wndTalisman.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndTalisman.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndTalisman.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))         wndTalisman.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))         ## Effect         wndEffect.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))         wndEffect.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))         wndEffect.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndEffect.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))         wndEffect.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))         wndEffect.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))         ## New EQUIPMENT

arat

Kod:
self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))         self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))         self.equipmentTab[0].Down()         self.equipmentTab[0].Hide()         self.equipmentTab[1].Hide()

altına ekle

Kod:
self.costumeTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))         self.costumeTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))         self.costumeTab[2].SetEvent(lambda arg=2: self.SetEquipmentPage(arg))         self.costumeTab[3].SetEvent(lambda arg=3: self.SetEquipmentPage(arg))         self.costumeTab[4].SetEvent(lambda arg=4: self.SetEquipmentPage(arg))         self.costumeTab[0].Down()         self.costumePageIndex = 0         ## New EQUIPMENT

arat

Kod:
self.wndItem = wndItem         self.wndEquip = wndEquip

altına ekle

Kod:
self.wndCostume = wndCostume         self.wndSecondary = wndSecondary         self.wndTalisman = wndTalisman         self.wndEffect = wndEffect         self.mask1 = mask1         self.mask2 = mask2         self.mask3 = mask3         self.mask4 = mask4         self.mask5 = mask5         ## New EQUIPMENT

arat

Kod:
self.tooltipItem = None         self.wndItem = 0         self.wndEquip = 0

altına ekle

Kod:
## NEW EQUIPMENT         self.wndCostume = 0         self.wndSecondary = 0         self.wndTalisman = 0         self.wndEffect = 0         ## NEW EQUIPMENT

arat

Kod:
def SetEquipmentPage(self, page):

değiştir

Kod:
def SetEquipmentPage(self, page):         self.costumeTab[self.costumePageIndex].SetUp()         self.costumePageIndex = page         self.costumeTab[self.costumePageIndex].Down()         self.mask1.Hide()         self.mask2.Hide()         self.mask3.Hide()         self.mask4.Hide()         self.mask5.Hide()         if page == 0:             self.mask1.Show()         elif page == 1:             self.mask3.Show()         elif page == 2:             self.mask2.Show()         elif page == 3:             self.mask4.Show()         elif page == 4:             self.mask5.Show()         else:             self.mask1.Hide()             self.mask2.Hide()             self.mask3.Hide()             self.mask4.Hide()             self.mask5.Hide()         self.RefreshEquipSlotWindow()     def OnRunMouseWheel(self, nLen):         if nLen > 0:             if self.equipmentPageIndex < 4:                 self.SetEquipmentPage(self.equipmentPageIndex + 1)         else:             if self.equipmentPageIndex > 0:                 self.SetEquipmentPage(self.equipmentPageIndex - 1)

arat

Kod:
def RefreshEquipSlotWindow(self):

değiştir

Kod:
def RefreshEquipSlotWindow(self):         getItemVNum=player.GetItemIndex         getItemCount=player.GetItemCount         setItemVNum=self.wndEquip.SetItemSlot         for i in xrange(player.EQUIPMENT_PAGE_COUNT):             slotNumber = player.EQUIPMENT_SLOT_START)             setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)         for i in xrange(item.COSTUME_SLOT_COUNT):             slotNumber = item.COSTUME_SLOT_START + i             self.wndCostume.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)             self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)             if app.ENABLE_WEAPON_COSTUME_SYSTEM:                 self.wndEquip.SetItemSlot(item.COSTUME_SLOT_WEAPON, getItemVNum(item.COSTUME_SLOT_WEAPON), 0)         if app.ENABLE_NEW_EQUIPMENT_SYSTEM:             for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT):                 slotNumber = player.NEW_EQUIPMENT_SLOT_START + i                 itemCount = getItemCount(slotNumber)                 if itemCount <= 1:                     itemCount = 0                 self.wndSecondary.SetItemSlot(slotNumber, getItemVNum(slotNumber), itemCount)                 print "ENABLE_NEW_EQUIPMENT_SYSTEM", slotNumber, itemCount, getItemVNum(slotNumber)         self.wndEquip.RefreshSlot()

Kod:
"children" :             (                 ## Title                 {                     "name" : "TitleBar",                     "type" : "titlebar",                     "style" : ("attach",),                     "x" : 8,                     "y" : 7,                     "width" : 161,                     "color" : "yellow",                     "children" :                     (                         { "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" },                     ),                 },

burdan aşağısını envanter butonlarının kodlarına kadar değiştirin

Kod:
## Equipment Slot                 {                     "name" : "Equipment_Base",                     "type" : "expanded_image",                     "x" : 10,                     "y" : 33,                     "image" : "d:/ymir work/ui/inventory_buttons/eq_primary_page.jpg",                     "children" :                     (                         {                             "name" : "EquipmentSlot",                             "type" : "slot",                             "x" : 3,                             "y" : 3,                             "width" : 150,                             "height" : 182,                             "slot" : (                                         {"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},                                         {"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},                                         {"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32},                                         {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},                                         {"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32},                                     ),                         },                     ),                 },                 ## Costume Equipment Slot                 {                     "name" : "Costume_Base",                     "type" : "expanded_image",                     "x" : 10,                     "y" : 33,                     "image" : "d:/ymir work/ui/inventory_buttons/eq_cosmetics_page_v2.jpg",                     "children" :                     (                         {                             "name" : "CostumeSlot",                             "type" : "slot",                             "x" : 3,                             "y" : 3,                             "width" : 150,                             "height" : 182,                             "slot" : (                                         {"index":COSTUME_START_INDEX+0, "x":61, "y":77, "width":32, "height":64},                                         {"index":COSTUME_START_INDEX+1, "x":61, "y":40, "width":32, "height":32},                                         {"index":COSTUME_START_INDEX+2, "x":108, "y":23, "width":32, "height":32},#Sash                                         {"index":COSTUME_START_INDEX+3, "x":108, "y":63, "width":32, "height":32},                                         {"index":item.COSTUME_SLOT_WEAPON, "x":10, "y":63, "width":32, "height":96},#¹«±â                                     ),                         },                     ),                 },                 ## Secondary Equipment Slot                 {                     "name" : "Secondary_Base",                     "type" : "expanded_image",                     "x" : 10,                     "y" : 33,                     "image" : "d:/ymir work/ui/inventory_buttons/eq_secondary_page_v2.jpg",                     "children" :                     (                         {                             "name" : "SecondarySlot",                             "type" : "slot",                             "x" : 3,                             "y" : 3,                             "width" : 150,                             "height" : 182,                             "slot" : (                                     #    {"index":item.EQUIPMENT_RING1, "x":8, "y":2, "width":32, "height":32},                                         #{"index":item.EQUIPMENT_RING2, "x":44, "y":2, "width":32, "height":32},                                     #    {"index":item.EQUIPMENT_PET, "x":115, "y":42, "width":32, "height":32},                                         #{"index":item.EQUIPMENT_MOUNT, "x":115, "y":4, "width":32, "height":32},                                     ),                         },                     ),                 },                 ## Talisman Equipment Slot                 {                     "name" : "Talisman_Base",                     "type" : "expanded_image",                     "x" : 10,                     "y" : 33,                     "image" : "d:/ymir work/ui/inventory_buttons/eq_pendant_page.jpg",                     "children" :                     (                         {                             "name" : "TalismanSlot",                             "type" : "slot",                             "x" : 3,                             "y" : 3,                             "width" : 150,                             "height" : 182,                             "slot" : (                                     #    {"index":COSTUME_START_INDEX+0, "x":61, "y":77, "width":32, "height":64},                                     #    {"index":COSTUME_START_INDEX+1, "x":61, "y":40, "width":32, "height":32},                                     #    {"index":COSTUME_START_INDEX+2, "x":61, "y":125, "width":32, "height":32},                                     #    {"index":COSTUME_START_INDEX+3, "x":10, "y":62, "width":32, "height":96},                                     #    {"index":COSTUME_START_INDEX+4, "x":110, "y":61, "width":32, "height":32},                                     ),                         },                     ),                 },                 ## Effect Equipment Slot                 {                     "name" : "Effect_Base",                     "type" : "expanded_image",                     "x" : 10,                     "y" : 33,                     "image" : "d:/ymir work/ui/inventory_buttons/eq_effect_page_v2.jpg",                     "children" :                     (                         {                             "name" : "EffectSlot",                             "type" : "slot",                             "x" : 3,                             "y" : 3,                             "width" : 150,                             "height" : 182,                             "slot" : (                                     #    {"index":COSTUME_START_INDEX+0, "x":61, "y":77, "width":32, "height":64},                                     #    {"index":COSTUME_START_INDEX+1, "x":61, "y":40, "width":32, "height":32},                                     #    {"index":COSTUME_START_INDEX+2, "x":61, "y":125, "width":32, "height":32},                                     #    {"index":COSTUME_START_INDEX+3, "x":10, "y":62, "width":32, "height":96},                                     #    {"index":COSTUME_START_INDEX+4, "x":110, "y":61, "width":32, "height":32},                                     ),                         },                     ),                 },                 {                     "name" : "Equipment_Tab_01",                     "type" : "radio_button",                     "x" : 86,                     "y" : 161,                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",                     "children" :                     (                         {                             "name" : "Equipment_Tab_01_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "I",                         },                     ),                 },                 {                     "name" : "Equipment_Tab_02",                     "type" : "radio_button",                     "x" : 86 + 32,                     "y" : 161,                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",                     "children" :                     (                         {                             "name" : "Equipment_Tab_02_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "II",                         },                     ),                 },                 {                     "name" : "Costume_Tab_01",                     "type" : "radio_button",                     "x" : -14,                     "y" : 33,                     "default_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "over_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "down_image" : "d:/ymir work/ui/inventory_buttons/eqtabopen.dds",                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,                     "children" :                     (                         {                             "name" : "Equipment_Tab_01_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "I",                         },                     ),                 },                 {                     "name" : "Costume_Tab_02",                     "type" : "radio_button",                     "x" : -14,                     "y" : 33 + 22,                     "default_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "over_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "down_image" : "d:/ymir work/ui/inventory_buttons/eqtabopen.dds",                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,                     "children" :                     (                         {                             "name" : "Equipment_Tab_02_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "II",                         },                     ),                 },                 {                     "name" : "Costume_Tab_03",                     "type" : "radio_button",                     "x" : -14,                     "y" : 33 + 22*2,                     "default_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "over_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "down_image" : "d:/ymir work/ui/inventory_buttons/eqtabopen.dds",                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,                     "children" :                     (                         {                             "name" : "Equipment_Tab_03_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "III",                         },                     ),                 },                 {                     "name" : "Costume_Tab_04",                     "type" : "radio_button",                     "x" : -14,                     "y" : 33 + 22*3,                     "default_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "over_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "down_image" : "d:/ymir work/ui/inventory_buttons/eqtabopen.dds",                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,                     "children" :                     (                         {                             "name" : "Equipment_Tab_04_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "IV",                         },                     ),                 },                 {                     "name" : "Costume_Tab_05",                     "type" : "radio_button",                     "x" : -14,                     "y" : 33 + 22*4,                     "default_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "over_image" : "d:/ymir work/ui/inventory_buttons/eqtabclosed.dds",                     "down_image" : "d:/ymir work/ui/inventory_buttons/eqtabopen.dds",                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_5,                     "children" :                     (                         {                             "name" : "Equipment_Tab_05_Print",                             "type" : "text",                             "x" : 0,                             "y" : 0,                             "all_align" : "center",                             "text" : "V",                         },                     ),                 },

arat

Kod:
EQUIPMENT_START_INDEX

altına ekle

Kod:
COSTUME_START_INDEX = item.COSTUME_SLOT_START

07.03.2021 Anlatım ve kanıt güncellendi çalışmayan öğeler düzenlendi.




Hayırlı kullanımlar.

Güncelleme 28.03.2021

uiinventory.py de class inventorywindow içerisinde arat ve sil
Kod:
# Costume Button         if self.costumeButton:             self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton))         self.wndCostume = None

tekrar arat ve sil

Kod:
if self.wndCostume:             self.wndCostume.Destroy()             self.wndCostume = 0

tekrar arat ve sil

Kod:
if self.wndCostume:             self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow()            # Àκ¥Å丮 âÀÌ ´İÈú ¶§ ÄÚ½ºÃõÀÌ ¿·Á ÀÖ¾ú´Â°¡?             self.wndCostume.Close()

Kanıt


Rubinum Envanter Sistemi Nedir?
Metin2 özel sunucularında oyun deneyimini zenginleştirmek için birçok sistem geliştirilmektedir. Bu sistemlerden birisi olan Rubinum Envanter, oyuncuların envanter alanlarını optimize etmelerine yardımcı olur. Bu sistem sayesinde oyuncular daha fazla eşya taşıyabilir, organize bir şekilde envanterlerini kullanabilirler. Özellikle PvP odaklı sunucularda bu tür sistemler büyük avantaj sağlar. Rubinum Envanter, genellikle C++ tabanlı sistemlerle entegre edilerek sunucu tarafında aktif hale getirilir.

Rubinum Envanter Nasıl Çalışır?
Bu sistem, envanterde belirli bir slotun altına ekstra slotlar ekler. Oyuncu bu slotları satın alarak veya belirli görevleri tamamlayarak genişletebilir. Bu sayede envanterin sınırları aşılır ve daha fazla item depolanabilir. Sistem genellikle bir GUI üzerinden yönetilir ve Python tabanlı bir yapıya sahiptir. Bu GUI sayesinde kullanıcı dostu bir arayüz sunulur. Sistem aynı zamanda DB tarafında da kayıt tutar, bu sayede sunucu yeniden başlatıldığında bile veriler korunur.

Rubinum Envanter İçin Gerekli Yapılar
Bu sistemi kurabilmek için öncelikle Metin2 server src dosyalarına müdahale edilmesi gerekir. Özellikle game core ve auth core dosyalarında değişiklikler yapılması gerekebilir. Sistem, client src ile de entegre çalıştığı için UIscript ve py root dosyalarında da düzenlemeler yapılır. Bu sistem genellikle MARTYSAMA gibi gelişmiş sistemlerle birlikte çalışır. Sistemde kullanılan GUI yapısı Py GUI ile geliştirilir. Bu sayede hem görsel olarak hem de fonksiyonel olarak güçlü bir yapı ortaya çıkar.

Sistemin Kurulumu ve Geliştirilmesi
Rubinum Envanter sistemi genellikle bir pack olarak dağıtılır. Bu paket içerisinde hem C++ kaynak kodlar hem de Python script dosyaları yer alır. Geliştiriciler bu dosyalar üzerinde değişiklik yaparak sistemi kendi sunucularına göre özelleştirebilirler. Pack içinde ayrıca database (db) dosyaları da yer alabilir. Bu sayede sistem doğru şekilde veri tabanı ile entegre olur. Sistem compile edildikten sonra sunucuda aktif hale gelir. Bu süreçte dikkatli davranılması gerekir çünkü küçük bir hata tüm sistemin çalışmamasına neden olabilir.

Avantajları ve Kullanım Alanları
Bu sistem özellikle Metin2 PvP sistemlerinde çokça tercih edilir. Oyuncular envanterlerini daha iyi organize ettikçe savaşlarda daha hızlı karar verebilirler. Ayrıca, sunucu sahipleri bu sistemle ek gelir kaynağı yaratabilirler. Örneğin, oyunculara envanter genişletme hakkı satılabilir. Bu da hem oyuncu memnuniyetini artırır hem de sunucunun sürdürülebilirliğini sağlar. Sistem, Metin2 development sürecinde önemli bir rol oynar ve sunucular arasında fark yaratır.


What is the Rubinum Inventory System?
In Metin2 private servers, many systems are developed to enhance the gaming experience. One such system is the Rubinum Inventory, which helps players optimize their inventory space. This system allows players to carry more items and use their inventories in an organized manner. Especially in PvP-focused servers, systems like this provide significant advantages. The Rubinum Inventory is typically integrated using C++ based systems and activated on the server-side.

How Does Rubinum Inventory Work?
This system adds extra slots under a specific inventory slot. Players can purchase these slots or unlock them by completing certain quests. This way, inventory limits are exceeded, allowing for more items to be stored. The system is usually managed through a GUI and has a Python-based structure. This provides a user-friendly interface. The system also keeps records in the DB, ensuring that data remains intact even after server restarts.

Structures Required for Rubinum Inventory
To install this system, modifications must be made to the Metin2 server src files. Particularly, changes may be required in the game core and auth core files. Since the system works in conjunction with the client src, adjustments are also made in the UIscript and py root files. This system often works alongside advanced systems like MARTYSAMA. The GUI structure used in the system is developed with Py GUI, resulting in both visually appealing and functionally strong architecture.

Installation and Development of the System
The Rubinum Inventory system is usually distributed as a pack. This package includes both C++ source codes and Python script files. Developers can modify these files to customize the system according to their own servers. The pack may also include database (db) files, ensuring proper integration with the database. After compilation, the system becomes active on the server. Care must be taken during this process, as even a small error could prevent the entire system from functioning.

Advantages and Use Cases
This system is widely preferred in Metin2 PvP systems. As players better organize their inventories, they can make faster decisions during battles. Additionally, server owners can create additional revenue streams with this system. For example, inventory expansion rights can be sold to players. This increases player satisfaction while ensuring the sustainability of the server. The system plays a crucial role in the Metin2 development process and differentiates servers from one another.​
 

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

Benzer konular

Geri
Üst Alt