Jump to content

.Incredible™

Inactive Member
  • Posts

    79
  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by .Incredible™

  1. Hi, sorted not exit in my python do you know what to do? 0221 03:30:04746 :: File "game.py", line 1665, in BINARY_RefreshTargetMonsterDropInfo 0221 03:30:04746 :: File "uiTarget.py", line 546, in RefreshMonsterInfoBoard 0221 03:30:04746 :: File "uiTarget.py", line 151, in Refresh 0221 03:30:04746 :: File "uiTarget.py", line 168, in __LoadInformation 0221 03:30:04746 :: File "uiTarget.py", line 248, in __LoadInformation_Drops 0221 03:30:04747 :: File "uiTarget.py", line 295, in AppendItem 0221 03:30:04747 :: NameError 0221 03:30:04747 :: : 0221 03:30:04747 :: global name 'sorted' is not defined 0221 03:30:04747 :: here is the python part item.SelectItem(vnum) itemName = item.GetItemName() if type(vnums) != int and len(vnums) > 1: vnums = sorted(vnums) realName = itemName[:itemName.find("+")] if item.GetItemType() == item.ITEM_TYPE_METIN: realName = localeInfo.TARGET_INFO_STONE_NAME itemName = realName + "+0 - +4" else: itemName = realName + "+" + str(vnums[0] % 10) + " - +" + str(vnums[len(vnums) - 1] % 10) vnum = vnums[len(vnums) - 1]
  2. // vim:ts=4 sw=4 #include <map> #include "stdafx.h" #include "ClientManager.h" #include "Main.h" #include "Monarch.h" #include "CsvReader.h" #include "ProtoReader.h" using namespace std; extern int g_test_server; extern std::string g_stLocaleNameColumn; bool CClientManager::InitializeTables() { if (!InitializeMobTable()) { sys_err("InitializeMobTable FAILED"); return false; } if (!MirrorMobTableIntoDB()) { sys_err("MirrorMobTableIntoDB FAILED"); return false; } if (!InitializeItemTable()) { sys_err("InitializeItemTable FAILED"); return false; } if (!MirrorItemTableIntoDB()) { sys_err("MirrorItemTableIntoDB FAILED"); return false; } if (!InitializeShopTable()) { sys_err("InitializeShopTable FAILED"); return false; } if (!InitializeSkillTable()) { sys_err("InitializeSkillTable FAILED"); return false; } if (!InitializeRefineTable()) { sys_err("InitializeRefineTable FAILED"); return false; } if (!InitializeItemAttrTable()) { sys_err("InitializeItemAttrTable FAILED"); return false; } if (!InitializeItemRareTable()) { sys_err("InitializeItemRareTable FAILED"); return false; } if (!InitializeBanwordTable()) { sys_err("InitializeBanwordTable FAILED"); return false; } if (!InitializeLandTable()) { sys_err("InitializeLandTable FAILED"); return false; } if (!InitializeObjectProto()) { sys_err("InitializeObjectProto FAILED"); return false; } if (!InitializeObjectTable()) { sys_err("InitializeObjectTable FAILED"); return false; } if (!InitializeMonarch()) { sys_err("InitializeMonarch FAILED"); return false; } return true; } bool CClientManager::InitializeRefineTable() { char query[2048]; snprintf(query, sizeof(query), "SELECT id, cost, prob, vnum0, count0, vnum1, count1, vnum2, count2, vnum3, count3, vnum4, count4 FROM refine_proto%s", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!pRes->uiNumRows) return true; if (m_pRefineTable) { sys_log(0, "RELOAD: refine_proto"); delete[] m_pRefineTable; m_pRefineTable = NULL; } m_iRefineTableSize = pRes->uiNumRows; m_pRefineTable = new TRefineTable[m_iRefineTableSize]; memset(m_pRefineTable, 0, sizeof(TRefineTable) * m_iRefineTableSize); TRefineTable* prt = m_pRefineTable; MYSQL_ROW data; while ((data = mysql_fetch_row(pRes->pSQLResult))) { //const char* s_szQuery = "SELECT src_vnum, result_vnum, cost, prob, " //"vnum0, count0, vnum1, count1, vnum2, count2, vnum3, count3, vnum4, count4 " int col = 0; //prt->src_vnum = atoi(data[col++]); //prt->result_vnum = atoi(data[col++]); str_to_number(prt->id, data[col++]); str_to_number(prt->cost, data[col++]); str_to_number(prt->prob, data[col++]); for (int i = 0; i < REFINE_MATERIAL_MAX_NUM; i++) { str_to_number(prt->materials[i].vnum, data[col++]); str_to_number(prt->materials[i].count, data[col++]); if (prt->materials[i].vnum == 0) { prt->material_count = i; break; } } 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); prt++; } return true; } class FCompareVnum { public: bool operator () (const TEntityTable & a, const TEntityTable & b) const { return (a.dwVnum < b.dwVnum); } }; bool CClientManager::InitializeMobTable() { char query[4096]; snprintf(query, sizeof(query), "SELECT vnum, name, %s, type, rank, battle_type, level, size+0, ai_flag+0, setRaceFlag+0, setImmuneFlag+0, on_click, empire, drop_item, resurrection_vnum, folder, st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, gold_min, gold_max, def, attack_speed, move_speed, aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, dam_multiply, summon, drain_sp, skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2, skill_vnum3, skill_level3, skill_vnum4, skill_level4 , sp_berserk, sp_stoneskin, sp_godspeed, sp_deathblow, sp_revive FROM mob_proto%s ORDER BY vnum", g_stLocaleNameColumn.c_str(), GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); MYSQL_RES * pRes = pkMsg->Get()->pSQLResult; if (!pRes->row_count) { sys_err("no result from mob_proto"); return false; } if (!m_vec_mobTable.empty()) { sys_log(0, "RELOAD: mob_proto"); m_vec_mobTable.clear(); } MYSQL_ROW row; while ((row = mysql_fetch_row(pRes))) { SMobTable temp; memset(&temp, 0, sizeof(temp)); if (row[0]) temp.dwVnum = strtoul(row[0], NULL, 10); if (row[1]) snprintf(temp.szName, 25, "%s", row[1]); if (row[2]) snprintf(temp.szLocaleName, 25, "%s", row[2]); if (row[3]) temp.bType = strtoul(row[3], NULL, 10); if (row[4]) temp.bRank = strtoul(row[4], NULL, 10); if (row[5]) temp.bBattleType = strtoul(row[5], NULL, 10); if (row[6]) temp.bLevel = strtoul(row[6], NULL, 10); if (row[7]) temp.bSize = strtoul(row[7], NULL, 10); if (row[8]) temp.dwAIFlag = strtoul(row[8], NULL, 10); if (row[9]) temp.dwRaceFlag = strtoul(row[9], NULL, 10); if (row[10]) temp.dwImmuneFlag = strtoul(row[10], NULL, 10); if (row[11]) temp.bOnClickType = strtoul(row[11], NULL, 10); if (row[12]) temp.bEmpire = strtoul(row[12], NULL, 10); if (row[13]) temp.dwDropItemVnum = strtoul(row[13], NULL, 10); if (row[14]) temp.dwResurrectionVnum = strtoul(row[14], NULL, 10); if (row[15]) snprintf(temp.szFolder, 65, "%s", row[15]); if (row[16]) temp.bStr = strtoul(row[16], NULL, 10); if (row[17]) temp.bDex = strtoul(row[17], NULL, 10); if (row[18]) temp.bCon = strtoul(row[18], NULL, 10); if (row[19]) temp.bInt = strtoul(row[19], NULL, 10); if (row[20]) temp.dwDamageRange[0] = strtoul(row[20], NULL, 10); if (row[21]) temp.dwDamageRange[1] = strtoul(row[21], NULL, 10); if (row[22]) temp.dwMaxHP = strtoul(row[22], NULL, 10); if (row[23]) temp.bRegenCycle = strtoul(row[23], NULL, 10); if (row[24]) temp.bRegenPercent = strtoul(row[24], NULL, 10); if (row[25]) temp.dwExp = strtoul(row[25], NULL, 10); if (row[26]) temp.dwGoldMin = strtoul(row[26], NULL, 10); if (row[27]) temp.dwGoldMax = strtoul(row[27], NULL, 10); if (row[28]) temp.wDef = strtol(row[28], NULL, 10); if (row[29]) temp.sAttackSpeed = strtol(row[29], NULL, 10); if (row[30]) temp.sMovingSpeed = strtol(row[30], NULL, 10); if (row[31]) temp.bAggresiveHPPct = strtol(row[31], NULL, 10); if (row[32]) temp.wAggressiveSight = strtol(row[32], NULL, 10); if (row[33]) temp.wAttackRange = strtol(row[33], NULL, 10); if (row[34]) temp.dwPolymorphItemVnum = strtoul(row[34], NULL, 10); if (row[35]) temp.cEnchants[0] = strtol(row[35], NULL, 10); if (row[36]) temp.cEnchants[1] = strtol(row[36], NULL, 10); if (row[37]) temp.cEnchants[2] = strtol(row[37], NULL, 10); if (row[38]) temp.cEnchants[3] = strtol(row[38], NULL, 10); if (row[39]) temp.cEnchants[4] = strtol(row[39], NULL, 10); if (row[40]) temp.cEnchants[5] = strtol(row[40], NULL, 10); if (row[41]) temp.cResists[0] = strtol(row[41], NULL, 10); if (row[42]) temp.cResists[1] = strtol(row[42], NULL, 10); if (row[43]) temp.cResists[2] = strtol(row[43], NULL, 10); if (row[44]) temp.cResists[3] = strtol(row[44], NULL, 10); if (row[45]) temp.cResists[4] = strtol(row[45], NULL, 10); if (row[46]) temp.cResists[5] = strtol(row[46], NULL, 10); if (row[47]) temp.cResists[6] = strtol(row[47], NULL, 10); if (row[48]) temp.cResists[7] = strtol(row[48], NULL, 10); if (row[49]) temp.cResists[8] = strtol(row[49], NULL, 10); if (row[50]) temp.cResists[9] = strtol(row[50], NULL, 10); if (row[51]) temp.cResists[10] = strtol(row[51], NULL, 10); if (row[52]) temp.fDamMultiply = strtod(row[52], NULL); if (row[53]) temp.dwSummonVnum = strtoul(row[53], NULL, 10); if (row[54]) temp.dwDrainSP = strtoul(row[54], NULL, 10); if (row[55]) temp.Skills[0].dwVnum = strtoul(row[55], NULL, 10); if (row[56]) temp.Skills[0].bLevel = strtoul(row[56], NULL, 10); if (row[57]) temp.Skills[1].dwVnum = strtoul(row[57], NULL, 10); if (row[58]) temp.Skills[1].bLevel = strtoul(row[58], NULL, 10); if (row[59]) temp.Skills[2].dwVnum = strtoul(row[59], NULL, 10); if (row[60]) temp.Skills[2].bLevel = strtoul(row[60], NULL, 10); if (row[61]) temp.Skills[3].dwVnum = strtoul(row[61], NULL, 10); if (row[62]) temp.Skills[3].bLevel = strtoul(row[62], NULL, 10); if (row[63]) temp.Skills[4].dwVnum = strtoul(row[63], NULL, 10); if (row[64]) temp.Skills[4].bLevel = strtoul(row[64], NULL, 10); if (row[65]) temp.bBerserkPoint = strtoul(row[65], NULL, 10); if (row[66]) temp.bStoneSkinPoint = strtoul(row[66], NULL, 10); if (row[67]) temp.bGodSpeedPoint = strtoul(row[67], NULL, 10); if (row[68]) temp.bDeathBlowPoint = strtoul(row[68], NULL, 10); if (row[69]) temp.bRevivePoint = strtoul(row[69], NULL, 10); m_vec_mobTable.push_back(temp); } sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum()); std::cout << "CClientManager::InitializeMobTable:: " << m_vec_mobTable.size() << " mobs loaded." << std::endl; return true; } bool CClientManager::InitializeItemTable() { char query[4096]; snprintf(query, sizeof(query), "SELECT vnum, type, subtype, name, %s, 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%s ORDER BY vnum", g_stLocaleNameColumn.c_str(), GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); MYSQL_RES * pRes = pkMsg->Get()->pSQLResult; if (!pRes->row_count) { sys_err("no result from item_proto"); return false; } if (!m_vec_itemTable.empty()) { sys_log(0, "RELOAD: item_proto"); m_vec_itemTable.clear(); } MYSQL_ROW row; while ((row = mysql_fetch_row(pRes))) { SItemTable temp; memset(&temp, 0, sizeof(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; m_map_itemTableByVnum.clear(); std::vector<TItemTable>::iterator 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; } bool CClientManager::InitializeShopTable() { MYSQL_ROW data; int col; static const char * s_szQuery = "SELECT " "shop.vnum, " "shop.npc_vnum, " "shop_item.item_vnum, " "shop_item.count " "FROM shop LEFT JOIN shop_item " "ON shop.vnum = shop_item.shop_vnum ORDER BY shop.vnum, shop_item.item_vnum"; std::auto_ptr<SQLMsg> pkMsg2(CDBManager::instance().DirectQuery(s_szQuery)); // shop의 vnum은 있는데 shop_item 이 없을경우... 실패로 처리되니 주의 요망. // 고처야할부분 SQLResult * pRes2 = pkMsg2->Get(); if (!pRes2->uiNumRows) { sys_err("InitializeShopTable : Table count is zero."); return false; } std::map<int, TShopTable *> map_shop; if (m_pShopTable) { delete[](m_pShopTable); m_pShopTable = NULL; } TShopTable * shop_table = m_pShopTable; while ((data = mysql_fetch_row(pRes2->pSQLResult))) { col = 0; int iShopVnum = 0; str_to_number(iShopVnum, data[col++]); if (map_shop.end() == map_shop.find(iShopVnum)) { shop_table = new TShopTable; memset(shop_table, 0, sizeof(TShopTable)); shop_table->dwVnum = iShopVnum; map_shop[iShopVnum] = shop_table; } else shop_table = map_shop[iShopVnum]; str_to_number(shop_table->dwNPCVnum, data[col++]); if (!data[col]) // 아이템이 하나도 없으면 NULL이 리턴 되므로.. continue; TShopItemTable * pItem = &shop_table->items[shop_table->byItemCount]; str_to_number(pItem->vnum, data[col++]); str_to_number(pItem->count, data[col++]); ++shop_table->byItemCount; } m_pShopTable = new TShopTable[map_shop.size()]; m_iShopTableSize = map_shop.size(); typeof(map_shop.begin()) it = map_shop.begin(); int i = 0; while (it != map_shop.end()) { thecore_memcpy((m_pShopTable + i), (it++)->second, sizeof(TShopTable)); sys_log(0, "SHOP: #%d items: %d", (m_pShopTable + i)->dwVnum, (m_pShopTable + i)->byItemCount); ++i; } return true; } bool CClientManager::InitializeQuestItemTable() { using namespace std; static const char * s_szQuery = "SELECT vnum, name, %s FROM quest_item_proto ORDER BY vnum"; char query[1024]; snprintf(query, sizeof(query), s_szQuery, g_stLocaleNameColumn.c_str()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!pRes->uiNumRows) { sys_err("query error or no rows: %s", query); return false; } MYSQL_ROW row; while ((row = mysql_fetch_row(pRes->pSQLResult))) { int col = 0; TItemTable tbl; memset(&tbl, 0, sizeof(tbl)); str_to_number(tbl.dwVnum, row[col++]); if (row[col]) strlcpy(tbl.szName, row[col], sizeof(tbl.szName)); col++; if (row[col]) strlcpy(tbl.szLocaleName, row[col], sizeof(tbl.szLocaleName)); col++; if (m_map_itemTableByVnum.find(tbl.dwVnum) != m_map_itemTableByVnum.end()) { sys_err("QUEST_ITEM_ERROR! %lu vnum already exist! (name %s)", tbl.dwVnum, tbl.szLocaleName); continue; } tbl.bType = ITEM_QUEST; // quest_item_proto 테이블에 있는 것들은 모두 ITEM_QUEST 유형 tbl.bSize = 1; m_vec_itemTable.push_back(tbl); } return true; } bool CClientManager::InitializeSkillTable() { char query[4096]; snprintf(query, sizeof(query), "SELECT dwVnum, szName, bType, bMaxLevel, dwSplashRange, " "szPointOn, szPointPoly, szSPCostPoly, szDurationPoly, szDurationSPCostPoly, " "szCooldownPoly, szMasterBonusPoly, setFlag+0, setAffectFlag+0, " "szPointOn2, szPointPoly2, szDurationPoly2, setAffectFlag2+0, " "szPointOn3, szPointPoly3, szDurationPoly3, szGrandMasterAddSPCostPoly, " "bLevelStep, bLevelLimit, prerequisiteSkillVnum, prerequisiteSkillLevel, iMaxHit, szSplashAroundDamageAdjustPoly, eSkillType+0, dwTargetRange " "FROM skill_proto%s ORDER BY dwVnum", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!pRes->uiNumRows) { sys_err("no result from skill_proto"); return false; } if (!m_vec_skillTable.empty()) { sys_log(0, "RELOAD: skill_proto"); m_vec_skillTable.clear(); } m_vec_skillTable.reserve(pRes->uiNumRows); MYSQL_ROW data; int col; while ((data = mysql_fetch_row(pRes->pSQLResult))) { TSkillTable t; memset(&t, 0, sizeof(t)); col = 0; str_to_number(t.dwVnum, data[col++]); strlcpy(t.szName, data[col++], sizeof(t.szName)); str_to_number(t.bType, data[col++]); str_to_number(t.bMaxLevel, data[col++]); str_to_number(t.dwSplashRange, data[col++]); strlcpy(t.szPointOn, data[col++], sizeof(t.szPointOn)); strlcpy(t.szPointPoly, data[col++], sizeof(t.szPointPoly)); strlcpy(t.szSPCostPoly, data[col++], sizeof(t.szSPCostPoly)); strlcpy(t.szDurationPoly, data[col++], sizeof(t.szDurationPoly)); strlcpy(t.szDurationSPCostPoly, data[col++], sizeof(t.szDurationSPCostPoly)); strlcpy(t.szCooldownPoly, data[col++], sizeof(t.szCooldownPoly)); strlcpy(t.szMasterBonusPoly, data[col++], sizeof(t.szMasterBonusPoly)); str_to_number(t.dwFlag, data[col++]); str_to_number(t.dwAffectFlag, data[col++]); strlcpy(t.szPointOn2, data[col++], sizeof(t.szPointOn2)); strlcpy(t.szPointPoly2, data[col++], sizeof(t.szPointPoly2)); strlcpy(t.szDurationPoly2, data[col++], sizeof(t.szDurationPoly2)); str_to_number(t.dwAffectFlag2, data[col++]); // ADD_GRANDMASTER_SKILL strlcpy(t.szPointOn3, data[col++], sizeof(t.szPointOn3)); strlcpy(t.szPointPoly3, data[col++], sizeof(t.szPointPoly3)); strlcpy(t.szDurationPoly3, data[col++], sizeof(t.szDurationPoly3)); strlcpy(t.szGrandMasterAddSPCostPoly, data[col++], sizeof(t.szGrandMasterAddSPCostPoly)); // END_OF_ADD_GRANDMASTER_SKILL str_to_number(t.bLevelStep, data[col++]); str_to_number(t.bLevelLimit, data[col++]); str_to_number(t.preSkillVnum, data[col++]); str_to_number(t.preSkillLevel, data[col++]); str_to_number(t.lMaxHit, data[col++]); strlcpy(t.szSplashAroundDamageAdjustPoly, data[col++], sizeof(t.szSplashAroundDamageAdjustPoly)); str_to_number(t.bSkillAttrType, data[col++]); str_to_number(t.dwTargetRange, data[col++]); sys_log(0, "SKILL: #%d %s flag %u point %s affect %u cooldown %s", t.dwVnum, t.szName, t.dwFlag, t.szPointOn, t.dwAffectFlag, t.szCooldownPoly); m_vec_skillTable.push_back(t); } return true; } bool CClientManager::InitializeBanwordTable() { m_vec_banwordTable.clear(); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery("SELECT word FROM banword")); SQLResult * pRes = pkMsg->Get(); if (pRes->uiNumRows == 0) return true; MYSQL_ROW data; while ((data = mysql_fetch_row(pRes->pSQLResult))) { TBanwordTable t; if (data[0]) { strlcpy(t.szWord, data[0], sizeof(t.szWord)); m_vec_banwordTable.push_back(t); } } sys_log(0, "BANWORD: total %d", m_vec_banwordTable.size()); return true; } bool CClientManager::InitializeItemAttrTable() { char query[4096]; snprintf(query, sizeof(query), "SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear, costume, frysurexd FROM item_attr%s ORDER BY apply", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!pRes->uiNumRows) { sys_err("no result from item_attr"); return false; } if (!m_vec_itemAttrTable.empty()) { sys_log(0, "RELOAD: item_attr"); m_vec_itemAttrTable.clear(); } m_vec_itemAttrTable.reserve(pRes->uiNumRows); MYSQL_ROW data; while ((data = mysql_fetch_row(pRes->pSQLResult))) { TItemAttrTable t; memset(&t, 0, sizeof(TItemAttrTable)); int col = 0; strlcpy(t.szApply, data[col++], sizeof(t.szApply)); str_to_number(t.dwApplyIndex, data[col++]); str_to_number(t.dwProb, data[col++]); str_to_number(t.lValues[0], data[col++]); str_to_number(t.lValues[1], data[col++]); str_to_number(t.lValues[2], data[col++]); str_to_number(t.lValues[3], data[col++]); str_to_number(t.lValues[4], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_KOSTIUM_BODY], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_KOSTIUM_HEAD], data[col++]); m_vec_itemAttrTable.push_back(t); } return true; } bool CClientManager::InitializeItemRareTable() { char query[4096]; snprintf(query, sizeof(query), "SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear FROM item_attr_rare%s ORDER BY apply", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!pRes->uiNumRows) { sys_err("no result from item_attr_rare"); return false; } if (!m_vec_itemRareTable.empty()) { sys_log(0, "RELOAD: item_attr_rare"); m_vec_itemRareTable.clear(); } m_vec_itemRareTable.reserve(pRes->uiNumRows); MYSQL_ROW data; while ((data = mysql_fetch_row(pRes->pSQLResult))) { TItemAttrTable t; memset(&t, 0, sizeof(TItemAttrTable)); int col = 0; strlcpy(t.szApply, data[col++], sizeof(t.szApply)); str_to_number(t.dwApplyIndex, data[col++]); str_to_number(t.dwProb, data[col++]); str_to_number(t.lValues[0], data[col++]); str_to_number(t.lValues[1], data[col++]); str_to_number(t.lValues[2], data[col++]); str_to_number(t.lValues[3], data[col++]); str_to_number(t.lValues[4], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]); str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]); sys_log(0, "ITEM_RARE: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }", t.szApply, t.dwProb, t.lValues[0], t.lValues[1], t.lValues[2], t.lValues[3], t.lValues[4], t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]); m_vec_itemRareTable.push_back(t); } return true; } bool CClientManager::InitializeLandTable() { using namespace building; char query[4096]; snprintf(query, sizeof(query), "SELECT id, map_index, x, y, width, height, guild_id, guild_level_limit, price " "FROM land%s WHERE enable='YES' ORDER BY id", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!m_vec_kLandTable.empty()) { sys_log(0, "RELOAD: land"); m_vec_kLandTable.clear(); } m_vec_kLandTable.reserve(pRes->uiNumRows); MYSQL_ROW data; if (pRes->uiNumRows > 0) while ((data = mysql_fetch_row(pRes->pSQLResult))) { TLand t; memset(&t, 0, sizeof(t)); int col = 0; str_to_number(t.dwID, data[col++]); str_to_number(t.lMapIndex, data[col++]); str_to_number(t.x, data[col++]); str_to_number(t.y, data[col++]); str_to_number(t.width, data[col++]); str_to_number(t.height, data[col++]); str_to_number(t.dwGuildID, data[col++]); str_to_number(t.bGuildLevelLimit, data[col++]); str_to_number(t.dwPrice, data[col++]); sys_log(0, "LAND: %lu map %-4ld %7ldx%-7ld w %-4ld h %-4ld", t.dwID, t.lMapIndex, t.x, t.y, t.width, t.height); m_vec_kLandTable.push_back(t); } return true; } void parse_pair_number_string(const char * c_pszString, std::vector<std::pair<int, int> > & vec) { // format: 10,1/20,3/300,50 const char * t = c_pszString; const char * p = strchr(t, '/'); std::pair<int, int> k; char szNum[32 + 1]; char * comma; while (p) { if (isnhdigit(*t)) { strlcpy(szNum, t, MIN(sizeof(szNum), (p - t) + 1)); comma = strchr(szNum, ','); if (comma) { *comma = '\0'; str_to_number(k.second, comma + 1); } else k.second = 0; str_to_number(k.first, szNum); vec.push_back(k); } t = p + 1; p = strchr(t, '/'); } if (isnhdigit(*t)) { strlcpy(szNum, t, sizeof(szNum)); comma = strchr(const_cast<char*>(t), ','); if (comma) { *comma = '\0'; str_to_number(k.second, comma + 1); } else k.second = 0; str_to_number(k.first, szNum); vec.push_back(k); } } bool CClientManager::InitializeObjectProto() { using namespace building; char query[4096]; snprintf(query, sizeof(query), "SELECT vnum, price, materials, upgrade_vnum, upgrade_limit_time, life, reg_1, reg_2, reg_3, reg_4, npc, group_vnum, dependent_group " "FROM object_proto%s ORDER BY vnum", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!m_vec_kObjectProto.empty()) { sys_log(0, "RELOAD: object_proto"); m_vec_kObjectProto.clear(); } m_vec_kObjectProto.reserve(MAX(0, pRes->uiNumRows)); MYSQL_ROW data; if (pRes->uiNumRows > 0) while ((data = mysql_fetch_row(pRes->pSQLResult))) { TObjectProto t; memset(&t, 0, sizeof(t)); int col = 0; str_to_number(t.dwVnum, data[col++]); str_to_number(t.dwPrice, data[col++]); std::vector<std::pair<int, int> > vec; parse_pair_number_string(data[col++], vec); for (unsigned int i = 0; i < OBJECT_MATERIAL_MAX_NUM && i < vec.size(); ++i) { std::pair<int, int> & r = vec[i]; t.kMaterials[i].dwItemVnum = r.first; t.kMaterials[i].dwCount = r.second; } str_to_number(t.dwUpgradeVnum, data[col++]); str_to_number(t.dwUpgradeLimitTime, data[col++]); str_to_number(t.lLife, data[col++]); str_to_number(t.lRegion[0], data[col++]); str_to_number(t.lRegion[1], data[col++]); str_to_number(t.lRegion[2], data[col++]); str_to_number(t.lRegion[3], data[col++]); // ADD_BUILDING_NPC str_to_number(t.dwNPCVnum, data[col++]); str_to_number(t.dwGroupVnum, data[col++]); str_to_number(t.dwDependOnGroupVnum, data[col++]); t.lNPCX = 0; t.lNPCY = MAX(t.lRegion[1], t.lRegion[3]) + 300; // END_OF_ADD_BUILDING_NPC sys_log(0, "OBJ_PROTO: vnum %lu price %lu mat %lu %lu", t.dwVnum, t.dwPrice, t.kMaterials[0].dwItemVnum, t.kMaterials[0].dwCount); m_vec_kObjectProto.push_back(t); } return true; } bool CClientManager::InitializeObjectTable() { using namespace building; char query[4096]; snprintf(query, sizeof(query), "SELECT id, land_id, vnum, map_index, x, y, x_rot, y_rot, z_rot, life FROM object%s ORDER BY id", GetTablePostfix()); std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query)); SQLResult * pRes = pkMsg->Get(); if (!m_map_pkObjectTable.empty()) { sys_log(0, "RELOAD: object"); m_map_pkObjectTable.clear(); } MYSQL_ROW data; if (pRes->uiNumRows > 0) while ((data = mysql_fetch_row(pRes->pSQLResult))) { TObject * k = new TObject; memset(k, 0, sizeof(TObject)); int col = 0; str_to_number(k->dwID, data[col++]); str_to_number(k->dwLandID, data[col++]); str_to_number(k->dwVnum, data[col++]); str_to_number(k->lMapIndex, data[col++]); str_to_number(k->x, data[col++]); str_to_number(k->y, data[col++]); str_to_number(k->xRot, data[col++]); str_to_number(k->yRot, data[col++]); str_to_number(k->zRot, data[col++]); str_to_number(k->lLife, data[col++]); sys_log(0, "OBJ: %lu vnum %lu map %-4ld %7ldx%-7ld life %ld", k->dwID, k->dwVnum, k->lMapIndex, k->x, k->y, k->lLife); m_map_pkObjectTable.insert(std::make_pair(k->dwID, k)); } return true; } bool CClientManager::InitializeMonarch() { CMonarch::instance().LoadMonarch(); return true; } bool CClientManager::MirrorMobTableIntoDB() { for (itertype(m_vec_mobTable) it = m_vec_mobTable.begin(); it != m_vec_mobTable.end(); it++) { const TMobTable& t = *it; char query[4096]; if (g_stLocaleNameColumn == "name") { snprintf(query, sizeof(query), "replace into mob_proto%s " "(" "vnum, name, type, rank, battle_type, level, size, ai_flag, setRaceFlag, setImmuneFlag, " "on_click, empire, drop_item, resurrection_vnum, folder, " "st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, " "gold_min, gold_max, def, attack_speed, move_speed, aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, " "enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, " "resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, " "resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, " "dam_multiply, summon, drain_sp, " "skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2, " "skill_vnum3, skill_level3, skill_vnum4, skill_level4, " "sp_berserk, sp_stoneskin, sp_godspeed, sp_deathblow, sp_revive" ") " "values (" "%d, \"%s\", %d, %d, %d, %d, %d, %u, %u, %u, " "%d, %d, %d, %d, '%s', " "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, " "%f, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, " "%d, %d, %d, %d, %d" ")", GetTablePostfix(), /*g_stLocaleNameColumn.c_str(),*/ t.dwVnum, t.szName, /*t.szLocaleName, */t.bType, t.bRank, t.bBattleType, t.bLevel, t.bSize, t.dwAIFlag, t.dwRaceFlag, t.dwImmuneFlag, t.bOnClickType, t.bEmpire, t.dwDropItemVnum, t.dwResurrectionVnum, t.szFolder, t.bStr, t.bDex, t.bCon, t.bInt, t.dwDamageRange[0], t.dwDamageRange[1], t.dwMaxHP, t.bRegenCycle, t.bRegenPercent, t.dwExp, t.dwGoldMin, t.dwGoldMax, t.wDef, t.sAttackSpeed, t.sMovingSpeed, t.bAggresiveHPPct, t.wAggressiveSight, t.wAttackRange, t.dwPolymorphItemVnum, t.cEnchants[0], t.cEnchants[1], t.cEnchants[2], t.cEnchants[3], t.cEnchants[4], t.cEnchants[5], t.cResists[0], t.cResists[1], t.cResists[2], t.cResists[3], t.cResists[4], t.cResists[5], t.cResists[6], t.cResists[7], t.cResists[8], t.cResists[9], t.cResists[10], t.fDamMultiply, t.dwSummonVnum, t.dwDrainSP, t.Skills[0].dwVnum, t.Skills[0].bLevel, t.Skills[1].dwVnum, t.Skills[1].bLevel, t.Skills[2].dwVnum, t.Skills[2].bLevel, t.Skills[3].dwVnum, t.Skills[3].bLevel, t.Skills[4].dwVnum, t.Skills[4].bLevel, t.bBerserkPoint, t.bStoneSkinPoint, t.bGodSpeedPoint, t.bDeathBlowPoint, t.bRevivePoint ); } else { snprintf(query, sizeof(query), "replace into mob_proto%s " "(" "vnum, name, %s, type, rank, battle_type, level, size, ai_flag, setRaceFlag, setImmuneFlag, " "on_click, empire, drop_item, resurrection_vnum, folder, " "st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, " "gold_min, gold_max, def, attack_speed, move_speed, aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, " "enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, " "resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, " "resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, " "dam_multiply, summon, drain_sp, " "skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2, " "skill_vnum3, skill_level3, skill_vnum4, skill_level4, " "sp_berserk, sp_stoneskin, sp_godspeed, sp_deathblow, sp_revive" ") " "values (" "%d, \"%s\", \"%s\", %d, %d, %d, %d, %d, %u, %u, %u, " "%d, %d, %d, %d, '%s', " "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, " "%f, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, " "%d, %d, %d, %d, %d" ")", GetTablePostfix(), g_stLocaleNameColumn.c_str(), t.dwVnum, t.szName, t.szLocaleName, t.bType, t.bRank, t.bBattleType, t.bLevel, t.bSize, t.dwAIFlag, t.dwRaceFlag, t.dwImmuneFlag, t.bOnClickType, t.bEmpire, t.dwDropItemVnum, t.dwResurrectionVnum, t.szFolder, t.bStr, t.bDex, t.bCon, t.bInt, t.dwDamageRange[0], t.dwDamageRange[1], t.dwMaxHP, t.bRegenCycle, t.bRegenPercent, t.dwExp, t.dwGoldMin, t.dwGoldMax, t.wDef, t.sAttackSpeed, t.sMovingSpeed, t.bAggresiveHPPct, t.wAggressiveSight, t.wAttackRange, t.dwPolymorphItemVnum, t.cEnchants[0], t.cEnchants[1], t.cEnchants[2], t.cEnchants[3], t.cEnchants[4], t.cEnchants[5], t.cResists[0], t.cResists[1], t.cResists[2], t.cResists[3], t.cResists[4], t.cResists[5], t.cResists[6], t.cResists[7], t.cResists[8], t.cResists[9], t.cResists[10], t.fDamMultiply, t.dwSummonVnum, t.dwDrainSP, t.Skills[0].dwVnum, t.Skills[0].bLevel, t.Skills[1].dwVnum, t.Skills[1].bLevel, t.Skills[2].dwVnum, t.Skills[2].bLevel, t.Skills[3].dwVnum, t.Skills[3].bLevel, t.Skills[4].dwVnum, t.Skills[4].bLevel, t.bBerserkPoint, t.bStoneSkinPoint, t.bGodSpeedPoint, t.bDeathBlowPoint, t.bRevivePoint ); } CDBManager::instance().AsyncQuery(query); } return true; } bool CClientManager::MirrorItemTableIntoDB() { for (itertype(m_vec_itemTable) it = m_vec_itemTable.begin(); it != m_vec_itemTable.end(); it++) { if (g_stLocaleNameColumn != "name") { const TItemTable& t = *it; char query[4096]; snprintf(query, sizeof(query), "replace into item_proto%s (" "vnum, type, subtype, name, %s, gold, shop_buy_price, weight, size, " "flag, wearflag, antiflag, immuneflag, " "refined_vnum, refine_set, magic_pct, socket_pct, addon_type, specular," "limittype0, limitvalue0, limittype1, limitvalue1, " "applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, " "value0, value1, value2, value3, value4, value5 ) " "values (" "%d, %d, %d, \"%s\", \"%s\", %d, %d, %d, %d, " "%d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d )", GetTablePostfix(), g_stLocaleNameColumn.c_str(), t.dwVnum, t.bType, t.bSubType, t.szName, t.szLocaleName, t.dwGold, t.dwShopBuyPrice, t.bWeight, t.bSize, t.dwFlags, t.dwWearFlags, t.dwAntiFlags, t.dwImmuneFlag, t.dwRefinedVnum, t.wRefineSet, t.bAlterToMagicItemPct, t.bGainSocketPct, t.sAddonType, t.bSpecular, t.aLimits[0].bType, t.aLimits[0].lValue, t.aLimits[1].bType, t.aLimits[1].lValue, t.aApplies[0].bType, t.aApplies[0].lValue, t.aApplies[1].bType, t.aApplies[1].lValue, t.aApplies[2].bType, t.aApplies[2].lValue, t.alValues[0], t.alValues[1], t.alValues[2], t.alValues[3], t.alValues[4], t.alValues[5]); CDBManager::instance().AsyncQuery(query); } else { const TItemTable& t = *it; char query[4096]; snprintf(query, sizeof(query), "replace into item_proto%s (" "vnum, type, subtype, name, gold, shop_buy_price, weight, size, " "flag, wearflag, antiflag, immuneflag, " "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 ) " "values (" "%d, %d, %d, \"%s\", %d, %d, %d, %d, " "%d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d )", GetTablePostfix(), t.dwVnum, t.bType, t.bSubType, t.szName, t.dwGold, t.dwShopBuyPrice, t.bWeight, t.bSize, t.dwFlags, t.dwWearFlags, t.dwAntiFlags, t.dwImmuneFlag, t.dwRefinedVnum, t.wRefineSet, t.bAlterToMagicItemPct, t.bGainSocketPct, t.sAddonType, t.bSpecular, t.aLimits[0].bType, t.aLimits[0].lValue, t.aLimits[1].bType, t.aLimits[1].lValue, t.aApplies[0].bType, t.aApplies[0].lValue, t.aApplies[1].bType, t.aApplies[1].lValue, t.aApplies[2].bType, t.aApplies[2].lValue, t.alValues[0], t.alValues[1], t.alValues[2], t.alValues[3], t.alValues[4], t.alValues[5]); CDBManager::instance().AsyncQuery(query); } } return true; }
  3. Have a problem that a column (specular) in the database after reload p or reboot is reset to 0, anyone has any idea how I can change that? Have already tried a lot in the ClientManagerBoot.cpp but nothing worked
  4. I have a problem that shining from the weapon you can see but it does not go after pulling out the weapon anymore can anyone help? Code: UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) { DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(),CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM; switch (pItem->GetType()) { case CItemData::ITEM_TYPE_WEAPON: __ClearWeaponRefineEffect(); if (pItem->GetSubType() == CItemData::WEAPON_SWORD) { //NEW WEAPON - [New Effect] - NEW WEAPON DWORD vnum = pItem->GetIndex(); if (vnum == 899 || vnum == 799 || vnum == 999 || vnum == 399 || vnum == 499 || vnum == 599 || vnum == 699) { __AttachEffect(EFFECT_REFINED + EFFECT_SWORD_SPECIAL3); // effect 22 NEW EFFECT }__ClearWeaponRefineEffect(); //End NEW ARMOR - [New Effect] - NEW ARMOR } if (refine < 6) //ÇöÀç Á¦·Ãµµ 6 ÀÌ»ó¸¸ ÀÌÆåÆ®°¡ ÀÖ½À´Ï´Ù. return 0; switch (pItem->GetSubType()) { case CItemData::WEAPON_DAGGER: m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED7 + refine - 7; m_swordRefineEffectLeft = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED7_LEFT + refine - 7; break; case CItemData::WEAPON_FAN: m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_FANBELL_REFINED7 + refine - 7; break; case CItemData::WEAPON_ARROW: case CItemData::WEAPON_BELL: m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED7 + refine - 7; break; case CItemData::WEAPON_BOW: m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_BOW_REFINED7 + refine - 7; break; default: m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED7 + refine - 7; } if (m_swordRefineEffectRight) m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight); if (m_swordRefineEffectLeft) m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft); break; case CItemData::ITEM_TYPE_ARMOR: __ClearArmorRefineEffect(); // °©¿Ê Ưȭ ÀÌÆåÆ® if (pItem->GetSubType() == CItemData::ARMOR_BODY) { DWORD vnum = pItem->GetIndex(); // color armors [blue shining] - DEFAULT if (vnum >= 12010 && vnum <= 12019 || //Blaustahlpanzer vnum >= 12020 && vnum <= 12029 || //Blauer Drachenanzug vnum >= 12030 && vnum <= 12039 || //Auraplattenpanzer vnum >= 12040 && vnum <= 12049) //Kleidung des Drachen { __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL); //effect 19 bubble __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL2); //effect 20 blue shining } //Beginning NEW ARMOR - [New Effect] - NEW ARMOR if (vnum == 42010 || vnum == 42110 || vnum == 42210 || vnum == 42310 || vnum == 00000 || vnum == 00000 || vnum == 00000 || vnum == 00000) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_NEW_SPECIAL3); //effect 21 NEW EFFECT }__ClearWeaponRefineEffect();
  5. I mean where i can add there the Code for Startup.. :l Like: #define ENABLE_ARGUMENT_STARTUP //Enable or disable this if you want startup with a code #define ENABLE_ARGUMENT_POPUP //Enable this if you want that a popup will be showed, disable it for silent exit #define ARGUMENT_PATCHER_NAME "Patcher.exe" #define ARGUMENT_STARTUP "--denexistk1ngya3" Now the Patcher need the "--denexistk1ngya" Where i need to paste that? Edit: Sorry i have understand it now. thank you very much!
  6. How to make the Patcher for the Startup with a code? private void StartGame() { this.AddTextToList("Das Spiel wird gestartet.\r\n"); Process proc = new Process(); proc.StartInfo.FileName = Config.BinaryName; proc.StartInfo.UseShellExecute = false; try { proc.Start(); } catch { MessageBox.Show(String.Format("Die Datei {0} existiert nicht.", Config.BinaryName), "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } config: public const string BinaryName = "metin2client.exe";
  7. Anyone knows how to make a Startup with a code, when the code not extis (patcher) the binary not started?
  8. Can anyone upload it on a other Hoster? Mega have a 6gb trafic..
  9. LNK1104: cannot open file 'libboost_filesystem-vc100-mt-s-1_43.lib'' I became that Error when im try to compile the Binary, can anyone help me pls?
  10. Sysser Login: SYSERR: Jun 30 11:36:06 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:06 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:06 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:06 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:06 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:07 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:07 :: Analyze: Handshake phase does not handle packet 67 (fd 16) SYSERR: Jun 30 11:36:07 :: Process: SEQUENCE 28d6d400 mismatch 0x13 != 0x4e header 67 SYSERR: Jun 30 11:36:07 :: Process: SEQUENCE_LOG [UNKNOWN]------------- [067 : 0x13] SYSERR: Jun 30 11:36:07 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:09 :: Analyze: Handshake phase does not handle packet 67 (fd 15) SYSERR: Jun 30 11:36:09 :: Process: SEQUENCE 28d6d400 mismatch 0x13 != 0x4e header 67 SYSERR: Jun 30 11:36:09 :: Process: SEQUENCE_LOG [UNKNOWN]------------- [067 : 0x13] SYSERR: Jun 30 11:36:10 :: socket_accept: accept: Software caused connection abort (fd 12) SYSERR: Jun 30 11:36:11 :: Analyze: Handshake phase does not handle packet 67 (fd 15) SYSERR: Jun 30 11:36:11 :: Process: SEQUENCE 28d6d000 mismatch 0x13 != 0x4e header 67 SYSERR: Jun 30 11:36:11 :: Process: SEQUENCE_LOG [UNKNOWN]------------- [067 : 0x13] SYSERR: Jun 30 11:36:11 :: Analyze: Handshake phase does not handle packet 67 (fd 15) SYSERR: Jun 30 11:36:11 :: Process: SEQUENCE 28d6d000 mismatch 0x13 != 0x4e header 67 SYSERR: Jun 30 11:36:11 :: Process: SEQUENCE_LOG [UNKNOWN]------------- [067 : 0x13] SYSERR: Jun 30 11:36:13 :: socket_accept: accept: Software caused connection abort (fd 12) syslog was about a lot of connections from same addres... any people know about that ?
  11. Search Homepage Coder for Money! Suche Homepage Coder gegen bezahlung! Skype: -EDIT-
  12. Anybody know that Problem to warp back with mount? And know how to fix that in source?
  13. I have same Problem People Crash my db Server and authPuttty says then connection refused
  14. game source compile dont change files?! Its compile without changes?!
  15. I have fix the sql injection, but my player table has deletet.. pls help mee in skype!! SKYPE: -EDIT-
  16. I dont want to change the bin, did you know a other working method?
  17. My NetworkStreeam looks like: strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1); strncpy(kVersionPacket.timestamp, "LINE_3", sizeof(kVersionPacket.timestamp)-1); Whats this? Can you add me skype pls: rikyu.elitepvpers
  18. Can any body help me.. i have compl. the game.. But the cores not starting..
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.