Jump to content

Recommended Posts

Hello,

i have a problem with the Special Inventory.
I can move the Item´s from the Special Inventory -> Safebox
I CAN´T move the Item´s from the Special Inventory -> Character Inventory

Serverfile Base: Hypnotic 2 
Special Inventory System: Not sure.

input_main.cpp:
 

Spoiler

**1****
 

#ifdef ENABLE_EXTRA_INVENTORY
 || pinfo->slot.type == 12
#endif
    ) {
        LPITEM item = NULL;

#ifdef ENABLE_EXTRA_INVENTORY
        BYTE type;
        if (pinfo->slot.type == 12) {
            pinfo->slot.type = QUICKSLOT_TYPE_ITEM_EXTRA;
            type = EXTRA_INVENTORY;
        } else {
            type = INVENTORY;
        }
#endif

        TItemPos srcCell(
#ifdef ENABLE_EXTRA_INVENTORY
        type
#else
        INVENTORY
#endif
        , pinfo->slot.pos);

        if (!(item = ch->GetItem(srcCell)))
            return;

        if (item->GetType() != ITEM_USE && item->GetType() != ITEM_QUEST)
            return;

#ifdef ENABLE_EXTRA_INVENTORY
        if (type == QUICKSLOT_TYPE_ITEM_EXTRA && item->GetType() == ITEM_USE && item->GetSubType() == USE_POTION) {
            return;
        }
#endif
    }
#endif

    ch->SetQuickslot(pinfo->pos, pinfo->slot);
}





**2****

 

#ifndef ENABLE_EXTRA_INVENTORY
        case SHOP_SUBHEADER_CG_SELL:
            {
                if (uiBytes < sizeof(BYTE))
                    return -1;

                BYTE pos = *c_pData;

                sys_log(0, "INPUT: %s SHOP: SELL", ch->GetName());
                CShopManager::instance().Sell(ch, pos);
                return sizeof(BYTE);
            }
#endif
        case SHOP_SUBHEADER_CG_SELL2:
            {
                if (uiBytes < sizeof(BYTE)
#ifdef ENABLE_EXTRA_INVENTORY
                + sizeof(WORD) 
#else
                + sizeof(BYTE) 
#endif
#ifdef ENABLE_NEW_STACK_LIMIT
                + sizeof(WORD) 
#else
                + sizeof(BYTE) 
#endif
                )
                    return -1;
                
#ifdef ENABLE_EXTRA_INVENTORY
                BYTE window = *(c_pData);
                WORD cell = *(WORD*)(c_pData + 1);
#else
                BYTE pos = *(c_pData++);
#endif
#ifdef ENABLE_NEW_STACK_LIMIT
                WORD count = *(WORD*)(c_pData + sizeof(WORD));
#else
                BYTE count = *(c_pData);
#endif

                sys_log(0, "INPUT: %s SHOP: SELL2", ch->GetName());
                CShopManager::instance().Sell(ch,
#ifdef ENABLE_EXTRA_INVENTORY
                TItemPos(window, cell), 
#else
                pos, 
#endif
                count);
                return sizeof(BYTE) 
#ifdef ENABLE_EXTRA_INVENTORY
                + sizeof(WORD) 
#else
                + sizeof(BYTE) 
#endif
#ifdef ENABLE_NEW_STACK_LIMIT
                + sizeof(WORD) 
#else
                + sizeof(BYTE) 
#endif

**3****

 

#if defined(ENABLE_EXTRA_INVENTORY) && !defined(ENABLE_SPECIAL_INV_TO_SAFEBOX)
    if (pkItem->IsExtraItem())
        return;
#endif

#ifdef __ENABLE_EXTEND_INVEN_SYSTEM__
    if (pkItem->GetCell() >= ch->Inventory_Size() && IS_SET(pkItem->GetFlag(),ITEM_FLAG_IRREMOVABLE))
#else
    if (pkItem->GetCell() >= INVENTORY_MAX_NUM && IS_SET(pkItem->GetFlag(), ITEM_FLAG_IRREMOVABLE))
#endif
    {
#ifdef TEXTS_IMPROVEMENT
        ch->ChatPacketNew(CHAT_TYPE_INFO, 640, "");
#endif
        return;
    }

    if (!pkSafebox->IsEmpty(p->bSafePos, pkItem->GetSize()))
    {
#ifdef TEXTS_IMPROVEMENT
        ch->ChatPacketNew(CHAT_TYPE_INFO, 641, "");
#endif
        return;
    }

    if (pkItem->GetVnum() == UNIQUE_ITEM_SAFEBOX_EXPAND)
    {
#ifdef TEXTS_IMPROVEMENT
        ch->ChatPacketNew(CHAT_TYPE_INFO, 187, "");
#endif
        return;
    }

    if( IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_SAFEBOX) )
    {
#ifdef TEXTS_IMPROVEMENT
        ch->ChatPacketNew(CHAT_TYPE_INFO, 187, "");
#endif
        return;
    }

    if (true == pkItem->isLocked())
    {
#ifdef TEXTS_IMPROVEMENT
        ch->ChatPacketNew(CHAT_TYPE_INFO, 187, "");
#endif
        return;
    }

    // @fixme140 BEGIN
    if (ITEM_BELT == pkItem->GetType() && CBeltInventoryHelper::IsExistItemInBeltInventory(ch))
    {
#ifdef TEXTS_IMPROVEMENT
        ch->ChatPacketNew(CHAT_TYPE_INFO, 385, "");
#endif
        return;
    }
    // @fixme140 END

    pkItem->RemoveFromCharacter();
#ifdef ENABLE_EXTRA_INVENTORY
    if (!pkItem->IsDragonSoul() && !pkItem->IsExtraItem())
#else
    if (!pkItem->IsDragonSoul())
#endif
    {
        ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, p->ItemPos.cell, 255);
    }

    pkSafebox->Add(p->bSafePos, pkItem);

    char szHint[128];
    snprintf(szHint, sizeof(szHint), "%s %u", pkItem->GetName(), pkItem->GetCount());
    LogManager::instance().ItemLog(ch, pkItem, "SAFEBOX PUT", szHint);
}


**4****

 

#ifdef ENABLE_EXTRA_INVENTORY
    else if(pkItem->IsExtraItem())
    {
        if (p->ItemPos.window_type != EXTRA_INVENTORY)
        {
#ifdef TEXTS_IMPROVEMENT
            ch->ChatPacketNew(CHAT_TYPE_INFO, 1292, "");
#endif
            return;
        }

        BYTE category = pkItem->GetExtraCategory();
        if (p->ItemPos.cell < category * EXTRA_INVENTORY_CATEGORY_MAX_NUM || p->ItemPos.cell >= (category + 1) * EXTRA_INVENTORY_CATEGORY_MAX_NUM) {
            return;
        }

        pkSafebox->Remove(p->bSafePos);
        pkItem->AddToCharacter(ch, p->ItemPos);
        ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
    }
#endif
    else
    {
#ifdef ENABLE_EXTRA_INVENTORY
        if (EXTRA_INVENTORY == p->ItemPos.window_type)
        {
#ifdef TEXTS_IMPROVEMENT
            ch->ChatPacketNew(CHAT_TYPE_INFO, 645, "");
#endif
            return;
        }
#endif
        if (DRAGON_SOUL_INVENTORY == p->ItemPos.window_type)
        {
#ifdef TEXTS_IMPROVEMENT
            ch->ChatPacketNew(CHAT_TYPE_INFO, 646, "");
#endif
            return;
        }
        // @fixme119
        if (p->ItemPos.IsBeltInventoryPosition() && false == CBeltInventoryHelper::CanMoveIntoBeltInventory(pkItem))
        {
#ifdef TEXTS_IMPROVEMENT
            ch->ChatPacketNew(CHAT_TYPE_INFO, 509, "");
#endif
            return;
        }

        pkSafebox->Remove(p->bSafePos);
        pkItem->AddToCharacter(ch, p->ItemPos);
        ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
    }

    DWORD dwID = pkItem->GetID();
    db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_FLUSH, 0, sizeof(DWORD));
    db_clientdesc->Packet(&dwID, sizeof(DWORD));

    char szHint[128];
    snprintf(szHint, sizeof(szHint), "%s %u", pkItem->GetName(), pkItem->GetCount());
    if (bMall)
        LogManager::instance().ItemLog(ch, pkItem, "MALL GET", szHint);
    else
        LogManager::instance().ItemLog(ch, pkItem, "SAFEBOX GET", szHint);

Maybe someone know the issue.

  • Metin2 Dev 1
Link to comment
https://metin2.dev/topic/32710-special-inventory-move-item-issue/
Share on other sites

Don't use any images from : imgur, turkmmop, freakgamers, inforge, hizliresim... Or your content will be deleted without notice...
Use : https://metin2.download/media/add/

Please use https://metin2.download/ when uploading files smaller than 100MB, otherwise the approval will take longer due to manual upload.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.