Files
wnmj/Servers/服务器组件/私人场服务/PrivateTableInfo.cpp

256 lines
6.1 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#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;
}