Files
wnmj/Servers/游戏组件/房卡牛牛/游戏服务器/TableFrameSink.cpp

1081 lines
34 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "TableFrameSink.h"
const WORD CTableFrameSink::m_wPlayerCount = GAME_PLAYER; //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
tagGameRuleCfg CTableFrameSink::m_stGameRuleCfg; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
enum tagServerTimerEnum
{
IDI_SEND_CARD = 1, //<2F><><EFBFBD>Ƽ<EFBFBD>ʱ<EFBFBD><CAB1>;
IDI_ROB_BANKER, //<2F><>ׯ<EFBFBD><D7AF>ʱ<EFBFBD><CAB1>;
IDI_USER_CHIP, //<2F><>ע<EFBFBD><D7A2>ʱ<EFBFBD><CAB1>;
IDI_OPEN_CARD, //<2F><><EFBFBD>Ƽ<EFBFBD>ʱ<EFBFBD><CAB1>;
IDI_GAME_END, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
IDT_SEND_CARD = 10000, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
IDT_ROB_BANKER = 20000, //<2F><>ׯʱ<D7AF><CAB1>;
IDT_USER_CHIP = 20000, //<2F><>עʱ<D7A2><CAB1>;
IDT_OPEN_CARD = 20000, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
IDT_GAME_END = 2000, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
};
CTableFrameSink::CTableFrameSink()
: m_pITableFrame(nullptr)
, m_pGameServiceOption(nullptr)
, m_dwOwnerID(INVALID_DWORD)
, m_pOpenRuleCfg(nullptr)
{
m_cbRobBankerCount = 0;
m_wBankerUser = INVALID_CHAIR;
ZeroMemory(m_lTableScore, sizeof(m_lTableScore));
ZeroMemory(m_bActiveUser, sizeof(m_bActiveUser));
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
ZeroMemory(m_cbHandCardCount, sizeof(m_cbHandCardCount));
ZeroMemory(m_cbHandCardData, sizeof(m_cbHandCardData));
ZeroMemory(m_wRobBankerUser, sizeof(m_wRobBankerUser));
ZeroMemory(m_stOpenCardRlt, sizeof(m_stOpenCardRlt));
ZeroMemory(&m_PrivateEndInfo, sizeof(CMD_S_Private_End_Info));
}
CTableFrameSink::~CTableFrameSink(void)
{
SafeDelete(m_pOpenRuleCfg);
}
void * CTableFrameSink::QueryInterface(const IID &Guid, DWORD dwQueryVer)
{
QUERYINTERFACE(ITableFrameSink, Guid, dwQueryVer);
QUERYINTERFACE(ITableUserAction, Guid, dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(ITableFrameSink, Guid, dwQueryVer);
return nullptr;
}
bool CTableFrameSink::Initialization(IUnknownEx * pIUnknownEx)
{
ASSERT(nullptr != pIUnknownEx);
m_pITableFrame = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, ITableFrame);
ASSERT(nullptr != m_pITableFrame);
if (nullptr == m_pITableFrame) return false;
m_pGameServiceOption = m_pITableFrame->GetGameServiceOption();
ASSERT(nullptr != m_pGameServiceOption);
if (nullptr == m_pGameServiceOption) return false;
//<2F><>ʼģʽ;
m_pITableFrame->SetStartMode(START_MODE_ALL_READY);
return true;
}
void CTableFrameSink::RepositionSink()
{
m_cbRobBankerCount = 0;
ZeroMemory(m_lTableScore, sizeof(m_lTableScore));
ZeroMemory(m_bActiveUser, sizeof(m_bActiveUser));
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
ZeroMemory(m_cbHandCardCount, sizeof(m_cbHandCardCount));
ZeroMemory(m_cbHandCardData, sizeof(m_cbHandCardData));
ZeroMemory(m_wRobBankerUser, sizeof(m_wRobBankerUser));
ZeroMemory(m_stOpenCardRlt, sizeof(m_stOpenCardRlt));
if (IsFixBankerMode())
{
ASSERT(m_wBankerUser>=0 && m_wBankerUser<GAME_PLAYER);
}
else
{
m_wBankerUser = INVALID_CHAIR;
}
}
//<2F><>Ϸ״̬;
bool CTableFrameSink::IsUserPlaying(WORD wChairID)
{
return wChairID >= 0 && wChairID < GAME_PLAYER && m_bActiveUser[wChairID];
}
bool CTableFrameSink::OnActionUserSitDown(WORD wChairID, IServerUserItem *pIServerUserItem, bool bLookonUser)
{
if (!bLookonUser && IsFixBankerMode() && INVALID_CHAIR==m_wBankerUser)
{
if (INVALID_DWORD==m_dwOwnerID || pIServerUserItem->GetUserID()==m_dwOwnerID)
{
m_wBankerUser = pIServerUserItem->GetChairID();
}
}
return true;
}
bool CTableFrameSink::OnActionUserStandUp(WORD wChairID, IServerUserItem *pIServerUserItem, bool bLookonUser)
{
if (!bLookonUser && m_pITableFrame->GetSitUserCount()==0)
{
m_wBankerUser = INVALID_CHAIR;
}
return true;
}
bool CTableFrameSink::OnTimerMessage(DWORD wTimerID, WPARAM wBindParam)
{
const BYTE && cbGameStatus = m_pITableFrame->GetGameStatus();
switch (wTimerID)
{
case IDI_SEND_CARD:
{
return OnUserSendCard(INVALID_CHAIR);
}
case IDI_ROB_BANKER:
{
return OnUserRobBanker(INVALID_CHAIR, false);
}
case IDI_USER_CHIP:
{
return OnUserChipScore(INVALID_CHAIR, 3);
}
case IDI_OPEN_CARD:
{
return OnUserOpenCard(INVALID_CHAIR);
}
case IDI_GAME_END:
{
return OnEventGameConclude(INVALID_CHAIR, nullptr, GER_NORMAL);
}
}
return true;
}
bool CTableFrameSink::OnGameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem)
{
switch (wSubCmdID)
{
case SUB_C_SEND_OVER:
{
ASSERT(pIServerUserItem->GetUserStatus() == US_PLAYING);
if (pIServerUserItem->GetUserStatus() != US_PLAYING) return true;
WORD && wChairID = pIServerUserItem->GetChairID();
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
return OnUserSendCard(wChairID);
}
case SUB_C_ROB_BANKER:
{
ASSERT(sizeof(CMD_C_RobBanker) == wDataSize);
if (sizeof(CMD_C_RobBanker) != wDataSize) return false;
ASSERT(pIServerUserItem->GetUserStatus() == US_PLAYING);
if (pIServerUserItem->GetUserStatus() != US_PLAYING) return true;
WORD && wChairID = pIServerUserItem->GetChairID();
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
CMD_C_RobBanker *pRobBanker = (CMD_C_RobBanker *)pDataBuffer;
return OnUserRobBanker(wChairID, pRobBanker->bRob);
}
case SUB_C_CHIP_SCORE:
{
ASSERT(sizeof(CMD_C_ChipScore) == wDataSize);
if (sizeof(CMD_C_ChipScore) != wDataSize) return false;
ASSERT(pIServerUserItem->GetUserStatus() == US_PLAYING);
if (pIServerUserItem->GetUserStatus() != US_PLAYING) return true;
WORD && wChairID = pIServerUserItem->GetChairID();
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
CMD_C_ChipScore *pChipScore = (CMD_C_ChipScore *)pDataBuffer;
return OnUserChipScore(wChairID, pChipScore->lScore);
}
case SUB_C_OPEN_CARD:
{
ASSERT(pIServerUserItem->GetUserStatus() == US_PLAYING);
if (pIServerUserItem->GetUserStatus() != US_PLAYING) return true;
WORD && wChairID = pIServerUserItem->GetChairID();
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
return OnUserOpenCard(wChairID);
}
}
ASSERT(0);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
bool CTableFrameSink::OnFrameMessage(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem)
{
return false;
}
bool CTableFrameSink::OnEventSendGameScene(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbGameStatus, bool bSendSecret)
{
switch (cbGameStatus)
{
case GS_NN_FREE:
{
CMD_S_StatusFree stStatusFree = { 0 };
stStatusFree.lCellScore = m_pITableFrame->GetCellScore();
stStatusFree.lMinFreeChip = GetMinFreeChip();
stStatusFree.lMaxFreeChip = GetMaxFreeChip();
return m_pITableFrame->SendGameScene(pIServerUserItem, &stStatusFree, sizeof(stStatusFree));
}
case GS_NN_SEND_CARD:
{
CMD_S_StatusSend stStatusSend = { 0 };
stStatusSend.stStatusFree.lCellScore = m_pITableFrame->GetCellScore();
stStatusSend.stStatusFree.lMinFreeChip = GetMinFreeChip();
stStatusSend.stStatusFree.lMaxFreeChip = GetMaxFreeChip();
//stStatusSend.stStatusFree.cbHandCardCount = IsThreeCardMode() ? (MAX_COUNT-2) : MAX_COUNT;
stStatusSend.stStatusFree.cbHandCardCount = MAX_COUNT;
CopyMemory(stStatusSend.stStatusFree.bActiveStatus, m_bActiveUser, sizeof(m_bActiveUser));
stStatusSend.wBankerUser = m_wBankerUser;
stStatusSend.cbSendStatus = m_cbUserResponse[wChairID];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׯģʽ;
//if (m_bActiveUser[wChairID] && BANKER_ROB4 == GetValidConfig()->wBankerRule)
if (m_bActiveUser[wChairID])
{
if (IsHasGameRule(eNNRuleEnum_BANKER_ROB4))
{
CopyMemory(stStatusSend.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
}
//if (IsHasSpecialNiu())
//{
// CopyMemory(stStatusSend.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//}
//else if (IsBayonetMode() || (wChairID == m_wBankerUser))
//{
// CopyMemory(stStatusSend.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//}
}
return m_pITableFrame->SendGameScene(pIServerUserItem, &stStatusSend, sizeof(stStatusSend));
}
case GS_NN_ROB_BANKER:
{
ASSERT(INVALID_CHAIR == m_wBankerUser);
CMD_S_StatusRob stStatusRob = { 0 };
stStatusRob.stStatusFree.lCellScore = m_pITableFrame->GetCellScore();
stStatusRob.stStatusFree.lMinFreeChip = GetMinFreeChip();
stStatusRob.stStatusFree.lMaxFreeChip = GetMaxFreeChip();
//stStatusRob.stStatusFree.cbHandCardCount = IsThreeCardMode() ? (MAX_COUNT-2) : MAX_COUNT;
stStatusRob.stStatusFree.cbHandCardCount = MAX_COUNT;
CopyMemory(stStatusRob.stStatusFree.bActiveStatus, m_bActiveUser, sizeof(m_bActiveUser));
CopyMemory(stStatusRob.cbRobStatus, m_cbUserResponse, sizeof(m_cbUserResponse));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׯģʽ;
//if (m_bActiveUser[wChairID] && BANKER_ROB4 == GetValidConfig()->wBankerRule)
if (m_bActiveUser[wChairID] && IsHasGameRule(eNNRuleEnum_BANKER_ROB4))
{
CopyMemory(stStatusRob.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//if (IsHasSpecialNiu())
//{
// CopyMemory(stStatusRob.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//}
//else if (IsBayonetMode() || (wChairID == m_wBankerUser))
//{
// CopyMemory(stStatusRob.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//}
}
return m_pITableFrame->SendGameScene(pIServerUserItem, &stStatusRob, sizeof(stStatusRob));
}
case GS_NN_USER_CHIP:
{
ASSERT(m_wBankerUser>=0 && m_wBankerUser<GAME_PLAYER && IsUserPlaying(m_wBankerUser));
CMD_S_StatusChip stStatusChip = { 0 };
stStatusChip.stStatusFree.lCellScore = m_pITableFrame->GetCellScore();
stStatusChip.stStatusFree.lMinFreeChip = GetMinFreeChip();
stStatusChip.stStatusFree.lMaxFreeChip = GetMaxFreeChip();
//stStatusChip.stStatusFree.cbHandCardCount = IsThreeCardMode() ? (MAX_COUNT-2) : MAX_COUNT;
stStatusChip.stStatusFree.cbHandCardCount = MAX_COUNT;
CopyMemory(stStatusChip.stStatusFree.bActiveStatus, m_bActiveUser, sizeof(m_bActiveUser));
CopyMemory(stStatusChip.cbChipStatus, m_cbUserResponse, sizeof(m_cbUserResponse));
CopyMemory(stStatusChip.lUserChipScore, m_lTableScore, sizeof(m_lTableScore));
stStatusChip.wBankerUser = m_wBankerUser;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׯģʽ;
//if (m_bActiveUser[wChairID] && BANKER_ROB4 == GetValidConfig()->wBankerRule)
if (m_bActiveUser[wChairID] && IsHasGameRule(eNNRuleEnum_BANKER_ROB4))
{
CopyMemory(stStatusChip.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//if (IsHasSpecialNiu())
//{
// CopyMemory(stStatusChip.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//}
//else if (IsBayonetMode() || (wChairID == m_wBankerUser))
//{
// CopyMemory(stStatusChip.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT - 1));
//}
}
return m_pITableFrame->SendGameScene(pIServerUserItem, &stStatusChip, sizeof(stStatusChip));
}
case GS_NN_OPEN_CARD:
{
//ASSERT(IsUserPlaying(m_wBankerUser));
CMD_S_StatusOpen stStatusOpen = { 0 };
stStatusOpen.wBankerUser = m_wBankerUser;
stStatusOpen.stStatusFree.lCellScore = m_pITableFrame->GetCellScore();
stStatusOpen.stStatusFree.lMinFreeChip = GetMinFreeChip();
stStatusOpen.stStatusFree.lMaxFreeChip = GetMaxFreeChip();
stStatusOpen.stStatusFree.cbHandCardCount = MAX_COUNT;
CopyMemory(stStatusOpen.stStatusFree.bActiveStatus, m_bActiveUser, sizeof(m_bActiveUser));
CopyMemory(stStatusOpen.lUserChipScore, m_lTableScore, sizeof(m_lTableScore));
CopyMemory(stStatusOpen.cbOpenStatus, m_cbUserResponse, sizeof(m_cbUserResponse));
//<2F><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>;
//stStatusOpen.cbOpenStatus = m_cbUserResponse[wChairID];
if (m_bActiveUser[wChairID] && (0 == m_cbUserResponse[wChairID]))
{
CopyMemory(stStatusOpen.cbHandCardData, m_cbHandCardData[wChairID], sizeof(BYTE)*(MAX_COUNT));
}
else if (m_bActiveUser[wChairID] && 1 == m_cbUserResponse[wChairID])
{
stStatusOpen.cbHandCardType= m_stOpenCardRlt[wChairID].cbCardType;
CopyMemory(stStatusOpen.cbHandCardData, m_stOpenCardRlt[wChairID].cbSortCard, sizeof(m_stOpenCardRlt[wChairID].cbSortCard));
}
return m_pITableFrame->SendGameScene(pIServerUserItem, &stStatusOpen, sizeof(stStatusOpen));
}
case GS_NN_SHOW_CARD:
{
CMD_S_StatusAllOpen stAllOpen;
ZeroMemory(&stAllOpen, sizeof(CMD_S_StatusAllOpen));
stAllOpen.wBankerUser = m_wBankerUser;
stAllOpen.stStatusFree.lCellScore = m_pITableFrame->GetCellScore();
stAllOpen.stStatusFree.lMinFreeChip = GetMinFreeChip();
stAllOpen.stStatusFree.lMaxFreeChip = GetMaxFreeChip();
stAllOpen.stStatusFree.cbHandCardCount = MAX_COUNT;
CopyMemory(stAllOpen.stStatusFree.bActiveStatus, m_bActiveUser, sizeof(m_bActiveUser));
CopyMemory(stAllOpen.lUserChipScore, m_lTableScore, sizeof(m_lTableScore));
CopyMemory(stAllOpen.cbOpenStatus, m_cbUserResponse, sizeof(m_cbUserResponse));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
stAllOpen.cbHandCardType[i] = m_stOpenCardRlt[i].cbCardType;
CopyMemory(stAllOpen.cbHandCardData[i], m_stOpenCardRlt[i].cbSortCard, sizeof(m_stOpenCardRlt[i].cbSortCard));
}
return m_pITableFrame->SendGameScene(pIServerUserItem, &stAllOpen, sizeof(stAllOpen));
}
}
ASSERT(0);
return false;
}
bool CTableFrameSink::OnEventGameStart()
{
//RepositionSink();
srand(GetTickCount());
BYTE cbCardBuffer[MAX_COUNT*GAME_PLAYER] = { 0 };
//m_GameLogic.RandCardList(reinterpret_cast<BYTE *>(m_cbHandCardData), sizeof(m_cbHandCardData), ((GetValidConfig()->wGameRule&RULE_HUA_NIU)==0));
m_GameLogic.RandCardList(reinterpret_cast<BYTE *>(m_cbHandCardData), sizeof(m_cbHandCardData), false);
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
IServerUserItem * pIServerUserItem = m_pITableFrame->GetTableUserItem(i);
if (nullptr == pIServerUserItem) continue;
//if (pIServerUserItem->GetUserStatus() != US_PLAYING) continue;
BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
BYTE cbReUserStatus = pIServerUserItem->GetReUserStatus();
if (cbUserStatus == US_PLAYING || (US_OFFLINE == cbUserStatus && cbReUserStatus == US_PLAYING))
{
m_bActiveUser[i] = true;
}
}
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
m_PrivateEndInfo.aryActiveStatus[i] = m_bActiveUser[i];
}
CMD_S_GameStart stGameStart = { 0 };
stGameStart.wBankerUser = m_wBankerUser;
//stGameStart.cbHandCardCount = IsThreeCardMode() ? (MAX_COUNT-2) : MAX_COUNT;
stGameStart.cbHandCardCount = MAX_COUNT;
CopyMemory(stGameStart.bActiveStatus, m_bActiveUser, sizeof(m_bActiveUser));
for (WORD i=0; i<m_wPlayerCount; ++i)
{
ZeroMemory(&stGameStart.cbHandCardData, sizeof(stGameStart.cbHandCardData));
//if ( && BANKER_ROB4==GetValidConfig()->wBankerRule)
if (m_bActiveUser[i] && IsHasGameRule(eNNRuleEnum_BANKER_ROB4))
{
ASSERT(MAX_COUNT == stGameStart.cbHandCardCount);
CopyMemory(&stGameStart.cbHandCardData, m_cbHandCardData[i], sizeof(BYTE)*(MAX_COUNT-1));
}
//if (m_bActiveUser[i])
//{
// if (IsHasSpecialNiu())
// {
// ASSERT(MAX_COUNT == stGameStart.cbHandCardCount);
// CopyMemory(&stGameStart.cbHandCardData, m_cbHandCardData[i], sizeof(BYTE)*(MAX_COUNT - 1));
// }
// else if (IsBayonetMode() || (i == m_wBankerUser))
// {
// ASSERT(MAX_COUNT == stGameStart.cbHandCardCount);
// CopyMemory(&stGameStart.cbHandCardData, m_cbHandCardData[i], sizeof(BYTE)*MAX_COUNT);
// }
//}
m_pITableFrame->SendTableData(i, SUB_S_GAME_START, &stGameStart, sizeof(stGameStart));
}
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_GAME_START, &stGameStart, sizeof(stGameStart));
m_pITableFrame->SetGameStatus(GS_NN_SEND_CARD);
m_pITableFrame->SetGameTimer(IDI_SEND_CARD, IDT_SEND_CARD, 1, 0);
return true;
}
bool CTableFrameSink::OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason)
{
KillAllTimer();
m_pITableFrame->KillGameTimer(IDI_GAME_END);
m_pITableFrame->SetGameStatus(GS_NN_FREE);
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
switch (cbReason)
{
case GER_DISMISS:
{
CMD_S_GameEnd stGameEnd = { 0 };
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_GAME_END, &stGameEnd, sizeof(stGameEnd));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_GAME_END, &stGameEnd, sizeof(stGameEnd));
return m_pITableFrame->ConcludeGame(GAME_STATUS_FREE);
}
case GER_NORMAL:
{
CMD_S_GameEnd stGameEnd = { 0 };
// ƴ<>̵<EFBFBD>ģʽ;
if (IsBayonetMode())
{
ASSERT(m_wBankerUser == INVALID_CHAIR);
// Ѱ<><D1B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WORD wWinChairID = INVALID_CHAIR;
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
if (wWinChairID == INVALID_CHAIR)
{
wWinChairID = i;
}
else
{
if (!m_GameLogic.CompareCard(m_stOpenCardRlt[wWinChairID], m_stOpenCardRlt[i]))
{
wWinChairID = i;
}
}
}
// <20><><EFBFBD><EFBFBD>;
LONG lNiuMulti = m_GameLogic.GetWinNiuFan(m_stOpenCardRlt[wWinChairID].cbCardType);
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
stGameEnd.cbCardType[i] = m_stOpenCardRlt[i].cbCardType;
CopyMemory(&stGameEnd.cbHandCardData[i], m_stOpenCardRlt[i].cbSortCard, sizeof(m_stOpenCardRlt[i].cbSortCard));
if (i == wWinChairID) continue;
stGameEnd.lGameScore[wWinChairID] += (m_lTableScore[i] * lNiuMulti);
stGameEnd.lGameScore[i] = -(m_lTableScore[i] * lNiuMulti);
}
}
else
{
ASSERT(IsUserPlaying(m_wBankerUser));
// <20><><EFBFBD><EFBFBD>ģʽ;
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
stGameEnd.cbCardType[i] = m_stOpenCardRlt[i].cbCardType;
CopyMemory(&stGameEnd.cbHandCardData[i], m_stOpenCardRlt[i].cbSortCard, sizeof(m_stOpenCardRlt[i].cbSortCard));
if (i == m_wBankerUser) continue;
if (m_GameLogic.CompareCard(m_stOpenCardRlt[m_wBankerUser], m_stOpenCardRlt[i]))
{
//LONG lNiuMulti = IsHaveNiuFanMode() ? m_GameLogic.GetWinNiuFan(m_stOpenCardRlt[m_wBankerUser].cbCardType) : 1;
LONG lNiuMulti = m_GameLogic.GetWinNiuFan(m_stOpenCardRlt[m_wBankerUser].cbCardType);
stGameEnd.lGameScore[m_wBankerUser] += (m_lTableScore[i] * lNiuMulti);
stGameEnd.lGameScore[i] = -(m_lTableScore[i] * lNiuMulti);
}
else
{
//LONG lNiuMulti = IsHaveNiuFanMode() ? m_GameLogic.GetWinNiuFan(m_stOpenCardRlt[i].cbCardType) : 1;
LONG lNiuMulti = m_GameLogic.GetWinNiuFan(m_stOpenCardRlt[i].cbCardType);
stGameEnd.lGameScore[m_wBankerUser] -= (m_lTableScore[i] * lNiuMulti);
stGameEnd.lGameScore[i] = m_lTableScore[i] * lNiuMulti;
}
}
}
//<2F><><EFBFBD><EFBFBD>˰<EFBFBD><CBB0>;
LONG lRevenue[GAME_PLAYER] = { 0 };
for (WORD i=0; i<m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
lRevenue[i] = static_cast<LONG>(m_pITableFrame->CalculateRevenue(i, stGameEnd.lGameScore[i]));
stGameEnd.lGameScore[i] -= lRevenue[i];
stGameEnd.lRevenue[i] = lRevenue[i];
}
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_GAME_END, &stGameEnd, sizeof(stGameEnd));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_GAME_END, &stGameEnd, sizeof(stGameEnd));
//д<><D0B4>;
tagScoreInfo ScoreInfoArray[GAME_PLAYER];
ZeroMemory(ScoreInfoArray, sizeof(ScoreInfoArray));
for (WORD i=0; i<m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
ScoreInfoArray[i].cbType = (stGameEnd.lGameScore[i] >= 0) ? SCORE_TYPE_WIN : SCORE_TYPE_LOSE;
ScoreInfoArray[i].lRevenue = lRevenue[i];
ScoreInfoArray[i].lScore = stGameEnd.lGameScore[i];
}
m_pITableFrame->addPrivatePlayCout(1);
//<2F>ƾֽ<C6BE><D6BD><EFBFBD><EFBFBD><EFBFBD>,ÿ8<C3BF><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><E3BEAD>ֵ;
if (IsPrivateEnd())
{
//tagPrivateFrameParameter* pPrivateFrame = m_pITableFrame->GetPrivateFrameInfo();
//SCORE lGrade = pPrivateFrame->dwPlayCost;
//for (WORD i = 0; i < GAME_PLAYER; i++)
//{
// ScoreInfoArray[i].lGrade = lGrade;
//}
ScoreInfoArray[0].lGrade = 2; //<2F><><EFBFBD><EFBFBD>2<EFBFBD><32>;
for (WORD i = 1; i < GAME_PLAYER; i++)
{
ScoreInfoArray[i].lGrade = 1;
}
}
DataStream kDataStream;
m_pITableFrame->WriteTableScore(ScoreInfoArray, CountArray(ScoreInfoArray), kDataStream);
/********************************˽<>˳<EFBFBD>ͳ<EFBFBD><CDB3>****************************************/
bool isAllWin = true;
bool isAllLose = true;
for (WORD i = 0; i < m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
// Ӯ<><D3AE><EFBFBD><EFBFBD>;
if (stGameEnd.lGameScore[i] >= 0)
{
m_PrivateEndInfo.aryResultTypeCount[i][NN_RT_WIN]++;
}
// ţţ<C5A3><C5A3><EFBFBD><EFBFBD>;
if (stGameEnd.cbCardType[i] == NIU_TYPE_10)
{
m_PrivateEndInfo.aryResultTypeCount[i][NN_RT_NIUNIU]++;
}
if ((i != m_wBankerUser) && (stGameEnd.lGameScore[i] > 0))
{
// <20><><EFBFBD>м<EFBFBD>Ӯ<EFBFBD><D3AE><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>ͨɱ;
if (stGameEnd.lGameScore[i] > 0)
{
isAllWin = false;
}
// <20><><EFBFBD>м<EFBFBD><D0BC><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>ͨ<EFBFBD><CDA8>;
else if (stGameEnd.lGameScore[i] < 0)
{
isAllLose = false;
}
}
}
if (isAllWin && m_wBankerUser < GAME_PLAYER)
{
m_PrivateEndInfo.aryResultTypeCount[m_wBankerUser][NN_RT_ALL_WIN]++;
}
if (isAllLose && m_wBankerUser < GAME_PLAYER)
{
m_PrivateEndInfo.aryResultTypeCount[m_wBankerUser][NN_RT_ALL_LOSE]++;
}
/********************************˽<>˳<EFBFBD>ͳ<EFBFBD><CDB3>****************************************/
//<2F><><EFBFBD><EFBFBD>ׯ<EFBFBD><D7AF>;
if (IsRobBankerMode())
{
m_wBankerUser = INVALID_CHAIR;
}
//else if (BANKER_TURNS == GetValidConfig()->wBankerRule)
if (IsHasGameRule(eNNRuleEnum_BANKER_TURNS))
{
WORD wNextUser = m_wBankerUser;
for (WORD i=0; i<m_wPlayerCount; ++i)
{
if (++wNextUser == m_wPlayerCount)
{
wNextUser = 0;
}
if (m_bActiveUser[wNextUser])
{
m_wBankerUser = wNextUser;
break;
}
}
}
m_pITableFrame->ConcludeGame(GAME_STATUS_FREE);
return true;
}
}
ASSERT(0);
return false;
}
void CTableFrameSink::KillAllTimer()
{
m_pITableFrame->KillGameTimer(IDI_SEND_CARD);
m_pITableFrame->KillGameTimer(IDI_ROB_BANKER);
m_pITableFrame->KillGameTimer(IDI_USER_CHIP);
m_pITableFrame->KillGameTimer(IDI_OPEN_CARD);
}
//<2F><><EFBFBD>Ϳ<EFBFBD>ʼ<EFBFBD><CABC>ע;
void CTableFrameSink::SendStartChip()
{
ASSERT(IsUserPlaying(m_wBankerUser));
CMD_S_StartChip stStartChip = { 0 };
stStartChip.wBankerUser = m_wBankerUser;
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_START_CHIP, &stStartChip, sizeof(stStartChip));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_START_CHIP, &stStartChip, sizeof(stStartChip));
m_pITableFrame->SetGameStatus(GS_NN_USER_CHIP);
m_pITableFrame->SetGameTimer(IDI_USER_CHIP, IDT_USER_CHIP, 1, 0);
}
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>;
bool CTableFrameSink::IsUserNoOperate(bool bIgnoreBanker)
{
if (bIgnoreBanker)
{
for (int i=0; i<m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
if (i == m_wBankerUser) continue;
if (0 == m_cbUserResponse[i]) return true;
}
}
else
{
for (int i=0; i<m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
if (0 == m_cbUserResponse[i]) return true;
}
}
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
bool CTableFrameSink::OnUserSendCard(WORD wChairID)
{
const BYTE && cbGameStatus = m_pITableFrame->GetGameStatus();
ASSERT(GS_NN_SEND_CARD == cbGameStatus);
if (GS_NN_SEND_CARD != cbGameStatus) return true;
if (INVALID_CHAIR != wChairID)
{
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
ASSERT(0 == m_cbUserResponse[wChairID]);
if (0 != m_cbUserResponse[wChairID]) return true;
m_cbUserResponse[wChairID] = 1;
if (IsUserNoOperate(false)) return true;
}
m_pITableFrame->KillGameTimer(IDI_SEND_CARD);
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
//<2F><>ׯģʽ;
if (IsRobBankerMode())
{
ASSERT(INVALID_CHAIR == m_wBankerUser);
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_START_ROB);
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_START_ROB);
m_pITableFrame->SetGameStatus(GS_NN_ROB_BANKER);
m_pITableFrame->SetGameTimer(IDI_ROB_BANKER, IDT_ROB_BANKER, 1, 0);
}
else if (IsBayonetMode())
{
m_wBankerUser = INVALID_CHAIR;
// <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD><EFBFBD>;
for (int i = 0; i < m_wPlayerCount; ++i)
{
m_lTableScore[i] = 1;
// <20><><EFBFBD>ÿ<EFBFBD><C3BF>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>͸<EFBFBD><CDB8>ͻ<EFBFBD><CDBB><EFBFBD>;
CMD_S_OpenCard stOpenCard = { 0 };
stOpenCard.wOpenUser = i;
stOpenCard.cbCardType = 0;
CopyMemory(stOpenCard.cbCardData, m_cbHandCardData[i], sizeof(m_cbHandCardData[i]));
m_pITableFrame->SendTableData(i, SUB_S_START_OPEN, &stOpenCard, sizeof(stOpenCard));
m_pITableFrame->SendLookonData(i, SUB_S_START_OPEN, &stOpenCard, sizeof(stOpenCard));
}
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
m_pITableFrame->SetGameStatus(GS_NN_OPEN_CARD);
m_pITableFrame->SetGameTimer(IDI_OPEN_CARD, IDT_OPEN_CARD, 1, 0);
}
else
{
SendStartChip();
}
return true;
}
//<2F><>ׯ<EFBFBD>¼<EFBFBD>;
bool CTableFrameSink::OnUserRobBanker(WORD wChairID, bool bRob)
{
const BYTE && cbGameStatus = m_pITableFrame->GetGameStatus();
ASSERT(GS_NN_ROB_BANKER == cbGameStatus);
if (GS_NN_ROB_BANKER != cbGameStatus) return true;
//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>;
if (INVALID_CHAIR != wChairID)
{
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
ASSERT(0 == m_cbUserResponse[wChairID]);
if (0 != m_cbUserResponse[wChairID]) return true;
m_cbUserResponse[wChairID] = bRob ? 2 : 1;
if (bRob) m_wRobBankerUser[m_cbRobBankerCount++] = wChairID;
CMD_S_UserRob stUserRob = { 0 };
stUserRob.wRobUser = wChairID;
stUserRob.bRobResult = bRob;
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_USER_ROB, &stUserRob, sizeof(stUserRob));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_USER_ROB, &stUserRob, sizeof(stUserRob));
if (IsUserNoOperate(false)) return true;
}
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׯ;
for (int i=0; i<m_wPlayerCount; ++i)
{
if (m_bActiveUser[i] && 0==m_cbUserResponse[i])
{
m_cbUserResponse[i] = 1;
CMD_S_UserRob stUserRob = { 0 };
stUserRob.wRobUser = i;
stUserRob.bRobResult = false;
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_USER_ROB, &stUserRob, sizeof(stUserRob));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_USER_ROB, &stUserRob, sizeof(stUserRob));
}
}
//û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׯ;
if (0 == m_cbRobBankerCount)
{
for (int i=0; i<m_wPlayerCount; ++i)
{
if (m_bActiveUser[i])
{
ASSERT(1 == m_cbUserResponse[i]);
m_wRobBankerUser[m_cbRobBankerCount++] = i;
}
}
}
m_pITableFrame->KillGameTimer(IDI_ROB_BANKER);
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
ASSERT(m_cbRobBankerCount > 0);
m_wBankerUser = m_wRobBankerUser[rand()%m_cbRobBankerCount];
SendStartChip();
return true;
}
//<2F><>ע<EFBFBD>¼<EFBFBD>;
bool CTableFrameSink::OnUserChipScore(WORD wChairID, LONG lScore)
{
const BYTE && cbGameStatus = m_pITableFrame->GetGameStatus();
ASSERT(GS_NN_USER_CHIP == cbGameStatus);
if (GS_NN_USER_CHIP != cbGameStatus) return true;
//ASSERT(IsUserPlaying(wChairID));
ASSERT(wChairID != m_wBankerUser);
//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>;
if (INVALID_CHAIR != wChairID)
{
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
ASSERT(0 == m_cbUserResponse[wChairID]);
if (0 != m_cbUserResponse[wChairID]) return true;
m_cbUserResponse[wChairID] = 1;
m_lTableScore[wChairID] = lScore;
CMD_S_UserChip stUserChip = { 0 };
stUserChip.wChipUser = wChairID;
stUserChip.lChipScore = lScore;
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_USER_CHIP, &stUserChip, sizeof(stUserChip));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_USER_CHIP, &stUserChip, sizeof(stUserChip));
if (IsUserNoOperate(true)) return true;
}
//<2F><>ʱ,û<><C3BB>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>;
for (int i=0; i<m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i] || i==m_wBankerUser)
{
continue;
}
if (0 == m_cbUserResponse[i])
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע;
m_cbUserResponse[i] = 1;
m_lTableScore[i] = lScore;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
CMD_S_UserChip stUserChip = { 0 };
stUserChip.wChipUser = i;
stUserChip.lChipScore = (GetMinFreeChip()>0?GetMaxFreeChip():1);
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_USER_CHIP, &stUserChip, sizeof(stUserChip));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_USER_CHIP, &stUserChip, sizeof(stUserChip));
}
}
// <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD><EFBFBD>;
for (int i = 0; i < m_wPlayerCount; ++i)
{
// <20><><EFBFBD>ÿ<EFBFBD><C3BF>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>͸<EFBFBD><CDB8>ͻ<EFBFBD><CDBB><EFBFBD>;
CMD_S_OpenCard stOpenCard = { 0 };
stOpenCard.wOpenUser = i;
stOpenCard.cbCardType = 0;
CopyMemory(stOpenCard.cbCardData, m_cbHandCardData[i], sizeof(m_cbHandCardData[i]));
m_pITableFrame->SendTableData(i, SUB_S_START_OPEN, &stOpenCard, sizeof(stOpenCard));
m_pITableFrame->SendLookonData(i, SUB_S_START_OPEN, &stOpenCard, sizeof(stOpenCard));
}
m_pITableFrame->KillGameTimer(IDI_USER_CHIP);
ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
//m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_START_OPEN);
//m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_START_OPEN);
m_pITableFrame->SetGameStatus(GS_NN_OPEN_CARD);
m_pITableFrame->SetGameTimer(IDI_OPEN_CARD, IDT_OPEN_CARD, 1, 0);
return true;
}
//̯<><CCAF><EFBFBD>¼<EFBFBD>;
bool CTableFrameSink::OnUserOpenCard(WORD wChairID)
{
const BYTE && cbGameStatus = m_pITableFrame->GetGameStatus();
ASSERT(GS_NN_OPEN_CARD == cbGameStatus);
if (GS_NN_OPEN_CARD != cbGameStatus) return true;
//BYTE cbHandCardCount = IsThreeCardMode() ? (MAX_COUNT-2) : MAX_COUNT;
BYTE cbHandCardCount = MAX_COUNT;
//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>;
if (INVALID_CHAIR != wChairID)
{
ASSERT(IsUserPlaying(wChairID));
if (!IsUserPlaying(wChairID)) return true;
ASSERT(0 == m_cbUserResponse[wChairID]);
if (0 != m_cbUserResponse[wChairID]) return true;
//<2F><><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>;
m_cbUserResponse[wChairID] = 1;
m_stOpenCardRlt[wChairID].cbMaxCard = m_GameLogic.GetMaxCard(m_cbHandCardData[wChairID], cbHandCardCount);
m_stOpenCardRlt[wChairID].cbCardType = m_GameLogic.GetCardType(m_cbHandCardData[wChairID], cbHandCardCount, m_stOpenCardRlt[wChairID].cbSortCard,
IsHasGameRule(eNNRuleEnum_WHN), IsHasGameRule(eNNRuleEnum_BOMB), IsHasGameRule(eNNRuleEnum_WXN));
CMD_S_OpenCard stOpenCard = { 0 };
stOpenCard.wOpenUser = wChairID;
stOpenCard.cbCardType = m_stOpenCardRlt[wChairID].cbCardType;
CopyMemory(stOpenCard.cbCardData, m_stOpenCardRlt[wChairID].cbSortCard, sizeof(stOpenCard.cbCardData));
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_OPEN_CARD, &stOpenCard, sizeof(stOpenCard));
m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_OPEN_CARD, &stOpenCard, sizeof(stOpenCard));
if (IsUserNoOperate(false)) return true;
}
//<2F><>ʱ,û<><C3BB><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>;
for (int i=0; i<m_wPlayerCount; ++i)
{
if (!m_bActiveUser[i]) continue;
if (0 == m_cbUserResponse[i])
{
m_cbUserResponse[i] = 1;
m_stOpenCardRlt[i].cbMaxCard = m_GameLogic.GetMaxCard(m_cbHandCardData[i], cbHandCardCount);
m_stOpenCardRlt[i].cbCardType = m_GameLogic.GetCardType(m_cbHandCardData[i], cbHandCardCount, m_stOpenCardRlt[i].cbSortCard,
IsHasGameRule(eNNRuleEnum_WHN), IsHasGameRule(eNNRuleEnum_BOMB), IsHasGameRule(eNNRuleEnum_WXN));
//CMD_S_OpenCard stOpenCard = { 0 };
//stOpenCard.wOpenUser = i;
//stOpenCard.cbCardType = m_stOpenCardRlt[i].cbCardType;
//CopyMemory(stOpenCard.cbCardData, m_stOpenCardRlt[i].cbSortCard, sizeof(stOpenCard.cbCardData));
//m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_OPEN_CARD, &stOpenCard, sizeof(stOpenCard));
//m_pITableFrame->SendLookonData(INVALID_CHAIR, SUB_S_OPEN_CARD, &stOpenCard, sizeof(stOpenCard));
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>CMD_S_AllOpenCard;
CMD_S_AllOpenCard allOpenCard;
ZeroMemory(&allOpenCard, sizeof(allOpenCard));
for (int i = 0; i < m_wPlayerCount; ++i)
{
allOpenCard.bActiveStatus[i] = m_bActiveUser[i];
if (!m_bActiveUser[i]) continue;
allOpenCard.cbCardType[i] = m_stOpenCardRlt[i].cbCardType;
CopyMemory(&allOpenCard.cbHandCardData[i][0], m_stOpenCardRlt[i].cbSortCard, sizeof(m_stOpenCardRlt[i].cbSortCard));
m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_ALL_OPEN_CARD, &allOpenCard, sizeof(allOpenCard));
}
m_pITableFrame->SetGameStatus(GS_NN_SHOW_CARD);
m_pITableFrame->KillGameTimer(IDI_OPEN_CARD);
//ZeroMemory(m_cbUserResponse, sizeof(m_cbUserResponse));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ;
m_pITableFrame->SetGameTimer(IDI_GAME_END, IDT_GAME_END, 1, 0);
//OnEventGameConclude(INVALID_CHAIR, nullptr, GER_NORMAL);
return true;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
bool CTableFrameSink::ReadServerConfig(const tagGameServiceOption *pGameServiceOption)
{
//TCHAR szDir[MAX_PATH];
//GetModuleFileName(NULL, szDir, MAX_PATH);
//PathRemoveFileSpec(szDir);
//CString strFileName;
//strFileName.Format(_T("%s\\%sServer.ini"), szDir, EXPORT_NAME);
//TCHAR szApp[32] = _T("Config");
//try
//{
// m_stGameRuleCfg.wGameRule = GetPrivateProfileInt(szApp, _T("GameRule"), RULE_HUA_NIU, strFileName);
// m_stGameRuleCfg.wBankerRule = GetPrivateProfileInt(szApp, _T("BankerRule"), BANKER_ROB4, strFileName);
// m_stGameRuleCfg.cbMinFreeChip = GetPrivateProfileInt(szApp, _T("MinFreeChip"), 0, strFileName);
// m_stGameRuleCfg.cbMaxFreeChip = GetPrivateProfileInt(szApp, _T("MaxFreeChip"), 0, strFileName);
// return true;
//} catch (...) {
// ASSERT(0);
//}
return false;
}
////////////////////////////// ˽<>˳<EFBFBD> ////////////////////////////////////////////
void CTableFrameSink::SetPrivateInfo(BYTE bGameTypeIdex, DWORD bGameRuleIdex)
{
}
void CTableFrameSink::ResetPrivateEndInfo()
{
ZeroMemory(&m_PrivateEndInfo, sizeof(CMD_S_Private_End_Info));
m_wBankerUser = INVALID_CHAIR;
}
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>;
void CTableFrameSink::GetPrivateEndInfo(DataStream &kDataStream, bool bSend)
{
//m_PrivateEndInfo.StreamValue(kDataStream, bSend);
for (WORD i = 0; i < GAME_PLAYER; i++)
{
// <20>ܻ<EFBFBD><DCBB><EFBFBD>
IServerUserItem* pServerUserItem = m_pITableFrame->GetTableUserItem(i);
if (pServerUserItem)
{
m_PrivateEndInfo.lAllScore[i] = pServerUserItem->GetUserScore();
}
}
tagPrivateFrameRecordInfo* pPrivateRecord = m_pITableFrame->GetPrivateFrameRecord();
m_PrivateEndInfo.cbFinishCout = pPrivateRecord->cbFinishCout;
m_PrivateEndInfo.StreamValue(kDataStream, bSend);
}
//<2F>ж<EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>;
bool CTableFrameSink::IsPrivateEnd()
{
if (m_pITableFrame == nullptr) return false;
tagPrivateFrameParameter* pPrivateFrame = m_pITableFrame->GetPrivateFrameInfo();
tagPrivateFrameRecordInfo* pPrivateRecord = m_pITableFrame->GetPrivateFrameRecord();
if ((pPrivateFrame == nullptr) || (pPrivateRecord == nullptr)) return false;
if (pPrivateFrame->cbGameCout <= pPrivateRecord->cbFinishCout)
{
return true;
}
return false;
}
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>;
bool CTableFrameSink::IsHasGameRule(eNNRuleEnum eType)
{
ASSERT(m_pITableFrame != nullptr);
if (m_pITableFrame == nullptr) return false;
const tagPrivateFrameParameter* pPrivateFrame = m_pITableFrame->GetPrivateFrameInfo();
if (nullptr == pPrivateFrame) return false;
if (0 == pPrivateFrame->dwRoomNum) return false;
return ((pPrivateFrame->dwGameRule & eType) == eType);
}