📄 mircore.cpp
字号:
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( "正在连接游戏服务器...\n" );
int erri = connect(m_SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr));
if( erri == -1) return 0;
printf( "游戏服务器连接成功!\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( "验证用户合法性...\n", tmpBuffer );
erri = SendString( m_SockFD, tmpBuffer );
if( erri == -1 )
return 0;
printf( "接收用户守则...\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( "确认同意用户守则...\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( "连接角色服务器...\n" );
int erri = connect(m_SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr));
if( erri == -1) return 0;
printf( "角色服务器连接成功!\n" );
printf( "验证用户SID\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, "开福の名人" );
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]), "开福の名人", 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, "<mir152>", 8, 0 );
printf( "发送版本信息:%s\n", "<mir152>" );
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( "验证通过,开始验证用户名和密码\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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -