Kapa3a

Fix citire SQL nu TXT

Nov 29th, 2023
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.53 KB | Source Code | 0 0
  1.  Deschidem db/src/Main.cpp si adaugam:
  2.  
  3. COD: SELECTATI TOT
  4. // NOTXT_STARTUP_BEGIN
  5. BOOL g_noTXT = false;
  6. // NOTXT_STARTUP_END
  7.  
  8.  
  9. Cautam int iDisableHotBackup; si sub aceasta functie adaugam:
  10.  
  11. COD: SELECTATI TOT
  12. // NOTXT_STARTUP_BEGIN
  13.    int iNoTXT;
  14.    if (CConfig::instance().GetValue("NO_TXT", &iNoTXT))
  15.    {
  16.       if (iNoTXT)
  17.       {
  18.          sys_log(0, "CONFIG: NO_TXT");
  19.          g_noTXT = true;
  20.       }
  21.    }
  22.    // NOTXT_STARTUP_END
  23.  
  24.  
  25. Deschidem db/src/ClientManager.h si inlocuim
  26.  
  27. COD: SELECTATI TOT
  28. bool      InitializeMobTable();
  29.    bool      InitializeItemTable();
  30.  
  31.  
  32. cu
  33.  
  34. COD: SELECTATI TOT
  35. // NOTXT_STARTUP_BEGIN
  36.       bool      InitializeMobTableTXT();
  37.       bool      InitializeItemTableTXT();
  38.       bool      InitializeMobTableSQL();
  39.       bool      InitializeItemTableSQL();
  40.       // NOTXT_STARTUP_END
  41.  
  42.  
  43. Deschidem db/src/ClientManagerBoot.cpp si adaugam
  44.  
  45. COD: SELECTATI TOT
  46. // NOTXT_STARTUP_BEGIN
  47. extern int g_noTXT;
  48. // NOTXT_STARTUP_END
  49.  
  50.  
  51. Cautam bool CClientManager::InitializeMobTable() si o inlocuim cu:
  52.  
  53. COD: SELECTATI TOT
  54. bool CClientManager::InitializeMobTableTXT()
  55.  
  56.  
  57. Acum cautam bool CClientManager::InitializeItemTable() si inlocuim cu:
  58.  
  59. COD: SELECTATI TOT
  60. bool CClientManager::InitializeItemTableTXT()
  61.  
  62.  
  63. Acum cautam bool CClientManager::InitializeTables() si inlocuim
  64.  
  65. COD: SELECTATI TOT
  66. if (!InitializeMobTable())
  67.    {
  68.       sys_err("InitializeMobTable FAILED");
  69.       return false;
  70.    }
  71.    if (!MirrorMobTableIntoDB())
  72.    {
  73.       sys_err("MirrorMobTableIntoDB FAILED");
  74.       return false;
  75.    }
  76.  
  77.    if (!InitializeItemTable())
  78.    {
  79.       sys_err("InitializeItemTable FAILED");
  80.       return false;
  81.    }
  82.  
  83.    if (!MirrorItemTableIntoDB())
  84.    {
  85.       sys_err("MirrorItemTableIntoDB FAILED");
  86.       return false;
  87.    }
  88.  
  89. cu
  90. COD: SELECTATI TOT
  91. // NOTXT_STARTUP_BEGIN
  92.    if (g_noTXT) // item and mob proto
  93.    {
  94.       if (!InitializeMobTableSQL())
  95.       {
  96.          sys_err("InitializeMobTableSQL FAILED");
  97.          return false;
  98.       }
  99.       if (!InitializeItemTableSQL())
  100.       {
  101.          sys_err("InitializeItemTableSQL FAILED");
  102.          return false;
  103.       }
  104.    }
  105.    else
  106.    {
  107.       if (!InitializeMobTableTXT())
  108.       {
  109.          sys_err("InitializeMobTableTXT FAILED");
  110.          return false;
  111.       }
  112.  
  113.       if (!MirrorMobTableIntoDB())
  114.       {
  115.          sys_err("MirrorMobTableIntoDB FAILED");
  116.          return false;
  117.       }
  118.  
  119.       if (!InitializeItemTableTXT())
  120.       {
  121.          sys_err("InitializeItemTableTXT FAILED");
  122.          return false;
  123.       }
  124.  
  125.       if (!MirrorItemTableIntoDB())
  126.       {
  127.          sys_err("MirrorItemTableIntoDB FAILED");
  128.          return false;
  129.       }
  130.    }
  131.    // NOTXT_STARTUP_END
  132.  
  133.  
  134. Iar la sfarsit adaugam:
  135.  
  136. // NOTXT_STARTUP_BEGIN
  137. bool CClientManager::InitializeMobTableSQL()
  138. {
  139.    char query[4096];
  140.    snprintf(query, sizeof(query),
  141.       "SELECT vnum, name, %s, type, rank, battle_type, level, "
  142.       "size+0, ai_flag+0, setRaceFlag+0, setImmuneFlag+0, "
  143.       "on_click, empire, drop_item, resurrection_vnum, folder, "
  144.       "st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, "
  145.       "gold_min, gold_max, def, attack_speed, move_speed, "
  146.       "aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, "
  147.       "enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, "
  148.       "resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, "
  149.       "resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, "
  150.       "dam_multiply, summon, drain_sp, "
  151.       "skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2,"
  152.       "skill_vnum3, skill_level3, skill_vnum4, skill_level4 , sp_berserk, sp_stoneskin, "
  153.       "sp_godspeed, sp_deathblow, sp_revive "
  154.       "FROM mob_proto%s ORDER BY vnum",
  155.       g_stLocaleNameColumn.c_str(), GetTablePostfix());
  156.  
  157.    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
  158.    SQLResult * pRes = pkMsg->Get();
  159.  
  160.    if (!pRes->uiNumRows)
  161.    {
  162.       sys_err("Could not load mob_proto. No results!");
  163.       return false;
  164.    }
  165.  
  166.    sys_log(0, "MOB_PROTO loading...");
  167.  
  168.    if (!m_vec_mobTable.empty())
  169.    {
  170.       sys_log(0, "RELOAD: mob_proto");
  171.       m_vec_mobTable.clear();
  172.    }
  173.  
  174.    m_vec_mobTable.resize(pRes->uiNumRows);
  175.    memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
  176.    TMobTable * mob_table = &m_vec_mobTable[0];
  177.  
  178.    MYSQL_ROW data;
  179.    int col;
  180.    while ((data = mysql_fetch_row(pRes->pSQLResult)))
  181.    {
  182.       col = 0;
  183.       str_to_number(mob_table->dwVnum, data[col++]);
  184.       strlcpy(mob_table->szName, data[col++], sizeof(mob_table->szName));
  185.       strlcpy(mob_table->szLocaleName, data[col++], sizeof(mob_table->szLocaleName));
  186.       str_to_number(mob_table->bType, data[col++]);
  187.       str_to_number(mob_table->bRank, data[col++]);
  188.       str_to_number(mob_table->bBattleType, data[col++]);
  189.       str_to_number(mob_table->bLevel, data[col++]);
  190.       str_to_number(mob_table->bSize, data[col++]);
  191.       str_to_number(mob_table->dwAIFlag, data[col++]);
  192.       str_to_number(mob_table->dwRaceFlag, data[col++]);
  193.       str_to_number(mob_table->dwImmuneFlag, data[col++]);
  194.       str_to_number(mob_table->bOnClickType, data[col++]);
  195.       str_to_number(mob_table->bEmpire, data[col++]);
  196.       str_to_number(mob_table->dwDropItemVnum, data[col++]);
  197.       str_to_number(mob_table->dwResurrectionVnum, data[col++]);
  198.       strlcpy(mob_table->szFolder, data[col++], sizeof(mob_table->szFolder));
  199.       str_to_number(mob_table->bStr, data[col++]);
  200.       str_to_number(mob_table->bDex, data[col++]);
  201.       str_to_number(mob_table->bCon, data[col++]);
  202.       str_to_number(mob_table->bInt, data[col++]);
  203.       str_to_number(mob_table->dwDamageRange[0], data[col++]);
  204.       str_to_number(mob_table->dwDamageRange[1], data[col++]);
  205.       str_to_number(mob_table->dwMaxHP, data[col++]);
  206.       str_to_number(mob_table->bRegenCycle, data[col++]);
  207.       str_to_number(mob_table->bRegenPercent, data[col++]);
  208.       str_to_number(mob_table->dwExp, data[col++]);
  209.       str_to_number(mob_table->dwGoldMin, data[col++]);
  210.       str_to_number(mob_table->dwGoldMax, data[col++]);
  211.       str_to_number(mob_table->wDef, data[col++]);
  212.       str_to_number(mob_table->sAttackSpeed, data[col++]);
  213.       str_to_number(mob_table->sMovingSpeed, data[col++]);
  214.       str_to_number(mob_table->bAggresiveHPPct, data[col++]);
  215.       str_to_number(mob_table->wAggressiveSight, data[col++]);
  216.       str_to_number(mob_table->wAttackRange, data[col++]);
  217.       str_to_number(mob_table->dwPolymorphItemVnum, data[col++]);
  218.  
  219.       int i;
  220.       for (i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
  221.          str_to_number(mob_table->cEnchants[i], data[col++]);
  222.  
  223.       for (i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
  224.          str_to_number(mob_table->cResists[i], data[col++]);
  225.  
  226.       str_to_number(mob_table->fDamMultiply, data[col++]);
  227.       str_to_number(mob_table->dwSummonVnum, data[col++]);
  228.       str_to_number(mob_table->dwDrainSP, data[col++]);
  229.  
  230.       for (i = 0; i < MOB_SKILL_MAX_NUM; ++i)
  231.       {
  232.          str_to_number(mob_table->Skills[i].dwVnum, data[col++]);
  233.          str_to_number(mob_table->Skills[i].bLevel, data[col++]);
  234.       }
  235.  
  236.       str_to_number(mob_table->bBerserkPoint, data[col++]);
  237.       str_to_number(mob_table->bStoneSkinPoint, data[col++]);
  238.       str_to_number(mob_table->bGodSpeedPoint, data[col++]);
  239.       str_to_number(mob_table->bDeathBlowPoint, data[col++]);
  240.       str_to_number(mob_table->bRevivePoint, data[col++]);
  241.  
  242.       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);
  243.       ++mob_table;
  244.    }
  245.  
  246.    sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum());
  247.    sys_log(0, "CClientManager::InitializeMobTable:: %d mobs loaded.n", m_vec_mobTable.size());
  248.    return true;
  249. }
  250.  
  251. bool CClientManager::InitializeItemTableSQL()
  252. {
  253.    char query[4096];
  254.    snprintf(query, sizeof(query),
  255.       "SELECT vnum, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, "
  256.       "antiflag, immuneflag+0, refined_vnum, refine_set, magic_pct, socket_pct, addon_type, "
  257.       "limittype0, limitvalue0, limittype1, limitvalue1, "
  258.       "applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, "
  259.       "value0, value1, value2, value3, value4, value5 "
  260.       "FROM item_proto%s ORDER BY vnum",
  261.       g_stLocaleNameColumn.c_str(), GetTablePostfix());
  262.  
  263.    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
  264.    SQLResult * pRes = pkMsg->Get();
  265.  
  266.    if (!pRes->uiNumRows)
  267.    {
  268.       sys_err("Could not load item_proto. No results!");
  269.       return false;
  270.    }
  271.  
  272.    sys_log(0, "ITEM_PROTO loading...");
  273.  
  274.    if (!m_vec_itemTable.empty())
  275.    {
  276.       sys_log(0, "RELOAD: item_proto");
  277.       m_vec_itemTable.clear();
  278.       m_map_itemTableByVnum.clear();
  279.    }
  280.  
  281.    m_vec_itemTable.resize(pRes->uiNumRows);
  282.    memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
  283.    TItemTable * item_table = &m_vec_itemTable[0];
  284.  
  285.    MYSQL_ROW data;
  286.    int col;
  287.  
  288.    while ((data = mysql_fetch_row(pRes->pSQLResult)))
  289.    {
  290.       col = 0;
  291.  
  292.       str_to_number(item_table->dwVnum, data[col++]);
  293.       strlcpy(item_table->szName, data[col++], sizeof(item_table->szName));
  294.       strlcpy(item_table->szLocaleName, data[col++], sizeof(item_table->szLocaleName));
  295.       str_to_number(item_table->bType, data[col++]);
  296.       str_to_number(item_table->bSubType, data[col++]);
  297.       str_to_number(item_table->dwGold, data[col++]);
  298.       str_to_number(item_table->dwShopBuyPrice, data[col++]);
  299.       str_to_number(item_table->bWeight, data[col++]);
  300.       str_to_number(item_table->bSize, data[col++]);
  301.       str_to_number(item_table->dwFlags, data[col++]);
  302.       str_to_number(item_table->dwWearFlags, data[col++]);
  303.       str_to_number(item_table->dwAntiFlags, data[col++]);
  304.       str_to_number(item_table->dwImmuneFlag, data[col++]);
  305.       str_to_number(item_table->dwRefinedVnum, data[col++]);
  306.       str_to_number(item_table->wRefineSet, data[col++]);
  307.       str_to_number(item_table->bAlterToMagicItemPct, data[col++]);
  308.       str_to_number(item_table->bGainSocketPct, data[col++]);
  309.       str_to_number(item_table->sAddonType, data[col++]);
  310.  
  311.       item_table->cLimitRealTimeFirstUseIndex = -1;
  312.       item_table->cLimitTimerBasedOnWearIndex = -1;
  313.  
  314.       int i;
  315.       for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
  316.       {
  317.          str_to_number(item_table->aLimits[i].bType, data[col++]);
  318.          str_to_number(item_table->aLimits[i].lValue, data[col++]);
  319.  
  320.          if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType)
  321.             item_table->cLimitRealTimeFirstUseIndex = (char)i;
  322.  
  323.          if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType)
  324.             item_table->cLimitTimerBasedOnWearIndex = (char)i;
  325.       }
  326.  
  327.       for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
  328.       {
  329.          str_to_number(item_table->aApplies[i].bType, data[col++]);
  330.          str_to_number(item_table->aApplies[i].lValue, data[col++]);
  331.       }
  332.  
  333.       for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i)
  334.          str_to_number(item_table->alValues[i], data[col++]);
  335.  
  336.       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",
  337.             item_table->dwVnum,item_table->szName,item_table->szLocaleName,
  338.             item_table->alValues[0],item_table->alValues[1],item_table->alValues[2],
  339.             item_table->alValues[3],item_table->alValues[4],item_table->alValues[5],
  340.             item_table->dwWearFlags,item_table->dwAntiFlags,item_table->dwImmuneFlag,
  341.             item_table->dwRefinedVnum,item_table->wRefineSet,item_table->bAlterToMagicItemPct);
  342.  
  343.       m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
  344.       ++item_table;
  345.    }
  346.  
  347.    sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum());
  348.    sys_log(0, "CClientManager::InitializeMobTable:: %d items loaded.n", m_vec_itemTable.size());
  349.    return true;
  350. }
  351. // NOTXT_STARTUP_END
  352.  
  353.  
  354. Linia cu vnum_range este eliminata :)
  355.  
  356. mai aveti de facut un singur pas, mergeti în sf-ul vostru în db si deschideti conf.txt unde adaugati :
  357. NO_TXT = 1
  358. = 1 înseamna activat ruleaza .sql
  359. = 0 înseamna dezactivat ruleaza .txt
  360.  
  361. Daca chiar nu va descurcati cu tutorialul lasati reply si voi face niste fisiere comparabile pentru a vedea cum trebuie puse :) desi nu este greu deloc.. trebuie doar sa fiti atenti
Add Comment
Please, Sign In to add comment