|
You last visited: Today at 07:48
Advertisement
40K DB
Discussion on 40K DB within the Metin2 Private Server forum part of the Metin2 category.
05/27/2014, 23:00
|
#1
|
elite*gold: 0
Join Date: May 2009
Posts: 533
Received Thanks: 464
|
40K DB
Hey leute
Besteht die Möglichkeit das die Datenbank nicht immer aus der Mob_proto.txt. und item_proto.txt liest sondern einfach nur aus der Datenbank wie bei der 28k Game?
|
|
|
05/27/2014, 23:39
|
#2
|
elite*gold: 315
Join Date: Jun 2012
Posts: 5,158
Received Thanks: 4,813
|
ja die möglichkeit gibt es.
öffne ClientManagerBoot.cpp und such nach:
CClientManager::InitializeItemTable
und ändere das:
PHP Code:
bool CClientManager::InitializeItemTable() { //================== ÇÔ¼ö ¼³¸í ==================// //1. ¿ä¾à : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' ÆÄÀÏÀ» Àаí, // <item_table>(TItemTable), <m_map_itemTableByVnum> ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÑ´Ù. //2. ¼ø¼* // 1) 'item_names.txt' ÆÄÀÏÀ» Àоî¼* (a)[localMap](vnum:name) ¸ÊÀ» ¸¸µç´Ù. // 2) 'item_proto_text.txt'ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (b)[test_map_itemTableByVnum](vnum:TItemTable) ¸ÊÀ» »ý¼ºÇÑ´Ù. // 3) 'item_proto.txt' ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (!)[item_table], <m_map_itemTableByVnum>À» ¸¸µç´Ù. // <Âü°í> // °¢ row µé Áß, // (b)[test_map_itemTableByVnum],(!)[mob_table] ¸ðµÎ¿¡ ÀÖ´Â row´Â // (b)[test_map_itemTableByVnum]ÀÇ °ÍÀ» »ç¿ëÇÑ´Ù. // 4) (b)[test_map_itemTableByVnum]ÀÇ rowÁß, (!)[item_table]¿¡ ¾ø´Â °ÍÀ» Ãß°¡ÇÑ´Ù. //3. Å×½ºÆ® // 1)'item_proto.txt' Á¤º¸°¡ item_table¿¡ Àß µé¾î°¬´ÂÁö. -> ¿Ï·á // 2)'item_names.txt' Á¤º¸°¡ item_table¿¡ Àß µé¾î°¬´ÂÁö. // 3)'item_proto_test.txt' ¿¡¼* [°ãÄ¡´Â] Á¤º¸°¡ item_table ¿¡ Àß µé¾î°¬´ÂÁö. // 4)'item_proto_test.txt' ¿¡¼* [»õ·Î¿î] Á¤º¸°¡ item_table ¿¡ Àß µé¾î°¬´ÂÁö. // 5) (ÃÖÁ¾) °ÔÀÓ Å¬¶óÀ̾ðÆ®¿¡¼* Á¦´ë·Î ÀÛµ¿ ÇÏ´ÂÁö. //_______________________________________________// //=================================================================================// // 1) 'item_names.txt' ÆÄÀÏÀ» Àоî¼* (a)[localMap](vnum:name) ¸ÊÀ» ¸¸µç´Ù. //=================================================================================// bool isNameFile = true; map<int,const char*> localMap; cCsvTable nameData; if(!nameData.Load("item_names.txt",'\t')) { fprintf(stderr, "item_names.txt was loaded successfully.\n"); isNameFile = false; } else { nameData.Next(); while(nameData.Next()) { localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1); } } //_________________________________________________________________// //=================================================================// // 2) 'item_proto_text.txt'ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (b)[test_map_itemTableByVnum](vnum:TItemTable) ¸ÊÀ» »ý¼ºÇÑ´Ù. //=================================================================// map<DWORD, TItemTable *> test_map_itemTableByVnum; //1. ÆÄÀÏ Àоî¿À±â. cCsvTable test_data; if(!test_data.Load("item_proto_test.txt",'\t')) { fprintf(stderr, "item_proto_test.txt was loaded successfully.\n"); //return false; } else { test_data.Next(); //¼³¸í ·Î¿ì ³Ñ¾î°¡±â. //2. Å×½ºÆ® ¾ÆÀÌÅÛ Å×ÀÌºí »ý¼º. TItemTable * test_item_table = NULL; int test_itemTableSize = test_data.m_File.GetRowCount()-1; test_item_table = new TItemTable[test_itemTableSize]; memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize); //3. Å×½ºÆ® ¾ÆÀÌÅÛ Å×ÀÌºí¿¡ °ªÀ» ³Ö°í, ¸Ê¿¡±îÁö ³Ö±â. while(test_data.Next()) { if (!Set_Proto_Item_Table(test_item_table, test_data, localMap)) { fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆà ½ÇÆÐ.\n"); } test_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(test_item_table->dwVnum, test_item_table)); test_item_table++; } } //______________________________________________________________________// //========================================================================// // 3) 'item_proto.txt' ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (!)[item_table], <m_map_itemTableByVnum>À» ¸¸µç´Ù. // <Âü°í> // °¢ row µé Áß, // (b)[test_map_itemTableByVnum],(!)[mob_table] ¸ðµÎ¿¡ ÀÖ´Â row´Â // (b)[test_map_itemTableByVnum]ÀÇ °ÍÀ» »ç¿ëÇÑ´Ù. //========================================================================// //vnumµéÀ» ÀúÀåÇÒ ¼Â. »õ·Î¿î Å×½ºÆ® ¾ÆÀÌÅÛÀ» ÆǺ°ÇÒ¶§ »ç¿ëµÈ´Ù. set<int> vnumSet; //ÆÄÀÏ Àоî¿À±â. cCsvTable data; if(!data.Load("item_proto.txt",'\t')) { fprintf(stderr, "item_proto.txt was loaded successfully.\n"); return false; } data.Next(); //¸Ç À*ÁÙ Á¦¿Ü (¾ÆÀÌÅÛ Ä®·³À» ¼³¸íÇÏ´Â ºÎºÐ) if (!m_vec_itemTable.empty()) { sys_log(0, "RELOAD: item_proto"); m_vec_itemTable.clear(); m_map_itemTableByVnum.clear(); } //===== ¾ÆÀÌÅÛ Å×ÀÌºí »ý¼º =====// //»õ·Î Ãß°¡µÇ´Â °¹¼ö¸¦ ÆľÇÇÑ´Ù. int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); std::map<DWORD, TItemTable *>::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(vnum); if(it_map_itemTable != test_map_itemTableByVnum.end()) { addNumber++; } } //data¸¦ ´Ù½Ã ùÁÙ·Î ¿Å±ä´Ù.(´Ù½Ã Àоî¿Â´Ù;;) data.Destroy(); if(!data.Load("item_proto.txt",'\t')) { fprintf(stderr, "item_proto.txt was loaded successfully.\n"); return false; } data.Next(); //¸Ç À*ÁÙ Á¦¿Ü (¾ÆÀÌÅÛ Ä®·³À» ¼³¸íÇÏ´Â ºÎºÐ) m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber); memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size()); int testValue = m_vec_itemTable.size(); TItemTable * item_table = &m_vec_itemTable[0]; while (data.Next()) { int col = 0; std::map<DWORD, TItemTable *>::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col))); if(it_map_itemTable == test_map_itemTableByVnum.end()) { //°¢ Ä®·³ µ¥ÀÌÅÍ ÀúÀå if (!Set_Proto_Item_Table(item_table, data, localMap)) { fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆà ½ÇÆÐ.\n"); } } else { //$$$$$$$$$$$$$$$$$$$$$$$ Å×½ºÆ® ¾ÆÀÌÅÛ Á¤º¸°¡ ÀÖ´Ù! TItemTable *tempTable = it_map_itemTable->second; item_table->dwVnum = tempTable->dwVnum; strlcpy(item_table->szName, tempTable->szName, sizeof(item_table->szName)); strlcpy(item_table->szLocaleName, tempTable->szLocaleName, sizeof(item_table->szLocaleName)); item_table->bType = tempTable->bType; item_table->bSubType = tempTable->bSubType; item_table->bSize = tempTable->bSize; item_table->dwAntiFlags = tempTable->dwAntiFlags; item_table->dwFlags = tempTable->dwFlags; item_table->dwWearFlags = tempTable->dwWearFlags; item_table->dwImmuneFlag = tempTable->dwImmuneFlag; item_table->dwGold = tempTable->dwGold; item_table->dwShopBuyPrice = tempTable->dwShopBuyPrice; item_table->dwRefinedVnum =tempTable->dwRefinedVnum; item_table->wRefineSet =tempTable->wRefineSet; item_table->bAlterToMagicItemPct = tempTable->bAlterToMagicItemPct; item_table->cLimitRealTimeFirstUseIndex = -1; item_table->cLimitTimerBasedOnWearIndex = -1; int i; for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { item_table->aLimits[i].bType = tempTable->aLimits[i].bType; item_table->aLimits[i].lValue = tempTable->aLimits[i].lValue; if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType) item_table->cLimitRealTimeFirstUseIndex = (char)i; if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType) item_table->cLimitTimerBasedOnWearIndex = (char)i; } for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i) { item_table->aApplies[i].bType = tempTable->aApplies[i].bType; item_table->aApplies[i].lValue = tempTable->aApplies[i].lValue; } for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i) item_table->alValues[i] = tempTable->alValues[i]; item_table->bGainSocketPct = tempTable->bGainSocketPct; item_table->sAddonType = tempTable->sAddonType; item_table->bWeight = tempTable->bWeight; } vnumSet.insert(item_table->dwVnum); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); ++item_table; } //_______________________________________________________________________// //========================================================================// // 4) (b)[test_map_itemTableByVnum]ÀÇ rowÁß, (!)[item_table]¿¡ ¾ø´Â °ÍÀ» Ãß°¡ÇÑ´Ù. //========================================================================// test_data.Destroy(); if(!test_data.Load("item_proto_test.txt",'\t')) { fprintf(stderr, "item_proto_test.txt was loaded successfully.\n"); //return false; } else { test_data.Next(); //¼³¸í ·Î¿ì ³Ñ¾î°¡±â. while (test_data.Next()) //Å×½ºÆ® µ¥ÀÌÅÍ °¢°¢À» ÈȾ°¡¸ç,»õ·Î¿î °ÍÀ» Ãß°¡ÇÑ´Ù. { //Áߺ¹µÇ´Â ºÎºÐÀÌ¸é ³Ñ¾î°£´Ù. set<int>::iterator itVnum; itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0))); if (itVnum != vnumSet.end()) { continue; } if (!Set_Proto_Item_Table(item_table, test_data, localMap)) { fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆà ½ÇÆÐ.\n"); } m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); item_table++; } } // QUEST_ITEM_PROTO_DISABLE // InitializeQuestItemTable(); // END_OF_QUEST_ITEM_PROTO_DISABLE m_map_itemTableByVnum.clear(); itertype(m_vec_itemTable) it = m_vec_itemTable.begin(); while (it != m_vec_itemTable.end()) { TItemTable * item_table = &(*(it++)); sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu REFINE %lu REFINE_SET %u MAGIC_PCT %u", item_table->dwVnum, item_table->szName, item_table->szLocaleName, item_table->alValues[0], item_table->alValues[1], item_table->alValues[2], item_table->alValues[3], item_table->alValues[4], item_table->alValues[5], item_table->dwWearFlags, item_table->dwAntiFlags, item_table->dwImmuneFlag, item_table->dwRefinedVnum, item_table->wRefineSet, item_table->bAlterToMagicItemPct); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); } sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum()); return true; }
in
PHP Code:
bool CClientManager::InitializeItemTable() { std::ostringstream query; query << "SELECT vnum, type, subtype, name, " << g_stLocaleNameColumn << ", gold, shop_buy_price, weight, size, flag, wearflag, antiflag, immuneflag+0, refined_vnum, refine_set, magic_pct, socket_pct, addon_type, limittype0, limitvalue0, limittype1, limitvalue1, applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, value0, value1, value2, value3, value4, value5, socket0, socket1, socket2 FROM item_proto ORDER BY vnum"; SQLMsg* sqlMsg = CDBManager::instance().DirectQuery(query.str().c_str(), 0); if (sqlMsg == nullptr) { sys_err("libdb::InitializeItemTable", __LINE__, "Could not load item_proto. Query failed!"); return false; } MYSQL_RES* pRes = sqlMsg->vec_pkResult[0]->pSQLResult; if (pRes == nullptr) { sys_err("libdb::InitializeItemTable", __LINE__, "Could not load item_proto. No result!"); return 0; } if (!m_vec_itemTable.empty()) { sys_log(__LINE__, " Reloading item_proto"); m_vec_itemTable.clear(); } MYSQL_ROW row; while ((row = mysql_fetch_row(pRes))) { SItemTable temp = {}; if (row[0]&&*row[0]) temp.dwVnum = strtoul(row[0], NULL, 10); if (row[1]&&*row[1]) temp.bType = strtoul(row[1], NULL, 10); if (row[2]&&*row[2]) temp.bSubType = strtoul(row[2], NULL, 10); if (row[3]&&*row[3]) snprintf(temp.szName, 25, "%s", row[3]); if (row[4]&&*row[4]) snprintf(temp.szLocaleName, 25, "%s", row[4]); if (row[5]&&*row[5]) temp.dwGold = strtoul(row[5], NULL, 10); if (row[6]&&*row[6]) temp.dwShopBuyPrice = strtoul(row[6], NULL, 10); if (row[7]&&*row[7]) temp.bWeight = strtoul(row[7], NULL, 10); if (row[8]&&*row[8]) temp.bSize = strtoul(row[8], NULL, 10); if (row[9]&&*row[9]) temp.dwFlags = strtoul(row[9], NULL, 10); if (row[10]&&*row[10]) temp.dwWearFlags = strtoul(row[10], NULL, 10); if (row[11]&&*row[11]) temp.dwAntiFlags = strtoul(row[11], NULL, 10); if (row[12]&&*row[12]) temp.dwImmuneFlag = strtoul(row[12], NULL, 10); if (row[13]&&*row[13]) temp.dwRefinedVnum = strtoul(row[13], NULL, 10); if (row[14]&&*row[14]) temp.wRefineSet = strtoul(row[14], NULL, 10); if (row[15]&&*row[15]) temp.bAlterToMagicItemPct = strtoul(row[15], NULL, 10); if (row[16]&&*row[16]) temp.bGainSocketPct = strtoul(row[16], NULL, 10); if (row[17]&&*row[17]) temp.sAddonType = strtoul(row[17], NULL, 10); if (row[18]&&*row[18]) temp.aLimits[0].bType = strtoul(row[18], NULL, 10); if (row[19]&&*row[19]) temp.aLimits[0].lValue = strtoul(row[19], NULL, 10); if (row[20]&&*row[20]) temp.aLimits[1].bType = strtoul(row[20], NULL, 10); if (row[21]&&*row[21]) temp.aLimits[1].lValue = strtoul(row[21], NULL, 10); if (row[22]&&*row[22]) temp.aApplies[0].bType = strtoul(row[22], NULL, 10); if (row[23]&&*row[23]) temp.aApplies[0].lValue = strtoul(row[23], NULL, 10); if (row[24]&&*row[24]) temp.aApplies[1].bType = strtoul(row[24], NULL, 10); if (row[25]&&*row[25]) temp.aApplies[1].lValue = strtoul(row[25], NULL, 10); if (row[26]&&*row[26]) temp.aApplies[2].bType = strtoul(row[26], NULL, 10); if (row[27]&&*row[27]) temp.aApplies[2].lValue = strtoul(row[27], NULL, 10); if (row[28]&&*row[28]) temp.alValues[0] = strtoul(row[28], NULL, 10); if (row[29]&&*row[29]) temp.alValues[1] = strtoul(row[29], NULL, 10); if (row[30]&&*row[30]) temp.alValues[2] = strtoul(row[30], NULL, 10); if (row[31]&&*row[31]) temp.alValues[3] = strtoul(row[31], NULL, 10); if (row[32]&&*row[32]) temp.alValues[4] = strtoul(row[32], NULL, 10); if (row[33]&&*row[33]) temp.alValues[5] = strtoul(row[33], NULL, 10); temp.cLimitRealTimeFirstUseIndex = -1; temp.cLimitTimerBasedOnWearIndex = -1; for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { if (LIMIT_REAL_TIME_START_FIRST_USE == temp.aLimits[i].bType) temp.cLimitRealTimeFirstUseIndex = (char) i; if (LIMIT_TIMER_BASED_ON_WEAR == temp.aLimits[i].bType) temp.cLimitTimerBasedOnWearIndex = (char) i; } m_vec_itemTable.push_back(temp); } std::cout << "CClientManager::InitializeItemTable:: " << m_vec_itemTable.size() << " items loaded." << std::endl; mysql_free_result(pRes); m_map_itemTableByVnum.clear(); auto it = m_vec_itemTable.begin(); while (it != m_vec_itemTable.end()) { TItemTable * item_table = &(*(it++)); sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu REFINE %lu REFINE_SET %u MAGIC_PCT %u", item_table->dwVnum, item_table->szName, item_table->szLocaleName, item_table->alValues[0], item_table->alValues[1], item_table->alValues[2], item_table->alValues[3], item_table->alValues[4], item_table->alValues[5], item_table->dwWearFlags, item_table->dwAntiFlags, item_table->dwImmuneFlag, item_table->dwRefinedVnum, item_table->wRefineSet, item_table->bAlterToMagicItemPct); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); } sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum()); return true; }
mfg
|
|
|
05/28/2014, 00:14
|
#3
|
elite*gold: 11
Join Date: Nov 2010
Posts: 1,709
Received Thanks: 3,828
|
You can also use Vanilla Core it has this option in CONFIG
|
|
|
05/28/2014, 02:42
|
#4
|
elite*gold: 0
Join Date: Apr 2014
Posts: 186
Received Thanks: 159
|
Quote:
Originally Posted by .Shōgun
You can also use Vanilla Core it has this option in CONFIG
|
he could, but with the source you can work a lot better...
|
|
|
05/28/2014, 03:00
|
#5
|
elite*gold: 11
Join Date: Nov 2010
Posts: 1,709
Received Thanks: 3,828
|
Quote:
Originally Posted by .PsychoMantis™
he could, but with the source you can work a lot better...
|
You think someone who thinks txt proto files are complicated would want to mess with C++?
|
|
|
05/28/2014, 07:14
|
#6
|
elite*gold: 0
Join Date: May 2009
Posts: 533
Received Thanks: 464
|
Quote:
Originally Posted by Lauling
ja die möglichkeit gibt es.
öffne ClientManagerBoot.cpp und such nach:
CClientManager::InitializeItemTable
und ändere das:
PHP Code:
bool CClientManager::InitializeItemTable() { //================== ÇÔ¼ö ¼³¸í ==================// //1. ¿ä¾à : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' ÆÄÀÏÀ» Àаí, // <item_table>(TItemTable), <m_map_itemTableByVnum> ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÑ´Ù. //2. ¼ø¼* // 1) 'item_names.txt' ÆÄÀÏÀ» Àоî¼* (a)[localMap](vnum:name) ¸ÊÀ» ¸¸µç´Ù. // 2) 'item_proto_text.txt'ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (b)[test_map_itemTableByVnum](vnum:TItemTable) ¸ÊÀ» »ý¼ºÇÑ´Ù. // 3) 'item_proto.txt' ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (!)[item_table], <m_map_itemTableByVnum>À» ¸¸µç´Ù. // <Âü°í> // °¢ row µé Áß, // (b)[test_map_itemTableByVnum],(!)[mob_table] ¸ðµÎ¿¡ ÀÖ´Â row´Â // (b)[test_map_itemTableByVnum]ÀÇ °ÍÀ» »ç¿ëÇÑ´Ù. // 4) (b)[test_map_itemTableByVnum]ÀÇ rowÁß, (!)[item_table]¿¡ ¾ø´Â °ÍÀ» Ãß°¡ÇÑ´Ù. //3. Å×½ºÆ® // 1)'item_proto.txt' Á¤º¸°¡ item_table¿¡ Àß µé¾î°¬´ÂÁö. -> ¿Ï·á // 2)'item_names.txt' Á¤º¸°¡ item_table¿¡ Àß µé¾î°¬´ÂÁö. // 3)'item_proto_test.txt' ¿¡¼* [°ãÄ¡´Â] Á¤º¸°¡ item_table ¿¡ Àß µé¾î°¬´ÂÁö. // 4)'item_proto_test.txt' ¿¡¼* [»õ·Î¿î] Á¤º¸°¡ item_table ¿¡ Àß µé¾î°¬´ÂÁö. // 5) (ÃÖÁ¾) °ÔÀÓ Å¬¶óÀ̾ðÆ®¿¡¼* Á¦´ë·Î ÀÛµ¿ ÇÏ´ÂÁö. //_______________________________________________// //=================================================================================// // 1) 'item_names.txt' ÆÄÀÏÀ» Àоî¼* (a)[localMap](vnum:name) ¸ÊÀ» ¸¸µç´Ù. //=================================================================================// bool isNameFile = true; map<int,const char*> localMap; cCsvTable nameData; if(!nameData.Load("item_names.txt",'\t')) { fprintf(stderr, "item_names.txt was loaded successfully.\n"); isNameFile = false; } else { nameData.Next(); while(nameData.Next()) { localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1); } } //_________________________________________________________________// //=================================================================// // 2) 'item_proto_text.txt'ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (b)[test_map_itemTableByVnum](vnum:TItemTable) ¸ÊÀ» »ý¼ºÇÑ´Ù. //=================================================================// map<DWORD, TItemTable *> test_map_itemTableByVnum; //1. ÆÄÀÏ Àоî¿À±â. cCsvTable test_data; if(!test_data.Load("item_proto_test.txt",'\t')) { fprintf(stderr, "item_proto_test.txt was loaded successfully.\n"); //return false; } else { test_data.Next(); //¼³¸í ·Î¿ì ³Ñ¾î°¡±â. //2. Å×½ºÆ® ¾ÆÀÌÅÛ Å×ÀÌºí »ý¼º. TItemTable * test_item_table = NULL; int test_itemTableSize = test_data.m_File.GetRowCount()-1; test_item_table = new TItemTable[test_itemTableSize]; memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize); //3. Å×½ºÆ® ¾ÆÀÌÅÛ Å×ÀÌºí¿¡ °ªÀ» ³Ö°í, ¸Ê¿¡±îÁö ³Ö±â. while(test_data.Next()) { if (!Set_Proto_Item_Table(test_item_table, test_data, localMap)) { fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆà ½ÇÆÐ.\n"); } test_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(test_item_table->dwVnum, test_item_table)); test_item_table++; } } //______________________________________________________________________// //========================================================================// // 3) 'item_proto.txt' ÆÄÀÏ°ú (a)[localMap] ¸ÊÀ¸·Î // (!)[item_table], <m_map_itemTableByVnum>À» ¸¸µç´Ù. // <Âü°í> // °¢ row µé Áß, // (b)[test_map_itemTableByVnum],(!)[mob_table] ¸ðµÎ¿¡ ÀÖ´Â row´Â // (b)[test_map_itemTableByVnum]ÀÇ °ÍÀ» »ç¿ëÇÑ´Ù. //========================================================================// //vnumµéÀ» ÀúÀåÇÒ ¼Â. »õ·Î¿î Å×½ºÆ® ¾ÆÀÌÅÛÀ» ÆǺ°ÇÒ¶§ »ç¿ëµÈ´Ù. set<int> vnumSet; //ÆÄÀÏ Àоî¿À±â. cCsvTable data; if(!data.Load("item_proto.txt",'\t')) { fprintf(stderr, "item_proto.txt was loaded successfully.\n"); return false; } data.Next(); //¸Ç À*ÁÙ Á¦¿Ü (¾ÆÀÌÅÛ Ä®·³À» ¼³¸íÇÏ´Â ºÎºÐ) if (!m_vec_itemTable.empty()) { sys_log(0, "RELOAD: item_proto"); m_vec_itemTable.clear(); m_map_itemTableByVnum.clear(); } //===== ¾ÆÀÌÅÛ Å×ÀÌºí »ý¼º =====// //»õ·Î Ãß°¡µÇ´Â °¹¼ö¸¦ ÆľÇÇÑ´Ù. int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); std::map<DWORD, TItemTable *>::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(vnum); if(it_map_itemTable != test_map_itemTableByVnum.end()) { addNumber++; } } //data¸¦ ´Ù½Ã ùÁÙ·Î ¿Å±ä´Ù.(´Ù½Ã Àоî¿Â´Ù;;) data.Destroy(); if(!data.Load("item_proto.txt",'\t')) { fprintf(stderr, "item_proto.txt was loaded successfully.\n"); return false; } data.Next(); //¸Ç À*ÁÙ Á¦¿Ü (¾ÆÀÌÅÛ Ä®·³À» ¼³¸íÇÏ´Â ºÎºÐ) m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber); memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size()); int testValue = m_vec_itemTable.size(); TItemTable * item_table = &m_vec_itemTable[0]; while (data.Next()) { int col = 0; std::map<DWORD, TItemTable *>::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col))); if(it_map_itemTable == test_map_itemTableByVnum.end()) { //°¢ Ä®·³ µ¥ÀÌÅÍ ÀúÀå if (!Set_Proto_Item_Table(item_table, data, localMap)) { fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆà ½ÇÆÐ.\n"); } } else { //$$$$$$$$$$$$$$$$$$$$$$$ Å×½ºÆ® ¾ÆÀÌÅÛ Á¤º¸°¡ ÀÖ´Ù! TItemTable *tempTable = it_map_itemTable->second; item_table->dwVnum = tempTable->dwVnum; strlcpy(item_table->szName, tempTable->szName, sizeof(item_table->szName)); strlcpy(item_table->szLocaleName, tempTable->szLocaleName, sizeof(item_table->szLocaleName)); item_table->bType = tempTable->bType; item_table->bSubType = tempTable->bSubType; item_table->bSize = tempTable->bSize; item_table->dwAntiFlags = tempTable->dwAntiFlags; item_table->dwFlags = tempTable->dwFlags; item_table->dwWearFlags = tempTable->dwWearFlags; item_table->dwImmuneFlag = tempTable->dwImmuneFlag; item_table->dwGold = tempTable->dwGold; item_table->dwShopBuyPrice = tempTable->dwShopBuyPrice; item_table->dwRefinedVnum =tempTable->dwRefinedVnum; item_table->wRefineSet =tempTable->wRefineSet; item_table->bAlterToMagicItemPct = tempTable->bAlterToMagicItemPct; item_table->cLimitRealTimeFirstUseIndex = -1; item_table->cLimitTimerBasedOnWearIndex = -1; int i; for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { item_table->aLimits[i].bType = tempTable->aLimits[i].bType; item_table->aLimits[i].lValue = tempTable->aLimits[i].lValue; if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType) item_table->cLimitRealTimeFirstUseIndex = (char)i; if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType) item_table->cLimitTimerBasedOnWearIndex = (char)i; } for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i) { item_table->aApplies[i].bType = tempTable->aApplies[i].bType; item_table->aApplies[i].lValue = tempTable->aApplies[i].lValue; } for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i) item_table->alValues[i] = tempTable->alValues[i]; item_table->bGainSocketPct = tempTable->bGainSocketPct; item_table->sAddonType = tempTable->sAddonType; item_table->bWeight = tempTable->bWeight; } vnumSet.insert(item_table->dwVnum); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); ++item_table; } //_______________________________________________________________________// //========================================================================// // 4) (b)[test_map_itemTableByVnum]ÀÇ rowÁß, (!)[item_table]¿¡ ¾ø´Â °ÍÀ» Ãß°¡ÇÑ´Ù. //========================================================================// test_data.Destroy(); if(!test_data.Load("item_proto_test.txt",'\t')) { fprintf(stderr, "item_proto_test.txt was loaded successfully.\n"); //return false; } else { test_data.Next(); //¼³¸í ·Î¿ì ³Ñ¾î°¡±â. while (test_data.Next()) //Å×½ºÆ® µ¥ÀÌÅÍ °¢°¢À» ÈȾ°¡¸ç,»õ·Î¿î °ÍÀ» Ãß°¡ÇÑ´Ù. { //Áߺ¹µÇ´Â ºÎºÐÀÌ¸é ³Ñ¾î°£´Ù. set<int>::iterator itVnum; itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0))); if (itVnum != vnumSet.end()) { continue; } if (!Set_Proto_Item_Table(item_table, test_data, localMap)) { fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆà ½ÇÆÐ.\n"); } m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); item_table++; } } // QUEST_ITEM_PROTO_DISABLE // InitializeQuestItemTable(); // END_OF_QUEST_ITEM_PROTO_DISABLE m_map_itemTableByVnum.clear(); itertype(m_vec_itemTable) it = m_vec_itemTable.begin(); while (it != m_vec_itemTable.end()) { TItemTable * item_table = &(*(it++)); sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu REFINE %lu REFINE_SET %u MAGIC_PCT %u", item_table->dwVnum, item_table->szName, item_table->szLocaleName, item_table->alValues[0], item_table->alValues[1], item_table->alValues[2], item_table->alValues[3], item_table->alValues[4], item_table->alValues[5], item_table->dwWearFlags, item_table->dwAntiFlags, item_table->dwImmuneFlag, item_table->dwRefinedVnum, item_table->wRefineSet, item_table->bAlterToMagicItemPct); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); } sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum()); return true; }
in
PHP Code:
bool CClientManager::InitializeItemTable() { std::ostringstream query; query << "SELECT vnum, type, subtype, name, " << g_stLocaleNameColumn << ", gold, shop_buy_price, weight, size, flag, wearflag, antiflag, immuneflag+0, refined_vnum, refine_set, magic_pct, socket_pct, addon_type, limittype0, limitvalue0, limittype1, limitvalue1, applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, value0, value1, value2, value3, value4, value5, socket0, socket1, socket2 FROM item_proto ORDER BY vnum"; SQLMsg* sqlMsg = CDBManager::instance().DirectQuery(query.str().c_str(), 0); if (sqlMsg == nullptr) { sys_err("libdb::InitializeItemTable", __LINE__, "Could not load item_proto. Query failed!"); return false; } MYSQL_RES* pRes = sqlMsg->vec_pkResult[0]->pSQLResult; if (pRes == nullptr) { sys_err("libdb::InitializeItemTable", __LINE__, "Could not load item_proto. No result!"); return 0; } if (!m_vec_itemTable.empty()) { sys_log(__LINE__, " Reloading item_proto"); m_vec_itemTable.clear(); } MYSQL_ROW row; while ((row = mysql_fetch_row(pRes))) { SItemTable temp = {}; if (row[0]&&*row[0]) temp.dwVnum = strtoul(row[0], NULL, 10); if (row[1]&&*row[1]) temp.bType = strtoul(row[1], NULL, 10); if (row[2]&&*row[2]) temp.bSubType = strtoul(row[2], NULL, 10); if (row[3]&&*row[3]) snprintf(temp.szName, 25, "%s", row[3]); if (row[4]&&*row[4]) snprintf(temp.szLocaleName, 25, "%s", row[4]); if (row[5]&&*row[5]) temp.dwGold = strtoul(row[5], NULL, 10); if (row[6]&&*row[6]) temp.dwShopBuyPrice = strtoul(row[6], NULL, 10); if (row[7]&&*row[7]) temp.bWeight = strtoul(row[7], NULL, 10); if (row[8]&&*row[8]) temp.bSize = strtoul(row[8], NULL, 10); if (row[9]&&*row[9]) temp.dwFlags = strtoul(row[9], NULL, 10); if (row[10]&&*row[10]) temp.dwWearFlags = strtoul(row[10], NULL, 10); if (row[11]&&*row[11]) temp.dwAntiFlags = strtoul(row[11], NULL, 10); if (row[12]&&*row[12]) temp.dwImmuneFlag = strtoul(row[12], NULL, 10); if (row[13]&&*row[13]) temp.dwRefinedVnum = strtoul(row[13], NULL, 10); if (row[14]&&*row[14]) temp.wRefineSet = strtoul(row[14], NULL, 10); if (row[15]&&*row[15]) temp.bAlterToMagicItemPct = strtoul(row[15], NULL, 10); if (row[16]&&*row[16]) temp.bGainSocketPct = strtoul(row[16], NULL, 10); if (row[17]&&*row[17]) temp.sAddonType = strtoul(row[17], NULL, 10); if (row[18]&&*row[18]) temp.aLimits[0].bType = strtoul(row[18], NULL, 10); if (row[19]&&*row[19]) temp.aLimits[0].lValue = strtoul(row[19], NULL, 10); if (row[20]&&*row[20]) temp.aLimits[1].bType = strtoul(row[20], NULL, 10); if (row[21]&&*row[21]) temp.aLimits[1].lValue = strtoul(row[21], NULL, 10); if (row[22]&&*row[22]) temp.aApplies[0].bType = strtoul(row[22], NULL, 10); if (row[23]&&*row[23]) temp.aApplies[0].lValue = strtoul(row[23], NULL, 10); if (row[24]&&*row[24]) temp.aApplies[1].bType = strtoul(row[24], NULL, 10); if (row[25]&&*row[25]) temp.aApplies[1].lValue = strtoul(row[25], NULL, 10); if (row[26]&&*row[26]) temp.aApplies[2].bType = strtoul(row[26], NULL, 10); if (row[27]&&*row[27]) temp.aApplies[2].lValue = strtoul(row[27], NULL, 10); if (row[28]&&*row[28]) temp.alValues[0] = strtoul(row[28], NULL, 10); if (row[29]&&*row[29]) temp.alValues[1] = strtoul(row[29], NULL, 10); if (row[30]&&*row[30]) temp.alValues[2] = strtoul(row[30], NULL, 10); if (row[31]&&*row[31]) temp.alValues[3] = strtoul(row[31], NULL, 10); if (row[32]&&*row[32]) temp.alValues[4] = strtoul(row[32], NULL, 10); if (row[33]&&*row[33]) temp.alValues[5] = strtoul(row[33], NULL, 10); temp.cLimitRealTimeFirstUseIndex = -1; temp.cLimitTimerBasedOnWearIndex = -1; for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { if (LIMIT_REAL_TIME_START_FIRST_USE == temp.aLimits[i].bType) temp.cLimitRealTimeFirstUseIndex = (char) i; if (LIMIT_TIMER_BASED_ON_WEAR == temp.aLimits[i].bType) temp.cLimitTimerBasedOnWearIndex = (char) i; } m_vec_itemTable.push_back(temp); } std::cout << "CClientManager::InitializeItemTable:: " << m_vec_itemTable.size() << " items loaded." << std::endl; mysql_free_result(pRes); m_map_itemTableByVnum.clear(); auto it = m_vec_itemTable.begin(); while (it != m_vec_itemTable.end()) { TItemTable * item_table = &(*(it++)); sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu REFINE %lu REFINE_SET %u MAGIC_PCT %u", item_table->dwVnum, item_table->szName, item_table->szLocaleName, item_table->alValues[0], item_table->alValues[1], item_table->alValues[2], item_table->alValues[3], item_table->alValues[4], item_table->alValues[5], item_table->dwWearFlags, item_table->dwAntiFlags, item_table->dwImmuneFlag, item_table->dwRefinedVnum, item_table->wRefineSet, item_table->bAlterToMagicItemPct); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); } sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum()); return true; }
mfg
|
Danke für deine Antwort. Weißt du wo ClientManagerBoot.cpp ist?
|
|
|
All times are GMT +2. The time now is 07:48.
|
|