Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!
Merhabalar,
Sorunum envaterdeki won yeri olan kısmı normel şekilde olmasını istiyorum ordaki won yerini nasıl kısa yoldan kaldırabılırım ?
https://i.hizliresim.com/p59jmo.png
Sorunum envaterdeki won yeri olan kısmı normel şekilde olmasını istiyorum ordaki won yerini nasıl kısa yoldan kaldırabılırım ?
https://i.hizliresim.com/p59jmo.png
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Merhaba...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.
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++):
Şu kodlarla değiştirin;
INVENTORY_MAX_NUM = 90,
Kod (C++):
Server/game/src/exchange.cpp açılır ve CheckSpace fonksiyonun içinde şu kod aratılır;
INVENTORY_MAX_NUM = 180,
INVENTORY_PAGE_COUNT = INVENTORY_MAX_NUM / 45,
INVENTORY_PAGE_SLOT_COUNT = INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT,
Kod (C++):
Şu kodlarla değiştirin;
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
Kod (C++):
Not: Arkadaşlar burada 4 tane envanter yapıyoruz. Envanterin her bir sayfası 45 slot içerir. 5 genişlik 9 yüksekliğindedir.
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
Buradaki işlemde de şu oluyor.
180 / 45 => 4 ediyor.
Kod (C++):
Şö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.
INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT
Siz 5 envanter yapmak isterseniz.
INVENTORY_MAX_NUM bu değeri 225 yapacaksınız ve şöyle bir kod daha ekleyeceksiniz.
Kod (C++):
Burayı anladığınızı farz ediyorum ve diğer kodlara geçiyorum.
static CGrid s_grid5(5, INVENTORY_MAX_NUM/5 / INVENTORY_PAGE_COUNT); // inven page 5
Aynı dosya ve fonksiyonun içinde şu kodları aratın;
Kod (C++):
Altına şunları ekleyin;
s_grid1.Clear();
s_grid2.Clear();
Kod (C++):
Eğer 5 envanter yapacaksanız şu değeri de eklemelisiniz;
s_grid3.Clear();
s_grid4.Clear();
Kod (C++):
Gene aynı dosya ve fonksiyonun içinde şu kodları aratın;
s_grid5.Clear();
Kod (C++):
Biz 2 den fazla envanter kullanacağımız için bunu tamamen şu şekilde değiştiriyoruz;
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());
}
Kod (C++):
5. Envanteri eklemek için for döngülerine şunu da ekleyin;
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());
}
Kod (C++):
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.
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());
}
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):
Bu kodu şu şekilde değiştirin;
BYTE bPage = bCell / (INVENTORY_MAX_NUM / 2);
Kod (Text):
Aynı dosya ve fonksiyon içinde şu kodu aratın;
BYTE bPage = bCell / (INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT);
Not: Aynı fonksiyonda 2 tane oluyor. 2 sinide göstereceğim şekilde düzenleyin.
Kod (C++):
Bu kodu şu şekilde değiştirin;
if (p / (INVENTORY_MAX_NUM / 2) != bPage)
Kod (C++):
Evet arkadaşlar server kısmı bitti şimdi client kısmına geliyoruz.
if (p / (INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT) != bPage)
Client/UserInterface/GameType.h açılır ve aratılır;
Kod (C++):
Kodları bunla değiştirin;
const DWORD c_Inventory_Page_Count = 2;
Kod (C++):
Not: 5 envanter kullanmak isterseniz 4 kısmını 5 yapın.
const DWORD c_Inventory_Page_Count = 4;
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):
Şu şekilde değiştirin;
EQUIPMENT_START_INDEX = 90
Kod (Python):
Aynı dosyada şu kodları aratın;
EQUIPMENT_START_INDEX = 180
Kod (Python):
Şu kodlarla hepsini değiştirin;
{
"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",
},
),
},
Kod (Python):
UIScript/BeltInventoryWindow.py dosyasını açın ve şu kodu aratın;
{
"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",
},
),
},
Kod (Python):
Şu şekilde değiştirin;
EQUIPMENT_START_INDEX = 90
Kod (Python):
Evet arkadaşlar UIScript kısmı bitti şimdi sıra geldi Root dosyalarına.
EQUIPMENT_START_INDEX = 180
Root/uiInventory.py dosyasını açın ve şu kodları aratın;
Kod (Python):
Altına şunları ekleyin;
self.inventoryTab = []
self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
Kod (Python):
Aynı dosyada şu kodları aratın;
self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
Kod (Python):
Altına şunları ekleyin;
self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
Kod (Python):
Aynı dosyada şu kodları aratın;
self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
Kod (Python):
Altına şunları ekleyin;
self.inventoryTab[0].Down()
Kod (Python):
Aynı dosyada SetInventoryPage fonksiyonun içindeki şu kodları aratın;
self.inventoryPageIndex = 0
Kod (Python):
Şu şekilde değiştirin;
self.inventoryPageIndex = page
self.inventoryTab[1-page].SetUp()
self.RefreshBagSlotWindow()
Kod (Python):
Bu kod sayesinde diğer sayfalara geçerken butonlar takılı kalmayacak.
self.inventoryTab[self.inventoryPageIndex].SetUp()
self.inventoryPageIndex = page
self.inventoryTab[self.inventoryPageIndex].Down()
self.RefreshBagSlotWindow()
Aynı dosyada RefreshBagSlotWindow fonksiyonunun içinde şu kodları aratın;
Kod (Python):
Şu şekilde değiştirin;
if slotNumber >= player.INVENTORY_PAGE_SIZE:
slotNumber -= player.INVENTORY_PAGE_SIZE
Kod (Python):
Bu kod sayesinde 3 ve 4 envanterde yer alan otomatik potlar çalışacak, efsun botları da efsunu görecektir.
if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
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):
Altına şunları ekleyin;
INVENTORY_PAGE_BUTTON_TOOLTIP_1 1. Envanter
INVENTORY_PAGE_BUTTON_TOOLTIP_2 2. Envanter
Kod (Text):
Bu kodları eklemezseniz oyuna giremezsiniz ve syserr şöyle bir hata verir;
INVENTORY_PAGE_BUTTON_TOOLTIP_3 3. Envanter
INVENTORY_PAGE_BUTTON_TOOLTIP_4 4. Envanter
Kod (Text):
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.
<type 'exceptions.AttributeError'>:'module' object has no attribute 'INVENTORY_PAGE_BUTTON_TOOLTIP_3'
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.