- Mesaj
- 1.241
- Çözümler
- 81
- Beğeni
- 677
- Puan
- 1.109
- Ticaret Puanı
- 0
Selamlar arkadaşlar pazar sistemindeki süre limitini kaldırdım sorun yok pazar süresiz açılıyor fakat şu kısımdaki mantığı çözemedim. UNIX_TIMESTAMP(date_close), kısmı sql tablosuna pazarın ne kadar süresinin kaldığının bilgisini almaya yarıyor kodların devamında da insert kısmında yine "shop_id, owner_id, owner_name, map_index, x, y, z, race, count, name" şeklinde devam ediyor ama date_close kısmını oradan kaldırdığım için sql tablosuna değer girmiyor varsayılan 0 değeri var. Soruna gelecek olursak arkadaşlar " auto pMsg(DBManager::instance().DirectQuery("SELECT shop_id, owner_id, owner_name, map_index, x, y, z, UNIX_TIMESTAMP(date_close), race, count, name FROM" bu kısımdaki UNIX_TIMESTAMP(date_close), bu kısımı sildiğimde pazarlar oyunda gözükmüyor pazar açık ama fiziki olarak haritada yok. Sonrasında bu kod bloğundaki şu kısımı;
Buradaki row değerleri 4 5 6 vs diye gidiyor buradaki dwRace değerini 8'den 7 yaptığımda oyunda pazarlar geliyor ama bu defada pazarların isimleri gözükmüyor. Buradaki mantığı anlamadım gitti bu row değerlerini 1 2 3 4 5 6 7 8 vs diye sıralayarak da yaptım ama sonuç yine pazarlar gözükmüyor dwRace 7 yaptığımda yine pazarlar geliyor isimleri gözükmüyor. Sql tablosundaki sıralama şu şekilde. Şuan date_close tabloda var ama sourceden date_close kaldırdığımda bu tablodanda kaldırıyorum.
C++:
uint32_t dwShopVid = 0, dwPlayerId = 0, dwRace = 0;
int32_t map_index = 0, x = 0, y = 0, z = 0;
uint8_t bItemCount = 0;
str_to_number(dwShopVid, row[0]);
str_to_number(dwPlayerId, row[1]);
str_to_number(map_index, row[3]);
str_to_number(x, row[4]);
str_to_number(y, row[5]);
str_to_number(z, row[6]);
str_to_number(dwRace, row[8]);
str_to_number(bItemCount, row[9]);
LPSECTREE sectree = SECTREE_MANAGER::instance().Get(map_index, x, y);
Buradaki row değerleri 4 5 6 vs diye gidiyor buradaki dwRace değerini 8'den 7 yaptığımda oyunda pazarlar geliyor ama bu defada pazarların isimleri gözükmüyor. Buradaki mantığı anlamadım gitti bu row değerlerini 1 2 3 4 5 6 7 8 vs diye sıralayarak da yaptım ama sonuç yine pazarlar gözükmüyor dwRace 7 yaptığımda yine pazarlar geliyor isimleri gözükmüyor. Sql tablosundaki sıralama şu şekilde. Şuan date_close tabloda var ama sourceden date_close kaldırdığımda bu tablodanda kaldırıyorum.
C++:
void CShopManager::BuildPremiumPrivateShop()
{
auto pMsg(DBManager::instance().DirectQuery("SELECT shop_id, owner_id, owner_name, map_index, x, y, z, UNIX_TIMESTAMP(date_close), race, count, name FROM player.player_shop WHERE status = 1"));
SQLResult * pRes = pMsg->Get();
MYSQL_ROW row;
if (!pRes || !pRes->uiNumRows)
{
return;
}
while ((row = mysql_fetch_row(pRes->pSQLResult)))
{
uint32_t dwShopVid = 0, dwPlayerId = 0, dwRace = 0;
int32_t map_index = 0, x = 0, y = 0, z = 0;
uint8_t bItemCount = 0;
str_to_number(dwShopVid, row[0]);
str_to_number(dwPlayerId, row[1]);
str_to_number(map_index, row[3]);
str_to_number(x, row[4]);
str_to_number(y, row[5]);
str_to_number(z, row[6]);
str_to_number(dwRace, row[8]);
str_to_number(bItemCount, row[9]);
LPSECTREE sectree = SECTREE_MANAGER::instance().Get(map_index, x, y);
if (!sectree)
{
sys_log(0, "cannot find sectree by %dx%d mapindex %d", x, y, map_index);
return;
}
LPSHOP pkShop = NULL;
char queryStr[1024];
snprintf(queryStr, sizeof(queryStr),
"SELECT id, owner_id, `window`+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,price,shop_id "
"FROM player.item WHERE shop_id=%u", dwShopVid);
auto pMsg2(DBManager::instance().DirectQuery(queryStr));
SQLResult * pRes2 = pMsg2->Get();
if (pRes2->uiNumRows > 0)
{
pkShop = M2_NEW CShop;
pkShop->SetPremiumPrivateShop(true);
static std::vector<TPlayerItem> s_items;
CreateItemTableFromRes(pRes2->pSQLResult, &s_items);
for (uint32_t i = 0; i < s_items.size(); ++i)
{
TPlayerItem & p = s_items.at(i);
LPITEM item = ITEM_MANAGER::instance().CreateItem(p.vnum, p.count, p.id);
if (!item)
{
sys_err("cannot create item by vnum %u id %u", p.vnum, p.id);
continue;
}
item->SetSkipSave(true);
item->SetOwnerPID(p.owner);
item->SetOwnerName(row[2]);
item->SetCell(nullptr, p.pos);
item->SetSockets(p.alSockets);
item->SetAttributes(p.aAttr);
item->SetPremiumPrivateShopVid(p.shop_id);
item->SetPremiumPrivateShopPrice(p.price);
item->SetSkipSave(false);
if (!p.owner && !p.pos)
{
item->SetOwnerPID(dwPlayerId);
}
pkShop->SetPremiumPrivateShopItem(item);
}
}
else
{
auto pMsg(DBManager::instance().DirectQuery("UPDATE player.player_shop SET status = 0 WHERE shop_id = %d and owner_id = %d", dwShopVid, dwPlayerId));
if(pMsg->Get()->uiAffectedRows == 0)
{
sys_err("Update Fail Build Premium Private Shop");
return;
}
}
if(pkShop)
{
LPOFFSHOP pkPremiumPrivateShop = M2_NEW CPremiumPrivateShop(pkShop, dwRace);
if(!pkPremiumPrivateShop)
{
sys_err("Fail to create Build Premium Private Shop: %d", dwShopVid);
return;
}
pkPremiumPrivateShop->SetMapIndex(map_index);
pkPremiumPrivateShop->SetXYZ(x, y, z);
pkPremiumPrivateShop->SetOwnerName(row[2]);
pkPremiumPrivateShop->SetSign(row[10]);
pkPremiumPrivateShop->SetPlayerID(dwPlayerId);
sectree->InsertEntity(pkPremiumPrivateShop);
pkPremiumPrivateShop->UpdateSectree();
pkPremiumPrivateShop->SetShopVid(dwShopVid);
m_map_pkPrivateOfflineShop.insert(TOfflinePrivateShopMap::value_type(pkPremiumPrivateShop->GetShopVid(), pkPremiumPrivateShop));
}
}
}
Son düzenleme: