Advertisement
kamil2321

[FIX C++] Poprawka czytania max itemów w item_proto

Jun 10th, 2020
1,412
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.32 KB | None | 0 0
  1. /* Poradnik dla tych, którzy posiadają moje pliki serwerowe bądź mój przełącznik czytania bazy "bez/ z txt" */
  2.  
  3. // Znajdź całą strukturę bool:
  4. bool CClientManager::InitializeItemTable()
  5. {
  6.     ...
  7. }
  8. // Zamień na:
  9. bool CClientManager::InitializeItemTable()
  10. {
  11.     char query[4096];
  12.     fprintf(stderr, "Ładuję item_proto z MySQL\r\n");
  13.     snprintf(query, sizeof(query),
  14.         "SELECT vnum, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, "
  15.         "antiflag, immuneflag+0, refined_vnum, refine_set, magic_pct, socket_pct, addon_type, "
  16.         "limittype0, limitvalue0, limittype1, limitvalue1, "
  17.         "applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, "
  18.         "value0, value1, value2, value3, value4, value5 "
  19.         "FROM item_proto%s ORDER BY vnum",
  20.         g_stLocaleNameColumn.c_str(), GetTablePostfix());
  21.  
  22.     std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
  23.     SQLResult * pRes = pkMsg->Get();
  24.  
  25.     if (!pRes->uiNumRows)
  26.     {
  27.         sys_err("Could not load item_proto. No results!");
  28.         return false;
  29.     }
  30.  
  31.     sys_log(0, "ITEM_PROTO loading...");
  32.  
  33.     if (!m_vec_itemTable.empty())
  34.     {
  35.         sys_log(0, "RELOAD: item_proto");
  36.         m_vec_itemTable.clear();
  37.         m_map_itemTableByVnum.clear();
  38.     }
  39.  
  40.     m_vec_itemTable.resize(pRes->uiNumRows);
  41.     memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
  42.     TItemTable * item_table = &m_vec_itemTable[0];
  43.  
  44.     MYSQL_ROW data;
  45.     int col;
  46.  
  47.     while ((data = mysql_fetch_row(pRes->pSQLResult)))
  48.     {
  49.         col = 0;
  50.  
  51.         str_to_number(item_table->dwVnum, data[col++]);
  52.         strlcpy(item_table->szName, data[col++], sizeof(item_table->szName));
  53.         strlcpy(item_table->szLocaleName, data[col++], sizeof(item_table->szLocaleName));
  54.         str_to_number(item_table->bType, data[col++]);
  55.         str_to_number(item_table->bSubType, data[col++]);
  56.         str_to_number(item_table->dwGold, data[col++]);
  57.         str_to_number(item_table->dwShopBuyPrice, data[col++]);
  58.         str_to_number(item_table->bWeight, data[col++]);
  59.         str_to_number(item_table->bSize, data[col++]);
  60.         str_to_number(item_table->dwFlags, data[col++]);
  61.         str_to_number(item_table->dwWearFlags, data[col++]);
  62.         str_to_number(item_table->dwAntiFlags, data[col++]);
  63.         str_to_number(item_table->dwImmuneFlag, data[col++]);
  64.         str_to_number(item_table->dwRefinedVnum, data[col++]);
  65.         str_to_number(item_table->wRefineSet, data[col++]);
  66.         str_to_number(item_table->bAlterToMagicItemPct, data[col++]);
  67.         str_to_number(item_table->bGainSocketPct, data[col++]);
  68.         str_to_number(item_table->sAddonType, data[col++]);
  69.  
  70.         item_table->cLimitRealTimeFirstUseIndex = -1;
  71.         item_table->cLimitTimerBasedOnWearIndex = -1;
  72.  
  73.         int i;
  74.         for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
  75.         {
  76.             str_to_number(item_table->aLimits[i].bType, data[col++]);
  77.             str_to_number(item_table->aLimits[i].lValue, data[col++]);
  78.  
  79.             if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType)
  80.                 item_table->cLimitRealTimeFirstUseIndex = (char)i;
  81.  
  82.             if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType)
  83.                 item_table->cLimitTimerBasedOnWearIndex = (char)i;
  84.         }
  85.  
  86.         for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
  87.         {
  88.             str_to_number(item_table->aApplies[i].bType, data[col++]);
  89.             str_to_number(item_table->aApplies[i].lValue, data[col++]);
  90.         }
  91.  
  92.         for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i)
  93.             str_to_number(item_table->alValues[i], data[col++]);
  94.  
  95.         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",
  96.                 item_table->dwVnum,item_table->szName,item_table->szLocaleName,
  97.                 item_table->alValues[0],item_table->alValues[1],item_table->alValues[2],
  98.                 item_table->alValues[3],item_table->alValues[4],item_table->alValues[5],
  99.                 item_table->dwWearFlags,item_table->dwAntiFlags,item_table->dwImmuneFlag,
  100.                 item_table->dwRefinedVnum,item_table->wRefineSet,item_table->bAlterToMagicItemPct);
  101.  
  102.         m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
  103.         ++item_table;
  104.     }
  105.  
  106.     sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum());
  107.     fprintf(stderr, " Gotowe! Załadowano: %d itemów.\r\n", m_vec_itemTable.size());
  108.     //sys_log(0, " Załadowano: %d itemów.", m_vec_itemTable.size());
  109.     return true;
  110. }
  111.  
  112. // Jeśli kompilujesz z nowszym gcc niż 4.2, to znajdź w powyższym kodzie:
  113. auto_ptr
  114. // Zamień na:
  115. unique_ptr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement