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
|
||
|
||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//构造函数
|
||
PrivateTableInfo::PrivateTableInfo()
|
||
:pITableFrame(NULL)
|
||
{
|
||
restValue();
|
||
}
|
||
|
||
PrivateTableInfo::~PrivateTableInfo(void)
|
||
{
|
||
//关闭定时器
|
||
}
|
||
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; // 工会ID
|
||
dwUnionConsumerID = 0; // 消耗记录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++; // 统计游戏局数;
|
||
}
|
||
|
||
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();
|
||
|
||
//准备人数
|
||
WORD wReadyUserCount = 0;
|
||
|
||
//设置用户
|
||
for (WORD i = 0; i < wChairCount; i++)
|
||
{
|
||
//获取用户
|
||
IServerUserItem * pIServerUserItem = pITableFrame->GetTableUserItem(i);
|
||
|
||
//设置用户
|
||
if (pIServerUserItem != NULL)
|
||
{
|
||
if (!bAutoStart[i]) return false;
|
||
|
||
//用户计数
|
||
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("该房间存在与你IP相同的玩家,无法加入房间。");
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
BYTE PrivateTableInfo::GetStartMode()
|
||
{
|
||
if (NULL == pITableFrame)
|
||
{ //走到这个地方肯定是出错了;
|
||
return START_MODE_FULL_READY;
|
||
}
|
||
return pITableFrame->GetStartMode();
|
||
}
|
||
|
||
// 游戏开始不满2分钟,不可以解散;
|
||
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;
|
||
}
|