256 lines
6.1 KiB
C++
256 lines
6.1 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "PrivateTableInfo.h"
|
|||
|
|
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new DEBUG_NEW
|
|||
|
|
#undef THIS_FILE
|
|||
|
|
static char THIS_FILE[] = __FILE__;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
PrivateTableInfo::PrivateTableInfo()
|
|||
|
|
:pITableFrame(NULL)
|
|||
|
|
{
|
|||
|
|
restValue();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
PrivateTableInfo::~PrivateTableInfo(void)
|
|||
|
|
{
|
|||
|
|
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>
|
|||
|
|
}
|
|||
|
|
void PrivateTableInfo::restAgainValue()
|
|||
|
|
{
|
|||
|
|
bStart = false;
|
|||
|
|
bInEnd = false;
|
|||
|
|
|
|||
|
|
kDismissChairID.clear();
|
|||
|
|
kNotAgreeChairID.clear();
|
|||
|
|
fDismissPastTime = 0;
|
|||
|
|
dwFinishPlayCout = 0;
|
|||
|
|
dwStartPlayCout = 0;
|
|||
|
|
fAgainPastTime = 0.0f;
|
|||
|
|
|
|||
|
|
ZeroMemory(bAutoStart, sizeof(bAutoStart));
|
|||
|
|
ZeroMemory(lPlayerWinLose,sizeof(lPlayerWinLose));
|
|||
|
|
ZeroMemory(lScoreInfoArray, sizeof(lScoreInfoArray));
|
|||
|
|
|
|||
|
|
kTotalRecord = tagPrivateRandTotalRecord();
|
|||
|
|
|
|||
|
|
if (pITableFrame)
|
|||
|
|
{
|
|||
|
|
kTotalRecord.kScore.resize(pITableFrame->GetChairCount());
|
|||
|
|
kTotalRecord.kUserID.resize(pITableFrame->GetChairCount());
|
|||
|
|
kTotalRecord.kNickName.resize(pITableFrame->GetChairCount());
|
|||
|
|
kTotalRecord.kHeadHttp.resize(pITableFrame->GetChairCount());
|
|||
|
|
|
|||
|
|
kTotalRecord.dwKindID = pITableFrame->GetGameServiceAttrib()->wKindID;
|
|||
|
|
kTotalRecord.dwVersion = pITableFrame->GetGameServiceAttrib()->dwClientVersion;
|
|||
|
|
for (int i = 0;i<(int)getChairCout();i++)
|
|||
|
|
{
|
|||
|
|
kTotalRecord.kScore[i] = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pITableFrame->ResetPrivateEndInfo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
void PrivateTableInfo::restValue()
|
|||
|
|
{
|
|||
|
|
bStart = false;
|
|||
|
|
bInEnd = false;
|
|||
|
|
bPlayCoutIdex = 0;
|
|||
|
|
bGameTypeIdex = 0;
|
|||
|
|
dwGameRuleIdex = 0;
|
|||
|
|
cbRoomType = Type_Private;
|
|||
|
|
dwPlayCout = 0;
|
|||
|
|
dwRoomNum = 0;
|
|||
|
|
//cbCurJiang = 0;
|
|||
|
|
dwCreaterUserID = 0;
|
|||
|
|
fDismissPastTime = 0;
|
|||
|
|
fCreateTime = 0;
|
|||
|
|
dwFinishPlayCout = 0;
|
|||
|
|
dwStartPlayCout = 0;
|
|||
|
|
dwPlayCost = 0;
|
|||
|
|
fAgainPastTime = 0.0f;
|
|||
|
|
kHttpChannel = "";
|
|||
|
|
dwUnionCode = 0; // <20><><EFBFBD><EFBFBD>ID
|
|||
|
|
dwUnionConsumerID = 0; // <20><><EFBFBD>ļ<EFBFBD>¼ID
|
|||
|
|
cbUnionGoldOpen = 0;
|
|||
|
|
m_dwDaikaiIndex = 0;
|
|||
|
|
//m_isDismiss = true;
|
|||
|
|
fGameStartTime = 0.0f;
|
|||
|
|
lCreateScore = 0;
|
|||
|
|
|
|||
|
|
ZeroMemory(fOfflineTimes, sizeof(fOfflineTimes));
|
|||
|
|
ZeroMemory(bAutoStart, sizeof(bAutoStart));
|
|||
|
|
ZeroMemory(lScoreInfoArray, sizeof(lScoreInfoArray));
|
|||
|
|
|
|||
|
|
mReadyInfo.reset();
|
|||
|
|
|
|||
|
|
restAgainValue();
|
|||
|
|
}
|
|||
|
|
void PrivateTableInfo::newRandChild()
|
|||
|
|
{
|
|||
|
|
tagPrivateRandRecordChild kRecordChild;
|
|||
|
|
kRecordChild.dwKindID = pITableFrame->GetGameServiceAttrib()->wKindID;
|
|||
|
|
kRecordChild.dwVersion = pITableFrame->GetGameServiceAttrib()->dwClientVersion;
|
|||
|
|
kRecordChild.kScore.resize(getChairCout());
|
|||
|
|
for (int i = 0;i<(int)getChairCout();i++)
|
|||
|
|
{
|
|||
|
|
IServerUserItem * pServerItem = pITableFrame->GetTableUserItem(i);
|
|||
|
|
if ( NULL != pServerItem )
|
|||
|
|
{
|
|||
|
|
kTotalRecord.kNickName[i] = pServerItem->GetNickName();
|
|||
|
|
kTotalRecord.kUserID[i] = pServerItem->GetUserID();
|
|||
|
|
|
|||
|
|
kRecordChild.kScore[i] = 0;
|
|||
|
|
kTotalRecord.kHeadHttp[i] = pServerItem->GetUserInfo()->szHeadHttp;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GetLocalTime(&kRecordChild.kPlayTime);
|
|||
|
|
kTotalRecord.kRecordChild.push_back(kRecordChild);
|
|||
|
|
}
|
|||
|
|
WORD PrivateTableInfo::getChairCout()
|
|||
|
|
{
|
|||
|
|
return pITableFrame->GetChairCount();
|
|||
|
|
}
|
|||
|
|
void PrivateTableInfo::setRoomNum(DWORD RoomNum)
|
|||
|
|
{
|
|||
|
|
kTotalRecord.iRoomNum = (int)RoomNum;
|
|||
|
|
dwRoomNum = RoomNum;
|
|||
|
|
}
|
|||
|
|
void PrivateTableInfo::writeSocre(tagScoreInfo ScoreInfoArray[], WORD wScoreCount,DataStream& daUserDefine)
|
|||
|
|
{
|
|||
|
|
if (kTotalRecord.kRecordChild.size() == 0)
|
|||
|
|
{
|
|||
|
|
ASSERT(false);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
tagPrivateRandRecordChild& kRecord = kTotalRecord.kRecordChild.back();
|
|||
|
|
if (kRecord.kScore.size() < wScoreCount)
|
|||
|
|
{
|
|||
|
|
ASSERT(false);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
for(WORD i = 0;i < wScoreCount;i++)
|
|||
|
|
{
|
|||
|
|
kRecord.kScore[i] += (int)ScoreInfoArray[i].lScore;
|
|||
|
|
kTotalRecord.kScore[i] += (int)ScoreInfoArray[i].lScore;
|
|||
|
|
lPlayerWinLose[i] += ScoreInfoArray[i].lScore;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GetLocalTime(&kRecord.kPlayTime);
|
|||
|
|
kRecord.kRecordGame = daUserDefine;
|
|||
|
|
|
|||
|
|
kTotalRecord.cbGameCount++; // ͳ<><CDB3><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsCardAARule()
|
|||
|
|
{
|
|||
|
|
return ((dwGameRuleIdex & ePrivateTableCommonRule_CardAA) == ePrivateTableCommonRule_CardAA);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsAutoUserCountRule()
|
|||
|
|
{
|
|||
|
|
return ((dwGameRuleIdex & ePrivateTableCommonRule_auto) == ePrivateTableCommonRule_auto);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsAllAutoUserOK()
|
|||
|
|
{
|
|||
|
|
WORD wChairCount = pITableFrame->GetChairCount();
|
|||
|
|
|
|||
|
|
//<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD wReadyUserCount = 0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
for (WORD i = 0; i < wChairCount; i++)
|
|||
|
|
{
|
|||
|
|
//<2F><>ȡ<EFBFBD>û<EFBFBD>
|
|||
|
|
IServerUserItem * pIServerUserItem = pITableFrame->GetTableUserItem(i);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
if (pIServerUserItem != NULL)
|
|||
|
|
{
|
|||
|
|
if (!bAutoStart[i]) return false;
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wReadyUserCount++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (wReadyUserCount >= 2L) return true;
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsEveryTimeRoomScoreType()
|
|||
|
|
{
|
|||
|
|
return ((cbEnterRoomScoreType & ePrivateRoomScoreType_EveryTime) == ePrivateRoomScoreType_EveryTime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsSetOneTimeRoomScoreType()
|
|||
|
|
{
|
|||
|
|
return ((cbEnterRoomScoreType & ePrivateRoomScoreType_SetOneTime) == ePrivateRoomScoreType_SetOneTime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsCanJoinTable(IServerUserItem * pIServerUserItem, CString& refStrMsg)
|
|||
|
|
{
|
|||
|
|
if ( (dwGameRuleIdex & ePrivateTableCommonRule_NOSameIPAddr) == ePrivateTableCommonRule_NOSameIPAddr )
|
|||
|
|
{
|
|||
|
|
DWORD dwJoinClientAddr = pIServerUserItem->GetClientAddr();
|
|||
|
|
WORD nChairCount = getChairCout();
|
|||
|
|
for (WORD i = 0; i < nChairCount; i++)
|
|||
|
|
{
|
|||
|
|
IServerUserItem * pServerItem = pITableFrame->GetTableUserItem(i);
|
|||
|
|
if (pServerItem == NULL) continue;
|
|||
|
|
|
|||
|
|
if (dwJoinClientAddr == pServerItem->GetClientAddr())
|
|||
|
|
{
|
|||
|
|
refStrMsg = TEXT("<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷿<EFBFBD>䡣");
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BYTE PrivateTableInfo::GetStartMode()
|
|||
|
|
{
|
|||
|
|
if (NULL == pITableFrame)
|
|||
|
|
{ //<2F>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>϶<EFBFBD><CFB6>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
return START_MODE_FULL_READY;
|
|||
|
|
}
|
|||
|
|
return pITableFrame->GetStartMode();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>Ϸ<EFBFBD><CFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD>ɢ;
|
|||
|
|
bool PrivateTableInfo::IsDismissRoom()
|
|||
|
|
{
|
|||
|
|
if (IsOffLineUser())
|
|||
|
|
{
|
|||
|
|
return (fGameStartTime > 120.f);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PrivateTableInfo::IsOffLineUser()
|
|||
|
|
{
|
|||
|
|
WORD nChairCount = getChairCout();
|
|||
|
|
for (WORD i = 0; i < nChairCount; i++)
|
|||
|
|
{
|
|||
|
|
IServerUserItem * pServerItem = pITableFrame->GetTableUserItem(i);
|
|||
|
|
if (pServerItem == NULL) continue;
|
|||
|
|
|
|||
|
|
if (pServerItem->GetUserStatus() == US_OFFLINE)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|