Esempio n. 1
0
//游戏消息处理
bool __cdecl CTableFrameSink::OnGameMessage(WORD wSubCmdID, const void * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem)
{
	switch (wSubCmdID)
	{
	case SUB_C_ADD_GOLD:	//用户加注
		{
			//效验数据
			tagServerUserData * pUserData=pIServerUserItem->GetUserData();
			if (pUserData->cbUserStatus!=US_PLAY) return true;
			if (m_cbPlayStatus[pUserData->wChairID]==FALSE) return true;

			//消息处理
			CMD_C_AddGold * pAddGold=(CMD_C_AddGold *)pDataBuffer;
			OnUserAddGold(pUserData->wChairID,pAddGold->lGold,false);

			return true;
		}
	case SUB_C_GIVE_UP:		//用户放弃
		{
			//效验数据
			tagServerUserData * pUserData=pIServerUserItem->GetUserData();
			if (pUserData->cbUserStatus!=US_PLAY) return true;
			if (m_cbPlayStatus[pUserData->wChairID]==FALSE) return true;

			//消息处理
			OnUserGiveUp(pUserData->wChairID);

			return true;
		}
	}

	return false;
}
Esempio n. 2
0
//游戏消息处理
bool __cdecl CTableFrameSink::OnGameMessage(WORD wSubCmdID, const void * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem)
{
	switch(wSubCmdID)
	{
	case SUB_C_GIVE_UP:		//用户放弃
		{
			//用户效验
			tagServerUserData * pUserData=pIServerUserItem->GetUserData();
			if (pUserData->cbUserStatus!=US_PLAY) return true;

			//状态判断
			ASSERT(m_cbPlayStatus[pUserData->wChairID]==TRUE);
			if (m_cbPlayStatus[pUserData->wChairID]==FALSE) return false;

			//消息处理
			return OnUserGiveUp(pUserData->wChairID);
		}
	case SUB_C_ADD_SCORE:	//用户加注	
		{
			//效验数据
			ASSERT(wDataSize==sizeof(CMD_C_AddScore));
			if (wDataSize!=sizeof(CMD_C_AddScore)) return false;

			//变量定义
			CMD_C_AddScore * pAddScore=(CMD_C_AddScore *)pDataBuffer;

			//用户效验
			tagServerUserData * pUserData=pIServerUserItem->GetUserData();
			if (pUserData->cbUserStatus!=US_PLAY) return true;

			//状态判断
			ASSERT(m_cbPlayStatus[pUserData->wChairID]==TRUE);
			if (m_cbPlayStatus[pUserData->wChairID]==FALSE) return false;

			//消息处理
			return OnUserAddScore(pUserData->wChairID,pAddScore->lScore,false);
		}
	case SUB_C_OPEN_CARD:	//用户坐下
		{
			//用户效验
			tagServerUserData * pUserData=pIServerUserItem->GetUserData();

			//状态判断
			//ASSERT(m_cbPlayStatus[pUserData->wChairID]!=TRUE);
			//if (m_cbPlayStatus[pUserData->wChairID]!=FALSE) return false;

			//发送数据
			CMD_S_OpenCard OpenCard;
			OpenCard.wWinUser = pUserData->wChairID;			
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_OPEN_CARD,&OpenCard,sizeof(OpenCard));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_OPEN_CARD,&OpenCard,sizeof(OpenCard));	

			return true;
		}
	}
	return false;
}
Esempio n. 3
0
//游戏结束
bool __cdecl CTableFrameSink::OnEventGameEnd(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason)
{
	switch (cbReason)
	{
	case GER_DISMISS:		//游戏解散
		{
			//效验参数
			ASSERT(pIServerUserItem!=NULL);
			ASSERT(wChairID<m_wPlayerCount);

			//构造数据
			CMD_S_GameEnd GameEnd;
			memset(&GameEnd,0,sizeof(GameEnd));

			//发送信息
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));

			m_pITableFrame->KillGameTimer(IDI_GAME_END);

			//结束游戏
			m_pITableFrame->ConcludeGame();

			return true;
		}
	case GER_NORMAL:		//常规结束
	case GER_NO_PLAYER:		//没有玩家
		{
			//定义变量
			CMD_S_GameEnd GameEnd;
			ZeroMemory(&GameEnd,sizeof(GameEnd));

			//统计信息
			WORD wWinerUser=EstimateWinner(0,4);
			ASSERT( wWinerUser != INVALID_CHAIR );
			LONG lMaxWinScore = m_lUserScore[wWinerUser];
			for (WORD i=0;i<m_wPlayerCount;i++)
			{
				//底牌信息
				if ((cbReason==GER_NO_PLAYER)||(m_cbPlayStatus[i]==FALSE)) GameEnd.bUserCard[i]=0;
				else GameEnd.bUserCard[i]=m_cbHandCardData[i][0];

				//积分信息
				if (i!=wWinerUser)
				{
					LONG lScore = __min(__min(m_lTableGold[i*2]+m_lTableGold[i*2+1],m_lUserScore[i]),lMaxWinScore);
					GameEnd.lGameGold[i] = -lScore;
					GameEnd.lGameGold[wWinerUser] += lScore;
				}
			}

			for( WORD i = 0; i < GAME_PLAYER; i++ )
			{
				LONG lRevenue=0;
				enScoreKind ScoreKind;
				//胜利类型
				ScoreKind=(GameEnd.lGameGold[i]>0L)?enScoreKind_Win:enScoreKind_Lost;
				//计算税收
				if (m_pGameServiceOption->wServerType==GAME_GENRE_GOLD)
				{
					//扣税变量
					WORD cbRevenue=m_pGameServiceOption->wRevenue;

					if (GameEnd.lGameGold[i]>=100L)
					{
						//计算税收
						lRevenue=(LONG)((LONGLONG)GameEnd.lGameGold[i]*cbRevenue/1000L);

						//成绩变量
						GameEnd.lTax+=lRevenue;
						GameEnd.lGameGold[i]=GameEnd.lGameGold[i]-lRevenue;
					}
				}
				//写入积分
				if (m_cbPlayStatus[i]==TRUE)
				{
					m_pITableFrame->WriteUserScore(i,GameEnd.lGameGold[i],lRevenue,ScoreKind);
				}
			}

			//发送信息
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));

			m_pITableFrame->KillGameTimer(IDI_GAME_END);

			//结束游戏
			m_pITableFrame->ConcludeGame();

			return true;
		}
	case GER_USER_LEFT:		//用户强退
		{
			//效验参数
			ASSERT(pIServerUserItem!=NULL);
			ASSERT(wChairID<m_wPlayerCount);

			//强退处理
			OnUserGiveUp(wChairID);

			return true;
		}
	}

	return false;
}
Esempio n. 4
0
//游戏结束
bool __cdecl CTableFrameSink::OnEventGameEnd(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason)
{
	switch (cbReason)
	{
	case GER_NORMAL:		//常规结束
	case GER_NO_PLAYER:		//没有玩家
		{
			//定义变量
			CMD_S_GameEnd GameEnd;
			memset(&GameEnd,0,sizeof(GameEnd));

			CopyMemory(GameEnd.bPlayStatus,m_bPlayStatus,sizeof(m_bPlayStatus));
			GameEnd.fMaxGold=m_fMaxGold;
			GameEnd.fTurnBasicGold=m_fTurnBasicGold;
			GameEnd.fBasicGold=m_pGameServiceOption->dwCellScore;
			CopyMemory(GameEnd.fTableGold,m_fTableGold,sizeof(m_fTableGold));

			//设置下注
			if (m_bSendCardCount<=2)
			{
				GameEnd.fTurnMaxGold=m_fMaxGold/4L;
				if(GameEnd.fTurnMaxGold <= m_pGameServiceOption->dwCellScore)
				{
					GameEnd.fTurnMaxGold = m_pGameServiceOption->dwCellScore;
				}
			}
			else if (m_bSendCardCount==3) GameEnd.fTurnMaxGold=m_fMaxGold/2L;
			else GameEnd.fTurnMaxGold=m_fMaxGold;

			//设置扑克
			for (WORD i=0;i<m_wPlayerCount;i++)
			{
				GameEnd.bTableCardCount[i]=m_bTableCardCount[i];
				GameEnd.bTableCardArray[i][0]=m_bTableCardArray[i][0];
				if(m_bTableCardCount[i] >= 1)
				{
					CopyMemory(&GameEnd.bTableCardArray[i][1],&m_bTableCardArray[i][1],(m_bTableCardCount[i]-1)*sizeof(BYTE));	
				}
			}


			//计算总注
			DOUBLE fAlfGold=0L;
			for (WORD i=0;i<CountArray(m_fTableGold);i++) fAlfGold+=m_fTableGold[i];

			//统计信息
			WORD wWinerUser=DeduceWiner(0,4);
			for (WORD i=0;i<m_wPlayerCount;i++)
			{
				//底牌信息
				if ((cbReason==GER_NO_PLAYER)||(m_bPlayStatus[i]==FALSE)) GameEnd.bUserCard[i]=0;
				else GameEnd.bUserCard[i]=m_bTableCardArray[i][0];

				//信用额度信息
				if (i==wWinerUser)
				{
					GameEnd.fGameGold[i]=fAlfGold-m_fTableGold[i*2]-m_fTableGold[i*2+1];
				}
				else GameEnd.fGameGold[i]=-m_fTableGold[i*2]-m_fTableGold[i*2+1];
			}

			//修改用户额度
			for (WORD i=0;i<m_wPlayerCount;i++)
			{
				if (m_bPlayStatus[i]==TRUE)
				{
					GameEnd.fGameGold[i]=GameEnd.fGameGold[i];
				}
				else
				{
					GameEnd.fGameGold[i]=-m_fTableGold[i*2]-m_fTableGold[i*2+1];
				}
			}
			GameEnd.bSendCardCount = m_bSendCardCount;
			GameEnd.wWinerUser = wWinerUser;

			if(m_CalculateSink.InitCalculateContext(&GameEnd))
			{
				m_pITableFrame->WriteGameEnd(GER_NORMAL,(BYTE*)&GameEnd, sizeof(GameEnd), 
					m_CalculateSink.GetCalculateContext(),&m_CalculateSink);
				//发送信息
				m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));
				m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));
				//结束游戏
				m_pITableFrame->ConcludeGame();
				return true;

			}
			else
			{
				//删除定时器
				/*if (m_bTimeStation!=255)
				{
					KillTimer(m_bTimeStation);
					m_bTimeStation=255;
				}*/				
				GT_ASSERT(FALSE);
				//结束游戏
				m_pITableFrame->ConcludeGame();
				return false;
			}


		
		}
	case GER_USER_LEFT:		//用户强退
		{
			//效验参数
			GT_ASSERT(pIServerUserItem!=NULL);
			GT_ASSERT(wChairID<m_wPlayerCount);

			//强退处理
			OnUserGiveUp(wChairID);

			return true;
		}
	}

	return false;
}
Esempio n. 5
0
//游戏消息处理
bool __cdecl CTableFrameSink::OnGameMessage(WORD wSubCmdID, const void * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem)
{
	switch( wSubCmdID )
	{
	case SUB_C_TOUCH_MJ:

		break;
	case SUB_C_OUT_MJ:
		{
			//变量定义
			BYTE *pOutMj = ( BYTE* )pDataBuffer;
		
			//用户效验
			tagServerUserData *pUserData = pIServerUserItem->GetUserData();
			if( pUserData->cbUserStatus != US_PLAY )
			{
				return true;
			}
			
			//消息处理
			return OnUserOutMj( pUserData->wChairID, pOutMj );
		}
	case SUB_C_GANG_MJ:			//杠操作
		{
			//用户效验
			tagServerUserData *pUserData= pIServerUserItem->GetUserData();
			if( pUserData->cbUserStatus!= US_PLAY)
			{
				return true;
			}
			//消息处理
			return OnUserGang( pUserData->wChairID, pDataBuffer );
		}
	case SUB_C_SELECT_GANG:
		{
			//用户效验
			tagServerUserData *pUserData= pIServerUserItem->GetUserData();
			if( pUserData->cbUserStatus!= US_PLAY )
			{
				return true;
			}
			//消息处理
			return OnUserGangSelect( pUserData->wChairID, pDataBuffer);
		}
	case SUB_C_PENG_MJ:		//碰操作
		{
			//用户效验
			tagServerUserData *pUserData = pIServerUserItem->GetUserData();
			if( pUserData->cbUserStatus != US_PLAY )
			{
				MessageBox( 0, "UN_US_PLAY", 0, 0 );
				return true;
			}
			//消息处理
			return OnUserPeng(pUserData->wChairID, pDataBuffer);
		}
	case SUB_C_CHI_MJ:		//吃操作
		{
			//用户效验
			tagServerUserData *pUserData = pIServerUserItem->GetUserData();
			if( pUserData->cbUserStatus!= US_PLAY )
			{
				MessageBox( 0, "UN_US_PLAY", 0, 0 );
				return true;
			}
			//消息处理
			return OnUserChi(pUserData->wChairID, pDataBuffer);
		}
	case SUB_C_HU_MJ:
		{
			//用户效验
			tagServerUserData *pUserData=pIServerUserItem->GetUserData();
			{
				if( pUserData->cbUserStatus != US_PLAY )
				{
					MessageBox( 0, "UN_US_PLAY", 0, 0 );
					return true;
				}
			}
			//消息处理
			return OnUserHu(pUserData->wChairID, pDataBuffer);
		}
	case SUB_C_GIVEUP:			//放弃
		{
			//用户效验
			tagServerUserData *pUserData = pIServerUserItem->GetUserData();
			if( pUserData->cbUserStatus != US_PLAY )
			{
				return true;
			}
			return OnUserGiveUp( pUserData->wChairID, pDataBuffer);
		}
	}
	return true;
}
Esempio n. 6
0
//游戏结束
bool __cdecl CTableFrameSink::OnEventGameEnd(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason)
{
	switch (cbReason)
	{
	case GER_NORMAL:		//常规结束
		{
			//定义变量
			CMD_S_GameEnd GameEnd;
			ZeroMemory(&GameEnd,sizeof(GameEnd));
			GameEnd.cbTotalEnd = 1;

			//扑克数据
			BYTE cbEndCardData[GAME_PLAYER][MAX_CENTERCOUNT];
			ZeroMemory(cbEndCardData,sizeof(cbEndCardData));

			try{
				//获取扑克
				for (WORD i=0;i<m_wPlayerCount;i++)
				{
					//用户过滤
					if (m_cbPlayStatus[i]==FALSE) continue;

					//最大牌型
					BYTE cbEndCardKind = m_GameLogic.FiveFromSeven(m_cbHandCardData[i],MAX_COUNT,m_cbCenterCardData,MAX_CENTERCOUNT,cbEndCardData[i],MAX_CENTERCOUNT);
					ASSERT(cbEndCardKind!=FALSE);			
					CopyMemory(GameEnd.cbLastCenterCardData[i],cbEndCardData[i],sizeof(BYTE)*CountArray(cbEndCardData));
				}
			}catch(...)
			{
				TraceMessage("用户过滤v最大牌型");
				ASSERT(FALSE);
			}

			//总下注备份
			LONG lTotalScore[GAME_PLAYER];
			ZeroMemory(lTotalScore,sizeof(lTotalScore));
			CopyMemory(lTotalScore,m_lTotalScore,sizeof(m_lTotalScore));

			//胜利列表
			UserWinList WinnerList[GAME_PLAYER];
			ZeroMemory(WinnerList,sizeof(WinnerList));

			//临时数据
			BYTE bTempData[GAME_PLAYER][MAX_CENTERCOUNT];
			CopyMemory(bTempData,cbEndCardData,GAME_PLAYER*MAX_CENTERCOUNT);

			WORD wWinCount=0;
			try{
				//用户得分顺序
				for (WORD i=0;i<m_wPlayerCount;i++)
				{
					//查找最大用户
					if(!m_GameLogic.SelectMaxUser(bTempData,WinnerList[i],lTotalScore))
					{
						wWinCount=i;
						break;
					}

					//删除胜利数据
					for (WORD j=0;j<WinnerList[i].bSameCount;j++)
					{
						WORD wRemoveId=WinnerList[i].wWinerList[j];
						ASSERT(bTempData[wRemoveId][0]!=0);
						ZeroMemory(bTempData[wRemoveId],sizeof(BYTE)*MAX_CENTERCOUNT);
					}
				}
			}catch(...)
			{
				TraceMessage("用户得分顺序");
				ASSERT(FALSE);
			}

			//强退用户
			for (WORD i=0;i<m_wPlayerCount;i++)
			{
				if(m_cbPlayStatus[i]==FALSE && lTotalScore[i]>0l)
				{					
					WinnerList[wWinCount].wWinerList[WinnerList[wWinCount].bSameCount++] = i;
				}
			}

			//得分变量
			LONG lUserScore[GAME_PLAYER];
			ZeroMemory(lUserScore,sizeof(lUserScore));
			//CopyMemory(lTotalScore,m_lTotalScore,sizeof(m_lTotalScore));

			try
			{
				//得分情况
				for (int i=0;i<m_wPlayerCount-1;i++)
				{
					//胜利人数
					int iWinCount = (int)WinnerList[i].bSameCount;
					if(0 == iWinCount)break;

					//胜利用户得分情况
					for(int j=0;j<iWinCount;j++)
					{
						if(0 == lTotalScore[WinnerList[i].wWinerList[j]])continue;

						if(j>0 && lTotalScore[WinnerList[i].wWinerList[j]] - 
							lTotalScore[WinnerList[i].wWinerList[j-1]] == 0)continue;

						//失败用户失分情况
						for(int k=i+1;k<m_wPlayerCount;k++)
						{
							//失败人数
							if(0 == WinnerList[k].bSameCount)break;

							for(int l=0;l<WinnerList[k].bSameCount;l++)
							{
								//用户已赔空
								if(0 == lTotalScore[WinnerList[k].wWinerList[l]])continue;

								WORD wLostId=WinnerList[k].wWinerList[l];
								WORD wWinId=WinnerList[i].wWinerList[j];
								LONG lMinScore = 0;

								//上家得分数目
								LONG lLastScore = ((j>0)?lTotalScore[WinnerList[i].wWinerList[j-1]]:0);
								if(j>0)ASSERT(lLastScore>0L);							
								lMinScore = min(lTotalScore[wWinId]-lLastScore,lTotalScore[wLostId]);

								for(int m=j;m<iWinCount;m++)
								{
									//得分数目
									lUserScore[WinnerList[i].wWinerList[m]]+=lMinScore/(iWinCount-j);
								}

								//赔偿数目
								lUserScore[wLostId]-=lMinScore;
								lTotalScore[wLostId]-=lMinScore;
							}
						}
					}
				}
			}catch(...)
			{
				TraceMessage("得分数目/赔偿数目");
				ASSERT(FALSE);
			}

			//扣税变量
			WORD wRevenue=m_pGameServiceOption->wRevenue;

			//统计用户分数(税收)
			for(WORD i=0;i<m_wPlayerCount;i++)
			{
				GameEnd.lGameScore[i]=lUserScore[i];
				ASSERT(lUserScore[i]+m_lTotalScore[i]>=0L);
				if(GameEnd.lGameScore[i]>0L)
				{
					GameEnd.lGameTax[i]=GameEnd.lGameScore[i]*wRevenue/100L;
					GameEnd.lGameScore[i]-=GameEnd.lGameTax[i];
				}
			}

			////统计用户分数
			//for(WORD i=0;i<m_wPlayerCount;i++)
			//{
			//	GameEnd.lGameScore[i]=lUserScore[i];
			//	GameEnd.lGameScore[i]-=GameEnd.lGameTax[i];
			//}

			CopyMemory(GameEnd.cbCardData,m_cbHandCardData,sizeof(m_cbHandCardData));

			//发送信息
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));

			//积分变量
			for (WORD i=0;i<GAME_PLAYER;i++)
			{
				if (m_cbPlayStatus[i]==TRUE)
				{
					enScoreKind nScoreKind;
					if(GameEnd.lGameScore[i]==0L)nScoreKind=enScoreKind_Draw;
					else nScoreKind=(GameEnd.lGameScore[i]>0L)?enScoreKind_Win:enScoreKind_Lost;

					//写入积分
					m_pITableFrame->WriteUserScore(i,GameEnd.lGameScore[i],GameEnd.lGameTax[i],nScoreKind);
				}
			}

			//结束游戏
			m_pITableFrame->ConcludeGame();

			return true;
		}
	case GER_NO_PLAYER:		//没有玩家
		{
			//定义变量
			CMD_S_GameEnd GameEnd;
			ZeroMemory(&GameEnd,sizeof(GameEnd));
			GameEnd.cbTotalEnd = 0;

			//效验结果
			WORD wUserCount=0;
			for (WORD i=0;i<GAME_PLAYER;i++)
			{
				if(m_cbPlayStatus[i]!=FALSE)wUserCount++;
			}
			if(wUserCount!=1)
			{
				ASSERT(FALSE);
				TraceMessage("没有玩家//效验结果出错");
			}

			//统计分数
			LONG lScore = 0,lRevenue = 0;
			enScoreKind nScoreKind ;
			WORD wWinner = INVALID_CHAIR;
			for (WORD i = 0;i<GAME_PLAYER;i++)
			{
				if(m_cbPlayStatus[i]==FALSE)
				{
					if(m_lTotalScore[i] > 0L)GameEnd.lGameScore[i]-=m_lTotalScore[i];
					continue;
				}

				wWinner = i;

				////处理税收
				//for (WORD t=0;t<m_wPlayerCount;t++)
				//{
				//	//赢家不用收税
				//	if(wWinner==t)continue;
				//	if(m_lTotalScore[t]>0L)
				//	{
				//		GameEnd.lGameScore[t]=-m_lTotalScore[t];
				//		m_lTotalScore[t]-=m_bUserTax[t];
				//		GameEnd.lGameTax[t] = m_bUserTax[t];
				//	}
				//}

				//总下注数目
				LONG lAllScore = 0L;
				for (WORD j = 0;j<GAME_PLAYER;j++)
				{
					if(wWinner==j)continue;
					lAllScore += m_lTotalScore[j];
				}
				ASSERT(lAllScore>=0);
				GameEnd.lGameScore[i] = lAllScore;

				//统计税收
				if(GameEnd.lGameScore[i]>0L)
				{
					//扣税变量
					WORD wRevenue=m_pGameServiceOption->wRevenue;
					GameEnd.lGameTax[i]=GameEnd.lGameScore[i]*wRevenue/100L;
					GameEnd.lGameScore[i]-=GameEnd.lGameTax[i];
				}

				//构造扑克
				CopyMemory(GameEnd.cbCardData,m_cbHandCardData,sizeof(m_cbHandCardData));

				lScore=GameEnd.lGameScore[i];
				lRevenue= GameEnd.lGameTax[i];
				nScoreKind=(GameEnd.lGameScore[i]>0L)?enScoreKind_Win:enScoreKind_Lost;
			}

			//发送消息
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_END,&GameEnd,sizeof(GameEnd));

			//写入积分
			if(wWinner<GAME_PLAYER)
			{
				m_pITableFrame->WriteUserScore(wWinner,lScore,lRevenue,nScoreKind);
			}
			else TraceMessage("//写入积分ffff");

			//结束游戏
			m_pITableFrame->ConcludeGame();

			return true;
		}
	case GER_USER_LEFT:
		{
			//效验参数
			ASSERT(pIServerUserItem!=NULL);
			ASSERT(wChairID<m_wPlayerCount);

			//强退处理
			OnUserGiveUp(wChairID);
			return true;
		}
	}
	return false;
}