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

📄 dbagent.cpp

📁 骑士游戏部分源代码。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	}
	
	SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	return retval;
}

int CDBAgent::CreateKnights(int knightsindex, int nation, char *name, char *chief, int iFlag)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );
	SQLSMALLINT		sParmRet=0, sKnightIndex=0;
	SQLINTEGER		cbParmRet=SQL_NTS;

	wsprintf( szSQL, TEXT( "{call CREATE_KNIGHTS ( ?, %d, %d, %d, \'%s\', \'%s\' )}" ), knightsindex, nation, iFlag, name, chief );
	//wsprintf( szSQL, TEXT( "{call CREATE_KNIGHTS ( ?, ?, %d, %d, \'%s\', \'%s\' )}" ), nation, iFlag, name, chief );

	DBProcessNumber( 10 );

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sParmRet,0, &cbParmRet );
		//retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sKnightIndex,0, &cbParmRet );
		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 FALSE;
					}
				}
				SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
				return sParmRet;
			}
			
			SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
			return sParmRet;
		}
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	
	return -1;
}

int CDBAgent::UpdateKnights(int type, char *userid, int knightsindex, int domination)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );
	SQLSMALLINT		sParmRet;
	SQLINTEGER		cbParmRet=SQL_NTS;

	wsprintf( szSQL, TEXT( "{call UPDATE_KNIGHTS ( ?, %d, \'%s\', %d, %d)}" ), (BYTE)type, userid, knightsindex, (BYTE)domination );
	//wsprintf( szSQL, TEXT( "{call UPDATE_KNIGHTS2 ( ?, %d, \'%s\', %d, %d)}" ), type, userid, knightsindex, domination );

	DBProcessNumber( 11 );

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sParmRet,0, &cbParmRet );
		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 FALSE;
					}
				}
				SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
				return sParmRet;
			}
			
			TRACE("DB - UpdateKnights - command=%d, name=%s, index=%d, result=%d \n", type, userid, knightsindex, domination);
			SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
			return sParmRet;
		}
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	
	return -1;
}

int CDBAgent::DeleteKnights(int knightsindex)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );
	SQLSMALLINT		sParmRet;
	SQLINTEGER		cbParmRet=SQL_NTS;

	wsprintf( szSQL, TEXT( "{call DELETE_KNIGHTS ( ?, %d )}" ), knightsindex );
	//wsprintf( szSQL, TEXT( "{call DELETE_KNIGHTS2 ( ?, %d )}" ), knightsindex );

	DBProcessNumber( 12 );

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sParmRet,0, &cbParmRet );
		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 -1;
					}
				}
				SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
				return sParmRet;
			}
			
			SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
			return sParmRet;
		}
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	
	return -1;
}

int CDBAgent::LoadKnightsAllMembers(int knightsindex, int start, char *temp_buff, int& buff_index )
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bData = TRUE;
	int				count = 0, temp_index = 0, sid = 0;
	CString			tempid;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	SQLCHAR userid[MAX_ID_SIZE+1];
	SQLCHAR Fame, Level;
	SQLSMALLINT	Class;
	SQLINTEGER Indexind = SQL_NTS;
	_USER_DATA* pUser = NULL;

	//wsprintf( szSQL, TEXT( "SELECT strUserId, Fame, [Level], Class FROM USERDATA WHERE Knights = %d" ), knightsindex );
	wsprintf( szSQL, TEXT( "{call LOAD_KNIGHTS_MEMBERS ( %d )}" ), knightsindex );

	DBProcessNumber( 13 );

	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_CHAR  ,userid, MAX_ID_SIZE+1,&Indexind);
					SQLGetData(hstmt,2  ,SQL_C_TINYINT,&Fame, 0,&Indexind);
					SQLGetData(hstmt,3  ,SQL_C_TINYINT,&Level,0,&Indexind);
					SQLGetData(hstmt,4  ,SQL_C_SSHORT,&Class, 0,&Indexind);

				//	if( count < start ) {
				//		count++;
				//		continue;
				//	}
					strcpy( (char*)(LPCTSTR)tempid, (char*)userid);
					tempid.TrimRight();

					SetShort( temp_buff, strlen((char*)(LPCTSTR)tempid), temp_index);
					SetString( temp_buff, (char*)(LPCTSTR)tempid, strlen((char*)(LPCTSTR)tempid), temp_index);
					SetByte( temp_buff, Fame, temp_index);
					SetByte( temp_buff, Level, temp_index);
					SetShort( temp_buff, Class, temp_index);

					sid = -1;
					//(_USER_DATA*)m_UserDataArray[uid];
					pUser = m_pMain->GetUserPtr( (const char*)(LPCTSTR)tempid, sid );
					//pUser = (_USER_DATA*)m_UserDataArray[sid];
					if( pUser )	SetByte( temp_buff, 1, temp_index);
					else		SetByte( temp_buff, 0, temp_index);

					count++;
					//if( count >= start + 10 )
					//	break;

					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 0;
				}
			}
		}
	
		SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}

	buff_index = temp_index;
	return (count - start);
}

BOOL CDBAgent::UpdateConCurrentUserCount(int serverno, int zoneno, int t_count)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	switch( zoneno ) {
	case 1:
		wsprintf( szSQL, TEXT( "UPDATE CONCURRENT SET zone1_count = %d WHERE serverid = %d" ), t_count, serverno );
		break;
	case 2:
		wsprintf( szSQL, TEXT( "UPDATE CONCURRENT SET zone2_count = %d WHERE serverid = %d" ), t_count, serverno );
		break;
	case 3:
		wsprintf( szSQL, TEXT( "UPDATE CONCURRENT SET zone3_count = %d WHERE serverid = %d" ), t_count, serverno );
		break;
	}

	DBProcessNumber( 14 );

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

BOOL CDBAgent::LoadWarehouseData(const char *accountid, int uid)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL retval;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	_USER_DATA* pUser = NULL;
	_ITEM_TABLE* pTable = NULL;
	SQLINTEGER	Money = 0, dwTime = 0;
	TCHAR strItem[1600], strSerial[1600];
	memset( strItem, 0x00, 1600 );
	memset( strSerial, 0x00, 1600 );
	SQLINTEGER Indexind = SQL_NTS;

	wsprintf( szSQL, TEXT( "SELECT nMoney, dwTime, WarehouseData, strSerial FROM WAREHOUSE WHERE strAccountID = \'%s\'" ), accountid );

	DBProcessNumber( 15 );

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

	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, &Money,  0,		&Indexind);
			SQLGetData(hstmt,2 ,SQL_C_LONG, &dwTime,  0,	&Indexind);
			SQLGetData(hstmt,3 ,SQL_C_CHAR, strItem, 1600,	&Indexind);
			SQLGetData(hstmt,4 ,SQL_C_CHAR, strSerial, 1600,	&Indexind);
			retval = TRUE;
		}
		else
			retval = 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 FALSE;
			}
		}
		retval = FALSE;
	}
	
	SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);

	if( !retval )
		return FALSE;
	
	pUser = (_USER_DATA*)m_UserDataArray[uid];
	if( !pUser )
		return FALSE;
	if( strlen( pUser->m_id ) == 0 )
		return FALSE;

	pUser->m_iBank = Money;

	int index = 0, serial_index = 0;
	DWORD itemid = 0;
	short count = 0, duration = 0;
	__int64 serial = 0;
	for(int i = 0; i < WAREHOUSE_MAX; i++) {
		itemid = GetDWORD(strItem, index);
		duration = GetShort(strItem, index );
		count = GetShort(strItem, index);

		serial = GetInt64( strSerial, serial_index );

		pTable = m_pMain->m_ItemtableArray.GetData(itemid);
		if( pTable ) {
			pUser->m_sWarehouseArray[i].nNum = itemid;
			pUser->m_sWarehouseArray[i].sDuration = duration;
			if( count > ITEMCOUNT_MAX )
				pUser->m_sWarehouseArray[i].sCount = ITEMCOUNT_MAX;
			else if( count <= 0 )
				count = 1;
			pUser->m_sWarehouseArray[i].sCount = count;
			pUser->m_sWarehouseArray[i].nSerialNum = serial;
			TRACE("%s : %d ware slot (%d : %I64d)\n", pUser->m_id, i, pUser->m_sWarehouseArray[i].nNum, pUser->m_sWarehouseArray[i].nSerialNum);
		}
		else {
			pUser->m_sWarehouseArray[i].nNum = 0;
			pUser->m_sWarehouseArray[i].sDuration = 0;
			pUser->m_sWarehouseArray[i].sCount = 0;
			if( itemid > 0 ) {
				char logstr[256];
				memset( logstr, 0x00, 256);
				sprintf( logstr, "Warehouse Item Drop(%d) : %d (%s)\r\n", i, itemid, accountid );
				//m_pMain->WriteLogFile( logstr );
				//m_pMain->m_LogFile.Write(logstr, strlen(logstr));
			}
		}
	}

	return retval;
}

int CDBAgent::UpdateWarehouseData(const char *accountid, int uid, int type )
{
	SQLHSTMT		hstmt;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];
	SDWORD			sStrItem, sStrSerial;
	
	_USER_DATA* pUser = NULL;
	memset( szSQL, 0x00, 1024 );

	pUser = (_USER_DATA*)m_UserDataArray[uid];
	if( !pUser )
		return -1;
	if( strlen( accountid ) == 0 )
		return -1;
	if( _strnicmp( pUser->m_Accountid, accountid, MAX_ID_SIZE ) != 0 )
		return -1;

	else if( type == UPDATE_LOGOUT || type == UPDATE_ALL_SAVE )
		pUser->m_dwTime = 0;

	TCHAR strItem[1600], strSerial[1600];
	memset( strItem, 0x00, 1600 );
	memset( strSerial, 0x00, 1600 );
	sStrItem = sizeof(strItem);
	sStrSerial = sizeof(strSerial);

	int index = 0, serial_index = 0;
	for(int i = 0; i < WAREHOUSE_MAX; i++) { 
		SetDWORD(strItem, pUser->m_sWarehouseArray[i].nNum, index);
		SetShort(strItem, pUser->m_sWarehouseArray[i].sDuration, index );
		SetShort(strItem, pUser->m_sWarehouseArray[i].sCount, index);

		SetInt64(strSerial, pUser->m_sWarehouseArray[i].nSerialNum, serial_index );
	}

	wsprintf( szSQL, TEXT( "{call UPDATE_WAREHOUSE ( \'%s\', %d,%d,?,?)}" ),	 accountid, pUser->m_iBank, pUser->m_dwTime);

	DBProcessNumber( 16 );

	hstmt = NULL;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(strItem),0, strItem,0, &sStrItem );
		retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(strSerial),0, strSerial,0, &sStrSerial );
		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);

				char logstr[2048]; memset( logstr, 0x00, 2048 );
				sprintf( logstr, "%s, Item[%s] \r\n", szSQL, strItem );
				m_pMain->WriteLogFile( logstr );
				//m_pMain->m_LogFile.Write(logstr, strlen(logstr));
				return FALSE;
			}
			SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
			return 1;
		}
		else 
			SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
	}
	
	return 0;
}

BOOL CDBAgent::LoadKnightsInfo( int index, char* buff, int &buff_index)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bData = TRUE,	retval = FALSE;
	CString			tempid;
	TCHAR			szSQL[1024];
	memset( szSQL, 0x00, 1024 );

	SQLCHAR IDName[MAX_ID_SIZE+1], Nation;

⌨️ 快捷键说明

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