Fethi Polat 1
Fethi Polat
TuZaKK 1
TuZaKK
xranzei 1
xranzei
Agresifizm 1
Agresifizm
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Can Öcalan 1
Can Öcalan
mavzermete 1
mavzermete
farkmt2official 1
farkmt2official
Sevdamsın 1
Sevdamsın
Hikaye Ekle

ENVANTERDEKİ WON SİMGESİNİ KALDIRMA

  • Konuyu başlatan Konuyu başlatan yusufunknow
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 35
  • Görüntüleme Görüntüleme 2K

En Çok Reaksiyon Alan Mesajlar

Merhabalar,
Sorunum envaterdeki won yeriolan yeri normel şekilde olmasını istiyorum ordaki won yerini nasıl kısa yoldan kaldırabılırım ?
Öğeyi görmek için üye olmalısınız.
Merhaba...
Bugün size sorunları fixlenmiş bir şekilde 4 envanter sistemi eklemeyi anlatacağım.

Not: İşlemleri yapmadan önce yedek almanızı öneririm. Bu sistemde bilinen sorunlar çözülmüştür. Bilinmeyen bir sorun oluştuğu zaman konu altından belirtirseniz seve seve düzenlerim.

Sırasıyla şu işlemleri uygulayınız;
Server/common/lenght.h
açılır ve aratılır;
Kod (C++):

  1. INVENTORY_MAX_NUM = 90,
Şu kodlarla değiştirin;
Kod (C++):

  1. INVENTORY_MAX_NUM = 180,
    INVENTORY_PAGE_COUNT = INVENTORY_MAX_NUM / 45,
    INVENTORY_PAGE_SLOT_COUNT = INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT,
Server/game/src/exchange.cpp açılır ve CheckSpace fonksiyonun içinde şu kod aratılır;
Kod (C++):

  1. static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 2); // inven page 1
    static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 2); // inven page 2
Şu kodlarla değiştirin;
Kod (C++):

  1. static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 1
    static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 2
    static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 3
    static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 4
Not: Arkadaşlar burada 4 tane envanter yapıyoruz. Envanterin her bir sayfası 45 slot içerir. 5 genişlik 9 yüksekliğindedir.
Buradaki işlemde de şu oluyor.
180 / 45 => 4 ediyor.
Kod (C++):

  1. INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT
Şöyle bir kod kullandık. Bu kodda şöyle. 180/5/4 => sonuç 9 çıkar. Kısaca biz gride değer eklerken aslında yükseklik ve genişliği ekliyoruz. 5, 9 gibi.
Siz 5 envanter yapmak isterseniz.
INVENTORY_MAX_NUM bu değeri 225 yapacaksınız ve şöyle bir kod daha ekleyeceksiniz.
Kod (C++):

  1. static CGrid s_grid5(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 5
Burayı anladığınızı farz ediyorum ve diğer kodlara geçiyorum.

Aynı dosya ve fonksiyonun içinde şu kodları aratın;
Kod (C++):

  1. s_grid1.Clear();
    s_grid2.Clear();
Altına şunları ekleyin;
Kod (C++):

  1. s_grid3.Clear();
    s_grid4.Clear();
Eğer 5 envanter yapacaksanız şu değeri de eklemelisiniz;
Kod (C++):

  1. s_grid5.Clear();
Gene aynı dosya ve fonksiyonun içinde şu kodları aratın;
Kod (C++):

  1. for (i = 0; i < INVENTORY_MAX_NUM / 2; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid1.Put(i, 1, item->GetSize());
    }
    for (i = INVENTORY_MAX_NUM / 2; i < INVENTORY_MAX_NUM; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid2.Put(i - INVENTORY_MAX_NUM / 2, 1, item->GetSize());
    }
Biz 2 den fazla envanter kullanacağımız için bunu tamamen şu şekilde değiştiriyoruz;
Kod (C++):

  1. for (i = 0; i < INVENTORY_PAGE_SLOT_COUNT; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid1.Put(i, 1, item->GetSize());
    }
    for (i = INVENTORY_PAGE_SLOT_COUNT; i < INVENTORY_PAGE_SLOT_COUNT * 2; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid2.Put(i - INVENTORY_PAGE_SLOT_COUNT, 1, item->GetSize());
    }
    for (i = INVENTORY_PAGE_SLOT_COUNT * 2; i < INVENTORY_PAGE_SLOT_COUNT * 3; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid3.Put(i - INVENTORY_PAGE_SLOT_COUNT * 2, 1, item->GetSize());
    }
    for (i = INVENTORY_PAGE_SLOT_COUNT * 3; i < INVENTORY_PAGE_SLOT_COUNT * 4; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid4.Put(i - INVENTORY_PAGE_SLOT_COUNT * 3, 1, item->GetSize());
    }
5. Envanteri eklemek için for döngülerine şunu da ekleyin;
Kod (C++):

  1. for (i = INVENTORY_PAGE_SLOT_COUNT * 4; i < INVENTORY_PAGE_SLOT_COUNT * 5; ++i)
    {
    if (!(item = victim->GetInventoryItem(i)))
    continue;

    s_grid4.Put(i - INVENTORY_PAGE_SLOT_COUNT * 4, 1, item->GetSize());
    }
Bu kodları eklememizin sebebi ticaret yaptığımız zaman diğer envanterleri de görmesidir. Aksi taktirde diğer envanterler boş olsa bile envanter dolu hatası verir.

Server/game/src/char_item.cpp dosyasını açın ve IsEmptyItemGrid fonksiyonu içinde şu kodu aratın;
Not: Aynı fonksiyonda 2 tane oluyor. 2 sinide göstereceğim şekilde düzenleyin.
Kod (Text):

  1. BYTE bPage = bCell / (INVENTORY_MAX_NUM / 2);
Bu kodu şu şekilde değiştirin;
Kod (Text):

  1. BYTE bPage = bCell / (INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT);
Aynı dosya ve fonksiyon içinde şu kodu aratın;
Not: Aynı fonksiyonda 2 tane oluyor. 2 sinide göstereceğim şekilde düzenleyin.
Kod (C++):

  1. if (p / (INVENTORY_MAX_NUM / 2) != bPage)
Bu kodu şu şekilde değiştirin;
Kod (C++):

  1. if (p / (INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT) != bPage)
Evet arkadaşlar server kısmı bitti şimdi client kısmına geliyoruz.
Client/UserInterface/GameType.h açılır ve aratılır;
Kod (C++):

  1. const DWORD c_Inventory_Page_Count = 2;
Kodları bunla değiştirin;
Kod (C++):

  1. const DWORD c_Inventory_Page_Count = 4;
Not: 5 envanter kullanmak isterseniz 4 kısmını 5 yapın.

Evet arkaaşlar client kısmı da bu kadar. Sıra geldi Python'a.
İlk önce UIScript üzerinden gidelim.
Not: Bazı fileslerde inventorywindow.py dosyası locale_tr/ui içinden alınıyor. Bu yüzden UIScript mi yoksa locale_tr mi diye kontrol edin.
Not2: Python kodları 4 envanter içindir. Forumlarda 5 olanını bulabilirsiniz.

UIScript/InventoryWindow.py dosyası açılır ve şu kod aratılır;
Kod (Python):

  1. EQUIPMENT_START_INDEX = 90
Şu şekilde değiştirin;
Kod (Python):

  1. EQUIPMENT_START_INDEX = 180
Aynı dosyada şu kodları aratın;
Kod (Python):

  1. {
    "name" : "Inventory_Tab_01",
    "type" : "radio_button",

    "x" : 10,
    "y" : 33 + 191,

    "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
    "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
    "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
    "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,

    "children" :
    (
    {
    "name" : "Inventory_Tab_01_Print",
    "type" : "text",

    "x" : 0,
    "y" : 0,

    "all_align" : "center",

    "text" : "I",
    },
    ),
    },
    {
    "name" : "Inventory_Tab_02",
    "type" : "radio_button",

    "x" : 10 + 78,
    "y" : 33 + 191,

    "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
    "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
    "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
    "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,

    "children" :
    (
    {
    "name" : "Inventory_Tab_02_Print",
    "type" : "text",

    "x" : 0,
    "y" : 0,

    "all_align" : "center",

    "text" : "II",
    },
    ),
    },
Şu kodlarla hepsini değiştirin;
Kod (Python):

  1. {
    "name" : "Inventory_Tab_01",
    "type" : "radio_button",

    "x" : 10,
    "y" : 33 + 191,

    "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,

    "children" :
    (
    {
    "name" : "Inventory_Tab_01_Print",
    "type" : "text",

    "x" : 0,
    "y" : 0,

    "all_align" : "center",

    "text" : "I",
    },
    ),
    },
    {
    "name" : "Inventory_Tab_02",
    "type" : "radio_button",

    #"x" : 10 + 78,
    "x" : 10 + 39,
    "y" : 33 + 191,

    "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,

    "children" :
    (
    {
    "name" : "Inventory_Tab_02_Print",
    "type" : "text",

    "x" : 0,
    "y" : 0,

    "all_align" : "center",

    "text" : "II",
    },
    ),
    },

    {
    "name" : "Inventory_Tab_03",
    "type" : "radio_button",

    "x" : 10 + 39 + 39,
    "y" : 33 + 191,

    "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,

    "children" :
    (
    {
    "name" : "Inventory_Tab_03_Print",
    "type" : "text",

    "x" : 0,
    "y" : 0,

    "all_align" : "center",

    "text" : "III",
    },
    ),
    },

    {
    "name" : "Inventory_Tab_04",
    "type" : "radio_button",

    "x" : 10 + 39 + 39 + 39,
    "y" : 33 + 191,

    "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,

    "children" :
    (
    {
    "name" : "Inventory_Tab_04_Print",
    "type" : "text",

    "x" : 0,
    "y" : 0,

    "all_align" : "center",

    "text" : "IV",
    },
    ),
    },
UIScript/BeltInventoryWindow.py dosyasını açın ve şu kodu aratın;
Kod (Python):

  1. EQUIPMENT_START_INDEX = 90
Şu şekilde değiştirin;
Kod (Python):

  1. EQUIPMENT_START_INDEX = 180
Evet arkadaşlar UIScript kısmı bitti şimdi sıra geldi Root dosyalarına.

Root/uiInventory.py dosyasını açın ve şu kodları aratın;
Kod (Python):

  1. self.inventoryTab = []
    self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
Altına şunları ekleyin;
Kod (Python):

  1. self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
Aynı dosyada şu kodları aratın;
Kod (Python):

  1. self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
    self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
Altına şunları ekleyin;
Kod (Python):

  1. self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
    self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
Aynı dosyada şu kodları aratın;
Kod (Python):

  1. self.inventoryTab[0].Down()
Altına şunları ekleyin;
Kod (Python):

  1. self.inventoryPageIndex = 0
Aynı dosyada SetInventoryPage fonksiyonun içindeki şu kodları aratın;
Kod (Python):

  1. self.inventoryPageIndex = page
    self.inventoryTab[1-page].SetUp()
    self.RefreshBagSlotWindow()
Şu şekilde değiştirin;
Kod (Python):

  1. self.inventoryTab[self.inventoryPageIndex].SetUp()
    self.inventoryPageIndex = page
    self.inventoryTab[self.inventoryPageIndex].Down()
    self.RefreshBagSlotWindow()
Bu kod sayesinde diğer sayfalara geçerken butonlar takılı kalmayacak.

Aynı dosyada RefreshBagSlotWindow fonksiyonunun içinde şu kodları aratın;
Kod (Python):

  1. if slotNumber >= player.INVENTORY_PAGE_SIZE:
    slotNumber -= player.INVENTORY_PAGE_SIZE
Şu şekilde değiştirin;
Kod (Python):

  1. if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
    slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
Bu kod sayesinde 3 ve 4 envanterde yer alan otomatik potlar çalışacak, efsun botları da efsunu görecektir.

Evet arkadaşlar Root kısmıda bitti. Şimdi locale_xx (locale_tr) üzerinde ayarlamalar yapacağız.
Not: locale_xx => locale_tr, xx => tr
locale_tr/tr/locale_interface.txt dosyası açın ve şunları aratın;
Kod (Text):

  1. INVENTORY_PAGE_BUTTON_TOOLTIP_1 1. Envanter
    INVENTORY_PAGE_BUTTON_TOOLTIP_2 2. Envanter
Altına şunları ekleyin;
Kod (Text):

  1. INVENTORY_PAGE_BUTTON_TOOLTIP_3 3. Envanter
    INVENTORY_PAGE_BUTTON_TOOLTIP_4 4. Envanter
Bu kodları eklemezseniz oyuna giremezsiniz ve syserr şöyle bir hata verir;
Kod (Text):

  1. <type 'exceptions.AttributeError'>:'module' object has no attribute 'INVENTORY_PAGE_BUTTON_TOOLTIP_3'
Evet arkadaşlar sistem bu şekildedir. Anlayabilmeniz için hazır kod vermiyorum. Lakin eski fileslerde tab_button_large_half_01.sub şu dosya yok. Bu yüzden ekten verdiğim dosyayı indirip ETC içine atın.
Not: Ekteki dosyanın içinde de anlatım mevcuttur. Konuda kodları eklerken tab ayarlarını filan düzgün yaptım. Gene de emin olmak için ekteki dosyanın anlatımını da kullanabilirsiniz.

İndirme link : Öğeyi görmek için üye olmalısınız.

Virüstotal : Öğeyi görmek için üye olmalısınız.

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst