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.
Merhabalar,
Sorunum envaterdeki won yeriolan yeri normel şekilde olmasını istiyorum ordaki won yerini nasıl kısa yoldan kaldırabılırım ?
https://i.hizliresim.com/p59jmo.png
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,
  2. INVENTORY_PAGE_COUNT = INVENTORY_MAX_NUM / 45,
  3. 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
  2. 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
  2. static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 2
  3. static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 3
  4. 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();
  2. s_grid2.Clear();
Altına şunları ekleyin;
Kod (C++):
  1. s_grid3.Clear();
  2. 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)
  2. {
  3. if (!(item = victim->GetInventoryItem(i)))
  4. continue;
  5. s_grid1.Put(i, 1, item->GetSize());
  6. }
  7. for (i = INVENTORY_MAX_NUM / 2; i < INVENTORY_MAX_NUM; ++i)
  8. {
  9. if (!(item = victim->GetInventoryItem(i)))
  10. continue;
  11. s_grid2.Put(i - INVENTORY_MAX_NUM / 2, 1, item->GetSize());
  12. }
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)
  2. {
  3. if (!(item = victim->GetInventoryItem(i)))
  4. continue;
  5. s_grid1.Put(i, 1, item->GetSize());
  6. }
  7. for (i = INVENTORY_PAGE_SLOT_COUNT; i < INVENTORY_PAGE_SLOT_COUNT * 2; ++i)
  8. {
  9. if (!(item = victim->GetInventoryItem(i)))
  10. continue;
  11. s_grid2.Put(i - INVENTORY_PAGE_SLOT_COUNT, 1, item->GetSize());
  12. }
  13. for (i = INVENTORY_PAGE_SLOT_COUNT * 2; i < INVENTORY_PAGE_SLOT_COUNT * 3; ++i)
  14. {
  15. if (!(item = victim->GetInventoryItem(i)))
  16. continue;
  17. s_grid3.Put(i - INVENTORY_PAGE_SLOT_COUNT * 2, 1, item->GetSize());
  18. }
  19. for (i = INVENTORY_PAGE_SLOT_COUNT * 3; i < INVENTORY_PAGE_SLOT_COUNT * 4; ++i)
  20. {
  21. if (!(item = victim->GetInventoryItem(i)))
  22. continue;
  23. s_grid4.Put(i - INVENTORY_PAGE_SLOT_COUNT * 3, 1, item->GetSize());
  24. }
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)
  2. {
  3. if (!(item = victim->GetInventoryItem(i)))
  4. continue;
  5. s_grid4.Put(i - INVENTORY_PAGE_SLOT_COUNT * 4, 1, item->GetSize());
  6. }
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. {
  2. "name" : "Inventory_Tab_01",
  3. "type" : "radio_button",
  4. "x" : 10,
  5. "y" : 33 + 191,
  6. "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
  7. "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
  8. "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
  9. "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
  10. "children" :
  11. (
  12. {
  13. "name" : "Inventory_Tab_01_Print",
  14. "type" : "text",
  15. "x" : 0,
  16. "y" : 0,
  17. "all_align" : "center",
  18. "text" : "I",
  19. },
  20. ),
  21. },
  22. {
  23. "name" : "Inventory_Tab_02",
  24. "type" : "radio_button",
  25. "x" : 10 + 78,
  26. "y" : 33 + 191,
  27. "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
  28. "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
  29. "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
  30. "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
  31. "children" :
  32. (
  33. {
  34. "name" : "Inventory_Tab_02_Print",
  35. "type" : "text",
  36. "x" : 0,
  37. "y" : 0,
  38. "all_align" : "center",
  39. "text" : "II",
  40. },
  41. ),
  42. },
Şu kodlarla hepsini değiştirin;
Kod (Python):
  1. {
  2. "name" : "Inventory_Tab_01",
  3. "type" : "radio_button",
  4. "x" : 10,
  5. "y" : 33 + 191,
  6. "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
  7. "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
  8. "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
  9. "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
  10. "children" :
  11. (
  12. {
  13. "name" : "Inventory_Tab_01_Print",
  14. "type" : "text",
  15. "x" : 0,
  16. "y" : 0,
  17. "all_align" : "center",
  18. "text" : "I",
  19. },
  20. ),
  21. },
  22. {
  23. "name" : "Inventory_Tab_02",
  24. "type" : "radio_button",
  25. #"x" : 10 + 78,
  26. "x" : 10 + 39,
  27. "y" : 33 + 191,
  28. "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
  29. "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
  30. "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
  31. "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
  32. "children" :
  33. (
  34. {
  35. "name" : "Inventory_Tab_02_Print",
  36. "type" : "text",
  37. "x" : 0,
  38. "y" : 0,
  39. "all_align" : "center",
  40. "text" : "II",
  41. },
  42. ),
  43. },
  44. {
  45. "name" : "Inventory_Tab_03",
  46. "type" : "radio_button",
  47. "x" : 10 + 39 + 39,
  48. "y" : 33 + 191,
  49. "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
  50. "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
  51. "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
  52. "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,
  53. "children" :
  54. (
  55. {
  56. "name" : "Inventory_Tab_03_Print",
  57. "type" : "text",
  58. "x" : 0,
  59. "y" : 0,
  60. "all_align" : "center",
  61. "text" : "III",
  62. },
  63. ),
  64. },
  65. {
  66. "name" : "Inventory_Tab_04",
  67. "type" : "radio_button",
  68. "x" : 10 + 39 + 39 + 39,
  69. "y" : 33 + 191,
  70. "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
  71. "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
  72. "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
  73. "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,
  74. "children" :
  75. (
  76. {
  77. "name" : "Inventory_Tab_04_Print",
  78. "type" : "text",
  79. "x" : 0,
  80. "y" : 0,
  81. "all_align" : "center",
  82. "text" : "IV",
  83. },
  84. ),
  85. },
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 = []
  2. self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
  3. self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
Altına şunları ekleyin;
Kod (Python):
  1. self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
  2. 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))
  2. 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))
  2. 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
  2. self.inventoryTab[1-page].SetUp()
  3. self.RefreshBagSlotWindow()
Şu şekilde değiştirin;
Kod (Python):
  1. self.inventoryTab[self.inventoryPageIndex].SetUp()
  2. self.inventoryPageIndex = page
  3. self.inventoryTab[self.inventoryPageIndex].Down()
  4. 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:
  2. slotNumber -= player.INVENTORY_PAGE_SIZE
Şu şekilde değiştirin;
Kod (Python):
  1. if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
  2. 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
  2. INVENTORY_PAGE_BUTTON_TOOLTIP_2 2. Envanter
Altına şunları ekleyin;
Kod (Text):
  1. INVENTORY_PAGE_BUTTON_TOOLTIP_3 3. Envanter
  2. 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 : https://www.dosyaupload.com/nec0

Virüstotal : https://www.virustotal.com/gui/file...ae32d37ca776354b02c8bda9fff9ca5885d/detection
 

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

Geri
Üst