SF游戏辅助开发(关于技术开发的说明)

近期有不少网友来咨询详细的技术开发问题,比如编程,调用数据等详细的开发技术问题,有的甚至还问到是否收徒,在这里我们做个关于这些的必要说明;

我们不收徒,其次关于问到开发上的问题,因为这些不是一句两句可以说清楚的,因为开发上不只是涉及代码,还有动态数据库调用、组件调用、dll、封装等,所以我们建议是去经过系统性的编程方面的培训学习;


下面放出一个成品辅助以及部分核心代码以供热爱学习的网友做个参考


首先我们这里是定制型技术开发,就是只负责技术开发,不运维任何辅助,是谁定制的就做完后连同源码及原始数据一起打包发给谁,

我们只负责技术开发,至于客户是绑卡卖还是自己用以及产生的任何纠纷都和我们无关


baidu网盘下载: https://pan.baidu.com/s/1RdK5CuCbrjFDhocXxAtd9Q?pwd=rybe 提取码: rybe

本地下载


以下是部分重点代码以作参考

头部基础部分
public:
	CMsgQueue()
	{
		m_iGet = 0;
		m_iPut = 0;
		Clear();
	};
	virtual ~CMsgQueue()
	{
		Clear();
	};
	int NextPos( int now )
	{
		now++;
		if( now >= MSGQUEUELEN )
			now = 0;
		return now;
	}
	int	PutMsg( char * pMsg )
	{
		int iNext = NextPos( m_iPut );

		if( pMsg == NULL )
			return 0;
		if( iNext == m_iGet )
		{
			return 0;
		}
		strcpy( m_Msgs[m_iPut], pMsg );
		m_iPut = iNext;
		return 1;
	};

	int GetMsg( char * pMsg )
	{
		if( m_iGet == m_iPut )
			return 0;
		strcpy( pMsg, m_Msgs[m_iGet] );
//		printf( "m_iPut = %d, m_iGet = %d\n", m_iPut, m_iGet );
		m_iGet = NextPos( m_iGet );
		return 1;
	};
	int	Clear()
	{
		memset( (void*)m_Msgs, 0, sizeof( TMSGLINE ) * MSGQUEUELEN );
		return 1;
	};
private:
	TMSGLINE	m_Msgs[MSGQUEUELEN];
	int			m_iGet;
	int			m_iPut;
};

CMsgQueue	g_MsgQueue;
HWND		m_hSysLog = NULL;
HWND		m_hChatLog = NULL;
HWND		m_hMainDlg = NULL;
int			m_MaxLogLine = 100;

BOOL	InitZtCore( HWND	hMainWnd, HWND	hSysLog, HWND	hChatLog, int MaxLogLine )
{
	m_hSysLog = hSysLog;
	m_hChatLog = hChatLog;
	m_hMainDlg = hMainWnd;
	m_MaxLogLine = MaxLogLine;
	return TRUE;
}
void	LogToList( HWND hList, char * line )
{
	int cnt = 0;
	cnt = ListBox_GetCount( hList );
	if( cnt >= m_MaxLogLine )
	{
		ListBox_DeleteString( hList, 0 );
		cnt --;
	}
	ListBox_AddString( hList, line );
	ListBox_SetCurSel( hList, cnt );
}

void	LogChat( char * line,... )
{
	char	szBuff[2048];
	va_list	vl;
	va_start( vl, line );
	vsprintf( szBuff, line, vl );
	va_end( vl);
	LogToList( m_hChatLog, szBuff );
}

void	LogSystem( char * line,... )
{
	char	szBuff[2048];
	va_list	vl;
	va_start( vl, line );
	vsprintf( szBuff, line, vl );
	va_end( vl);
	LogToList( m_hSysLog, szBuff );
}

int ActionOk()
{
	printf( "Action Ok!\n" );
	switch( g_LastAction.action )
	{
	case	ACTION_RUN:
	case	ACTION_WALK:
		g_pos_x = g_LastAction.x;
		g_pos_y = g_LastAction.y;
		break;
	}
	g_LastAction.action = 0;

	return 1;
}
int ActionFail()
{
	printf( "Action Fail!\n" );
	g_LastAction.action = 0;
	return 1;
}
int CanDoAction()
{
	if( g_LastAction.action == 0 )
		return 1;
	return 0;
}
int GetString( char * string )
{
	int ilen = strlen( string );
	int i = 0;
	int cnt = 0;
	int sptr = 0;
	for( i =0;i < ilen;i ++ )
	{
		if( string[i] == '/' && i != 0 )
		{
			g_StringList[cnt][sptr] = '\0';
			sptr = 0;
			cnt++;
		}
		else
		{
			g_StringList[cnt][sptr] = string[i];
			sptr ++;
		}
	}
	if( sptr > 0 )
	{
		g_StringList[cnt][sptr] = '\0';
		cnt++;
	}
	return cnt;
}
int SendString( SOCKET s, char * string )
{
	int ierr = 0;
	int ilen = strlen( string );
//	printf( "Send: %s\n", string );
	ierr = send( s, string, strlen( string), 0 );
	if( ierr == ilen )
	{
		g_msgflag ++;
		if( g_msgflag > '9' )
			g_msgflag = '1';
	}
	return ierr;
}
int RecvString( SOCKET s, char * string, int maxlen )
{
	int ierr = 0;
	char	tmpBuffer[2048];
	ierr = recv( s, tmpBuffer, 2048, 0 );
	if( ierr !=- 1)
	{
		if( tmpBuffer[0] == '*' )
		{
			strcpy( string, &tmpBuffer[1]);
			ierr --;
		}
		else
		{
			strcpy( string, tmpBuffer );
		}
		string[ierr] = '\0';
//		printf( "Recv:%s\n", string );
	}
	return ierr;
}
int RecvMsg( SOCKET s, MMSG * pmsg )
{
	char tmpBuffer[2048];
//	char tmpBuffer2[2048];
	int ierr;
	ierr = RecvString( s, tmpBuffer, 2048 );
	if( ierr == -1 )
	{
		return -1;
	}
	if(tmpBuffer[ierr-1] == '!' )
	{
		tmpBuffer[ierr-1] = '\0';
	}
	UnGameCode( &tmpBuffer[1], (BYTE*)pmsg );
	if( pmsg->wCmd == 0x0a )
	{
		//printf( "Code is %s\n", tmpBuffer );
	}
	return ierr;
}
int GetMsg( MMSG * pMsg )
{
	char	tmpBuffer[1024];
	int ilen = 0;
	if( g_MsgQueue.GetMsg( tmpBuffer ))
	{
		ilen = strlen( tmpBuffer );
		if( tmpBuffer[ilen-1] == '!' )
		{
			tmpBuffer[ilen-1] = '\0';
		}
		printf( "Msg: %s\n", tmpBuffer );
		if( tmpBuffer[1] == '+' )
		{
			tmpBuffer[6] = '\0';
			printf( "GetWords %s\n", tmpBuffer );
			if( stricmp( tmpBuffer, "#+GOOD" ) == 0 )
			{
				ActionOk();
			}
			else if( stricmp( tmpBuffer, "#+FAIL" ) == 0 )
			{
				ActionFail();
			}
			return 0;
			
		}
		UnGameCode( &tmpBuffer[1], (BYTE*)pMsg );
		return 1;	
	}
	return 0;
}
int SetNoBlock( SOCKET s )
{
	unsigned long mode = 1;
	if( ioctlsocket( s, FIONBIO, &mode ) == -1 )
		return 0;
	return 1;
}
int RecvGateMsg( SOCKET s, MMSG * pmsg )
{
	char tmpBuffer[2048];
	char tmpBuffer2[2048];
	int ierr;
	ierr = RecvString( s, tmpBuffer, 2048 );
	if( ierr == -1 )
	{
		return -1;
	}
	tmpBuffer[ierr-1] = '\0';

	UnGateCode( &tmpBuffer[1], tmpBuffer2 );
	ierr = strlen( tmpBuffer2 );

	if(tmpBuffer2[ierr-1] == '!' )
	{
		tmpBuffer2[ierr-1] = '\0';
	}
	UnGameCode( &tmpBuffer2[1], (BYTE*)pmsg );
	return ierr;

}
int SendMsg( SOCKET s, MMSG * pmsg )
{
	char	tmpBuffer[2048];
	char	tmpBuffer2[2048];
	int msize = 0;
	msize = strlen(pmsg->data ) + MSGHEADERSIZE;

	CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)tmpBuffer );
	sprintf( tmpBuffer2, "#%c%s!",g_msgflag, tmpBuffer );
	return SendString( s,tmpBuffer2 );
}

int SendGateMsg( SOCKET s, MMSG * pmsg )
{
	char	tmpBuffer[2048];
	char	tmpBuffer2[2048];
	int msize = 0;
	msize = strlen(pmsg->data ) + MSGHEADERSIZE;

	CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)tmpBuffer );
	sprintf( tmpBuffer2, "#%c%s!",g_msgflag, tmpBuffer );
	CodeGateCode( tmpBuffer2, tmpBuffer );
	sprintf( tmpBuffer2, "<%s>", tmpBuffer );

	return SendString( s, tmpBuffer2 );
}
int SendWords( SOCKET  s , char * word )
{
	MMSG msg;
	memset( &msg, 0, sizeof( MMSG ));
	sprintf( msg.data, "#(%03d,%03d)-%s", g_pos_x, g_pos_y, word );
	msg.wCmd = 0xbd6;
	int erri;
	erri = SendMsg( s, &msg );
	return erri;
}
int TurnDirect( SOCKET s, int dir )
{
	MMSG msg;
	char	tmpBuffer[2048];
	int erri;
	memset( &msg, 0, sizeof( MMSG ));
	//msg.dwFlag = 0x6000e;
	msg.wa = g_pos_x;
	msg.wb = g_pos_y;
	msg.wCmd = 0xbc2;
	msg.w2 = dir;
	erri = SendMsg( s, &msg );
	if( erri == -1 )
		return -1;
	erri = RecvString( s, tmpBuffer, 256 );
	if( erri == -1 )
		return 0;
	//printf( "%s\n", tmpBuffer );
	tmpBuffer[6] = '\0';
	if( stricmp( &tmpBuffer[1] ,"+GOOD") == 0 )
	{
		//g_pos_x += xofs_walk[dir];
		//g_pos_y += yofs_walk[dir];
		return 1;
	}
	return 0;
}
int	xofs_walk[] = { 0, 1, 1, 1, 0, -1, -1, -1 };
int yofs_walk[] = { -1, -1, 0, 1, 1, 1, 0, -1 };

int Walk( SOCKET s, int dir )
{
	MMSG msg;
	char	tmpBuffer[2048];
	int erri;
	int tx,ty;
	if( dir <0 || dir > 7 )
		return 0;
	tx = g_pos_x + xofs_walk[dir];
	ty = g_pos_y + yofs_walk[dir];
	memset( &msg, 0, sizeof( MMSG ));
	//msg.dwFlag = 0x6000e;
	msg.wa = tx;//g_pos_x;
	msg.wb = ty;//g_pos_y;
	msg.wCmd = 0xbc3;
	msg.w2 = dir;
	erri = SendMsg( s, &msg );
	if( erri == -1 )
		return -1;
	erri = RecvString( s, tmpBuffer, 256 );
	if( erri == -1 )
		return 0;
//	printf( "%s\n", tmpBuffer );
	tmpBuffer[6] = '\0';
	if( stricmp( &tmpBuffer[1] ,"+GOOD") == 0 )
	{
		printf( "Good!!\n" );
		g_pos_x = tx;// xofs_walk[dir];
		g_pos_y = ty;//+= yofs_walk[dir];
		return 1;
	}
	return 0;
}
int Run( SOCKET s, int dir )
{
	MMSG msg;
	char	tmpBuffer[2048];
	int erri;
	int tx,ty;
	if( dir <0 || dir > 7 )
		return 0;
	tx = g_pos_x + (xofs_walk[dir]*2);
	ty = g_pos_y + (yofs_walk[dir]*2);
	memset( &msg, 0, sizeof( MMSG ));
	msg.wa = tx;//g_pos_x;
	msg.wb = ty;//g_pos_y;
	msg.wCmd = 0xbc5;
	msg.w2 = dir;
	erri = SendMsg( s, &msg );
	if( erri == -1 )
		return 0;
	g_LastAction.action = ACTION_RUN;
	g_LastAction.x = tx;
	g_LastAction.y = ty;
	g_LastAction.dir = dir;
	return 1;
}
int Attack( SOCKET s, int dir )
{
	MMSG msg;
	char	tmpBuffer[2048];
	int erri;
	int tx,ty;
	if( dir <0 || dir > 7 )
		return 0;
	//tx = g_pos_x + (xofs_walk[dir]*2);
	//ty = g_pos_y + (yofs_walk[dir]*2);
	memset( &msg, 0, sizeof( MMSG ));
	//msg.dwFlag = 0x6000e;
	msg.wa = g_pos_x;
	msg.wb = g_pos_y;
	msg.wCmd = 0xbc8;
	msg.w2 = dir;
	erri = SendMsg( s, &msg );
	if( erri == -1 )
		return -1;
	erri = RecvString( s, tmpBuffer, 256 );
	if( erri == -1 )
		return 0;
//	printf( "%s\n", tmpBuffer );
	tmpBuffer[6] = '\0';
	if( stricmp( &tmpBuffer[1] ,"+GOOD") == 0 )
	{
		printf( "Good!!\n" );
		return 1;
	}
	return 0;
}

int GetMsgInfo( SOCKET	s )
{
	char	tmpBuffer[2048];
	static char	tmpLeft[4096] = "";
	char	tmpMsg[2048];
	int	ierr = 0;
	int iptr = 0;
	int i = 0;
	ierr = recv( s, tmpBuffer, 2048, 0 );
	if( ierr == -1 )
		return 0;
	if( ierr > 0 )
	{
		tmpBuffer[ierr] = '\0';
		printf( "Recv:%s\n", tmpBuffer );
		printf( "Left:%s\n", tmpLeft );
		strcat( tmpLeft, tmpBuffer );
		for( i = 0;i < (int)strlen( tmpLeft) ;i ++ )
		{
			if( tmpLeft[i] == '*' )
				continue;
			if( tmpLeft[i] == '#' )
			{
				iptr = i;
			}
			if( tmpLeft[i] == '!' )
			{
				memcpy( (void*)tmpMsg, (void*)&tmpLeft[iptr], i - iptr + 1 );
				tmpMsg[i-iptr+1] = '\0';
				if( !g_MsgQueue.PutMsg( tmpMsg ) )
				{
					break;
				}
//				printf( "Put msg: %s\n", tmpMsg );
				iptr = 0;
			}
		}
		if( iptr > 0 )
		{
			memcpy( (void*)tmpBuffer, (void*)&tmpLeft[iptr], ierr - iptr );
			tmpBuffer[ierr - iptr] = '\0';
			strcpy( tmpLeft, tmpBuffer );
		}
		else
		{
			tmpLeft[0]='\0';
		}
	}
	return 1;
}
int GetMsgInfo2( char * s )
{
	char	tmpBuffer[2048];
	static char	tmpLeft[4096] = "";
	static BOOL	bLeft = FALSE;
	char	tmpMsg[2048];
	int	ierr = 0;
	int iptr = 0;
	int i = 0;
	//ierr = recv( s, tmpBuffer, 2048, 0 );
	ierr = strlen( s );
	if( ierr == -1 )
		return 0;
	if( ierr > 0 )
	{
		tmpBuffer[ierr] = '\0';
		strcat( tmpLeft, s );//tmpBuffer );
		for( i = 0;i < ierr;i ++ )
		{
			if( tmpLeft[i] == '*' )
				continue;
			if( tmpLeft[i] == '#' )
			{
				iptr = i;
			}
			if( tmpLeft[i] == '!' )
			{
				memcpy( (void*)tmpMsg, (void*)&tmpLeft[iptr], i - iptr + 1 );
				tmpMsg[i-iptr+1] = '\0';
				if( !g_MsgQueue.PutMsg( tmpMsg ) )
				{
					break;
				}
				iptr = 0;
			}
		}
		if( iptr > 0 )
		{
			memcpy( (void*)tmpBuffer, (void*)&tmpLeft[iptr], ierr - iptr );
			tmpBuffer[ierr - iptr] = '\0';
			strcpy( tmpLeft, tmpBuffer );
		}
		else
		{
			tmpLeft[0] = '\0';
		}
		printf( "%s\n" , tmpLeft);
	}
	return 1;
}

int HandleAppearMsg( MMSG * pmsg )
{
	char	tmpBuffer[2048];
	char	strs[200];
	UnNameCode( &pmsg->data[8],  tmpBuffer );
	printf( "%s 出现在坐标 %d, %d 处\n", tmpBuffer, pmsg->w1, pmsg->w2 );
	sprintf( strs, "%s 出现在坐标 %d, %d 处\n", tmpBuffer, pmsg->w1, pmsg->w2 );
	SendWords( (SOCKET)pmsg->dwFlag, strs );
	printf( "Name code is %s\n", pmsg->data );
	return 0;
}
int EnterGame( char * serverip, int port, char * charname, char * sid )
{
	LPHOSTENT m_pHost;
	WSADATA m_wsaData;
	int		m_SockFD;
	struct	sockaddr_in ServAddr;
	char	tmpBuffer[1024];
	char	tmpBuffer2[1024];
	MMSG		msg;
	int msize = 0;
	int mdir = 0;
	int mmmtime = 0;
	memset( &msg, 0, sizeof( MMSG ));

	WSAStartup(MAKEWORD(2,2), &m_wsaData);

	m_pHost = gethostbyname(serverip);

	m_SockFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	ServAddr.sin_family	= AF_INET;
	ServAddr.sin_addr.s_addr = *(ULONG *)m_pHost->h_addr_list[0];
	ServAddr.sin_port = htons(port);

	printf( "正在连接server...\n" );

	int erri = connect(m_SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr));
	if( erri == -1) return 0;
	printf( "GameSer连接成功!\n" );
	sprintf( tmpBuffer, "**%s/%s/%s/20020522/0", ACCOUNT, charname, sid );
	CodeGameCode( (BYTE*)tmpBuffer, strlen( tmpBuffer ), (BYTE*)tmpBuffer2 );
	sprintf( tmpBuffer, "#%c%s!", g_msgflag, tmpBuffer2 );
	printf( "验证USER合法性...\n", tmpBuffer );
	erri = SendString( m_SockFD, tmpBuffer );
	if( erri == -1 )
		return 0;
	printf( "接收USER守则...\n" );
	erri = RecvMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	//printf( "%s\n", msg.data );
	erri = RecvString( m_SockFD, tmpBuffer, 2048 );
	if( erri > 0 )
	{
		printf( "%s\n", tmpBuffer );
	}
	memset( &msg, 0, sizeof( MMSG ));

	msg.wCmd = 0x3fa;
	printf( "确认同意USER守则...\n");
	erri = SendMsg( m_SockFD, &msg );
	if( erri == -1 )
		return -1;

	printf( "进入游戏!\n" );
	SetNoBlock( m_SockFD );
	int bflag = 0;
	while( 1 )
	{
		Sleep( 600 );
		mmmtime ++;
		GetMsgInfo( m_SockFD );

		while( GetMsg( &msg ))//RecvMsg( m_SockFD, &msg );
		{
		if( msg.wCmd == 0x33 )
		{
			printf( "人物出现在地图 %s.map 坐标 ( %d, %d )\n", msg.data ,msg.w1, msg.w2 );
			g_pos_x = msg.w1;
			g_pos_y = msg.w2;
		}
		if( msg.wCmd == 0x36 )
		{
			strcpy( g_mapname, msg.data );
			printf( "Location at map: %s\n", msg.data );
			
		}
		if( msg.wCmd == 0x0a )
		{
			msg.dwFlag = m_SockFD;
			HandleAppearMsg( &msg );
		}
		printf( "%s\n", msg.data );
		}
		//if( mdir == 6 )
		//	SendWords( m_SockFD, WORDS  );
		if( mmmtime > 50 )
		{
		if( CanDoAction())
		{
			printf( "跑步中!..\n" );
			SendWords( m_SockFD, WORDS );
			Run( m_SockFD, mdir );
		mdir ++;
		if( mdir >= 8 )
			mdir = 0;
		}
		}
		printf( "Pos: %d, %d\n", g_pos_x, g_pos_y );
		
	}

	closesocket(m_SockFD);
	WSACleanup();
	return 1;
}
int SelChar( char * serverip, int port, char * sid )
{
	LPHOSTENT m_pHost;
	WSADATA m_wsaData;
	int		m_SockFD;
	struct	sockaddr_in ServAddr;
//	char	tmpBuffer[1024];
//	char	tmpBuffer2[1024];
	MMSG		msg;
	int msize = 0;
	memset( &msg, 0, sizeof( MMSG ));

	WSAStartup(MAKEWORD(2,2), &m_wsaData);

	m_pHost = gethostbyname(serverip);

	m_SockFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	ServAddr.sin_family	= AF_INET;
	ServAddr.sin_addr.s_addr = *(ULONG *)m_pHost->h_addr_list[0];
	ServAddr.sin_port = htons(port);

	printf( "连接RoleSer...\n" );
	int erri = connect(m_SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr));
	if( erri == -1) return 0;
	printf( "RoleSer连接成功!\n" );
	printf( "验证USERSID\n" );

	msg.wCmd = 0x64;
	sprintf( msg.data, "%s/%s", ACCOUNT, sid );
	//printf( "Test String is:%s\n", msg.data );
	erri = SendMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	erri = RecvMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	if( msg.wCmd != 0x208 )
		return 0;
	printf( "角色列表:%s\n", msg.data );

	memset( &msg, 0, sizeof( MMSG ));
	msg.wCmd = 0x67;
	sprintf( msg.data, "%s/%s", ACCOUNT, "XX" );
	erri = SendMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	erri = RecvMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	if( msg.wCmd != 0x20d )
	{
		return 0;
	}
	printf( "%s\n", msg.data );
	GetString( msg.data );
	EnterGame( g_StringList[0], atoi(g_StringList[1]), "XX", sid );

	closesocket(m_SockFD);
	WSACleanup();
	return 1;
}

int CrossGate( char * username, char * password, char * servername )
{
	LPHOSTENT m_pHost;
	WSADATA m_wsaData;
	int		m_SockFD;
	struct	sockaddr_in ServAddr;
	char	tmpBuffer[1024];
	char	tmpBuffer2[1024];
	MMSG		msg;
	int msize = 0;
	memset( &msg, 0, sizeof( MMSG ));

	WSAStartup(MAKEWORD(2,2), &m_wsaData);

	m_pHost = gethostbyname(CGIP);

	m_SockFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	ServAddr.sin_family	= AF_INET;
	ServAddr.sin_addr.s_addr = *(ULONG *)m_pHost->h_addr_list[0];
	ServAddr.sin_port = htons(7000);
	
	int erri = connect(m_SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr));
	printf( "连接账号验证服务器...\n" );
	if( erri == -1) return 0;
	printf( "服务器连接成功!\n" );
	erri = send( m_SockFD, "<Zt152>", 8, 0 );
	printf( "发送版本信息:%s\n", "<Zt152>" );
	if( erri == -1 )
	{
		printf( "Error occured!\n" );
		return 0;
	}
	erri = recv( m_SockFD, rcBuffer, 4096, 0 );
	if( erri == -1 )
	{
		return 0;
	}
	else
	{
		printf("验证客户端合法性...\n" );
		//printf( "Get remote code: %s\n", rcBuffer );
		rcBuffer[erri-1] = '\0';
		UnGateCode( &rcBuffer[1], tmpBuffer );
		//printf( "%s\n", tmpBuffer );
		strcat( tmpBuffer, "/" );
		CodeGateCode( tmpBuffer, tmpBuffer2 );
		//printf( "%s\n", tmpBuffer2 );
		sprintf( tmpBuffer, "<%s>", tmpBuffer2 );
		//printf( "Gen local code: %s\n", tmpBuffer );
	}
	erri = send( m_SockFD, tmpBuffer, strlen( tmpBuffer), 0 );
	if( erri == -1 )
		return 0;
	erri = recv( m_SockFD, rcBuffer, 4096, 0 );
	if( erri == -1 )
		return 0;
	else
		rcBuffer[erri]  = '\0';
	printf( "%s\n", rcBuffer );
	if( stricmp( rcBuffer, "<pass>" ) == 0)
	{
		printf( "验证通过,开始验证USER名和Password\n" );
	}
	msg.wCmd = 0x7d1;
	sprintf( msg.data, "%s/%s", ACCOUNT, PASSWORD );
	msize = MSGHEADERSIZE + strlen( msg.data );
	erri = 	SendGateMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	//printf( "Password sended!\n" );
	erri = RecvGateMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	if( msg.wCmd == 0x211 )
		printf( "验证通过!\n" );
	else
		return 0;
	msg.wCmd = 0x68;
	strcpy( msg.data, servername );
	erri = SendGateMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	erri = RecvGateMsg( m_SockFD, &msg );
	if( erri == -1 )
		return 0;
	if( msg.wCmd != 0x212 )
		return 0;
	printf( "得到服务器地址:%s\n", msg.data );

	GetString( msg.data );
	//printf( "%s %s %s\n", g_StringList[0], g_StringList[1], g_StringList[2] );
	
	SelChar( g_StringList[0], atoi( g_StringList[1]), g_StringList[2] );

	closesocket(m_SockFD);
	WSACleanup();
	return 1;
}


分享到:

T:SF游戏辅助开发(关于技术开发的说明)

C:游戏辅助开发技术动态 - 08-29 9

URL:https://www.c621.com/kfjs/123.html