#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; }