Çözüldü Artı Basmada İtem Sayısı Gösterme K envanter hatası

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

Whiterose

Sanane be kardeş...
Grafiker
MT Üye
Editör
Mesaj
384
Çözümler
7
Beğeni
1.961
Puan
1.049
Ticaret Puanı
0
Merhabalar, sorunsuz ekleme yaptım.
sysser falan hiçbir şey yok ama tek sıkıntım + basmada istenilen itemler k envanterdeyken görmüyor.
Normal envantere alınca görüyor, yardımlarınızı bekliyorum. :loveya:
Konu LİNK
Ekran Alıntısı.webp
23.webp
 
Son düzenleme:
Çözüm
benim filesteki çözüm böyleymiş. muhtemelen sizdeki de bu yöntemle çözülmüştür. çözüm referansı olarak bu alınabilir. konuyu kapatıyorum.

pythonplayer.cpp
C++:
Genişlet Daralt Kopyala
DWORD CPythonPlayer::GetItemCountByVnum (DWORD dwVnum)
{
    DWORD dwCount = 0;

    for (int i = 0; i < c_Inventory_Count; ++i)
    {
        const TItemData& c_rItemData = m_playerStatus.aItem[i];
        if (c_rItemData.vnum == dwVnum)
        {
            dwCount += c_rItemData.count;
        }
    }
#ifdef ENABLE_ADDITIONAL_INVENTORY
    for (int i = 0; i < c_Special_ItemSlot_Count; ++i)
    {
        const TItemData& c_rItemDataUpgrade = m_playerStatus.aSSUItem[i];
        const TItemData& c_rItemDataBook = m_playerStatus.aSSBItem[i];
        const TItemData&...
uirefineye baktım ama orayla ilgili bir kod bulamadım. char_itemde gördüğüm bir yer var belki oradandır diye aşağıya bırakıcam.

char_item.cpp:
Genişlet Daralt Kopyala
bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
{
    if (bCell > INVENTORY_MAX_NUM)
        return false;

    LPITEM item = GetInventoryItem(bCell);

bu kodda geliyor

C++:
Genişlet Daralt Kopyala
LPITEM CHARACTER::GetItem(TItemPos Cell) const
{
    if (!IsValidItemPosition(Cell))
        return NULL;
    WORD wCell = Cell.cell;
    BYTE window_type = Cell.window_type;
    switch (window_type)
    {
    case INVENTORY:
    case EQUIPMENT:
        if (wCell >= INVENTORY_AND_EQUIP_SLOT_MAX)
        {
            sys_err("CHARACTER::GetInventoryItem: invalid item cell %d", wCell);
            return NULL;
        }
        return m_pointsInstant.pItems[wCell];
    case DRAGON_SOUL_INVENTORY:
        if (wCell >= DRAGON_SOUL_INVENTORY_MAX_NUM)
        {
            sys_err("CHARACTER::GetInventoryItem: invalid DS item cell %d", wCell);
            return NULL;
        }
        return m_pointsInstant.pDSItems[wCell];

    default:
        return NULL;
    }
    return NULL;
}

bu kısma bağlanıyor. sizin k envanterler burada tanımlı değil mi?
 
Demek istediğini bu kodlar senin dosyanda mevcut mu? ben bu şekilde anladım.
Pek aram iyi değil bu işlerde, kör ve cahilim. :D
Bakmak istediğin bir şey olur diye ekledim dosyayı, bu arada vakit ayırıp ilgilendiğin için çok teşekkür ederim.:loveya:
1.webp

2.webp
 

Dosya Eklentileri

Demek istediğini bu kodlar senin dosyanda mevcut mu? ben bu şekilde anladım.
Pek aram iyi değil bu işlerde, kör ve cahilim. :D
Bakmak istediğin bir şey olur diye ekledim dosyayı, bu arada vakit ayırıp ilgilendiğin için çok teşekkür ederim.:loveya:
17590 eklentisini görüntüle
17591 eklentisini görüntüle
pythonplayer.cpp:
Genişlet Daralt Kopyala
DWORD CPythonPlayer::GetItemCountByVnum(DWORD dwVnum)
{
    DWORD dwCount = 0;

    for (int i = 0; i < c_Inventory_Count; ++i)
    {
        const TItemData & c_rItemData = m_playerStatus.aItem[i];
        if (c_rItemData.vnum == dwVnum)
        {
            dwCount += c_rItemData.count;
        }
    }

    return dwCount;
}

burada c inventory count var ya onu sendeki en son eklenen k envanter koduyla değişip build alıp dener misin?
 
pythonplayer.cpp:
Genişlet Daralt Kopyala
DWORD CPythonPlayer::GetItemCountByVnum(DWORD dwVnum)
{
    DWORD dwCount = 0;

    for (int i = 0; i < c_Inventory_Count; ++i)
    {
        const TItemData & c_rItemData = m_playerStatus.aItem[i];
        if (c_rItemData.vnum == dwVnum)
        {
            dwCount += c_rItemData.count;
        }
    }

    return dwCount;
}

burada c inventory count var ya onu sendeki en son eklenen k envanter koduyla değişip build alıp dener misin?

K envanter kodu derken bundan mı bahsediyorsun?
Ekran Alıntısı.webp

for (int i = 0; i < c_Inventory_Count; ++i) bu kısımda 0 yazan değeri değiştireceğim değil mi?



BYTE değerini UINT çektir sorunun çözülcek.
RefineInformation içerisinde haberin olsun.
Tam olarak burası mı ? BYTE yazan yerleri sadece UINT mi yazacağım?
resim_2024-06-29_112327794.webp
 

Dosya Eklentileri

  • resim_2024-06-29_111959167.webp
    resim_2024-06-29_111959167.webp
    7,5 KB · Gösterim: 37
C++:
Genişlet Daralt Kopyala
DWORD CPythonPlayer::GetItemCountByVnum(DWORD dwVnum)
{
    DWORD dwCount = 0;

    for (int i = 0; i < (c_Special_ItemSlot_Count + c_Inventory_Count); ++i)
    {
        const TItemData & c_rItemData = m_playerStatus.aItem[i];
        if (c_rItemData.vnum == dwVnum)
        {
            dwCount += c_rItemData.count;
        }
    }

    return dwCount;
}

kodu böyle yapıp dener misin?
 
C++:
Genişlet Daralt Kopyala
DWORD CPythonPlayer::GetItemCountByVnum(DWORD dwVnum)
{
    DWORD dwCount = 0;

    for (int i = 0; i < (c_Special_ItemSlot_Count + c_Inventory_Count); ++i)
    {
        const TItemData & c_rItemData = m_playerStatus.aItem[i];
        if (c_rItemData.vnum == dwVnum)
        {
            dwCount += c_rItemData.count;
        }
    }

    return dwCount;
}

kodu böyle yapıp dener misin?
Ekran_Alnts.webp

Yardımların için çok teşekkür ederim, vaktini aldım ama olmadı.
 
benim filesteki çözüm böyleymiş. muhtemelen sizdeki de bu yöntemle çözülmüştür. çözüm referansı olarak bu alınabilir. konuyu kapatıyorum.

pythonplayer.cpp
C++:
Genişlet Daralt Kopyala
DWORD CPythonPlayer::GetItemCountByVnum (DWORD dwVnum)
{
    DWORD dwCount = 0;

    for (int i = 0; i < c_Inventory_Count; ++i)
    {
        const TItemData& c_rItemData = m_playerStatus.aItem[i];
        if (c_rItemData.vnum == dwVnum)
        {
            dwCount += c_rItemData.count;
        }
    }
#ifdef ENABLE_ADDITIONAL_INVENTORY
    for (int i = 0; i < c_Special_ItemSlot_Count; ++i)
    {
        const TItemData& c_rItemDataUpgrade = m_playerStatus.aSSUItem[i];
        const TItemData& c_rItemDataBook = m_playerStatus.aSSBItem[i];
        const TItemData& c_rItemDataStone = m_playerStatus.aSSSItem[i];
        const TItemData& c_rItemDataFlower = m_playerStatus.aSSFItem[i];
        const TItemData& c_rItemDataAttr = m_playerStatus.aSSAItem[i];
        const TItemData& c_rItemDataChest = m_playerStatus.aSSCItem[i];
        if (c_rItemDataBook.vnum == dwVnum)
        {
            dwCount += c_rItemDataBook.count;
        }
        if (c_rItemDataStone.vnum == dwVnum)
        {
            dwCount += c_rItemDataStone.count;
        }
        if (c_rItemDataUpgrade.vnum == dwVnum)
        {
            dwCount += c_rItemDataUpgrade.count;
        }

        if (c_rItemDataFlower.vnum == dwVnum)
        {
            dwCount += c_rItemDataFlower.count;
        }

        if (c_rItemDataAttr.vnum == dwVnum)
        {
            dwCount += c_rItemDataAttr.count;
        }

        if (c_rItemDataChest.vnum == dwVnum)
        {
            dwCount += c_rItemDataChest.count;
        }
    }
#endif

    return dwCount;
}
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst