Hikayeler

Reklam vermek için turkmmo@gmail.com

Nesne market sistemi

ULTRASLAN()uA

Level 3
Telefon Numarası Onaylanmış Üye
TM Üye
Üye
Katılım
17 May 2012
Konular
37
Mesajlar
219
Online süresi
2ay 3g
Reaksiyon Skoru
61
Altın Konu
0
Başarım Puanı
126
TM Yaşı
13 Yıl 11 Ay 10 Gün
MmoLira
1,215
DevLira
15

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

Forumda bulunan Metin2Bayi nin filesinde olan nesne market sistemini söktüm. Sorunsuz çalışıyor fakat ndsne marketteki itemlerin üstüne geldiğimde herhangi bir tooltip açılmıyor pack tarafında definesiz eklendiği için tooltip tarafını bulamadım birde nesne market açıkken masaüstüne gelip telrar oyuna döndüğümde esc ile nesne market kapanmıyor yardımcı olabilecek var mı
 
0702 15:46:43486 :: Unknown Server Command Aranan esya bulunamadi. | Aranan

böyle diyor
#i#ifdefTEM_SHOP
using namespace std;
#i#includesstream>
#d#defineOCKET_START_IDX 5 //on mysql table.
#d#defineAX_SOCKET 4 //on mysql table.
#d#defineAX_ATTRIBUTE 7
#d#defineTTRIBUTE_START_IDX (SOCKET_START_IDX + MAX_SOCKET)
#d#defineET_TO_INVENTORY
#d#defineOUNT_ROW_IDX 25
#d#defineIME_TYPE_ROW_IDX 24
#d#defineOCKETIDX_ROW_IDX 23
string replaceAll(string str, const string& from, const string& to)
{
size_t start_pos = 0;
while ((start_pos = str.find(from, start_pos)) != string::npos) {
str.replace(start_pos, from.length(), to);
start_pos += to.length();
}
return str;
}
bool checkString(const char* szText) {
string checkWords[6] = { "truncate", "delete", "%", "from", "*", "'" };
string checkStr = static_cast<std::string>(szText);
//std::transform(checkStr.begin(), checkStr.end(), checkStr.begin(), tolower);
stl_lowers(checkStr);
for (BYTE q = 0; q < _countof(checkWords); q++) {
if (checkStr.find(checkWords[q]) != std::string::npos)
return false;
}
return true;
}
void CInputMain::ItemShop(LPCHARACTER ch, const char* c_pData)
{
if (!ch->GetDesc()) { return; }
TCGItemShopProcess* p = (TCGItemShopProcess*)c_pData;
switch (p->bSubHeader)
{
case ITEMSHOP_PROCESS_REFRESH: {
if (quest::CQuestManager::instance().GetEventFlag("itemshop_deactive") == 1 && !ch->IsGM()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Nesne market aktif degil.");
return;
}
if ((string)p->szCategoryStr == "_CashYenile_") {
ch->ChatPacket(CHAT_TYPE_COMMAND, "RefreshMyCash %d %d", ch->GetCoins(), ch->GetVoteCoins());
return;
}
if ((string)p->szCategoryStr != "_GirisYenile_") { goto ItemQuery; }
{ //Kategori Refresh
memset(&p->szCategoryStr, 0, sizeof(p->szCategoryStr));
char szQuery[2048];
snprintf(szQuery, sizeof(szQuery), "SELECT * FROM player.itemshop_category ORDER BY cat_main_id DESC, cat_id ASC");

unique_ptr<SQLMsg> pMsg(DBManager::Instance().DirectQuery(szQuery));
if (pMsg->Get()->uiNumRows == 0) {
//if (ch->IsDeveloper()) { ch->ChatPacket(1, "<dbg> Nesne markette kategori bulunamadi."); }
return;
}
else {
uint16_t iLine = 0;
MYSQL_ROW mRow;

vector<TGCIShopCategory> vec_iCategory;
while (NULL != (mRow = mysql_fetch_row(pMsg->Get()->pSQLResult)))
{
TGCIShopCategory isCat;
BYTE iCur = 0;
str_to_number(isCat.catID, mRow[iCur++]);
strlcpy(isCat.categoryName, mRow[iCur++], sizeof(isCat.categoryName));
str_to_number(isCat.mainID, mRow[iCur++]);

vec_iCategory.push_back(isCat);
}
TCGItemShopSize gPacket;
gPacket.bHeader = HEADER_GC_ITEMSHOP_CATEGORY;
gPacket.dataSize = sizeof(gPacket) + sizeof(TGCIShopCategory) * vec_iCategory.size();

ch->GetDesc()->BufferedPacket(&gPacket, sizeof(gPacket));
ch->GetDesc()->Packet(&vec_iCategory[0], sizeof(TGCIShopCategory) * vec_iCategory.size());
//if (ch->IsDeveloper()) { ch->ChatPacket(1, "<dbg> Category packet has been sended. Category size: %d", vec_iCategory.size()); }
ch->ChatPacket(CHAT_TYPE_COMMAND, "RefreshMyCash %d %d", ch->GetCoins(), ch->GetVoteCoins());
}
}

ItemQuery:;
{ //Item Refresh
char szQuery2[2048];
snprintf(szQuery2, sizeof(szQuery2), "SELECT * FROM player.itemshop_item");

bool isFilteredByPlayer = false;

const bool hasCategoryStr = strlen(p->szCategoryStr) > 0;
if (hasCategoryStr) {
if (!checkString(p->szCategoryStr)) {
ch->ChatPacket(CHAT_TYPE_INFO, "Kaybol lan oyundan!");
if (ch->GetDesc())
ch->GetDesc()->DelayedDisconnect(3);
return;
}
}

if (p->withQuery) {
if (hasCategoryStr) {
string newStr = "itemshop_item.category_id = ";
newStr += replaceAll(p->szCategoryStr, "|", " OR itemshop_item.category_id = ");
snprintf(szQuery2, sizeof(szQuery2), "%s WHERE %s", szQuery2, newStr.c_str());
isFilteredByPlayer = true;
}
}
else {
if (hasCategoryStr) {
ostringstream sqlStr;
sqlStr << "SELECT * FROM player.itemshop_item WHERE itemshop_item.item_name LIKE '%%" << p->szCategoryStr << "%%'";
string str = sqlStr.str();
snprintf(szQuery2, sizeof(szQuery2), "%s", sqlStr.str().c_str());
isFilteredByPlayer = true;
}
}

if (!isFilteredByPlayer)
snprintf(szQuery2, sizeof(szQuery2), "%s WHERE itemshop_item.status = 1 ORDER BY itemshop_item.sell_count DESC LIMIT 0, 100;", szQuery2);
else
snprintf(szQuery2, sizeof(szQuery2), "%s AND itemshop_item.status = 1;", szQuery2);

if (ch->IsGM()) { ch->ChatPacket(1, "qRy: [%s]", szQuery2); }
std::unique_ptr<SQLMsg> pMsg_Item(DBManager::Instance().DirectQuery(szQuery2));
if (pMsg_Item->Get()->uiNumRows == 0) {
ch->ChatPacket(CHAT_TYPE_COMMAND, "Aranan esya bulunamadi.");
return;
}
else {
uint16_t iLine = 0;
MYSQL_ROW mRow;

std::vector<TGCIShopItem> vec_iItem;
while (NULL != (mRow = mysql_fetch_row(pMsg_Item->Get()->pSQLResult)))
{
TGCIShopItem isItem;
BYTE priceType;
str_to_number(priceType, mRow[COUNT_ROW_IDX + 1]);
bool isVoteCoins = false;
BYTE iCur = 0;
str_to_number(isItem.iID, mRow[iCur++]);
str_to_number(isItem.iVnum, mRow[iCur++]);
iCur++; //
str_to_number(isItem.iPrice, mRow[iCur++]);
str_to_number(isItem.categoryID, mRow[iCur++]);

for (BYTE i = 0; i < MAX_SOCKET; i++) {
str_to_number(isItem.alSockets, mRow[iCur++]);
}
for (BYTE j = 0; j < MAX_ATTRIBUTE; j++) {
str_to_number(isItem.aAttr[j].bType, mRow[iCur++]);
str_to_number(isItem.aAttr[j].sValue, mRow[iCur++]);
}
iCur++; //time_socket
iCur++; //time_type
isItem.isVoteCoins = priceType == 1;
str_to_number(isItem.iCount, mRow[COUNT_ROW_IDX]);
vec_iItem.push_back(isItem);
}
TCGItemShopSize gPacket;
gPacket.bHeader = HEADER_GC_ITEMSHOP_ITEM;
gPacket.dataSize = sizeof(gPacket) + sizeof(TGCIShopItem) * vec_iItem.size();

ch->GetDesc()->BufferedPacket(&gPacket, sizeof(gPacket));
ch->GetDesc()->Packet(&vec_iItem[0], sizeof(TGCIShopItem) * vec_iItem.size());

//ch->ChatPacket(1, "<dbg> Item packet has been sended. Category size: %d", vec_iItem.size());
}
}
break;
}
case ITEMSHOP_PROCESS_BUY: {
if (quest::CQuestManager::instance().GetEventFlag("itemshop_deactive") == 1 && !ch->IsGM()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Nesne market aktif degil.");
//ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowNotify 14");
return;
}
if (!p->itemID) { sys_err("abnormal!!! ITEMSHOP_PROCESS_BUY > [%s] p->itemID was null, returned.", ch->GetName()); return; }
if (!p->itemCount) { sys_err("abnormal!!! ITEMSHOP_PROCESS_BUY > [%s] p->itemCount was null, returned.", ch->GetName()); return; }
if (ch->GetDesc()->GetAccountTable().id == 0) { sys_err("abnormal!!! ITEMSHOP_PROCESS_BUY > [%s] account ID = 0.", ch->GetName()); return; }

char szQuery[248];
snprintf(szQuery, sizeof(szQuery), "SELECT * FROM player.itemshop_item WHERE id = %u AND status = 1 LIMIT 0,1;", p->itemID);
std::unique_ptr<SQLMsg> pMsg_Item(DBManager::Instance().DirectQuery(szQuery));
if (pMsg_Item->Get()->uiNumRows == 0) {
ch->ChatPacket(1, "Nesne markette aranan item bulunamadi.");
//ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowNotify 13");
return;
}
MYSQL_ROW mRow = mysql_fetch_row(pMsg_Item->Get()->pSQLResult);
DWORD itemPrice = 0;
str_to_number(itemPrice, mRow[3]);
BYTE priceType = 0;
str_to_number(priceType, mRow[26]);
bool isVC = priceType == 1;

DWORD myCoins = isVC ? ch->GetCheque() : ch->GetCoins();

if (myCoins < itemPrice * p->itemCount) {
ch->ChatPacket(1, "Yeterli %s %d > %d yok.", (isVC ? "Won" : "EP"), itemPrice, myCoins);
//ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowNotify 12");
return;
}

DWORD iSockets[MAX_SOCKET];
for (BYTE q = 0; q < MAX_SOCKET; q++) {
iSockets[q] = atoi(mRow[SOCKET_START_IDX + q]);
}
/*****Sockets*****/
const BYTE timeType = atoi(mRow[TIME_TYPE_ROW_IDX]);
const bool hasTime = (timeType >= LIMIT_REAL_TIME && timeType <= LIMIT_TIMER_BASED_ON_WEAR);
if (hasTime) {
const BYTE iSocketIdx = atoi(mRow[SOCKETIDX_ROW_IDX]);
const bool isRealTime = (timeType == LIMIT_REAL_TIME || timeType == LIMIT_TIMER_BASED_ON_WEAR);
if (iSocketIdx >= MAX_SOCKET) { goto End; }

iSockets[iSocketIdx] = isRealTime ? time(0) + atoi(mRow[SOCKET_START_IDX + iSocketIdx]) : atoi(mRow[SOCKET_START_IDX + iSocketIdx]);
}
/*****Sockets*****/
End:;
const DWORD itemVnum = atoi(mRow[1]);
const int itemCount = atoi(mRow[COUNT_ROW_IDX]);
const TItemTable* pTable = ITEM_MANAGER::instance().GetTable(itemVnum);
if (!pTable) {
ch->ChatPacket(1, "Veri hatasi.");
return;
}
BYTE iCount = 0;
int iWindowType = -1, iCell = -1;
for (BYTE i = 0; i < p->itemCount; i++) {
LPITEM item = ITEM_MANAGER::instance().CreateItem(itemVnum, itemCount);
if (!item) {
sys_err("cannot create item vnum %d", itemVnum);
continue;
}
else
{
iCell = ch->GetEmptyInventory(pTable->bSize);
iWindowType = INVENTORY;
}

if (iCell == -1)
{
ch->ChatPacket(1, "Envanterde yeterli bosluk yok.");
//ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowNotify 10");
return;
}

for (BYTE q = 0; q < MAX_SOCKET; q++) {
item->SetSocket(q, iSockets[q]);
}
BYTE attrCounter = ATTRIBUTE_START_IDX;
for (BYTE w = 0; w < MAX_ATTRIBUTE; w++) {
item->SetForceAttribute(w, atoi(mRow[attrCounter]), atoi(mRow[attrCounter + 1]));
attrCounter += 2;
}
item->AddToCharacter(ch, TItemPos(iWindowType, iCell));
std::unique_ptr<SQLMsg> sqlLog(DBManager::instance().DirectQuery("INSERT INTO log.itemshop_log(item_vnum, player_pid, player_name, item_price, buy_date) VALUES(%d, %d, '%s', %d, NOW())", itemVnum, ch->GetPlayerID(), ch->GetName(), itemPrice));
std::unique_ptr<SQLMsg> sqlUpdate(DBManager::instance().DirectQuery("UPDATE player.itemshop_item SET sell_count = sell_count + 1 WHERE id = %u", p->itemID));

if (isVC) {
/*if (ch->UpdateVoteCoins(ch->GetDesc()->GetAccountTable().id, -itemPrice)) {
ch->ChatPacket(CHAT_TYPE_COMMAND, "RefreshMyCash %d %d", ch->GetCoins(), ch->GetVoteCoins());
iCount++;
}
else {
M2_DESTROY_ITEM(item);
}*/
ch->PointChange(POINT_CHEQUE, -itemPrice, false);
}
else {
if (itemPrice > 0) { //hotFix 03.04.2021
if (ch->UpdateCoins(ch->GetDesc()->GetAccountTable().id, -itemPrice)) {
ch->ChatPacket(CHAT_TYPE_COMMAND, "RefreshMyCash %d %d", ch->GetCoins(), ch->GetVoteCoins());
iCount++;
}
else {
M2_DESTROY_ITEM(item);
}
}
}
}
//ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowNotify 11");
ch->ChatPacket(1, "Esya basariyla satin alindi.");
}
}
}
#e#endif
kodta yukarda attığım
Ekli dosyayı görüntüle 148352

böyle şeyler çıkıyor oyun içerisinde vsvs


Bu filesi paylaşan zaten benim böyle şeyler yazıyordu ama bi sorun yoktu markette galiba öyle hatırlıyorum
 
Bu filesi paylaşan zaten benim böyle şeyler yazıyordu ama bi sorun yoktu markette galiba öyle hatırlıyorum
Doğrudur hocam bir hata mı acaba yoksa kontrol amaçlı mı eklenmiş anlamadım sorayım dedim şu tooltip ile esc kısmını çözemezsem mecbur kaldıracağım mcyk dakini deneyeceğim
 

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

Geri
Üst