Çözüldü Kemer Bugu

  • Konuyu açan Konuyu açan nyami
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 4
  • Gösterim Gösterim 736
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ı.
Çözüm
input_main.cpp:
Genişlet Daralt Kopyala
void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char* c_pData, bool bMall)
{
    TPacketCGSafeboxCheckout* p = (TPacketCGSafeboxCheckout*)c_pData;

    if (!ch->CanHandleItem())
        return;

    CSafebox* pkSafebox;

    if (bMall)
        pkSafebox = ch->GetMall();
    else
        pkSafebox = ch->GetSafebox();

    if (!pkSafebox)
        return;

    LPITEM pkItem = pkSafebox->Get(p->bSafePos);

    if (!pkItem)
        return;

    if (!ch->IsEmptyItemGrid(p->ItemPos, pkItem->GetSize()))
        return;

    if (pkItem->IsDragonSoul())
    {
        if (bMall)
        {
            DSManager::instance().DragonSoulItemInitialize(pkItem);
        }

        if (DRAGON_SOUL_INVENTORY != p->ItemPos.window_type)
        {...
input_main.cpp:
Genişlet Daralt Kopyala
void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char* c_pData, bool bMall)
{
    TPacketCGSafeboxCheckout* p = (TPacketCGSafeboxCheckout*)c_pData;

    if (!ch->CanHandleItem())
        return;

    CSafebox* pkSafebox;

    if (bMall)
        pkSafebox = ch->GetMall();
    else
        pkSafebox = ch->GetSafebox();

    if (!pkSafebox)
        return;

    LPITEM pkItem = pkSafebox->Get(p->bSafePos);

    if (!pkItem)
        return;

    if (!ch->IsEmptyItemGrid(p->ItemPos, pkItem->GetSize()))
        return;

    if (pkItem->IsDragonSoul())
    {
        if (bMall)
        {
            DSManager::instance().DragonSoulItemInitialize(pkItem);
        }

        if (DRAGON_SOUL_INVENTORY != p->ItemPos.window_type)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
            return;
        }

        TItemPos DestPos = p->ItemPos;
        if (!DSManager::instance().IsValidCellForThisItem(pkItem, DestPos))
        {
            int iCell = ch->GetEmptyDragonSoulInventory(pkItem);
            if (iCell < 0)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
                return;
            }
            DestPos = TItemPos(DRAGON_SOUL_INVENTORY, iCell);
        }

        pkSafebox->Remove(p->bSafePos);
        pkItem->AddToCharacter(ch, DestPos);
        ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
    }
    else
    {
        if (DRAGON_SOUL_INVENTORY == p->ItemPos.window_type)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
            return;
        }
        // @fixme119
        if (p->ItemPos.IsBeltInventoryPosition() && false == CBeltInventoryHelper::CanMoveIntoBeltInventory(pkItem))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 벨트 인벤토리로 옮길 수 없습니다."));
            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);
}
 
Çözüm
input_main.cpp:
Genişlet Daralt Kopyala
void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char* c_pData, bool bMall)
{
    TPacketCGSafeboxCheckout* p = (TPacketCGSafeboxCheckout*)c_pData;

    if (!ch->CanHandleItem())
        return;

    CSafebox* pkSafebox;

    if (bMall)
        pkSafebox = ch->GetMall();
    else
        pkSafebox = ch->GetSafebox();

    if (!pkSafebox)
        return;

    LPITEM pkItem = pkSafebox->Get(p->bSafePos);

    if (!pkItem)
        return;

    if (!ch->IsEmptyItemGrid(p->ItemPos, pkItem->GetSize()))
        return;

    if (pkItem->IsDragonSoul())
    {
        if (bMall)
        {
            DSManager::instance().DragonSoulItemInitialize(pkItem);
        }

        if (DRAGON_SOUL_INVENTORY != p->ItemPos.window_type)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
            return;
        }

        TItemPos DestPos = p->ItemPos;
        if (!DSManager::instance().IsValidCellForThisItem(pkItem, DestPos))
        {
            int iCell = ch->GetEmptyDragonSoulInventory(pkItem);
            if (iCell < 0)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
                return;
            }
            DestPos = TItemPos(DRAGON_SOUL_INVENTORY, iCell);
        }

        pkSafebox->Remove(p->bSafePos);
        pkItem->AddToCharacter(ch, DestPos);
        ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
    }
    else
    {
        if (DRAGON_SOUL_INVENTORY == p->ItemPos.window_type)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
            return;
        }
        // @fixme119
        if (p->ItemPos.IsBeltInventoryPosition() && false == CBeltInventoryHelper::CanMoveIntoBeltInventory(pkItem))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 벨트 인벤토리로 옮길 수 없습니다."));
            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);
}
Hangi sürüm için bu? Bende CBeltInventoryHelper bunu tanımıyor

?

C++:
Genişlet Daralt Kopyala
    for (WORD belt_index = BELT_INVENTORY_SLOT_START; belt_index < BELT_INVENTORY_SLOT_END; ++belt_index)
    {
        if (pkItem->GetType() != 3 && p->ItemPos.cell == belt_index)
        {
            if(pkItem->GetSubType() != 0 || pkItem->GetSubType() != 11 || pkItem->GetSubType() != 7)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, "Depodan Kemer envanterine item yerletiremezsin.");
                return;
            }
        }
    }

edit : yok bu boş çıktı :D
 
Son düzenleme:
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst