1. db /src /clientmanagerboot.cpp acıp
  2. arat
  3. extern std::string g_stLocaleNameColumn;
  4. altına ekle
  5. // NOTXT_STARTUP_BEGIN
  6. extern int g_noTXT;
  7. // NOTXT_STARTUP_END
  8. arat
  9. bool CClientManager::InitializeTables()
  10. komple kod blogunu değiştir
  11. bool CClientManager::InitializeTables()
  12. {
  13. // NOTXT_STARTUP_BEGIN
  14. if (g_noTXT) // item and mob proto
  15. {
  16. if (!InitializeMobTableSQL())
  17. {
  18. sys_err("InitializeMobTableSQL FAILED");
  19. return false;
  20. }
  21. if (!InitializeItemTableSQL())
  22. {
  23. sys_err("InitializeItemTableSQL FAILED");
  24. return false;
  25. }
  26. }
  27. else
  28. {
  29. if (!InitializeMobTableTXT())
  30. {
  31. sys_err("InitializeMobTableTXT FAILED");
  32. return false;
  33. }
  34. if (!MirrorMobTableIntoDB())
  35. {
  36. sys_err("MirrorMobTableIntoDB FAILED");
  37. return false;
  38. }
  39. if (!InitializeItemTableTXT())
  40. {
  41. sys_err("InitializeItemTableTXT FAILED");
  42. return false;
  43. }
  44. if (!MirrorItemTableIntoDB())
  45. {
  46. sys_err("MirrorItemTableIntoDB FAILED");
  47. return false;
  48. }
  49. }
  50. // NOTXT_STARTUP_END
  51. if (!InitializeShopTable())
  52. {
  53. sys_err("InitializeShopTable FAILED");
  54. return false;
  55. }
  56. if (!InitializeSkillTable())
  57. {
  58. sys_err("InitializeSkillTable FAILED");
  59. return false;
  60. }
  61. if (!InitializeRefineTable())
  62. {
  63. sys_err("InitializeRefineTable FAILED");
  64. return false;
  65. }
  66. if (!InitializeItemAttrTable())
  67. {
  68. sys_err("InitializeItemAttrTable FAILED");
  69. return false;
  70. }
  71. if (!InitializeItemRareTable())
  72. {
  73. sys_err("InitializeItemRareTable FAILED");
  74. return false;
  75. }
  76. if (!InitializeBanwordTable())
  77. {
  78. sys_err("InitializeBanwordTable FAILED");
  79. return false;
  80. }
  81. if (!InitializeLandTable())
  82. {
  83. sys_err("InitializeLandTable FAILED");
  84. return false;
  85. }
  86. if (!InitializeObjectProto())
  87. {
  88. sys_err("InitializeObjectProto FAILED");
  89. return false;
  90. }
  91. if (!InitializeObjectTable())
  92. {
  93. sys_err("InitializeObjectTable FAILED");
  94. return false;
  95. }
  96. if (!InitializeMonarch())
  97. {
  98. sys_err("InitializeMonarch FAILED");
  99. return false;
  100. }
  101. return true;
  102. }
  103. bool CClientManager::InitializeRefineTable()
  104. {
  105. char query[2048];
  106. snprintf(query, sizeof(query),
  107. "SELECT id, cost, prob, vnum0, count0, vnum1, count1, vnum2, count2, vnum3, count3, vnum4, count4 FROM refine_proto%s",
  108. GetTablePostfix());
  109. std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
  110. SQLResult * pRes = pkMsg->Get();
  111. if (!pRes->uiNumRows)
  112. return true;
  113. if (m_pRefineTable)
  114. {
  115. sys_log(0, "RELOAD: refine_proto");
  116. delete [] m_pRefineTable;
  117. m_pRefineTable = NULL;
  118. }
  119. m_iRefineTableSize = pRes->uiNumRows;
  120. m_pRefineTable = new TRefineTable[m_iRefineTableSize];
  121. memset(m_pRefineTable, 0, sizeof(TRefineTable) * m_iRefineTableSize);
  122. TRefineTable* prt = m_pRefineTable;
  123. MYSQL_ROW data;
  124. while ((data = mysql_fetch_row(pRes->pSQLResult)))
  125. {
  126. //const char* s_szQuery = "SELECT src_vnum, result_vnum, cost, prob, "
  127. //"vnum0, count0, vnum1, count1, vnum2, count2, vnum3, count3, vnum4, count4 "
  128. int col = 0;
  129. //prt->src_vnum = atoi(data[col++]);
  130. //prt->result_vnum = atoi(data[col++]);
  131. str_to_number(prt->id, data[col++]);
  132. str_to_number(prt->cost, data[col++]);
  133. str_to_number(prt->prob, data[col++]);
  134. for (int i = 0; i < REFINE_MATERIAL_MAX_NUM; i++)
  135. {
  136. str_to_number(prt->materials[i].vnum, data[col++]);
  137. str_to_number(prt->materials[i].count, data[col++]);
  138. if (prt->materials[i].vnum == 0)
  139. {
  140. prt->material_count = i;
  141. break;
  142. }
  143. }
  144. sys_log(0, "REFINE: id %ld cost %d prob %d mat1 %lu cnt1 %d", prt->id, prt->cost, prt->prob, prt->materials[0].vnum, prt->materials[0].count);
  145. prt++;
  146. }
  147. return true;
  148. }
  149. arat
  150. bool CClientManager::MirrorItemTableIntoDB()
  151. kod blogundan sonra altına ekle varsa komple değiştir
  152. // NOTXT_STARTUP_BEGIN
  153. bool CClientManager::InitializeMobTableSQL()
  154. {
  155. char query[4096];
  156. snprintf(query, sizeof(query),
  157. "SELECT vnum, name, %s, type, rank, battle_type, level, "
  158. "size+0, ai_flag+0, setRaceFlag+0, setImmuneFlag+0, "
  159. "on_click, empire, drop_item, resurrection_vnum, folder, "
  160. "st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, "
  161. "gold_min, gold_max, def, attack_speed, move_speed, "
  162. "aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, "
  163. "enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, "
  164. "resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, "
  165. "resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, "
  166. "dam_multiply, summon, drain_sp, "
  167. "skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2,"
  168. "skill_vnum3, skill_level3, skill_vnum4, skill_level4 , sp_berserk, sp_stoneskin, "
  169. "sp_godspeed, sp_deathblow, sp_revive "
  170. "FROM mob_proto%s ORDER BY vnum",
  171. g_stLocaleNameColumn.c_str(), GetTablePostfix());
  172. std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
  173. SQLResult * pRes = pkMsg->Get();
  174. if (!pRes->uiNumRows)
  175. {
  176. sys_err("Could not load mob_proto. No results!");
  177. return false;
  178. }
  179. sys_log(0, "MOB_PROTO loading...");
  180. if (!m_vec_mobTable.empty())
  181. {
  182. sys_log(0, "RELOAD: mob_proto");
  183. m_vec_mobTable.clear();
  184. }
  185. m_vec_mobTable.resize(pRes->uiNumRows);
  186. memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
  187. TMobTable * mob_table = &m_vec_mobTable[0];
  188. MYSQL_ROW data;
  189. int col;
  190. while ((data = mysql_fetch_row(pRes->pSQLResult)))
  191. {
  192. col = 0;
  193. str_to_number(mob_table->dwVnum, data[col++]);
  194. strlcpy(mob_table->szName, data[col++], sizeof(mob_table->szName));
  195. strlcpy(mob_table->szLocaleName, data[col++], sizeof(mob_table->szLocaleName));
  196. str_to_number(mob_table->bType, data[col++]);
  197. str_to_number(mob_table->bRank, data[col++]);
  198. str_to_number(mob_table->bBattleType, data[col++]);
  199. str_to_number(mob_table->bLevel, data[col++]);
  200. str_to_number(mob_table->bSize, data[col++]);
  201. str_to_number(mob_table->dwAIFlag, data[col++]);
  202. str_to_number(mob_table->dwRaceFlag, data[col++]);
  203. str_to_number(mob_table->dwImmuneFlag, data[col++]);
  204. str_to_number(mob_table->bOnClickType, data[col++]);
  205. str_to_number(mob_table->bEmpire, data[col++]);
  206. str_to_number(mob_table->dwDropItemVnum, data[col++]);
  207. str_to_number(mob_table->dwResurrectionVnum, data[col++]);
  208. strlcpy(mob_table->szFolder, data[col++], sizeof(mob_table->szFolder));
  209. str_to_number(mob_table->bStr, data[col++]);
  210. str_to_number(mob_table->bDex, data[col++]);
  211. str_to_number(mob_table->bCon, data[col++]);
  212. str_to_number(mob_table->bInt, data[col++]);
  213. str_to_number(mob_table->dwDamageRange[0], data[col++]);
  214. str_to_number(mob_table->dwDamageRange[1], data[col++]);
  215. str_to_number(mob_table->dwMaxHP, data[col++]);
  216. str_to_number(mob_table->bRegenCycle, data[col++]);
  217. str_to_number(mob_table->bRegenPercent, data[col++]);
  218. str_to_number(mob_table->dwExp, data[col++]);
  219. str_to_number(mob_table->dwGoldMin, data[col++]);
  220. str_to_number(mob_table->dwGoldMax, data[col++]);
  221. str_to_number(mob_table->wDef, data[col++]);
  222. str_to_number(mob_table->sAttackSpeed, data[col++]);
  223. str_to_number(mob_table->sMovingSpeed, data[col++]);
  224. str_to_number(mob_table->bAggresiveHPPct, data[col++]);
  225. str_to_number(mob_table->wAggressiveSight, data[col++]);
  226. str_to_number(mob_table->wAttackRange, data[col++]);
  227. str_to_number(mob_table->dwPolymorphItemVnum, data[col++]);
  228. int i;
  229. for (i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
  230. str_to_number(mob_table->cEnchants[i], data[col++]);
  231. for (i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
  232. str_to_number(mob_table->cResists[i], data[col++]);
  233. str_to_number(mob_table->fDamMultiply, data[col++]);
  234. str_to_number(mob_table->dwSummonVnum, data[col++]);
  235. str_to_number(mob_table->dwDrainSP, data[col++]);
  236. for (i = 0; i < MOB_SKILL_MAX_NUM; ++i)
  237. {
  238. str_to_number(mob_table->Skills[i].dwVnum, data[col++]);
  239. str_to_number(mob_table->Skills[i].bLevel, data[col++]);
  240. }
  241. str_to_number(mob_table->bBerserkPoint, data[col++]);
  242. str_to_number(mob_table->bStoneSkinPoint, data[col++]);
  243. str_to_number(mob_table->bGodSpeedPoint, data[col++]);
  244. str_to_number(mob_table->bDeathBlowPoint, data[col++]);
  245. str_to_number(mob_table->bRevivePoint, data[col++]);
  246. sys_log(1, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
  247. ++mob_table;
  248. }
  249. sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum());
  250. sys_log(0, "CClientManager::InitializeMobTable:: %d mobs loaded.\n", m_vec_mobTable.size());
  251. return true;
  252. }
  253. bool CClientManager::InitializeItemTableSQL()
  254. {
  255. char query[4096];
  256. snprintf(query, sizeof(query),
  257. "SELECT vnum, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, "
  258. "antiflag, immuneflag+0, refined_vnum, refine_set, magic_pct, socket_pct, addon_type, "
  259. "limittype0, limitvalue0, limittype1, limitvalue1, "
  260. "applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, "
  261. "value0, value1, value2, value3, value4, value5 "
  262. "FROM item_proto%s ORDER BY vnum",
  263. g_stLocaleNameColumn.c_str(), GetTablePostfix());
  264. std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
  265. SQLResult * pRes = pkMsg->Get();
  266. if (!pRes->uiNumRows)
  267. {
  268. sys_err("Could not load item_proto. No results!");
  269. return false;
  270. }
  271. sys_log(0, "ITEM_PROTO loading...");
  272. if (!m_vec_itemTable.empty())
  273. {
  274. sys_log(0, "RELOAD: item_proto");
  275. m_vec_itemTable.clear();
  276. m_map_itemTableByVnum.clear();
  277. }
  278. m_vec_itemTable.resize(pRes->uiNumRows);
  279. memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
  280. TItemTable * item_table = &m_vec_itemTable[0];
  281. MYSQL_ROW data;
  282. int col;
  283. while ((data = mysql_fetch_row(pRes->pSQLResult)))
  284. {
  285. col = 0;
  286. str_to_number(item_table->dwVnum, data[col++]);
  287. strlcpy(item_table->szName, data[col++], sizeof(item_table->szName));
  288. strlcpy(item_table->szLocaleName, data[col++], sizeof(item_table->szLocaleName));
  289. str_to_number(item_table->bType, data[col++]);
  290. str_to_number(item_table->bSubType, data[col++]);
  291. str_to_number(item_table->dwGold, data[col++]);
  292. str_to_number(item_table->dwShopBuyPrice, data[col++]);
  293. str_to_number(item_table->bWeight, data[col++]);
  294. str_to_number(item_table->bSize, data[col++]);
  295. str_to_number(item_table->dwFlags, data[col++]);
  296. str_to_number(item_table->dwWearFlags, data[col++]);
  297. str_to_number(item_table->dwAntiFlags, data[col++]);
  298. str_to_number(item_table->dwImmuneFlag, data[col++]);
  299. str_to_number(item_table->dwRefinedVnum, data[col++]);
  300. str_to_number(item_table->wRefineSet, data[col++]);
  301. str_to_number(item_table->bAlterToMagicItemPct, data[col++]);
  302. str_to_number(item_table->bGainSocketPct, data[col++]);
  303. str_to_number(item_table->sAddonType, data[col++]);
  304. item_table->cLimitRealTimeFirstUseIndex = -1;
  305. item_table->cLimitTimerBasedOnWearIndex = -1;
  306. int i;
  307. for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
  308. {
  309. str_to_number(item_table->aLimits[i].bType, data[col++]);
  310. str_to_number(item_table->aLimits[i].lValue, data[col++]);
  311. if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType)
  312. item_table->cLimitRealTimeFirstUseIndex = (char)i;
  313. if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType)
  314. item_table->cLimitTimerBasedOnWearIndex = (char)i;
  315. }
  316. for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
  317. {
  318. str_to_number(item_table->aApplies[i].bType, data[col++]);
  319. str_to_number(item_table->aApplies[i].lValue, data[col++]);
  320. }
  321. for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i)
  322. str_to_number(item_table->alValues[i], data[col++]);
  323. 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",
  324. item_table->dwVnum,item_table->szName,item_table->szLocaleName,
  325. item_table->alValues[0],item_table->alValues[1],item_table->alValues[2],
  326. item_table->alValues[3],item_table->alValues[4],item_table->alValues[5],
  327. item_table->dwWearFlags,item_table->dwAntiFlags,item_table->dwImmuneFlag,
  328. item_table->dwRefinedVnum,item_table->wRefineSet,item_table->bAlterToMagicItemPct);
  329. m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
  330. ++item_table;
  331. }
  332. sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum());
  333. sys_log(0, "CClientManager::InitializeMobTable:: %d items loaded.\n", m_vec_itemTable.size());
  334. return true;
  335. }
  336. // NOTXT_STARTUP_END
  337. bool CClientManager::InitializeItemTableTXT()
  338. üsttekini arat varsa değiştir yoksa bool CClientManager::InitializeSkillTable() bunu aratıp üstüne ekle
  339. bool CClientManager::InitializeItemTableTXT()
  340. {
  341. bool isNameFile = true;
  342. map<int,const char*> localMap;
  343. cCsvTable nameData;
  344. if(!nameData.Load("item_names.txt",'\t'))
  345. {
  346. fprintf(stderr, "item_names.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  347. isNameFile = false;
  348. } else {
  349. nameData.Next();
  350. while(nameData.Next()) {
  351. localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1);
  352. }
  353. }
  354. map<DWORD, TItemTable *> test_map_itemTableByVnum;
  355. cCsvTable test_data;
  356. if(!test_data.Load("item_proto_test.txt",'\t'))
  357. {
  358. fprintf(stderr, "item_proto_test.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  359. //return false;
  360. }
  361. else
  362. {
  363. test_data.Next();
  364. TItemTable * test_item_table = NULL;
  365. int test_itemTableSize = test_data.m_File.GetRowCount()-1;
  366. test_item_table = new TItemTable[test_itemTableSize];
  367. memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize);
  368. while(test_data.Next())
  369. {
  370. if (!Set_Proto_Item_Table(test_item_table, test_data, localMap))
  371. {
  372. fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆÃ ½ÇÆĞ.\n");
  373. }
  374. test_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(test_item_table->dwVnum, test_item_table));
  375. test_item_table++;
  376. }
  377. }
  378. set<int> vnumSet;
  379. cCsvTable data;
  380. if(!data.Load("item_proto.txt",'\t'))
  381. {
  382. fprintf(stderr, "item_proto.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  383. return false;
  384. }
  385. data.Next();
  386. if (!m_vec_itemTable.empty())
  387. {
  388. sys_log(0, "RELOAD: item_proto");
  389. m_vec_itemTable.clear();
  390. m_map_itemTableByVnum.clear();
  391. }
  392. int addNumber = 0;
  393. while(data.Next())
  394. {
  395. int vnum = atoi(data.AsStringByIndex(0));
  396. std::map<DWORD, TItemTable *>::iterator it_map_itemTable;
  397. it_map_itemTable = test_map_itemTableByVnum.find(vnum);
  398. if(it_map_itemTable != test_map_itemTableByVnum.end())
  399. {
  400. addNumber++;
  401. }
  402. }
  403. data.Destroy();
  404. if(!data.Load("item_proto.txt",'\t'))
  405. {
  406. fprintf(stderr, "item_proto.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  407. return false;
  408. }
  409. data.Next();
  410. m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber);
  411. memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
  412. int testValue = m_vec_itemTable.size();
  413. TItemTable * item_table = &m_vec_itemTable[0];
  414. while (data.Next())
  415. {
  416. int col = 0;
  417. std::map<DWORD, TItemTable *>::iterator it_map_itemTable;
  418. it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col)));
  419. if(it_map_itemTable == test_map_itemTableByVnum.end())
  420. {
  421. if (!Set_Proto_Item_Table(item_table, data, localMap))
  422. {
  423. fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆÃ ½ÇÆĞ.\n");
  424. }
  425. }
  426. else
  427. {
  428. TItemTable *tempTable = it_map_itemTable->second;
  429. item_table->dwVnum = tempTable->dwVnum;
  430. strlcpy(item_table->szName, tempTable->szName, sizeof(item_table->szName));
  431. strlcpy(item_table->szLocaleName, tempTable->szLocaleName, sizeof(item_table->szLocaleName));
  432. item_table->bType = tempTable->bType;
  433. item_table->bSubType = tempTable->bSubType;
  434. item_table->bSize = tempTable->bSize;
  435. item_table->dwAntiFlags = tempTable->dwAntiFlags;
  436. item_table->dwFlags = tempTable->dwFlags;
  437. item_table->dwWearFlags = tempTable->dwWearFlags;
  438. item_table->dwImmuneFlag = tempTable->dwImmuneFlag;
  439. item_table->dwGold = tempTable->dwGold;
  440. item_table->dwShopBuyPrice = tempTable->dwShopBuyPrice;
  441. item_table->dwRefinedVnum =tempTable->dwRefinedVnum;
  442. item_table->wRefineSet =tempTable->wRefineSet;
  443. item_table->bAlterToMagicItemPct = tempTable->bAlterToMagicItemPct;
  444. item_table->cLimitRealTimeFirstUseIndex = -1;
  445. item_table->cLimitTimerBasedOnWearIndex = -1;
  446. int i;
  447. for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
  448. {
  449. item_table->aLimits[i].bType = tempTable->aLimits[i].bType;
  450. item_table->aLimits[i].lValue = tempTable->aLimits[i].lValue;
  451. if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType)
  452. item_table->cLimitRealTimeFirstUseIndex = (char)i;
  453. if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType)
  454. item_table->cLimitTimerBasedOnWearIndex = (char)i;
  455. }
  456. for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
  457. {
  458. item_table->aApplies[i].bType = tempTable->aApplies[i].bType;
  459. item_table->aApplies[i].lValue = tempTable->aApplies[i].lValue;
  460. }
  461. for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i)
  462. item_table->alValues[i] = tempTable->alValues[i];
  463. item_table->bGainSocketPct = tempTable->bGainSocketPct;
  464. item_table->sAddonType = tempTable->sAddonType;
  465. item_table->bWeight = tempTable->bWeight;
  466. }
  467. vnumSet.insert(item_table->dwVnum);
  468. m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
  469. ++item_table;
  470. }
  471. test_data.Destroy();
  472. if(!test_data.Load("item_proto_test.txt",'\t'))
  473. {
  474. fprintf(stderr, "item_proto_test.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  475. }
  476. else
  477. {
  478. test_data.Next();
  479. while (test_data.Next())
  480. {
  481. set<int>::iterator itVnum;
  482. itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
  483. if (itVnum != vnumSet.end()) {
  484. continue;
  485. }
  486. if (!Set_Proto_Item_Table(item_table, test_data, localMap))
  487. {
  488. fprintf(stderr, "¾ÆÀÌÅÛ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆÃ ½ÇÆĞ.\n");
  489. }
  490. m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
  491. item_table++;
  492. }
  493. }
  494. m_map_itemTableByVnum.clear();
  495. itertype(m_vec_itemTable) it = m_vec_itemTable.begin();
  496. while (it != m_vec_itemTable.end())
  497. {
  498. TItemTable * item_table = &(*(it++));
  499. 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",
  500. item_table->dwVnum,
  501. item_table->szName,
  502. item_table->szLocaleName,
  503. item_table->alValues[0],
  504. item_table->alValues[1],
  505. item_table->alValues[2],
  506. item_table->alValues[3],
  507. item_table->alValues[4],
  508. item_table->alValues[5],
  509. item_table->dwWearFlags,
  510. item_table->dwAntiFlags,
  511. item_table->dwImmuneFlag,
  512. item_table->dwRefinedVnum,
  513. item_table->wRefineSet,
  514. item_table->bAlterToMagicItemPct);
  515. m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
  516. }
  517. sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum());
  518. return true;
  519. }
  520. arat
  521. bool CClientManager::InitializeMobTableTXT()
  522. varsa değiştir yoksa bool CClientManager::InitializeShopTable() bunu aratıp üstüne ekle
  523. bool CClientManager::InitializeMobTableTXT()
  524. {
  525. map<int,const char*> localMap;
  526. bool isNameFile = true;
  527. cCsvTable nameData;
  528. if(!nameData.Load("mob_names.txt",'\t'))
  529. {
  530. fprintf(stderr, "mob_names.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  531. isNameFile = false;
  532. }
  533. else
  534. {
  535. nameData.Next();
  536. while(nameData.Next())
  537. {
  538. localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1);
  539. }
  540. }
  541. set<int> vnumSet;
  542. bool isTestFile = true;
  543. cCsvTable test_data;
  544. if(!test_data.Load("mob_proto_test.txt",'\t'))
  545. {
  546. fprintf(stderr, "Å×½ºÆ® ÆÄÀÏÀÌ ¾ø½À´Ï´Ù. ±×´ë·Î ÁøÇàÇÕ´Ï´Ù.\n");
  547. isTestFile = false;
  548. }
  549. map<DWORD, TMobTable *> test_map_mobTableByVnum;
  550. if (isTestFile)
  551. {
  552. test_data.Next();
  553. TMobTable * test_mob_table = NULL;
  554. int test_MobTableSize = test_data.m_File.GetRowCount()-1;
  555. test_mob_table = new TMobTable[test_MobTableSize];
  556. memset(test_mob_table, 0, sizeof(TMobTable) * test_MobTableSize);
  557. while(test_data.Next())
  558. {
  559. if (!Set_Proto_Mob_Table(test_mob_table, test_data, localMap))
  560. {
  561. fprintf(stderr, "¸÷ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆÃ ½ÇÆĞ.\n");
  562. }
  563. test_map_mobTableByVnum.insert(std::map<DWORD, TMobTable *>::value_type(test_mob_table->dwVnum, test_mob_table));
  564. ++test_mob_table;
  565. }
  566. }
  567. cCsvTable data;
  568. if(!data.Load("mob_proto.txt",'\t'))
  569. {
  570. fprintf(stderr, "mob_proto.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  571. return false;
  572. }
  573. data.Next();
  574. int addNumber = 0;
  575. while(data.Next())
  576. {
  577. int vnum = atoi(data.AsStringByIndex(0));
  578. std::map<DWORD, TMobTable *>::iterator it_map_mobTable;
  579. it_map_mobTable = test_map_mobTableByVnum.find(vnum);
  580. if(it_map_mobTable != test_map_mobTableByVnum.end())
  581. {
  582. addNumber++;
  583. }
  584. }
  585. data.Destroy();
  586. if(!data.Load("mob_proto.txt",'\t'))
  587. {
  588. fprintf(stderr, "mob_proto.txt ÆÄÀÏÀ» Àоî¿ÀÁö ¸øÇß½À´Ï´Ù\n");
  589. return false;
  590. }
  591. data.Next();
  592. if (!m_vec_mobTable.empty())
  593. {
  594. sys_log(0, "RELOAD: mob_proto");
  595. m_vec_mobTable.clear();
  596. }
  597. m_vec_mobTable.resize(data.m_File.GetRowCount()-1 + addNumber);
  598. memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
  599. TMobTable * mob_table = &m_vec_mobTable[0];
  600. while (data.Next())
  601. {
  602. int col = 0;
  603. bool isSameRow = true;
  604. std::map<DWORD, TMobTable *>::iterator it_map_mobTable;
  605. it_map_mobTable = test_map_mobTableByVnum.find(atoi(data.AsStringByIndex(col)));
  606. if(it_map_mobTable == test_map_mobTableByVnum.end())
  607. {
  608. isSameRow = false;
  609. }
  610. if(isSameRow)
  611. {
  612. TMobTable *tempTable = it_map_mobTable->second;
  613. mob_table->dwVnum = tempTable->dwVnum;
  614. strlcpy(mob_table->szName, tempTable->szName, sizeof(tempTable->szName));
  615. strlcpy(mob_table->szLocaleName, tempTable->szLocaleName, sizeof(tempTable->szName));
  616. mob_table->bRank = tempTable->bRank;
  617. mob_table->bType = tempTable->bType;
  618. mob_table->bBattleType = tempTable->bBattleType;
  619. mob_table->bLevel = tempTable->bLevel;
  620. mob_table->bSize = tempTable->bSize;
  621. mob_table->dwAIFlag = tempTable->dwAIFlag;
  622. mob_table->dwRaceFlag = tempTable->dwRaceFlag;
  623. mob_table->dwImmuneFlag = tempTable->dwImmuneFlag;
  624. mob_table->bEmpire = tempTable->bEmpire;
  625. strlcpy(mob_table->szFolder, tempTable->szFolder, sizeof(tempTable->szName));
  626. mob_table->bOnClickType = tempTable->bOnClickType;
  627. mob_table->bStr = tempTable->bStr;
  628. mob_table->bDex = tempTable->bDex;
  629. mob_table->bCon = tempTable->bCon;
  630. mob_table->bInt = tempTable->bInt;
  631. mob_table->dwDamageRange[0] = tempTable->dwDamageRange[0];
  632. mob_table->dwDamageRange[1] = tempTable->dwDamageRange[1];
  633. mob_table->dwMaxHP = tempTable->dwMaxHP;
  634. mob_table->bRegenCycle = tempTable->bRegenCycle;
  635. mob_table->bRegenPercent = tempTable->bRegenPercent;
  636. mob_table->dwGoldMin = tempTable->dwGoldMin;
  637. mob_table->dwGoldMax = tempTable->dwGoldMax;
  638. mob_table->dwExp = tempTable->dwExp;
  639. mob_table->wDef = tempTable->wDef;
  640. mob_table->sAttackSpeed = tempTable->sAttackSpeed;
  641. mob_table->sMovingSpeed = tempTable->sMovingSpeed;
  642. mob_table->bAggresiveHPPct = tempTable->bAggresiveHPPct;
  643. mob_table->wAggressiveSight = tempTable->wAggressiveSight;
  644. mob_table->wAttackRange = tempTable->wAttackRange;
  645. mob_table->dwDropItemVnum = tempTable->dwDropItemVnum;
  646. mob_table->dwResurrectionVnum = tempTable->dwResurrectionVnum;
  647. for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
  648. mob_table->cEnchants[i] = tempTable->cEnchants[i];
  649. for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
  650. mob_table->cResists[i] = tempTable->cResists[i];
  651. mob_table->fDamMultiply = tempTable->fDamMultiply;
  652. mob_table->dwSummonVnum = tempTable->dwSummonVnum;
  653. mob_table->dwDrainSP = tempTable->dwDrainSP;
  654. mob_table->dwPolymorphItemVnum = tempTable->dwPolymorphItemVnum;
  655. mob_table->Skills[0].bLevel = tempTable->Skills[0].bLevel;
  656. mob_table->Skills[0].dwVnum = tempTable->Skills[0].dwVnum;
  657. mob_table->Skills[1].bLevel = tempTable->Skills[1].bLevel;
  658. mob_table->Skills[1].dwVnum = tempTable->Skills[1].dwVnum;
  659. mob_table->Skills[2].bLevel = tempTable->Skills[2].bLevel;
  660. mob_table->Skills[2].dwVnum = tempTable->Skills[2].dwVnum;
  661. mob_table->Skills[3].bLevel = tempTable->Skills[3].bLevel;
  662. mob_table->Skills[3].dwVnum = tempTable->Skills[3].dwVnum;
  663. mob_table->Skills[4].bLevel = tempTable->Skills[4].bLevel;
  664. mob_table->Skills[4].dwVnum = tempTable->Skills[4].dwVnum;
  665. mob_table->bBerserkPoint = tempTable->bBerserkPoint;
  666. mob_table->bStoneSkinPoint = tempTable->bStoneSkinPoint;
  667. mob_table->bGodSpeedPoint = tempTable->bGodSpeedPoint;
  668. mob_table->bDeathBlowPoint = tempTable->bDeathBlowPoint;
  669. mob_table->bRevivePoint = tempTable->bRevivePoint;
  670. }
  671. else
  672. {
  673. if (!Set_Proto_Mob_Table(mob_table, data, localMap))
  674. {
  675. fprintf(stderr, "¸÷ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆÃ ½ÇÆĞ.\n");
  676. }
  677. }
  678. vnumSet.insert(mob_table->dwVnum);
  679. sys_log(1, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
  680. ++mob_table;
  681. }
  682. test_data.Destroy();
  683. isTestFile = true;
  684. test_data;
  685. if(!test_data.Load("mob_proto_test.txt",'\t'))
  686. {
  687. fprintf(stderr, "Å×½ºÆ® ÆÄÀÏÀÌ ¾ø½À´Ï´Ù. ±×´ë·Î ÁøÇàÇÕ´Ï´Ù.\n");
  688. isTestFile = false;
  689. }
  690. if(isTestFile)
  691. {
  692. test_data.Next();
  693. while (test_data.Next())
  694. {
  695. set<int>::iterator itVnum;
  696. itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
  697. if (itVnum != vnumSet.end())
  698. {
  699. continue;
  700. }
  701. if (!Set_Proto_Mob_Table(mob_table, test_data, localMap))
  702. {
  703. fprintf(stderr, "¸÷ ÇÁ·ÎÅä Å×ÀÌºí ¼ÂÆÃ ½ÇÆĞ.\n");
  704. }
  705. sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
  706. ++mob_table;
  707. }
  708. }
  709. sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum());
  710. return true;
  711. }
  712. clientmanager.h ac
  713. arat
  714. bool InitializeShopTable();
  715. altına ekle
  716. // NOTXT_STARTUP_BEGIN
  717. bool InitializeMobTableTXT();
  718. bool InitializeItemTableTXT();
  719. bool InitializeMobTableSQL();
  720. bool InitializeItemTableSQL();
  721. // NOTXT_STARTUP_END
  722. main.cpp acılır
  723. arat
  724. BOOL g_test_server = false;
  725. altına ekle
  726. // NOTXT_STARTUP_BEGIN
  727. BOOL g_noTXT = false;
  728. // NOTXT_STARTUP_END
  729. arat
  730. if (!CConfig::instance().GetValue("TABLE_POSTFIX", szBuf, 256))
  731. üstüne ekle
  732. // NOTXT_STARTUP_BEGIN
  733. int iNoTXT;
  734. if (CConfig::instance().GetValue("NO_TXT", &iNoTXT))
  735. {
  736. if (iNoTXT)
  737. {
  738. sys_log(0, "CONFIG: NO_TXT");
  739. g_noTXT = true;
  740. }
  741. }
  742. // NOTXT_STARTUP_END
  743. db conf.txt acılır NO_TXT = 1 olusturulur