mannaxxx 1
mannaxxx
Agora Metin2 1
Agora Metin2
Mt2Hizmet 1
Mt2Hizmet
berkmenoo 1
berkmenoo
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
farkmt2official 1
farkmt2official
cemalggevenc 1
cemalggevenc
Bvural41 1
Bvural41
Hikaye Ekle

[C++]6 Taş Sistemi Sorunlar Fixed

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

Rica Ederim Arkadaşlar :) Sorun Yaşayan olursa Skyp Adresim : mimikkral001 her türlü yardımcı olurum tüm hata & sorunlarınızda
 
Merhaba Arkadaşlar Söz Verdiğim Gibi Sizlerle 6 taş sistemini paylaşacağım.Öncelikle 6 taş sistemini paylaşacağım Mantıklı Olarak Düşünüldüğünde Bu sistemi Kendinize Göre 4 taş 5 taş vs. Şeklinde Ayarlayabilirsiniz isterseniz 9 taşta yapabilirsiniz fakat 9 taşı ekledikten sonra item silinir çünkü mysql.player.item tablosunda socket0 dan başlar socket5 e kadardır yani 9 taş felan yapacaksanız burdaki socket sayısınıda arttırmanız gerekmektedir.
Şimdi Konumuza Geçelim.

DB > AuctionManager.cpp Açılır Ve Aratılır.
Kod:
"SELECT id,    owner_id, count, vnum, socket0, socket1, socket2,"
Değiştirilir;
Kod:
"SELECT id,    owner_id, count, vnum, socket0, socket1, socket2, socket3, socket4, socket5"
Aratılır :
Kod:
str_to_number(item.alSockets[2], row[cur++]);
Altına Eklenir.
Kod:
str_to_number(item.alSockets[3], row[cur++]);
str_to_number(item.alSockets[4], row[cur++]);
str_to_number(item.alSockets[5], row[cur++]);
Açılır Cache.cpp
Kod Bloğu Aratılır.
Kod:
void CItemCache::OnFlush()
Kod:
[SIZE=2][FONT=arial black]{[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    if (m_data.vnum == 0) // vnumÀÌ 0ÀÌ¸é »èÁ¦Ç϶ó°í Ç¥½ÃµÈ °ÍÀÌ´Ù.[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szQuery[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        snprintf(szQuery, sizeof(szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, 0, NULL);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (g_test_server)[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            sys_log(0, "ItemCache::Flush : DELETE %u %s", m_data.id, szQuery);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    else[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        long alSockets[ITEM_SOCKET_MAX_NUM];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        bool isSocket = false, isAttr = false;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        memset(&alSockets, 0, sizeof(long) * ITEM_SOCKET_MAX_NUM);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        memset(&aAttr, 0, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        TPlayerItem * p = &m_data;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (memcmp(alSockets, p->alSockets, sizeof(long) * ITEM_SOCKET_MAX_NUM))[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            isSocket = true;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (memcmp(aAttr, p->aAttr, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM))[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            isAttr = true;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szColumns[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szValues[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szUpdate[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        int iLen = snprintf(szColumns, sizeof(szColumns), "id, owner_id, window, pos, count, vnum");[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        int iValueLen = snprintf(szValues, sizeof(szValues), "%u, %u, %d, %d, %u, %u",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                p->id, p->owner, p->window, p->pos, p->count, p->vnum);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        int iUpdateLen = snprintf(szUpdate, sizeof(szUpdate), "owner_id=%u, window=%d, pos=%d, count=%u, vnum=%u",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                p->owner, p->window, p->pos, p->count, p->vnum);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (isSocket)[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2");[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", socket0=%lu, socket1=%lu, socket2=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (isAttr)[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, [/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6");[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[0].bType, p->aAttr[0].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[1].bType, p->aAttr[1].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[2].bType, p->aAttr[2].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[3].bType, p->aAttr[3].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[4].bType, p->aAttr[4].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[5].bType, p->aAttr[5].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[6].bType, p->aAttr[6].sValue);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype0=%d, attrvalue0=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype1=%d, attrvalue1=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype2=%d, attrvalue2=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype3=%d, attrvalue3=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype4=%d, attrvalue4=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype5=%d, attrvalue5=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype6=%d, attrvalue6=%d",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[0].bType, p->aAttr[0].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[1].bType, p->aAttr[1].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[2].bType, p->aAttr[2].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[3].bType, p->aAttr[3].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[4].bType, p->aAttr[4].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[5].bType, p->aAttr[5].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[6].bType, p->aAttr[6].sValue);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szItemQuery[QUERY_MAX_LEN + QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        snprintf(szItemQuery, sizeof(szItemQuery), "REPLACE INTO item%s (%s) VALUES(%s)", GetTablePostfix(), szColumns, szValues);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (g_test_server)    [/FONT][/SIZE]
[SIZE=2][FONT=arial black]            sys_log(0, "ItemCache::Flush :REPLACE  (%s)", szItemQuery);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        CDBManager::instance().ReturnQuery(szItemQuery, QID_ITEM_SAVE, 0, NULL);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        //g_item_info.Add(p->vnum);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        ++g_item_count;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    m_bNeedQuery = false;[/FONT][/SIZE]
[FONT=arial black]}[/FONT]

Kod Bloğu Değiştirilir
Kod:
void CItemCache::OnFlush()
Kod:
[SIZE=2][FONT=arial black]{[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    if (m_data.vnum == 0) // vnumÀÌ 0ÀÌ¸é »èÁ¦Ç϶ó°í Ç¥½ÃµÈ °ÍÀÌ´Ù.[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szQuery[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        snprintf(szQuery, sizeof(szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, 0, NULL);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (g_test_server)[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            sys_log(0, "ItemCache::Flush : DELETE %u %s", m_data.id, szQuery);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    else[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        long alSockets[ITEM_SOCKET_MAX_NUM];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        bool isSocket = false, isAttr = false;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        memset(&alSockets, 0, sizeof(long) * ITEM_SOCKET_MAX_NUM);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        memset(&aAttr, 0, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        TPlayerItem * p = &m_data;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (memcmp(alSockets, p->alSockets, sizeof(long) * ITEM_SOCKET_MAX_NUM))[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            isSocket = true;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (memcmp(aAttr, p->aAttr, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM))[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            isAttr = true;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szColumns[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szValues[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szUpdate[QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        int iLen = snprintf(szColumns, sizeof(szColumns), "id, owner_id, window, pos, count, vnum");[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        int iValueLen = snprintf(szValues, sizeof(szValues), "%u, %u, %d, %d, %u, %u",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                p->id, p->owner, p->window, p->pos, p->count, p->vnum);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        int iUpdateLen = snprintf(szUpdate, sizeof(szUpdate), "owner_id=%u, window=%d, pos=%d, count=%u, vnum=%u",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                p->owner, p->window, p->pos, p->count, p->vnum);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (isSocket)[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2, socket3, socket4, socket5");[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", %lu, %lu, %lu, %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3], p->alSockets[4], p->alSockets[5]);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", socket0=%lu, socket1=%lu, socket2=%lu, socket3=%lu, socket4=%lu, socket5=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3], p->alSockets[4], p->alSockets[5]);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (isAttr)[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        {[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, [/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6");[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[0].bType, p->aAttr[0].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[1].bType, p->aAttr[1].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[2].bType, p->aAttr[2].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[3].bType, p->aAttr[3].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[4].bType, p->aAttr[4].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[5].bType, p->aAttr[5].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[6].bType, p->aAttr[6].sValue);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype0=%d, attrvalue0=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype1=%d, attrvalue1=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype2=%d, attrvalue2=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype3=%d, attrvalue3=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype4=%d, attrvalue4=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype5=%d, attrvalue5=%d"[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    ", attrtype6=%d, attrvalue6=%d",[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[0].bType, p->aAttr[0].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[1].bType, p->aAttr[1].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[2].bType, p->aAttr[2].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[3].bType, p->aAttr[3].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[4].bType, p->aAttr[4].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[5].bType, p->aAttr[5].sValue,[/FONT][/SIZE]
[SIZE=2][FONT=arial black]                    p->aAttr[6].bType, p->aAttr[6].sValue);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        char szItemQuery[QUERY_MAX_LEN + QUERY_MAX_LEN];[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        snprintf(szItemQuery, sizeof(szItemQuery), "REPLACE INTO item%s (%s) VALUES(%s)", GetTablePostfix(), szColumns, szValues);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        if (g_test_server)    [/FONT][/SIZE]
[SIZE=2][FONT=arial black]            sys_log(0, "ItemCache::Flush :REPLACE  (%s)", szItemQuery);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        CDBManager::instance().ReturnQuery(szItemQuery, QID_ITEM_SAVE, 0, NULL);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        //g_item_info.Add(p->vnum);[/FONT][/SIZE]
[SIZE=2][FONT=arial black]        ++g_item_count;[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    }[/FONT][/SIZE]
[SIZE=2][FONT=arial black]
[/FONT][/SIZE]
[SIZE=2][FONT=arial black]    m_bNeedQuery = false;[/FONT][/SIZE]
[FONT=arial black]}[/FONT]


Açılır ClientManager.cpp
öncelikle şu kod aratılır
Kod:
dwSocket2
yaklaşık 10 11 tane olacaktır hepsi değiştirilir
Kod:
dwSocket5
aratılır.
Kod:
socket0, socket1, socket2,
Değiştirilir
Kod:
socket0, socket1, socket2, socket3, socket4, socket5

aratılır
Kod:
socket0, socket1, socket2
değiştirilir
Kod:
socket0, socket1, socket2, socket3, socket4, socket5

arat
Kod:
"VALUES(%u, %u, '%s', %d, %u, %u, %u, %u, %u)",
değiştir
Kod:
"VALUES(%u, %u, '%s', %d, %u, %u, %u, %u, %u, %u, %u, %u)",
arat
Kod:
pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2);
değiştir
Kod:
pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, pItemAward->dwSocket2, pItemAward->dwSocket3, pItemAward->dwSocket4, dwSocket5);
arat
Kod:
item.alSockets[2] = pItemAward->dwSocket2;
altına ekle
Kod:
                    item.alSockets[3] = pItemAward->dwSocket3;
Kod:
[SIZE=2][FONT=arial black]                    item.alSockets[4] = pItemAward->dwSocket4;[/FONT][/SIZE]
[FONT=arial black]                    item.alSockets[5] = dwSocket5;[/FONT]

arat
Kod:
"REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, "
değiştir
Kod:
"REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, socket3, socket4, socket5, "
arat
Kod:
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",
değiştir
Kod:
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",
Burda Depodan İtem Kaybolmayı engelliyoruz :)
arat
Kod:
p->alSockets[2],
altına ekle
Kod:
            p->alSockets[3],
Kod:
[SIZE=2][FONT=arial black]            p->alSockets[4],[/FONT][/SIZE]
[FONT=arial black]            p->alSockets[5],[/FONT]

ClientManagerPlayer.cpp açılır

aratılır
Kod:
str_to_number(item.alSockets[2], row[cur++]);
altına eklenir
Kod:
        str_to_number(item.alSockets[3], row[cur++]);
Kod:
[SIZE=2][FONT=arial black]        str_to_number(item.alSockets[4], row[cur++]);[/FONT][/SIZE]
[FONT=arial black]        str_to_number(item.alSockets[5], row[cur++]);[/FONT]

aratılır
Kod:
socket0,socket1,socket2,
yanına eklenir
Kod:
socket3,socket4,socket5,
tekrar yukarıdaki işlem yapılır.
açılır ItemAwardManager.cpp
aratılır
Kod:
socket0,socket1,socket2
yanına eklenir
Kod:
socket3,socket4,socket5
aratılır
Kod:
str_to_number(kData->dwSocket2, row[col++]);
altına eklenir
Kod:
str_to_number(kData->dwSocket3, row[col++]);
str_to_number(kData->dwSocket4, row[col++]);
str_to_number(kData->dwSocket5, row[col++]);
açılır ItemAwardManager.h
aratılır
Kod:
DWORD    dwSocket2;
altına eklenir
Kod:
DWORD    dwSocket3;
DWORD    dwSocket4;
DWORD    dwSocket5;
DB ile işimiz Bitti
common/item_lengt.h
açılır ve aratılır
item_socket_max_num
6 yapılır
Client/gametype.h
arat
ITEM_SOCKET_SLOT_MAX_NUM arat 3 ü 6 yap
Game/src/constants.cpp
aratılır
3, // WEAPON_SWORD,
WEAPON_DAGGER
WEAPON_BOW
WEAPON_TWO_HANDED
WEAPON_BELL
WEAPON_FAN
ARMOR_BODY
bunların yanındaki "3" Sayısı 6 olarak değiştirilir.
şimdi item proto'ya geçelim çoğu kişi yanlış anlatıyor sadece MySQL item_protoda örnek veriyorum runik kılıcı +9
6 taş yapacağınız itemlerin en sonuna gidin sağ tarafına orda socket_pct var o 3 tür onu 6 yapalım işlem bu kadar
NOT: Python item_proto ellemeyin yani ordaki socket_pct ellemeyin eğer orayla oynarsanız o itemin parlaması gidecektir!
Skype;mimikkral001
Yapamayan Herkese Yardımcı Olurum Yeterki Boş boş konuşmayın.
Kanıt ;



Dipnot:Bu sistemi Kimseden alıntı yapmadım hiç bir forumdan ben ürettim diye bir şeyde demiyorum tamamen kendi mantığımla yaptım.
İtem Yansıtma Problemi fixi aşşağıda :)
root/uitooltip.py


açılır.


////////////////////////////////


defSetHyperlinkItem(self, tokens):


arat


def SetHyperlinkItem(self, tokens):
minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM
maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM
if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
head, vnum, flag = tokens[:3]
itemVnum = int(vnum, 16)
metinSlot = [int(metin, 16) for metin in tokens[3:9]]


rests = tokens[9:]
if rests:
attrSlot = []


rests.reverse()
while rests:
key = int(rests.pop(), 16)
if rests:
val = int(rests.pop())
attrSlot.append((key, val))


attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
else:
attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM


self.ClearToolTip()
self.AddItemData(itemVnum, metinSlot, attrSlot)


ItemToolTip.OnUpdate(self)


değiştir.

pythonchatmodule.cpp


açılır


//////////////////////////


PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)


arat






PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
{
char * szHyperlink;

if (!PyTuple_GetString(poArgs, 0, &szHyperlink))
return Py_BuildException();


std::string stHyperlink(szHyperlink);
std::vector<std::string> results;


split_string(stHyperlink, ":", results, false);


// item:vnum:flag:socket0:socket1:socket2:socket3:socket4:socket5
if (0 == results[0].compare("item"))
{
if (results.size() < 9)
return Py_BuildValue("s", "");


CItemData * pItemData = NULL;


if (CItemManager::Instance().GetItemDataPointer(htoi(results[1].c_str()), &pItemData))
{
char buf[1024] = { 0 };
char itemlink[256];
int len;
bool isAttr = false;


len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x:%x:%x:%x",
htoi(results[1].c_str()),
htoi(results[2].c_str()),
htoi(results[3].c_str()),
htoi(results[4].c_str()),
htoi(results[5].c_str()),
htoi(results[6].c_str()),
htoi(results[7].c_str()),
htoi(results[8].c_str()));


if (results.size() >= 11)
{
for (int i = 9; i < results.size(); i += 2)
{
len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
htoi(results.c_str()),
atoi(results[i+1].c_str()));
isAttr = true;
}
}


if (isAttr)
//"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
else
snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());


return Py_BuildValue("s", buf);
}
}


return Py_BuildValue("s", "");
}


değiştir.




///////////////////////////////////////////////////////////////////


pythonplayermodule.cpp


PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)


arat


///////////////////////////


PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
{
TItemPos Cell;


switch (PyTuple_Size(poArgs))
{
case 1:
if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
return Py_BuildException();
break;
case 2:
if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
return Py_BuildException();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BuildException();
break;
default:
return Py_BuildException();
}
const TItemData * pPlayerItem = CPythonPlayer::Instance().GetItemData(Cell);
CItemData * pItemData = NULL;
char buf[1024];


if (pPlayerItem && CItemManager::Instance().GetItemDataPointer(pPlayerItem->vnum, &pItemData))
{
char itemlink[256];
int len;
bool isAttr = false;


len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x:%x:%x:%x",
pPlayerItem->vnum, pPlayerItem->flags,
pPlayerItem->alSockets[0], pPlayerItem->alSockets[1], pPlayerItem->alSockets[2] , pPlayerItem->alSockets[3], pPlayerItem->alSockets[4], pPlayerItem->alSockets[5]);


for (int i = 0; i < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++i)
if (pPlayerItem->aAttr.bType != 0)
{
len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
pPlayerItem->aAttr.bType, pPlayerItem->aAttr.sValue);
isAttr = true;
}




if( GetDefaultCodePage() == CP_ARABIC ) {
if (isAttr)
//"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
else
snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
} else {
if (isAttr)
//"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
else
snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
}
}
else
buf[0] = '\0';


return Py_BuildValue("s", buf);
}






değiştir.

Keyifli Forumlar...



konu için teşekkürler sourcesi olan arkadaşlar için iş görür bir konu :) eline sağlık yabancı sitelerde görmüştüm bu bugların giderimlerini felan foruma kazandırdığın için teşekkürler :)
 
konu için teşekkürler sourcesi olan arkadaşlar için iş görür bir konu :) eline sağlık yabancı sitelerde görmüştüm bu bugların giderimlerini felan foruma kazandırdığın için teşekkürler :)
Rica ederim :) socket arttırmak biraz mantık işi c++ mysql felan hata yapmicaksın yaptığın hatalarda olabilecek şeyler
item yansıtmama
depoya koyduğun zaman item ya kaybolur yada taşı silinir
depoya hiç item koyulmama
envanterden item kaybolma felan sorunlar getirebilir
o yüzden yapın build edin deneyin eğer sorun varsa ki olacağını sanmıyorum ona göre çözeriz sıkıntı yok :)
 

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

Geri
Üst