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 CList playerlist; extern CPlayerInfo * lpPlayerInfo; extern CList skilllist; extern CSkillInfo * lpSkillInfo; extern CList equiplist; extern CList equiprentlist; //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; }