www.pudn.com > XmudOSr.rar > MenuCreateNew.cpp


// 
//建立新的游戏角色 
// 
////////////////////////////////////////////////////////////////////// 
#include "stdafx.h" 
#include "XMudClient.h" 
#include "MenuCreateNew.h" 
#include "FacePlate.h" 
#include "3DSound.h" 
#include "InitInternet.h" 
#include "InterNetMsg.h" 
#include "CommunicateMsg.h" 
#include "MapInfo.h" 
#include "MainScreen.h" 
#include  
#include "MyDInput.h" 
#include "CommandCheck.h" 
//add header file 
#include "wgs/common.h" 
#include "wgs/WGS.h" 
//end 
#include "ErrCode.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
//extern CInputMsg m_InputMsg; 
extern CMainScreen m_MainScreen; 
extern int g_nSelStart; 
extern int g_nSelEnd; 
extern int g_nInputMsgPos; 
 
extern BOOL g_bInternConnect; 
extern BOOL g_bGetInputMessage; 
extern D3DVECTOR pSysSoundPos; 
extern rmfullglobals myglobs; 
extern D3DAppInfo* d3dapp; 
extern LPDIRECT3DRM3 g_lpD3DRM; 
extern char g_tszPathName[256]; 
extern char	g_szErrorMsg[256]; 
extern int g_nGameState; 
 
extern CListplayerlist; 
extern CPlayerInfo * lpPlayerInfo; 
extern CListskilllist; 
extern CSkillInfo * lpSkillInfo; 
extern CListequiplist; 
extern CListequiprentlist; 
//extern CStringList g_equiprentlist; 
extern CEquipInfo *lpEquipInfo; 
 
extern HANDLE gSendToSvrThread; 
extern int g_nReceiveMsgState; 
//extern CString g_csSendToServerMsg; 
extern char g_szReceive[]; 
extern CString g_sPlayerName; 
 
extern int nSpareTime;		//剩下的时间(单位:秒) 
extern int nRecTimes;		//收到的信息次数 
 
extern char	szSendBuf[]; 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CMenuCreateNew::CMenuCreateNew() 
{ 
	bWaittingConnect = FALSE; 
	bCName = FALSE;//选种中文名称 
	bEName = FALSE;//选中英文名称 
 
	bMale = TRUE;//男性 
	bFemale = FALSE;//女性 
 
	bLeftStr = FALSE;//臂力左 
	bRightStr = FALSE;//臂力右 
	bLeftInt = FALSE;//悟性左 
	bRightInt = FALSE;//悟性右 
	bLeftCon = FALSE;//根骨左 
	bRightCon = FALSE;//根骨右 
	bLeftDex = FALSE;//身法左 
	bRightDex = FALSE;//身法右 
 
	bStartGame = FALSE;//开始游戏 
	bBackup = FALSE;//返回上一层 
	bShowMsg = FALSE; 
 
	SetRect(&rcCNamePos,554,201,704,222); 
	SetRect(&rcENamePos,554,232,704,253); 
//	SetRect(&rcPasswordPos,554,232,704,253); 
	SetRect(&rcMalePos,551,264,576,287); 
	SetRect(&rcFemalePos,632,264,657,287); 
 
	SetRect(&rcDistributePos,641,320,673,341); 
 
	SetRect(&rcLeftStrPos,607,355,635,382);//臂力 
	SetRect(&rcStrPos,641,358,673,379); 
	SetRect(&rcRightStrPos,679,355,707,382); 
 
	SetRect(&rcLeftIntPos,607,387,635,414);//悟性 
	SetRect(&rcIntPos,641,390,673,411); 
	SetRect(&rcRightIntPos,679,387,707,414); 
 
	SetRect(&rcLeftConPos,607,419,635,446);//根骨 
	SetRect(&rcConPos,641,422,673,443); 
	SetRect(&rcRightConPos,679,419,707,446); 
 
	SetRect(&rcLeftDexPos,607,451,635,478);//身法 
	SetRect(&rcDexPos,641,454,673,475); 
	SetRect(&rcRightDexPos,679,451,707,478); 
 
	SetRect(&rcStartGamePos,497,537,596,557);//开始进入游戏 
	SetRect(&rcBackupPos,608,537,707,556);//退回上一步 
 
	SetRect(&rcMainSurfaceSource,0,0,DEFULTWND_WIDTH,DEFULTWND_HEIGHT); 
	SetRect(&rcLeftButtonSource,742,1200,769,1226); 
	SetRect(&rcRightButtonSource,770,1200,797,1226); 
	SetRect(&rcStartGameSource,419,1219,518,1240); 
	SetRect(&rcBackupSource,320,1220,419,1240); 
	SetRect(&rcTrueSelectSource,716,1200,742,1224); 
 
	SetRect(&rcNumberSource,635,1240,0,0); 
} 
 
CMenuCreateNew::~CMenuCreateNew() 
{ 
 
} 
 
void CMenuCreateNew::PrepareCreateNew() 
{ 
	if(!lpPlayerInfo) 
	{ 
		lpPlayerInfo = new CPlayerInfo; 
		playerlist.AddTail(lpPlayerInfo); 
	} 
	lpPlayerInfo->m_iSTR = 20; 
	lpPlayerInfo->m_iINT = 20; 
	lpPlayerInfo->m_iCON = 20; 
	lpPlayerInfo->m_iDEX = 20; 
	if(bMale) 
		lpPlayerInfo->m_sSEX = "M";//男 
	else 
		lpPlayerInfo->m_sSEX = "F";//女 
	lpPlayerInfo->m_sCNAME = _T(""); 
	lpPlayerInfo->m_sENAME = _T(""); 
	nAddPoint = 20; 
 
	// guanhua 2000/09/29 +1 
	lpPlayerInfo->m_nEscapeNow = 0;		// just using for Escape now (2000/09/29) 
} 
 
HRESULT CMenuCreateNew::Draw2DSetup() 
{ 
	bltObject(0,0,myglobs.g_lpDDSGameMenu,&rcMainSurfaceSource,DDBLTFAST_SRCCOLORKEY); 
	DrawAllMenuBottonElement(); 
	DrawAllNumberElement();//在需要的位置填写数值信息 
	DrawAllPlayInfoElement();//填写用户信息,例如中文名称,英文名称,密码等等 
 
	if(bShowMsg) 
	{ 
		ShowErrorMsg(g_szErrorMsg); 
	} 
	return DD_OK; 
} 
 
HRESULT CMenuCreateNew::DrawAllMenuBottonElement() 
{ 
	LPDIRECTDRAWSURFACE lpdds = myglobs.g_lpDDSGameMenu; 
 
	//在CreateNewPlayer-Surface图片上画需要的button 
	if(bLeftStr) 
		bltButtonObject(&rcLeftStrPos,&rcLeftButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bRightStr ) 
		bltButtonObject(&rcRightStrPos,&rcRightButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bLeftInt) 
		bltButtonObject(&rcLeftIntPos,&rcLeftButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bRightInt) 
		bltButtonObject(&rcRightIntPos,&rcRightButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bLeftCon) 
		bltButtonObject(&rcLeftConPos,&rcLeftButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bRightCon ) 
		bltButtonObject(&rcRightConPos,&rcRightButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bLeftDex) 
		bltButtonObject(&rcLeftDexPos,&rcLeftButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bRightDex ) 
		bltButtonObject(&rcRightDexPos,&rcRightButtonSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bMale) 
		bltButtonObject(&rcMalePos,&rcTrueSelectSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bFemale) 
		bltButtonObject(&rcFemalePos,&rcTrueSelectSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bStartGame) 
		bltButtonObject(&rcStartGamePos,&rcStartGameSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
	if(bBackup) 
		bltButtonObject(&rcBackupPos,&rcBackupSource,lpdds,DDBLTFAST_SRCCOLORKEY); 
 
	return DD_OK; 
} 
 
// 
//填写数据 
// 
HRESULT CMenuCreateNew::DrawAllNumberElement() 
{ 
	LPDIRECTDRAWSURFACE lpdds = myglobs.g_lpDDSGameMenu; 
	char dwBuffer[5]; 
	int nTmp; 
	dwBuffer[0] = (BYTE)nAddPoint/10 + '0'; 
	nTmp = nAddPoint%10; 
	dwBuffer[1] = (BYTE)nTmp + '0'; 
	dwBuffer[2] = '\0'; 
	bltScore(dwBuffer, rcDistributePos.left, rcDistributePos.top,&rcNumberSource,lpdds); 
 
	lpPlayerInfo = playerlist.GetHead(); 
 
	nTmp = lpPlayerInfo->m_iCON; 
	dwBuffer[0] = (BYTE)nTmp/10 + '0'; 
	nTmp = nTmp%10; 
	dwBuffer[1] = (BYTE)nTmp + '0'; 
	dwBuffer[2] = '\0'; 
	bltScore(dwBuffer, rcConPos.left, rcConPos.top,&rcNumberSource,lpdds); 
 
	nTmp = lpPlayerInfo->m_iDEX; 
	dwBuffer[0] = (BYTE)nTmp/10 + '0'; 
	nTmp = nTmp%10; 
	dwBuffer[1] = (BYTE)nTmp + '0'; 
	dwBuffer[2] = '\0'; 
	bltScore(dwBuffer, rcDexPos.left, rcDexPos.top,&rcNumberSource,lpdds); 
 
	nTmp = lpPlayerInfo->m_iSTR; 
	dwBuffer[0] = (BYTE)nTmp/10 + '0'; 
	nTmp = nTmp%10; 
	dwBuffer[1] = (BYTE)nTmp + '0'; 
	dwBuffer[2] = '\0'; 
	bltScore(dwBuffer, rcStrPos.left, rcStrPos.top,&rcNumberSource,lpdds); 
 
	nTmp = lpPlayerInfo->m_iINT; 
	dwBuffer[0] = (BYTE)nTmp/10 + '0'; 
	nTmp = nTmp%10; 
	dwBuffer[1] = (BYTE)nTmp + '0'; 
	dwBuffer[2] = '\0'; 
	bltScore(dwBuffer, rcIntPos.left, rcIntPos.top,&rcNumberSource,lpdds); 
 
	return DD_OK; 
} 
 
// 
//填写中英文名称和密码 
// 
       char MsgBuffer[21]; 
extern long InputRoutine(char *buffer); 
extern void InputFinish(void); 
extern CString g_szInputMsg; 
HRESULT CMenuCreateNew::DrawAllPlayInfoElement() 
{ 
	lpPlayerInfo = playerlist.GetHead(); 
	if(!lpPlayerInfo->m_sCNAME.IsEmpty()) 
	{ 
    // 画中文姓名文字 
		DrawGameString(lpPlayerInfo->m_sCNAME.GetBuffer(lpPlayerInfo->m_sCNAME.GetLength()) 
						,&rcCNamePos 
						,DT_LEFT | DT_VCENTER 
						,bCName == TRUE ? RGB(255,255,0):RGB(125,125,0) 
						,RGB(0,0,0),FALSE); 
	} 
	if(!lpPlayerInfo->m_sENAME.IsEmpty()) 
	{ 
    // 画英文姓名文字 
		DrawGameString(lpPlayerInfo->m_sENAME.GetBuffer(lpPlayerInfo->m_sENAME.GetLength()) 
						,&rcENamePos 
						,DT_LEFT | DT_VCENTER 
						,bEName == TRUE ? RGB(255,255,0):RGB(125,125,0) 
						,RGB(0,0,0),FALSE); 
	} 
  if(g_bGetInputMessage) 
  { 
    long hr=InputRoutine(MsgBuffer); 
    if(hr==0) 
    { 
      CString CMsgBuffer; 
      for(DWORD i=0;i g_nSelEnd)) g_nSelStart = g_nSelEnd; 
      g_nInputMsgPos = g_szInputMsg.GetLength(); 
  		g_bGetInputMessage = FALSE;//关闭接受按键盘的消息 
    } 
    else if(hr>0) 
    { 
      InputFinish(); 
      g_szInputMsg.Empty(); 
      g_nSelStart = g_szInputMsg.Find(' ')+1; 
      g_nSelEnd = g_szInputMsg.GetLength(); 
      if((g_nSelStart == 0)||(g_nSelStart > g_nSelEnd)) g_nSelStart = g_nSelEnd; 
      g_nInputMsgPos = g_szInputMsg.GetLength(); 
  		g_bGetInputMessage = FALSE;//关闭接受按键盘的消息 
    } 
  } 
	// 
	//进入网络等待状态 
	// 
	if(bWaittingConnect) 
	{ 
		// 
		//暗淡背景,然后进入等待验证,准备接收数据,进入游戏前的准备 
		// 
		DrawInterLace(); 
		DrawProgress( TRUE ); 
	} 
 
	return DD_OK; 
} 
 
extern void InputInitial(long x,long y,char *buffer,char Mode); 
void CMenuCreateNew::CreateNewOnLButtonDown(POINT Pos) 
{ 
  if(g_bGetInputMessage) 
  { 
    CString CMsgBuffer; 
    for(DWORD i=0;i g_nSelEnd)) g_nSelStart = g_nSelEnd; 
    g_nInputMsgPos = g_szInputMsg.GetLength(); 
		g_bGetInputMessage = FALSE;//关闭接受按键盘的消息 
  } 
  else 
  { 
    if(bShowMsg) { bShowMsg = FALSE; return; } 
  } 
	//按下返回的按钮 
	if( (Pos.x > rcBackupPos.left) 
		&&(Pos.x < rcBackupPos.right) 
		&&(Pos.y > rcBackupPos.top) 
		&&(Pos.y < rcBackupPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bBackup = TRUE; 
		return; 
	} 
	if(bWaittingConnect) return; 
	lpPlayerInfo = playerlist.GetHead(); 
  //按下中文姓名的按钮 
	if( (Pos.x > rcCNamePos.left) 
		&&(Pos.x < rcCNamePos.right) 
		&&(Pos.y > rcCNamePos.top) 
		&&(Pos.y < rcCNamePos.bottom) ) 
	{ 
    if(!g_bGetInputMessage) 
    { 
      bCName = TRUE; 
      bEName = FALSE; 
      g_bGetInputMessage = TRUE;//打开接受按键盘的消息 
      strcpy(MsgBuffer,lpPlayerInfo->m_sCNAME.GetBuffer(lpPlayerInfo->m_sCNAME.GetLength())); 
      strncat(MsgBuffer,"                    ",20-strlen(MsgBuffer)); 
      InputInitial(558,201,MsgBuffer,1); 
      lpPlayerInfo->m_sCNAME = _T(""); 
    } 
		return; 
	} 
  //按下英文姓名的按钮 
	if( (Pos.x > rcENamePos.left) 
		&&(Pos.x < rcENamePos.right) 
		&&(Pos.y > rcENamePos.top) 
		&&(Pos.y < rcENamePos.bottom) ) 
	{ 
    if(!g_bGetInputMessage) 
    { 
      bCName = FALSE; 
      bEName = TRUE; 
      g_bGetInputMessage = TRUE; 
      strcpy(MsgBuffer,lpPlayerInfo->m_sENAME.GetBuffer(lpPlayerInfo->m_sENAME.GetLength())); 
      strncat(MsgBuffer,"                    ",20-strlen(MsgBuffer)); 
      InputInitial(558,232,MsgBuffer,0); 
      lpPlayerInfo->m_sENAME = _T(""); 
    } 
		return; 
	} 
 
	//按下开始按钮 
	if( (Pos.x > rcStartGamePos.left) 
		&&(Pos.x < rcStartGamePos.right) 
		&&(Pos.y > rcStartGamePos.top) 
		&&(Pos.y < rcStartGamePos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bStartGame = TRUE; 
		return; 
	} 
	//选种男角色 
	if( (Pos.x > rcMalePos.left) 
		&&(Pos.x < rcMalePos.right) 
		&&(Pos.y > rcMalePos.top) 
		&&(Pos.y < rcMalePos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bMale = TRUE; 
		bFemale = FALSE; 
    lpPlayerInfo->m_sSEX = "M"; 
		return; 
	} 
	//选种女角色 
	if( (Pos.x > rcFemalePos.left) 
		&&(Pos.x < rcFemalePos.right) 
		&&(Pos.y > rcFemalePos.top) 
		&&(Pos.y < rcFemalePos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bFemale = TRUE; 
		bMale = FALSE; 
    lpPlayerInfo->m_sSEX = "F"; 
		return; 
	} 
	//臂力的左边选择 
	if( (Pos.x > rcLeftStrPos.left) 
		&&(Pos.x < rcLeftStrPos.right) 
		&&(Pos.y > rcLeftStrPos.top) 
		&&(Pos.y < rcLeftStrPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bLeftStr = TRUE; 
		if(lpPlayerInfo->m_iSTR>10) 
		{ 
			lpPlayerInfo->m_iSTR--; 
			nAddPoint++; 
		} 
		return; 
	} 
	//臂力的右边的选择 
	if( (Pos.x > rcRightStrPos.left) 
		&&(Pos.x < rcRightStrPos.right) 
		&&(Pos.y > rcRightStrPos.top) 
		&&(Pos.y < rcRightStrPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bRightStr = TRUE; 
		if(nAddPoint <= 0)return; 
		if(lpPlayerInfo->m_iSTR<35) 
		{ 
			lpPlayerInfo->m_iSTR++; 
			nAddPoint--; 
		} 
		return; 
	} 
	//悟性的左边选择 
	if( (Pos.x > rcLeftIntPos.left) 
		&&(Pos.x < rcLeftIntPos.right) 
		&&(Pos.y > rcLeftIntPos.top) 
		&&(Pos.y < rcLeftIntPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bLeftInt = TRUE; 
		if(lpPlayerInfo->m_iINT>10) 
		{ 
			lpPlayerInfo->m_iINT--; 
			nAddPoint++; 
		} 
		return; 
	} 
	//悟性的右边的选择 
	if( (Pos.x > rcRightIntPos.left) 
		&&(Pos.x < rcRightIntPos.right) 
		&&(Pos.y > rcRightIntPos.top) 
		&&(Pos.y < rcRightIntPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bRightInt = TRUE; 
		if(nAddPoint <= 0)return; 
		if(lpPlayerInfo->m_iINT<35) 
		{ 
			lpPlayerInfo->m_iINT++; 
			nAddPoint--; 
		} 
		return; 
	} 
	//根骨的左边选择 
	if( (Pos.x > rcLeftConPos.left) 
		&&(Pos.x < rcLeftConPos.right) 
		&&(Pos.y > rcLeftConPos.top) 
		&&(Pos.y < rcLeftConPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bLeftCon = TRUE; 
		if(lpPlayerInfo->m_iCON>10) 
		{ 
			lpPlayerInfo->m_iCON--; 
			nAddPoint++; 
		} 
		return; 
	} 
	//根骨的右边的选择 
	if( (Pos.x > rcRightConPos.left) 
		&&(Pos.x < rcRightConPos.right) 
		&&(Pos.y > rcRightConPos.top) 
		&&(Pos.y < rcRightConPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bRightCon = TRUE; 
		if(nAddPoint <= 0)return; 
		if(lpPlayerInfo->m_iCON<35) 
		{ 
			lpPlayerInfo->m_iCON++; 
			nAddPoint--; 
		} 
		return; 
	} 
	//身法的左边选择 
	if( (Pos.x > rcLeftDexPos.left) 
		&&(Pos.x < rcLeftDexPos.right) 
		&&(Pos.y > rcLeftDexPos.top) 
		&&(Pos.y < rcLeftDexPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bLeftDex = TRUE; 
		if(lpPlayerInfo->m_iDEX>10) 
		{ 
			lpPlayerInfo->m_iDEX--; 
			nAddPoint++; 
		} 
		return; 
	} 
	//身法的右边的选择 
	if( (Pos.x > rcRightDexPos.left) 
		&&(Pos.x < rcRightDexPos.right) 
		&&(Pos.y > rcRightDexPos.top) 
		&&(Pos.y < rcRightDexPos.bottom) ) 
	{ 
		PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); 
		bRightDex = TRUE; 
		if(nAddPoint <= 0)return; 
		if(lpPlayerInfo->m_iDEX<35) 
		{ 
			lpPlayerInfo->m_iDEX++; 
			nAddPoint--; 
		} 
		return; 
	} 
	bCName = FALSE; 
	bEName = FALSE; 
} 
 
void CMenuCreateNew::CreateNewOnLButtonUp(POINT Pos) 
{ 
	// 
	//进入注册建立新的玩家,将它设置为等待状态 
	// 
	//开始按钮 
	// 
	if( (Pos.x > rcStartGamePos.left) 
		&&(Pos.x < rcStartGamePos.right) 
		&&(Pos.y > rcStartGamePos.top) 
		&&(Pos.y < rcStartGamePos.bottom) ) 
	{ 
		if(!bStartGame) return; 
		bStartGame = FALSE; 
		// 
		//检查各项数值是否合法 
		// 
		lpPlayerInfo = playerlist.GetHead(); 
		if(lpPlayerInfo->m_sCNAME.IsEmpty()) 
			goto failure; 
		if(lpPlayerInfo->m_sENAME.IsEmpty()) 
			goto failure; 
 
 
		if(!g_bInternConnect) 
		{ 
			strcpy(g_szErrorMsg,"您已与伺服器失去联系,请再连接试一次!"); 
			bShowMsg = TRUE; 
			return;//看看是否与服务器失去了联系 
		} 
		PlaySoundDS(OPENMENU,pSysSoundPos,0); 
		// 
		//开始进入游戏连接状态,等待...... 
		// 
		if(UsreCreateNewPlayerSend()) 
    { 
			bWaittingConnect = TRUE; 
    } 
		return; 
	} 
	//返回的按钮 
	if( (Pos.x > rcBackupPos.left) 
		&&(Pos.x < rcBackupPos.right) 
		&&(Pos.y > rcBackupPos.top) 
		&&(Pos.y < rcBackupPos.bottom) ) 
	{ 
		if(!bBackup) return; 
		bBackup = FALSE; 
		PlaySoundDS(CLOSEMENU,pSysSoundPos,0); 
		g_nGameState = GAME_LOADPLAYER; 
		return; 
	} 
	//臂力的左边选择 
	if( (Pos.x > rcLeftStrPos.left) 
		&&(Pos.x < rcLeftStrPos.right) 
		&&(Pos.y > rcLeftStrPos.top) 
		&&(Pos.y < rcLeftStrPos.bottom) ) 
	{ 
		bLeftStr = FALSE; 
		return; 
	} 
	//臂力的右边的选择 
	if( (Pos.x > rcRightStrPos.left) 
		&&(Pos.x < rcRightStrPos.right) 
		&&(Pos.y > rcRightStrPos.top) 
		&&(Pos.y < rcRightStrPos.bottom) ) 
	{ 
		bRightStr = FALSE; 
		return; 
	} 
	//悟性的左边选择 
	if( (Pos.x > rcLeftIntPos.left) 
		&&(Pos.x < rcLeftIntPos.right) 
		&&(Pos.y > rcLeftIntPos.top) 
		&&(Pos.y < rcLeftIntPos.bottom) ) 
	{ 
		bLeftInt = FALSE; 
		return; 
	} 
	//悟性的右边的选择 
	if( (Pos.x > rcRightIntPos.left) 
		&&(Pos.x < rcRightIntPos.right) 
		&&(Pos.y > rcRightIntPos.top) 
		&&(Pos.y < rcRightIntPos.bottom) ) 
	{ 
		bRightInt = FALSE; 
		return; 
	} 
	//根骨的左边选择 
	if( (Pos.x > rcLeftConPos.left) 
		&&(Pos.x < rcLeftConPos.right) 
		&&(Pos.y > rcLeftConPos.top) 
		&&(Pos.y < rcLeftConPos.bottom) ) 
	{ 
		bLeftCon = FALSE; 
		return; 
	} 
	//根骨的右边的选择 
	if( (Pos.x > rcRightConPos.left) 
		&&(Pos.x < rcRightConPos.right) 
		&&(Pos.y > rcRightConPos.top) 
		&&(Pos.y < rcRightConPos.bottom) ) 
	{ 
		bRightCon = FALSE; 
		return; 
	} 
	//身法的左边选择 
	if( (Pos.x > rcLeftDexPos.left) 
		&&(Pos.x < rcLeftDexPos.right) 
		&&(Pos.y > rcLeftDexPos.top) 
		&&(Pos.y < rcLeftDexPos.bottom) ) 
	{ 
		bLeftDex = FALSE; 
		return; 
	} 
	//身法的右边的选择 
	if( (Pos.x > rcRightDexPos.left) 
		&&(Pos.x < rcRightDexPos.right) 
		&&(Pos.y > rcRightDexPos.top) 
		&&(Pos.y < rcRightDexPos.bottom) ) 
	{ 
		bRightDex = FALSE; 
		return; 
	} 
	bLeftStr = FALSE;//臂力左 
	bRightStr = FALSE;//臂力右 
	bLeftInt = FALSE;//悟性左 
	bRightInt = FALSE;//悟性右 
	bLeftCon = FALSE;//根骨左 
	bRightCon = FALSE;//根骨右 
	bLeftDex = FALSE;//身法左 
	bRightDex = FALSE;//身法右 
	bStartGame = FALSE;//开始游戏 
	bBackup = FALSE;//返回上一层 
	return; 
failure: 
	strcpy(g_szErrorMsg,"您需要填写姓名密码等信息!"); 
	bShowMsg = TRUE; 
	return; 
} 
 
void CMenuCreateNew::CreateNewOnRButtonDown(POINT Pos) 
{ 
	bCName = FALSE; 
	bEName = FALSE; 
	if(bShowMsg) bShowMsg = FALSE; 
	return; 
} 
 
void CMenuCreateNew::CreateNewOnMouseMove(POINT Pos) 
{ 
} 
 
// 
//处理显示的玩家名称,密码和其他信息 
// 
void CMenuCreateNew::CreateNewInputMsg(CString strMsg) 
{ 
	char szparm[]=" ,;><()!#$%&*\n\t\r";//非法字元集 
	int i; 
 
	if(bCName||bEName) 
	{ 
		if(strpbrk((const char*)strMsg,szparm)!=NULL) 
		{ 
			strcpy(g_szErrorMsg,"姓名必须是由字母或数字组成!"); 
			bShowMsg = TRUE; 
			return; 
		} 
	} 
	lpPlayerInfo = playerlist.GetHead(); 
 
	if(bCName) 
	{ 
		if(strMsg.GetLength()<4) 
		{ 
			strcpy(g_szErrorMsg,"中文名称有名有姓!"); 
			bShowMsg = TRUE; 
			return; 
		} 
		lpPlayerInfo->m_sCNAME = strMsg.Left(16); 
	} 
	else if(bEName) 
	{ 
		if(strMsg.GetLength()<3) 
		{ 
			strcpy(g_szErrorMsg,"英文名称不能少于3个字元!"); 
			bShowMsg = TRUE; 
			return; 
		} 
		for(i=0;i'~') 
			{ 
				strcpy(g_szErrorMsg,"英文名称必须是由字母组成!"); 
				bShowMsg = TRUE; 
				return; 
			} 
		} 
		lpPlayerInfo->m_sENAME = strMsg.Left(16); 
	} 
	return; 
} 
 
BOOL CMenuCreateNew::UsreCreateNewPlayerSend() 
{ 
//	CString parm = (" "); 
//	char itmpString[20]; 
//	CString sStr,sInt,sCon,sDex; 
	lpPlayerInfo = playerlist.GetHead(); 
//	sStr = itoa(lpPlayerInfo->m_iSTR,itmpString,10); 
//	sInt = itoa(lpPlayerInfo->m_iINT,itmpString,10); 
//	sCon = itoa(lpPlayerInfo->m_iCON,itmpString,10); 
//	sDex = itoa(lpPlayerInfo->m_iDEX,itmpString,10); 
//cary 
	wsprintf(szSendBuf,"%s %s %s %s %s %d %d %d %d",szNewPlayCreate,lpPlayerInfo->m_sENAME,"111111",lpPlayerInfo->m_sCNAME, 
			lpPlayerInfo->m_sSEX,lpPlayerInfo->m_iSTR,lpPlayerInfo->m_iINT,lpPlayerInfo->m_iCON,lpPlayerInfo->m_iDEX); 
	Send(); 
/*cary 
	g_csSendToServerMsg = szNewPlayCreate  
						+ parm 
						+ lpPlayerInfo->m_sENAME 
						+ parm 
						+ "111111" 
						+ parm 
						+ lpPlayerInfo->m_sCNAME 
						+ parm 
						+ lpPlayerInfo->m_sSEX 
						+ parm+ sStr 
						+ parm+ sInt 
						+ parm+ sCon 
						+ parm+ sDex; 
 
	DWORD dwSendSvr; 
	gSendToSvrThread = CreateThread(NULL, 0, ( LPTHREAD_START_ROUTINE )SendToServer, 0, 0, &dwSendSvr); 
	if(!gSendToSvrThread) 
	{ 
		Msg("Sorry Create SendToServer Thread!"); 
		return FALSE; 
	} 
end*/ 
	g_nReceiveMsgState = SVRMSG_CREATENEW; 
	nSpareTime = MAXLOADMAPTIME;		//剩下的时间(单位:秒) 
	nRecTimes = 0;			//接收到的信息次数 
	return TRUE; 
} 
 
// 
//接受到服务器传来的数据 
// 
extern CString lastRcvBuf; 
BOOL CMenuCreateNew::UsreCreateNewPlayerReceive() 
{ 
	CStringList strls; 
	CString parm; 
	CString strtmp; 
	char *ps; 
	char tmpRcv[8192]; 
 
	lstrcpy(tmpRcv,lastRcvBuf); 
	parm = CString(" \n\t\r"); 
	ps = strtok(tmpRcv,(const char*)parm); 
	strls.AddTail(ps); 
	for(;;) 
	{ 
		ps=strtok(NULL,(const char*)parm); 
		if(ps==NULL)break; 
		strls.AddTail(ps); 
	} 
	 
	//判断从服务器返回的结果 
	strtmp=strls.GetHead(); 
	strtmp.MakeUpper(); 
	if(strtmp=="OK") 
	{ 
		strls.RemoveAll(); 
		// 
		//进入主游戏画面 
		// 
//		AppPause(TRUE); 
		// 
		//建立角色成功,写存盘文件 
		// 
		lpPlayerInfo = playerlist.GetHead(); 
 
		// 
		//装入游戏的各种数据,并准备进入主游戏的画面 
		//填写地图信息,人物角色,装备,技能等等信息. 
		//初始化主游戏画面surface,装入3D场景 
		if(!GetNewMap(lastRcvBuf))goto failure;//获取地图信息,函数在MapInfo.h中定义 
		if(!GetMyselfInfo(lastRcvBuf))goto failure;//获取自我信息失败 
		if(!GetMyEquipInfo(lastRcvBuf))goto failure;//获取自我装备信息失败 
		if(!GetMySkillInfo(lastRcvBuf))goto failure;//获取自我技能信息失败 
		if(!m_MainScreen.PrepareMainScreen())//做主游戏画面的准备工作(例如安排2D图片的位置等等) 
			goto failure; 
		if (!BuildScene(g_lpD3DRM, myglobs.dev, myglobs.view, myglobs.scene, myglobs.camera)) 
			goto failure;//装入3D人物和场景 
		g_nGameState = GAME_MAIN; 
    EnableIME(myglobs.hWndMain); 
//		AppPause(FALSE); 
		return TRUE; 
	} 
	else 
	{ 
		int i; 
		strtmp.Empty(); 
		for(i=1;i j) 
			{ 
				return FALSE;//接收不正确 
			} 
			if(playerlist.IsEmpty()) 
			{ 
				lpPlayerInfo = new CPlayerInfo; 
				playerlist.AddTail(lpPlayerInfo); 
			} 
			strtmp = strls.GetAt( strls.FindIndex(i+42)); 
			if(lstrcmp("'PLAYEREND'",strtmp))return FALSE; 
			lpPlayerInfo = playerlist.GetHead(); 
			POSITION	pos; 
			pos = strls.FindIndex(i); 
			 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sCNAME = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sENAME = strtmp; 
			g_sPlayerName = strtmp; 
			 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sNICKNAME = strtmp; 
			 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sTITLE = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sXFILENAME = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sFAMILY = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sROOM = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sSEX = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iAGE = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iSHEN = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iSTR = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iINT = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iCON = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iDEX = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iEFFQI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMAXQI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iEFFJING = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMAXJING = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iEFFJINLI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMAXJINLI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iADDJINLI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iEFFNEILI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMAXNEILI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iADDNEILI = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iEXP = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iSCORE = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iGENERATION = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMONEY = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iSTATUS = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sTEACHER = strtmp; 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_sPERSONA = strtmp; 
			 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iQIANNENG = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iEAT = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMAXEAT = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iDRINK = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMAXDRINK = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iKILLNPC = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iKILLPLAYER = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iKILLED = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iPLAYERSTATUS = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iBETRAY = atoi((char *)(LPCSTR)strtmp); 
 
			strtmp = strls.GetNext(pos); 
			strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpPlayerInfo->m_iMUDTIME = atoi((char *)(LPCSTR)strtmp); 
			break; 
		} 
	} 
	strls.RemoveAll(); 
	return TRUE; 
} 
 
BOOL CMenuCreateNew::GetMySkillInfo(CString strtmp) 
{ 
	int i,j; 
	CStringList strls; 
	CString parm; 
	int itmp; 
	LPTSTR lpsz; 
	char *ps; 
	BOOL bFindHead=FALSE; 
 
//	strtmp = g_szReceive; 
	lpsz = strtmp.GetBuffer(strtmp.GetLength()+1); 
	parm=CString("\t"); 
	ps=strtok(lpsz,(const char*)parm); 
	strls.AddTail(ps); 
	for(;;) 
	{ 
		ps=strtok(NULL,(const char*)parm); 
		if(ps==NULL)break; 
		strls.AddTail(ps); 
	} 
 
	j = strls.GetCount(); 
 
	for(i=0;i j) 
				return FALSE; 
 
			strtmp = strls.GetAt( strls.FindIndex(i+6)); 
			if(lstrcmp("'RECORDEEND'",strtmp))return FALSE; 
 
			lpSkillInfo = new CSkillInfo; 
			if(!lpSkillInfo)return FALSE; 
 
			strtmp = strls.GetAt( strls.FindIndex(i+1)); 
			lpSkillInfo->m_sCNAME = strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
 
			strtmp = strls.GetAt( strls.FindIndex(i+2)); 
			lpSkillInfo->m_sENAME = strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
 
			strtmp = strls.GetAt( strls.FindIndex(i+3)); 
			strtmp = strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpsz = strtmp.GetBuffer(20); 
			itmp=strtol(lpsz,'\0',10); 
			strtmp.ReleaseBuffer(); 
			lpSkillInfo->m_iSCORER = itmp; 
 
			strtmp = strls.GetAt( strls.FindIndex(i+4)); 
			strtmp = strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
			lpsz = strtmp.GetBuffer(20); 
			itmp=strtol(lpsz,'\0',10); 
			strtmp.ReleaseBuffer(); 
			lpSkillInfo->m_iLEVEL = itmp; 
 
			strtmp = strls.GetAt( strls.FindIndex(i+5)); 
			lpSkillInfo->m_sMAPPING = strtmp = strtmp.Mid(1,strtmp.GetLength()-2); 
 
			strtmp = strls.GetAt( strls.FindIndex(i+7)); 
			if(!lstrcmp("'PLAYERSKILLEND'",strtmp)) 
			{ 
				skilllist.AddTail(lpSkillInfo); 
				break; 
			} 
			i = i+6; 
			skilllist.AddTail(lpSkillInfo); 
		} 
	} 
	strls.RemoveAll(); 
	return TRUE; 
} 
 
 
BOOL CMenuCreateNew::GetMyEquipInfo(CString strtmp) 
{ 
	int i,j; 
	CStringList strls; 
	char parm[2] = "\t"; 
	LPTSTR lpsz; 
	char *ps; 
	BOOL bFindHead=FALSE, bFindEquip; 
 
//	strtmp = g_szReceive; 
	lpsz = strtmp.GetBuffer(strtmp.GetLength()+1); 
	// Spock start 
	POSITION pos; 
	CString szCName, szUnit, szNow; 
	int nCount; 
	// Spock end 
 
	ps=strtok(lpsz,parm); 
	strls.AddTail(ps); 
	for(;;) 
	{ 
		ps=strtok(NULL,parm); 
		if(ps==NULL)break; 
		strls.AddTail(ps); 
	} 
 
	j = strls.GetCount(); 
 
	for(i=0;i= j) 
				return FALSE; 
 
			strtmp = strls.GetAt( strls.FindIndex(i+5)); 
			if(lstrcmp("'RECORDEEND'",strtmp))return FALSE; 
			 
			strtmp = strls.GetAt( strls.FindIndex(i+1)); 
			szCName = strtmp.Mid(1,strtmp.GetLength()-2); 
			strtmp = strls.GetAt( strls.FindIndex(i+2)); 
			szUnit = strtmp.Mid(1,strtmp.GetLength()-2); 
			strtmp = strls.GetAt( strls.FindIndex(i+3)); 
			szNow = strtmp.Mid(1,strtmp.GetLength()-2); 
			strtmp = strls.GetAt( strls.FindIndex(i+4)); 
			nCount = atoi((const char*)(LPCSTR)strtmp.Mid(1,strtmp.GetLength()-2)); 
			if (szNow == "空") szNow.Empty(); 
			pos = equiplist.GetHeadPosition(); 
			bFindEquip = FALSE; 
			while(pos != NULL) { 
				lpEquipInfo = equiplist.GetNext(pos); 
				if((lpEquipInfo->m_sCNAME == szCName) && (lpEquipInfo->m_sNOW == szNow)) { 
					lpEquipInfo->m_iCOUNT += nCount; 
					bFindEquip = TRUE; 
					break; 
				} 
			} 
			if (!bFindEquip) { 
				lpEquipInfo = new CEquipInfo; 
				if(!lpEquipInfo)return FALSE; 
				lpEquipInfo->m_sCNAME= szCName; 
				lpEquipInfo->m_sUNIT = szUnit; 
				lpEquipInfo->m_sNOW = szNow; 
				lpEquipInfo->m_iCOUNT = nCount; 
				equiplist.AddTail(lpEquipInfo); 
			} 
 
			strtmp = strls.GetAt( strls.FindIndex(i+6)); 
			if(!lstrcmp("'PLAYEREQUIPEND'",strtmp)) 
			{ 
				break; 
			} 
			i += 5; 
			// Spock end 
		} 
	} 
	strls.RemoveAll(); 
	return TRUE; 
} 
 
BOOL CMenuCreateNew::CreateSaveFile() 
{ 
//	AppPause(TRUE); 
/* 
	// 
	//建立角色成功,写存盘文件 
	// 
	lpPlayerInfo = playerlist.GetHead(); 
	CString sztmpSign = CString("\""); 
	CString sztmpParm = CString("\t"); 
	CString sResultMsg =sztmpSign + lpPlayerInfo->m_sCNAME + sztmpSign + sztmpParm 
				+ sztmpSign + lpPlayerInfo->m_sENAME + sztmpSign + sztmpParm 
				+ sztmpSign + strPassword + sztmpSign + CString("\r\n"); 
	CFile file; 
	CFileException e; 
	char tmpFileName[256]; 
	strcpy(tmpFileName,g_tszPathName); 
	strcat(tmpFileName,"\\player.sav"); 
	if(!file.Open(tmpFileName,CFile::modeNoTruncate|CFile::modeWrite,&e)) 
	{ 
		if(!file.Open(tmpFileName,CFile::modeCreate|CFile::modeWrite,&e)) 
		{ 
			strcpy(g_szErrorMsg,"无法写存盘文件"); 
			bShowMsg = TRUE; 
			bWaittingConnect = FALSE; 
//			AppPause(FALSE); 
			return FALSE; 
		} 
	} 
	file.SeekToEnd(); 
	CArchive ar(&file,CArchive::store); 
	ar.WriteString(sResultMsg); 
	ar.Close(); 
	file.Close(); 
//	AppPause(FALSE); 
*/ 
	return TRUE; 
}