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

📄 characterprocess.cpp

📁 传奇2客户端源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CharacterProcess.cpp: implementation of the CCharacterProcess class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

////////////////////////////////////////////////
////////////////////////////////////////////////


// Positio of Edit box
#define POS_NAME_X						300
#define POS_NAME_Y						460

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCharacterProcess::CCharacterProcess()
{
	Init();
}

CCharacterProcess::~CCharacterProcess()
{
//	if(m_pBtn)
//	{
//		delete[] m_pBtn;
//		m_pBtn = NULL;
//	}
}

VOID CCharacterProcess::Init()
{
	m_Progress=PRG_CHAR_SELE;
	m_ConnectionState=CONNECT_FAIL;
	ZeroMemory(m_szErrorMsg,512);
//	m_pBtn = new CMirButton[sizeof(g_CharProcBtnInfo)/sizeof(BUTTONINFO)];
}

VOID CCharacterProcess::Load()
{
	WSAStartup(MAKEWORD(2, 2), &m_wsd);
	m_Image.NewLoad(".\\Data\\interface1c.wil", TRUE, TRUE);
	m_Image2.NewLoad(".\\Data\\interfacec2.wil", TRUE, TRUE);
	// 烙矫
	//
	m_ConnectionState = CONNECT_FAIL;

	g_xClientSocket.ConnectToServer(g_xMainWnd.GetSafehWnd(), g_szServerIP, g_nServerPort);

	g_xChatEditBox.SetLimitText(20);
	SendMessage(g_xChatEditBox.GetSafehWnd(),EM_SETPASSWORDCHAR,NULL,0);

	m_ChrCount =0;
	m_nMessage = 0;
//	m_xMsgBox.Load(&m_Image2);
	m_xMsgBox.CreateWnd(&m_Image2,TRUE,219,110,362,180);	// 侩扁
	m_Progress	= PRG_CHAR_SELE;							// Character Selection
	m_xBGround.Create(&m_Image);
	m_xBGround.OpenWnd();
}	

VOID CCharacterProcess::SetNextProc()
{
	D3DMATRIX	matProj;
	DeleteProc();
 	g_xClientSocket.m_pxDefProc = g_xMainWnd.m_pxDefProcess = &g_xGameProc;
	g_xGameProc.Load();
	g_xChatEditBox.SetLimitText(90);
	ShowWindow(g_xChatEditBox.GetSafehWnd(), SW_HIDE);
	D3DUtil_SetProjectionMatrix(matProj, g_PI/2, float(600.0f/800.0f), -1.0f, 1.0f);
    g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_PROJECTION, &matProj);
	g_bProcState = _GAME_PROC; 
}

VOID CCharacterProcess::DeleteProc()
{
	
	WSACleanup();
	m_Image.Destroy();
	m_Image2.Destroy();
	// 烙矫
	m_CRectList.ClearAllNodes();
	m_CList.ClearAllNodes();
}


LRESULT CCharacterProcess::DefMainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch ( uMsg )
	{
		case WM_LBUTTONDOWN:
			OnLButtonDown(wParam, lParam);
			break;
		case WM_LBUTTONUP:
			OnLButtonUp(wParam, lParam);
			break;
		case ID_SOCKCLIENT_EVENT_MSG:
			g_xClientSocket.OnSocketMessage(wParam, lParam);
			break;
		case WM_KEYDOWN:
			OnKeyDown(wParam, lParam);
			break;
		case WM_MOUSEON:
			OnMouseOn(wParam,lParam);
			break;
		case WM_MOVE:
			OnWindowMove(wParam,lParam);
			break;
		case WM_MOUSEMOVE:
			OnMouseMove(wParam,lParam);
			break;
		default:
			break;
	}
	return CWHDefProcess::DefMainWndProc(hWnd, uMsg, wParam, lParam);
}

LRESULT CCharacterProcess::OnKeyDown(WPARAM wParam, LPARAM lParam)
{
	switch ( wParam )
	{
	case VK_F1:
		m_Progress=PRG_CHAR_SELE;
		break;
	case VK_F2:
		m_Progress=PRG_CREATE_CHAR;
		break;
	}	
	return 0L;
}

LRESULT CCharacterProcess::OnMouseMove(WPARAM wParam, LPARAM lParam)
{
	int		i;
	BOOL	fOnButton = FALSE;

	if(m_xMsgBox.IsActive())
	{
		POINT  tPos;
		tPos.x = LOWORD(lParam);
		tPos.y = HIWORD(lParam);
		m_xMsgBox.MoveWnd(tPos);	// Moon
		return 0l;
	}


	if(!m_fIsLButtonClicked)//m_fIsConnected && !m_fIsLButtonClicked)
	{
		switch(m_Progress)
		{
			case PRG_CHAR_SELE:
				m_xSelectChr.OnMouseMove(wParam, lParam);
				break;
			case PRG_CREATE_CHAR:
			{
				for(i = 5; i < 9; i++)
				{
/*					if (m_pBtn[i].CheckMouseOn(LOWORD(lParam), HIWORD(lParam)))
					{
						m_pBtn[i].m_nState = BUTTON_STATE_ON;
						fOnButton = TRUE;
					}
					else
						m_pBtn[i].m_nState = BUTTON_STATE_UP;*/
				}

				break;
			}
		}
		if(fOnButton)
		{
			HCURSOR	hCursor;
			hCursor = LoadCursor(g_xMainWnd.GetSafehInstance(),MAKEINTRESOURCE(IDC_ARROW));
			SetCursor(hCursor);
			DestroyCursor(hCursor); 
		}
//		else
//			g_xMainWnd.OnSetCursor(IDC_ARROW);
	}
	return 0L;
}

LRESULT CCharacterProcess::OnLButtonDown(WPARAM wParam, LPARAM lParam)
{	
	m_fIsLButtonClicked = FALSE;
	if(m_xMsgBox.IsActive())
	{
		POINT ptMouse;
		ptMouse.x = LOWORD(lParam);
		ptMouse.y = HIWORD(lParam);

		m_xMsgBox.OnButtonDown(ptMouse);
	}
	else
	{
		if(m_Progress==PRG_CHAR_SELE)
			m_xSelectChr.OnButtonDown(wParam, lParam);
		if (m_Progress == PRG_CREATE_CHAR)
		{
			for (int i = ID_CREATE_CHR_OK_BTN; i <= ID_CREATE_CHR_TAO_BTN; i++)
			{
/*				if (m_pBtn[i].CheckMouseOn(LOWORD(lParam), HIWORD(lParam)))
				{
					m_pBtn[i].m_nState = BUTTON_STATE_DOWN;
					m_fIsLButtonClicked = TRUE;
				}
				else
					m_pBtn[i].m_nState = BUTTON_STATE_UP;
*/			}
		}
	}
	return 0L;
}

LRESULT CCharacterProcess::OnLButtonUp(WPARAM wParam, LPARAM lParam)
{	
	INT	nRecieve;
	m_ptMousePos.x = LOWORD(lParam);
	m_ptMousePos.y = HIWORD(lParam);

	m_fIsLButtonClicked = FALSE;
	if(m_xMsgBox.IsActive())	// Message Box Process
	{
		MessageBoxProcess(lParam);
	}
	else
	{
		switch(m_Progress)
		{
		case PRG_CHAR_SELE:
			{
				nRecieve = m_xSelectChr.OnButtonUp(wParam, lParam);
				switch(nRecieve)
				{
					case RETURN_SELECT_NEW_BTN:
					{
						break;
					}
					case RETURN_SELECT_NEW_ERR:
					{
						m_nMessage = 3;
						SetErrorMessage(m_nMessage,m_szErrorMsg);
						m_xMsgBox.ShowMessageBox(m_szErrorMsg,MSG_BTN_OK,_WNDIMGINDX_MSGBOX1);
						break;
					}
					case RETURN_SELECT_DEL_BTN:
					{
						m_nMessage = 5;
						SetErrorMessage(m_nMessage,m_szErrorMsg);
						m_xMsgBox.ShowMessageBox(m_szErrorMsg,MSG_BTN_YESNO,_WNDIMGINDX_MSGBOX1);
						break;
					}
					case RETURN_SELECT_DEL_ERR:
					{
						m_nMessage = 8;
						SetErrorMessage(m_nMessage,m_szErrorMsg);
						m_xMsgBox.ShowMessageBox(m_szErrorMsg,MSG_BTN_OK,_WNDIMGINDX_MSGBOX1);
						break;
					}
					case RETURN_SELECT_START_BTN:
					{
						break;
					}
					case RETURN_SELECT_START_ERR:
					{
						m_nMessage = 7;
						SetErrorMessage(m_nMessage,m_szErrorMsg);
						m_xMsgBox.ShowMessageBox(m_szErrorMsg,MSG_BTN_OK,_WNDIMGINDX_MSGBOX1);
						break;
					}
				}
				break;
			}

		case PRG_CREATE_CHAR:
			{
			/*
				for(i = ID_CREATE_CHR_OK_BTN; i <= ID_CREATE_CHR_TAO_BTN; i++)
				{
					m_pBtn[i].m_nState = BUTTON_STATE_UP;
					if (m_pBtn[i].CheckMouseOn(LOWORD(lParam), HIWORD(lParam)))
					{
						switch(i)
						{
							case ID_CREATE_CHR_WAR_BTN:
								m_SelectJob = _JOB_JUNSA;
								break;
							case ID_CREATE_CHR_SOR_BTN:
								m_SelectJob = _JOB_SULSA;
								break;
							case ID_CREATE_CHR_TAO_BTN:
								m_SelectJob = _JOB_DOSA;
								break;
							case ID_CREATE_CHR_OK_BTN:
							{
								int Lens;
								GetWindowText(g_xChatEditBox.GetSafehWnd(),m_szChrName,sizeof(m_szChrName));
								Lens = strlen(m_szChrName);
								if(Lens!=0)
								{
									CHRINFO	ChrInfo;
									strcpy(ChrInfo.ChrName,m_szChrName);
									ChrInfo.Class=m_SelectJob;
									ChrInfo.Gender=m_SelectSex;
									ChrInfo.Level = 1;
									m_ChrCount = 0;
									m_xBGround.SetRenderState(_RENDER_AVI_OUT);
									g_xSound.PlayMp3(MP3_TOSELECTCHAR,FALSE); 
									m_Progress = PRG_CREA_TO_SEL;					// 烙矫
									g_xClientSocket.OnQueryChar();					// 烙矫
								}
								else
								{
									m_nMessage = 2;
									SetErrorMessage(m_nMessage,m_szErrorMsg);
									m_xMsgBox.ShowMessageBox(m_szErrorMsg,1,_WNDIMGINDX_MSGBOX1);
								}
							}
						}
					}
				}*/
				m_Progress = PRG_CREA_TO_SEL;
				m_xBGround.SetRenderState(_RENDER_AVI_OUT);
				break;
			}
		}
	}
	return 0L;
}

LRESULT CCharacterProcess::OnMouseOn(WPARAM wParam, LPARAM lParam)
{	
/*	UINT	t_ID;
	t_ID=(UINT)wParam;
	m_ButtonID = t_ID;		// Upon Mouse*/
	return 0L;
}

LRESULT CCharacterProcess::OnWindowMove(WPARAM wParam,LPARAM lParam)
{

	ShowWindow(g_xChatEditBox.GetSafehWnd(), SW_HIDE);
	g_xMainWnd.OnMove(wParam, lParam);
	return 0L;
}

// **************************************************************************************
//
//		Socket
//
// **************************************************************************************

VOID CCharacterProcess::OnConnectToServer()
{
	m_ConnectionState = CONNECT_SUCCESS;// Connection Success
	
	g_xClientSocket.OnQueryChar();
}

char* CCharacterProcess::OnMessageReceive(CHAR* pszMessage)
{
	char	*pszFirst = pszMessage;
	char	*pszEnd;
	
	while (pszEnd = strchr(pszFirst, '!'))
	{
		*pszEnd = '\0';

		OnSocketMessageRecieve(pszFirst + 1);

		if (*(pszEnd + 1) == '#')
			pszFirst = pszEnd + 1;
		else
			return NULL;
	}

	return pszFirst;
}

void CCharacterProcess::OnSocketMessageRecieve(char* pszMsg)
{
	_TDEFAULTMESSAGE	tdm;
	INT	nChrPos[] = { 350, 280, 350, 250, 320, 390 };

	fnDecodeMessage(&tdm, pszMsg);

	switch(tdm.wIdent)
	{
		case SM_QUERYCHR:
		{
			m_SelectChr = SELECT_NONE;
			if (tdm.nRecog)
			{
				char	szDecodeMsg[512];
				char	*pszID = NULL, *pszJob = NULL, *pszFace = NULL, *pszLevel = NULL, *pszSex = NULL, *pszNext = NULL;
				int		nPos = 0;

				m_SelectChr = SELECT_FIRST;
				m_CRectList.ClearAllNodes();

				ZeroMemory(szDecodeMsg, sizeof(szDecodeMsg));

				fnDecode6BitBuf((pszMsg + DEFBLOCKSIZE), szDecodeMsg, sizeof(szDecodeMsg));

				m_ChrCount = tdm.nRecog;

				for (int i = 0; i < tdm.nRecog; i++)
				{
					CHRINFO* pxChInfo = new CHRINFO;

					if (szDecodeMsg[nPos] == '*')
					{
						pszID		= &szDecodeMsg[nPos + 1];
						m_SelectChr = i;
					}
					else
						pszID = &szDecodeMsg[nPos];

					if (pszJob = strchr(pszID, '/'))
					{
						*pszJob = '\0';
						pszJob++;

						strcpy(pxChInfo->ChrName, pszID);
						
						pxChInfo->Class = atoi(pszJob);

						if (pszFace = strchr(pszJob, '/'))
						{
							*pszFace = '\0';
							pszFace++;

							if (pszLevel = strchr(pszFace, '/'))
							{
								*pszLevel = '\0';
								pszLevel++;

								pxChInfo->Level = atoi(pszLevel);

								if (pszSex = strchr(pszLevel, '/'))
								{

⌨️ 快捷键说明

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