⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbagent.cpp

📁 骑士游戏部分源代码。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	char szKnightsName[MAX_ID_SIZE+1];
	memset( IDName, 0x00, MAX_ID_SIZE+1 ); 
	memset( szKnightsName, 0x00, MAX_ID_SIZE+1 ); 
	SQLSMALLINT	IDNum, Members;
	SQLINTEGER Indexind = SQL_NTS, nPoints = 0;

	int len = 0;

	wsprintf( szSQL, TEXT( "SELECT IDNum, Nation, IDName, Members, Points FROM KNIGHTS WHERE IDNum=%d" ), index );

	DBProcessNumber( 17 );

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
		if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
			retcode = SQLFetch(hstmt);
			if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
				SQLGetData(hstmt,1  ,SQL_C_SSHORT,&IDNum, 0,&Indexind);
				SQLGetData(hstmt,2  ,SQL_C_TINYINT,&Nation, 0,&Indexind);
				SQLGetData(hstmt,3  ,SQL_C_CHAR  ,IDName, MAX_ID_SIZE+1,&Indexind);
				SQLGetData(hstmt,4  ,SQL_C_SSHORT,&Members, 0,&Indexind);
				SQLGetData(hstmt,5  ,SQL_C_LONG,&nPoints, 0,&Indexind);

				tempid = IDName;
				tempid.TrimRight();

				strcpy( szKnightsName, (char*)(LPCTSTR) tempid);

				SetShort( buff, IDNum, buff_index);
				SetByte( buff, Nation, buff_index);
				SetShort( buff, strlen(szKnightsName), buff_index);
				SetString( buff, szKnightsName, strlen(szKnightsName), buff_index);
				SetShort( buff, Members, buff_index );
				SetDWORD( buff, nPoints, buff_index );

				retval = TRUE;
			}

		}
		else {
			if( DisplayErrorMsg(hstmt) == -1 ) {
				m_GameDB.Close();
				if( !m_GameDB.IsOpen() ) {
					ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
					return FALSE;
				}
			}
			retval = FALSE;
		}
	
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	else
		return FALSE;
	
	return retval;
}

BOOL CDBAgent::SetLogInInfo(const char *accountid, const char *charid, const char *serverip, int serverno, const char *clientip, BYTE bInit)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );
	SQLINTEGER		cbParmRet=SQL_NTS;
	BOOL			bSuccess = TRUE;

	if( bInit == 0x01 )
		wsprintf( szSQL, TEXT( "INSERT INTO CURRENTUSER (strAccountID, strCharID, nServerNo, strServerIP, strClientIP) VALUES (\'%s\',\'%s\',%d,\'%s\',\'%s\')" ), accountid, charid, serverno, serverip, clientip );
	else if( bInit == 0x02 )
		wsprintf( szSQL, TEXT( "UPDATE CURRENTUSER SET nServerNo=%d, strServerIP=\'%s\' WHERE strAccountID = \'%s\'" ), serverno, serverip, accountid );
	else
		return FALSE;

	DBProcessNumber( 18 );

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
		if (retcode==SQL_ERROR)
		{
			bSuccess = FALSE;
			if( DisplayErrorMsg(hstmt) == -1 ) {
				m_AccountDB.Close();
				if( !m_AccountDB.IsOpen() ) {
					ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
					return FALSE;
				}
			}
		}
			
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}

	return bSuccess;
}

int CDBAgent::AccountLogout(const char *accountid)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );
	SQLSMALLINT		sParmRet=0;
	SQLINTEGER		cbParmRet=SQL_NTS;

	wsprintf( szSQL, TEXT( "{call ACCOUNT_LOGOUT( \'%s\', ?)}" ), accountid);

	DBProcessNumber( 19 );

	CTime t = CTime::GetCurrentTime();
	char strlog[256]; memset(strlog, 0x00, 256);
	sprintf(strlog, "[AccountLogout] acname=%s \r\n", accountid);
	m_pMain->WriteLogFile( strlog );
	//m_pMain->m_LogFile.Write(strlog, strlen(strlog));
	TRACE(strlog);

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLBindParameter(hstmt,1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_SMALLINT, 0,0, &sParmRet,0, &cbParmRet );
		if(retcode == SQL_SUCCESS)
		{
			retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
			if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
			{
				SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
				if( sParmRet == 0 )
					return -1;
				else
					return sParmRet; // 1 == success
			}
			else
			{
				if( DisplayErrorMsg(hstmt) == -1 ) {
					m_AccountDB.Close();
					if( !m_AccountDB.IsOpen() ) {
						ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
						return FALSE;
					}
				}
				SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
				return -1;
			}			
		}

		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	
	return -1;
}

BOOL CDBAgent::CheckUserData(const char *accountid, const char *charid, int type, int nTimeNumber, int comparedata)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bData = TRUE,	retval = FALSE;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	SQLINTEGER Indexind = SQL_NTS, dwTime = 0, iData = 0;

	if( type == 1 )
		wsprintf( szSQL, TEXT( "SELECT dwTime, nMoney FROM WAREHOUSE WHERE strAccountID=\'%s\'" ), accountid );
	else
		wsprintf( szSQL, TEXT( "SELECT dwTime, [Exp] FROM USERDATA WHERE strUserID=\'%s\'" ), charid );

	DBProcessNumber( 20 );

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
		if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
			retcode = SQLFetch(hstmt);
			if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
				SQLGetData(hstmt,1  ,SQL_C_LONG, &dwTime, 0,&Indexind);
				SQLGetData(hstmt,2  ,SQL_C_LONG, &iData, 0,&Indexind);	// type:1 -> Bank Money type:2 -> Exp

				if( nTimeNumber != dwTime || comparedata != iData)	{	// check userdata have saved
					retval = FALSE;
				}
				else
					retval = TRUE;
			}

		}
		else {
			if( DisplayErrorMsg(hstmt) == -1 ) {
				m_GameDB.Close();
				if( !m_GameDB.IsOpen() ) {
					ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
					return FALSE;
				}
			}
			retval = FALSE;
		}
	
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	else
		return FALSE;
	
	return retval;
}

void CDBAgent::LoadKnightsAllList( int nation)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bData = TRUE;
	int				count = 0;
	CString			tempid;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	char send_buff[512]; memset(send_buff, 0x00, 512);
	char temp_buff[512]; memset(temp_buff, 0x00, 512);
	int send_index = 0, temp_index = 0;

	SQLCHAR bRanking = 0;
	SQLSMALLINT	shKnights = 0;
	SQLINTEGER Indexind = SQL_NTS, nPoints = 0;

	if( nation == 3 )	// battle zone
		wsprintf( szSQL, TEXT( "SELECT IDNum, Points, Ranking FROM KNIGHTS WHERE Points <> 0 ORDER BY Points DESC" ), nation );
	else
		wsprintf( szSQL, TEXT( "SELECT IDNum, Points, Ranking FROM KNIGHTS WHERE Nation=%d AND Points <> 0 ORDER BY Points DESC" ), nation );

	DBProcessNumber( 21 );


	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)	{
		retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
		if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
			while (bData) {
				retcode = SQLFetch(hstmt);
				if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
					SQLGetData(hstmt,1  ,SQL_C_SSHORT,&shKnights, 0,&Indexind);
					SQLGetData(hstmt,2  ,SQL_C_LONG,  &nPoints,   0,&Indexind);
					SQLGetData(hstmt,3  ,SQL_C_TINYINT,  &bRanking,   0,&Indexind);

					SetShort( temp_buff, shKnights, temp_index);
					SetDWORD( temp_buff, nPoints, temp_index);
					SetByte( temp_buff, bRanking, temp_index );

					count++;

					if( count >= 40 )	{	// 40俺 窜困肺 焊辰促
						SetByte( send_buff, KNIGHTS_ALLLIST_REQ, send_index );
						SetShort( send_buff, -1, send_index );
						SetByte( send_buff, count, send_index );
						SetString( send_buff, temp_buff, temp_index, send_index );

						do {
							if( m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ) == 1 )
								break;
							else
								count++;
						} while( count < 50 );
						if( count >= 50 )
							m_pMain->m_OutputList.AddString("LoadKnightsAllList Packet Drop!!!");

						memset( send_buff, 0x00, 512);	memset( temp_buff, 0x00, 512);
						send_index = temp_index = 0;		count = 0;
					}
					bData = TRUE;
				}
				else
					bData = FALSE;
			}
		}
		else {
			if( DisplayErrorMsg(hstmt) == -1 ) {
				m_GameDB.Close();
				if( !m_GameDB.IsOpen() ) {
					ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
					return;
				}
			}
		}

		if( count < 40 )	{				// 40俺甫 焊郴瘤 给茄 版快
			SetByte( send_buff, KNIGHTS_ALLLIST_REQ, send_index );
			SetShort( send_buff, -1, send_index );
			SetByte( send_buff, count, send_index );
			SetString( send_buff, temp_buff, temp_index, send_index );

			do {
				if( m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ) == 1 )
					break;
				else
					count++;
			} while( count < 50 );
			if( count >= 50 )
				m_pMain->m_OutputList.AddString("LoadKnightsAllList Packet Drop!!!");
		}
	
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
}

void CDBAgent::DBProcessNumber( int number )
{
	CString strDBNum;

	strDBNum.Format( " %4d ", number );

	m_pMain->GetDlgItem( IDC_DB_PROCESS )->SetWindowText(strDBNum);
	m_pMain->GetDlgItem( IDC_DB_PROCESS )->UpdateWindow();
}

BOOL CDBAgent::UpdateBattleEvent( const char* charid, int nation )
{
	SQLHSTMT		hstmt;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	DBProcessNumber( 22 );

	wsprintf( szSQL, TEXT( "UPDATE BATTLE SET byNation=%d, strUserName=\'%s\' WHERE sIndex=%d" ), nation, charid, 1 );

	hstmt = NULL;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)	{
		retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
		if (retcode==SQL_ERROR)	{
			if( DisplayErrorMsg(hstmt) == -1 ) {
					m_GameDB.Close();
					if( !m_GameDB.IsOpen() ) {
						ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
						return 0;
					}
				}
			SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
			return FALSE;
		}
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	
	return TRUE;
}

BOOL CDBAgent::CheckCouponEvent( const char* accountid )
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bData = TRUE,	retval = FALSE;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	SQLINTEGER Indexind = SQL_NTS;
	SQLSMALLINT sRet = 0;

	wsprintf(szSQL, TEXT("{call CHECK_COUPON_EVENT (\'%s\', ?)}"), accountid);

	hstmt = NULL;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
	if (retcode != SQL_SUCCESS)	{
		return FALSE; 
	}

	retcode = SQLBindParameter(hstmt,1,SQL_PARAM_OUTPUT,SQL_C_SSHORT, SQL_SMALLINT,0,0, &sRet,0,&Indexind);
	if (retcode != SQL_SUCCESS){
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
		return FALSE;
	}

	retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);	
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
		//SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
		if( sRet == 0 )	retval = TRUE;
		else retval = FALSE;
	}
	else {
		if( DisplayErrorMsg(hstmt) == -1 ) {
			m_AccountDB.Close();
			if( !m_AccountDB.IsOpen() ) {
				ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
				return FALSE;
			}
		}
		retval= FALSE;
	}

	SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);

	return retval;
}

BOOL CDBAgent::UpdateCouponEvent( const char* accountid, char* charid, char* cpid, int itemid, int count )
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bData = TRUE,	retval = FALSE;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	SQLINTEGER Indexind = SQL_NTS;
	SQLSMALLINT sRet = 0;

	wsprintf(szSQL, TEXT("{call UPDATE_COUPON_EVENT (\'%s\', \'%s\', \'%s\', %d, %d)}"), accountid, charid, cpid, itemid, count);

	hstmt = NULL;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB.m_hdbc, &hstmt );
	if (retcode != SQL_SUCCESS)	{
		return FALSE; 
	}

/*	retcode = SQLBindParameter(hstmt,1,SQL_PARAM_OUTPUT,SQL_C_SSHORT, SQL_SMALLINT,0,0, &sRet,0,&Indexind);
	if (retcode != SQL_SUCCESS){
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
		return FALSE;
	}	*/

	retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);	
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
		//SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
		retval = TRUE;
		//if( sRet == 1 )	retval = TRUE;
		//else retval = FALSE;
	}
	else {
		if( DisplayErrorMsg(hstmt) == -1 ) {
			m_AccountDB.Close();
			if( !m_AccountDB.IsOpen() ) {
				ReConnectODBC( &m_AccountDB, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
				return FALSE;
			}
		}
		retval= FALSE;
	}

	SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);

	return retval;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -