Çözüldü K envanter depo bugu ve offline shop uyarlaması

  • Konuyu açan Konuyu açan LethalStrikeR
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 16
  • Gösterim Gösterim 3K
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ı.

LethalStrikeR

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
701
Çözümler
41
Beğeni
168
Puan
609
Ticaret Puanı
0
Merhaba;
Ayrı ayrı konu açmaktansa tek bir seferde 2 yardım konusu açayım dedim.

Öncelikle ilk sorundan bahsediyim;
0425_043203.jpg

Bu sorun mevcut
K Envanter Depoya Sürükleme Hatası Fix
bu konuda ki fixi uyguladım şöyle bir şey mevcut kitap, yükseltme ve taş envanterinde bu bug olmuyor ama sandık, çiçek ve efsun envanterinde bu durum söz konusu.
İnput_main.cpp dosyasına eklediğim kod bloğu.
C++:
Genişlet Daralt Kopyala
    for ( WORD k_envanter = SKILL_BOOK_INVENTORY_SLOT_START; k_envanter < STONE_INVENTORY_SLOT_END; ++k_envanter)
    {
        if (p->ItemPos.cell == k_envanter && !pkItem->IsUpgradeItem() && !pkItem->IsSkillBook() && !pkItem->IsStone() && !pkItem->IsBox() && !pkItem->IsEfsun() && !pkItem->IsCicek())
        {
            ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("Depodan K envanterine nesne aktarımı yapazsın."));
            return;
        }
    }

2.Yardım isteğim;
Great Offline Shop kullanıyorum. K envanterinden item koyuluyor sorun yok ama pazar bozulunca şuraya item geliyor
0425_044853.jpg

Oradan alınca da normal envantere gidiyor bunu nasıl uyarlayabilirim?
 
Son düzenleme:
Çözüm
Sorunu çözdüm başka arkadaşlar yararlansın diye şöyle bırakayım kod bloğunu.
C++:
Genişlet Daralt Kopyala
ACMD(do_gift_show)
{
    ch->ChatPacket(CHAT_TYPE_COMMAND, "gift_show");
}
bool GetGift(LPCHARACTER ch, DWORD id,bool all=false)
{
    char szSockets[1024] = { '\0' };
    char *tempSockets = szSockets;
    for (int i = 0; i < ITEM_SOCKET_MAX_NUM; i++)
    {
        tempSockets += sprintf(tempSockets, "socket%d", i);

        if (i<ITEM_SOCKET_MAX_NUM - 1)
            tempSockets += sprintf(tempSockets, ",");
    }
    char szAttrs[1024] = { '\0' };
    char *tempAttrs = szAttrs;
    for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; i++)
    {
        if (i < 7)
            tempAttrs += sprintf(tempAttrs, "attrtype%d,attrvalue%d", i, i);
        else...
Konudada belirttigim gibi uygulama yaparsanız sorununun kalkar
Kod:
Genişlet Daralt Kopyala
// slot başlangıç ve bitişlerini kendi k envanterinize göre ayarlayın, sandık vs kullanıyorsanız
 
Konudada belirttigim gibi uygulama yaparsanız sorununun kalkar
Kod:
Genişlet Daralt Kopyala
// slot başlangıç ve bitişlerini kendi k envanterinize göre ayarlayın, sandık vs kullanıyorsanız
Kod bloğunu incelediğimde benim eklemediğim yerin burası olduğunun farkına vardım.
Kod:
Genişlet Daralt Kopyala
    for ( WORD k_envanter = SKILL_BOOK_INVENTORY_SLOT_START; k_envanter < STONE_INVENTORY_SLOT_END; ++k_envanter)
Bu sorun çözüldü ama offline shop için bir çözümünüz var mı?
 
offshop depo kodlarını bulun inventory ile ilgili birşey vardır oraya k envanter kodlarını dahil edin
 
offshop depo kodlarını bulun inventory ile ilgili birşey vardır oraya k envanter kodlarını dahil edin
Uyarlamayı yaptım fakat ufak bir engelleme yapmam gerekiyor yardımcı olur musunuz?

Offline shop depodan K envanterine item geçiyor tamam güzel sıkıntı yok ama K envanteri dolu iken depodan item alınca item kayboluyor. Bunun için bi engel yazabilir miyiz?
 
Uyarlamayı yaptım fakat ufak bir engelleme yapmam gerekiyor yardımcı olur musunuz?

Offline shop depodan K envanterine item geçiyor tamam güzel sıkıntı yok ama K envanteri dolu iken depodan item alınca item kayboluyor. Bunun için bi engel yazabilir miyiz?
Engellemeye ait kod bloğum bu bişiler ekledim ama olmadı herhalde;
C++:
Genişlet Daralt Kopyala
ACMD(do_gift_show)
{
    ch->ChatPacket(CHAT_TYPE_COMMAND, "gift_show");
}
bool GetGift(LPCHARACTER ch, DWORD id,bool all=false)
{
    char szSockets[1024] = { '\0' };
    char *tempSockets = szSockets;
    for (int i = 0; i < ITEM_SOCKET_MAX_NUM; i++)
    {
        tempSockets += sprintf(tempSockets, "socket%d", i);

        if (i<ITEM_SOCKET_MAX_NUM - 1)
            tempSockets += sprintf(tempSockets, ",");
    }
    char szAttrs[1024] = { '\0' };
    char *tempAttrs = szAttrs;
    for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; i++)
    {
        if (i < 7)
            tempAttrs += sprintf(tempAttrs, "attrtype%d,attrvalue%d", i, i);
        else
            tempAttrs += sprintf(tempAttrs, "applytype%d,applyvalue%d", i - 7, i - 7);
        if (i<ITEM_ATTRIBUTE_MAX_NUM - 1)
            tempAttrs += sprintf(tempAttrs, ",");
    }
    char query[8192];
    if (!all)
        snprintf(query, sizeof(query), "SELECT id,vnum,count,%s,%s from player_gift where id='%d' and owner_id=%d and status='WAIT'", szSockets, szAttrs, id, ch->GetPlayerID());
    else
        snprintf(query, sizeof(query), "SELECT id,vnum,count,%s,%s from player_gift where owner_id=%d and status='WAIT'", szSockets, szAttrs, ch->GetPlayerID());
    SQLMsg * pkMsg(DBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();
    if (pRes->uiNumRows > 0)
    {
        ch->SetQuestFlag("gift.time", get_global_time()+(1*pRes->uiNumRows)+2);
        MYSQL_ROW row;
        bool force = false;
        while ((row = mysql_fetch_row(pRes->pSQLResult)) != NULL)
        {
            DWORD vnum, socket[ITEM_SOCKET_MAX_NUM], attr[ITEM_ATTRIBUTE_MAX_NUM][2];
            int col = 0;
            long long count = 0;
            str_to_number(id, row[col++]);
            str_to_number(vnum, row[col++]);
            str_to_number(count, row[col++]);
            if (vnum == 1)
            {
#ifndef FULL_YANG
                long long nTotalMoney = ch->GetGold()+count;

                if (GOLD_MAX <= nTotalMoney)
                {
                    //sys_err("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id %u name %s", ch->GetPlayerID(), ch->GetName());
                    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20?? ©©E?¡í ??¡ÆuC??¨Ï ¡íoA¢§?¡í ?¡©?o¡Æ¢§ ??¢©?¢¥?¢¥?"));
                    return true;
                }
#endif
#ifdef FULL_YANG_OWN
                ch->ChangeGold(count);
#else
                ch->PointChange(POINT_GOLD, count, false);
#endif

            }
            else {
                if (force)
                    continue;
                for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
                    str_to_number(socket[s], row[col++]);

                for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
                {
                    str_to_number(attr[a][0], row[col++]);
                    str_to_number(attr[a][1], row[col++]);
                }
                LPITEM item = ITEM_MANAGER::instance().CreateItem(vnum, count, 0, true);
                if (item)
                {
                    for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
                        item->SetSocket(s, socket[s], false);
                    item->ClearAttribute();
                    for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
                        item->SetForceAttribute(a, attr[a][0], attr[a][1]);


                    if (item->IsDragonSoul())
                    {
                        int iEmptyPos = ch->GetEmptyDragonSoulInventory(item);

                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            if (!ch->DragonSoul_IsQualified())
                            {
                                ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #3", LC_TEXT( "UNKNOW_ERROR"));
                                force = true;
                                continue;
                            }
                            else {
                                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                                force = true;
                                continue;
                            }
                        }
                    }
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                    else if (item->IsSkillBook())
                    {
                        int iEmptyPos = ch->GetEmptySkillBookInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                            LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
                        }
                    }
                        else if (item->IsUpgradeItem())
                    {
                        int iEmptyPos = ch->GetEmptyUpgradeItemsInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                            LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
                        }
                    }
                    else if (item->IsStone())
                    {
                        int iEmptyPos = ch->GetEmptyStoneInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                            LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
                        }
                    }
                    else if (item->IsBox())
                    {
                        int iEmptyPos = ch->GetEmptyBoxInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                            LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
                        }
                    }
                    else if (item->IsEfsun())
                    {
                        int iEmptyPos = ch->GetEmptyEfsunInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                            LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
                        }
                    }
                    else if (item->IsCicek())
                    {
                        int iEmptyPos = ch->GetEmptyCicekInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                            LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
                        }
                    }
#endif
                    else
                    {
                        int iEmptyPos = ch->GetEmptyInventory(item->GetSize());

                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                }
                else
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #4", LC_TEXT( "UNKNOW_ERROR"));
                    force = true;
                    continue;
                }

            }
            DBManager::instance().DirectQuery("UPDATE player_gift SET status='OK',date_get=NOW() where id=%d;", id);
        }
        if (force)
            return true;
        if (all)
            ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("GIFT_ADD_ALL_SUCCESS"));
        else
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "GIFT_ADD_SUCCESS"));
        ch->SetQuestFlag("gift.time", get_global_time()+2);
        return true;
    }
    return false;
}
 
1. Yardım: Bahsettiğiniz konu sadece 3 envanter tipi için. Orada ki kodlara bakarak diğer türler içinde uyarlayabilirsiniz.
2. Yardım: Offlineshop itemlerin kapatırken ana envantera eklenecek şekilde uyarlamış. Yerden item alırken ayırma mantığı nasıl ise offlineshop içinde uygulayabilirsiniz.
 
Son mesajınızda da engelleme yaparken itemlerin kaybolduğundan bahsetmişsiniz. Bunda da tek tek her item için slot kontrolü yapabilirsiniz. Normal envanterdeyken kontrol nasıl yapılıyorsa benzerini k envanterinize uyarlayabilirsiniz
 
Son mesajınızda da engelleme yaparken itemlerin kaybolduğundan bahsetmişsiniz. Bunda da tek tek her item için slot kontrolü yapabilirsiniz. Normal envanterdeyken kontrol nasıl yapılıyorsa benzerini k envanterinize uyarlayabilirsiniz
İlk iki sorun çözüldü.
K envanterinde ki slot kontrol sistemini entegre etmeye çalıştım zaten fakat başarılı olamadım. Hatta şunu söyleyebilirim ki K envanterini bu kod bloğuna eklicem ama nasıl bilmiyorum.
C++:
Genişlet Daralt Kopyala
                LPITEM item = ITEM_MANAGER::instance().CreateItem(vnum, count, 0, true);
                if (item)
                {
                    for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
                        item->SetSocket(s, socket[s], false);
                    item->ClearAttribute();
                    for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
                        item->SetForceAttribute(a, attr[a][0], attr[a][1]);


                    if (item->IsDragonSoul())
                    {
                        int iEmptyPos = ch->GetEmptyDragonSoulInventory(item);

                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            if (!ch->DragonSoul_IsQualified())
                            {
                                ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #3", LC_TEXT( "UNKNOW_ERROR"));
                                force = true;
                                continue;
                            }
                            else
                            {
                                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                                force = true;
                                continue;
                            }
                        }
                    }
                    else
                    {
                        int iEmptyPos = ch->GetEmptyInventory(item->GetSize());

                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                }
                else
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #4", LC_TEXT( "UNKNOW_ERROR"));
                    force = true;
                    continue;
                }
 
ch->GetEmptyInventory fonksiyonu k envanterini kontrol ediyor mu?
 
Herkes farklı şekilde k envanter yazdığı için bir şey diyemem. Kodlarınıza bakıp bulmanız gerekiyor. Bazıları bu fonksiyon içine ekliyor bazıları ayrı yapıyor. Mesela yerden item alırken k envanter kontrolü düzgün yapıyorsa o kısımda ki kodlara bakabilirsiniz.
 
Sorunu çözdüm başka arkadaşlar yararlansın diye şöyle bırakayım kod bloğunu.
C++:
Genişlet Daralt Kopyala
ACMD(do_gift_show)
{
    ch->ChatPacket(CHAT_TYPE_COMMAND, "gift_show");
}
bool GetGift(LPCHARACTER ch, DWORD id,bool all=false)
{
    char szSockets[1024] = { '\0' };
    char *tempSockets = szSockets;
    for (int i = 0; i < ITEM_SOCKET_MAX_NUM; i++)
    {
        tempSockets += sprintf(tempSockets, "socket%d", i);

        if (i<ITEM_SOCKET_MAX_NUM - 1)
            tempSockets += sprintf(tempSockets, ",");
    }
    char szAttrs[1024] = { '\0' };
    char *tempAttrs = szAttrs;
    for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; i++)
    {
        if (i < 7)
            tempAttrs += sprintf(tempAttrs, "attrtype%d,attrvalue%d", i, i);
        else
            tempAttrs += sprintf(tempAttrs, "applytype%d,applyvalue%d", i - 7, i - 7);
        if (i<ITEM_ATTRIBUTE_MAX_NUM - 1)
            tempAttrs += sprintf(tempAttrs, ",");
    }
    char query[8192];
    if (!all)
        snprintf(query, sizeof(query), "SELECT id,vnum,count,%s,%s from player_gift where id='%d' and owner_id=%d and status='WAIT'", szSockets, szAttrs, id, ch->GetPlayerID());
    else
        snprintf(query, sizeof(query), "SELECT id,vnum,count,%s,%s from player_gift where owner_id=%d and status='WAIT'", szSockets, szAttrs, ch->GetPlayerID());
    SQLMsg * pkMsg(DBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();
    if (pRes->uiNumRows > 0)
    {
        ch->SetQuestFlag("gift.time", get_global_time()+(1*pRes->uiNumRows)+2);
        MYSQL_ROW row;
        bool force = false;
        while ((row = mysql_fetch_row(pRes->pSQLResult)) != NULL)
        {
            DWORD vnum, socket[ITEM_SOCKET_MAX_NUM], attr[ITEM_ATTRIBUTE_MAX_NUM][2];
            int col = 0;
            long long count = 0;
            str_to_number(id, row[col++]);
            str_to_number(vnum, row[col++]);
            str_to_number(count, row[col++]);
            if (vnum == 1)
            {
#ifndef FULL_YANG
                long long nTotalMoney = ch->GetGold()+count;

                if (GOLD_MAX <= nTotalMoney)
                {
                    //sys_err("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id %u name %s", ch->GetPlayerID(), ch->GetName());
                    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20?? ©©E?¡í ??¡ÆuC??¨Ï ¡íoA¢§?¡í ?¡©?o¡Æ¢§ ??¢©?¢¥?¢¥?"));
                    return true;
                }
#endif
#ifdef FULL_YANG_OWN
                ch->ChangeGold(count);
#else
                ch->PointChange(POINT_GOLD, count, false);
#endif

            }
            else {
                if (force)
                    continue;
                for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
                    str_to_number(socket[s], row[col++]);

                for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
                {
                    str_to_number(attr[a][0], row[col++]);
                    str_to_number(attr[a][1], row[col++]);
                }
                LPITEM item = ITEM_MANAGER::instance().CreateItem(vnum, count, 0, true);
                if (item)
                {
                    for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
                        item->SetSocket(s, socket[s], false);
                    item->ClearAttribute();
                    for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
                        item->SetForceAttribute(a, attr[a][0], attr[a][1]);

                    if (item->IsDragonSoul())
                    {
                        int iEmptyPos = ch->GetEmptyDragonSoulInventory(item);

                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            if (!ch->DragonSoul_IsQualified())
                            {
                                ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #3", LC_TEXT( "UNKNOW_ERROR"));
                                force = true;
                                continue;
                            }
                            else
                            {
                                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                                force = true;
                                continue;
                            }
                        }
                    }
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                    else if (item->IsSkillBook())
                    {
                        int iEmptyPos = ch->GetEmptySkillBookInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                    else if (item->IsUpgradeItem())
                    {
                        int iEmptyPos = ch->GetEmptyUpgradeItemsInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                    else if (item->IsStone())
                    {
                        int iEmptyPos = ch->GetEmptyStoneInventory(item->GetSize());
                       
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                    else if (item->IsBox())
                    {
                        int iEmptyPos = ch->GetEmptyBoxInventory(item->GetSize());
                       
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                    else if (item->IsEfsun())
                    {
                        int iEmptyPos = ch->GetEmptyEfsunInventory(item->GetSize());
           
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                    else if (item->IsCicek())
                    {
                        int iEmptyPos = ch->GetEmptyCicekInventory(item->GetSize());
                       
                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
#endif
                    else
                    {
                        int iEmptyPos = ch->GetEmptyInventory(item->GetSize());

                        if (iEmptyPos != -1)
                        {
                            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                        }
                        else
                        {
                            M2_DESTROY_ITEM(item);
                            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
                            force = true;
                            continue;
                        }
                    }
                   
                }
                else
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #4", LC_TEXT( "UNKNOW_ERROR"));
                    force = true;
                    continue;
                }

            }
            DBManager::instance().DirectQuery("UPDATE player_gift SET status='OK',date_get=NOW() where id=%d;", id);
        }
        if (force)
            return true;
        if (all)
            ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("GIFT_ADD_ALL_SUCCESS"));
        else
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "GIFT_ADD_SUCCESS"));
        ch->SetQuestFlag("gift.time", get_global_time()+2);
        return true;
    }
    return false;
}
 
Çözüm
Çözümü paylaştığınız için teşekkürler. :)
Kodlarınızı incelediğimde boşluk kontrolü için ayrı ayrı fonksiyonlar tanımlanmış.

GetEmptyUpgradeItemsInventory
GetEmptyStoneInventory
GetEmptyBoxInventory
GetEmptyEfsunInventory


Benzer sorunlar için bu konuyu ziyaret edecekler arkadaşlar için şunu söyleyebilirim. Çeşit çeşit k envanter sistemleri paylaşıldığı için kodlarınızda farklılıklar olabilir. @LethalStrikeR kullandığı sistemi kullanıyorsanız uyumlu olacaktır
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst