Hikayeler

Reklam vermek için turkmmo@gmail.com

Neden 13 değerini alıyor?

Kenzox

Level 5
Fahri Üye
Katılım
25 Haz 2024
Konular
125
Mesajlar
838
Online süresi
2ay 11g
Reaksiyon Skoru
503
Altın Konu
1
Başarım Puanı
164
TM Yaşı
1 Yıl 9 Ay 28 Gün
MmoLira
3,640
DevLira
45

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Merhabalar bi önceki soru cevap konumda dali offlineshop eklerken yaşadığım sorundan bahsetmiştim offlineshop tablosuna kaydın silindiğini söylemiştim bunun nedeni item tablosunda offlineshop içerisinde boş olarak göründüğü için pazar kapandığı görünüyor o yüzden siliniyormuş neyse konumuza gelelim şimdi

Cache.cpp:
void CItemCache::OnFlush()
{
    if (m_data.vnum == 0) // vnum이 0이면 삭제하라고 표시된 것이다.
    {
        char szQuery[QUERY_MAX_LEN];
        snprintf (szQuery, sizeof (szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id);
        CDBManager::instance().ReturnQuery (szQuery, QID_ITEM_DESTROY, 0, NULL);

        if (g_test_server)
        {
            sys_log (0, "ItemCache::Flush : DELETE %u %s", m_data.id, szQuery);
        }
    }
    else
    {
        long alSockets[ITEM_SOCKET_MAX_NUM];
        TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
        bool isSocket = false, isAttr = false;

        memset (&alSockets, 0, sizeof (long) * ITEM_SOCKET_MAX_NUM);
        memset (&aAttr, 0, sizeof (TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM);

        TPlayerItem* p = &m_data;

        if (memcmp (alSockets, p->alSockets, sizeof (long) * ITEM_SOCKET_MAX_NUM))
        {
            isSocket = true;
        }

        if (memcmp (aAttr, p->aAttr, sizeof (TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM))
        {
            isAttr = true;
        }

        char szColumns[QUERY_MAX_LEN];
        char szValues[QUERY_MAX_LEN];
        char szUpdate[QUERY_MAX_LEN];

        int iLen = snprintf (szColumns, sizeof (szColumns), "id, owner_id, `window`, pos, count, vnum");

        int iValueLen = snprintf (szValues, sizeof (szValues), "%u, %u, %d, %d, %u, %u",
                                  p->id, p->owner, p->window, p->pos, p->count, p->vnum);

        int iUpdateLen = snprintf (szUpdate, sizeof (szUpdate), "owner_id=%u, window=%d, pos=%d, count=%u, vnum=%u",
                                   p->owner, p->window, p->pos, p->count, p->vnum);

        if (isSocket)
        {
            iLen += snprintf (szColumns + iLen, sizeof (szColumns) - iLen, ", socket0, socket1, socket2");
            iValueLen += snprintf (szValues + iValueLen, sizeof (szValues) - iValueLen,
                                   ", %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
            iUpdateLen += snprintf (szUpdate + iUpdateLen, sizeof (szUpdate) - iUpdateLen,
                                    ", socket0=%lu, socket1=%lu, socket2=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
        }

        if (isAttr)
        {
            iLen += snprintf (szColumns + iLen, sizeof (szColumns) - iLen,
                              ", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"
                              ", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6");

            iValueLen += snprintf (szValues + iValueLen, sizeof (szValues) - iValueLen,
                                   ", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
                                   p->aAttr[0].bType, p->aAttr[0].sValue,
                                   p->aAttr[1].bType, p->aAttr[1].sValue,
                                   p->aAttr[2].bType, p->aAttr[2].sValue,
                                   p->aAttr[3].bType, p->aAttr[3].sValue,
                                   p->aAttr[4].bType, p->aAttr[4].sValue,
                                   p->aAttr[5].bType, p->aAttr[5].sValue,
                                   p->aAttr[6].bType, p->aAttr[6].sValue);

            iUpdateLen += snprintf (szUpdate + iUpdateLen, sizeof (szUpdate) - iUpdateLen,
                                    ", attrtype0=%d, attrvalue0=%d"
                                    ", attrtype1=%d, attrvalue1=%d"
                                    ", attrtype2=%d, attrvalue2=%d"
                                    ", attrtype3=%d, attrvalue3=%d"
                                    ", attrtype4=%d, attrvalue4=%d"
                                    ", attrtype5=%d, attrvalue5=%d"
                                    ", attrtype6=%d, attrvalue6=%d",
                                    p->aAttr[0].bType, p->aAttr[0].sValue,
                                    p->aAttr[1].bType, p->aAttr[1].sValue,
                                    p->aAttr[2].bType, p->aAttr[2].sValue,
                                    p->aAttr[3].bType, p->aAttr[3].sValue,
                                    p->aAttr[4].bType, p->aAttr[4].sValue,
                                    p->aAttr[5].bType, p->aAttr[5].sValue,
                                    p->aAttr[6].bType, p->aAttr[6].sValue);
        }
#ifdef WJ_OFFLINE_SHOP_SYSTEM
        if (p->price)
   [HASH=2]#ifdef[/HASH]    iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", price");

            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen, ", %u", p->price);

            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen, ", price=%u", p->price);
        }

#ifdef WJ_CHEQUE_SYSTEM
        if (p->cheque_price)
  [HASH=2]#ifdef[/HASH]     iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", cheque_price");

            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen, ", %u", p->cheque_price);

            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen, ", cheque_price=%u", p->cheque_price);
        }
#endif

#endif
        char szItemQuery[QUERY_MAX_LEN +[HASH=3]#endif[/HASH] [HASH=3]#endif[/HASH]rintf (szItemQuery, sizeof (szItemQuery), "REPLACE INTO item%s (%s) VALUES(%s)", GetTablePostfix(), szColumns, szValues);

        if (g_test_server)
        {
            sys_log (0, "ItemCache::Flush :REPLACE  (%s)", szItemQuery);
        }

        CDBManager::instance().ReturnQuery (szItemQuery, QID_ITEM_SAVE, 0, NULL);

        //g_item_info.Add(p->vnum);
        ++g_item_count;
    }

    m_bNeedQuery = false;
}

Cache.cpp dosyamda bu şekilde item tablosuna kayıt yapıyor ama tablodaki enum değerini 13 olarak gönderdiği için tabloya kayıt sağlanmıyor ve böyle bir syserr atıyor

syserr:
SYSERR: Jan 28 15:26:03.725535 :: ChildLoop: AsyncSQL: query failed: Data truncated for column 'window' at row 1 (query: REPLACE INTO item (id, owner_id, `window`, pos, count, vnum, socket0, socket1, socket2, attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3, attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, price) VALUES(70000001, 10001, 13, 0, 1, 19, 1, 0, 0, 16, 2, 22, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123) errno: 1265)

syserr de ki enum değerini OFFLINE_SHOP olarak değiştirince sorun kalmıyor ama neden 13 olarak gönderdiğini bulamadım length.h dosyasını kontrol ettiğimde

length.h:
enum EWindows
{
    RESERVED_WINDOW,
    INVENTORY,
    EQUIPMENT,
    SAFEBOX,
    MALL,
    DRAGON_SOUL_INVENTORY,
    BELT_INVENTORY,
#ifdef WJ_OFFLINE_SHOP_SYSTEM
    OFFLINE_SHOP,
#endif
#ifdef ENABLE_SPLIT_IN[HASH=2]#ifdef[/HASH]    SKILL_BOOK_INVENTORY,
    UPG[HASH=3]#endif[/HASH][HASH=3]#endif[/HASH][HASH=3]#endif[/HASH][HASH=3]#endif[/HASH]N[HASH=2]#ifdef[/HASH]Y,
    BOX_INVENTORY,
    EFSUN_INVENTORY,
    CICEK_INVENTORY,
#endif
    GROUND
};

d#endifrim bu şekilde fakat navicat tablosundaki window değerleri;
enum değerleri:
'INVENTORY','EQUIPMENT','SAFEBOX','MALL','DRAGON_SOUL_INVENTORY','BELT_INVENTORY','OFFLINE_SHOP','GROUND'

bu şekilde :/ işin içinden çıkamadım varmı yardımcı olacak ?
 
olur öyle çok fazla uğraşınca ara vermeden gözünün önündekini göremiyor insan tab hatası yüzünden 2 saat uğraşmışlığım var :D
valla öyle ya şimdi tek bi hata kaldı o da yeni gözüme çarptı envanterdeki itemi satmaya çalışırken hep 2.slottaki itemin ismi gözüküyor dialogda 2.envanter boş olunca düzgün gözüküyor :D
 

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

Geri
Üst