Beispiel #1
0
//旁观动作
bool __cdecl CTableFrame::PerformLookonAction(WORD wChairID, IServerUserItem * pIServerUserItem)
{
	//效验参数
	ASSERT(pIServerUserItem!=NULL);
	ASSERT(wChairID<m_wChairCount);
	ASSERT(pIServerUserItem->GetTableID()==INVALID_TABLE);
	ASSERT(pIServerUserItem->GetChairID()==INVALID_CHAIR);

	//变量定义
	DWORD dwMasterRight=pIServerUserItem->GetUserData()->dwUserRight;

	//权限判断
	if (CUserRight::CanLookon(dwMasterRight)==false)
	{
		//发送消息
		LPCTSTR pszMessage=TEXT("抱歉,你没有进行旁观游戏的权限,若需要帮助,请联系游戏客服咨询!");
		SendSitFailedPacket(pIServerUserItem,pszMessage);

		return false;
	}

	//关闭查询
	if ((dwMasterRight==0L)&&(m_pIGameServiceFrame->IsShallClose()==true))
	{
		LPCTSTR pszDescribe=TEXT("由于此游戏房间即将暂停服务,玩家不允许再进入游戏桌!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//禁止查询
	if ((dwMasterRight==0L)&&(m_pIGameServiceFrame->IsAllowEnterGame()==false))
	{
		LPCTSTR pszDescribe=TEXT("抱歉,此游戏桌现在不允许玩家进入!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//位置判断
	if (m_pIUserItem[wChairID]==NULL)
	{
		LPCTSTR pszDescribe=TEXT("所请求旁观的位置已经没有玩家了,不能旁观!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//密码效验
	if (m_bLocked==true)
	{
		const tagUserRule * pUserRule=pIServerUserItem->GetUserRule();
		if ((pUserRule->bPassword==false)||(lstrcmp(m_szPassword,pUserRule->szPassword)!=0))
		{
			LPCTSTR pszDescribe=TEXT("游戏桌携带密码错误,不能旁观游戏!");
			SendSitFailedPacket(pIServerUserItem,pszDescribe);
			return false;
		}
	}

	//状态判断
	if ((m_bStarted==false)&&(dwMasterRight==0L))
	{
		LPCTSTR pszDescribe=TEXT("游戏还没有开始,暂时不能旁观!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//旁观处理
	if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqSitDown(wChairID,pIServerUserItem,true);

	//设置玩家
	m_LookonUserItemPtr.Add(pIServerUserItem);
	pIServerUserItem->SetUserStatus(US_LOOKON,m_wTableID,wChairID);
	m_pIGameServiceFrame->SendUserStatus(pIServerUserItem);

	//旁观处理
	if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserSitDown(wChairID,pIServerUserItem,true);

	return true;
}
Beispiel #2
0
//坐下动作
bool __cdecl CTableFrame::PerformSitDownAction(WORD wChairID, IServerUserItem * pIServerUserItem)
{
	CString strFile,strTemp;
	CTime tmCur = CTime::GetCurrentTime();
	CString strTime = tmCur.Format("%m%d");
	strFile.Format("log\\%s游戏服务.log",strTime);

	strTemp.Format("into PerformSitDownAction(wChairID=%d");
	WriteLog(strFile, strTemp);
	//效验参数
	ASSERT(pIServerUserItem!=NULL);
	ASSERT(wChairID<m_wChairCount);
	ASSERT(pIServerUserItem->GetTableID()==INVALID_TABLE);
	ASSERT(pIServerUserItem->GetChairID()==INVALID_CHAIR);

	//变量定义
	const tagUserScore * pUserScore=pIServerUserItem->GetUserScore();;
	const tagUserRule * pUserRule=pIServerUserItem->GetUserRule(),* pTableUserRule=NULL;
	tagServerUserData * pUserData=pIServerUserItem->GetUserData(),* pTableUserData=NULL;

	//关闭查询
	if ((pUserData->dwMasterRight==0L)&&(m_pIGameServiceFrame->IsShallClose()==true))
	{
		LPCTSTR pszDescribe=TEXT("由于此游戏房间即将暂停服务,玩家不允许再进入游戏桌!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//禁止查询
	if ((pUserData->dwMasterRight==0L)&&(m_pIGameServiceFrame->IsAllowEnterGame()==false))
	{
		LPCTSTR pszDescribe=TEXT("抱歉,此游戏桌现在不允许玩家进入!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//位置判断
	if (m_pIUserItem[wChairID]!=NULL)
	{
		TCHAR szDescribe[128]=TEXT("");
		pTableUserData=m_pIUserItem[wChairID]->GetUserData();
		_snprintf(szDescribe,sizeof(szDescribe),TEXT("椅子已经被 [ %s ] 捷足先登了,下次动作要快点了!"),pTableUserData->szAccounts);
		SendSitFailedPacket(pIServerUserItem,szDescribe);
		return false;
	}//End if

	//游戏状态
	if (m_bStarted==true)
	{
		LPCTSTR pszDescribe=TEXT("游戏已经开始了,暂时不能进入游戏桌!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}//End if

	//比赛判断
	if (m_pGameServiceOption->wServerType&GAME_GENRE_MATCH)
	{
		strTemp.Format("GAME_GENRE_MATCH 2");
		WriteLog(strFile, strTemp);
		//比赛权限
		
		if (CUserRight::IsMatchUser(pUserData->dwUserRight)==false)
		{
			TCHAR szDescribe[128]=TEXT("");
			lstrcpyn(szDescribe,TEXT("这是游戏比赛房间,你不是比赛选手,不能坐到此位置上! "),CountArray(szDescribe));
			SendSitFailedPacket(pIServerUserItem,szDescribe);
			return false;
		}//End if

		strTemp.Format("最低分%d,用户分数%d", m_pGameServiceOption->lLessScore, pUserData->UserScoreInfo.lScore);
		WriteLog(strFile, strTemp);

		//积分限制
		if (m_pGameServiceOption->lLessScore!=0L)
		{
			if (pUserData->UserScoreInfo.lScore<m_pGameServiceOption->lLessScore)
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("加入游戏至少需要 %ld 的游戏积分,你的积分不够,不能加入!"),m_pGameServiceOption->lLessScore);
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}
		}//End if

		if (m_pGameServiceOption->lHighScore!=0L)
		{
			if (pUserData->UserScoreInfo.lScore>m_pGameServiceOption->lHighScore)
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的游戏积分高于 %ld,不能加入游戏!"),m_pGameServiceOption->lHighScore);
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}
		}//End if

		//地址效验
		DWORD dwUserIP=pIServerUserItem->GetClientIP();
		for (WORD i=0;i<m_wChairCount;i++)
		{
			if ((m_pIUserItem[i]!=NULL)&&(m_pIUserItem[i]->GetClientIP()==dwUserIP))
			{
				if (pUserRule->bCheckSameIP)
				{
					LPCTSTR pszDescribe=TEXT("你设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在与你 IP 地址相同的玩家,不能加入游戏!");
					SendSitFailedPacket(pIServerUserItem,pszDescribe);
					return false;
				}
				else
				{
					if (CanNoSameIP(m_pGameServiceOption->cbFZB ))
					{
						LPCTSTR pszDescribe=TEXT("此桌设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在与你 IP 地址相同的玩家,不能加入游戏!");
						SendSitFailedPacket(pIServerUserItem,pszDescribe);
						return false;
					}
				}//End if
			}//End if
		}//End if

		if (CanNoSameIP(m_pGameServiceOption->cbFZB ))
		{
			for (WORD i=0;i<m_wChairCount-1;i++)
			{
				if (m_pIUserItem[i]!=NULL)
				{
					for (WORD j=i+1;j<m_wChairCount;j++)
					{
						if ((m_pIUserItem[j]!=NULL)&&(m_pIUserItem[i]->GetClientIP()==m_pIUserItem[j]->GetClientIP()))
						{
							LPCTSTR pszDescribe=TEXT("你设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在 IP 地址相同的玩家,不能加入游戏!");
							SendSitFailedPacket(pIServerUserItem,pszDescribe);
							return false;
						}
					}//End if
				}//End if
			}//End if
		}

		//对局局数
		if ((m_pGameServiceOption->cbLimitDraw==TRUE)&&(m_pGameServiceOption->lMatchDraw>0))
		{
			LONG lPlayCount=pUserData->UserScoreInfo.lWinCount+pUserData->UserScoreInfo.lLostCount+pUserData->UserScoreInfo.lDrawCount;
			if (lPlayCount>=m_pGameServiceOption->lMatchDraw)
			{
				TCHAR szDescribe[128]=TEXT("");
				lstrcpyn(szDescribe,TEXT("恭喜你,你的比赛局数已经完成了,不需要再继续比赛,请耐心等待赛果公布! "),CountArray(szDescribe));
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}//End if
		}//End if
	}//End if
	else
	{
		//权限判断
		if (CUserRight::CanPlay(pUserData->dwUserRight)==false)
		{
			//发送消息
			LPCTSTR pszMessage=TEXT("抱歉,你没有进行游戏的权限,若需要帮助,请联系游戏客服咨询!");
			SendSitFailedPacket(pIServerUserItem,pszMessage);

			return true;
		}//End if

		//积分限制
		if (m_pGameServiceOption->lLessScore!=0L)
		{
			if (pUserData->UserScoreInfo.lScore<m_pGameServiceOption->lLessScore)
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("加入游戏至少需要 %ld 的游戏积分,你的积分不够,不能加入!"),m_pGameServiceOption->lLessScore);
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}
		}//End if
		if (m_pGameServiceOption->lHighScore!=0L)
		{
			if (pUserData->UserScoreInfo.lScore>m_pGameServiceOption->lHighScore)
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的游戏积分高于 %ld,不能加入游戏!"),m_pGameServiceOption->lHighScore);
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}
		}//End if

		//密码效验
		if (m_bLocked==true)
		{
			if ((pUserRule->bPassword==false)||(lstrcmp(m_szPassword,pUserRule->szPassword)!=0))
			{
				LPCTSTR pszDescribe=TEXT("携带密码错误,不能加入游戏!");
				SendSitFailedPacket(pIServerUserItem,pszDescribe);
				return false;
			}
		}//End if

		//积分范围
		WORD wWinRate=pIServerUserItem->GetUserWinRate();
		WORD wFleeRate=pIServerUserItem->GetUserFleeRate();
		for (WORD i=0;i<m_wChairCount;i++)
		{
			if (m_pIUserItem[i]!=NULL)
			{
				//获取规则
				pTableUserRule=m_pIUserItem[i]->GetUserRule();

				//逃率效验
				if ((pTableUserRule->bLimitFlee)&&(wFleeRate>pTableUserRule->wFleeRate))
				{
					TCHAR szDescribe[128]=TEXT("");
					_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的逃跑率太高,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
					SendSitFailedPacket(pIServerUserItem,szDescribe);
					return false;
				}

				//胜率效验
				if ((pTableUserRule->bLimitWin)&&(wWinRate<pTableUserRule->wWinRate))
				{
					TCHAR szDescribe[128]=TEXT("");
					_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的胜率太低,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
					SendSitFailedPacket(pIServerUserItem,szDescribe);
					return false;
				}

				//延时效验
				if ((pTableUserRule->bLimitDelay)&&(pUserData->wNetDelay>pTableUserRule->wNetDelay))
				{
					TCHAR szDescribe[128]=TEXT("");
					_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的网络延时太高,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
					SendSitFailedPacket(pIServerUserItem,szDescribe);
					return false;
				}

				//积分效验
				if (pTableUserRule->bLimitScore==true)
				{
					if (pUserScore->lScore>pTableUserRule->lMaxScore)
					{
						TCHAR szDescribe[128]=TEXT("");
						_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的积分太高,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
						SendSitFailedPacket(pIServerUserItem,szDescribe);
						return false;
					}
					if (pUserScore->lScore<pTableUserRule->lLessScore)
					{
						TCHAR szDescribe[128]=TEXT("");
						_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的积分太低,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
						SendSitFailedPacket(pIServerUserItem,szDescribe);
						return false;
					}
				}
			}
		}//End if

		//地址效验
		bool bCheckSameIP=pUserRule->bCheckSameIP;
		for (WORD i=0;i<m_wChairCount;i++)
		{
			if (m_pIUserItem[i]!=NULL)
			{
				pTableUserRule=m_pIUserItem[i]->GetUserRule();
				if (pTableUserRule->bCheckSameIP==true) 
				{
					bCheckSameIP=true;
					break;
				}
			}
		}//End for

		//防作弊
//		if (bCheckSameIP==true  ||  m_pIGameServiceFrame->IsFZBRoom() || CanNoSameIP(m_pGameServiceOption->cbFZB ))
		if (bCheckSameIP==true  ||   CanNoSameIP(m_pGameServiceOption->cbFZB ))
		{
			DWORD dwUserIP=pIServerUserItem->GetClientIP();
			for (WORD i=0;i<m_wChairCount;i++)
			{
				if ((m_pIUserItem[i]!=NULL)&&(m_pIUserItem[i]->GetClientIP()==dwUserIP))
				{
					if (pUserRule->bCheckSameIP)
					{
						LPCTSTR pszDescribe=TEXT("你设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在与你 IP 地址相同的玩家,不能加入游戏!");
						SendSitFailedPacket(pIServerUserItem,pszDescribe);
						return false;
					}
					else
					{
						LPCTSTR pszDescribe=TEXT("此桌设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在与你 IP 地址相同的玩家,不能加入游戏!");
						SendSitFailedPacket(pIServerUserItem,pszDescribe);
						return false;
					}//End if
				}//End if
			}//End for 
			for (WORD i=0;i<m_wChairCount-1;i++)
			{
				if (m_pIUserItem[i]!=NULL)
				{
					for (WORD j=i+1;j<m_wChairCount;j++)
					{
						if ((m_pIUserItem[j]!=NULL)&&(m_pIUserItem[i]->GetClientIP()==m_pIUserItem[j]->GetClientIP()))
						{
							LPCTSTR pszDescribe=TEXT("你设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在 IP 地址相同的玩家,不能加入游戏!");
							SendSitFailedPacket(pIServerUserItem,pszDescribe);
							return false;
						}//End if
					}//Enf for
				}//Enf if
			}//End for
		}
	}

	//坐下处理
	if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqSitDown(wChairID,pIServerUserItem,false);

	//更新密码
	WORD wUserCount=0;
	for (WORD i=0;i<m_wChairCount;i++)
	{
		if (m_pIUserItem[i]!=NULL) wUserCount++;
	}
	if (wUserCount==0)
	{
		m_bLocked=pUserRule->bPassword;
		m_dwTableOwnerID=pUserData->dwUserID;
		if (m_bLocked==true) lstrcpyn(m_szPassword,pUserRule->szPassword,CountArray(m_szPassword));
	}//End if

	//设置玩家
	m_pIUserItem[wChairID]=pIServerUserItem;
	pIServerUserItem->SetUserStatus(US_SIT,m_wTableID,wChairID);
	m_pIGameServiceFrame->SendUserStatus(pIServerUserItem);

	//坐下处理
	if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserSitDown(wChairID,pIServerUserItem,false);

	return true;
}
Beispiel #3
0
//坐下动作
bool __cdecl CTableFrame::PerformSitDownAction(WORD wChairID, IServerUserItem * pIServerUserItem)
{
	//效验参数
	ASSERT(pIServerUserItem!=NULL);
	ASSERT(wChairID<m_wChairCount);
	ASSERT(pIServerUserItem->GetTableID()==INVALID_TABLE);
	ASSERT(pIServerUserItem->GetChairID()==INVALID_CHAIR);

	//变量定义
	const tagUserScore * pUserScore=pIServerUserItem->GetUserScore();;
	const tagUserRule * pUserRule=pIServerUserItem->GetUserRule(),* pTableUserRule=NULL;
	tagServerUserData * pUserData=pIServerUserItem->GetUserData(),* pTableUserData=NULL;

	//关闭查询
	if ((pUserData->dwMasterRight==0L)&&(m_pIGameServiceFrame->IsShallClose()==true))
	{
		LPCTSTR pszDescribe=TEXT("由于此游戏房间即将暂停服务,玩家不允许再进入游戏桌!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//禁止查询
	if ((pUserData->dwMasterRight==0L)&&(m_pIGameServiceFrame->IsAllowEnterGame()==false))
	{
		LPCTSTR pszDescribe=TEXT("抱歉,此游戏桌现在不允许玩家进入!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//位置判断
	if (m_pIUserItem[wChairID]!=NULL)
	{
		TCHAR szDescribe[128]=TEXT("");
		pTableUserData=m_pIUserItem[wChairID]->GetUserData();
		_snprintf(szDescribe,sizeof(szDescribe),TEXT("椅子已经被 [ %s ] 捷足先登了,下次动作要快点了!"),pTableUserData->szAccounts);
		SendSitFailedPacket(pIServerUserItem,szDescribe);
		return false;
	}

	//游戏状态
	if (m_bStarted==true)
	{
		LPCTSTR pszDescribe=TEXT("游戏已经开始了,暂时不能进入游戏桌!");
		SendSitFailedPacket(pIServerUserItem,pszDescribe);
		return false;
	}

	//权限判断
	if (CUserRight::CanPlay(pUserData->dwUserRight)==false)
	{
		//发送消息
		LPCTSTR pszMessage=TEXT("抱歉,你没有进行游戏的权限,若需要帮助,请联系游戏客服咨询!");
		SendSitFailedPacket(pIServerUserItem,pszMessage);

		return true;
	}

	//积分限制
	if (m_pGameServiceOption->lLessScore!=0L)
	{
		if (pUserData->UserScoreInfo.lScore<m_pGameServiceOption->lLessScore)
		{
			TCHAR szDescribe[128]=TEXT("");
			_snprintf(szDescribe,sizeof(szDescribe),TEXT("加入游戏至少需要 %ld 的游戏积分,你的积分不够,不能加入!"),m_pGameServiceOption->lLessScore);
			SendSitFailedPacket(pIServerUserItem,szDescribe);
			return false;
		}
	}
	if (m_pGameServiceOption->lHighScore!=0L)
	{
		if (pUserData->UserScoreInfo.lScore>m_pGameServiceOption->lHighScore)
		{
			TCHAR szDescribe[128]=TEXT("");
			_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的游戏积分高于 %ld,不能加入游戏!"),m_pGameServiceOption->lHighScore);
			SendSitFailedPacket(pIServerUserItem,szDescribe);
			return false;
		}
	}

	//密码效验
	if (m_bLocked==true)
	{
		if ((pUserRule->bPassword==false)||(lstrcmp(m_szPassword,pUserRule->szPassword)!=0))
		{
			LPCTSTR pszDescribe=TEXT("携带密码错误,不能加入游戏!");
			SendSitFailedPacket(pIServerUserItem,pszDescribe);
			return false;
		}
	}

	//积分范围
	WORD wWinRate=pIServerUserItem->GetUserWinRate();
	WORD wFleeRate=pIServerUserItem->GetUserFleeRate();
	for (WORD i=0;i<m_wChairCount;i++)
	{
		if (m_pIUserItem[i]!=NULL)
		{
			//获取规则
			pTableUserRule=m_pIUserItem[i]->GetUserRule();

			//逃率效验
			if ((pTableUserRule->bLimitFlee)&&(wFleeRate>pTableUserRule->wFleeRate))
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的逃跑率太高,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}

			//胜率效验
			if ((pTableUserRule->bLimitWin)&&(wWinRate<pTableUserRule->wWinRate))
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的胜率太低,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}

			//延时效验
			if ((pTableUserRule->bLimitDelay)&&(pUserData->wNetDelay>pTableUserRule->wNetDelay))
			{
				TCHAR szDescribe[128]=TEXT("");
				_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的网络延时太高,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
				SendSitFailedPacket(pIServerUserItem,szDescribe);
				return false;
			}

			//积分效验
			if (pTableUserRule->bLimitScore==true)
			{
				if (pUserScore->lScore>pTableUserRule->lMaxScore)
				{
					TCHAR szDescribe[128]=TEXT("");
					_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的积分太高,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
					SendSitFailedPacket(pIServerUserItem,szDescribe);
					return false;
				}
				if (pUserScore->lScore<pTableUserRule->lLessScore)
				{
					TCHAR szDescribe[128]=TEXT("");
					_snprintf(szDescribe,sizeof(szDescribe),TEXT("你的积分太低,与 %s 设置的设置不符,不能加入游戏!"),m_pIUserItem[i]->GetAccounts());
					SendSitFailedPacket(pIServerUserItem,szDescribe);
					return false;
				}
			}
		}
	}

	//地址效验
	bool bCheckSameIP=pUserRule->bCheckSameIP;
	for (WORD i=0;i<m_wChairCount;i++)
	{
		if (m_pIUserItem[i]!=NULL)
		{
			pTableUserRule=m_pIUserItem[i]->GetUserRule();
			if (pTableUserRule->bCheckSameIP==true) 
			{
				bCheckSameIP=true;
				break;
			}
		}
	}
	if (bCheckSameIP==true)
	{
		DWORD dwUserIP=pIServerUserItem->GetClientIP();
		for (WORD i=0;i<m_wChairCount;i++)
		{
			if ((m_pIUserItem[i]!=NULL)&&(m_pIUserItem[i]->GetClientIP()==dwUserIP))
			{
				if (pUserRule->bCheckSameIP)
				{
					LPCTSTR pszDescribe=TEXT("你设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在与你 IP 地址相同的玩家,不能加入游戏!");
					SendSitFailedPacket(pIServerUserItem,pszDescribe);
					return false;
				}
				else
				{
					LPCTSTR pszDescribe=TEXT("此桌设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在与你 IP 地址相同的玩家,不能加入游戏!");
					SendSitFailedPacket(pIServerUserItem,pszDescribe);
					return false;
				}
			}
		}
		for (WORD i=0;i<m_wChairCount-1;i++)
		{
			if (m_pIUserItem[i]!=NULL)
			{
				for (WORD j=i+1;j<m_wChairCount;j++)
				{
					if ((m_pIUserItem[j]!=NULL)&&(m_pIUserItem[i]->GetClientIP()==m_pIUserItem[j]->GetClientIP()))
					{
						LPCTSTR pszDescribe=TEXT("你设置了不跟相同 IP 地址的玩家游戏,此游戏桌存在 IP 地址相同的玩家,不能加入游戏!");
						SendSitFailedPacket(pIServerUserItem,pszDescribe);
						return false;
					}
				}
			}
		}
	}

	//坐下处理
	if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserReqSitDown(wChairID,pIServerUserItem,false);

	//更新密码
	WORD wUserCount=0;
	for (WORD i=0;i<m_wChairCount;i++)
	{
		if (m_pIUserItem[i]!=NULL) wUserCount++;
	}
	if (wUserCount==0)
	{
		m_bLocked=pUserRule->bPassword;
		m_dwTableOwnerID=pUserData->dwUserID;
		if (m_bLocked==true) lstrcpyn(m_szPassword,pUserRule->szPassword,CountArray(m_szPassword));
	}

	//设置玩家
	m_pIUserItem[wChairID]=pIServerUserItem;
	pIServerUserItem->SetUserStatus(US_SIT,m_wTableID,wChairID);
	m_pIGameServiceFrame->SendUserStatus(pIServerUserItem);

	//坐下处理
	if (m_pITableFrameEvent!=NULL) m_pITableFrameEvent->OnEventUserSitDown(wChairID,pIServerUserItem,false);

	return true;
}