Bu arada mariadb geçince log.cpp içerisindeki REPLACE INTO yazan yerleri INSERT INTO ile değiştirin yoksa game içerisinde hiçbir logu kaydetmez sürekli failed replcae into log command log gibi yazılar çıkar
Bilgi İşlem Alanının İhtiyaçları: - db Cache ve Clientmager fmt format çevirelim ve işlemler daha kolay olsun
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:39
#24
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilirolabilir göz atmadım ama ben sadece item.sql için gördüm ve sorun yoktu hızlı kayıt yapıyordu başka yerler içinde olabilir mesela offline shop için veyada mail box yada ne ekli ise BABA sql ler için yapılırsa daha iyi olur
Üye
Katılım18 Mar 2026
Konular7
Mesajlar54
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:39
#25
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilirN2play spdlog kullanıyor bu yüzden onlar fmtye spdlog üzerinden erişiyor. Spdlog ise log yazma işleri için fmtyi kullanıyor
Ayrıca fmt kullanmak isteyenler 10.x öncesi sürümleri kullanmalı yoksa FMT_COMPILE kullanımında hata ile karşılaşır. Ek olarak ise FMT_COMPILE gibi derleme zamanı macrosu kullanmak isterseniz ve hızlı derleme olsun gecikme yaşanmasın istiyorsanız statik olarak fmt libini kullanmalısınız.
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:39
#26
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
Üye
Katılım13 Ara 2025
Konular6
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:39
#27
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilir
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:39
#28
Bu arada mariadb geçince log.cpp içerisindeki REPLACE INTO yazan yerleri INSERT INTO ile değiştirin yoksa game içerisinde hiçbir logu kaydetmez sürekli failed replcae into log command log gibi yazılar çıkar
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:39
#29
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilirolabilir göz atmadım ama ben sadece item.sql için gördüm ve sorun yoktu hızlı kayıt yapıyordu başka yerler içinde olabilir mesela offline shop için veyada mail box yada ne ekli ise BABA sql ler için yapılırsa daha iyi olur
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
9 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme


