//离开动作 bool __cdecl CTableFrame::PerformStandUpAction(IServerUserItem * pIServerUserItem) { CString strFile,strTemp; CTime tmCur = CTime::GetCurrentTime(); CString strTime = tmCur.Format("%m%d"); strFile.Format("log\\%s游戏服务.log",strTime); strTemp.Format("into PerformStandUpAction"); WriteLog(strFile, strTemp); //效验参数 ASSERT(pIServerUserItem!=NULL); ASSERT(pIServerUserItem->GetTableID()==m_wTableID); ASSERT(pIServerUserItem->GetChairID()<m_wChairCount); //变量定义 tagServerUserData * pUserData=pIServerUserItem->GetUserData(); WORD wChairID=pUserData->wChairID; bool bLookonUser=(pIServerUserItem->GetUserStatus()==US_LOOKON); //用户处理 if (bLookonUser==true) { IServerUserItem * pILookonUserItem=NULL; for (INT_PTR i=0;i<m_LookonUserItemPtr.GetCount();i++) { pILookonUserItem=m_LookonUserItemPtr[i]; ASSERT(pILookonUserItem!=NULL); if (pILookonUserItem==pIServerUserItem) { //起立处理 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqStandUp(wChairID,pIServerUserItem,false); //设置用户 m_LookonUserItemPtr.RemoveAt(i); pIServerUserItem->SetUserStatus(US_FREE,INVALID_TABLE,INVALID_CHAIR); m_pIGameServiceFrame->SendUserStatus(pIServerUserItem); //起立处理 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserStandUp(wChairID,pIServerUserItem,true); return true; } } } else { //起立请求 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqStandUp(wChairID,pIServerUserItem,false); //结束游戏 if (IsUserPlaying(pIServerUserItem)==true) { m_pITableFrameSink->OnEventGameEnd(pUserData->wChairID,pIServerUserItem,GER_USER_LEFT); } //离开判断 if ((pUserData->wTableID==INVALID_TABLE)||(pUserData->wChairID==INVALID_CHAIR)) return true; //设置用户 m_pIUserItem[pUserData->wChairID]=NULL; pIServerUserItem->SetUserStatus(US_FREE,INVALID_TABLE,INVALID_CHAIR); m_pIGameServiceFrame->SendUserStatus(pIServerUserItem); //设置桌主 if (m_dwTableOwnerID==pUserData->dwUserID) m_dwTableOwnerID=0L; //更新密码 WORD wUserCount=0; for (WORD i=0;i<m_wChairCount;i++) { if (m_pIUserItem[i]!=NULL) wUserCount++; } if (wUserCount==0) { m_bLocked=false; m_szPassword[0]=0; m_pIGameServiceFrame->SendTableStatus(m_wTableID); } //坐下处理 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserStandUp(wChairID,pIServerUserItem,false); //变量定义 bool bMatchServer=((m_pGameServiceOption->wServerType&GAME_GENRE_MATCH)!=0); bool bControlStart=((bMatchServer==true)&&m_pGameServiceOption->cbControlStart==TRUE); strTemp.Format("GAME_GENRE_MATCH 1"); WriteLog(strFile, strTemp); //开始判断 if ((bControlStart==false)&&(StartVerdict()==true)) { StartGame(); return true; }//End if return true; } return true; }
//离开动作 bool __cdecl CTableFrame::PerformStandUpAction(IServerUserItem * pIServerUserItem) { //效验参数 ASSERT(pIServerUserItem!=NULL); ASSERT(pIServerUserItem->GetTableID()==m_wTableID); ASSERT(pIServerUserItem->GetChairID()<m_wChairCount); //变量定义 tagServerUserData * pUserData=pIServerUserItem->GetUserData(); WORD wChairID=pUserData->wChairID; bool bLookonUser=(pIServerUserItem->GetUserStatus()==US_LOOKON); //用户处理 if (bLookonUser==true) { IServerUserItem * pILookonUserItem=NULL; for (INT_PTR i=0;i<m_LookonUserItemPtr.GetCount();i++) { pILookonUserItem=m_LookonUserItemPtr[i]; ASSERT(pILookonUserItem!=NULL); if (pILookonUserItem==pIServerUserItem) { //起立处理 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqStandUp(wChairID,pIServerUserItem,false); //设置用户 m_LookonUserItemPtr.RemoveAt(i); pIServerUserItem->SetUserStatus(US_FREE,INVALID_TABLE,INVALID_CHAIR); m_pIGameServiceFrame->SendUserStatus(pIServerUserItem); //起立处理 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserStandUp(wChairID,pIServerUserItem,true); return true; } } } else { //起立请求 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqStandUp(wChairID,pIServerUserItem,false); //结束游戏 if (IsUserPlaying(pIServerUserItem)==true) { m_pITableFrameSink->OnEventGameEnd(pUserData->wChairID,pIServerUserItem,GER_USER_LEFT); } //离开判断 if ((pUserData->wTableID==INVALID_TABLE)||(pUserData->wChairID==INVALID_CHAIR)) return true; //设置用户 m_pIUserItem[pUserData->wChairID]=NULL; pIServerUserItem->SetUserStatus(US_FREE,INVALID_TABLE,INVALID_CHAIR); m_pIGameServiceFrame->SendUserStatus(pIServerUserItem); //设置桌主 if (m_dwTableOwnerID==pUserData->dwUserID) m_dwTableOwnerID=0L; //更新密码 WORD wUserCount=0; for (WORD i=0;i<m_wChairCount;i++) { if (m_pIUserItem[i]!=NULL) wUserCount++; } if (wUserCount==0) { m_bLocked=false; m_szPassword[0]=0; m_pIGameServiceFrame->SendTableStatus(m_wTableID); } //坐下处理 if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserStandUp(wChairID,pIServerUserItem,false); return true; } return true; }