void LoadCharacterRecords() { InsertLogMsg(IDS_LOADACCOUNTRECORDS); CRecordset *pRec = GetDBManager()->CreateRecordset(); if ( pRec->Execute( "SELECT * FROM TBL_GAMEGATEINFO" ) ) { GAMESERVERINFO *pServerInfo; while ( pRec->Fetch() ) { pServerInfo = new GAMESERVERINFO; if ( !pServerInfo ) break; pServerInfo->index = atoi( pRec->Get( "FLD_SERVERIDX" ) ); strcpy( pServerInfo->name, pRec->Get( "FLD_SERVERNAME" ) ); strcpy( pServerInfo->ip, pRec->Get( "FLD_SERVERIP" ) ); pServerInfo->connCnt = 0; g_xGameServerList.AddNewNode( pServerInfo ); } } GetDBManager()->DestroyRecordset( pRec ); }
void CGateInfo::MakeNewUser(char *pszPacket) { char szDecodeMsg[256]; char szEncodeMsg[32]; char *pszID, *pszName, *pszPassword; _TDEFAULTMESSAGE DefMsg; fnDecodeMessageA(&DefMsg, pszPacket); if (DefMsg.wIdent == CM_ADDNEWUSER) { int nPos = fnDecode6BitBufA((pszPacket + DEFBLOCKSIZE), szDecodeMsg, sizeof(szDecodeMsg)); szDecodeMsg[nPos] = '\0'; pszID = &szDecodeMsg[0]; pszName = (char *)memchr(szDecodeMsg, '/', memlen(szDecodeMsg) - 1); *pszName = '\0'; pszName++; pszPassword = (char *)memchr(pszName, '/', memlen(pszName) - 1); *pszPassword = '******'; pszPassword++; if ((memlen(pszID) - 1) || (memlen(pszName) - 1) || (memlen(pszPassword) - 1)) { char szQuery[1024]; sprintf( szQuery, "INSERT TBL_ACCOUNT( FLD_LOGINID, FLD_PASSWORD, FLD_USERNAME, FLD_CERTIFICATION ) " "VALUES( '%s', '%s', '%s', 0 )", pszID, pszPassword, pszName ); CRecordset *pRec = GetDBManager()->CreateRecordset(); if ( pRec->Execute( szQuery ) && pRec->GetRowCount() ) fnMakeDefMessageA( &DefMsg, SM_NEWID_SUCCESS, 0, 0, 0, 0 ); else fnMakeDefMessageA( &DefMsg, SM_NEWID_FAIL, 0, 0, 0, 0 ); GetDBManager()->DestroyRecordset( pRec ); // ----------------------------------------------------------------------------------- } else fnMakeDefMessageA(&DefMsg, SM_NEWID_FAIL, 0, 0, 0, 0); fnEncodeMessageA(&DefMsg, szEncodeMsg, sizeof(szEncodeMsg)); szDecodeMsg[0] = '#'; memmove(&szDecodeMsg[1], szEncodeMsg, DEFBLOCKSIZE); szDecodeMsg[DEFBLOCKSIZE + 1] = '!'; szDecodeMsg[DEFBLOCKSIZE + 2] = '\0'; send(sock, szDecodeMsg, DEFBLOCKSIZE + 2, 0); } }
UINT WINAPI LoadAccountRecords(LPVOID lpParameter) { InsertLogMsg(IDS_LOADACCOUNTRECORDS); CRecordset *pRec = GetDBManager()->CreateRecordset(); pRec->Execute( "UPDATE TBL_ACCOUNT SET FLD_CERTIFICATION=0 WHERE FLD_CERTIFICATION >= 30" ); GetDBManager()->DestroyRecordset( pRec ); // ---------------------------------------------------------------------------------------- GAMESERVERINFO *pServerInfo; pRec = GetDBManager()->CreateRecordset(); if ( pRec->Execute( "SELECT * FROM TBL_SERVERINFO" ) ) { while ( pRec->Fetch() ) { pServerInfo = new GAMESERVERINFO; if ( !pServerInfo ) break; pServerInfo->index = atoi( pRec->Get( "FLD_SERVERIDX" ) ); strcpy( pServerInfo->name, pRec->Get( "FLD_SERVERNAME" ) ); strcpy( pServerInfo->ip, pRec->Get( "FLD_SERVERIP" ) ); pServerInfo->connCnt = 0; g_xGameServerList.AddNewNode( pServerInfo ); } } GetDBManager()->DestroyRecordset( pRec ); char szTmp[64]; for ( PLISTNODE pNode = g_xGameServerList.GetHead(); pNode; pNode = g_xGameServerList.GetNext( pNode ) ) { pServerInfo = g_xGameServerList.GetData( pNode ); sprintf( szTmp, "%d,%s,", pServerInfo->index, pServerInfo->name ); strcat( g_szServerList, szTmp ); } // ---------------------------------------------------------------------------------------- InitServerThreadForMsg(); if (InitServerSocket(g_gcSock, &g_gcAddr, _IDM_GATECOMMSOCK_MSG, 5500, 1)) SwitchMenuItem(TRUE); return 0L; }
void CGateInfo::ReceiveServerMsg(char *pszPacket) { char *pszPos; int nCertification; int nLen = memlen(pszPacket); if (pszPos = (char *)memchr(pszPacket, '/', nLen)) { *pszPos++ = '\0'; nCertification = AnsiStrToVal(pszPos); char szQuery[256]; sprintf( szQuery, "UPDATE TBL_ACCOUNT SET FLD_CERTIFICATION=%d WHERE FLD_LOGINID='%s'", nCertification, pszPacket ); CRecordset *pRec = GetDBManager()->CreateRecordset(); pRec->Execute( szQuery ); GetDBManager()->DestroyRecordset( pRec ); } }
bool Application::OnDatabaseConnected(String &sErrorMessage) { LOG_DEBUG("Application::OnDatabaseConnected()"); int iDBVersion = GetDBManager()->GetCurrentDatabaseVersion(); if (iDBVersion == 0) { sErrorMessage = "Database version could not be detected."; m_sLastConnectErrorMessage = sErrorMessage; ErrorManager::Instance()->ReportError(ErrorManager::Critical, 5010, "Application::OnDatabaseConnected", sErrorMessage); return false; } if (iDBVersion < Configuration::Instance()->GetRequiredDBVersion() || iDBVersion > Configuration::Instance()->GetRequiredDBVersion()) { String sErrorMessage; if (iDBVersion > Configuration::Instance()->GetRequiredDBVersion()) sErrorMessage = "The database is too new for this version of hMailServer. Please upgrade hMailServer."; else sErrorMessage = "The database is too old for this version of hMailServer. Please run hMailServer Database updater (DBUpdater.exe) to upgrade it."; String sVersionInfo; sVersionInfo.Format(_T(" Database version: %d, Required database version: %d"), iDBVersion, Configuration::Instance()->GetRequiredDBVersion()); sErrorMessage += sVersionInfo; m_sLastConnectErrorMessage = sErrorMessage; ErrorManager::Instance()->ReportError(ErrorManager::Critical, 5011, "Application::OnDatabaseConnected", sErrorMessage); return false; } LOG_DEBUG("Application::~OnDatabaseConnected() - E2"); return true; }
void CGateInfo::DeleteExistCharacter(SOCKET s, _LPTCREATECHR lpTCreateChr) { _TDEFAULTMESSAGE DefaultMsg; char szEncodeMsg[32]; char szQuery[256]; CRecordset *pRec; sprintf( szQuery, "DELETE FROM TBL_CHARACTER WHERE FLD_LOGINID='%s' AND FLD_CHARNAME='%s'", lpTCreateChr->szID, lpTCreateChr->szName ); pRec = GetDBManager()->CreateRecordset(); pRec->Execute( szQuery ); GetDBManager()->DestroyRecordset( pRec ); sprintf( szQuery, "DELETE FROM TBL_CHARACTER_GENITEM WHERE FLD_LOGINID='%s' AND FLD_CHARNAME='%s'", lpTCreateChr->szID, lpTCreateChr->szName ); pRec = GetDBManager()->CreateRecordset(); pRec->Execute( szQuery ); GetDBManager()->DestroyRecordset( pRec ); sprintf( szQuery, "DELETE FROM TBL_CHARACTER_ITEM WHERE FLD_LOGINID='%s' AND FLD_CHARNAME='%s'", lpTCreateChr->szID, lpTCreateChr->szName ); pRec = GetDBManager()->CreateRecordset(); pRec->Execute( szQuery ); GetDBManager()->DestroyRecordset( pRec ); sprintf( szQuery, "DELETE FROM TBL_CHARACTER_MAGIC WHERE FLD_LOGINID='%s' AND FLD_CHARNAME='%s'", lpTCreateChr->szID, lpTCreateChr->szName ); pRec = GetDBManager()->CreateRecordset(); pRec->Execute( szQuery ); GetDBManager()->DestroyRecordset( pRec ); fnMakeDefMessageA(&DefaultMsg, SM_DELCHR_SUCCESS, 0, 4, 0, 0); int nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); szEncodeMsg[nPos] = '\0'; SendToGate(s, szEncodeMsg); }
BOOL InitInstance(HANDLE hInstance, int nCmdShow) { g_hInst = (HINSTANCE)hInstance; OleInitialize(NULL); INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_BAR_CLASSES | ICC_INTERNET_CLASSES | ICC_TAB_CLASSES; InitCommonControlsEx(&icex); g_hMainWnd = CreateWindowEx(0, _LOGIN_SERVER_CLASS, _LOGIN_SERVER_TITLE, WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, (HINSTANCE)hInstance, NULL); g_hToolBar = CreateToolbarEx(g_hMainWnd, WS_CHILD|CCS_TOP|WS_VISIBLE|WS_BORDER, _IDW_TOOLBAR, sizeof(tbButtons) / sizeof(TBBUTTON), (HINSTANCE)hInstance, IDB_TOOLBAR, (LPCTBBUTTON)&tbButtons, sizeof(tbButtons) / sizeof(TBBUTTON), _BMP_CX, _BMP_CY, _BMP_CX, _BMP_CY, sizeof(TBBUTTON)); RECT rcMainWnd, rcToolBar, rcStatusBar; GetClientRect(g_hMainWnd, &rcMainWnd); GetWindowRect(g_hToolBar, &rcToolBar); g_hStatusBar = CreateWindowEx(0L, STATUSCLASSNAME, _T(""), WS_CHILD|WS_BORDER|WS_VISIBLE|SBS_SIZEGRIP, 0, rcMainWnd.bottom - _STATUS_HEIGHT, (rcMainWnd.right - rcMainWnd.left), _STATUS_HEIGHT, g_hMainWnd, (HMENU)_IDW_STATUSBAR, g_hInst, NULL); int nStatusPartsWidths[_NUMOFMAX_STATUS_PARTS]; int nCnt = 0; for (int i = _NUMOFMAX_STATUS_PARTS - 1; i >= 0; i--) nStatusPartsWidths[nCnt++] = (rcMainWnd.right - rcMainWnd.left) - (90 * i); SendMessage(g_hStatusBar, SB_SETPARTS, _NUMOFMAX_STATUS_PARTS, (LPARAM)nStatusPartsWidths); SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(1, 0), (LPARAM)_TEXT("Not Connected")); GetWindowRect(g_hStatusBar, &rcStatusBar); g_hLogMsgWnd = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, _TEXT(""), WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS, 0, (rcToolBar.bottom - rcToolBar.top) - 2, (rcMainWnd.right - rcMainWnd.left), (rcMainWnd.bottom - rcMainWnd.top) - (rcToolBar.bottom - rcToolBar.top) + 2 - (rcStatusBar.bottom - rcStatusBar.top), g_hMainWnd, NULL, (HINSTANCE)hInstance, NULL); ListView_SetExtendedListViewStyleEx(g_hLogMsgWnd, 0, LVS_EX_FULLROWSELECT); LV_COLUMN lvc; TCHAR szText[64]; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; lvc.cx = 100; lvc.pszText = szText; for (i = 0; i < 3; i++) { lvc.iSubItem = i; LoadString((HINSTANCE)hInstance, IDS_LVS_LABEL1 + i, szText, sizeof(szText)); ListView_InsertColumn(g_hLogMsgWnd, i, &lvc); } ListView_SetColumnWidth( g_hLogMsgWnd, 2, 500 ); SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STOPSERVICE, (LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0)); ShowWindow(g_hMainWnd, SW_SHOW); UpdateWindow(g_hMainWnd); if (WSAStartup(MAKEWORD(2, 2), &g_wsd) != 0) return (FALSE); GetDBManager()->Init( InsertLogMsg, "Mir2_Account", "sa", "prg" ); // BYTE btInstalled; if (!jRegGetKey(_LOGIN_SERVER_REGISTRY, _TEXT("Installed"), (LPBYTE)&btInstalled)) CreateConfigProperties(); InvalidateRect( g_hMainWnd, NULL, TRUE ); return TRUE; }
void CGateInfo::ProcLogin(SOCKET s, char *pszData) { char szIDPassword[32]; char *pszID, *pszPassword; char szEncodePacket[64]; _TDEFAULTMESSAGE DefMsg; int nPos; char szQuery[256]; if (memlen(pszData) - 1 <= 0) return; PLISTNODE pListNode = xUserInfoList.GetHead(); while (pListNode) { CUserInfo *pUserInfo = xUserInfoList.GetData(pListNode); if (pUserInfo->sock == s) { int nDecodeLen = fnDecode6BitBufA(pszData, szIDPassword, sizeof(szIDPassword)); szIDPassword[nDecodeLen] = '\0'; pszID = &szIDPassword[0]; if (pszPassword = (char *)memchr(szIDPassword, '/', sizeof(szIDPassword))) { *pszPassword = '******'; pszPassword++; sprintf( szQuery, "SELECT * FROM TBL_ACCOUNT WHERE FLD_LOGINID='%s'", pszID ); CRecordset *pRec = GetDBManager()->CreateRecordset(); if ( !pRec->Execute( szQuery ) || !pRec->Fetch() ) fnMakeDefMessageA( &DefMsg, SM_ID_NOTFOUND, 0, 0, 0, 0 ); else if ( CompareDBString( pszPassword, pRec->Get( "FLD_PASSWORD" ) ) != 0 ) fnMakeDefMessageA( &DefMsg, SM_PASSWD_FAIL, 0, 0, 0, 0 ); else { int nCertCode = atoi( pRec->Get( "FLD_CERTIFICATION" ) ); /* if ( nCertCode > 0 && nCertCode < 30 ) fnMakeDefMessageA(&DefMsg, SM_CERTIFICATION_FAIL, (nCertCode + 1), 0, 0, 0); else if ( nCertCode >= 30 ) fnMakeDefMessageA(&DefMsg, SM_CERTIFICATION_FAIL, 1, 0, 0, 0); else*/ { char szEncodeServerList[512]; char szEncodeAllPacket[1024]; fnMakeDefMessageA(&DefMsg, SM_PASSOK_SELECTSERVER, 0, 1, 0, 0); nPos = fnEncodeMessageA(&DefMsg, szEncodePacket, sizeof(szEncodePacket)); szEncodePacket[nPos] = '\0'; int nPos2 = fnEncode6BitBufA((unsigned char *)g_szServerList, szEncodeServerList, memlen(g_szServerList), sizeof(szEncodeServerList)); szEncodeServerList[nPos2] = '\0'; memmove(szEncodeAllPacket, szEncodePacket, nPos); memmove(&szEncodeAllPacket[nPos], szEncodeServerList, memlen(szEncodeServerList)); SendToGate(s, szEncodeAllPacket); GetDBManager()->DestroyRecordset( pRec ); pUserInfo->nCertification = GetCertification(); // pRec = GetDBManager()->CreateRecordset(); // sprintf( szQuery, // "UPDATE TBL_ACCOUNT SET FLD_CERTIFICATION=%d WHERE FLD_LOGINID='%s'", // GetCertification(), pszID ); // pRec->Execute( szQuery ); // GetDBManager()->DestroyRecordset( pRec ); return; } } GetDBManager()->DestroyRecordset( pRec ); nPos = fnEncodeMessageA(&DefMsg, szEncodePacket, sizeof(szEncodePacket)); szEncodePacket[nPos] = '\0'; SendToGate(s, szEncodePacket); } } pListNode = xUserInfoList.GetNext(pListNode); } }
void CGateInfo::MakeNewCharacter(SOCKET s, _LPTCREATECHR lpTCreateChr) { //ERROR: 1=> Exist Charname, 2=>Wrong Name, 3=>Not enough Space, 4=>Error _TDEFAULTMESSAGE DefaultMsg; char szEncodeMsg[32]; int nPos; char szQuery[2048]; sprintf( szQuery, "SELECT FLD_CHARNAME FROM TBL_CHARACTER WHERE FLD_CHARNAME='%s'", lpTCreateChr->szName ); CRecordset *pRec = GetDBManager()->CreateRecordset(); pRec->Execute( szQuery ); if (pRec->Fetch()) { fnMakeDefMessageA(&DefaultMsg, SM_NEWCHR_FAIL, 0, 1, 0, 0); nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); szEncodeMsg[nPos] = '\0'; SendToGate(s, szEncodeMsg); GetDBManager()->DestroyRecordset( pRec ); return; } GetDBManager()->DestroyRecordset( pRec ); sprintf( szQuery, "SELECT COUNT(FLD_CHARNAME) AS FLD_COUNT FROM TBL_CHARACTER WHERE FLD_CHARNAME='%s'", lpTCreateChr->szName ); pRec = GetDBManager()->CreateRecordset(); if (pRec->Execute( szQuery ) || pRec->Fetch() ) { if (atoi(pRec->Get( "FLD_COUNT" )) >= 3) { fnMakeDefMessageA(&DefaultMsg, SM_NEWCHR_FAIL, 0, 3, 0, 0); nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); szEncodeMsg[nPos] = '\0'; SendToGate(s, szEncodeMsg); GetDBManager()->DestroyRecordset( pRec ); return; } GetDBManager()->DestroyRecordset( pRec ); CTblStartPoint::TABLE *table = GetTblStartPoint()->Get( "4" ); pRec = GetDBManager()->CreateRecordset(); // TBL_CHARACTER 테이블 추가 sprintf(szQuery, "INSERT TBL_CHARACTER (" "FLD_LOGINID, FLD_CHARNAME, FLD_JOB, FLD_GENDER, FLD_LEVEL, FLD_DIRECTION, " "FLD_ATTACKMODE, FLD_CX, FLD_CY, FLD_MAPNAME, FLD_GOLD, FLD_HAIR, " "FLD_DRESS_ID, FLD_WEAPON_ID, FLD_LEFTHAND_ID, FLD_RIGHTHAND_ID, FLD_HELMET_ID, " "FLD_NECKLACE_ID, FLD_ARMRINGL_ID, FLD_ARMRINGR_ID, FLD_RINGL_ID, " "FLD_RINGR_ID, FLD_EXP) VALUES ( " "'%s', '%s', %d, %d, 1, 4, " "1, %d, %d, '%s', 0, 0, " "'0', '0', '0', '0', '0', " "'0', '0', '0', '0', " "'0', 0 )", lpTCreateChr->szID, lpTCreateChr->szName, lpTCreateChr->btClass, lpTCreateChr->btGender, table->posX, table->posY, table->mapName); pRec->Execute( szQuery ); sprintf(szQuery, "INSERT TBL_CHARACTER_GENITEM (FLD_LOGINID, FLD_CHARNAME, FLD_ITEMINDEX) VALUES ('%s', '%s', 'G00080008000')", lpTCreateChr->szID, lpTCreateChr->szName); pRec->Execute( szQuery ); GetDBManager()->DestroyRecordset( pRec ); _TLOADHUMAN human; _TMAKEITEMRCD makeItem; memset( &human, 0, sizeof( human ) ); memset( &makeItem, 0, sizeof( makeItem ) ); strcpy( human.szUserID, lpTCreateChr->szID ); strcpy( human.szCharName, lpTCreateChr->szName ); // 평복 추가 (0: 남, 1: 여) makeItem.szStdType = 'B'; makeItem.nStdIndex = lpTCreateChr->btGender ? 34 : 33; makeItem.nDura = 5000; makeItem.nDuraMax = 5000; MakeNewItem( NULL, &human, &makeItem, 0 ); // 목검 추가 makeItem.szStdType = 'A'; makeItem.nStdIndex = 7; makeItem.nDura = 4000; makeItem.nDuraMax = 4000; MakeNewItem( NULL, &human, &makeItem, 0 ); fnMakeDefMessageA(&DefaultMsg, SM_NEWCHR_SUCCESS, 0, 0, 0, 0); nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); szEncodeMsg[nPos] = '\0'; SendToGate(s, szEncodeMsg); return; } fnMakeDefMessageA(&DefaultMsg, SM_NEWCHR_FAIL, 0, 4, 0, 0); nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); szEncodeMsg[nPos] = '\0'; SendToGate(s, szEncodeMsg); GetDBManager()->DestroyRecordset( pRec ); }
void CGateInfo::QueryCharacter(SOCKET s, char *pszPacket) { _TQUERYCHR tQueryChr[3]; char szDecodeMsg[128]; int nCnt = 0; char szQuery[256]; ZeroMemory(tQueryChr, sizeof(tQueryChr)); int nPos = fnDecode6BitBufA(pszPacket, szDecodeMsg, sizeof(szDecodeMsg)); szDecodeMsg[nPos] = '\0'; char *pszDevide = (char *)memchr(szDecodeMsg, '/', nPos); if (pszDevide) { *pszDevide++ = '\0'; sprintf( szQuery, "SELECT * FROM TBL_CHARACTER WHERE FLD_LOGINID='%s'", pszDevide ); CRecordset *pRec = GetDBManager()->CreateRecordset(); if (pRec->Execute( szQuery )) { while (pRec->Fetch() && nCnt < 3) { tQueryChr[nCnt].btClass = atoi( pRec->Get( "FLD_JOB" ) ); tQueryChr[nCnt].btGender = atoi( pRec->Get( "FLD_GENDER" ) ); strcpy( tQueryChr[nCnt].szName, pRec->Get( "FLD_CHARNAME" ) ); ChangeSpaceToNull( tQueryChr[nCnt].szName ); nCnt++; } } GetDBManager()->DestroyRecordset( pRec ); _TDEFAULTMESSAGE DefaultMsg; char szEncodeMsg[32]; char szEncodeData[256]; char szEncodePacket[256]; if (nCnt > 0 && nCnt < 3) { fnMakeDefMessageA(&DefaultMsg, SM_QUERYCHR, 0, nCnt, 0, 0); nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); int nPos2 = fnEncode6BitBufA((unsigned char *)tQueryChr, szEncodeData, sizeof(_TQUERYCHR) * nCnt, sizeof(szEncodeData)); memmove(szEncodePacket, szEncodeMsg, nPos); memmove(&szEncodePacket[nPos], szEncodeData, nPos2); szEncodePacket[nPos + nPos2] = '\0'; SendToGate(s, szEncodePacket); } else { fnMakeDefMessageA(&DefaultMsg, SM_QUERYCHR_FAIL, 0, 0, 0, 0); nPos = fnEncodeMessageA(&DefaultMsg, szEncodeMsg, sizeof(szEncodeMsg)); szEncodeMsg[nPos] = '\0'; SendToGate(s, szEncodeMsg); } } }