MariaDb için
cache.cpp içerisine
#i#includesstream>
#i#includefmt/fmt.h> ekle
fonksiyonunu kendine göre düzenle
sonra
ClientManager.cpp içerisinde
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
arat
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData):
Kendinize göre düzenleyinn....
fmt kütüphanesini martysama dan alabilirsiniz.. o uzun uzun %ld %d gibi yazmak yerine artık socket1{} içerisine almış oldu işlemler fmt formatında daha hızlı ve dinamik olur
Kütüphaneyi extern/include kütüphanesine atmayı unutmayın
cache.cpp içerisine
#i#includesstream>
#i#includefmt/fmt.h> ekle
void CItemCache::OnFlush()Onflush:
void CItemCache::OnFlush()
{
if (m_data.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
{
TPlayerItem *p = &m_data;
const auto setQuery = fmt::format(FMT_COMPILE("id={}, owner_id={}, `window`={}, pos={}, count={}, vnum={}, transmutation={}, socket0={}, socket1={}, socket2={}, "
"attrtype0={}, attrvalue0={}, "
"attrtype1={}, attrvalue1={}, "
"attrtype2={}, attrvalue2={}, "
"attrtype3={}, attrvalue3={}, "
"attrtype4={}, attrvalue4={}, "
"attrtype5={}, attrvalue5={}, "
"attrtype6={}, attrvalue6={}, "
"`refine_element_apply_type`={}"
", `refine_element_grade`={}"
", `refine_element_value0`={}, `refine_element_value1`={}, `refine_element_value2`={}"
", `refine_element_bonus_value0`={}, `refine_element_bonus_value1`={}, `refine_element_bonus_value2`={}"
)
, p->id,
p->owner,
p->window,
p->pos,
p->count,
p->vnum,
p->dwTransmutationVnum,
p->alSockets[0],
p->alSockets[1],
p->alSockets[2],
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,
p->RefineElement.wApplyType
, p->RefineElement.bGrade
, p->RefineElement.abValue[0], p->RefineElement.abValue[1], p->RefineElement.abValue[2]
, p->RefineElement.abBonusValue[0], p->RefineElement.abBonusValue[1], p->RefineElement.abBonusValue[2]
);
const auto itemQuery = fmt::format(FMT_COMPILE("INSERT INTO item{} SET {} ON DUPLICATE KEY UPDATE {}"),
GetTablePostfix(), setQuery, setQuery);
if (g_test_server)
sys_log(0, "ItemCache::Flush :REPLACE (%s)", itemQuery.c_str());
CDBManager::instance().ReturnQuery(itemQuery.c_str(), QID_ITEM_SAVE, 0, NULL);
++g_item_count;
}
m_bNeedQuery = false;
}
fonksiyonunu kendine göre düzenle
sonra
ClientManager.cpp içerisinde
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
arat
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData):
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
{
TPlayerItem * p = (TPlayerItem *) c_pData;
if (p->window == SAFEBOX || p->window == MALL)
{
CItemCache * c = GetItemCache(p->id);
if (c)
{
TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner);
if (it != m_map_pkItemCacheSetPtr.end())
{
if (g_test_server)
sys_log(0, "ITEM_CACHE: safebox owner %u id %u", c->Get()->owner, c->Get()->id);
it->second->erase(c);
}
m_map_itemCache.erase(p->id);
delete c;
}
const auto setQuery = fmt::format(FMT_COMPILE("id={}, owner_id={}, `window`={}, pos={}, count={}, vnum={}, transmutation={}, socket0={}, socket1={}, socket2={}, "
"attrtype0={}, attrvalue0={}, "
"attrtype1={}, attrvalue1={}, "
"attrtype2={}, attrvalue2={}, "
"attrtype3={}, attrvalue3={}, "
"attrtype4={}, attrvalue4={}, "
"attrtype5={}, attrvalue5={}, "
"attrtype6={}, attrvalue6={} "
)
, p->id,
p->owner,
p->window,
p->pos,
p->count,
p->vnum,
p->alSockets[0],
p->alSockets[1],
p->alSockets[2],
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
);
const auto itemQuery = fmt::format(FMT_COMPILE("INSERT INTO item{} SET {} ON DUPLICATE KEY UPDATE {}"),
GetTablePostfix(), setQuery, setQuery);
if (g_test_server)
sys_log(0, "QUERY_ITEM_SAVE :REPLACE (%s)", itemQuery.c_str());
CDBManager::instance().ReturnQuery(itemQuery.c_str(), QID_ITEM_SAVE, pkPeer->GetHandle(), NULL);
}
else
{
if (g_test_server)
sys_log(0, "QUERY_ITEM_SAVE => PutItemCache() owner %d id %d vnum %d ", p->owner, p->id, p->vnum);
PutItemCache(p);
}
}
Kendinize göre düzenleyinn....
fmt kütüphanesini martysama dan alabilirsiniz.. o uzun uzun %ld %d gibi yazmak yerine artık socket1{} içerisine almış oldu işlemler fmt formatında daha hızlı ve dinamik olur
Kütüphaneyi extern/include kütüphanesine atmayı unutmayın


