int highscore_show(lua_State* L) { CQuestManager & q = CQuestManager::instance(); const char * pszBoardName = lua_tostring(L, 1); DWORD mypid = q.GetCurrentCharacterPtr()->GetPlayerID(); bool bOrder = (int) lua_tonumber(L, 2) != 0 ? true : false; DBManager::instance().ReturnQuery(QID_HIGHSCORE_SHOW, mypid, NULL, "SELECT h.pid, p.name, h.value FROM highscore%s as h, player%s as p WHERE h.board = '%s' AND h.pid = p.id ORDER BY h.value %s LIMIT 10", get_table_postfix(), get_table_postfix(), pszBoardName, bOrder ? "DESC" : ""); return 0; }
DWORD CHARACTER::GetAID() const { char szQuery[1024+1]; DWORD dwAID = 0; snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery); if (pMsg != NULL) { if (pMsg->Get()->uiNumRows == 0) { M2_DELETE(pMsg); return 0; } MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult); str_to_number(dwAID, row[0]); M2_DELETE(pMsg); return dwAID; } else { return 0; } }
void LogManager::RefineLog(DWORD pid, const char* item_name, DWORD item_id, int item_refine_level, int is_success, const char* how) { m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), item_name, strlen(item_name)); Query("INSERT INTO refinelog%s (pid, item_name, item_id, step, time, is_success, setType) VALUES(%u, '%s', %u, %d, NOW(), %d, '%s')", get_table_postfix(), pid, __escape_hint, item_id, item_refine_level, is_success, how); }
void LogManager::CharLog(DWORD dwPID, DWORD x, DWORD y, DWORD dwValue, const char * c_pszText, const char * c_pszHint, const char * c_pszIP) { m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), c_pszHint, strlen(c_pszHint)); Query("INSERT DELAYED INTO log%s (type, time, who, x, y, what, how, hint, ip) VALUES('CHARACTER', NOW(), %u, %u, %u, %u, '%s', '%s', '%s')", get_table_postfix(), dwPID, x, y, dwValue, c_pszText, __escape_hint, c_pszIP); }
void LogManager::ItemLog(DWORD dwPID, DWORD x, DWORD y, DWORD dwItemID, const char * c_pszText, const char * c_pszHint, const char * c_pszIP, DWORD dwVnum) { m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), c_pszHint, strlen(c_pszHint)); Query("INSERT DELAYED INTO log%s (type, time, who, x, y, what, how, hint, ip, vnum) VALUES('ITEM', NOW(), %u, %u, %u, %u, '%s', '%s', '%s', %u)", get_table_postfix(), dwPID, x, y, dwItemID, c_pszText, __escape_hint, c_pszIP, dwVnum); }
void LogManager::GMCommandLog(DWORD dwPID, const char* szName, const char* szIP, BYTE byChannel, const char* szCommand) { m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), szCommand, strlen(szCommand)); Query("INSERT DELAYED INTO command_log%s (userid, server, ip, port, username, command, date ) " "VALUES(%u, 999, '%s', %u, '%s', '%s', NOW()) ", get_table_postfix(), dwPID, szIP, byChannel, szName, __escape_hint); }
void LogManager::MoneyLog(BYTE type, DWORD vnum, int gold) { if (type == MONEY_LOG_RESERVED || type >= MONEY_LOG_TYPE_MAX_NUM) { sys_err("TYPE ERROR: type %d vnum %u gold %d", type, vnum, gold); return; } Query("INSERT DELAYED INTO money_log%s VALUES (NOW(), %d, %d, %d)", get_table_postfix(), type, vnum, gold); }
void LogManager::QuestRewardLog(const char * c_pszQuestName, DWORD dwPID, DWORD dwLevel, int iValue1, int iValue2) { Query("INSERT INTO quest_reward_log%s VALUES('%s',%u,%u,2,%u,%u,NOW())", get_table_postfix(), c_pszQuestName, dwPID, dwLevel, iValue1, iValue2); }
void LogManager::LevelLog(LPCHARACTER pChar, unsigned int level, unsigned int playhour) { if (true == LC_IsEurope()) { DWORD aid = 0; if (NULL != pChar->GetDesc()) { aid = pChar->GetDesc()->GetAccountTable().id; } Query("REPLACE INTO levellog%s (name, level, time, account_id, pid, playtime) VALUES('%s', %u, NOW(), %u, %u, %d)", get_table_postfix(), pChar->GetName(), level, aid, pChar->GetPlayerID(), playhour); } else { Query("REPLACE INTO levellog%s (name, level, time, playtime) VALUES('%s', %u, NOW(), %d)", get_table_postfix(), pChar->GetName(), level, playhour); } }
void LogManager::FishLog(DWORD dwPID, int prob_idx, int fish_id, int fish_level, DWORD dwMiliseconds, DWORD dwVnum, DWORD dwValue) { Query("INSERT INTO fish_log%s VALUES(NOW(), %u, %d, %u, %d, %u, %u, %u)", get_table_postfix(), dwPID, prob_idx, fish_id, fish_level, dwMiliseconds, dwVnum, dwValue); }
void LogManager::GoldBarLog(DWORD dwPID, DWORD dwItemID, GOLDBAR_HOW eHow, const char* c_pszHint) { char szHow[32+1]; switch (eHow) { case PERSONAL_SHOP_BUY: snprintf(szHow, sizeof(szHow), "'BUY'"); break; case PERSONAL_SHOP_SELL: snprintf(szHow, sizeof(szHow), "'SELL'"); break; case SHOP_BUY: snprintf(szHow, sizeof(szHow), "'SHOP_BUY'"); break; case SHOP_SELL: snprintf(szHow, sizeof(szHow), "'SHOP_SELL'"); break; case EXCHANGE_TAKE: snprintf(szHow, sizeof(szHow), "'EXCHANGE_TAKE'"); break; case EXCHANGE_GIVE: snprintf(szHow, sizeof(szHow), "'EXCHANGE_GIVE'"); break; case QUEST: snprintf(szHow, sizeof(szHow), "'QUEST'"); break; default: snprintf(szHow, sizeof(szHow), "''"); break; } Query("INSERT DELAYED INTO goldlog%s (date, time, pid, what, how, hint) VALUES(CURDATE(), CURTIME(), %u, %u, %s, '%s')", get_table_postfix(), dwPID, dwItemID, szHow, c_pszHint); }
void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, int bLevel, BYTE bJob, DWORD dwPlayTime) { Query("INSERT DELAYED INTO loginlog%s (type, time, channel, account_id, pid, level, job, playtime) VALUES (%s, NOW(), %d, %u, %u, %d, %d, %u)", get_table_postfix(), isLogin ? "'LOGIN'" : "'LOGOUT'", g_bChannel, dwAccountID, dwPID, bLevel, bJob, dwPlayTime); }
void LogManager::DragonSlayLog(DWORD dwGuildID, DWORD dwDragonVnum, DWORD dwStartTime, DWORD dwEndTime) { Query( "INSERT INTO dragon_slay_log%s VALUES( %d, %d, FROM_UNIXTIME(%d), FROM_UNIXTIME(%d) )", get_table_postfix(), dwGuildID, dwDragonVnum, dwStartTime, dwEndTime); }
void LogManager::ShoutLog(BYTE bChannel, BYTE bEmpire, const char * pszText) { m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), pszText, strlen(pszText)); Query("INSERT INTO shout_log%s VALUES(NOW(), %d, %d,'%s')", get_table_postfix(), bChannel, bEmpire, __escape_hint); }
int highscore_register(lua_State* L) { CQuestManager & q = CQuestManager::instance(); THighscoreRegisterQueryInfo * qi = M2_NEW THighscoreRegisterQueryInfo; strlcpy(qi->szBoard, lua_tostring(L, 1), sizeof(qi->szBoard)); qi->dwPID = q.GetCurrentCharacterPtr()->GetPlayerID(); qi->iValue = (int) lua_tonumber(L, 2); qi->bOrder = (int) lua_tonumber(L, 3); DBManager::instance().ReturnQuery(QID_HIGHSCORE_REGISTER, qi->dwPID, qi, "SELECT value FROM highscore%s WHERE board='%s' AND pid=%u", get_table_postfix(), qi->szBoard, qi->dwPID); return 1; }
void LogManager::ChangeNameLog(DWORD pid, const char *old_name, const char *new_name, const char *ip) { Query("INSERT DELAYED INTO change_name%s (pid, old_name, new_name, time, ip) " "VALUES(%u, '%s', '%s', NOW(), '%s') ", get_table_postfix(), pid, old_name, new_name, ip); }
void LogManager::SpeedHackLog(DWORD pid, DWORD x, DWORD y, int hack_count) { Query("INSERT INTO speed_hack%s (pid, time, x, y, hack_count) " "VALUES(%u, NOW(), %u, %u, %d)", get_table_postfix(), pid, x, y, hack_count); }
void LogManager::CubeLog(DWORD dwPID, DWORD x, DWORD y, DWORD item_vnum, DWORD item_uid, int item_count, bool success) { Query("INSERT DELAYED INTO cube%s (pid, time, x, y, item_vnum, item_uid, item_count, success) " "VALUES(%u, NOW(), %u, %u, %u, %u, %d, %d)", get_table_postfix(), dwPID, x, y, item_vnum, item_uid, item_count, success?1:0); }
/* Return Value 0 : 알 수 없는 에러 or 쿼리 에러 1 : 동일한 제국으로 바꾸려고함 2 : 길드 가입한 캐릭터가 있음 3 : 결혼한 캐릭터가 있음 999 : 제국 이동 성공 */ int CHARACTER::ChangeEmpire(BYTE empire) { if (GetEmpire() == empire) return 1; char szQuery[1024+1]; DWORD dwAID; DWORD dwPID[4]; memset(dwPID, 0, sizeof(dwPID)); { // 1. 내 계정의 모든 pid를 얻어 온다 snprintf(szQuery, sizeof(szQuery), "SELECT id, pid1, pid2, pid3, pid4 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(szQuery)); if (msg->Get()->uiNumRows == 0) { return 0; } MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult); str_to_number(dwAID, row[0]); str_to_number(dwPID[0], row[1]); str_to_number(dwPID[1], row[2]); str_to_number(dwPID[2], row[3]); str_to_number(dwPID[3], row[4]); } const int loop = 4; { // 2. 각 캐릭터의 길드 정보를 얻어온다. // 한 캐릭터라도 길드에 가입 되어 있다면, 제국 이동을 할 수 없다. DWORD dwGuildID[4]; CGuild * pGuild[4]; SQLMsg * pMsg = NULL; for (int i = 0; i < loop; ++i) { snprintf(szQuery, sizeof(szQuery), "SELECT guild_id FROM guild_member%s WHERE pid=%u", get_table_postfix(), dwPID[i]); pMsg = DBManager::instance().DirectQuery(szQuery); if (pMsg != NULL) { if (pMsg->Get()->uiNumRows > 0) { MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult); str_to_number(dwGuildID[i], row[0]); pGuild[i] = CGuildManager::instance().FindGuild(dwGuildID[i]); if (pGuild[i] != NULL) { M2_DELETE(pMsg); return 2; } } else { dwGuildID[i] = 0; pGuild[i] = NULL; } M2_DELETE(pMsg); } } } { // 3. 각 캐릭터의 결혼 정보를 얻어온다. // 한 캐릭터라도 결혼 상태라면 제국 이동을 할 수 없다. for (int i = 0; i < loop; ++i) { if (marriage::CManager::instance().IsEngagedOrMarried(dwPID[i]) == true) return 3; } } { // 4. db의 제국 정보를 업데이트 한다. snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(szQuery)); if (msg->Get()->uiAffectedRows > 0) { // 5. 제국 변경 이력을 추가한다. SetChangeEmpireCount(); return 999; } } return 0; }