Hikayeler

Reklam vermek için turkmmo@gmail.com

TC Offlineshop Efsun Bozulması Fix

Paylaşım için teşekkürler.
 
eyvallah kardeşim , bu Tc nin offshopunda başka bug tarzı bildiğin birşey varmı
 
Teşekkürler. :)
 
4 taş ekledikten sonra yüksek ihtimalle yaşayacağınız bir sorundur sorundan kısaca bahsedecek olursak eğer ; 5 efsun 4 taş item offlineshop'a koyulduktan sonra reboot çekilir ardından oyuna giriş yapılır ve iteminizin efsunları bozulmuş şekilde geri alınır. sorun offlineshopun kaybolduktan sonraki geri alma fonksiyonunda değerlerin olağandan düşük olarak belirlenmesinden kaynaklıdır.

offlineshop_manager.cpp açılır ve bulunur​

Kod:
    MYSQL_ROW row;
    while (NULL != (row = mysql_fetch_row(pMsg->Get()->pSQLResult)))
    {
        TPlayerItem item;

        str_to_number(item.pos, row[0]);
        str_to_number(item.count, row[1]);
        str_to_number(item.vnum, row[2]);

        for (int i = 0, n = 3; i < ITEM_SOCKET_MAX_NUM; ++i, n++)
            str_to_number(item.alSockets[i], row[n]);

        for (int i = 0, iStartAttributeType = 6, iStartAttributeValue = ITEM_ATTRIBUTE_MAX_NUM; i < ITEM_ATTRIBUTE_MAX_NUM; ++i, iStartAttributeType += 2, iStartAttributeValue += 2)
        {
            str_to_number(item.aAttr[i].bType, row[iStartAttributeType]);
            str_to_number(item.aAttr[i].sValue, row[iStartAttributeValue]);
        }

        LPITEM pItem = ITEM_MANAGER::instance().CreateItem(item.vnum, item.count);

        if (pItem)
        {
            pItem->SetSockets(item.alSockets);
            pItem->SetAttributes(item.aAttr);

            int cell;
            cell = ch->GetEmptyInventory(pItem->GetSize());

            if (cell != -1)
            {
                pItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
            }
            else
            {
                pItem->AddToGround(ch->GetMapIndex(), ch->GetXYZ());
                pItem->StartDestroyEvent();
                pItem->SetOwnership(ch, 60);
            }

            // release DB
            DBManager::instance().DirectQuery("DELETE FROM %soffline_shop_item WHERE owner_id = %u AND pos = %d AND vnum = %d LIMIT 1", get_table_postfix(), ch->GetPlayerID(), item.pos, item.vnum);
         
            /* log for web */
            LogManager::instance().OfflineShopLog(ch->GetDesc()->GetAccountTable().id, pItem->GetName(), "FETCH");
            /* end log for web */
        }
    }

komple değiştirilir​

Kod:
    MYSQL_ROW row;
    while (NULL != (row = mysql_fetch_row(pMsg->Get()->pSQLResult)))
    {
        TPlayerItem item;

        int cur = 0;
        str_to_number(item.pos, row[cur++]);
        str_to_number(item.count, row[cur++]);
        str_to_number(item.vnum, row[cur++]);

        for (BYTE a = 0; a < ITEM_SOCKET_MAX_NUM; a++)
            str_to_number(item.alSockets[a], row[cur++]);

        for (int j = 0; j < ITEM_ATTRIBUTE_MAX_NUM; j++)
        {
            str_to_number(item.aAttr[j].bType, row[cur++]);
            str_to_number(item.aAttr[j].sValue, row[cur++]);
        }

        LPITEM pItem = ITEM_MANAGER::instance().CreateItem(item.vnum, item.count);
        if (!pItem)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Su anda sistemde sorun var.Lutfen daha sonra tekrar deneyin."));
            return;
        }

        pItem->SetAttributes(item.aAttr);
        pItem->SetSockets(item.alSockets);

        int iEmptyPos;
        if (pItem->IsDragonSoul())
            iEmptyPos = ch->GetEmptyDragonSoulInventory(pItem);
        else
            iEmptyPos = ch->GetEmptyInventory(pItem->GetSize());

        if (iEmptyPos < 0)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Item icin yeterli alan yok."));
            return;
        }

        if (pItem->IsDragonSoul())
            pItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
        else
            pItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));

        DBManager::instance().DirectQuery("DELETE FROM %soffline_shop_item WHERE owner_id = %u AND pos = %d AND vnum = %d LIMIT 1", get_table_postfix(), ch->GetPlayerID(), item.pos, item.vnum);
        LogManager::instance().OfflineShopLog(ch->GetDesc()->GetAccountTable().id, pItem->GetName(), "FETCH");
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s itemini basariyla aldin."), pItem->GetName());
    }
}

lqb8AE.jpg
teşekkürler
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst