Search the Community

Showing results for tags 'log'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Announcements
    • Feedback
  • Metin2
    • General
    • Questions and Answers
    • Frequently Asked Questions
    • Guides & HowTo
    • Design
    • Private Servers
    • Services
    • Videos
  • Releases
    • General
    • Tools
    • Programming / Scripts
    • Quests
    • Binaries & Clients/Serverfiles
    • 3D Models
    • 2D Graphics
    • Operating Systems
  • Safe Zone
    • Offtopic
    • Games Talk
    • Music/Videos/Art
  • D:\YMIR WORK\'s Topics

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website URL


Discord


Skype


ICQ


Yahoo


Location

Found 8 results

  1. I have an autopacher which works fine but i need to change pack files. So i get source files and built a new exe. Then i will make a new autopacher. But i'm getting this LOG error if I use new built client. I didnt find any problem on the lines which it says. Anyone can help me?
  2. For starters hello! I'd like to be able to hide the Shop Search Icon and 2 I have a problem with vouchers ... that is, I want to save myself in the log table from navicat the code looks like this: char.cpp bool CHARACTER::SetCoins(long coins) { SQLMsg *msg; msg = DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins + '%ld' WHERE id = '%d'", coins, GetAID()); if (msg->uiSQLErrno != 0) { sys_err("[MD] Nu pot fi predate!(a aparut o eroare)"); return false; } return true; } char_item.cpp switch (item->GetVnum()) { //Vnums case 80014: // 100 DR/Coins case 80015: // 500 DR/Coins case 80016: // 1000 DR/Coins case 80017: // 50 DR/Coins int idx[4]; idx[0] = 100; idx[1] = 500; idx[2] = 1000; idx[3] = 50; int idax; if (item->GetVnum() == 80014) idax = 0; if (item->GetVnum() == 80015) idax = 1; if (item->GetVnum() == 80016) idax = 2; if (item->GetVnum() == 80017) idax = 3; long val; val = idx[idax]; if (SetCoins(val)) { ChatPacket(CHAT_TYPE_INFO, "Ai Primit %ld Monede Dragon.", val); // {0} item->SetCount(item->GetCount() - 1); } else { ChatPacket(CHAT_TYPE_INFO, "A aparut o eroare. Contactati administratorul."); } return 1; break; default: break; } my table log tables voucher_log Target Server Type : MYSQL Target Server Version : 50533 File Encoding : 65001 Date: 2018-02-10 16:01:15 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for voucher_log -- ---------------------------- DROP TABLE IF EXISTS `voucher_log`; CREATE TABLE `voucher_log` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `account_id` int(10) unsigned NOT NULL, `item_vnum` int(11) NOT NULL, `coins` int(10) unsigned NOT NULL, `data` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of voucher_log -- ---------------------------- Sorry for my bad English
  3. Balgram

    open DB_ERROR_LOG

    Hello, please help me to clean DB_ERROR_LOG.txt DB_ERROR_LOG.txt ClientManagerBoot.cpp: In member function 'bool CClientManager::InitializeMobTable()': ClientManagerBoot.cpp:402: warning: statement has no effect ClientManagerBoot.cpp: In member function 'bool CClientManager::InitializeItemTable()': ClientManagerBoot.cpp:703: warning: unused variable 'testValue' ProtoReader.cpp: In function 'int get_Item_SubType_Value(int, std::string)': ProtoReader.cpp:204: warning: comparison between signed and unsigned integer expressions ProtoReader.cpp:207: warning: comparison between signed and unsigned integer expressions ClientManagerBoot.cpp // 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() { //================== 함수 설명 ==================// //1. 요약 : 'mob_proto.txt', 'mob_proto_test.txt', 'mob_names.txt' 파일을 읽고, // (!)[mob_table] 테이블 오브젝트를 생성한다. (타입 : TMobTable) //2. 순서 // 1) 'mob_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다. // 2) 'mob_proto_test.txt'파일과 (a)[localMap] 맵으로 // (b)[test_map_mobTableByVnum](vnum:TMobTable) 맵을 생성한다. // 3) 'mob_proto.txt' 파일과 (a)[localMap] 맵으로 // (!)[mob_table] 테이블을 만든다. // <참고> // 각 row 들 중, // (b)[test_map_mobTableByVnum],(!)[mob_table] 모두에 있는 row는 // (b)[test_map_mobTableByVnum]의 것을 사용한다. // 4) (b)[test_map_mobTableByVnum]의 row중, (!)[mob_table]에 없는 것을 추가한다. //3. 테스트 // 1)'mob_proto.txt' 정보가 mob_table에 잘 들어갔는지. -> 완료 // 2)'mob_names.txt' 정보가 mob_table에 잘 들어갔는지. // 3)'mob_proto_test.txt' 에서 [겹치는] 정보가 mob_table 에 잘 들어갔는지. // 4)'mob_proto_test.txt' 에서 [새로운] 정보가 mob_table 에 잘 들어갔는지. // 5) (최종) 게임 클라이언트에서 제대로 작동 하는지. //_______________________________________________// //===============================================// // 1) 'mob_names.txt' 파일을 읽어서 (a)[localMap] 맵을 만든다. //<(a)localMap 맵 생성> map<int,const char*> localMap; bool isNameFile = true; //<파일 읽기> cCsvTable nameData; if(!nameData.Load("mob_names.txt",'\t')) { fprintf(stderr, "mob_names.txt 파일을 읽어오지 못했습니다\n"); isNameFile = false; } else { nameData.Next(); //설명row 생략. while(nameData.Next()) { localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1); } } //________________________________________________// //===============================================// // 2) 'mob_proto_test.txt'파일과 (a)localMap 맵으로 // (b)[test_map_mobTableByVnum](vnum:TMobTable) 맵을 생성한다. //0. set<int> vnumSet; //테스트용 파일 데이터중, 신규여부 확인에 사용. //1. 파일 읽어오기 bool isTestFile = true; cCsvTable test_data; if(!test_data.Load("mob_proto_test.txt",'\t')) { fprintf(stderr, "테스트 파일이 없습니다. 그대로 진행합니다.\n"); isTestFile = false; } //2. (c)[test_map_mobTableByVnum](vnum:TMobTable) 맵 생성. map<DWORD, TMobTable *> test_map_mobTableByVnum; if (isTestFile) { test_data.Next(); //설명 로우 넘어가기. //ㄱ. 테스트 몬스터 테이블 생성. TMobTable * test_mob_table = NULL; int test_MobTableSize = test_data.m_File.GetRowCount()-1; test_mob_table = new TMobTable[test_MobTableSize]; memset(test_mob_table, 0, sizeof(TMobTable) * test_MobTableSize); //ㄴ. 테스트 몬스터 테이블에 값을 넣고, 맵에까지 넣기. while(test_data.Next()) { if (!Set_Proto_Mob_Table(test_mob_table, test_data, localMap)) { fprintf(stderr, "몹 프로토 테이블 셋팅 실패.\n"); } test_map_mobTableByVnum.insert(std::map<DWORD, TMobTable *>::value_type(test_mob_table->dwVnum, test_mob_table)); ++test_mob_table; } } // 3) 'mob_proto.txt' 파일과 (a)[localMap] 맵으로 // (!)[mob_table] 테이블을 만든다. // <참고> // 각 row 들 중, // (b)[test_map_mobTableByVnum],(!)[mob_table] 모두에 있는 row는 // (b)[test_map_mobTableByVnum]의 것을 사용한다. //1. 파일 읽기. cCsvTable data; if(!data.Load("mob_proto.txt",'\t')) { fprintf(stderr, "mob_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } data.Next(); //설명 row 넘어가기 //2. (!)[mob_table] 생성하기 //2.1 새로 추가되는 갯수를 파악 int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); std::map<DWORD, TMobTable *>::iterator it_map_mobTable; it_map_mobTable = test_map_mobTableByVnum.find(vnum); if(it_map_mobTable != test_map_mobTableByVnum.end()) { addNumber++; } } //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;) data.Destroy(); if(!data.Load("mob_proto.txt",'\t')) { fprintf(stderr, "mob_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) //2.2 크기에 맞게 mob_table 생성 if (!m_vec_mobTable.empty()) { sys_log(0, "RELOAD: mob_proto"); m_vec_mobTable.clear(); } m_vec_mobTable.resize(data.m_File.GetRowCount()-1 + addNumber); memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size()); TMobTable * mob_table = &m_vec_mobTable[0]; //2.3 데이터 채우기 while (data.Next()) { int col = 0; //(b)[test_map_mobTableByVnum]에 같은 row가 있는지 조사. bool isSameRow = true; std::map<DWORD, TMobTable *>::iterator it_map_mobTable; it_map_mobTable = test_map_mobTableByVnum.find(atoi(data.AsStringByIndex(col))); if(it_map_mobTable == test_map_mobTableByVnum.end()) { isSameRow = false; } //같은 row 가 있으면 (b)에서 읽어온다. if(isSameRow) { TMobTable *tempTable = it_map_mobTable->second; mob_table->dwVnum = tempTable->dwVnum; strlcpy(mob_table->szName, tempTable->szName, sizeof(tempTable->szName)); strlcpy(mob_table->szLocaleName, tempTable->szLocaleName, sizeof(tempTable->szName)); mob_table->bRank = tempTable->bRank; mob_table->bType = tempTable->bType; mob_table->bBattleType = tempTable->bBattleType; mob_table->bLevel = tempTable->bLevel; mob_table->bSize = tempTable->bSize; mob_table->dwAIFlag = tempTable->dwAIFlag; mob_table->dwRaceFlag = tempTable->dwRaceFlag; mob_table->dwImmuneFlag = tempTable->dwImmuneFlag; mob_table->bEmpire = tempTable->bEmpire; strlcpy(mob_table->szFolder, tempTable->szFolder, sizeof(tempTable->szName)); mob_table->bOnClickType = tempTable->bOnClickType; mob_table->bStr = tempTable->bStr; mob_table->bDex = tempTable->bDex; mob_table->bCon = tempTable->bCon; mob_table->bInt = tempTable->bInt; mob_table->dwDamageRange[0] = tempTable->dwDamageRange[0]; mob_table->dwDamageRange[1] = tempTable->dwDamageRange[1]; mob_table->dwMaxHP = tempTable->dwMaxHP; mob_table->bRegenCycle = tempTable->bRegenCycle; mob_table->bRegenPercent = tempTable->bRegenPercent; mob_table->dwGoldMin = tempTable->dwGoldMin; mob_table->dwGoldMax = tempTable->dwGoldMax; mob_table->dwExp = tempTable->dwExp; mob_table->wDef = tempTable->wDef; mob_table->sAttackSpeed = tempTable->sAttackSpeed; mob_table->sMovingSpeed = tempTable->sMovingSpeed; mob_table->bAggresiveHPPct = tempTable->bAggresiveHPPct; mob_table->wAggressiveSight = tempTable->wAggressiveSight; mob_table->wAttackRange = tempTable->wAttackRange; mob_table->dwDropItemVnum = tempTable->dwDropItemVnum; mob_table->dwResurrectionVnum = tempTable->dwResurrectionVnum; for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i) mob_table->cEnchants[i] = tempTable->cEnchants[i]; for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i) mob_table->cResists[i] = tempTable->cResists[i]; mob_table->fDamMultiply = tempTable->fDamMultiply; mob_table->dwSummonVnum = tempTable->dwSummonVnum; mob_table->dwDrainSP = tempTable->dwDrainSP; mob_table->dwPolymorphItemVnum = tempTable->dwPolymorphItemVnum; mob_table->Skills[0].bLevel = tempTable->Skills[0].bLevel; mob_table->Skills[0].dwVnum = tempTable->Skills[0].dwVnum; mob_table->Skills[1].bLevel = tempTable->Skills[1].bLevel; mob_table->Skills[1].dwVnum = tempTable->Skills[1].dwVnum; mob_table->Skills[2].bLevel = tempTable->Skills[2].bLevel; mob_table->Skills[2].dwVnum = tempTable->Skills[2].dwVnum; mob_table->Skills[3].bLevel = tempTable->Skills[3].bLevel; mob_table->Skills[3].dwVnum = tempTable->Skills[3].dwVnum; mob_table->Skills[4].bLevel = tempTable->Skills[4].bLevel; mob_table->Skills[4].dwVnum = tempTable->Skills[4].dwVnum; mob_table->bBerserkPoint = tempTable->bBerserkPoint; mob_table->bStoneSkinPoint = tempTable->bStoneSkinPoint; mob_table->bGodSpeedPoint = tempTable->bGodSpeedPoint; mob_table->bDeathBlowPoint = tempTable->bDeathBlowPoint; mob_table->bRevivePoint = tempTable->bRevivePoint; } else { if (!Set_Proto_Mob_Table(mob_table, data, localMap)) { fprintf(stderr, "몹 프로토 테이블 셋팅 실패.\n"); } } //셋에 vnum 추가 vnumSet.insert(mob_table->dwVnum); 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); ++mob_table; } //_____________________________________________________// // 4) (b)[test_map_mobTableByVnum]의 row중, (!)[mob_table]에 없는 것을 추가한다. //파일 다시 읽어오기. test_data.Destroy(); isTestFile = true; test_data; if(!test_data.Load("mob_proto_test.txt",'\t')) { fprintf(stderr, "테스트 파일이 없습니다. 그대로 진행합니다.\n"); isTestFile = false; } if(isTestFile) { test_data.Next(); //설명 로우 넘어가기. while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다. { //중복되는 부분이면 넘어간다. set<int>::iterator itVnum; itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0))); if (itVnum != vnumSet.end()) { continue; } if (!Set_Proto_Mob_Table(mob_table, test_data, localMap)) { fprintf(stderr, "몹 프로토 테이블 셋팅 실패.\n"); } 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); ++mob_table; } } sort(m_vec_mobTable.begin(), m_vec_mobTable.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::InitializeItemTable() { //================== 함수 설명 ==================// //1. 요약 : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' 파일을 읽고, // <item_table>(TItemTable), <m_map_itemTableByVnum> 오브젝트를 생성한다. //2. 순서 // 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다. // 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로 // (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다. // 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로 // (!)[item_table], <m_map_itemTableByVnum>을 만든다. // <참고> // 각 row 들 중, // (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는 // (b)[test_map_itemTableByVnum]의 것을 사용한다. // 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다. //3. 테스트 // 1)'item_proto.txt' 정보가 item_table에 잘 들어갔는지. -> 완료 // 2)'item_names.txt' 정보가 item_table에 잘 들어갔는지. // 3)'item_proto_test.txt' 에서 [겹치는] 정보가 item_table 에 잘 들어갔는지. // 4)'item_proto_test.txt' 에서 [새로운] 정보가 item_table 에 잘 들어갔는지. // 5) (최종) 게임 클라이언트에서 제대로 작동 하는지. //_______________________________________________// //=================================================================================// // 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다. //=================================================================================// bool isNameFile = true; map<int,const char*> localMap; cCsvTable nameData; if(!nameData.Load("item_names.txt",'\t')) { fprintf(stderr, "item_names.txt 파일을 읽어오지 못했습니다\n"); isNameFile = false; } else { nameData.Next(); while(nameData.Next()) { localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1); } } //_________________________________________________________________// //=================================================================// // 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로 // (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다. //=================================================================// map<DWORD, TItemTable *> test_map_itemTableByVnum; //1. 파일 읽어오기. cCsvTable test_data; if(!test_data.Load("item_proto_test.txt",'\t')) { fprintf(stderr, "item_proto_test.txt 파일을 읽어오지 못했습니다\n"); //return false; } else { test_data.Next(); //설명 로우 넘어가기. //2. 테스트 아이템 테이블 생성. TItemTable * test_item_table = NULL; int test_itemTableSize = test_data.m_File.GetRowCount()-1; test_item_table = new TItemTable[test_itemTableSize]; memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize); //3. 테스트 아이템 테이블에 값을 넣고, 맵에까지 넣기. while(test_data.Next()) { if (!Set_Proto_Item_Table(test_item_table, test_data, localMap)) { fprintf(stderr, "아이템 프로토 테이블 셋팅 실패.\n"); } test_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(test_item_table->dwVnum, test_item_table)); test_item_table++; } } //______________________________________________________________________// //========================================================================// // 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로 // (!)[item_table], <m_map_itemTableByVnum>을 만든다. // <참고> // 각 row 들 중, // (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는 // (b)[test_map_itemTableByVnum]의 것을 사용한다. //========================================================================// //vnum들을 저장할 셋. 새로운 테스트 아이템을 판별할때 사용된다. set<int> vnumSet; //파일 읽어오기. cCsvTable data; if(!data.Load("item_proto.txt",'\t')) { fprintf(stderr, "item_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) if (!m_vec_itemTable.empty()) { sys_log(0, "RELOAD: item_proto"); m_vec_itemTable.clear(); m_map_itemTableByVnum.clear(); } //===== 아이템 테이블 생성 =====// //새로 추가되는 갯수를 파악한다. int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); std::map<DWORD, TItemTable *>::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(vnum); if(it_map_itemTable != test_map_itemTableByVnum.end()) { addNumber++; } } //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;) data.Destroy(); if(!data.Load("item_proto.txt",'\t')) { fprintf(stderr, "item_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber); memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size()); int testValue = m_vec_itemTable.size(); TItemTable * item_table = &m_vec_itemTable[0]; while (data.Next()) { int col = 0; std::map<DWORD, TItemTable *>::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col))); if(it_map_itemTable == test_map_itemTableByVnum.end()) { //각 칼럼 데이터 저장 if (!Set_Proto_Item_Table(item_table, data, localMap)) { fprintf(stderr, "아이템 프로토 테이블 셋팅 실패.\n"); } } else { //$$$$$$$$$$$$$$$$$$$$$$$ 테스트 아이템 정보가 있다! TItemTable *tempTable = it_map_itemTable->second; item_table->dwVnum = tempTable->dwVnum; strlcpy(item_table->szName, tempTable->szName, sizeof(item_table->szName)); strlcpy(item_table->szLocaleName, tempTable->szLocaleName, sizeof(item_table->szLocaleName)); item_table->bType = tempTable->bType; item_table->bSubType = tempTable->bSubType; item_table->bSize = tempTable->bSize; item_table->dwAntiFlags = tempTable->dwAntiFlags; item_table->dwFlags = tempTable->dwFlags; item_table->dwWearFlags = tempTable->dwWearFlags; item_table->dwImmuneFlag = tempTable->dwImmuneFlag; item_table->dwGold = tempTable->dwGold; item_table->dwShopBuyPrice = tempTable->dwShopBuyPrice; item_table->dwRefinedVnum =tempTable->dwRefinedVnum; item_table->wRefineSet =tempTable->wRefineSet; item_table->bAlterToMagicItemPct = tempTable->bAlterToMagicItemPct; item_table->cLimitRealTimeFirstUseIndex = -1; item_table->cLimitTimerBasedOnWearIndex = -1; int i; for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { item_table->aLimits[i].bType = tempTable->aLimits[i].bType; item_table->aLimits[i].lValue = tempTable->aLimits[i].lValue; if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[i].bType) item_table->cLimitRealTimeFirstUseIndex = (char)i; if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[i].bType) item_table->cLimitTimerBasedOnWearIndex = (char)i; } for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i) { item_table->aApplies[i].bType = tempTable->aApplies[i].bType; item_table->aApplies[i].lValue = tempTable->aApplies[i].lValue; } for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i) item_table->alValues[i] = tempTable->alValues[i]; item_table->bGainSocketPct = tempTable->bGainSocketPct; item_table->sAddonType = tempTable->sAddonType; item_table->bWeight = tempTable->bWeight; } vnumSet.insert(item_table->dwVnum); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); ++item_table; } //_______________________________________________________________________// //========================================================================// // 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다. //========================================================================// test_data.Destroy(); if(!test_data.Load("item_proto_test.txt",'\t')) { fprintf(stderr, "item_proto_test.txt 파일을 읽어오지 못했습니다\n"); //return false; } else { test_data.Next(); //설명 로우 넘어가기. while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다. { //중복되는 부분이면 넘어간다. set<int>::iterator itVnum; itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0))); if (itVnum != vnumSet.end()) { continue; } if (!Set_Proto_Item_Table(item_table, test_data, localMap)) { fprintf(stderr, "아이템 프로토 테이블 셋팅 실패.\n"); } m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); item_table++; } } // QUEST_ITEM_PROTO_DISABLE // InitializeQuestItemTable(); // END_OF_QUEST_ITEM_PROTO_DISABLE m_map_itemTableByVnum.clear(); itertype(m_vec_itemTable) it = m_vec_itemTable.begin(); while (it != m_vec_itemTable.end()) { TItemTable * item_table = &(*(it++)); sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu REFINE %lu REFINE_SET %u MAGIC_PCT %u", item_table->dwVnum, item_table->szName, item_table->szLocaleName, item_table->alValues[0], item_table->alValues[1], item_table->alValues[2], item_table->alValues[3], item_table->alValues[4], item_table->alValues[5], item_table->dwWearFlags, item_table->dwAntiFlags, item_table->dwImmuneFlag, item_table->dwRefinedVnum, item_table->wRefineSet, item_table->bAlterToMagicItemPct); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); } sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum()); return true; } 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 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++]); sys_log(0, "ITEM_ATTR: %-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_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, " "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, %ld, %d, %ld, " "%d, %ld, %d, %ld, %d, %ld, " "%ld, %ld, %ld, %ld, %ld, %ld )", 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.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, %ld, %d, %ld, " "%d, %ld, %d, %ld, %d, %ld, " "%ld, %ld, %ld, %ld, %ld, %ld )", 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.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; } ProtoReader.cpp #include "stdafx.h" #include <math.h> #include "ProtoReader.h" #include "CsvReader.h" #include <sstream> using namespace std; inline string trim_left(const string& str) { string::size_type n = str.find_first_not_of(" \t\v\n\r"); return n == string::npos ? str : str.substr(n, str.length()); } inline string trim_right(const string& str) { string::size_type n = str.find_last_not_of(" \t\v\n\r"); return n == string::npos ? str : str.substr(0, n + 1); } string trim(const string& str){return trim_left(trim_right(str));} static string* StringSplit(string strOrigin, string strTok) { unsigned int cutAt; //자르는위치 int index = 0; //문자열인덱스 string* strResult = new string[30]; //결과return 할변수 //strTok을찾을때까지반복 while ((cutAt = strOrigin.find_first_of(strTok)) != strOrigin.npos) { if (cutAt > 0) //자르는위치가0보다크면(성공시) { strResult[index++] = strOrigin.substr(0, cutAt); //결과배열에추가 } strOrigin = strOrigin.substr(cutAt+1); //원본은자른부분제외한나머지 } if(strOrigin.length() > 0) //원본이아직남았으면 { strResult[index++] = strOrigin.substr(0, cutAt); //나머지를결과배열에추가 } for( int i=0;i<index;i++) { strResult[i] = trim(strResult[i]); } return strResult; //결과return } int get_Item_Type_Value(string inputString) { string arType[] = {"ITEM_NONE", "ITEM_WEAPON", "ITEM_ARMOR", "ITEM_USE", "ITEM_AUTOUSE", "ITEM_MATERIAL", "ITEM_SPECIAL", "ITEM_TOOL", "ITEM_LOTTERY", "ITEM_ELK", //10개 "ITEM_METIN", "ITEM_CONTAINER", "ITEM_FISH", "ITEM_ROD", "ITEM_RESOURCE", "ITEM_CAMPFIRE", "ITEM_UNIQUE", "ITEM_SKILLBOOK", "ITEM_QUEST", "ITEM_POLYMORPH", //20개 "ITEM_TREASURE_BOX", "ITEM_TREASURE_KEY", "ITEM_SKILLFORGET", "ITEM_GIFTBOX", "ITEM_PICK", "ITEM_HAIR", "ITEM_TOTEM", "ITEM_BLEND", "ITEM_COSTUME", "ITEM_DS", //30개 "ITEM_SPECIAL_DS", "ITEM_EXTRACT", "ITEM_SECONDARY_COIN", //33개 "ITEM_RING", "ITEM_BELT", //35개 (EItemTypes 값으로 치면 34) }; int retInt = -1; //cout << "Type : " << typeStr << " -> "; for (unsigned int j=0;j<sizeof(arType)/sizeof(arType[0]);j++) { string tempString = arType[j]; if (inputString.find(tempString)!=string::npos && tempString.find(inputString)!=string::npos) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } int get_Item_SubType_Value(int type_value, string inputString) { static string arSub1[] = { "WEAPON_SWORD", "WEAPON_DAGGER", "WEAPON_BOW", "WEAPON_TWO_HANDED", "WEAPON_BELL", "WEAPON_FAN", "WEAPON_ARROW", "WEAPON_MOUNT_SPEAR"}; static string arSub2[] = { "ARMOR_BODY", "ARMOR_HEAD", "ARMOR_SHIELD", "ARMOR_WRIST", "ARMOR_FOOTS", "ARMOR_NECK", "ARMOR_EAR", "ARMOR_NUM_TYPES"}; static string arSub3[] = { "USE_POTION", "USE_TALISMAN", "USE_TUNING", "USE_MOVE", "USE_TREASURE_BOX", "USE_MONEYBAG", "USE_BAIT", "USE_ABILITY_UP", "USE_AFFECT", "USE_CREATE_STONE", "USE_SPECIAL", "USE_POTION_NODELAY", "USE_CLEAR", "USE_INVISIBILITY", "USE_DETACHMENT", "USE_BUCKET", "USE_POTION_CONTINUE", "USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_ADD_ATTRIBUTE2", "USE_RECIPE", "USE_CHANGE_ATTRIBUTE2", "USE_BIND", "USE_UNBIND", "USE_TIME_CHARGE_PER", "USE_TIME_CHARGE_FIX", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET"}; static string arSub4[] = { "AUTOUSE_POTION", "AUTOUSE_ABILITY_UP", "AUTOUSE_BOMB", "AUTOUSE_GOLD", "AUTOUSE_MONEYBAG", "AUTOUSE_TREASURE_BOX"}; static string arSub5[] = { "MATERIAL_LEATHER", "MATERIAL_BLOOD", "MATERIAL_ROOT", "MATERIAL_NEEDLE", "MATERIAL_JEWEL", "MATERIAL_DS_REFINE_NORMAL", "MATERIAL_DS_REFINE_BLESSED", "MATERIAL_DS_REFINE_HOLLY"}; static string arSub6[] = { "SPECIAL_MAP", "SPECIAL_KEY", "SPECIAL_DOC", "SPECIAL_SPIRIT"}; static string arSub7[] = { "TOOL_FISHING_ROD" }; static string arSub8[] = { "LOTTERY_TICKET", "LOTTERY_INSTANT" }; static string arSub10[] = { "METIN_NORMAL", "METIN_GOLD" }; static string arSub12[] = { "FISH_ALIVE", "FISH_DEAD"}; static string arSub14[] = { "RESOURCE_FISHBONE", "RESOURCE_WATERSTONEPIECE", "RESOURCE_WATERSTONE", "RESOURCE_BLOOD_PEARL", "RESOURCE_BLUE_PEARL", "RESOURCE_WHITE_PEARL", "RESOURCE_BUCKET", "RESOURCE_CRYSTAL", "RESOURCE_GEM", "RESOURCE_STONE", "RESOURCE_METIN", "RESOURCE_ORE" }; static string arSub16[] = { "UNIQUE_NONE", "UNIQUE_BOOK", "UNIQUE_SPECIAL_RIDE", "UNIQUE_3", "UNIQUE_4", "UNIQUE_5", "UNIQUE_6", "UNIQUE_7", "UNIQUE_8", "UNIQUE_9", "USE_SPECIAL"}; static string arSub28[] = { "COSTUME_BODY", "COSTUME_HAIR" }; static string arSub29[] = { "DS_SLOT1", "DS_SLOT2", "DS_SLOT3", "DS_SLOT4", "DS_SLOT5", "DS_SLOT6" }; static string arSub31[] = { "EXTRACT_DRAGON_SOUL", "EXTRACT_DRAGON_HEART" }; static string* arSubType[] = {0, //0 arSub1, //1 arSub2, //2 arSub3, //3 arSub4, //4 arSub5, //5 arSub6, //6 arSub7, //7 arSub8, //8 0, //9 arSub10, //10 0, //11 arSub12, //12 0, //13 arSub14, //14 0, //15 arSub16, //16 0, //17 0, //18 0, //19 0, //20 0, //21 0, //22 0, //23 0, //24 0, //25 0, //26 0, //27 arSub28, //28 arSub29, //29 arSub29, //30 arSub31, //31 0, //32 0, //33 반지 0, //34 벨트 }; static int arNumberOfSubtype[_countof(arSubType)] = { 0, sizeof(arSub1)/sizeof(arSub1[0]), sizeof(arSub2)/sizeof(arSub2[0]), sizeof(arSub3)/sizeof(arSub3[0]), sizeof(arSub4)/sizeof(arSub4[0]), sizeof(arSub5)/sizeof(arSub5[0]), sizeof(arSub6)/sizeof(arSub6[0]), sizeof(arSub7)/sizeof(arSub7[0]), sizeof(arSub8)/sizeof(arSub8[0]), 0, sizeof(arSub10)/sizeof(arSub10[0]), 0, sizeof(arSub12)/sizeof(arSub12[0]), 0, sizeof(arSub14)/sizeof(arSub14[0]), 0, sizeof(arSub16)/sizeof(arSub16[0]), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, sizeof(arSub28)/sizeof(arSub28[0]), sizeof(arSub29)/sizeof(arSub29[0]), sizeof(arSub29)/sizeof(arSub29[0]), sizeof(arSub31)/sizeof(arSub31[0]), 0, // 32 0, // 33 반지 0, // 34 벨트 }; assert(_countof(arSubType) > type_value && "Subtype rule: Out of range!!"); // assert 안 먹히는 듯.. if (_countof(arSubType) <= type_value) { sys_err("SubType : Out of range!! (type_value: %d, count of registered subtype: %d", type_value, _countof(arSubType)); return -1; } //아이템 타입의 서브타입 어레이가 존재하는지 알아보고, 없으면 0 리턴 if (arSubType[type_value]==0) { return 0; } // int retInt = -1; //cout << "SubType : " << subTypeStr << " -> "; for (int j=0;j<arNumberOfSubtype[type_value];j++) { string tempString = arSubType[type_value][j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } int get_Item_AntiFlag_Value(string inputString) { string arAntiFlag[] = {"ANTI_FEMALE", "ANTI_MALE", "ANTI_MUSA", "ANTI_ASSASSIN", "ANTI_SURA", "ANTI_MUDANG", "ANTI_GET", "ANTI_DROP", "ANTI_SELL", "ANTI_EMPIRE_A", "ANTI_EMPIRE_B", "ANTI_EMPIRE_C", "ANTI_SAVE", "ANTI_GIVE", "ANTI_PKDROP", "ANTI_STACK", "ANTI_MYSHOP", "ANTI_SAFEBOX"}; int retValue = 0; string* arInputString = StringSplit(inputString, "|"); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arAntiFlag)/sizeof(arAntiFlag[0]);i++) { string tempString = arAntiFlag[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "AntiFlag : " << antiFlagStr << " -> " << retValue << endl; return retValue; } int get_Item_Flag_Value(string inputString) { string arFlag[] = {"ITEM_TUNABLE", "ITEM_SAVE", "ITEM_STACKABLE", "COUNT_PER_1GOLD", "ITEM_SLOW_QUERY", "ITEM_UNIQUE", "ITEM_MAKECOUNT", "ITEM_IRREMOVABLE", "CONFIRM_WHEN_USE", "QUEST_USE", "QUEST_USE_MULTIPLE", "QUEST_GIVE", "ITEM_QUEST", "LOG", "STACKABLE", "SLOW_QUERY", "REFINEABLE", "IRREMOVABLE", "ITEM_APPLICABLE"}; int retValue = 0; string* arInputString = StringSplit(inputString, "|"); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arFlag)/sizeof(arFlag[0]);i++) { string tempString = arFlag[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "Flag : " << flagStr << " -> " << retValue << endl; return retValue; } int get_Item_WearFlag_Value(string inputString) { string arWearrFlag[] = {"WEAR_BODY", "WEAR_HEAD", "WEAR_FOOTS", "WEAR_WRIST", "WEAR_WEAPON", "WEAR_NECK", "WEAR_EAR", "WEAR_SHIELD", "WEAR_UNIQUE", "WEAR_ARROW", "WEAR_HAIR", "WEAR_ABILITY"}; int retValue = 0; string* arInputString = StringSplit(inputString, "|"); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arWearrFlag)/sizeof(arWearrFlag[0]);i++) { string tempString = arWearrFlag[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "WearFlag : " << wearFlagStr << " -> " << retValue << endl; return retValue; } int get_Item_Immune_Value(string inputString) { string arImmune[] = {"PARA","CURSE","STUN","SLEEP","SLOW","POISON","TERROR"}; int retValue = 0; string* arInputString = StringSplit(inputString, "|"); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arImmune)/sizeof(arImmune[0]);i++) { string tempString = arImmune[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "Immune : " << immuneStr << " -> " << retValue << endl; return retValue; } int get_Item_LimitType_Value(string inputString) { string arLimitType[] = {"LIMIT_NONE", "LEVEL", "STR", "DEX", "INT", "CON", "PC_BANG", "REAL_TIME", "REAL_TIME_FIRST_USE", "TIMER_BASED_ON_WEAR"}; int retInt = -1; //cout << "LimitType : " << limitTypeStr << " -> "; for (unsigned int j=0;j<sizeof(arLimitType)/sizeof(arLimitType[0]);j++) { string tempString = arLimitType[j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } int get_Item_ApplyType_Value(string inputString) { string arApplyType[] = {"APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW", "APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS", "APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", }; int retInt = -1; //cout << "ApplyType : " << applyTypeStr << " -> "; for (unsigned int j=0;j<sizeof(arApplyType)/sizeof(arApplyType[0]);j++) { string tempString = arApplyType[j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } //몬스터 프로토도 읽는다. int get_Mob_Rank_Value(string inputString) { string arRank[] = {"PAWN", "S_PAWN", "KNIGHT", "S_KNIGHT", "BOSS", "KING"}; int retInt = -1; //cout << "Rank : " << rankStr << " -> "; for (unsigned int j=0;j<sizeof(arRank)/sizeof(arRank[0]);j++) { string tempString = arRank[j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } int get_Mob_Type_Value(string inputString) { string arType[] = { "MONSTER", "NPC", "STONE", "WARP", "DOOR", "BUILDING", "PC", "POLYMORPH_PC", "HORSE", "GOTO"}; int retInt = -1; //cout << "Type : " << typeStr << " -> "; for (unsigned int j=0;j<sizeof(arType)/sizeof(arType[0]);j++) { string tempString = arType[j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } int get_Mob_BattleType_Value(string inputString) { string arBattleType[] = { "MELEE", "RANGE", "MAGIC", "SPECIAL", "POWER", "TANKER", "SUPER_POWER", "SUPER_TANKER"}; int retInt = -1; //cout << "Battle Type : " << battleTypeStr << " -> "; for (unsigned int j=0;j<sizeof(arBattleType)/sizeof(arBattleType[0]);j++) { string tempString = arBattleType[j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j; break; } } //cout << endl; return retInt; } int get_Mob_Size_Value(string inputString) { string arSize[] = { "SAMLL", "MEDIUM", "BIG"}; int retInt = 0; //cout << "Size : " << sizeStr << " -> "; for (unsigned int j=0;j<sizeof(arSize)/sizeof(arSize[0]);j++) { string tempString = arSize[j]; string tempInputString = trim(inputString); if (tempInputString.compare(tempString)==0) { //cout << j << " "; retInt = j + 1; break; } } //cout << endl; return retInt; } int get_Mob_AIFlag_Value(string inputString) { string arAIFlag[] = {"AGGR","NOMOVE","COWARD","NOATTSHINSU","NOATTCHUNJO","NOATTJINNO","ATTMOB","BERSERK","STONESKIN","GODSPEED","DEATHBLOW","REVIVE"}; int retValue = 0; string* arInputString = StringSplit(inputString, ","); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arAIFlag)/sizeof(arAIFlag[0]);i++) { string tempString = arAIFlag[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "AIFlag : " << aiFlagStr << " -> " << retValue << endl; return retValue; } int get_Mob_RaceFlag_Value(string inputString) { string arRaceFlag[] = {"ANIMAL","UNDEAD","DEVIL","HUMAN","ORC","MILGYO","INSECT","FIRE","ICE","DESERT","TREE", "ATT_ELEC","ATT_FIRE","ATT_ICE","ATT_WIND","ATT_EARTH","ATT_DARK"}; int retValue = 0; string* arInputString = StringSplit(inputString, ","); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arRaceFlag)/sizeof(arRaceFlag[0]);i++) { string tempString = arRaceFlag[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "Race Flag : " << raceFlagStr << " -> " << retValue << endl; return retValue; } int get_Mob_ImmuneFlag_Value(string inputString) { string arImmuneFlag[] = {"STUN","SLOW","FALL","CURSE","POISON","TERROR", "REFLECT"}; int retValue = 0; string* arInputString = StringSplit(inputString, ","); //프로토 정보 내용을 단어별로 쪼갠 배열. for(unsigned int i =0;i<sizeof(arImmuneFlag)/sizeof(arImmuneFlag[0]);i++) { string tempString = arImmuneFlag[i]; for (int j=0; j<30 ; j++) //최대 30개 단어까지. (하드코딩) { string tempString2 = arInputString[j]; if (tempString2.compare(tempString)==0) { //일치하는지 확인. retValue = retValue + pow((float)2,(float)i); } if(tempString2.compare("") == 0) break; } } delete []arInputString; //cout << "Immune Flag : " << immuneFlagStr << " -> " << retValue << endl; return retValue; } #ifndef __DUMP_PROTO__ //몹 테이블을 셋팅해준다. bool Set_Proto_Mob_Table(TMobTable *mobTable, cCsvTable &csvTable,std::map<int,const char*> &nameMap) { int col = 0; str_to_number(mobTable->dwVnum, csvTable.AsStringByIndex(col++)); strlcpy(mobTable->szName, csvTable.AsStringByIndex(col++), sizeof(mobTable->szName)); //3. 지역별 이름 넣어주기. map<int,const char*>::iterator it; it = nameMap.find(mobTable->dwVnum); if (it != nameMap.end()) { const char * localeName = it->second; strlcpy(mobTable->szLocaleName, localeName, sizeof (mobTable->szLocaleName)); } else { strlcpy(mobTable->szLocaleName, mobTable->szName, sizeof (mobTable->szLocaleName)); } //RANK int rankValue = get_Mob_Rank_Value(csvTable.AsStringByIndex(col++)); mobTable->bRank = rankValue; //TYPE int typeValue = get_Mob_Type_Value(csvTable.AsStringByIndex(col++)); mobTable->bType = typeValue; //BATTLE_TYPE int battleTypeValue = get_Mob_BattleType_Value(csvTable.AsStringByIndex(col++)); mobTable->bBattleType = battleTypeValue; str_to_number(mobTable->bLevel, csvTable.AsStringByIndex(col++)); //SIZE int sizeValue = get_Mob_Size_Value(csvTable.AsStringByIndex(col++)); mobTable->bSize = sizeValue; //AI_FLAG int aiFlagValue = get_Mob_AIFlag_Value(csvTable.AsStringByIndex(col++)); mobTable->dwAIFlag = aiFlagValue; //mount_capacity; col++; //RACE_FLAG int raceFlagValue = get_Mob_RaceFlag_Value(csvTable.AsStringByIndex(col++)); mobTable->dwRaceFlag = raceFlagValue; //IMMUNE_FLAG int immuneFlagValue = get_Mob_ImmuneFlag_Value(csvTable.AsStringByIndex(col++)); mobTable->dwImmuneFlag = immuneFlagValue; str_to_number(mobTable->bEmpire, csvTable.AsStringByIndex(col++)); //col = 11 strlcpy(mobTable->szFolder, csvTable.AsStringByIndex(col++), sizeof(mobTable->szFolder)); str_to_number(mobTable->bOnClickType, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bStr, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bDex, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bCon, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bInt, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwDamageRange[0], csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwDamageRange[1], csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwMaxHP, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bRegenCycle, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bRegenPercent, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwGoldMin, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwGoldMax, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwExp, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->wDef, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->sAttackSpeed, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->sMovingSpeed, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bAggresiveHPPct, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->wAggressiveSight, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->wAttackRange, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwDropItemVnum, csvTable.AsStringByIndex(col++)); //32 str_to_number(mobTable->dwResurrectionVnum, csvTable.AsStringByIndex(col++)); for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i) str_to_number(mobTable->cEnchants[i], csvTable.AsStringByIndex(col++)); for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i) str_to_number(mobTable->cResists[i], csvTable.AsStringByIndex(col++)); str_to_number(mobTable->fDamMultiply, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwSummonVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->dwDrainSP, csvTable.AsStringByIndex(col++)); //Mob_Color ++col; str_to_number(mobTable->dwPolymorphItemVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[0].bLevel, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[0].dwVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[1].bLevel, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[1].dwVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[2].bLevel, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[2].dwVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[3].bLevel, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[3].dwVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[4].bLevel, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->Skills[4].dwVnum, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bBerserkPoint, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bStoneSkinPoint, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bGodSpeedPoint, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bDeathBlowPoint, csvTable.AsStringByIndex(col++)); str_to_number(mobTable->bRevivePoint, csvTable.AsStringByIndex(col++)); sys_log(0, "MOB #%-5d %-24s level: %-3u rank: %u empire: %d", mobTable->dwVnum, mobTable->szLocaleName, mobTable->bLevel, mobTable->bRank, mobTable->bEmpire); return true; } bool Set_Proto_Item_Table(TItemTable *itemTable, cCsvTable &csvTable,std::map<int,const char*> &nameMap) { int col = 0; int dataArray[33]; for (unsigned int i=0; i<sizeof(dataArray)/sizeof(dataArray[0]);i++) { int validCheck = 0; if (i==2) { dataArray[i] = get_Item_Type_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==3) { dataArray[i] = get_Item_SubType_Value(dataArray[i-1], csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==5) { dataArray[i] = get_Item_AntiFlag_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==6) { dataArray[i] = get_Item_Flag_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==7) { dataArray[i] = get_Item_WearFlag_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==8) { dataArray[i] = get_Item_Immune_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==14) { dataArray[i] = get_Item_LimitType_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==16) { dataArray[i] = get_Item_LimitType_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==18) { dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==20) { dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else if (i==22) { dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col)); validCheck = dataArray[i]; } else { str_to_number(dataArray[i], csvTable.AsStringByIndex(col)); } if (validCheck == -1) { std::ostringstream dataStream; for (unsigned int j = 0; j < i; ++j) dataStream << dataArray[j] << ","; //fprintf(stderr, "ItemProto Reading Failed : Invalid value.\n"); sys_err("ItemProto Reading Failed : Invalid value. (index: %d, col: %d, value: %s)", i, col, csvTable.AsStringByIndex(col)); sys_err("\t%d ~ %d Values: %s", 0, i, dataStream.str().c_str()); exit(0); } col = col + 1; } // vnum 및 vnum range 읽기. { std::string s(csvTable.AsStringByIndex(0)); unsigned int pos = s.find("~"); // vnum 필드에 '~'가 없다면 패스 if (std::string::npos == pos) { itemTable->dwVnum = dataArray[0]; itemTable->dwVnumRange = 0; } else { std::string s_start_vnum (s.substr(0, pos)); std::string s_end_vnum (s.substr(pos +1 )); int start_vnum = atoi(s_start_vnum.c_str()); int end_vnum = atoi(s_end_vnum.c_str()); if (0 == start_vnum || (0 != end_vnum && end_vnum < start_vnum)) { sys_err ("INVALID VNUM %s", s.c_str()); return false; } itemTable->dwVnum = start_vnum; itemTable->dwVnumRange = end_vnum - start_vnum; } } strlcpy(itemTable->szName, csvTable.AsStringByIndex(1), sizeof(itemTable->szName)); //지역별 이름 넣어주기. map<int,const char*>::iterator it; it = nameMap.find(itemTable->dwVnum); if (it != nameMap.end()) { const char * localeName = it->second; strlcpy(itemTable->szLocaleName, localeName, sizeof (itemTable->szLocaleName)); } else { strlcpy(itemTable->szLocaleName, itemTable->szName, sizeof (itemTable->szLocaleName)); } itemTable->bType = dataArray[2]; itemTable->bSubType = dataArray[3]; itemTable->bSize = dataArray[4]; itemTable->dwAntiFlags = dataArray[5]; itemTable->dwFlags = dataArray[6]; itemTable->dwWearFlags = dataArray[7]; itemTable->dwImmuneFlag = dataArray[8]; itemTable->dwGold = dataArray[9]; itemTable->dwShopBuyPrice = dataArray[10]; itemTable->dwRefinedVnum = dataArray[11]; itemTable->wRefineSet = dataArray[12]; itemTable->bAlterToMagicItemPct = dataArray[13]; itemTable->cLimitRealTimeFirstUseIndex = -1; itemTable->cLimitTimerBasedOnWearIndex = -1; int i; for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { itemTable->aLimits[i].bType = dataArray[14+i*2]; itemTable->aLimits[i].lValue = dataArray[15+i*2]; if (LIMIT_REAL_TIME_START_FIRST_USE == itemTable->aLimits[i].bType) itemTable->cLimitRealTimeFirstUseIndex = (char)i; if (LIMIT_TIMER_BASED_ON_WEAR == itemTable->aLimits[i].bType) itemTable->cLimitTimerBasedOnWearIndex = (char)i; } for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i) { itemTable->aApplies[i].bType = dataArray[18+i*2]; itemTable->aApplies[i].lValue = dataArray[19+i*2]; } for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i) itemTable->alValues[i] = dataArray[24+i]; //column for 'Specular' itemTable->bGainSocketPct = dataArray[31]; itemTable->sAddonType = dataArray[32]; //test str_to_number(itemTable->bWeight, "0"); return true; } #endif
  4. Iηfιηιт²⁴ᵏ

    Problem syserr client

    They appear because zeta system/HP opponent/kill gui/deposit/costume etc How do I turn off this log or what the hell are these
  5. Iηfιηιт²⁴ᵏ

    How do I disable logs client?

    How do I disable logs client? 0430 20:26:25021 :: antiexp_index 2 0430 20:26:25021 :: depozit_index 5 0430 20:26:25021 :: teleporter_index 13 0430 20:41:34619 :: Mds 500 0430 20:41:35015 :: ShowMeMallPassword 0430 20:42:38663 :: CloseMall
  6. Metin2KY

    HELP SYSLOG

    The server crash after a few minutes online. HELP Auth log; Feb 8 16:29:56 :: SYSTEM: new connection from [95.21.225.106] fd: 15 handshake 2881525955 output input_len 0, ptr 0x290a4d00 Feb 8 16:29:56 :: Handshake: client_time 0 server_time 42975 Feb 8 16:29:57 :: AUTH_PHASE 0x290a4d00 Feb 8 16:29:58 :: InputAuth::Login : kirolosmena(11) desc 0x290a4d00 Feb 8 16:29:58 :: SetLoginKey 1165915005 Feb 8 16:29:58 :: InputAuth::Login : key 1165915005:0x76941371 login kirolosmena Feb 8 16:29:58 :: QID_AUTH_LOGIN: START 1165915005 0x290a4d00 Feb 8 16:29:58 :: Create_Time 0 19700101 Feb 8 16:29:58 :: Block Time -2 Feb 8 16:29:58 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:29:58 :: SendAuthLogin kirolosmena key 123123715 Feb 8 16:29:58 :: AuthLogin result 1 key 1165915005 Feb 8 16:29:58 :: SYSTEM: closing socket. DESC #15 Feb 8 16:30:09 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:30:37 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:30:37 :: BILLING: PUSH kirolosmena 27 type 2 Feb 8 16:30:37 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:30:37 :: FLUSH_USE_TIME: count 1 Feb 8 16:30:39 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:30:59 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:30:59 :: BILLING: PUSH kirolosmena 19 type 2 Feb 8 16:30:59 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:30:59 :: FLUSH_USE_TIME: count 1 Feb 8 16:31:01 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:31:10 :: SYSTEM: new connection from [2.155.123.83] fd: 15 handshake 1389675754 output input_len 0, ptr 0x290a4d00 Feb 8 16:31:11 :: Handshake: client_time 0 server_time 117076 Feb 8 16:31:11 :: AUTH_PHASE 0x290a4d00 Feb 8 16:31:11 :: InputAuth::Login : enller20(8) desc 0x290a4d00 Feb 8 16:31:11 :: SetLoginKey 1434286563 Feb 8 16:31:11 :: InputAuth::Login : key 1434286563:0x507a4333 login enller20 Feb 8 16:31:12 :: QID_AUTH_LOGIN: START 1434286563 0x290a4d00 Feb 8 16:31:12 :: Create_Time 0 19700101 Feb 8 16:31:12 :: Block Time -2 Feb 8 16:31:12 :: WRONGPWD Feb 8 16:31:20 :: SYSTEM: closing socket. DESC #15 Feb 8 16:31:20 :: SYSTEM: new connection from [2.155.123.83] fd: 15 handshake 1570529126 output input_len 0, ptr 0x290a4d00 Feb 8 16:31:20 :: Handshake: lower than zero -60 Feb 8 16:31:20 :: Handshake: client_time 0 server_time 126590 Feb 8 16:31:21 :: AUTH_PHASE 0x290a4d00 Feb 8 16:31:21 :: InputAuth::Login : enller20(8) desc 0x290a4d00 Feb 8 16:31:21 :: SetLoginKey 1224059856 Feb 8 16:31:21 :: InputAuth::Login : key 1224059856:0x13663269 login enller20 Feb 8 16:31:21 :: QID_AUTH_LOGIN: START 1224059856 0x290a4d00 Feb 8 16:31:21 :: Create_Time 0 19700101 Feb 8 16:31:21 :: Block Time -2 Feb 8 16:31:21 :: SetRemainSecs enller20 0 type 2 Feb 8 16:31:21 :: SendAuthLogin enller20 key 123123732 Feb 8 16:31:21 :: AuthLogin result 1 key 1224059856 Feb 8 16:31:21 :: SYSTEM: closing socket. DESC #15 Feb 8 16:31:34 :: BILLING: ON enller20 key 1224059856 ptr 0x290c81d0 Feb 8 16:31:59 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:31:59 :: BILLING: PUSH kirolosmena 57 type 2 Feb 8 16:31:59 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:31:59 :: FLUSH_USE_TIME: count 1 Feb 8 16:32:03 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:32:13 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:32:13 :: BILLING: PUSH kirolosmena 9 type 2 Feb 8 16:32:13 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:32:13 :: FLUSH_USE_TIME: count 1 Feb 8 16:32:16 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:32:46 :: SYSTEM: new connection from [85.58.117.251] fd: 15 handshake 1709502810 output input_len 0, ptr 0x290a4d00 Feb 8 16:32:47 :: Handshake: client_time 0 server_time 213141 Feb 8 16:32:47 :: AUTH_PHASE 0x290a4d00 Feb 8 16:32:48 :: InputAuth::Login : vlad26(6) desc 0x290a4d00 Feb 8 16:32:48 :: SetLoginKey 1981700355 Feb 8 16:32:48 :: InputAuth::Login : key 1981700355:0x4341f072 login vlad26 Feb 8 16:32:48 :: QID_AUTH_LOGIN: START 1981700355 0x290a4d00 Feb 8 16:32:48 :: Create_Time 0 19700101 Feb 8 16:32:48 :: Block Time -2 Feb 8 16:32:48 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:32:48 :: SendAuthLogin vlad26 key 123123792 Feb 8 16:32:48 :: AuthLogin result 1 key 1981700355 Feb 8 16:32:48 :: SYSTEM: closing socket. DESC #15 Feb 8 16:32:59 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:34:38 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:34:38 :: BILLING: PUSH vlad26 98 type 2 Feb 8 16:34:38 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:34:38 :: FLUSH_USE_TIME: count 1 Feb 8 16:34:41 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:35:11 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:35:11 :: BILLING: PUSH kirolosmena 175 type 2 Feb 8 16:35:11 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:35:11 :: FLUSH_USE_TIME: count 1 Feb 8 16:35:14 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:36:33 :: Set Empire Priv: empire(0) type(1) value(200) duration_sec(172800) SYSERR: Feb 8 16:36:33 :: locale_find: LOCALE_ERROR: "아이템이 나올 확률"; SYSERR: Feb 8 16:36:33 :: locale_find: LOCALE_ERROR: "전제국"; SYSERR: Feb 8 16:36:33 :: locale_find: LOCALE_ERROR: "%s의 %s이 %d%% 증가했습니다!"; Feb 8 16:36:51 :: Set Empire Priv: empire(0) type(2) value(200) duration_sec(172800) SYSERR: Feb 8 16:36:51 :: locale_find: LOCALE_ERROR: "돈이 나올 확률"; SYSERR: Feb 8 16:36:51 :: locale_find: LOCALE_ERROR: "전제국"; SYSERR: Feb 8 16:36:51 :: locale_find: LOCALE_ERROR: "%s의 %s이 %d%% 증가했습니다!"; Feb 8 16:37:09 :: Set Empire Priv: empire(0) type(4) value(200) duration_sec(172800) SYSERR: Feb 8 16:37:09 :: locale_find: LOCALE_ERROR: "경험치 배율"; SYSERR: Feb 8 16:37:09 :: locale_find: LOCALE_ERROR: "전제국"; SYSERR: Feb 8 16:37:09 :: locale_find: LOCALE_ERROR: "%s의 %s이 %d%% 증가했습니다!"; Feb 8 16:37:51 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:37:51 :: BILLING: PUSH vlad26 190 type 2 Feb 8 16:37:51 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:37:51 :: FLUSH_USE_TIME: count 1 Feb 8 16:37:55 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:39:15 :: SYSTEM: new connection from [87.111.145.13] fd: 15 handshake 628628902 output input_len 0, ptr 0x290a4d00 Feb 8 16:39:18 :: Handshake: lower than zero -39 Feb 8 16:39:20 :: Handshake: client_time 0 server_time 606093 Feb 8 16:39:21 :: AUTH_PHASE 0x290a4d00 Feb 8 16:39:22 :: InputAuth::Login : estopin600(10) desc 0x290a4d00 Feb 8 16:39:22 :: SetLoginKey 10594446 Feb 8 16:39:22 :: InputAuth::Login : key 10594446:0x3e48b28c login estopin600 Feb 8 16:39:22 :: QID_AUTH_LOGIN: START 10594446 0x290a4d00 Feb 8 16:39:22 :: Create_Time 0 19700101 Feb 8 16:39:22 :: Block Time -2 Feb 8 16:39:22 :: SetRemainSecs estopin600 0 type 2 Feb 8 16:39:22 :: SendAuthLogin estopin600 key 123123752 Feb 8 16:39:22 :: AuthLogin result 1 key 10594446 Feb 8 16:39:22 :: SYSTEM: closing socket. DESC #15 Feb 8 16:39:39 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:39:39 :: BILLING: PUSH vlad26 104 type 2 Feb 8 16:39:39 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:39:39 :: FLUSH_USE_TIME: count 1 Feb 8 16:39:42 :: BILLING: ON estopin600 key 10594446 ptr 0x290c82b0 Feb 8 16:39:42 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:42:13 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:42:13 :: BILLING: PUSH vlad26 150 type 2 Feb 8 16:42:13 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:42:13 :: FLUSH_USE_TIME: count 1 Feb 8 16:42:14 :: SYSTEM: new connection from [200.121.203.35] fd: 15 handshake 1407829053 output input_len 0, ptr 0x290a4d00 Feb 8 16:42:14 :: Handshake: client_time 0 server_time 780888 Feb 8 16:42:15 :: AUTH_PHASE 0x290a4d00 Feb 8 16:42:17 :: InputAuth::Login : judas999666(11) desc 0x290a4d00 Feb 8 16:42:17 :: SetLoginKey 1439046435 Feb 8 16:42:17 :: InputAuth::Login : key 1439046435:0x666e5431 login judas999666 Feb 8 16:42:17 :: QID_AUTH_LOGIN: START 1439046435 0x290a4d00 Feb 8 16:42:17 :: Create_Time 0 19700101 Feb 8 16:42:17 :: Block Time -2 Feb 8 16:42:17 :: SetRemainSecs judas999666 0 type 2 Feb 8 16:42:17 :: SendAuthLogin judas999666 key 123123709 Feb 8 16:42:17 :: AuthLogin result 1 key 1439046435 Feb 8 16:42:17 :: SYSTEM: closing socket. DESC #15 Feb 8 16:42:20 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:42:51 :: SYSTEM: new connection from [200.121.203.35] fd: 15 handshake 26121851 output input_len 0, ptr 0x290a4d00 Feb 8 16:42:52 :: Handshake: client_time 0 server_time 818400 Feb 8 16:42:53 :: AUTH_PHASE 0x290a4d00 Feb 8 16:42:53 :: SYSTEM: new connection from [93.156.219.1] fd: 16 handshake 2694044044 output input_len 0, ptr 0x290a5080 Feb 8 16:42:54 :: Handshake: client_time 0 server_time 820032 Feb 8 16:42:54 :: InputAuth::Login : judas0000001(12) desc 0x290a4d00 Feb 8 16:42:54 :: SetLoginKey 11986850 Feb 8 16:42:54 :: InputAuth::Login : key 11986850:0x51521fea login judas0000001 Feb 8 16:42:54 :: QID_AUTH_LOGIN: START 11986850 0x290a4d00 Feb 8 16:42:54 :: Create_Time 0 19700101 Feb 8 16:42:54 :: Block Time -2 Feb 8 16:42:54 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:42:54 :: SendAuthLogin judas0000001 key 123123718 Feb 8 16:42:54 :: AUTH_PHASE 0x290a5080 Feb 8 16:42:54 :: AuthLogin result 1 key 11986850 Feb 8 16:42:54 :: InputAuth::Login : jeyzen555(9) desc 0x290a5080 Feb 8 16:42:54 :: SetLoginKey 1292554402 Feb 8 16:42:54 :: InputAuth::Login : key 1292554402:0xf49f5aa login jeyzen555 Feb 8 16:42:54 :: QID_AUTH_LOGIN: START 1292554402 0x290a5080 Feb 8 16:42:54 :: Create_Time 0 19700101 Feb 8 16:42:54 :: Block Time -2 Feb 8 16:42:54 :: SetRemainSecs jeyzen555 0 type 2 Feb 8 16:42:54 :: SendAuthLogin jeyzen555 key 123123756 Feb 8 16:42:55 :: AuthLogin result 1 key 1292554402 Feb 8 16:42:55 :: SYSTEM: closing socket. DESC #15 Feb 8 16:42:55 :: SYSTEM: closing socket. DESC #16 Feb 8 16:43:07 :: BILLING: ON jeyzen555 key 1292554402 ptr 0x290c8390 Feb 8 16:43:09 :: BILLING: ON judas0000001 key 11986850 ptr 0x290c8400 Feb 8 16:44:05 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:44:05 :: BILLING: PUSH kirolosmena 531 type 2 Feb 8 16:44:05 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:44:05 :: FLUSH_USE_TIME: count 1 Feb 8 16:44:08 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:44:32 :: SetRemainSecs jeyzen555 0 type 2 Feb 8 16:44:32 :: BILLING: PUSH jeyzen555 85 type 2 Feb 8 16:44:32 :: BILLING: OFF jeyzen555 key 1292554402 ptr 0x290c8390 Feb 8 16:44:32 :: FLUSH_USE_TIME: count 1 Feb 8 16:44:34 :: BILLING: ON jeyzen555 key 1292554402 ptr 0x290c8390 Feb 8 16:45:13 :: SYSTEM: new connection from [181.138.19.52] fd: 15 handshake 3114822282 output input_len 0, ptr 0x290a5080 Feb 8 16:45:13 :: Handshake: lower than zero -19 Feb 8 16:45:14 :: Handshake: client_time 0 server_time 960026 Feb 8 16:45:14 :: AUTH_PHASE 0x290a5080 Feb 8 16:45:15 :: InputAuth::Login : pipeta01(8) desc 0x290a5080 Feb 8 16:45:15 :: SetLoginKey 360603807 Feb 8 16:45:15 :: InputAuth::Login : key 360603807:0x28ad8dde login pipeta01 Feb 8 16:45:15 :: QID_AUTH_LOGIN: START 360603807 0x290a5080 Feb 8 16:45:15 :: Create_Time 0 19700101 Feb 8 16:45:15 :: Block Time -2 Feb 8 16:45:15 :: SetRemainSecs pipeta01 0 type 2 Feb 8 16:45:15 :: SendAuthLogin pipeta01 key 123123776 Feb 8 16:45:15 :: AuthLogin result 1 key 360603807 Feb 8 16:45:16 :: SYSTEM: closing socket. DESC #15 Feb 8 16:45:32 :: BILLING: ON pipeta01 key 360603807 ptr 0x290c8470 Feb 8 16:45:42 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:45:42 :: BILLING: PUSH kirolosmena 94 type 2 Feb 8 16:45:42 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:45:43 :: FLUSH_USE_TIME: count 1 Feb 8 16:45:45 :: BILLING: ON kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:46:24 :: SYSTEM: new connection from [201.233.33.222] fd: 15 handshake 3463947072 output input_len 0, ptr 0x290a5080 Feb 8 16:46:26 :: Handshake: client_time 0 server_time 1032218 Feb 8 16:46:27 :: AUTH_PHASE 0x290a5080 Feb 8 16:46:27 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:46:27 :: BILLING: PUSH judas0000001 198 type 2 Feb 8 16:46:27 :: BILLING: OFF judas0000001 key 11986850 ptr 0x290c8400 Feb 8 16:46:27 :: InputAuth::Login : krackk1(7) desc 0x290a5080 Feb 8 16:46:27 :: SetLoginKey 392519803 Feb 8 16:46:27 :: InputAuth::Login : key 392519803:0x32300004 login krackk1 Feb 8 16:46:27 :: QID_AUTH_LOGIN: START 392519803 0x290a5080 Feb 8 16:46:27 :: Create_Time 0 19700101 Feb 8 16:46:27 :: Block Time -2 Feb 8 16:46:27 :: SetRemainSecs krackk1 0 type 2 Feb 8 16:46:27 :: SendAuthLogin krackk1 key 123123719 Feb 8 16:46:27 :: AuthLogin result 1 key 392519803 Feb 8 16:46:27 :: FLUSH_USE_TIME: count 1 Feb 8 16:46:27 :: SYSTEM: closing socket. DESC #15 Feb 8 16:46:32 :: BILLING: ON judas0000001 key 11986850 ptr 0x290c8400 Feb 8 16:46:38 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:46:38 :: BILLING: PUSH vlad26 258 type 2 Feb 8 16:46:38 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:46:38 :: SYSTEM: new connection from [201.233.33.222] fd: 15 handshake 126609707 output input_len 0, ptr 0x290a5080 Feb 8 16:46:38 :: FLUSH_USE_TIME: count 1 Feb 8 16:46:38 :: SetRemainSecs enller20 0 type 2 Feb 8 16:46:38 :: BILLING: PUSH enller20 903 type 2 Feb 8 16:46:38 :: BILLING: OFF enller20 key 1224059856 ptr 0x290c81d0 Feb 8 16:46:39 :: Handshake: lower than zero -20 Feb 8 16:46:39 :: Handshake: client_time 0 server_time 1045493 Feb 8 16:46:40 :: FLUSH_USE_TIME: count 1 Feb 8 16:46:40 :: AUTH_PHASE 0x290a5080 Feb 8 16:46:40 :: InputAuth::Login : krackk2(7) desc 0x290a5080 Feb 8 16:46:40 :: SetLoginKey 265171285 Feb 8 16:46:40 :: InputAuth::Login : key 265171285:0x4d5284ad login krackk2 Feb 8 16:46:40 :: QID_AUTH_LOGIN: START 265171285 0x290a5080 Feb 8 16:46:40 :: Create_Time 0 19700101 Feb 8 16:46:40 :: Block Time -2 Feb 8 16:46:40 :: SetRemainSecs krackk2 0 type 2 Feb 8 16:46:40 :: SendAuthLogin krackk2 key 123123721 Feb 8 16:46:40 :: AuthLogin result 1 key 265171285 Feb 8 16:46:41 :: SYSTEM: closing socket. DESC #15 Feb 8 16:46:41 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:46:41 :: BILLING: ON krackk1 key 392519803 ptr 0x290c84e0 Feb 8 16:46:52 :: BILLING: ON krackk2 key 265171285 ptr 0x290c8550 Feb 8 16:46:53 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:46:53 :: BILLING: PUSH vlad26 11 type 2 Feb 8 16:46:53 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:46:53 :: FLUSH_USE_TIME: count 1 Feb 8 16:46:54 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:46:54 :: BILLING: PUSH judas0000001 21 type 2 Feb 8 16:46:54 :: BILLING: OFF judas0000001 key 11986850 ptr 0x290c8400 Feb 8 16:46:54 :: FLUSH_USE_TIME: count 1 Feb 8 16:46:55 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:46:58 :: BILLING: ON judas0000001 key 11986850 ptr 0x290c8400 Feb 8 16:47:30 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:47:30 :: BILLING: PUSH judas0000001 31 type 2 Feb 8 16:47:30 :: BILLING: OFF judas0000001 key 11986850 ptr 0x290c8400 Feb 8 16:47:30 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:47:30 :: BILLING: PUSH kirolosmena 104 type 2 Feb 8 16:47:30 :: BILLING: OFF kirolosmena key 1165915005 ptr 0x290c8160 Feb 8 16:47:30 :: SetRemainSecs pipeta01 0 type 2 Feb 8 16:47:30 :: BILLING: PUSH pipeta01 118 type 2 Feb 8 16:47:30 :: BILLING: OFF pipeta01 key 360603807 ptr 0x290c8470 Feb 8 16:47:30 :: SetRemainSecs jeyzen555 0 type 2 Feb 8 16:47:30 :: BILLING: PUSH jeyzen555 175 type 2 Feb 8 16:47:30 :: BILLING: OFF jeyzen555 key 1292554402 ptr 0x290c8390 Feb 8 16:47:30 :: SetRemainSecs estopin600 0 type 2 Feb 8 16:47:30 :: BILLING: PUSH estopin600 468 type 2 Feb 8 16:47:30 :: BILLING: OFF estopin600 key 10594446 ptr 0x290c82b0 Feb 8 16:47:30 :: FLUSH_USE_TIME: count 5 Feb 8 16:47:40 :: SYSTEM: new connection from [200.121.203.35] fd: 15 handshake 1174004931 output input_len 0, ptr 0x290a5080 Feb 8 16:47:41 :: SYSTEM: new connection from [87.111.145.13] fd: 16 handshake 1989764076 output input_len 0, ptr 0x290a4d00 Feb 8 16:47:41 :: Handshake: lower than zero -19 Feb 8 16:47:41 :: Handshake: client_time 0 server_time 1107931 Feb 8 16:47:42 :: Handshake: lower than zero -33 Feb 8 16:47:42 :: AUTH_PHASE 0x290a5080 Feb 8 16:47:42 :: Handshake: lower than zero -22 Feb 8 16:47:43 :: Handshake: client_time 0 server_time 1109123 Feb 8 16:47:43 :: InputAuth::Login : judas999666(11) desc 0x290a5080 Feb 8 16:47:43 :: SetLoginKey 381775879 Feb 8 16:47:43 :: InputAuth::Login : key 381775879:0x585bb0cd login judas999666 Feb 8 16:47:43 :: QID_AUTH_LOGIN: START 381775879 0x290a5080 Feb 8 16:47:43 :: Create_Time 0 19700101 Feb 8 16:47:43 :: Block Time -2 Feb 8 16:47:43 :: SetRemainSecs judas999666 0 type 2 Feb 8 16:47:43 :: SendAuthLogin judas999666 key 123123709 Feb 8 16:47:43 :: AuthLogin result 1 key 381775879 Feb 8 16:47:44 :: AUTH_PHASE 0x290a4d00 Feb 8 16:47:44 :: SYSTEM: closing socket. DESC #15 Feb 8 16:47:44 :: InputAuth::Login : estopin600(10) desc 0x290a4d00 Feb 8 16:47:44 :: SetLoginKey 1406682858 Feb 8 16:47:44 :: InputAuth::Login : key 1406682858:0x24452b7a login estopin600 Feb 8 16:47:44 :: QID_AUTH_LOGIN: START 1406682858 0x290a4d00 Feb 8 16:47:44 :: Create_Time 0 19700101 Feb 8 16:47:44 :: Block Time -2 Feb 8 16:47:44 :: SetRemainSecs estopin600 0 type 2 Feb 8 16:47:44 :: SendAuthLogin estopin600 key 123123752 Feb 8 16:47:44 :: AuthLogin result 1 key 1406682858 Feb 8 16:47:44 :: SYSTEM: closing socket. DESC #16 Feb 8 16:47:50 :: SYSTEM: new connection from [181.138.19.52] fd: 15 handshake 674980217 output input_len 0, ptr 0x290a4d00 Feb 8 16:47:51 :: Handshake: client_time 0 server_time 1117033 Feb 8 16:47:51 :: AUTH_PHASE 0x290a4d00 Feb 8 16:47:52 :: InputAuth::Login : pipeta01(8) desc 0x290a4d00 Feb 8 16:47:52 :: SetLoginKey 891419526 Feb 8 16:47:52 :: InputAuth::Login : key 891419526:0x5c789819 login pipeta01 Feb 8 16:47:52 :: QID_AUTH_LOGIN: START 891419526 0x290a4d00 Feb 8 16:47:52 :: Create_Time 0 19700101 Feb 8 16:47:52 :: Block Time -2 Feb 8 16:47:52 :: SetRemainSecs pipeta01 0 type 2 Feb 8 16:47:52 :: SendAuthLogin pipeta01 key 123123776 Feb 8 16:47:52 :: AuthLogin result 1 key 891419526 Feb 8 16:47:52 :: SYSTEM: closing socket. DESC #15 Feb 8 16:48:01 :: SYSTEM: new connection from [200.121.203.35] fd: 15 handshake 553945305 output input_len 0, ptr 0x290a4d00 Feb 8 16:48:02 :: Handshake: client_time 0 server_time 1128466 Feb 8 16:48:03 :: AUTH_PHASE 0x290a4d00 Feb 8 16:48:04 :: InputAuth::Login : judas0000001(12) desc 0x290a4d00 Feb 8 16:48:04 :: SetLoginKey 1643740215 Feb 8 16:48:04 :: InputAuth::Login : key 1643740215:0x74a72e2e login judas0000001 Feb 8 16:48:04 :: QID_AUTH_LOGIN: START 1643740215 0x290a4d00 Feb 8 16:48:04 :: Create_Time 0 19700101 Feb 8 16:48:04 :: Block Time -2 Feb 8 16:48:04 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:48:04 :: SendAuthLogin judas0000001 key 123123718 Feb 8 16:48:04 :: AuthLogin result 1 key 1643740215 Feb 8 16:48:04 :: SYSTEM: closing socket. DESC #15 Feb 8 16:48:17 :: SYSTEM: new connection from [181.138.19.52] fd: 15 handshake 4287810167 output input_len 0, ptr 0x290a4d00 Feb 8 16:48:18 :: Handshake: client_time 0 server_time 1144416 Feb 8 16:48:19 :: AUTH_PHASE 0x290a4d00 Feb 8 16:48:19 :: InputAuth::Login : pipeta01(8) desc 0x290a4d00 Feb 8 16:48:19 :: SetLoginKey 1401367842 Feb 8 16:48:19 :: InputAuth::Login : key 1401367842:0x53677658 login pipeta01 Feb 8 16:48:19 :: QID_AUTH_LOGIN: START 1401367842 0x290a4d00 Feb 8 16:48:19 :: Create_Time 0 19700101 Feb 8 16:48:19 :: Block Time -2 Feb 8 16:48:19 :: SetRemainSecs pipeta01 0 type 2 Feb 8 16:48:19 :: SendAuthLogin pipeta01 key 123123776 Feb 8 16:48:20 :: AuthLogin result 1 key 1401367842 Feb 8 16:48:20 :: SYSTEM: closing socket. DESC #15 Feb 8 16:48:30 :: SYSTEM: new connection from [179.60.90.196] fd: 15 handshake 3939962393 output input_len 0, ptr 0x290a4d00 Feb 8 16:48:30 :: Handshake: client_time 0 server_time 1156768 Feb 8 16:48:31 :: AUTH_PHASE 0x290a4d00 Feb 8 16:48:32 :: InputAuth::Login : crayala(7) desc 0x290a4d00 Feb 8 16:48:32 :: SetLoginKey 1503432091 Feb 8 16:48:32 :: InputAuth::Login : key 1503432091:0x16935398 login crayala Feb 8 16:48:32 :: QID_AUTH_LOGIN: START 1503432091 0x290a4d00 Feb 8 16:48:32 :: Create_Time 0 19700101 Feb 8 16:48:32 :: Block Time -2 Feb 8 16:48:32 :: SetRemainSecs crayala 0 type 2 Feb 8 16:48:32 :: SendAuthLogin crayala key 123123725 Feb 8 16:48:32 :: AuthLogin result 1 key 1503432091 Feb 8 16:48:32 :: SYSTEM: closing socket. DESC #15 Feb 8 16:48:33 :: SYSTEM: new connection from [200.121.203.35] fd: 15 handshake 159503961 output input_len 0, ptr 0x290a4d00 Feb 8 16:48:34 :: Handshake: lower than zero -19 Feb 8 16:48:34 :: Handshake: lower than zero -18 Feb 8 16:48:35 :: Handshake: client_time 0 server_time 1161079 Feb 8 16:48:35 :: AUTH_PHASE 0x290a4d00 Feb 8 16:48:36 :: InputAuth::Login : judas0000001(12) desc 0x290a4d00 Feb 8 16:48:36 :: SetLoginKey 406282822 Feb 8 16:48:36 :: InputAuth::Login : key 406282822:0x53c152be login judas0000001 Feb 8 16:48:36 :: QID_AUTH_LOGIN: START 406282822 0x290a4d00 Feb 8 16:48:36 :: Create_Time 0 19700101 Feb 8 16:48:36 :: Block Time -2 Feb 8 16:48:36 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:48:36 :: SendAuthLogin judas0000001 key 123123718 Feb 8 16:48:36 :: AuthLogin result 1 key 406282822 Feb 8 16:48:37 :: SYSTEM: closing socket. DESC #15 Feb 8 16:48:39 :: SetRemainSecs vlad26 0 type 2 Feb 8 16:48:39 :: BILLING: PUSH vlad26 103 type 2 Feb 8 16:48:39 :: BILLING: OFF vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:48:39 :: FLUSH_USE_TIME: count 1 Feb 8 16:48:42 :: BILLING: ON vlad26 key 1981700355 ptr 0x290c8240 Feb 8 16:49:16 :: SYSTEM: new connection from [200.121.203.35] fd: 15 handshake 4258526294 output input_len 0, ptr 0x290a4d00 Feb 8 16:49:16 :: Handshake: lower than zero -18 Feb 8 16:49:17 :: Handshake: client_time 0 server_time 1203311 Feb 8 16:49:18 :: AUTH_PHASE 0x290a4d00 Feb 8 16:49:19 :: InputAuth::Login : judas0000001(12) desc 0x290a4d00 Feb 8 16:49:19 :: SetLoginKey 955988700 Feb 8 16:49:19 :: InputAuth::Login : key 955988700:0x612f74c1 login judas0000001 Feb 8 16:49:19 :: QID_AUTH_LOGIN: START 955988700 0x290a4d00 Feb 8 16:49:19 :: Create_Time 0 19700101 Feb 8 16:49:19 :: Block Time -2 Feb 8 16:49:19 :: SetRemainSecs judas0000001 0 type 2 Feb 8 16:49:19 :: SendAuthLogin judas0000001 key 123123718 Feb 8 16:49:19 :: AuthLogin result 1 key 955988700 Feb 8 16:49:19 :: SYSTEM: closing socket. DESC #15 Feb 8 16:49:47 :: SYSTEM: new connection from [93.156.219.1] fd: 15 handshake 3611712260 output input_len 0, ptr 0x290a4d00 Feb 8 16:49:47 :: Handshake: client_time 0 server_time 1233462 Feb 8 16:49:48 :: AUTH_PHASE 0x290a4d00 Feb 8 16:49:48 :: InputAuth::Login : jeyzen555(9) desc 0x290a4d00 Feb 8 16:49:48 :: SetLoginKey 421602520 Feb 8 16:49:48 :: InputAuth::Login : key 421602520:0x3b0f3b79 login jeyzen555 Feb 8 16:49:48 :: QID_AUTH_LOGIN: START 421602520 0x290a4d00 Feb 8 16:49:48 :: Create_Time 0 19700101 Feb 8 16:49:48 :: Block Time -2 Feb 8 16:49:48 :: SetRemainSecs jeyzen555 0 type 2 Feb 8 16:49:48 :: SendAuthLogin jeyzen555 key 123123756 Feb 8 16:49:48 :: AuthLogin result 1 key 421602520 Feb 8 16:49:48 :: SYSTEM: closing socket. DESC #15 Feb 8 16:50:05 :: SYSTEM: new connection from [181.138.19.52] fd: 15 handshake 3654253061 output input_len 0, ptr 0x290a4d00 Feb 8 16:50:07 :: Handshake: lower than zero -101 Feb 8 16:50:07 :: Handshake: lower than zero -20 Feb 8 16:50:08 :: Handshake: lower than zero -80 Feb 8 16:50:09 :: Handshake: lower than zero -80 Feb 8 16:50:10 :: Handshake: client_time 0 server_time 1256173 Feb 8 16:50:11 :: AUTH_PHASE 0x290a4d00 Feb 8 16:50:12 :: InputAuth::Login : pipeta01(8) desc 0x290a4d00 Feb 8 16:50:12 :: SetLoginKey 413541998 Feb 8 16:50:12 :: InputAuth::Login : key 413541998:0x4f7029e1 login pipeta01 Feb 8 16:50:12 :: QID_AUTH_LOGIN: START 413541998 0x290a4d00 Feb 8 16:50:12 :: Create_Time 0 19700101 Feb 8 16:50:12 :: Block Time -2 Feb 8 16:50:12 :: SetRemainSecs pipeta01 0 type 2 Feb 8 16:50:12 :: SendAuthLogin pipeta01 key 123123776 Feb 8 16:50:12 :: AuthLogin result 1 key 413541998 Feb 8 16:50:12 :: SYSTEM: closing socket. DESC #15 Feb 8 16:50:30 :: SYSTEM: new connection from [181.138.19.52] fd: 15 handshake 483141380 output input_len 0, ptr 0x290a4d00 Feb 8 16:50:32 :: Handshake: client_time 0 server_time 1278845 Feb 8 16:50:33 :: AUTH_PHASE 0x290a4d00 Feb 8 16:50:34 :: InputAuth::Login : pipeta01(8) desc 0x290a4d00 Feb 8 16:50:34 :: SetLoginKey 1636030975 Feb 8 16:50:34 :: InputAuth::Login : key 1636030975:0x336b62e9 login pipeta01 Feb 8 16:50:34 :: QID_AUTH_LOGIN: START 1636030975 0x290a4d00 Feb 8 16:50:34 :: Create_Time 0 19700101 Feb 8 16:50:34 :: Block Time -2 Feb 8 16:50:34 :: SetRemainSecs pipeta01 0 type 2 Feb 8 16:50:34 :: SendAuthLogin pipeta01 key 123123776 Feb 8 16:50:34 :: AuthLogin result 1 key 1636030975 Feb 8 16:50:34 :: SYSTEM: closing socket. DESC #15 Feb 8 16:52:01 :: SYSTEM: new connection from [93.156.219.1] fd: 15 handshake 1643112519 output input_len 0, ptr 0x290a4d00 Feb 8 16:52:01 :: Handshake: client_time 0 server_time 1367517 Feb 8 16:52:02 :: AUTH_PHASE 0x290a4d00 Feb 8 16:52:02 :: InputAuth::Login : jeyzen555(9) desc 0x290a4d00 Feb 8 16:52:02 :: SetLoginKey 1872635803 Feb 8 16:52:02 :: InputAuth::Login : key 1872635803:0x6fcccd99 login jeyzen555 Feb 8 16:52:02 :: QID_AUTH_LOGIN: START 1872635803 0x290a4d00 Feb 8 16:52:02 :: Create_Time 0 19700101 Feb 8 16:52:02 :: Block Time -2 Feb 8 16:52:02 :: SetRemainSecs jeyzen555 0 type 2 Feb 8 16:52:02 :: SendAuthLogin jeyzen555 key 123123756 Feb 8 16:52:02 :: AuthLogin result 1 key 1872635803 Feb 8 16:52:02 :: SYSTEM: closing socket. DESC #15 Feb 8 16:53:57 :: SYSTEM: new connection from [95.21.225.106] fd: 15 handshake 396679599 output input_len 0, ptr 0x290a4d00 Feb 8 16:53:57 :: Handshake: client_time 0 server_time 1483447 Feb 8 16:53:58 :: AUTH_PHASE 0x290a4d00 Feb 8 16:53:58 :: InputAuth::Login : kirolosmena(11) desc 0x290a4d00 Feb 8 16:53:58 :: SetLoginKey 2092511800 Feb 8 16:53:58 :: InputAuth::Login : key 2092511800:0x7135def8 login kirolosmena Feb 8 16:53:58 :: QID_AUTH_LOGIN: START 2092511800 0x290a4d00 Feb 8 16:53:58 :: Create_Time 0 19700101 Feb 8 16:53:58 :: Block Time -2 Feb 8 16:53:58 :: SetRemainSecs kirolosmena 0 type 2 Feb 8 16:53:58 :: SendAuthLogin kirolosmena key 123123715 Feb 8 16:53:59 :: AuthLogin result 1 key 2092511800 Feb 8 16:53:59 :: SYSTEM: closing socket. DESC #15 Feb 8 16:55:08 :: SYSTEM: new connection from [95.21.225.106] fd: 15 handshake 406317282 output input_len 0, ptr 0x290a4d00 Feb 8 16:55:08 :: Handshake: lower than zero -79 Feb 8 16:55:08 :: Handshake: client_time 0 server_time 1554799 Feb 8 16:55:09 :: AUTH_PHASE 0x290a4d00 Feb 8 16:55:10 :: InputAuth::Login : kiro1234(8) desc 0x290a4d00 Feb 8 16:55:10 :: SetLoginKey 324165293 Feb 8 16:55:10 :: InputAuth::Login : key 324165293:0x2ac53536 login kiro1234 Feb 8 16:55:10 :: QID_AUTH_LOGIN: START 324165293 0x290a4d00 Feb 8 16:55:10 :: Create_Time 0 19700101 Feb 8 16:55:10 :: Block Time -2 Feb 8 16:55:10 :: SetRemainSecs kiro1234 0 type 2 Feb 8 16:55:10 :: SendAuthLogin kiro1234 key 123123796 Feb 8 16:55:10 :: AuthLogin result 1 key 324165293 Feb 8 16:55:10 :: SYSTEM: closing socket. DESC #15 Feb 8 16:56:42 :: SYSTEM: new connection from [179.60.90.196] fd: 15 handshake 691079804 output input_len 0, ptr 0x290a4d00 Feb 8 16:56:42 :: Handshake: client_time 0 server_time 1648873 Feb 8 16:56:44 :: AUTH_PHASE 0x290a4d00 Feb 8 16:56:44 :: InputAuth::Login : cris133(7) desc 0x290a4d00 Feb 8 16:56:44 :: SetLoginKey 1685010000 Feb 8 16:56:44 :: InputAuth::Login : key 1685010000:0x20150a login cris133 Feb 8 16:56:44 :: QID_AUTH_LOGIN: START 1685010000 0x290a4d00 Feb 8 16:56:44 :: Create_Time 0 19700101 Feb 8 16:56:44 :: Block Time -2 Feb 8 16:56:44 :: SetRemainSecs cris133 0 type 2 Feb 8 16:56:44 :: SendAuthLogin cris133 key 123123724 Feb 8 16:56:44 :: AuthLogin result 1 key 1685010000 Feb 8 16:56:45 :: SYSTEM: closing socket. DESC #15 Feb 8 16:59:13 :: SYSTEM: new connection from [200.84.72.152] fd: 15 handshake 2655256594 output input_len 0, ptr 0x290a4d00 Feb 8 16:59:13 :: Handshake: client_time 0 server_time 1799585 Feb 8 16:59:14 :: AUTH_PHASE 0x290a4d00 Feb 8 16:59:14 :: InputAuth::Login : juanvzl(7) desc 0x290a4d00 Feb 8 16:59:14 :: SetLoginKey 1949778686 Feb 8 16:59:14 :: InputAuth::Login : key 1949778686:0x2e21e8eb login juanvzl Feb 8 16:59:14 :: QID_AUTH_LOGIN: START 1949778686 0x290a4d00 Feb 8 16:59:14 :: Create_Time 0 19700101 Feb 8 16:59:14 :: Block Time -2 Feb 8 16:59:14 :: SetRemainSecs juanvzl 0 type 2 Feb 8 16:59:14 :: SendAuthLogin juanvzl key 123123777 Feb 8 16:59:15 :: AuthLogin result 1 key 1949778686 Feb 8 16:59:15 :: SYSTEM: closing socket. DESC #15 Feb 8 17:00:00 :: SYSTEM: LOG ROTATE (2016-02-08 16)
  7. Can anybody help me with this please???? Severity Code Description Project File Line Error C3861 'back_inserter': identifier not found UserInterface C:\Users\user\Documents\Server\Lab\source_code\client_reboot_dev\source\UserInterface\MarkManager.cpp 396 Error C2039 'back_inserter': is not a member of 'std' UserInterface C:\Users\user\Documents\Server\Lab\source_code\client_reboot_dev\source\UserInterface\MarkManager.cpp 396 It's in MarkManager.cpp from UserInterface in my client binary
  8. Hi, i have a big problem with my game compiled. I use client binari 28k fixed posted in the forum and game 40250 of mainline and when i use de change bonus the core 1 of the server get closed. Can help me? Sorry my bad english