Tab ve boşluk karakterlerinin karışık kullanılmasından kaynaklı sorununuz. Daima tab kullanın.
1735247877383.webp
 
1735590352980.webp

beyler en az 10 15kez kurdum sıfırdan ama envanterde bu sekılde sıralamada hata alıyor yardımcı olucak varmı
 
@Whistle @razuning
4 envanteri görmeme fixini ben bu şekilde yaptım tüm kod bloğuyla birlikte incelersiniz.
C++:
Genişlet Daralt Kopyala
bool CExchange::CheckSpace()
{
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
    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
#else
    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
#endif

    s_grid1.Clear();
    s_grid2.Clear();
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
    s_grid3.Clear();
    s_grid4.Clear();
#endif
    LPCHARACTER    victim = GetCompany()->GetOwner();
    LPITEM item;

    int i;
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
    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());
    }
#else
    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());
    }
#endif
    // ¾Æ... ¹º°¡ °³º´½Å °°Áö¸¸... ¿ëÈ¥¼® Àκ¥À» ³ë¸Ö Àκ¥ º¸°í µû¶ó ¸¸µç ³» À߸øÀÌ´Ù ¤Ğ¤Ğ
    static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
   
    // ÀÏ´Ü ¿ëÈ¥¼®À» ±³È¯ÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ Å©¹Ç·Î, ¿ëÈ¥¼® Àκ¥ º¹»ç´Â ¿ëÈ¥¼®ÀÌ ÀÖÀ» ¶§ Çϵµ·Ï ÇÑ´Ù.
    bool bDSInitialized = false;
   
    for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
    {
        if (!(item = m_apItems[i]))
            continue;

        if (item->IsDragonSoul())
        {
            if (!victim->DragonSoul_IsQualified())
            {
                return false;
            }

            if (!bDSInitialized)
            {
                bDSInitialized = true;
                victim->CopyDragonSoulItemGrid(s_vDSGrid);
            }

            bool bExistEmptySpace = false;
            WORD wBasePos = DSManager::instance().GetBasePosition(item);
            if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
                return false;
           
            for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
            {
                WORD wPos = wBasePos + i;
#ifdef ENABLE_MARTY_FIX_159
                if (0 == s_vDSGrid[wPos]) // @fixme159 (wBasePos to wPos)
#else
                if (0 == s_vDSGrid[wBasePos])
#endif
                {
                    bool bEmpty = true;
                    for (int j = 1; j < item->GetSize(); j++)
                    {
                        if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
                        {
                            bEmpty = false;
                            break;
                        }
                    }
                    if (bEmpty)
                    {
                        for (int j = 0; j < item->GetSize(); j++)
                        {
                            s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] =  wPos + 1;
                        }
                        bExistEmptySpace = true;
                        break;
                    }
                }
                if (bExistEmptySpace)
                    break;
            }
            if (!bExistEmptySpace)
                return false;
        }
        else
        {
            int iPos = s_grid1.FindBlank(1, item->GetSize());
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
            if (iPos >= 0)
            {
                s_grid1.Put(iPos, 1, item->GetSize());
            }
            else
            {
                iPos = s_grid2.FindBlank(1, item->GetSize());
                if (iPos >= 0)
                {
                    s_grid2.Put(iPos, 1, item->GetSize());
                }
                else
                {
                    iPos = s_grid3.FindBlank(1, item->GetSize());
                    if (iPos >= 0)
                    {
                        s_grid3.Put(iPos, 1, item->GetSize());
                    }
                    else
                    {
                        iPos = s_grid4.FindBlank(1, item->GetSize());
                        if (iPos >= 0)
                        {
                            s_grid4.Put(iPos, 1, item->GetSize());
                        }
                        else
                        {
                            return false;
                        }
                    }
                }
            }
#else
            if (iPos >= 0)
            {
                s_grid1.Put(iPos, 1, item->GetSize());
            }
            else
            {
                iPos = s_grid2.FindBlank(1, item->GetSize());

                if (iPos >= 0)
                {
                    s_grid2.Put(iPos, 1, item->GetSize());
                }
                else
                {
                    return false;
                }
            }
#endif
        }
    }

    return true;
}
 
Her şeyi yaptıktan sonra oyunu giriş yapıyorum ve giriş ekranında yazılar değişik çıkıyor ve karakter seçtikten sonra yükleme ekranında atıyoru oyundan

Ekran görüntüsü 2025-02-17 121817.webp
Ekran görüntüsü 2025-02-17 121851.webp
Ekran görüntüsü 2025-02-17 122018.webp
 
1741313381070.webp

1741313390193.webp



Taskbardaki skill slotunda 1.sayfada oto pot aktif olduğunda diğer sayfalarda da o slot aktif oluyor bunu nasıl çözebiliriz envanter sistemiyle alakalı mıdır bilmiyorum @Whistle
 
merhaba @Whistle hocam ellerine sağlık 4 envanter yaptım sorun yok çalıştı. fakat 5 yaptıgımda

compile char_manager.cpp
compile char_quickslot.cpp
In file included from char_item.cpp:41:
In static member function 'static bool CBeltInventoryHelper::IsAvailableCell(WORD, int)',
inlined from 'bool CHARACTER::IsEmptyItemGrid(TItemPos, BYTE, int) const' at char_item.cpp:583:56:
belt_inventory_helper.h:70:46: warning: array subscript [65280, 65295] is outside array bounds of 'CBeltInventoryHelper::TGradeUnit [16]' {aka 'unsigned char [16]'} [-Warray-bounds=]
70 | return ruleTable[cell] <= beltGrade;
| ~~~~~~~~~~~~~~^
belt_inventory_helper.h: In member function 'bool CHARACTER::IsEmptyItemGrid(TItemPos, BYTE, int) const':
belt_inventory_helper.h:53:43: note: at offset [65280, 65295] into object 'availableRuleByGrade' of size 16
53 | static TGradeUnit availableRuleByGrade[BELT_INVENTORY_SLOT_COUNT] =
| ^~~~~~~~~~~~~~~~~~~~
compile char_resist.cpp
compile char_skill.cpp
compile char_state.cpp

game build alırken sorun yasıyorum
INVENTORY_MAX_NUM = 225,
INVENTORY_PAGE_COUNT = INVENTORY_MAX_NUM / 45,
INVENTORY_PAGE_SLOT_COUNT = INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT,

INVENTORY_MAX_NUM 180 de sorun yok 225 yapınca hata veriyor. mainline files kullanıyorum.
 
Son düzenleme:
merhaba @Whistle hocam ellerine sağlık 4 envanter yaptım sorun yok çalıştı. fakat 5 yaptıgımda

compile char_manager.cpp
compile char_quickslot.cpp
In file included from char_item.cpp:41:
In static member function 'static bool CBeltInventoryHelper::IsAvailableCell(WORD, int)',
inlined from 'bool CHARACTER::IsEmptyItemGrid(TItemPos, BYTE, int) const' at char_item.cpp:583:56:
belt_inventory_helper.h:70:46: warning: array subscript [65280, 65295] is outside array bounds of 'CBeltInventoryHelper::TGradeUnit [16]' {aka 'unsigned char [16]'} [-Warray-bounds=]
70 | return ruleTable[cell] <= beltGrade;
| ~~~~~~~~~~~~~~^
belt_inventory_helper.h: In member function 'bool CHARACTER::IsEmptyItemGrid(TItemPos, BYTE, int) const':
belt_inventory_helper.h:53:43: note: at offset [65280, 65295] into object 'availableRuleByGrade' of size 16
53 | static TGradeUnit availableRuleByGrade[BELT_INVENTORY_SLOT_COUNT] =
| ^~~~~~~~~~~~~~~~~~~~
compile char_resist.cpp
compile char_skill.cpp
compile char_state.cpp

game build alırken sorun yasıyorum
INVENTORY_MAX_NUM = 225,
INVENTORY_PAGE_COUNT = INVENTORY_MAX_NUM / 45,
INVENTORY_PAGE_SLOT_COUNT = INVENTORY_MAX_NUM / INVENTORY_PAGE_COUNT,

INVENTORY_MAX_NUM 180 de sorun yok 225 yapınca hata veriyor. mainline files kullanıyorum.
Linkleri görebilmek için giriş yap veya kayıt ol.
tamamen yardımcı olması amacıyla başka bir sitede paylaşılan linki paylaşıyorum yetkililer uygun görmez ise kaldırabilir.
 
Öncelikle selamlar herkese ilk defa metin2 pvp sunucusu geliştiyorum sıfır bilgiyle :) , ilk denememde her şeyi yapmıştım ancak puTTY ile build de etmem gerektiğini bilmediğimden dolayı 3 ve 4. envantere itemler giyiliyordu kullanamıyordum build ettikten sonra düzeldi , bu değerli paylaşımınız için teşekkürler
teşekkürler.webp
 
6 envanter sayfası yaptığımda envanter kullanılabiliyor ama bu sefer sağ tık ile item giymeme sorunu ortaya çıkıyor neyden dolayı olabilir
 
6 envanter sayfası yaptığımda envanter kullanılabiliyor ama bu sefer sağ tık ile item giymeme sorunu ortaya çıkıyor neyden dolayı olabilir
Belt ve diğer envanterlerin Başlama nolarını güncellemen gerekir Her envantere 45 düşünürsen Giyme envanteri 45x6 Yapıp üzerine bir de Belt inventor’e sayısını ekleyip yazmalısın
 
Son düzenleme:
Geri
Üst