Metin2 4 Envanter Sistemi Sorunları Fixlenmiş | MMO Tutkunları
  1. Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha Fazla Bilgi.
  2. Merhaba Ziyaretçi,
    Henüz sitemize üye girişi yapmadınız. Sitemizden tam anlamıyla yararlanabilmeniz için sitemize üye olmanız gerekmektedir. Eğer sitemize daha önceden üye olduysanız, buradan giriş yapabilirsiniz. Sitemize üye değilseniz buraya tıklayarak üye olabilirsiniz.

    Duyuruyu Kapat
  3. Merhaba Ziyaretçi, Usta üye alımında bazı maddeler değişti. Sizde güncel halini okumak istiyorsanız buraya tıklayabilirsiniz.
    Duyuruyu Kapat
Duyuruyu Kapat
Merhaba Ziyaretçi,
Sitemize gelen kullanıcıların güvenliğini göz önünde bulundurarak Yönetim ekibi ile aldığımız ortak karar sonucu zararlı link kısaltma servislerini yasakladık. Detaylar: tıklayın.
Duyuruyu Kapat
Merhaba Ziyaretçi,
Yönetim tüzüğümüz yayınlanmıştır. Sizde okumak için tıklayınız.
Konuya gidip görüş bildirmek için tıklayınız.

Metin2 4 Envanter Sistemi Sorunları Fixlenmiş

'C++ / C# / Python' forumunda Whistle tarafından 7 Mayıs 2018 tarihinde açılan konu

  1. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Merhaba arkadaşlar,
    Bugün size sorunları fixlenmiş bir şekilde 4 envanter sistemi eklemeyi anlatacağım.
    Biliyorsunuz ki ben server files üzerinde çalışıyorum bu hususta forumlarda paylaşılan sistemlerin çoğunda bug bulunuyor. Bende bu bugları fixleyerek 4 envanter sistemi ekledim. Size nasıl ekleneceğini anlatacağım. İsterseniz 5 envanter yapın isterseniz 10 envanter yapın fark etmez.

    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.  
    6.         s_grid1.Put(i, 1, item->GetSize());
    7.     }
    8.     for (i = INVENTORY_MAX_NUM / 2; i < INVENTORY_MAX_NUM; ++i)
    9.     {
    10.         if (!(item = victim->GetInventoryItem(i)))
    11.             continue;
    12.  
    13.         s_grid2.Put(i - INVENTORY_MAX_NUM / 2, 1, item->GetSize());
    14.     }
    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.  
    6.         s_grid1.Put(i, 1, item->GetSize());
    7.     }
    8.     for (i = INVENTORY_PAGE_SLOT_COUNT; i < INVENTORY_PAGE_SLOT_COUNT * 2; ++i)
    9.     {
    10.         if (!(item = victim->GetInventoryItem(i)))
    11.             continue;
    12.  
    13.         s_grid2.Put(i - INVENTORY_PAGE_SLOT_COUNT, 1, item->GetSize());
    14.     }
    15.     for (i = INVENTORY_PAGE_SLOT_COUNT * 2; i < INVENTORY_PAGE_SLOT_COUNT * 3; ++i)
    16.     {
    17.         if (!(item = victim->GetInventoryItem(i)))
    18.             continue;
    19.  
    20.         s_grid3.Put(i - INVENTORY_PAGE_SLOT_COUNT * 2, 1, item->GetSize());
    21.     }
    22.     for (i = INVENTORY_PAGE_SLOT_COUNT * 3; i < INVENTORY_PAGE_SLOT_COUNT * 4; ++i)
    23.     {
    24.         if (!(item = victim->GetInventoryItem(i)))
    25.             continue;
    26.  
    27.         s_grid4.Put(i - INVENTORY_PAGE_SLOT_COUNT * 3, 1, item->GetSize());
    28.     }
    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.  
    6.         s_grid4.Put(i - INVENTORY_PAGE_SLOT_COUNT * 4, 1, item->GetSize());
    7.     }
    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.  
    5.                     "x" : 10,
    6.                     "y" : 33 + 191,
    7.  
    8.                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
    9.                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
    10.                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
    11.                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
    12.  
    13.                     "children" :
    14.                     (
    15.                         {
    16.                             "name" : "Inventory_Tab_01_Print",
    17.                             "type" : "text",
    18.  
    19.                             "x" : 0,
    20.                             "y" : 0,
    21.  
    22.                             "all_align" : "center",
    23.  
    24.                             "text" : "I",
    25.                         },
    26.                     ),
    27.                 },
    28.                 {
    29.                     "name" : "Inventory_Tab_02",
    30.                     "type" : "radio_button",
    31.  
    32.                     "x" : 10 + 78,
    33.                     "y" : 33 + 191,
    34.  
    35.                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
    36.                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
    37.                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
    38.                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
    39.  
    40.                     "children" :
    41.                     (
    42.                         {
    43.                             "name" : "Inventory_Tab_02_Print",
    44.                             "type" : "text",
    45.  
    46.                             "x" : 0,
    47.                             "y" : 0,
    48.  
    49.                             "all_align" : "center",
    50.  
    51.                             "text" : "II",
    52.                         },
    53.                     ),
    54.                 },
    Şu kodlarla hepsini değiştirin;
    Kod (Python):
    1.                 {
    2.                     "name" : "Inventory_Tab_01",
    3.                     "type" : "radio_button",
    4.  
    5.                     "x" : 10,
    6.                     "y" : 33 + 191,
    7.  
    8.                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    9.                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    10.                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    11.                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
    12.  
    13.                     "children" :
    14.                     (
    15.                         {
    16.                             "name" : "Inventory_Tab_01_Print",
    17.                             "type" : "text",
    18.  
    19.                             "x" : 0,
    20.                             "y" : 0,
    21.  
    22.                             "all_align" : "center",
    23.  
    24.                             "text" : "I",
    25.                         },
    26.                     ),
    27.                 },
    28.                 {
    29.                     "name" : "Inventory_Tab_02",
    30.                     "type" : "radio_button",
    31.  
    32.                     #"x" : 10 + 78,
    33.                     "x" : 10 + 39,
    34.                     "y" : 33 + 191,
    35.  
    36.                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    37.                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    38.                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    39.                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
    40.  
    41.                     "children" :
    42.                     (
    43.                         {
    44.                             "name" : "Inventory_Tab_02_Print",
    45.                             "type" : "text",
    46.  
    47.                             "x" : 0,
    48.                             "y" : 0,
    49.  
    50.                             "all_align" : "center",
    51.  
    52.                             "text" : "II",
    53.                         },
    54.                     ),
    55.                 },
    56.          
    57.                 {
    58.                     "name" : "Inventory_Tab_03",
    59.                     "type" : "radio_button",
    60.  
    61.                     "x" : 10 + 39 + 39,
    62.                     "y" : 33 + 191,
    63.  
    64.                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    65.                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    66.                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    67.                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,
    68.  
    69.                     "children" :
    70.                     (
    71.                         {
    72.                             "name" : "Inventory_Tab_03_Print",
    73.                             "type" : "text",
    74.  
    75.                             "x" : 0,
    76.                             "y" : 0,
    77.  
    78.                             "all_align" : "center",
    79.  
    80.                             "text" : "III",
    81.                         },
    82.                     ),
    83.                 },
    84.          
    85.                 {
    86.                     "name" : "Inventory_Tab_04",
    87.                     "type" : "radio_button",
    88.  
    89.                     "x" : 10 + 39 + 39 + 39,
    90.                     "y" : 33 + 191,
    91.  
    92.                     "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub",
    93.                     "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub",
    94.                     "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub",
    95.                     "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,
    96.  
    97.                     "children" :
    98.                     (
    99.                         {
    100.                             "name" : "Inventory_Tab_04_Print",
    101.                             "type" : "text",
    102.  
    103.                             "x" : 0,
    104.                             "y" : 0,
    105.  
    106.                             "all_align" : "center",
    107.  
    108.                             "text" : "IV",
    109.                         },
    110.                     ),
    111.                 },
    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"))
    3.  
    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()
    5.  
    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.

    Kanıt eklemek zorunlu olduğu için buyurun kanıt;
    4 Envanter Kanıt.jpg
     

    Ekli dosyalar:

    Son düzenleme: 15 Mayıs 2018
    mcDynamic bunu beğendi.
  2. ncp80

    ncp80 MT Üye MT Üye Üye

    283
    169
    741
    22 Ekim 2016
    Erkek
    Manisa
    Adınız ve Soyadınız:
    Necip Ege Sürüm
    Ruh Haliniz:
    Arastirmaci
    Takımınız:
    Diger takımlar
    Konu için teşekkürler benim minik pastam erayım <3 ERAY BAŞKAN SEN ÇOK YAŞA OLEY SENSİZ DÜNYANIN ANLAMI YOK

    Ekran Alıntısı.jpg
     
    En son bir moderatör tarafından düzenlenmiş: 12 Mayıs 2018
    Whistle bunu beğendi.
  3. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    @Whistle bunu ekledikten sonra 3. 4 . envanterlere silah ve zırh koyamıyorum diğerleri sorunsuz konuyor martysama 1.7 source kullanıyorum internette bulabildiğim en son sürüm sebebi ne olabilir
     
  4. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Python kodlarını eklediniz mi? Çünkü bende aynı src üzerinde çalışıyorum.
     
  5. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    indirdiğim dosya içinde ne varsa ekledim düzgünce yazılanları da yaptım
     
  6. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    şöyle bişey buldum deniyorum şu an

    char_battle.cpp
    itemmanager.cpp
    input_main.cpp
    exchange.cpp
    char_item.cpp
    cmd_general.cpp
    cube.cpp

    Bu dosyaların içinde bulunan inventorysize = 180 kodunu bularak (bende 4 envanter olduğu için 180 kodu bulunmakta sizin filesinizde kaç envanter varsa ona göre slot sayısını değiştirin)

    [Başka srclerde inventorysize kodu yerine INVENTORY_MAX_NUM adında da geçebilir.]
     
  7. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Siz martysama src kullandığınıza emin misiniz? Vanilla src olmasın o?
    char_battle.cpp ItemDropPenalty fonksiyonunda şöyle kod mu var.
    Kod (C++):
    1.         std::vector<BYTE> vec_bSlots;
    2.  
    3.         int inventorysize = INVENTORY_MAX_NUM;
    4.         if(!bigger_inventory) inventorysize = 180;
    5.  
    6.         for (i = 0; i < inventorysize; ++i)
    7.             if (GetInventoryItem(i))
    8.                 vec_bSlots.push_back(i);
    Bende şöyle;
    Kod (C++):
    1.         std::vector<BYTE> vec_bSlots;
    2.  
    3.         for (i = 0; i < INVENTORY_MAX_NUM; ++i)
    4.             if (GetInventoryItem(i))
    5.                 vec_bSlots.push_back(i);
    Eğer vanilla src kullanıyorsanız config ile ayarlanabilir şekilde yapılmış. Kısacası sistem sizde ekli. Neden tekrar ekliyorsunuz?
     
  8. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    Kod (C++):
    1.     if (bDropInventory) // Drop Inventory
    2.     {
    3.         std::vector<BYTE> vec_bSlots;
    4.  
    5.         for (i = 0; i < INVENTORY_MAX_NUM; ++i)
    6.             if (GetInventoryItem(i))
    7.                 vec_bSlots.push_back(i);
    8.  
    9.         if (!vec_bSlots.empty())
    10.         {
    11.             random_shuffle(vec_bSlots.begin(), vec_bSlots.end());
    12.  
    13.             int iQty = MIN(vec_bSlots.size(), r.iInventoryQty);
    14.  
    15.             if (iQty)
    16.                 iQty = number(1, iQty);
    17.  
    18.             for (i = 0; i < iQty; ++i)
    19.             {
    20.                 pkItem = GetInventoryItem(vec_bSlots[i]);
    21.  
    22.                 if (IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_PKDROP))
    23.                     continue;
    24.  
    25.                 SyncQuickslot(QUICKSLOT_TYPE_ITEM, vec_bSlots[i], 255);
    26.                 vec_item.push_back(std::make_pair(pkItem->RemoveFromCharacter(), INVENTORY));
    27.             }
    28.         }
    29.         else if (iAlignIndex == 8)
    30.             isDropAllEquipments = true;
    31.     }
    32.  
    33.     if (bDropEquipment) // Drop Equipment
    34.     {
    35.         std::vector<BYTE> vec_bSlots;
    36.  
    37.         for (i = 0; i < WEAR_MAX_NUM; ++i)
    38.             if (GetWear(i))
    39.                 vec_bSlots.push_back(i);
    40.  
    41.         if (!vec_bSlots.empty())
    42.         {
    43.             random_shuffle(vec_bSlots.begin(), vec_bSlots.end());
    44.             int iQty;
    45.  
    46.             if (isDropAllEquipments)
    47.                 iQty = vec_bSlots.size();
    48.             else
    49.                 iQty = MIN(vec_bSlots.size(), number(1, r.iEquipmentQty));
    50.  
    51.             if (iQty)
    52.                 iQty = number(1, iQty);
    53.  
    54.             for (i = 0; i < iQty; ++i)
    55.             {
    56.                 pkItem = GetWear(vec_bSlots[i]);
    57.  
    58.                 if (IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_PKDROP))
    59.                     continue;
    60.  
    61.                 SyncQuickslot(QUICKSLOT_TYPE_ITEM, vec_bSlots[i], 255);
    62.                 vec_item.push_back(std::make_pair(pkItem->RemoveFromCharacter(), EQUIPMENT));
    63.             }
    64.         }
    65.     }
    Bende böyle şuan.

    Şöyle bir şey buldum. Sadece 1. Envantere koyabiliyorum şu an silah ve zırhları başka envantere konmuyor ilginç. :D
     
    En son bir moderatör tarafından düzenlenmiş: 15 Mayıs 2018
    Whistle bunu beğendi.
  9. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    1. Eğer mesajına yanıt gelmezse bir önceki mesajınızı düzenleyin. Eklemenizi yapın.
    2. Kodları kod bloguna ekleyin. Böyle bir şey anlaşılmıyor.
    3. Forumda yazım kurallarına önem veriyoruz ona uyun.
    0515_200539.jpg

    Buyurun tekrardan sizin için kontrol ettim.
    Zırhı koymaya çalışın eğer olmazsa syserr hatalarını yazın.
    Syserr ile ilgili bilgiyi buradan alabilirsiniz: Linkleri Görebilmek İçin Üye Olmanız Gerekmektedir. Üye Olmak İçin Tıklayınız...
     
  10. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    Bi yeri 2 defa arayacaktık. Ben bi kere arattıydım. Game srcden galiba. Ondan kaynaklı şuan build ediliyor.

    @Whistle

    kusura bakma ama kod editörünü göremedim ben mi dikkatsizim anlamadım
     
    Whistle bunu beğendi.
  11. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Konu içinde de not yazmışım ama tam gözükmemiş galiba. En iyisi orayı renklendireyim.
    Şu cümleyi konuda bulup tekrardan eklemenizi yapar mısınız?
    Not: Aynı fonksiyonda 2 tane oluyor. 2 sinide göstereceğim şekilde düzenleyin.

    Bütün kodları paylaştığınız kodlar benimkiyle uyuşuyor yalnız neden böyle bir mesaj attınız?
    Ekleme yaparken sırayla acele etmeden, kodları anlayarak ekleme yapın. Arada hangi kodun ne işe yaradığını açıkladım. Konuda bulunan ek dosyayı indirerek daha rahat edersiniz. Onda direk kendi dosyalarında olduğu için python kısmında da hata yapma olasılığınız azalır. :)

    Build işlemi bittikten sonra son durumu açıklayabilirseniz sevinirim. Eğer sorun çözülürse sizden de bir resim bekliyorum. :)
    Resmi foruma yükleyin ama :)
     
  12. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    O attığım mesaj internette denk geldi ama baktım gereksizmiş. Dosyaları açınca farkettim ama kalablık etmesin diye sildim. Sonradan gereksiz olduğu için.
     
    Whistle bunu beğendi.
  13. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Sorun yok dostum. :) İstediğin şekilde yardım isteyebilirsin. Elimden geldiğince yardımcı olurum. Sadece tek bir isteğim mesajlarınızda, konularınızda içeriğe önem vermeniz, yazım kurallarına önem vermeniz. Sitemizin kuralı bu şekiledir.

    Kod editrünü sormuşsunuz buyurun;
    Kod editörü.jpg

    Kod kısmına tıklayınca gelen pencereye kodları yazabilirsin.
     
  14. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    İstersen attığım gereksiz mesajları temizle. Konuda boş yer kaplamasın. Yine de sen bilirsin. Sorunum çözüldü nasıl olsa eyw.

    Kod editörü yeri için sağol. Bidaha ki sefere her türlü uygun yazarım.
     
    En son bir moderatör tarafından düzenlenmiş: 15 Mayıs 2018
    Whistle bunu beğendi.
  15. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Dursun sorun değil. :) Bana göre gereksiz değil.
    Sorununuzun çözülmesine sevindim.
    Sizden bir şey rica edebilir miyim? Oyun içinden ekran görüntüsü çekip konuya mesaj olarak atabilir misiniz?

    Sorun değil. :) Yaşanan sorun mesajları bilse olsa ileride bu sistemi eklemeye çalışanlar sorunlarını yaşadıklarında mesajları okuyacaktır.
    Sitemizdeki metin2 yardım kısmındaki konulara bakacak olursanız ne kadar çok kişi tarafından ziyaret edildiğini görebilirsiniz.

    Bu konudaki anlatımı bizzat kendim yaptım. Bu yüzden de kendim her şeyini denedim. Ticaret bugunu, yerden item alma bugunu, taşma sorununu filan. Hiçbiri yok. Sorunsuz bir şekilde kullanabilirsiniz. Lakin bilinmeyen bir sorun çıkarsa onu da belirtirseniz düzeltirim.

    Projenizde başarılar dilerim. :)
     
    Son düzenleme: 15 Mayıs 2018
  16. cmod

    cmod Aktif Üye Üye

    17
    9
    300
    28 Ağustos 2017
    Erkek
    denizli
    Adınız ve Soyadınız:
    uğur
    Ruh Haliniz:
    Yalniz
    Takımınız:
    Diger takımlar
    Sorunsuz çalışıyor.
    4 Envanter Kanıt.jpg
     
    Whistle bunu beğendi.
  17. Whistle

    Whistle Sarhoş Filozof Site Yetkilisi Admin Casro2 (Metin2) GM Casro2 (Metin2) Destek

    4.446
    889
    1.961
    30 Ekim 2011
    Erkek
    Öğrenci
    Samsun
    Adınız ve Soyadınız:
    Eray Öksüz
    Ruh Haliniz:
    Ruhsuz
    Güle güle kullanın. :) Siz genede dediğim gibi bugları kontrol edin. Kanıt içinde teşekkür ederim. Sistemi ekleyenlerin kanıt atması daha sağlıklı oluyor.
     

Bu Sayfayı Paylaş

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.