亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mirgame.cpp

?? 傳奇掛機 傳奇掛機 傳奇掛機 傳奇掛機
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// MirGame.cpp: implementation of the CMirGame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <windowsx.h>
#include "MirGame.h"
#include "mircode.h"
#include "mirmsg.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define	BUFFERLENGTH	4096
FILE	*	g_fpLog, *g_fpGetLog, * g_fpPutLog;
void	LogFile( char * pp )
{
	DWORD	dwTime = GetTickCount();
//	fprintf( g_fpLog, "Log at %d: %s\n", dwTime, pp );
}
typedef struct
{
	DWORD	dwGold;
	WORD	wCmd;
	BYTE	bProf;
	BYTE	bHair;
	BYTE	bSex;
	BYTE	bOO;
	WORD	wUnknow;
	BYTE	bLevel;
	BYTE	bunknow;
	BYTE	ACHi;
	BYTE	ACLow;
	BYTE	MACHi;
	BYTE	MACLow;
	BYTE	DCHi;
	BYTE	DCLow;
	BYTE	MCHi;
	BYTE	MCLow;
	BYTE	SCHi;
	BYTE	SCLow;
	WORD	Hp;
	WORD	Mp;
	WORD	MaxHp;
	WORD	MaxMp;
	DWORD	dwUnknow;
	DWORD	Exp;
	DWORD	MaxExp;
	WORD	BagWeight;
	WORD	MaxBagWeight;
	BYTE	BodyWeight;
	BYTE	MaxBodyWeight;
	BYTE	HandWeight;
	BYTE	MaxHandWeight;
}MMSGSETCHARINFO;

DWORD	MessageProc( PVOID * p )
{
	CMirGame	*	pGame = (CMirGame*)p;
	int		ierr = 0;
	int		i = 0;
	int		leftlen = 0;
	char	*	pSearchString = NULL;
	char	*	m_tmpBuffer;
	char	*	m_tmpBuffer2;


	if( pGame == 0 )
	{
		return 0;
	}

	m_tmpBuffer = new char[BUFFERLENGTH + 5];
	memset( (void*)m_tmpBuffer, 0, BUFFERLENGTH + 5 );
	m_tmpBuffer2 = new char[BUFFERLENGTH + 5];
	memset( (void*)m_tmpBuffer2, 0, BUFFERLENGTH + 5 );


	leftlen = 0;
	pGame->LogSystem( "進入接收消息進程!" );

	while( pGame->m_bInGame )
	{

		Sleep( 1 );
		ierr = recv( pGame->m_sGame, m_tmpBuffer, BUFFERLENGTH, 0 );
		if( ierr == 0 )
		{
			pGame->Logout();
			break;
		}
		if( ierr != -1 )
		{
			for( i = 0;i < ierr;i ++ )
			{
				if( m_tmpBuffer[i] != '*' )
				{
					m_tmpBuffer2[leftlen++] = m_tmpBuffer[i];
				}
				else
				{
					pGame->m_MirMsg.SendString( pGame->m_sGame, "*" );
				}
				if( m_tmpBuffer[i] == '!' )
				{
					m_tmpBuffer2[leftlen] = '\0';
					pGame->m_MsgQueue.PutMsg( m_tmpBuffer2 );
					leftlen = 0;
				}
			}
		}

	}
	pGame->LogSystem( "消息線程退出!" );
	delete	[]m_tmpBuffer;
	delete	[]m_tmpBuffer2;
	return 0;
}

CMirGame::CMirGame()
{
	m_MirSocket.NetStartup();
	m_LeftHours = 0;
	m_dwGameState = 0;
	m_tmpBuffer	=	new char[BUFFERLENGTH];
	m_tmpBuffer2=	new	char[BUFFERLENGTH];
	m_MsgLeftBuf=	new char[BUFFERLENGTH * 2];
	memset( (void*)m_MsgLeftBuf, 0, BUFFERLENGTH * 2);
	memset( &m_LastAction, 0, sizeof( ACTION_LAST ));
	m_MiniMap.InitMiniMap( "DATA\\mmap.wix", "DATA\\mmap.wil" );

	m_bInGame = FALSE;
}

CMirGame::~CMirGame()
{

}

BOOL CMirGame::OpenGateServer(char *ip)
{
	char	tmpBuffer[256];
	char	tmpBuffer2[256];
	int erri = 0;
	m_sGate = m_MirSocket.OpenConnection( ip, 7000 );
	LogSystem( "連接賬號驗證服務器..." );

	if( m_sGate == 0 )
	{
		LogSystem( "連接賬號驗證服務器出錯!" );
		return 0;
	}

	m_dwGameState = MGS_GATECONNECTED;
	LogSystem( "服務器連接成功!" );

	erri = send( m_sGate, MIRVERSION, strlen( MIRVERSION), 0 );
	if( erri == -1 )
	{
		LogSystem( "發(fā)生錯誤,停止連接!\n" );
		goto err;
	}

	m_dwGameState = MGS_WAITINGCHECKINFO;

	erri = recv( m_sGate, m_tmpBuffer, BUFFERLENGTH, 0 );

	if( erri == -1 )
	{
		goto err;
	}
	else
	{
		m_dwGameState = MGS_MAKECLIENTINFO;
		LogSystem("驗證客戶端合法性..." );
		m_tmpBuffer[erri-1] = '\0';
		UnGateCode( &m_tmpBuffer[1], tmpBuffer );
		strcat( tmpBuffer, "/" );
		CodeGateCode( tmpBuffer, tmpBuffer2 );
		sprintf( tmpBuffer, "<%s>", tmpBuffer2 );
	}
	erri = send( m_sGate, tmpBuffer, strlen( tmpBuffer), 0 );
	if( erri == -1 )
	{
		LogSystem( "發(fā)送驗證信息 %s 出錯", tmpBuffer );
		goto err;
	}
	m_dwGameState = MGS_WAITINGCHECKPASS;
	erri = recv( m_sGate, m_tmpBuffer, BUFFERLENGTH, 0 );
	if( erri == -1 )
	{
		LogSystem( "接受驗證結果出錯!" );
		goto err;
	}
	else
		m_tmpBuffer[erri]  = '\0';
	if( stricmp( m_tmpBuffer, "<pass>" ) == 0)
	{
		LogSystem( "客戶端驗證通過!" );
		m_dwGameState = MGS_CLIENTCHECKPASSED;
		return TRUE;
	}
err:
	m_dwGameState = 0;
	CloseGateServer();
	return FALSE;
}

BOOL CMirGame::Login(char *username, char *password)
{
	MMSG	msg;
	int	erri;
	memset( &msg, 0, sizeof( MMSG ));
//	int msize;
	if( strlen( username ) == 0 || strlen( password ) <= 3 )
		goto err;
	if( m_dwGameState != MGS_CLIENTCHECKPASSED )
		goto err;
getpasswordret:

	msg.wCmd = 0x7d1;

	sprintf( msg.data, "%s/%s", username, password );
//	msize = MSGHEADERSIZE + strlen( msg.data );
//	LogSystem( msg.data );
	erri = 	m_MirMsg.SendGateMsg( m_sGate, &msg );
	if( erri == -1 )
	{
		LogSystem( "發(fā)送用戶名和密碼時出錯!" );
		goto err;
	}
	LogSystem( "發(fā)送密碼成功~" );

	m_dwGameState = MGS_LOGINWAITING;
	LogSystem( "等待接收驗證結果~" );
	erri = m_MirMsg.RecvGateMsg( m_sGate, &msg );
	if( erri == -1 )
	{
		LogSystem( "接收驗證結果處錯!" );
		goto err;
	}
	LogSystem( "收到驗證結果~" );
	if( msg.wCmd == 0x7d1 )
		goto getpasswordret;
	if( msg.wCmd == 0x211  )
	{
		LogSystem( "驗證通過!" );
		if( msg.wb > 0 )
		{
			LogSystem( "你的賬戶還有 %d 小時.", msg.wb );
		}
		m_dwGameState = MGS_SELECTSERVER;
		strcpy( m_Account, username );
		return TRUE;
	}
	else
	{
		if( msg.wCmd == 0x1f7 )
		{
			if( msg.dwFlag == 0xffffffff )
			{
				LogSystem( "密碼錯誤!" );
			}
			if( msg.dwFlag == 0 )
			{
				LogSystem( "此用戶不存在!" );
			}
			if( msg.dwFlag == 0xfffffffe )
			{
				LogSystem( "三次密碼錯誤,服務器拒絕!" );
			}
			if( msg.dwFlag == 0xfffffffd )
			{
				LogSystem( "該用戶正在使用中,可能被踢出服務器。" );
			}
		}
		else
		{
			LogSystem( "未知錯誤,錯誤代號 0x%x, 0x%x", msg.dwFlag, msg.wCmd );
		}
	}
err:
	m_dwGameState = 0;
	CloseGateServer();
	return FALSE;
}

BOOL CMirGame::EnterServer(char *ServerName)
{
	MMSG msg;
	int erri;
	memset( &msg, 0, sizeof( MMSG ));
	msg.wCmd = 0x68;
	strcpy( msg.data, ServerName );
	erri = m_MirMsg.SendGateMsg( m_sGate, &msg );
	if( erri == -1 )
	{
		LogSystem( "發(fā)送服務器名字出錯!" );
		goto err;
	}
	m_dwGameState = MGS_WAITFORSELCHARADDRESS;
	erri = m_MirMsg.RecvGateMsg( m_sGate, &msg );
	if( erri == -1 )
	{
		LogSystem( "接收結果時出錯!" );
		goto err;
	}

	if( msg.wCmd != 0x212 )
	{
		LogSystem( "未得到服務器地址!" );
		goto err;
	}
	LogSystem( "得到服務器地址:%s", msg.data );
	m_dwGameState = MGS_GOTSELCHARADDRESS;
	GetString( msg.data );
	//printf( "%s %s %s\n", g_StringList[0], g_StringList[1], g_StringList[2] );
	strcpy( m_SelCharIp, m_StringList[0] );
	m_SelCharPort = atoi( m_StringList[1] );
	strcpy( m_SID, m_StringList[2] );
	
	CloseGateServer();

	return TRUE;
err:
	m_dwGameState = 0;
	CloseGateServer();
	return FALSE;

}

BOOL CMirGame::GetSelCharInfo(SELCHARINFO *pInfo)
{
	return FALSE;

}

BOOL CMirGame::SelectChar(char *charname)
{
	LogSystem( "使用角色[%s]登陸服務器。", charname );
	MMSG	msg;
	int erri;
	memset( &msg, 0, sizeof( MMSG ));

	msg.wCmd = 0x67;
	sprintf( msg.data, "%s/%s", m_Account, charname );
	erri = m_MirMsg.SendMsg( m_sSelChar, &msg );
	if( erri == -1 )
	{
		LogSystem( "發(fā)送選人請求時出錯!" );
		goto err;
	}

	erri = m_MirMsg.RecvMsg( m_sSelChar, &msg );
	if( erri == -1 )
	{
		LogSystem( "接收選人結果時出錯!" );
		goto err;
	}
	if( msg.wCmd != 0x20d )
	{
		LogSystem( "選人未被服務器接受!" );
		goto err;
	}
	LogSystem( "服務器接受所選角色信息!" );
	LogSystem( "正在準備登陸到游戲服務器!" );
	//printf( "%s\n", msg.data );
	GetString( msg.data );
	LogSystem( "服務器地址: %s 端口: %s\n", m_StringList[0], m_StringList[1] );

	return TRUE;
err:
	return FALSE;
}
int	xofs_walk[] = { 0, 1, 1, 1, 0, -1, -1, -1 };
int yofs_walk[] = { -1, -1, 0, 1, 1, 1, 0, -1 };
void CMirGame::Walk(int dir)
{
	MMSG msg;
	
	int erri;
	int tx,ty;
	if( !CanDoAction())
		return;
	if( dir <0 || dir > 7 )
		return;
	tx = m_CharSelf.pos_x  + (xofs_walk[dir]);
	ty = m_CharSelf.pos_y  + (yofs_walk[dir]);
	if( !m_GameMap.TestMap( tx, ty ))
	{
		LogChat( "前方無法通過!" );
		return;
	}

	memset( &msg, 0, sizeof( MMSG ));
	msg.wa = tx;//g_pos_x;
	msg.wb = ty;//g_pos_y;
	msg.wCmd = 0xbc3;
	msg.w2 = dir;
	erri = m_MirMsg.SendMsg( m_sGame, &msg );
	if( erri == -1 )
		return;
	m_LastAction.action = ACTION_WALK;
	m_LastAction.x = tx;
	m_LastAction.y = ty;
	m_LastAction.dir = dir;
	return ;

}
void	CMirGame::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	CMirGame::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	CMirGame::LogSystem( char * line,... )
{
	char	szBuff[2048];
	va_list	vl;
	va_start( vl, line );
	vsprintf( szBuff, line, vl );
	va_end( vl);
	LogToList( m_hSysLog, szBuff );
}

BOOL CMirGame::InitLogSystem(HWND hSysLog, HWND hChatLog, int MaxLine)
{
	m_hSysLog = hSysLog;
	m_hChatLog = hChatLog;
	m_MaxLogLine = MaxLine;
	return TRUE;
}

BOOL CMirGame::CloseGateServer()
{
	LogSystem( "斷開密碼驗證服務器!" );
	closesocket(m_sGate);
//	m_MirSocket.NetCleanup();
	return TRUE;
}
int CMirGame::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 )
		{
			m_StringList[cnt][sptr] = '\0';
			sptr = 0;
			cnt++;
		}
		else
		{
			m_StringList[cnt][sptr] = string[i];
			sptr ++;
		}
	}
	if( sptr > 0 )
	{
		m_StringList[cnt][sptr] = '\0';
		cnt++;
	}
	return cnt;
}

BOOL CMirGame::EnterSelCharServer()
{

	MMSG	msg;
	int i = 0;
	memset( &msg, 0, sizeof( MMSG ));
	int erri = 0;
	if( m_dwGameState != MGS_GOTSELCHARADDRESS )
		return 0;
	
	LogSystem( "連接角色服務器 %s:%d ...", m_SelCharIp, m_SelCharPort );
	m_sSelChar = m_MirSocket.OpenConnection( m_SelCharIp, m_SelCharPort );
	if( m_sSelChar== 0 )
	{
		LogSystem( "連接角色服務器出錯!" );
		m_dwGameState = 0;
		CloseGateServer();
		return FALSE;
	}
	m_dwGameState = MGS_SELCHARCONNECTED;
	LogSystem( "驗證用戶SID\n" );

	msg.wCmd = 0x64;
	sprintf( msg.data, "%s/%s", m_Account, m_SID );
	erri = m_MirMsg.SendMsg( m_sSelChar, &msg );
	if( erri == -1 )
	{
		LogSystem( "發(fā)送驗證信息時出錯!" );
		goto err;
	}
	erri = m_MirMsg.RecvMsg( m_sSelChar, &msg );
	if( erri == -1 )
	{
		LogSystem( "接收驗證結果時出錯!" );
		goto err;
	}
	if( msg.wCmd != 0x208 )
	{
		LogSystem( "未得到角色列表!" );
		goto err;
	}
	erri = GetString( msg.data);
	LogSystem( "發(fā)現(xiàn) %d 個角色", msg.wa & 0xff );
	m_SelCharInfo.CharCount = msg.wa & 0xff;
	for( i = 0;i < m_SelCharInfo.CharCount;i ++ )
	{
		if( m_StringList[5 * i][0] == '*' )
		{
			strcpy( m_SelCharInfo.Chars[i].Name, &m_StringList[5 * i][1] );
			m_SelCharInfo.ActiveChar = i;	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丝袜高跟美女视频| 久久奇米777| 久久久亚洲高清| 一区二区三区在线视频观看| 韩国一区二区视频| 欧美三片在线视频观看| 国产精品久久久久一区二区三区共 | 日韩国产精品久久久| 成人免费的视频| 亚洲精品一区二区精华| 天天操天天干天天综合网| 色欧美片视频在线观看| 国产精品色一区二区三区| 老司机精品视频线观看86| 欧美日韩免费视频| 亚洲柠檬福利资源导航| 成人午夜伦理影院| 久久精品男人的天堂| 狠狠色丁香婷婷综合久久片| 欧美一区二区三区影视| 亚洲大片一区二区三区| 欧亚一区二区三区| 一区二区三区四区视频精品免费 | 国产婷婷一区二区| 国产在线精品一区二区三区不卡| 日韩亚洲欧美在线| 免费精品视频在线| 欧美一级高清大全免费观看| 丝袜美腿成人在线| 91精品国产91久久综合桃花| 日韩avvvv在线播放| 欧美美女直播网站| 五月激情六月综合| 欧美一二三区在线| 韩国v欧美v亚洲v日本v| 久久综合色播五月| 国产不卡视频一区二区三区| 国产精品久久毛片av大全日韩| 成人精品视频.| 亚洲免费毛片网站| 精品视频一区二区三区免费| 日日夜夜精品免费视频| 91精品国产综合久久精品性色| 日本欧美一区二区| 久久久综合九色合综国产精品| 国产成人精品影院| 亚洲天堂中文字幕| 欧美美女一区二区在线观看| 99精品视频中文字幕| 欧美日韩精品一区二区天天拍小说 | 日韩一卡二卡三卡四卡| 久久精品国产精品青草| 国产亚洲精品超碰| 97se亚洲国产综合自在线| 亚洲一区精品在线| 欧美一区二区视频免费观看| 国产精品综合一区二区| 国产精品久久久久婷婷二区次| 91电影在线观看| 秋霞电影一区二区| 国产精品欧美久久久久无广告 | 成人一区在线观看| 亚洲精品写真福利| 亚洲精品五月天| 成人黄页在线观看| 亚洲综合丝袜美腿| 精品日韩av一区二区| www.欧美亚洲| 日韩成人精品在线| 国产精品第13页| 正在播放亚洲一区| 成人激情视频网站| 琪琪久久久久日韩精品| 国产精品国产自产拍高清av| 91精品一区二区三区久久久久久 | 色综合天天综合网天天看片| 日韩精品一级二级| 国产精品欧美综合在线| 欧美一级在线免费| 91色视频在线| 国产激情精品久久久第一区二区| 亚洲成a人片在线观看中文| 国产日韩综合av| 欧美精品第1页| www.爱久久.com| 另类中文字幕网| 一级精品视频在线观看宜春院| 国产亚洲一区二区三区| 538在线一区二区精品国产| 99国产精品99久久久久久| 国产一区二区美女诱惑| 青青草国产成人av片免费| 一区二区成人在线视频 | 精品久久久久久久久久久久包黑料| 色老综合老女人久久久| 国产成人免费视| 国内成+人亚洲+欧美+综合在线| 亚洲丰满少妇videoshd| 一区二区视频在线| 国产精品久久久久久久久搜平片 | 91精品国产综合久久久蜜臀粉嫩| 972aa.com艺术欧美| 成人精品一区二区三区中文字幕| 狠狠色丁香婷婷综合久久片| 日本强好片久久久久久aaa| 亚洲小少妇裸体bbw| 亚洲综合男人的天堂| 亚洲精品一二三| 一级做a爱片久久| 亚洲精品日韩综合观看成人91| 国产精品久久久久三级| 中文字幕日韩欧美一区二区三区| 国产欧美一区二区三区沐欲| 久久精品夜夜夜夜久久| 久久久精品黄色| 国产性天天综合网| 国产欧美一区二区精品秋霞影院| 国产欧美一区二区精品忘忧草 | 99久久精品免费看国产免费软件| 国产精品原创巨作av| 欧美亚洲高清一区二区三区不卡| 精品一区二区三区的国产在线播放| 亚洲电影一区二区三区| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美欧美一区二区三区| 一区二区三区四区在线免费观看| 亚洲国产日韩综合久久精品| 国产精品一区二区果冻传媒| 丁香六月综合激情| 99久久精品费精品国产一区二区| 91在线porny国产在线看| 欧美午夜精品免费| 日韩一区二区三区四区五区六区| 91精品国模一区二区三区| 精品粉嫩超白一线天av| 国产精品女主播在线观看| 亚洲乱码国产乱码精品精98午夜 | 欧美亚洲国产一卡| 91精品福利在线一区二区三区 | 久久久久久久久蜜桃| 国产精品二三区| 亚洲午夜精品一区二区三区他趣| 日韩精品一二三四| 丰满亚洲少妇av| 欧美日韩一级片网站| 欧美电视剧免费全集观看| 国产欧美一区二区三区在线老狼| 1000精品久久久久久久久| 亚洲一区二区视频在线观看| 麻豆精品国产91久久久久久| 大胆亚洲人体视频| 欧美三级日本三级少妇99| 亚洲在线视频网站| 亚洲成人激情av| 国产精品久久久久久久久搜平片| 欧美天堂亚洲电影院在线播放 | 亚洲高清久久久| 成人理论电影网| 成人精品在线视频观看| 欧美午夜精品免费| 亚洲国产美女搞黄色| 欧美性欧美巨大黑白大战| 亚洲欧美日韩在线| 99re成人精品视频| 亚洲视频1区2区| aaa欧美日韩| 中文字幕一区二区三区四区| 不卡电影免费在线播放一区| 国产精品天天看| 不卡高清视频专区| 亚洲精品成a人| 色素色在线综合| 亚洲国产成人在线| 视频一区视频二区中文字幕| 欧美午夜视频网站| 首页欧美精品中文字幕| 3751色影院一区二区三区| 亚洲不卡一区二区三区| 91麻豆精品国产91久久久久久久久| 婷婷开心激情综合| 日韩欧美中文字幕公布| 久久99久久久久久久久久久| 精品久久久三级丝袜| 国产·精品毛片| 最新不卡av在线| 欧美自拍丝袜亚洲| 天堂影院一区二区| 久久亚洲精华国产精华液| 国产成人午夜精品影院观看视频 | 国产精品电影院| 欧洲av一区二区嗯嗯嗯啊| 日韩精品一级二级 | 亚洲精品成a人| 91麻豆精品国产91久久久使用方法| 久久99热狠狠色一区二区| 国产婷婷精品av在线| 99v久久综合狠狠综合久久| 亚洲一级在线观看| 久久久精品人体av艺术| 色综合天天性综合|