Example #1
0
void CTableFrameSink::CheckXijin()
{
	for (int i=0; i<GAME_PLAYER; i++)
	{
		IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(i);
		if (pIServerUserItem == NULL || pIServerUserItem->IsAndroidUser()) continue;
		if(m_GameLogic.GetBestCardType(m_cbHandCardData[i], MAX_COUNT) >= 10)
		{
			m_oLog.Log("玩家[%s]获得喜金座位[%d]身上携带筹码[%d]获得奖励元宝数[%d]",pIServerUserItem->GetAccounts(), pIServerUserItem->GetChairID(), pIServerUserItem->GetUserScore()->lBodyChip, m_lLikeIngot);
			m_pITableFrame->SendTableData(i,SUB_S_XIJIN,NULL,0);
			m_pITableFrame->WriteUserTask(i,1,1,m_lLikeIngot);
		}
	}
}
Example #2
0
//游戏开始
void CTableFrameSink::GameStart()
{
	m_oLog.Log("//////-------游戏开始--------////////");
	for(int i=0; i<GAME_PLAYER; i++)
	{
		IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(i);
		if (pIServerUserItem == NULL) continue;
		if (!pIServerUserItem->IsAndroidUser())
		{
			m_oLog.Log("玩家[%s] 带入筹码[%I64d]" , pIServerUserItem->GetAccounts() , pIServerUserItem->GetUserScore()->lBodyChip);
		}
	}
	CountDownTime(INVALID_CHAIR);
 	CMD_S_GameStart GameStart;
	ZeroMemory(&GameStart,sizeof(GameStart));
	//强发聚宝盆
	//m_oLog.Log("强发状态:%s",m_bMeetConditions?"已经进行过强发,还未清除状态不能强发!":"未进行过强发,可以强发!");
	bool bSuccess = false;//= ForceDispathCard();
	//m_oLog.Log("1");
	while (!bSuccess)
	{
		//m_oLog.Log("2");
		bSuccess = DispathCard();
	}
	
	//随机喜金牌
	ZeroMemory(m_cbRewardCardData,sizeof(m_cbRewardCardData));
	for (int i=0; i<GAME_PLAYER; i++)
	{
		if (m_cbPlayStatus[i] == FALSE) continue;
		m_GameLogic.RandCardList(m_cbRewardCardData[i],MAX_COUNT);
	}
	
	//测试配牌
 	if (m_bCheat)
 	{
 		for (int i=0; i<GAME_PLAYER; i++)
 		{
 			if (m_cbCheatCardData[i][0] == 0)continue;
 			CopyMemory(m_cbHandCardData[i], m_cbCheatCardData[i],MAX_COUNT);
 	
 		}
 		for (int i=0; i<GAME_PLAYER; i++)
 		{
 			if (m_cbCheatRewardCard[i][0] ==0)continue;
 			{
 				CopyMemory(m_cbRewardCardData[i], m_cbCheatRewardCard[i], MAX_COUNT);
 			}
 		}
 	}

	m_oLog.Log("原始手牌:");

	for(int i=0; i<GAME_PLAYER; i++)
	{
		//获取用户
		IServerUserItem *pIServerUser=m_pITableFrame->GetServerUserItem(i);
		if(pIServerUser==NULL) continue;
		m_oLog.Log("%s手牌:[%s%s][%s%s][%s%s][%s%s][%s%s]---牌型为[%s]",pIServerUser->GetUserData()->szAccounts,cn(m_cbHandCardData[i][0]),vn(m_cbHandCardData[i][0]),
			cn(m_cbHandCardData[i][1]),vn(m_cbHandCardData[i][1]),cn(m_cbHandCardData[i][2]),vn(m_cbHandCardData[i][2]),cn(m_cbHandCardData[i][3]),vn(m_cbHandCardData[i][3]),
			cn(m_cbHandCardData[i][4]),vn(m_cbHandCardData[i][4]),CardTypeName(m_GameLogic.GetBestCardType(m_cbHandCardData[i],MAX_COUNT)));
	}
	
	m_oContral.ControlDispath(m_cbHandCardData, m_cbPlayStatus);

	m_oLog.Log("控制后手牌:");

	for(int i=0; i<GAME_PLAYER; i++)
	{
		//获取用户
		IServerUserItem *pIServerUser=m_pITableFrame->GetServerUserItem(i);
		if(pIServerUser==NULL) continue;
		m_oLog.Log("%s手牌:[%s%s][%s%s][%s%s][%s%s][%s%s]---牌型为[%s]",pIServerUser->GetUserData()->szAccounts,cn(m_cbHandCardData[i][0]),vn(m_cbHandCardData[i][0]),
			cn(m_cbHandCardData[i][1]),vn(m_cbHandCardData[i][1]),cn(m_cbHandCardData[i][2]),vn(m_cbHandCardData[i][2]),cn(m_cbHandCardData[i][3]),vn(m_cbHandCardData[i][3]),
			cn(m_cbHandCardData[i][4]),vn(m_cbHandCardData[i][4]),CardTypeName(m_GameLogic.GetBestCardType(m_cbHandCardData[i],MAX_COUNT)));
	}
// 	
	//发送扑克
	for (WORD i=0;i<m_wPlayerCount;i++)
	{
		if(m_cbPlayStatus[i]==FALSE)continue;
		
		CopyMemory(GameStart.cbPlayStatus, m_cbPlayStatus,sizeof(m_cbPlayStatus));
		//派发扑克
		CopyMemory(GameStart.cbCardData[i],m_cbHandCardData[i],MAX_COUNT);
		std::random_shuffle(GameStart.cbCardData[i], GameStart.cbCardData[i]+MAX_COUNT);
		//派发喜金扑克
		CopyMemory(GameStart.cbRewardCardData[i], m_cbRewardCardData[i],MAX_COUNT);
		//发送数据
		m_pITableFrame->SendTableData(i,SUB_S_GAME_START,&GameStart,sizeof(GameStart));
		ZeroMemory(GameStart.cbCardData, sizeof(GameStart.cbCardData));
	}


	m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_START,&GameStart,sizeof(GameStart));


}
Example #3
0
void CTableFrameSink::WriteScore()
{
	m_dwOverTime = GetTickCount();
	DWORD temp_dwPlayTime = (m_dwOverTime - m_dwJettonTime)/1000;
	m_pITableFrame->KillGameTimer(IDI_WRITESCORE);
	//SendTaskIngot();

	for (int i=0; i<GAME_PLAYER; i++)
	{
		if(m_cbPlayStatus[i] == FALSE) continue;
		m_lTotalWinScore[i] = m_lUserWinScore[i] - m_lDeskPay;
	}
	
	//聚宝盆
	//SendTaskIngot();
	LONGLONG lTotalRevenue = 0;
	for (WORD i=0;i<GAME_PLAYER;i++)
	{
		if (m_lTotalWinScore[i] != 0)
		{
			enScoreKind nScoreKind = enScoreKind_Draw;
			nScoreKind = (m_lUserWinScore[i] > 0 )?enScoreKind_Win:enScoreKind_Lost;
			IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(i);
			if(pIServerUserItem)
			{
				m_oLog.Log("玩家[%s] 写入积分[%I64d]" , pIServerUserItem->GetUserData()->szAccounts , m_lTotalWinScore[i]);
				if(!pIServerUserItem->IsAndroidUser())
				{
					lTotalRevenue += m_lUserRevenue[i];

					LONGLONG temp_SysEat=0;
					temp_SysEat += m_lDeskPay;
					if (m_lUserWinScore[i] < 0)
					{
						temp_SysEat += ((-m_lUserWinScore[i])*m_cbEateRate /100);
					}

					//写入积分
					m_pITableFrame->WriteUserScore(i,m_lTotalWinScore[i],m_lUserRevenue[i],nScoreKind,temp_dwPlayTime,temp_SysEat,m_lMinbet);

				}
				else
				{
					//写入积分
					m_pITableFrame->WriteUserScore(i,m_lTotalWinScore[i],m_lUserRevenue[i],nScoreKind);
				}


			}
		}						 
	}

	for(int i=0; i<GAME_PLAYER; i++)
	{
		IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(i);
		if (pIServerUserItem == NULL) continue;
		if (!pIServerUserItem->IsAndroidUser())
		{
			m_oLog.Log("玩家[%s] 身上剩余[%I64d]" , pIServerUserItem->GetAccounts() , pIServerUserItem->GetUserScore()->lBodyChip);
		}
	}
	m_oLog.Log("将要写入放分池的系统输赢分[%I64d]" , m_lSysWinScore);
	//系统输赢放入放分池
	m_oContral.ChangeBuffer(m_lSysWinScore);
	//放入聚宝盆
// 	if (m_lSysWinScore > 0)
// 	{
// 		AddBuffer(0,m_lSysWinScore*m_cbBufferRate/100);
// 	}

	
	if(lTotalRevenue > 0)
	{
		// 		AddBuffer(BIG_BUFFER , lTotalRevenue);
		// 		AddBuffer(SMALL_BUFFER , lTotalRevenue);
	}

	//设置文件名
	TCHAR szPath[MAX_PATH]=TEXT("");
	TCHAR szConfigFileName[MAX_PATH]=TEXT("");
	GetCurrentDirectory(sizeof(szPath),szPath);
	_snprintf_s(szConfigFileName,sizeof(szConfigFileName),TEXT("%s\\%d_RatiOx.ini"),szPath,m_pGameServiceOption->wServerID);
	m_oLog.Log("=============放分池数据[%I64d]写入配置文件[%s]=================" ,m_oContral.GetPoolScore(),szConfigFileName);
	CString strPoolScore;
	strPoolScore.Format("%I64d", m_oContral.GetPoolScore());
	WritePrivateProfileString(TEXT("SCOREPOOL"), TEXT("ScorePool"),strPoolScore,szConfigFileName);
	ConcludeGame();
	m_oLog.Log("////------------游戏结束----------------------////");
	//结束游戏
}
Example #4
0
//定时器事件
bool __cdecl CTableFrameSink::OnTimerMessage(WORD wTimerID, WPARAM wBindParam)
{
	switch (wTimerID)
	{
	case IDI_FREE:		//空闲时间结束
		{
			//开始游戏
			m_pITableFrameControl->StartGame();

			//启动下注计时器
			m_pITableFrame->SetGameTimer(IDI_PLACE_JETTON,TIME_PLACE_JETTON*1000,1,0L);

			//设置游状态为下注阶段
			m_pITableFrame->SetGameStatus(GS_PLACE_JETTON);

			return true;
		}
	case IDI_PLACE_JETTON:		//下注时间结束
		{
			//状态判断(防止强退重复设置)
			if (m_pITableFrame->GetGameStatus()!=GS_GAME_END)
			{
				//设置状态
				m_pITableFrame->SetGameStatus(GS_GAME_END);			

				//结束游戏
				OnEventGameEnd(INVALID_CHAIR,NULL,GER_NORMAL);

				//设置时间
				m_pITableFrame->SetGameTimer(IDI_GAME_END,TIME_GAME_END*1000,1,0L);			
			}

			return true;
		}
	case IDI_GAME_END:			//结束游戏
		{
			//写入积分
			for ( WORD wUserChairID = 0; wUserChairID < GAME_PLAYER; ++wUserChairID )
			{
				IServerUserItem *pIServerUserItem = m_pITableFrame->GetServerUserItem(wUserChairID);
				if ( pIServerUserItem == NULL ) 
					continue;

				//胜利类型
				enScoreKind ScoreKind=(m_iUserWinScore[wUserChairID]>0L)?enScoreKind_Win:enScoreKind_Lost;

				//写入积分
				if (m_iUserWinScore[wUserChairID]!=0L) 
					m_pITableFrame->WriteUserScore(wUserChairID,m_iUserWinScore[wUserChairID], m_iUserRevenue[wUserChairID], ScoreKind);

				//坐庄条件判断。一轮游戏结束,玩家有输有赢。所以需要在申请上庄队列里把输了钱不在满足做庄的玩家清除掉
				__int64 iUserScore=pIServerUserItem->GetUserScore()->lScore;
				if (wUserChairID!=m_wCurrentBanker && iUserScore<m_iApplyBankerCondition)
				{
					for (WORD i=0; i<m_ApplyUserArray.GetCount(); ++i)
					{
						if (wUserChairID!=m_ApplyUserArray[i]) continue;

						//从庄家队列删除不符合上庄的玩家
						m_ApplyUserArray.RemoveAt(i);

						//发送消息
						CMD_S_CancelBanker CancelBanker;
						ZeroMemory(&CancelBanker,sizeof(CancelBanker));

						//设置变量
						lstrcpyn(CancelBanker.szCancelUser,pIServerUserItem->GetAccounts(),CountArray(CancelBanker.szCancelUser));

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

						//提示消息
						TCHAR szTipMsg[128];
						_sntprintf(szTipMsg,CountArray(szTipMsg),TEXT("由于你的金币数少于坐庄必须金币数(%I64d),你自动下庄!"),m_iApplyBankerCondition);
						SendGameMessage(wUserChairID,szTipMsg);

						break;
					}
				}
			}

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

			//切换庄家
			ChangeBanker(false);

			//设置时间
			m_dwJettonTime=(DWORD)time(NULL);
			m_pITableFrame->SetGameTimer(IDI_FREE,TIME_FREE*1000,1,0L);

			//发送消息
			CMD_S_GameFree GameFree;
			ZeroMemory(&GameFree,sizeof(GameFree));
			GameFree.cbTimeLeave=TIME_FREE;
			GameFree.cbGameRecord = m_iGoalAnimal;
			GameFree.iGameTimes = m_iGameTimes;
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_FREE,&GameFree,sizeof(GameFree));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_GAME_FREE,&GameFree,sizeof(GameFree));

			return true;
		}
	}

	return false;
}
Example #5
0
//用户进贡
bool CTableFrameSink::OnPayTribute(const void * pDataBuffer)
{
	//获取数据
	CMD_C_PayTribute *pPayTribute=(CMD_C_PayTribute *)pDataBuffer;
	WORD	wChairID		=	pPayTribute->wUser;
	BYTE    bPayCard		=	pPayTribute->bCard;

	m_bPayNumber++;
	m_bPayCard[wChairID]=bPayCard;
    
	//未全部进贡
	if((m_bPayNumber<=m_wPlayerCount&&m_bGameStatus==SHUANG_XIA)||
		(m_bPayNumber<=2&&m_bGameStatus==DAN_XIA)||(m_bPayNumber<=2&&m_bGameStatus==OTHER))
	{
		//构造数据
		CMD_S_PayTribute PayTribute;
		PayTribute.bPayStatus	=	enNone;
		PayTribute.bCard		=	bPayCard;
		PayTribute.wFromUser	=	wChairID;
		PayTribute.wCurrentUser	=	INVALID_CHAIR;
		PayTribute.wToUser		=	INVALID_CHAIR;
		m_GameLogic.RemoveCard(&bPayCard,1,m_bHandCardData[wChairID],m_bCardCount[wChairID]);
		m_bCardCount[wChairID]--;
		
		CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(m_bPayTribute));
		//发送数据
		m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
		m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
	}
	if(pPayTribute->bPayType==enJin_Gong&&((m_bPayNumber>=2&&m_bGameStatus==SHUANG_XIA)
		||(m_bPayNumber>=1&&m_bGameStatus==DAN_XIA)
		||(m_bPayNumber>=1&&m_bGameStatus==OTHER)))
	{   
		//构造数据
		CMD_S_PayTribute PayTribute;
		PayTribute.bPayStatus	=	enHui_Gong;
		PayTribute.wCurrentUser	=	INVALID_CHAIR;
		CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(m_bPayTribute));
		
		//单下处理
		if(m_bGameStatus==DAN_XIA)
		{ 
			//当前用户
			m_wCurrentUser			=   (m_bRanKing[1]+2)%m_wPlayerCount;
	
			//进贡扑克
			PayTribute.bCard		=	m_bPayCard[(m_bRanKing[1]+2)%m_wPlayerCount];
			PayTribute.wFromUser	=	(m_bRanKing[1]+2)%m_wPlayerCount;
			PayTribute.wToUser		=   m_bRanKing[0];
			m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
			m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser],m_bCardCount[PayTribute.wToUser]);
			m_bCardCount[PayTribute.wToUser]++;
		}
		//平扣处理
		else if(m_bGameStatus==OTHER)
		{
			//当前用户
			m_wCurrentUser			=   (m_bRanKing[0]+2)%m_wPlayerCount;
	
			//进贡扑克
			PayTribute.bCard		=	m_bPayCard[(m_bRanKing[0]+2)%m_wPlayerCount];
			PayTribute.wFromUser	=	(m_bRanKing[0]+2)%m_wPlayerCount;
			PayTribute.wToUser		=   m_bRanKing[0];
			m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
			m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser],m_bCardCount[PayTribute.wToUser]);
			m_bCardCount[PayTribute.wToUser]++;
		}
		//双下处理
		else if(m_bGameStatus==SHUANG_XIA)
		{   
			BYTE bFirst=m_bRanKing[0],bSecond=m_bRanKing[1];
			BYTE bThird=(bFirst+1)%m_wPlayerCount,bFouth=(bSecond+1)%m_wPlayerCount;

			if(m_GameLogic.GetCardLogicValue(m_bPayCard[bThird])>m_GameLogic.GetCardLogicValue(m_bPayCard[bFouth]))
			{
				//当前用户
				m_wCurrentUser			=   bThird;

				PayTribute.bCard		=	m_bPayCard[bThird];
				PayTribute.wFromUser	=	bThird;
				PayTribute.wToUser		=	bFirst;
				m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
				m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser], m_bCardCount[PayTribute.wToUser]);
			    m_bCardCount[PayTribute.wToUser]++;
				
				
				PayTribute.bCard		=	m_bPayCard[bFouth];
				PayTribute.wFromUser	=	bFouth;
				PayTribute.wToUser		=	bSecond;
				m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
				m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser], m_bCardCount[PayTribute.wToUser]);
			    m_bCardCount[PayTribute.wToUser]++;
				
			}else
			{
				
				//当前用户
				m_wCurrentUser			=   bFouth;

				PayTribute.bCard		=	m_bPayCard[bFouth];
				PayTribute.wFromUser	=	bFouth;
				PayTribute.wToUser		=	bFirst;
				m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
				m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser], m_bCardCount[PayTribute.wToUser]);
			    m_bCardCount[PayTribute.wToUser]++;
				
				
				PayTribute.bCard		=	m_bPayCard[bThird];
				PayTribute.wFromUser	=	bThird;
				PayTribute.wToUser		=	bSecond;
				m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
				m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser], m_bCardCount[PayTribute.wToUser]);
			    m_bCardCount[PayTribute.wToUser]++;

			}
		}
	}
	if(pPayTribute->bPayType==enHui_Gong)
	{
		//构造数据
		CMD_S_PayTribute PayTribute;
		PayTribute.bPayStatus	=	enGet_Hui_Gong;
		PayTribute.wCurrentUser	=	INVALID_CHAIR;
		CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(m_bPayTribute));

		PayTribute.bCard		=	pPayTribute->bCard;
		PayTribute.wFromUser	=	pPayTribute->wUser;
		PayTribute.wToUser		=	pPayTribute->wToUser;
		m_pITableFrame->SendTableData(PayTribute.wToUser,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
		m_GameLogic.Add(PayTribute.bCard, m_bHandCardData[PayTribute.wToUser], m_bCardCount[PayTribute.wToUser]);
		m_bCardCount[PayTribute.wToUser]++;

		//发送系统消息
		CMD_S_MESSAGE message;
		IServerUserItem *pFrom	=	m_pITableFrame->GetServerUserItem(PayTribute.wFromUser);
		IServerUserItem *pTo	=	m_pITableFrame->GetServerUserItem(PayTribute.wToUser);
		_sntprintf(message.szBuffer,sizeof(message.szBuffer),"用户 %-s 进贡给 %-s",
			pTo->GetAccounts(),pFrom->GetAccounts());
		m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_SYSTEM_MESSAGE,&message,sizeof(message));
		m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_SYSTEM_MESSAGE,&message,sizeof(message));

	}
	if((m_bPayNumber==4&&m_bGameStatus==SHUANG_XIA)||
		(m_bPayNumber==2&&m_bGameStatus==DAN_XIA)||m_bPayNumber==2&&m_bGameStatus==OTHER)
	{	
		//构造数据
		CMD_S_PayTribute PayTribute;
		PayTribute.bPayStatus	=	enNone;
		PayTribute.wCurrentUser	=	m_wCurrentUser;
		CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(m_bPayTribute));

		//发送数据
		m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
		m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
	}

  return true;
}
Example #6
0
//游戏开始
bool __cdecl CTableFrameSink::OnEventGameStart()
{
	//设置状态
	m_pITableFrame->SetGameStatus(GS_PLAYING);

	CMD_S_GameStart GameStart;
	ZeroMemory(&GameStart,sizeof(GameStart));
	m_GameLogic.m_bSeries	=   m_bSeries.bCurrentSeries|0x20;
	m_bEnd					=	false;
	
	//混论扑克
	BYTE bRandCard[108];
	m_GameLogic.RandCardList(bRandCard,CountArray(bRandCard));

	//分发扑克
	for(WORD i=0;i<m_wPlayerCount;i++)
	{
		m_bCardCount[i]=27;
		CopyMemory(&m_bHandCardData[i],&bRandCard[i*m_bCardCount[i]],sizeof(BYTE)*m_bCardCount[i]);
		m_GameLogic.SortCardList(m_bHandCardData[i] ,m_bCardCount[i]);
	}

	//设置用户
	if(m_wBankerUser==INVALID_CHAIR)
	{
		GameStart.bLiangPai					=	true;
		m_wCurrentUser						=   rand() % m_wPlayerCount;
		BYTE    bIndex						=   rand() % 27;
		GameStart.bLiangCard				=	m_bHandCardData[m_wCurrentUser][bIndex];
		m_wBankerUser						=   m_wCurrentUser;
	}
	else
		m_wCurrentUser						=	m_wBankerUser;

    CMD_S_PayTribute   PayTribute;
	//判断进贡
	if(m_bGameStatus	==	SHUANG_XIA)
	{
		m_wCurrentUser		=	INVALID_CHAIR;
		BYTE  bFirst		=	m_bRanKing[0];
		BYTE  bSecond		=   (bFirst+1)%m_wPlayerCount;
		BYTE  bThree		=	(bSecond+2)%m_wPlayerCount;

		//拥有双大王,抗贡
		if(m_bHandCardData[bFirst][0]!=0x42&&m_bHandCardData[(bFirst+2)%m_wPlayerCount][0]!=0x42)
		{
			CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(BYTE)*4);
			if(m_bHandCardData[bSecond][0]!=0x42)
				PayTribute.bPayType[bSecond]=0;
			if(m_bHandCardData[bThree][0]!=0x42)
				PayTribute.bPayType[bThree]=0;

			ZeroMemory(m_bPayTribute,sizeof(m_bPayTribute));
			m_wCurrentUser			  =		bFirst;

		}
	}else if(m_bGameStatus == DAN_XIA)
	{
		m_wCurrentUser		=	INVALID_CHAIR;
		BYTE bSecond		=	(m_bRanKing[1]+2)%m_wPlayerCount;

		//拥有双大王,抗贡
		if(m_bHandCardData[bSecond][0]==0x42&&m_bHandCardData[bSecond][1]==0x42)
		{
			CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(BYTE)*4);
			ZeroMemory(m_bPayTribute,sizeof(m_bPayTribute));
			m_wCurrentUser			=      m_bRanKing[0];
		}
	}else if(m_bGameStatus == OTHER)
	{	
		m_wCurrentUser		=	INVALID_CHAIR;
		BYTE bSecond		=	(m_bRanKing[0]+2)%m_wPlayerCount;

		//拥有双大王,抗贡
		if(m_bHandCardData[bSecond][0]==0x42&&m_bHandCardData[bSecond][1]==0x42)
		{
			CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(BYTE)*4);
			ZeroMemory(m_bPayTribute,sizeof(m_bPayTribute));
			m_wCurrentUser			=      m_bRanKing[0];
		}
	}
	
	//发送扑克
	//消息创建
	GameStart.wBankerUser				=	m_wBankerUser;
	GameStart.wCurrentUser				=	m_wCurrentUser;
	GameStart.series					=	m_bSeries;
	CopyMemory(GameStart.m_iGameResult,m_iGameResult,sizeof(m_iGameResult));
	GameStart.RoomType=enRoomType_Normal;
	
	GameStart.wServerType	= m_pGameServiceOption->wServerType;

	for (WORD i=0;i<m_wPlayerCount;i++)
	{  
		CopyMemory(GameStart.cbCardData,m_bHandCardData[i],sizeof(GameStart.cbCardData));
		m_pITableFrame->SendTableData(i,SUB_S_GAME_START,&GameStart,sizeof(GameStart));
		m_pITableFrame->SendLookonData(i,SUB_S_GAME_START,&GameStart,sizeof(GameStart));
	}
	//处理进贡
    if(m_wCurrentUser==INVALID_CHAIR)
	{
		CopyMemory(PayTribute.bPayType,m_bPayTribute,sizeof(BYTE)*4);
		PayTribute.wCurrentUser	=	INVALID_CHAIR;
		PayTribute.bPayStatus	=	enJin_Gong;
		PayTribute.wCurrentUser	=	INVALID_CHAIR;
		m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
		CMD_S_MESSAGE message;
		IServerUserItem * pIServerUserItem;
		for(WORD i=0;i<m_wPlayerCount;i++)
		{
			if(PayTribute.bPayType[i]==2)
			{
				pIServerUserItem=m_pITableFrame->GetServerUserItem(i);
				_sntprintf(message.szBuffer,sizeof(message.szBuffer),"等待用户 %-s 进贡",
					pIServerUserItem->GetAccounts());
				m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_SYSTEM_MESSAGE,&message,sizeof(message));
				m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_SYSTEM_MESSAGE,&message,sizeof(message));
			}	
		}
	}
	//处理抗贡
	else if(m_bGameStatus!=0)
	{
			PayTribute.bPayStatus=enKang_Gong;
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
			m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_PAY_TRIBUTE,&PayTribute,sizeof(PayTribute));
	}
			
	
	return true;
}