Files
wnmj/Servers/服务器组件/比赛服务/LockTimeMatch.cpp

2136 lines
62 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "LockTimeMatch.h"
#include "..\<5C><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\DataBasePacket.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define INVALID_VALUE 0xFFFF //<2F><>Чֵ
//////////////////////////////////////////////////////////////////////////
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
#define IDI_DISTRIBUTE_USER (IDI_MATCH_MODULE_START+50) //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CLockTimeMatch::CLockTimeMatch()
{
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
m_MatchStatus=MS_NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pMatchOption=NULL;
m_pGameServiceOption=NULL;
m_pGameServiceAttrib=NULL;
//<2F>ں˽ӿ<CBBD>
m_ppITableFrame=NULL;
m_pITimerEngine=NULL;
m_pIDataBaseEngine=NULL;
m_pITCPNetworkEngineEvent=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
m_pIGameServiceFrame=NULL;
m_pIServerUserManager=NULL;
m_pAndroidUserManager=NULL;
m_AllMatchScorePtrMap.clear();
m_AllMatchScorePtrVector.clear();
}
CLockTimeMatch::~CLockTimeMatch(void)
{
//<2F>ͷ<EFBFBD><CDB7><EFBFBD>Դ
SafeDeleteArray(m_ppITableFrame);
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>
m_pITimerEngine->KillTimer(IDI_CHECK_END_MATCH);
m_pITimerEngine->KillTimer(IDI_DISTRIBUTE_USER);
//<2F>Ƴ<EFBFBD>Ԫ<EFBFBD><D4AA>
m_DistributeManage.RemoveAll();
ReleaseMatchScore();
}
//<2F>ӿڲ<D3BF>ѯ
VOID* CLockTimeMatch::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
{
QUERYINTERFACE(IGameMatchItem,Guid,dwQueryVer);
QUERYINTERFACE(IMatchEventSink,Guid,dwQueryVer);
QUERYINTERFACE(IServerUserItemSink,Guid,dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(IGameMatchItem,Guid,dwQueryVer);
return NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::BindTableFrame(ITableFrame * pTableFrame,WORD wTableID)
{
if(pTableFrame==NULL || wTableID>m_pGameServiceOption->wTableCount)
{
ASSERT(false);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTableFrameHook * pTableFrameHook=new CTableFrameHook();
pTableFrameHook->InitTableFrameHook(QUERY_OBJECT_PTR_INTERFACE(pTableFrame,IUnknownEx));
pTableFrameHook->SetMatchEventSink(QUERY_OBJECT_PTR_INTERFACE(this,IUnknownEx));
//<2F><><EFBFBD>ýӿ<C3BD>
pTableFrame->SetTableFrameHook(QUERY_OBJECT_PTR_INTERFACE(pTableFrameHook,IUnknownEx));
m_ppITableFrame[wTableID]=pTableFrame;
return true;
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӿ<EFBFBD>
bool CLockTimeMatch::InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pMatchOption=MatchManagerParameter.pGameMatchOption;
m_pGameServiceOption=MatchManagerParameter.pGameServiceOption;
m_pGameServiceAttrib=MatchManagerParameter.pGameServiceAttrib;
//<2F>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
m_pITimerEngine=MatchManagerParameter.pITimerEngine;
m_pIDataBaseEngine=MatchManagerParameter.pICorrespondManager;
m_pITCPNetworkEngineEvent=MatchManagerParameter.pTCPNetworkEngine;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIGameServiceFrame=MatchManagerParameter.pIMainServiceFrame;
m_pIServerUserManager=MatchManagerParameter.pIServerUserManager;
m_pAndroidUserManager=MatchManagerParameter.pIAndroidUserManager;
m_pIServerUserItemSink=MatchManagerParameter.pIServerUserItemSink;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_DistributeManage.SetDistributeRule(m_pGameServiceOption->cbDistributeRule);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_ppITableFrame==NULL)
{
m_ppITableFrame=new ITableFrame*[m_pGameServiceOption->wTableCount];
}
//<2F><><EFBFBD><EFBFBD><E3B3A1>;
m_pMatchOption->dwMatchNO = CalcMatchNo();
if (m_pMatchOption->MatchType.LockTime.dwEndDelayTime == 0)
m_pMatchOption->MatchType.LockTime.dwEndDelayTime = 600;
//<2F><><EFBFBD><EFBFBD>״̬;
m_TimeLastMatch = CTime::GetCurrentTime();
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
DWORD dwStartInterval = GetMatchStartInterval();
if(dwStartInterval>0)
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>;
m_pITimerEngine->SetTimer(IDI_CHECK_START_MATCH,dwStartInterval*1000L,TIMES_INFINITY,NULL);
}
else
{
//<2F><>ʾ<EFBFBD><CABE>Ϣ;
LPCTSTR pszDescribe = TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>!");
CTraceService::TraceString(pszDescribe, TraceLevel_Warning);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>ֹ<EFBFBD><D6B9>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>);
m_pITimerEngine->SetTimer(IDI_LOAD_RANKDATA, 10000L, 1, NULL);
return true;
}
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
bool CLockTimeMatch::OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)
{
switch(dwTimerID)
{
case IDI_DISTRIBUTE_USER: //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
{
//ִ<>з<EFBFBD><D0B7><EFBFBD>
PerformDistribute();
return true;
}
case IDI_CHECK_START_MATCH: //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE cbMatchStatus = m_MatchStatus;
//<2F><><EFBFBD><EFBFBD>״̬;
UpdateMatchStatus();
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>;
if (m_MatchStatus == MS_WAITPLAY)
{
m_pITimerEngine->SetTimer(IDI_CHECK_START_MATCH, 2000L, TIMES_INFINITY, NULL);
if (cbMatchStatus != m_MatchStatus)
{
m_pIGameServiceFrame->SendData(BG_COMPUTER, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &m_MatchStatus, sizeof(m_MatchStatus));
SendMatchInfo(NULL);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ;
else if (m_MatchStatus == MS_MATCHING)
{
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>;
m_pITimerEngine->KillTimer(IDI_CHECK_START_MATCH);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pITimerEngine->SetTimer(IDI_CHECK_END_MATCH, 5000, TIMES_INFINITY, 0);
//ִ<>з<EFBFBD><D0B7><EFBFBD>;
m_pITimerEngine->SetTimer(IDI_DISTRIBUTE_USER, m_pGameServiceOption->wDistributeTimeSpace * 1000, TIMES_INFINITY, NULL);
//<2F><><EFBFBD><EFBFBD>״̬;
m_pIGameServiceFrame->SendData(BG_ALL_CLIENT, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &m_MatchStatus, sizeof(m_MatchStatus));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
DBR_GR_MatchStart MatchStart;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ;
MatchStart.dwMatchID = m_pMatchOption->dwMatchID;
MatchStart.dwMatchNO = m_pMatchOption->dwMatchNO;
MatchStart.cbMatchType = m_pMatchOption->cbMatchType;
MatchStart.wServerID = m_pGameServiceOption->wServerID;
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pIDataBaseEngine->PostDataBaseRequest(0, DBR_GR_MATCH_START, 0, &MatchStart, sizeof(MatchStart));
//SendMatchInfo(NULL);
}
return true;
}
case IDI_CHECK_END_MATCH: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE cbMatchStatus = m_MatchStatus;
//<2F><><EFBFBD><EFBFBD>״̬;
UpdateMatchStatus();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_MatchStatus == MS_WAITEND)
{
if (cbMatchStatus != MS_WAITEND)
{
//<2F><><EFBFBD><EFBFBD>״̬
BYTE cbMatchStatus = MS_WAITEND;
m_pIGameServiceFrame->SendData(BG_ALL_CLIENT, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &cbMatchStatus, sizeof(cbMatchStatus));
//<2F><>ȡʱ<C8A1><CAB1>
CTime CurTime = CTime::GetCurrentTime();
CTime MatchEndTime(m_pMatchOption->MatchType.LockTime.MatchEndTime);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bMatchOver = (CurTime >= MatchEndTime);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WORD wUserIndex = 0;
TCHAR szMessage[128];
IServerUserItem *pIServerUserItem = NULL;
DWORD dwEndDelayMinutes = m_pMatchOption->MatchType.LockTime.dwEndDelayTime / 60;
do
{
pIServerUserItem = m_pIServerUserManager->EnumUserItem(wUserIndex++);
if (pIServerUserItem == NULL)
{
break;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>;
if (pIServerUserItem->GetUserStatus() == US_PLAYING)
{
if (bMatchOver == false)
{
_sntprintf(szMessage, CountArray(szMessage), TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>"), dwEndDelayMinutes);
//m_pIGameServiceFrame->SendGameMessage(pIServerUserItem, szMessage, SMT_CHAT | SMT_GLOBAL);
m_pIGameServiceFrame->SendGameMessage(pIServerUserItem, szMessage, SMT_TABLE_ROLL);
}
else
{
_sntprintf(szMessage, CountArray(szMessage), TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD>غϲ<D8BA><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>"), dwEndDelayMinutes);
//m_pIGameServiceFrame->SendGameMessage(pIServerUserItem, szMessage, SMT_CHAT | SMT_GLOBAL);
m_pIGameServiceFrame->SendGameMessage(pIServerUserItem, szMessage, SMT_TABLE_ROLL);
}
}
else
{
if (bMatchOver == false)
{
_sntprintf(szMessage, CountArray(szMessage), TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μӣ<EFBFBD>"));
m_pIGameServiceFrame->SendGameMessage(pIServerUserItem, szMessage, SMT_CHAT | SMT_EJECT | SMT_GLOBAL | SMT_CLOSE_GAME);
}
else
{
//<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
_sntprintf(szMessage, CountArray(szMessage), TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><><EFBFBD>Ӻ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>"), dwEndDelayMinutes);
m_pIGameServiceFrame->SendGameMessage(pIServerUserItem, szMessage, SMT_CHAT | SMT_EJECT | SMT_GLOBAL | SMT_CLOSE_GAME);
}
}
} while (true);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_MatchStatus == MS_MATCHEND)
{
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>
m_pITimerEngine->KillTimer(IDI_CHECK_END_MATCH);
m_pITimerEngine->KillTimer(IDI_DISTRIBUTE_USER);
//<2F><><EFBFBD><EFBFBD>״̬
BYTE cbMatchStatus=MS_MATCHEND;
m_pIGameServiceFrame->SendData(BG_ALL_CLIENT,MDM_GR_MATCH,SUB_GR_MATCH_STATUS,&cbMatchStatus,sizeof(cbMatchStatus));
//<2F><>ɢ<EFBFBD><C9A2>Ϸ;
for(INT i=0; i<m_pGameServiceOption->wTableCount; i++)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>;
ITableFrame * pITableFrame=m_ppITableFrame[i];
ASSERT(pITableFrame!=NULL);
if (pITableFrame==NULL) continue;
//<2F><>ɢ<EFBFBD><C9A2>Ϸ;
if(pITableFrame->IsGameStarted())
{
pITableFrame->DismissGame();
}
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
PerformAllUserStandUp(pITableFrame);
}
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_DistributeManage.RemoveAll();
//<2F><>ȡʱ<C8A1><CAB1>
CTime CurTime = CTime::GetCurrentTime();
CTime MatchEndTime(m_pMatchOption->MatchType.LockTime.MatchEndTime);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( IsRoundMatchMode() || CurTime >= MatchEndTime)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
DBR_GR_MatchOver MatchOver;
ZeroMemory(&MatchOver,sizeof(MatchOver));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
MatchOver.cbMatchType=MATCH_TYPE_LOCKTIME;
MatchOver.dwMatchID=m_pMatchOption->dwMatchID;
MatchOver.dwMatchNO=m_pMatchOption->dwMatchNO;
MatchOver.wServerID=m_pGameServiceOption->wServerID;
MatchOver.wPlayCount = m_pMatchOption->MatchType.LockTime.wMatchPlayCount;
MatchOver.bMatchFinish = (CurTime >= MatchEndTime) ? TRUE : FALSE;
//<2F><><EFBFBD><EFBFBD><E6BFAA>;
if (IsNormalMatchMode())
{
MatchOver.MatchEndTime = m_pMatchOption->MatchType.LockTime.MatchEndTime;
MatchOver.MatchStartTime = m_pMatchOption->MatchType.LockTime.MatchStartTime;
}
//ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
if (IsRoundMatchMode())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
SYSTEMTIME SystemTimeCurr;
CurTime.GetAsSystemTime(SystemTimeCurr);
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
SystemTimeCurr.wHour = m_pMatchOption->MatchType.LockTime.MatchStartTime.wHour;
SystemTimeCurr.wMinute = m_pMatchOption->MatchType.LockTime.MatchStartTime.wMinute;
SystemTimeCurr.wSecond = m_pMatchOption->MatchType.LockTime.MatchStartTime.wSecond;
//<2F><>ʼʱ<CABC><CAB1>;
MatchOver.MatchStartTime = SystemTimeCurr;
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
SystemTimeCurr.wHour = m_pMatchOption->MatchType.LockTime.MatchEndTime.wHour;
SystemTimeCurr.wMinute = m_pMatchOption->MatchType.LockTime.MatchEndTime.wMinute;
SystemTimeCurr.wSecond = m_pMatchOption->MatchType.LockTime.MatchEndTime.wSecond;
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
MatchOver.MatchEndTime = SystemTimeCurr;
}
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pIDataBaseEngine->PostDataBaseRequest(0,DBR_GR_MATCH_OVER,0,&MatchOver,sizeof(MatchOver));
//<2F>л<EFBFBD>ʱ<EFBFBD><CAB1>;
if (IsRoundMatchMode() && CurTime < MatchEndTime)
{
//<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
TCHAR szMessage[128] = TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μӣ<EFBFBD>");
m_pIGameServiceFrame->SendGameMessage(szMessage, SMT_CHAT | SMT_EJECT | SMT_GLOBAL | SMT_CLOSE_GAME);
//<2F>л<EFBFBD>״̬;
m_pITimerEngine->SetTimer(IDI_SWITCH_STATUS, 2000, TIMES_INFINITY, NULL);
}
return true;
}
}
return true;
}
case IDI_SWITCH_STATUS:
{
//<2F>ж<EFBFBD>״̬;
if (m_MatchStatus != MS_MATCHEND) return true;
if (!IsRoundMatchMode()) return true;
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>;
CTime curTime = CTime::GetCurrentTime();
if (m_TimeLastMatch.GetDay() == curTime.GetDay()) return true;
//<2F><><EFBFBD><EFBFBD><E3B3A1>;
m_pMatchOption->dwMatchNO = CalcMatchNo();
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>;
m_MatchStatus = MS_NULL;
m_TimeLastMatch = curTime;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
DWORD dwStartInterval = GetMatchStartInterval();
if (dwStartInterval > 0)
{
m_pITimerEngine->SetTimer(IDI_CHECK_START_MATCH, dwStartInterval * 1000L, TIMES_INFINITY, NULL);
}
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>;
m_pITimerEngine->KillTimer(IDI_SWITCH_STATUS);
//<2F><><EFBFBD><EFBFBD>״̬;
BYTE cbMatchStatus = MS_NULL;
m_pIGameServiceFrame->SendData(BG_COMPUTER, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &cbMatchStatus, sizeof(cbMatchStatus));
return true;
}
case IDI_LOAD_RANKDATA:
{
DBR_GR_MatchLoadRankData loadRankData;
ZeroMemory(&loadRankData, sizeof(DBR_GR_MatchLoadRankData));
loadRankData.dwMatchID = m_pMatchOption->dwMatchID;
loadRankData.dwMatchNO = m_pMatchOption->dwMatchNO;
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pIDataBaseEngine->PostDataBaseRequest(0, DBR_GR_MATCH_LOADRANKDATA, 0, &loadRankData, sizeof(loadRankData));
}
}
return true;
}
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
bool CLockTimeMatch::OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
{
switch(wRequestID)
{
case DBO_GR_MATCH_SIGNUP_RESULT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>;
if (pIServerUserItem == NULL) return true;
if (wDataSize > sizeof(DBO_GR_MatchSingupResult)) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>;
DBO_GR_MatchSingupResult * pMatchSignupResult = (DBO_GR_MatchSingupResult*)pData;
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>;
if (pMatchSignupResult->bResultCode == false)
{
//<2F><>ʾ<EFBFBD><CABE>Ϣ<EFBFBD><CFA2>Ϊ<EFBFBD><CEAA>;
if (pMatchSignupResult->szDescribeString[0] != '\0')
{
//m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem, pMatchSignupResult->szDescribeString, SMT_EJECT);
SendMatchJoinResult(pIServerUserItem, 0, pMatchSignupResult->szDescribeString);
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>;
//if (m_MatchStatus == MS_NULL)
//{
// //<2F><>Ϣ֪ͨ;
// m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem, TEXT("<22><>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱǰ<CAB1><C7B0><EFBFBD>μӱ<CEBC><D3B1><EFBFBD><EFBFBD><EFBFBD>"), SMT_CHAT);
//}
//else
//{
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
// if (InsertDistribute(pIServerUserItem) == false) return true;
// //<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>;
// SendMatchUserInitScore(pIServerUserItem);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
// m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem, TEXT("ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ժ󡣡<D4BA><F3A1A3A1><EFBFBD>"), SMT_CHAT);
// SendMatchInfo(NULL);
//}
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>;
SendMatchUserInitScore(pIServerUserItem);
pIServerUserItem->SetUserMatchStatus(MUS_SIGNUP);
if (pIServerUserItem->IsAndroidUser() == false)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ;
CMD_GR_MatchGoldUpdate MatchGoldUpdate;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>;
MatchGoldUpdate.lCurrGold = pMatchSignupResult->lCurrGold;
MatchGoldUpdate.lCurrIngot = pMatchSignupResult->lCurrIngot;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_GOLDUPDATE, &MatchGoldUpdate, sizeof(MatchGoldUpdate));
}
if (m_MatchStatus == MS_NULL)
{
SendMatchJoinResult(pIServerUserItem, 2, TEXT("<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱǰ<EFBFBD><EFBFBD><EFBFBD>μӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
else
{
SendMatchJoinResult(pIServerUserItem, 1, TEXT("ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŭ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ󡣡<EFBFBD><EFBFBD><EFBFBD>"));
}
tagMatchScore* pMatchScore = FindMatchScore(pIServerUserItem);
if (NULL != pMatchScore)
{
pMatchScore->pUserItem = pIServerUserItem;
}
else
{
InsertAllMatchScoreMap(pIServerUserItem);
}
SendMatchWaitTip(pIServerUserItem);
break;
}
case DBO_GR_MATCH_RANK_LIST: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
ASSERT(wDataSize<=sizeof(DBO_GR_MatchRankList));
if(wDataSize>sizeof(DBO_GR_MatchRankList)) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DBO_GR_MatchRankList * pMatchRankList = (DBO_GR_MatchRankList*)pData;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bRewardUser=true;
tagMatchRankInfo * pMatchRankInfo=NULL;
IServerUserItem * pIRewardUserItem=NULL;
//<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>
for(WORD wIndex=0;wIndex<pMatchRankList->wUserCount;wIndex++)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pMatchRankInfo=&pMatchRankList->MatchRankInfo[wIndex];
pIRewardUserItem=m_pIServerUserManager->SearchUserItem(pMatchRankInfo->dwUserID);
if (pIRewardUserItem!=NULL && pIRewardUserItem->IsAndroidUser()==true) continue;
//д<><EFBFBD><EBBDB1>
WriteUserAward(pIRewardUserItem,pMatchRankInfo);
//<2F><><EFBFBD>ñ<EFBFBD>ʶ
if (pIRewardUserItem)
pIRewardUserItem->SetMatchData(&bRewardUser);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
WORD wUserIndex=0;
while (true)
{
pIRewardUserItem=m_pIServerUserManager->EnumUserItem(wUserIndex++);
if (pIRewardUserItem==NULL) break;
if (pIRewardUserItem->IsAndroidUser()==true) continue;
if (pIRewardUserItem->GetMatchData()==&bRewardUser)
{
pIRewardUserItem->SetMatchData(NULL);
continue;
}
//<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
TCHAR szMessage[128]=TEXT("<EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD>鿴ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_pIGameServiceFrame->SendGameMessage(pIRewardUserItem,szMessage,SMT_CHAT|SMT_EJECT|SMT_GLOBAL|SMT_CLOSE_GAME);
}
break;
}
case DBO_GR_MATCH_REWARD_RESULT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
if(pIServerUserItem==NULL) return true;
if(wDataSize>sizeof(DBR_GR_MatchRewardResult)) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DBR_GR_MatchRewardResult * pMatchRewardResult = (DBR_GR_MatchRewardResult*)pData;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
if(pMatchRewardResult->bResultCode==true)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_MatchGoldUpdate MatchGoldUpdate;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
MatchGoldUpdate.lCurrGold=pMatchRewardResult->lCurrGold;
MatchGoldUpdate.lCurrIngot=pMatchRewardResult->lCurrIngot;
MatchGoldUpdate.dwCurrExprience=pMatchRewardResult->dwCurrExperience;
MatchGoldUpdate.lInsureSocre = pMatchRewardResult->lInsureSocre;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIGameServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_GOLDUPDATE,&MatchGoldUpdate,sizeof(MatchGoldUpdate));
}
break;
}
case DBO_GR_MATCH_RANKDATA_LIST:
{
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>;
ASSERT(wDataSize <= sizeof(DBO_GR_MatchRankDataList));
int nSize = sizeof(DBO_GR_MatchRankDataList);
if (wDataSize > sizeof(DBO_GR_MatchRankDataList)) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DBO_GR_MatchRankDataList * pMatchRankDataList = (DBO_GR_MatchRankDataList*)pData;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
tagMatchRankDataInfo * pMatchRankDataInfo = NULL;
for (WORD wIndex = 0; wIndex < pMatchRankDataList->wUserCount; wIndex++)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
pMatchRankDataInfo = &pMatchRankDataList->MatchRankInfo[wIndex];
InsertAllMatchScoreMap(pMatchRankDataInfo);
}
break;
}
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CLockTimeMatch::OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_GR_MATCH_FEE: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(wDataSize == sizeof(CMD_GR_C_Match_Fee));
if (wDataSize != sizeof(CMD_GR_C_Match_Fee)) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CMD_GR_C_Match_Fee* pMatchFee = (CMD_GR_C_Match_Fee*)pData;
if (pMatchFee->dwChannelID != 0 && pMatchFee->dwChannelID != m_pMatchOption->MatchType.LockTime.dwChannelID)
{ //<2F><><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD>;
//m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem, TEXT("<22><><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD>"), SMT_EJECT);
SendMatchJoinResult(pIServerUserItem, 0, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return false;//<2F><><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>false<73>ͻ<EFBFBD><CDBB>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
//return true;
}
if (pMatchFee->dwInviteCode != 0 && pMatchFee->dwInviteCode != m_pMatchOption->MatchType.LockTime.dwInviteCode)
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB2BB>;
//m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem, TEXT("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SMT_EJECT);
SendMatchJoinResult(pIServerUserItem, 0, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return false;//<2F><><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>false<73>ͻ<EFBFBD><CDBB>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
//return true;
}
//<2F>ж<EFBFBD>ʱ<EFBFBD><CAB1>;
TCHAR szDescribe[256];
WORD wMessageType;
if (VerifySignupMatchTime(szDescribe, CountArray(szDescribe), wMessageType) == false)
{
SendMatchJoinResult(pIServerUserItem, 0, szDescribe);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
DBR_GR_MatchSignup MatchSignup;
ZeroMemory(&MatchSignup, sizeof(MatchSignup));
//<2F><><EFBFBD><EFBFBD><EFBFBD>
MatchSignup.dwUserID = pIServerUserItem->GetUserID();
MatchSignup.lMatchFee = m_pMatchOption->lMatchFee;
MatchSignup.dwInoutIndex = pIServerUserItem->GetInoutIndex();
MatchSignup.dwClientAddr = pIServerUserItem->GetClientAddr();
MatchSignup.dwMatchID = m_pMatchOption->dwMatchID;
MatchSignup.dwMatchNO = m_pMatchOption->dwMatchNO;
MatchSignup.cbMatchType = m_pMatchOption->cbMatchType;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lstrcpyn(MatchSignup.szMachineID, pIServerUserItem->GetMachineID(), CountArray(MatchSignup.szMachineID));
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(MatchSignup.dwUserID, DBR_GR_MATCH_SIGNUP, dwSocketID, &MatchSignup, sizeof(MatchSignup));
return true;
}
case SUB_GR_LEAVE_MATCH: //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>;
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pIServerUserItem != NULL);
if (pIServerUserItem == NULL)
{
return false;
}
OnEventUserQuitMatch(pIServerUserItem, UNSIGNUP_REASON_PLAYER, 0, dwSocketID);
return true;
}
case SUB_GR_MATCH_CONTINUE:
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>;
ASSERT(pIServerUserItem != NULL);
if (pIServerUserItem == NULL)
{
return false;
}
OnEventUserJoinMatch(pIServerUserItem, 1, dwSocketID);
return true;
}
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_UserScore UserScore;
tagUserInfo * pUserInfo=pIServerUserItem->GetUserInfo();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UserScore.dwUserID=pUserInfo->dwUserID;
UserScore.UserScore.dwWinCount=pUserInfo->dwWinCount;
UserScore.UserScore.dwLostCount=pUserInfo->dwLostCount;
UserScore.UserScore.dwDrawCount=pUserInfo->dwDrawCount;
UserScore.UserScore.dwFleeCount=pUserInfo->dwFleeCount;
UserScore.UserScore.dwExperience=pUserInfo->dwExperience;
UserScore.UserScore.lLoveLiness=pUserInfo->lLoveLiness;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UserScore.UserScore.lGrade=pUserInfo->lGrade;
UserScore.UserScore.lInsure=pUserInfo->lInsure;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UserScore.UserScore.lScore=pUserInfo->lScore;
UserScore.UserScore.lScore+=pIServerUserItem->GetTrusteeScore();
UserScore.UserScore.lScore+=pIServerUserItem->GetFrozenedScore();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIGameServiceFrame->SendData(BG_COMPUTER,MDM_GR_USER,SUB_GR_USER_SCORE,&UserScore,sizeof(UserScore));
//<2F><><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ͬ<EFBFBD><CDAC>;
CMD_GF_S_ScoreMultiple ScoreMultiple;
ZeroMemory(&ScoreMultiple, sizeof(ScoreMultiple));
ScoreMultiple.dwUserID = pUserInfo->dwUserID;
ScoreMultiple.cbScoreMultiple = pUserInfo->cbScoreMultiple;
m_pIGameServiceFrame->SendData(BG_COMPUTER, MDM_GR_USER, SUB_GR_USER_SCOREMULTIPLE, &ScoreMultiple, sizeof(ScoreMultiple));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_MobileUserScore MobileUserScore;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MobileUserScore.dwUserID=pUserInfo->dwUserID;
MobileUserScore.UserScore.dwWinCount=pUserInfo->dwWinCount;
MobileUserScore.UserScore.dwLostCount=pUserInfo->dwLostCount;
MobileUserScore.UserScore.dwDrawCount=pUserInfo->dwDrawCount;
MobileUserScore.UserScore.dwFleeCount=pUserInfo->dwFleeCount;
MobileUserScore.UserScore.dwExperience=pUserInfo->dwExperience;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MobileUserScore.UserScore.lScore=pUserInfo->lScore;
MobileUserScore.UserScore.lScore+=pIServerUserItem->GetTrusteeScore();
MobileUserScore.UserScore.lScore+=pIServerUserItem->GetFrozenedScore();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIGameServiceFrame->SendDataBatchToMobileUser(pIServerUserItem->GetTableID(),MDM_GR_USER,SUB_GR_USER_SCORE,&MobileUserScore,sizeof(MobileUserScore));
//<2F><>ʱд<CAB1><D0B4>
if ((CServerRule::IsImmediateWriteScore(m_pGameServiceOption->dwServerRule)==true)&&(pIServerUserItem->IsVariation()==true))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DBR_GR_WriteGameScore WriteGameScore;
ZeroMemory(&WriteGameScore,sizeof(WriteGameScore));
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
WriteGameScore.dwUserID=pIServerUserItem->GetUserID();
WriteGameScore.dwDBQuestID=pIServerUserItem->GetDBQuestID();
WriteGameScore.dwClientAddr=pIServerUserItem->GetClientAddr();
WriteGameScore.dwInoutIndex=pIServerUserItem->GetInoutIndex();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
pIServerUserItem->DistillVariation(WriteGameScore.VariationInfo);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
WriteGameScore.dwMatchID=m_pMatchOption->dwMatchID;
WriteGameScore.dwMatchNO=m_pMatchOption->dwMatchNO;
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(WriteGameScore.dwUserID,DBR_GR_WRITE_GAME_SCORE,0L,&WriteGameScore,sizeof(WriteGameScore), TRUE);
}
return true;
}
//<2F>û<EFBFBD>״̬
bool CLockTimeMatch::OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID, WORD wOldChairID)
{
if(m_pIServerUserItemSink!=NULL)
{
return m_pIServerUserItemSink->OnEventUserItemStatus(pIServerUserItem,wOldTableID,wOldChairID);
}
return true;
}
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
bool CLockTimeMatch::OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight)
{
if(m_pIServerUserItemSink!=NULL)
{
return m_pIServerUserItemSink->OnEventUserItemRight(pIServerUserItem,dwAddRight,dwRemoveRight,bGameRight);
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD>¼
bool CLockTimeMatch::OnEventUserLogon(IServerUserItem * pIServerUserItem)
{
//<2F><><EFBFBD><EFBFBD>״̬
if(m_MatchStatus>MS_NULL)
{
//<2F><><EFBFBD><EFBFBD>״̬
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &m_MatchStatus, sizeof(m_MatchStatus));
SendMatchInfo(NULL);
}
SendTableUserMatchInfo(pIServerUserItem);
return true;
}
//<2F>û<EFBFBD><C3BB>dz<EFBFBD>
bool CLockTimeMatch::OnEventUserLogout(IServerUserItem * pIServerUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>
SendMatchInfo(NULL);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CLockTimeMatch::OnEventEnterMatch(DWORD dwSocketID ,VOID* pData,DWORD dwUserIP, bool bIsMobile)
{
//<2F>ж<EFBFBD>ʱ<EFBFBD><CAB1>
TCHAR szDescribe[256];
WORD wMessageType;
if (VerifyMatchTime(szDescribe,CountArray(szDescribe),wMessageType)==false)
{
m_pIGameServiceFrame->SendRoomMessage(dwSocketID,szDescribe,wMessageType|SMT_GLOBAL,dwUserIP==0);
return true;
}
//<2F>ֻ<EFBFBD><D6BB>û<EFBFBD>
if(bIsMobile == true)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CMD_GR_LogonMobile * pLogonMobile=(CMD_GR_LogonMobile *)pData;
pLogonMobile->szPassword[CountArray(pLogonMobile->szPassword)-1]=0;
pLogonMobile->szMachineID[CountArray(pLogonMobile->szMachineID)-1]=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DBR_GR_LogonMobile LogonMobile;
ZeroMemory(&LogonMobile,sizeof(LogonMobile));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LogonMobile.dwUserID=pLogonMobile->dwUserID;
LogonMobile.dwClientAddr=dwUserIP;
LogonMobile.dwMatchID=m_pMatchOption->dwMatchID;
LogonMobile.dwMatchNO=m_pMatchOption->dwMatchNO;
LogonMobile.cbDeviceType=pLogonMobile->cbDeviceType;
LogonMobile.wBehaviorFlags=pLogonMobile->wBehaviorFlags;
LogonMobile.wPageTableCount=pLogonMobile->wPageTableCount;
lstrcpyn(LogonMobile.szPassword,pLogonMobile->szPassword,CountArray(LogonMobile.szPassword));
lstrcpyn(LogonMobile.szMachineID,pLogonMobile->szMachineID,CountArray(LogonMobile.szMachineID));
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(LogonMobile.dwUserID,DBR_GR_LOGON_MOBILE,dwSocketID,&LogonMobile,sizeof(LogonMobile));
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CMD_GR_LogonUserID * pLogonUserID=(CMD_GR_LogonUserID *)pData;
pLogonUserID->szPassword[CountArray(pLogonUserID->szPassword)-1]=0;
pLogonUserID->szMachineID[CountArray(pLogonUserID->szMachineID)-1]=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DBR_GR_LogonUserID LogonUserID;
ZeroMemory(&LogonUserID,sizeof(LogonUserID));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LogonUserID.dwClientAddr=dwUserIP;
LogonUserID.dwUserID=pLogonUserID->dwUserID;
LogonUserID.dwMatchID=m_pMatchOption->dwMatchID;
LogonUserID.dwMatchNO=m_pMatchOption->dwMatchNO;
lstrcpyn(LogonUserID.szPassword,pLogonUserID->szPassword,CountArray(LogonUserID.szPassword));
lstrcpyn(LogonUserID.szMachineID,pLogonUserID->szMachineID,CountArray(LogonUserID.szMachineID));
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(LogonUserID.dwUserID,DBR_GR_LOGON_USERID,dwSocketID,&LogonUserID,sizeof(LogonUserID));
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason,DWORD dwSocketID)
{
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem == NULL) return false;
//<2F>ж<EFBFBD>״̬
if(pIServerUserItem->GetUserStatus()!=US_FREE || pIServerUserItem->GetTableID()!=INVALID_TABLE)
{
return false;
}
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ
if(m_MatchStatus==MS_NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),SMT_EJECT);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(m_MatchStatus==MS_MATCHEND)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),SMT_EJECT);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(InsertDistribute(pIServerUserItem)==false) return false;
//<2F><><EFBFBD>õȴ<C3B5><C8B4><EFBFBD><EFBFBD><EFBFBD>״̬;
pIServerUserItem->SetUserStatus(US_WAITDISTRIBUTE);
//<2F><><EFBFBD>ͳɼ<CDB3>
SendMatchUserScore(pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem, TEXT("ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŭ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ󡣡<EFBFBD><EFBFBD><EFBFBD>"), SMT_TABLE_ROLL);
//<2F><><EFBFBD><EFBFBD>֪ͨ;
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GF_FRAME, SUB_GF_WAIT_DISTRIBUTE, NULL, 0);
if (!pIServerUserItem->IsAndroidUser())
{
SendMatchInfo(NULL);
//SendTableUserMatchInfo(pIServerUserItem);
}
//<2F><><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD>¸<EFBFBD>ֵ;
tagMatchScore* pMatchScore = FindMatchScore(pIServerUserItem);
if (NULL != pMatchScore)
{
pMatchScore->pUserItem = pIServerUserItem;
}
else
{
InsertAllMatchScoreMap(pIServerUserItem);
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank, DWORD dwContextID)
{
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ״̬;
if (pIServerUserItem->GetUserStatus() >= US_PLAYING)
{
return true;
}
//<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD>׶<EFBFBD>;
BYTE cbUserEnlist = pIServerUserItem->GetUserMatchStatus();
if (cbUserEnlist == MS_MATCHING)
{
return true;
}
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
m_DistributeManage.RemoveDistributeNode(pIServerUserItem);
//<2F>Ƴ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Ϣ
m_DistributeManage.RemoveUserSameTableInfo(pIServerUserItem->GetUserID());
return true;
}
//<2F><>Ϸ<EFBFBD><CFB7>ʼ
bool CLockTimeMatch::OnEventGameStart(ITableFrame *pITableFrame, WORD wChairCount)
{
//<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ
SendTableUserMatchInfo(pITableFrame, INVALID_CHAIR);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
CMD_CM_SystemMessage SystemMessage;
ZeroMemory(&SystemMessage,sizeof(SystemMessage));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IServerUserItem *pIServerUserItem=NULL;
IServerUserItem *pITableUserItem=NULL;
for (INT i=0; i<pITableFrame->GetChairCount(); i++)
{
pIServerUserItem=pITableFrame->GetTableUserItem(i);
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) continue;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Ϣ
TCHAR szMessage[64]=TEXT("");
_sntprintf_s(szMessage, CountArray(szMessage),TEXT("<EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> %d <20>֡<EFBFBD>"),pIServerUserItem->GetUserPlayCount()+1);
lstrcpyn(SystemMessage.szString,szMessage,CountArray(SystemMessage.szString));
SystemMessage.wLength=CountStringBuffer(SystemMessage.szString);
SystemMessage.wType=SMT_CHAT;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
WORD wSendSize=sizeof(SystemMessage)-sizeof(SystemMessage.szString)+SystemMessage.wLength*sizeof(TCHAR);
pITableFrame->SendTableData(pIServerUserItem->GetChairID(),SUB_GF_SYSTEM_MESSAGE, &SystemMessage,wSendSize,MDM_GF_FRAME);
pIServerUserItem->SetUserMatchStatus(MUS_MATCHING);
//<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>
ClearSameTableUser(pIServerUserItem->GetUserID());
for (INT j=0; j<pITableFrame->GetChairCount(); j++)
{
//<2F><>ȡ<EFBFBD>û<EFBFBD>
pITableUserItem=pITableFrame->GetTableUserItem(j);
if(pITableUserItem==NULL) continue;
if(pITableUserItem==pIServerUserItem) continue;
//<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>û<EFBFBD>
InserSameTableUser(pIServerUserItem->GetUserID(),pITableUserItem->GetUserID());
}
}
return true;
}
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
bool CLockTimeMatch::OnEventGameEnd(ITableFrame *pITableFrame,WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason)
{
ASSERT(pITableFrame!=NULL);
if (pITableFrame==NULL) return false;
vector<BYTE> cbFinishVec;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WORD wChairCount = pITableFrame->GetChairCount();
for (WORD i = 0; i<wChairCount; i++)
{
cbFinishVec.push_back(0); //<2F>Ȳ<EFBFBD><C8B2><EFBFBD>false<73><65>־;
IServerUserItem *pIUserItem=pITableFrame->GetTableUserItem(i);
ASSERT(pIUserItem!=NULL);
if (pIUserItem==NULL) continue;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
if(cbReason!=REMOVE_BY_ENDMATCH)
{
//<2F><EFBFBD><EFB5BD>̭<EFBFBD><CCAD>
if (m_pMatchOption->MatchType.LockTime.lMatchCullScore>0 && pIUserItem->GetUserScore()<m_pMatchOption->MatchType.LockTime.lMatchCullScore)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TCHAR szMessage[128]=TEXT("");
_sntprintf_s(szMessage,CountArray(szMessage),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD> %d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>"),m_pMatchOption->MatchType.LockTime.lMatchCullScore);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
m_pIGameServiceFrame->SendGameMessage(pIUserItem,szMessage,SMT_EJECT|SMT_CHAT);
//<2F><><EFBFBD><EFBFBD><EFBFBD>
DBR_GR_MatchEliminate MatchEliminate;
MatchEliminate.cbMatchType=MATCH_TYPE_LOCKTIME;
MatchEliminate.dwMatchID=m_pMatchOption->dwMatchID;
MatchEliminate.dwMatchNO=m_pMatchOption->dwMatchNO;
MatchEliminate.dwUserID=pIUserItem->GetUserID();
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(0,DBR_GR_MATCH_ELIMINATE,0,&MatchEliminate,sizeof(MatchEliminate));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIGameServiceFrame->SendData(pIUserItem,MDM_GR_MATCH,SUB_GR_MATCH_ELIMINATE,NULL,0);
continue;
}
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if(InsertDistribute(pIUserItem)==true)
//{
// m_pIGameServiceFrame->SendGameMessage(pIUserItem,TEXT("<22><><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>..."),SMT_CHAT|SMT_TABLE_ROLL);
//}
bool bFinish = false;
//<2F><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>
if(pIUserItem->GetUserPlayCount()-pIUserItem->GetUserInfo()->dwFleeCount >= m_pMatchOption->MatchType.LockTime.wMatchPlayCount)
{
bFinish = true;
cbFinishVec[i] = 1; //<2F><><EFBFBD>ó<EFBFBD>true<75><65>־;
TCHAR szMessage[128]=TEXT("");
_sntprintf_s(szMessage,CountArray(szMessage),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>˳<EFBFBD><CBB3>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EEB6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),m_pMatchOption->MatchType.LockTime.wMatchPlayCount);
m_pIGameServiceFrame->SendGameMessage(pIUserItem,szMessage,SMT_CHAT|SMT_TABLE_ROLL);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ;
DBR_GR_MatchRecordGrades MatchRecordGrades;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
MatchRecordGrades.dwUserID = pIUserItem->GetUserID();
MatchRecordGrades.dwMatchID = m_pMatchOption->dwMatchID;
MatchRecordGrades.lMatchNo = m_pMatchOption->dwMatchNO;
MatchRecordGrades.wServerID = m_pGameServiceOption->wServerID;
MatchRecordGrades.lInitScore = m_pMatchOption->MatchType.LockTime.lMatchInitScore;
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(MatchRecordGrades.dwUserID, DBR_GR_MATCH_RECORD_GRADES, 0, &MatchRecordGrades, sizeof(MatchRecordGrades));
}
UpdateMatchScore(pIUserItem,bFinish);
}
}
SortMatchScoreVector();
for (WORD i = 0; i<wChairCount; i++)
{
IServerUserItem *pIUserItem = pITableFrame->GetTableUserItem(i);
ASSERT(pIUserItem != NULL);
if (pIUserItem == NULL) continue;
//<2F><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
if (cbFinishVec[i])
{
SendMatchPlayerFinish(pIUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>;
SendMatchUserInitScore(pIUserItem);
}
}
PerformAllUserStandUp(pITableFrame);
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::OnActionUserSitDown(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser)
{
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::OnActionUserStandUp(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser)
{
////<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>;
//return RemoveDistribute(pIServerUserItem);
return true;
}
//<2F>û<EFBFBD>ͬ<EFBFBD><CDAC>
bool CLockTimeMatch::OnActionUserOnReady(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
{
return true;
}
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
bool CLockTimeMatch::VerifyUserEnterMatch(IServerUserItem * pIServerUserItem)
{
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pIServerUserItem->IsAndroidUser()==true)
return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wMessageType;
TCHAR szMessage[128]=TEXT("");
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ѵ<EFBFBD>
if (VerifyMatchTime(szMessage,CountArray(szMessage),wMessageType)==false)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,szMessage,wMessageType);
return false;
}
//<2F><EFBFBD><EFB5BD>̭<EFBFBD><CCAD>
if (m_pMatchOption->MatchType.LockTime.lMatchCullScore>0 && pIServerUserItem->GetUserScore()<m_pMatchOption->MatchType.LockTime.lMatchCullScore)
{
_sntprintf_s(szMessage,CountArray(szMessage),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD> %d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>"),m_pMatchOption->MatchType.LockTime.lMatchCullScore);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if(pIServerUserItem->GetTableID()==INVALID_TABLE)
{
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,szMessage,SMT_EJECT|SMT_CHAT);
}
else
{
m_pIGameServiceFrame->SendGameMessage(pIServerUserItem,szMessage,SMT_EJECT|SMT_CHAT);
}
return false;
}
return true;
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
DWORD CLockTimeMatch::GetMatchStartInterval()
{
//<2F><>ȡʱ<C8A1><CAB1>
CTime CurTime=CTime::GetCurrentTime();
CTime MatchStartTime(m_pMatchOption->MatchType.LockTime.MatchStartTime);
CTime MatchEndTime(m_pMatchOption->MatchType.LockTime.MatchEndTime);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LONGLONG dwTimeInterval=1;
DWORD dwCurrStamp,dwStartStamp,dwEndStamp;
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ
if(CurTime<MatchStartTime)
{
CTimeSpan TimeSpan = MatchStartTime-CurTime;
dwTimeInterval = TimeSpan.GetTotalSeconds();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>
if(CurTime>=MatchEndTime) dwTimeInterval=0;
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
dwCurrStamp = CurTime.GetHour()*3600+CurTime.GetMinute()*60+CurTime.GetSecond();
dwStartStamp = m_pMatchOption->MatchType.LockTime.MatchStartTime.wHour*3600+m_pMatchOption->MatchType.LockTime.MatchStartTime.wMinute*60+m_pMatchOption->MatchType.LockTime.MatchStartTime.wSecond;
dwEndStamp = m_pMatchOption->MatchType.LockTime.MatchEndTime.wHour*3600+m_pMatchOption->MatchType.LockTime.MatchEndTime.wMinute*60+m_pMatchOption->MatchType.LockTime.MatchEndTime.wSecond;
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ
if(dwCurrStamp<dwStartStamp)
{
dwTimeInterval = dwStartStamp-dwCurrStamp;
}
if (CurTime < MatchEndTime && IsRoundMatchMode())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>;
if (dwCurrStamp >= dwEndStamp)
{
dwTimeInterval = 24 * 3600 - (dwCurrStamp - dwStartStamp);
}
}
return (DWORD)dwTimeInterval;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool CLockTimeMatch::PerformDistribute()
{
//״̬<D7B4>ж<EFBFBD>
if(m_MatchStatus!=MS_MATCHING) return true;
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(m_DistributeManage.GetCount()<m_pGameServiceOption->wMinDistributeUser) return false;
WORD wChairCount = m_pGameServiceAttrib->wChairCount;
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>;
while(true)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
CDistributeInfoArray DistributeInfoArray;
//<2F><>ȡ<EFBFBD>û<EFBFBD>;
WORD wDistributeCount = m_DistributeManage.PerformDistribute(DistributeInfoArray,wChairCount);
if(wDistributeCount < wChairCount) break;
//Ѱ<><D1B0>λ<EFBFBD><CEBB>;
ITableFrame * pICurrTableFrame=NULL;
for (WORD i=0;i<m_pGameServiceOption->wTableCount;i++)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
ASSERT(m_ppITableFrame[i]!=NULL);
ITableFrame * pITableFrame=m_ppITableFrame[i];
//״̬<D7B4>ж<EFBFBD>
if (pITableFrame->GetNullChairCount()==pITableFrame->GetChairCount())
{
pICurrTableFrame=pITableFrame;
break;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pICurrTableFrame==NULL) break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bSitSuccess=true;
INT_PTR nSitFailedIndex=INVALID_CHAIR;
for(INT_PTR nIndex=0;nIndex<DistributeInfoArray.GetCount();nIndex++)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wChairID=INVALID_CHAIR;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (WORD i=0;i<pICurrTableFrame->GetChairCount();i++)
{
if (pICurrTableFrame->GetTableUserItem(i)==NULL)
{
wChairID = i;
break;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
if (wChairID!=INVALID_CHAIR)
{
//<2F><>ȡ<EFBFBD>û<EFBFBD>
IServerUserItem * pIServerUserItem=DistributeInfoArray[nIndex].pIServerUserItem;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if (pIServerUserItem->GetTableID()!=INVALID_TABLE)
{
WORD wTableID=pIServerUserItem->GetTableID();
ITableFrame * pITableFrame = m_ppITableFrame[wTableID];
pITableFrame->PerformStandUpAction(pIServerUserItem);
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if(pICurrTableFrame->PerformSitDownAction(wChairID,pIServerUserItem)==false)
{
bSitSuccess=false;
nSitFailedIndex=nIndex;
break;
}
// <20><>־;
#if _DEBUG
IServerUserItem* pMeServerUserItem = pIServerUserItem;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ;
TCHAR szDescribe[128] = TEXT("");
_sntprintf_s(szDescribe, CountArray(szDescribe), TEXT("player [%s] PerformDistribute, GetUserStatus:[%d]."),
pMeServerUserItem->GetNickName(), pMeServerUserItem->GetUserStatus());
CTraceService::TraceString(szDescribe, TraceLevel_Warning);
#endif
}
}
//<2F><><EFBFBD>½<EFBFBD><C2BD><EFBFBD>
if(bSitSuccess)
{
if (pICurrTableFrame&&pICurrTableFrame->IsGameStarted() == false)
{
for (int i = 0; i < wChairCount; i++)
{
IServerUserItem * pIServerUserItem = pICurrTableFrame->GetTableUserItem(i);
if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
{
if (pIServerUserItem->IsClientReady() == false)
{
pICurrTableFrame->ImitateGameOption(pIServerUserItem);
}
}
}
}
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
while(DistributeInfoArray.GetCount()>0)
{
m_DistributeManage.RemoveDistributeNode((tagDistributeNode *)DistributeInfoArray[0].pPertainNode);
DistributeInfoArray.RemoveAt(0);
}
}
else
{
for(INT_PTR nIndex=0;nIndex<DistributeInfoArray.GetCount();nIndex++)
{
if(nSitFailedIndex==nIndex)
{
m_DistributeManage.RemoveDistributeNode((tagDistributeNode *)DistributeInfoArray[nIndex].pPertainNode);
}
else
{
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if (DistributeInfoArray[nIndex].pIServerUserItem->GetTableID()!=INVALID_TABLE)
{
WORD wTableID=DistributeInfoArray[nIndex].pIServerUserItem->GetTableID();
m_ppITableFrame[wTableID]->PerformStandUpAction(DistributeInfoArray[nIndex].pIServerUserItem);
}
}
}
}
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool CLockTimeMatch::InsertDistribute(IServerUserItem * pIServerUserItem)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) return false;
//<2F><><EFBFBD><EFBFBD>״̬;
if ((m_MatchStatus != MS_WAITPLAY) && (m_MatchStatus != MS_MATCHING)) return false;
//״̬<D7B4>ж<EFBFBD>
ASSERT(pIServerUserItem->GetUserStatus()<US_PLAYING);
if (pIServerUserItem->GetUserStatus()>=US_PLAYING) return false;
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(VerifyUserEnterMatch(pIServerUserItem)==false) return false;
////<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
//if (m_DistributeManage.SearchNode(pIServerUserItem) != NULL)
//{
// return true;
//}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagDistributeInfo DistributeInfo;
ZeroMemory(&DistributeInfo,sizeof(DistributeInfo));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
DistributeInfo.pPertainNode=NULL;
DistributeInfo.dwInsertStamp = (DWORD)time(NULL);
DistributeInfo.pIServerUserItem=pIServerUserItem;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
if(m_DistributeManage.InsertDistributeNode(DistributeInfo)==false)
{
return pIServerUserItem->IsAndroidUser()?false:true;
}
//<2F>ȴ<EFBFBD><C8B4><EFBFBD>ʼ;
if (m_MatchStatus == MS_WAITPLAY)
{
SendMatchInfo(NULL);
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CLockTimeMatch::ClearSameTableUser(DWORD dwUserID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagSameTableInfo * pSameTableInfo = m_DistributeManage.GetUserSameTableInfo(dwUserID);
if(pSameTableInfo!=NULL)
{
pSameTableInfo->wPlayerCount=0;
ZeroMemory(pSameTableInfo->wPlayerIDSet,sizeof(pSameTableInfo->wPlayerIDSet));
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
void CLockTimeMatch::InserSameTableUser(DWORD dwUserID,DWORD dwTableUserID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagSameTableInfo * pSameTableInfo = m_DistributeManage.GetUserSameTableInfo(dwUserID);
if(pSameTableInfo!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
pSameTableInfo->wPlayerIDSet[pSameTableInfo->wPlayerCount++] = dwTableUserID;
}
return;
}
//<2F>¼<EFBFBD>У<EFBFBD><D0A3>
bool CLockTimeMatch::VerifyMatchTime(LPTSTR pszMessage,WORD wMaxCount,WORD & wMessageType)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
CTime CurTime=CTime::GetCurrentTime();
CTime MatchStartTime(m_pMatchOption->MatchType.LockTime.MatchStartTime);
CTime MatchEndTime(m_pMatchOption->MatchType.LockTime.MatchEndTime);
CTime SignupStartTime(m_pMatchOption->MatchType.LockTime.SignupStartTime);
CTime SignupEndTime(m_pMatchOption->MatchType.LockTime.SignupEndTime);
int nCurrSeconds = CurTime.GetHour() * 3600 + CurTime.GetMinute() * 60 + CurTime.GetSecond();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wMessageType = SMT_EJECT|SMT_CHAT;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>;
if(CurTime>=MatchEndTime)
{
wMessageType |= SMT_CLOSE_ROOM|SMT_CLOSE_GAME;
_sntprintf(pszMessage,wMaxCount,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>"));
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>;
if (nCurrSeconds >= MatchEndTime.GetHour() * 3600 + MatchEndTime.GetMinute() * 60 + MatchEndTime.GetSecond())
{
wMessageType |= SMT_CLOSE_ROOM|SMT_CLOSE_GAME;
_sntprintf(pszMessage,wMaxCount,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%dʱ%d<><64>%d<><64>ǰ<EFBFBD><C7B0><EFBFBD>μӱ<CEBC><D3B1><EFBFBD><EFBFBD><EFBFBD>"),MatchStartTime.GetHour(),MatchStartTime.GetMinute(),MatchStartTime.GetSecond());
return false;
}
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ;
if (CurTime < SignupStartTime)
{
wMessageType |= SMT_CLOSE_ROOM;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>%d-%d-%d %d:%d:%d<><64>%d-%d-%d %d:%d:%d"),
SignupStartTime.GetYear(), SignupStartTime.GetMonth(), SignupStartTime.GetDay(), SignupStartTime.GetHour(), SignupStartTime.GetMinute(), SignupStartTime.GetSecond(),
SignupEndTime.GetYear(), SignupEndTime.GetMonth(), SignupEndTime.GetDay(), SignupEndTime.GetHour(), SignupEndTime.GetMinute(), SignupEndTime.GetSecond());
return false;
}
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ;
if (IsRoundMatchMode() && nCurrSeconds < (SignupStartTime.GetHour() * 3600 + SignupStartTime.GetMinute() * 60 + SignupStartTime.GetSecond()))
{
wMessageType |= SMT_CLOSE_ROOM;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>%dʱ%d<><64>%d<><64>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μӱ<CEBC><D3B1><EFBFBD><EFBFBD><EFBFBD>"), SignupStartTime.GetHour(), SignupStartTime.GetMinute(), SignupStartTime.GetSecond());
return false;
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::SendMatchUserScore(IServerUserItem * pIServerUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_UserScore UserScore;
ZeroMemory(&UserScore,sizeof(UserScore));
tagUserInfo * pUserInfo=pIServerUserItem->GetUserInfo();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UserScore.dwUserID=pUserInfo->dwUserID;
UserScore.UserScore.dwWinCount=pUserInfo->dwWinCount;
UserScore.UserScore.dwLostCount=pUserInfo->dwLostCount;
UserScore.UserScore.dwDrawCount=pUserInfo->dwDrawCount;
UserScore.UserScore.dwFleeCount=pUserInfo->dwFleeCount;
UserScore.UserScore.dwExperience=pUserInfo->dwExperience;
UserScore.UserScore.lLoveLiness=pUserInfo->lLoveLiness;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UserScore.UserScore.lGrade=pUserInfo->lGrade;
UserScore.UserScore.lInsure=pUserInfo->lInsure;
UserScore.UserScore.lScore=pUserInfo->lScore;
UserScore.UserScore.dwUserMedal=pUserInfo->dwUserMedal;
return m_pIGameServiceFrame->SendData(BG_ALL_CLIENT,MDM_GR_USER,SUB_GR_USER_SCORE,&UserScore,sizeof(UserScore));
}
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::RemoveDistribute(IServerUserItem * pIServerUserItem)
{
//<2F><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) return false;
//<2F>Ƴ<EFBFBD><C6B3>û<EFBFBD>
m_DistributeManage.RemoveDistributeNode(pIServerUserItem);
return true;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD CLockTimeMatch::GetUserRank(IServerUserItem *pUserItem, ITableFrame *pITableFrame)
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pUserItem!=NULL);
if(pUserItem==NULL) return INVALID_WORD;
if (!pITableFrame)
{
return INVALID_WORD;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCORE lUserScore=pUserItem->GetUserScore();
WORD wRank=1;
DWORD dwUserID=0;
IServerUserItem *pLoopUserItem=NULL;
ASSERT(pUserItem->GetTableID()==pITableFrame->GetTableID());
if(pUserItem->GetTableID()!=pITableFrame->GetTableID()) return INVALID_WORD;
for(WORD i=0; i<m_pGameServiceAttrib->wChairCount; i++)
{
pLoopUserItem=pITableFrame->GetTableUserItem(i);
if(pLoopUserItem==NULL) continue;
if(pLoopUserItem!=pUserItem && pLoopUserItem->GetUserScore()>lUserScore)
wRank++;
}
return wRank;
}
DWORD CLockTimeMatch::GetUserRank(IServerUserItem *pUserItem)
{
if (NULL == pUserItem)
{
return INVALID_DWORD;
}
tagMatchScore* pMatchScore = FindMatchScore(pUserItem);
if (NULL == pMatchScore)
{
return INVALID_DWORD;
}
tagMatchScorePtrVector::iterator iterFind = std::find(m_AllMatchScorePtrVector.begin(), m_AllMatchScorePtrVector.end(), pMatchScore);
if ( iterFind == m_AllMatchScorePtrVector.end())
{
return INVALID_DWORD;
}
return (iterFind - m_AllMatchScorePtrVector.begin() + 1);
}
//<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ
void CLockTimeMatch::SendTableUserMatchInfo(ITableFrame *pITableFrame, WORD wChairID)
{
//<2F><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
ASSERT(pITableFrame!=NULL);
if (pITableFrame==NULL) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_Match_Info MatchInfo;
ZeroMemory(&MatchInfo,sizeof(MatchInfo));
MatchInfo.wTotalCount = m_pMatchOption->MatchType.LockTime.wMatchPlayCount;
for(WORD i=0; i<pITableFrame->GetChairCount(); i++)
{
//<2F><>ȡ<EFBFBD>û<EFBFBD>;
if(wChairID!=INVALID_CHAIR && wChairID!=i) continue;
IServerUserItem *pIServerUserItem=pITableFrame->GetTableUserItem(i);
if(pIServerUserItem==NULL) continue;
//<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>
MatchInfo.wGameCount=(WORD)pIServerUserItem->GetUserPlayCount()+1;
//MatchInfo.wRank=GetUserRank(pIServerUserItem,pITableFrame);
MatchInfo.wRank = GetUserRank(pIServerUserItem);
MatchInfo.wRankSize = sizeof(MatchInfo.rankInfo) / sizeof(MatchInfo.rankInfo[0]);
GetCMDGRMatchRankInfo(MatchInfo.rankInfo, MatchInfo.wRankSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pIServerUserItem->IsAndroidUser()==false)
{
pITableFrame->SendTableData(i,SUB_GR_MATCH_INFO,&MatchInfo,sizeof(MatchInfo),MDM_GR_MATCH);
}
}
return;
}
void CLockTimeMatch::SendTableUserMatchInfo(IServerUserItem* pIServerUserItem)
{
if (pIServerUserItem == NULL || pIServerUserItem->IsAndroidUser()) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_Match_Info MatchInfo;
ZeroMemory(&MatchInfo, sizeof(MatchInfo));
//<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>;
MatchInfo.wTotalCount = m_pMatchOption->MatchType.LockTime.wMatchPlayCount;
MatchInfo.wGameCount = (WORD)pIServerUserItem->GetUserPlayCount() + 1;
MatchInfo.wRank = GetUserRank(pIServerUserItem);
MatchInfo.wRankSize = sizeof(MatchInfo.rankInfo) / sizeof(MatchInfo.rankInfo[0]);
GetCMDGRMatchRankInfo(MatchInfo.rankInfo, MatchInfo.wRankSize);
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_INFO, &MatchInfo, sizeof(MatchInfo));
}
//д<><EFBFBD><EBBDB1>
bool CLockTimeMatch::WriteUserAward(IServerUserItem *pIServerUserItem,tagMatchRankInfo * pMatchRankInfo)
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pMatchRankInfo!=NULL);
if(pMatchRankInfo==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
if (pIServerUserItem != NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_MatchResult MatchResult;
ZeroMemory(&MatchResult, sizeof(MatchResult));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MatchResult.lGold = pMatchRankInfo->lRewardGold;
MatchResult.dwIngot = pMatchRankInfo->dwRewardIngot;
MatchResult.dwExperience = pMatchRankInfo->dwRewardExperience;
MatchResult.lInsureScore = pMatchRankInfo->lInsureSocre;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
_sntprintf_s(MatchResult.szDescribe, CountArray(MatchResult.szDescribe), TEXT("%s, <20><>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>%s<>л<EFBFBD><D0BB>õ<EFBFBD>%d<><64>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>"),
pIServerUserItem->GetNickName(), m_pMatchOption->szMatchName, pMatchRankInfo->wRankID);
////<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ϣ
//tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
////pUserInfo->lIngot+=pMatchRankInfo->dwRewardIngot;
//pUserInfo->dwExperience += pMatchRankInfo->dwRewardExperience;
//OnEventUserItemScore(pIServerUserItem, 0);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pIServerUserItem->IsAndroidUser() == false)
{
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_RESULT, &MatchResult, sizeof(MatchResult));
}
}
//д<><D0B4><EFBFBD><EFBFBD>¼;
if(m_pIDataBaseEngine!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
DBR_GR_MatchReward MatchReward;
ZeroMemory(&MatchReward,sizeof(MatchReward));
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ;
MatchReward.dwUserID = pMatchRankInfo->dwUserID;
MatchReward.lRewardGold = pMatchRankInfo->lRewardGold;
MatchReward.dwRewardIngot = pMatchRankInfo->dwRewardIngot;
MatchReward.dwRewardExperience = pMatchRankInfo->dwRewardExperience;
MatchReward.dwClientAddr = pIServerUserItem ? pIServerUserItem->GetClientAddr() : 0;
MatchReward.lInsureSocre = pMatchRankInfo->lInsureSocre;
MatchReward.dwGoodsID = pMatchRankInfo->dwGoodsID;
MatchReward.dwGoodsNum = pMatchRankInfo->dwGoodsNum;
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIDataBaseEngine->PostDataBaseRequest(MatchReward.dwUserID,DBR_GR_MATCH_REWARD,0,&MatchReward,sizeof(MatchReward));
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CLockTimeMatch::SendMatchInfo(IServerUserItem * pIServerUserItem)
{
CMD_GR_Match_Num MatchNum;
ZeroMemory(&MatchNum,sizeof(MatchNum));
MatchNum.dwWaitting=m_pIServerUserManager->GetUserItemCount();
MatchNum.dwTotal=m_pGameServiceAttrib->wChairCount;
if(pIServerUserItem==NULL)
{
m_pIGameServiceFrame->SendData(BG_ALL_CLIENT,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
return true;
}
m_pIGameServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
return true;
}
bool CLockTimeMatch::SendMatchUserInitScore(IServerUserItem * pIServerUserItem)
{
//<2F><>ȡ<EFBFBD>ɼ<EFBFBD>
tagUserInfo *pUserScore = pIServerUserItem->GetUserInfo();
//<2F><><EFBFBD>óɼ<C3B3>
pUserScore->dwWinCount = 0L;
pUserScore->dwLostCount = 0L;
pUserScore->dwFleeCount = 0L;
pUserScore->dwDrawCount = 0L;
pUserScore->lGrade = 0L;
pUserScore->lScore = m_pMatchOption->MatchType.LockTime.lMatchInitScore;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
pUserScore->cbScoreMultiple = 1;
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
return SendMatchUserScore(pIServerUserItem);
}
bool CLockTimeMatch::IsNormalMatchMode()
{
return (m_pMatchOption->MatchType.LockTime.cbMatchMode == MATCH_MODE_NORMAL);
}
bool CLockTimeMatch::IsRoundMatchMode()
{
return (m_pMatchOption->MatchType.LockTime.cbMatchMode == MATCH_MODE_ROUND);
}
void CLockTimeMatch::UpdateMatchStatus()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
CTime CurTime = CTime::GetCurrentTime();
CTime MatchEndTime(m_pMatchOption->MatchType.LockTime.MatchEndTime);
CTime MatchStartTime(m_pMatchOption->MatchType.LockTime.MatchStartTime);
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ;
BYTE MatchStatus = m_MatchStatus;
DWORD nCurSeconds = CurTime.GetHour() * 3600 + CurTime.GetMinute() * 60 + CurTime.GetSecond();
DWORD nMatchStartSeconds = MatchStartTime.GetHour() * 3600 + MatchStartTime.GetMinute() * 60 + MatchStartTime.GetSecond();
DWORD nMatchEndSeconds = MatchEndTime.GetHour() * 3600 + MatchEndTime.GetMinute() * 60 + MatchEndTime.GetSecond();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
if (MatchStatus == MS_NULL && nCurSeconds >= nMatchStartSeconds)
{
MatchStatus = MS_MATCHING;
}
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>;
if (MatchStatus == MS_MATCHING && nCurSeconds >= nMatchEndSeconds)
{
MatchStatus = MS_WAITEND;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
if (MatchStatus == MS_WAITEND)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
bool bContinueWait = false;
//<2F><>ɢ<EFBFBD><C9A2>Ϸ;
for (INT i = 0; i < m_pGameServiceOption->wTableCount; i++)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>;
ITableFrame * pITableFrame = m_ppITableFrame[i];
if (pITableFrame == NULL)
{
continue;
}
//<2F><>ɢ<EFBFBD><C9A2>Ϸ;
if (pITableFrame->IsGameStarted())
{
bContinueWait = true;
break;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>;
if (bContinueWait == false)
{
MatchStatus = MS_MATCHEND;
}
//ǿ<>ƽ<EFBFBD><C6BD><EFBFBD>;
if (nCurSeconds >= (nMatchEndSeconds + m_pMatchOption->MatchType.LockTime.dwEndDelayTime))
{
MatchStatus = MS_MATCHEND;
}
}
//<2F><><EFBFBD><EFBFBD>״̬;
m_MatchStatus = MatchStatus;
}
VOID CLockTimeMatch::PerformAllUserStandUp(ITableFrame *pITableFrame)
{
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>;
ASSERT(pITableFrame != NULL);
if (pITableFrame == NULL)
{
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
for (int i = 0; i < m_pGameServiceAttrib->wChairCount; i++)
{
//<2F><>ȡ<EFBFBD>û<EFBFBD>;
IServerUserItem * pUserServerItem = pITableFrame->GetTableUserItem(i);
if (pUserServerItem&&pUserServerItem->GetTableID() != INVALID_TABLE)
{
//<2F><><EFBFBD><EFBFBD>״̬;
pUserServerItem->SetUserMatchStatus(MUS_NULL);
pITableFrame->PerformStandUpAction(pUserServerItem);
}
}
}
DWORD CLockTimeMatch::CalcMatchNo()
{
////ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
//if (IsRoundMatchMode())
//{
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
// SYSTEMTIME SystemStartTime = m_pMatchOption->MatchType.LockTime.MatchStartTime;
// //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>;
// SystemStartTime.wHour = 0;
// SystemStartTime.wMinute = 0;
// SystemStartTime.wSecond = 0;
// SystemStartTime.wMilliseconds = 0;
// //<2F><>ȡʱ<C8A1><CAB1>;
// CTime CurTime = CTime::GetCurrentTime();
// CTime MatchStartTime(SystemStartTime);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
// CTimeSpan TimeSpan = CurTime - MatchStartTime;
// return TimeSpan.GetDays() + m_pMatchOption->dwMatchNO;
//}
return m_pMatchOption->dwMatchNO;
}
void CLockTimeMatch::ReleaseMatchScore()
{
tagMatchScorePtrVector::iterator iter = m_AllMatchScorePtrVector.begin();
tagMatchScorePtrVector::iterator iterEnd = m_AllMatchScorePtrVector.end();
for (; iter != iterEnd; ++iter)
{
tagMatchScore* pMatchScore = *iter;
if (pMatchScore != NULL)
{
delete pMatchScore;
pMatchScore = NULL;
}
}
m_AllMatchScorePtrMap.clear();
m_AllMatchScorePtrVector.clear();
}
void CLockTimeMatch::CreateNewMatchScore(IServerUserItem *pIServerUserItem)
{
if (NULL == pIServerUserItem) return;
tagMatchScore* pMatchScore = new tagMatchScore();
pMatchScore->dwUserID = pIServerUserItem->GetUserID();
pMatchScore->pUserItem = pIServerUserItem;
memcpy(pMatchScore->szNickName, pIServerUserItem->GetNickName(), sizeof(pMatchScore->szNickName));
m_AllMatchScorePtrMap.insert(std::make_pair(pMatchScore->dwUserID, pMatchScore));
m_AllMatchScorePtrVector.push_back(pMatchScore);
}
void CLockTimeMatch::InsertAllMatchScoreMap(IServerUserItem *pIServerUserItem)
{
if (NULL == pIServerUserItem) return;
if (NULL != FindMatchScore(pIServerUserItem)) return;
CreateNewMatchScore(pIServerUserItem);
}
void CLockTimeMatch::InsertAllMatchScoreMap(tagMatchRankDataInfo * pMatchRankDataInfo)
{
tagMatchScore* pMatchScore = new tagMatchScore();
pMatchScore->dwUserID = pMatchRankDataInfo->dwUserID;
pMatchScore->lScore = pMatchRankDataInfo->lScore;
pMatchScore->lFinishMaxScore = pMatchRankDataInfo->lFinishMaxScore;
memcpy(pMatchScore->szNickName, pMatchRankDataInfo->szNickName, sizeof(pMatchScore->szNickName));
m_AllMatchScorePtrMap.insert(std::make_pair(pMatchScore->dwUserID, pMatchScore));
m_AllMatchScorePtrVector.push_back(pMatchScore);
}
tagMatchScore* CLockTimeMatch::FindMatchScore(IServerUserItem *pIServerUserItem)
{
if (NULL == pIServerUserItem) return NULL;
DWORD dwUserID = pIServerUserItem->GetUserID();
tagMatchScorePtrMap::iterator iterFind = m_AllMatchScorePtrMap.find(dwUserID);
if (iterFind != m_AllMatchScorePtrMap.end())
{
return iterFind->second;
}
return NULL;
}
void CLockTimeMatch::UpdateMatchScore(IServerUserItem *pIServerUserItem, bool bFinish)
{
if (NULL == pIServerUserItem) return;
tagMatchScore* pMatchScore = FindMatchScore(pIServerUserItem);
if (NULL == pMatchScore)
{
return;
}
SCORE lMatchInitScore = m_pMatchOption->MatchType.LockTime.lMatchInitScore;
SCORE lUserGetScore = pIServerUserItem->GetUserScore() - lMatchInitScore;
if (lUserGetScore < 0)
{
lUserGetScore = 0;
}
if (pMatchScore->lScore < lUserGetScore)
{
pMatchScore->lScore = lUserGetScore;
}
if (bFinish && (pMatchScore->lFinishMaxScore < lUserGetScore))
{
pMatchScore->lFinishMaxScore = lUserGetScore;
}
}
void CLockTimeMatch::SortMatchScoreVector()
{
std::make_heap(m_AllMatchScorePtrVector.begin(), m_AllMatchScorePtrVector.end(), ObjGreatCmp<SCORE, tagMatchScore*>(&tagMatchScore::GetCurMaxScore));
std::sort_heap(m_AllMatchScorePtrVector.begin(), m_AllMatchScorePtrVector.end(), ObjGreatCmp<SCORE, tagMatchScore*>(&tagMatchScore::GetCurMaxScore));
}
void CLockTimeMatch::GetCMDGRMatchRankInfo(CMD_GR_Match_Rank_Info* pRankInfo, WORD& refRankSize)
{
int nVectorSize = m_AllMatchScorePtrVector.size();
if (refRankSize > nVectorSize)
{
refRankSize = nVectorSize;
}
for (int i = 0; i < refRankSize; ++i)
{
tagMatchScore* pMatchScore = m_AllMatchScorePtrVector[i];
pRankInfo[i].lScore = pMatchScore->GetCurMaxScore();
memcpy(pRankInfo[i].szNickName, pMatchScore->szNickName, sizeof(pMatchScore->szNickName));
}
}
void CLockTimeMatch::SendMatchJoinResult(IServerUserItem* pIServerUserItem, WORD wSuccess, LPCTSTR lpszMessage)
{
CMD_GR_Match_JoinResult kResult;
kResult.wSucess = wSuccess;
kResult.wServerID = m_pGameServiceOption->wServerID;
kResult.wLength = lstrlen(lpszMessage) + 1;
lstrcpyn(kResult.szString, lpszMessage, CountArray(kResult.szString));
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_JOIN_RESULT, &kResult, sizeof(kResult));
}
void CLockTimeMatch::SendMatchPlayerFinish(IServerUserItem* pIServerUserItem)
{
CMD_GR_Match_PlayerFinish playerFinish;
memset(&playerFinish, 0, sizeof(playerFinish));
SCORE lMatchInitScore = m_pMatchOption->MatchType.LockTime.lMatchInitScore;
playerFinish.lScore = pIServerUserItem->GetUserScore() - lMatchInitScore;
if (playerFinish.lScore < 0) playerFinish.lScore = 0;
tagMatchScore* pMatchScore = FindMatchScore(pIServerUserItem);
if (pMatchScore!=NULL)
{
playerFinish.lMaxScore = pMatchScore->lFinishMaxScore;
}
playerFinish.wRank = GetUserRank(pIServerUserItem);
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_PLAYERFINISH, &playerFinish, sizeof(playerFinish));
}
bool CLockTimeMatch::VerifySignupMatchTime(LPTSTR pszMessage, WORD wMaxCount, WORD & wMessageType)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
CTime CurTime = CTime::GetCurrentTime();
CTime MatchStartTime(m_pMatchOption->MatchType.LockTime.MatchStartTime);
CTime MatchEndTime(m_pMatchOption->MatchType.LockTime.MatchEndTime);
CTime SignupStartTime(m_pMatchOption->MatchType.LockTime.SignupStartTime);
CTime SignupEndTime(m_pMatchOption->MatchType.LockTime.SignupEndTime);
int nCurrSeconds = CurTime.GetHour() * 3600 + CurTime.GetMinute() * 60 + CurTime.GetSecond();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wMessageType = SMT_EJECT | SMT_CHAT;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
if ((CurTime >= SignupEndTime) && (MatchEndTime.GetMonth() == SignupEndTime.GetMonth()) && (MatchEndTime.GetDay() == SignupEndTime.GetDay()))
{
wMessageType |= SMT_CLOSE_ROOM | SMT_CLOSE_GAME;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>"));
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>;
if (nCurrSeconds >= SignupEndTime.GetHour() * 3600 + SignupEndTime.GetMinute() * 60 + SignupEndTime.GetSecond())
{
wMessageType |= SMT_CLOSE_ROOM | SMT_CLOSE_GAME;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%dʱ%d<><64>%d<><64>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SignupStartTime.GetHour(), SignupStartTime.GetMinute(), SignupStartTime.GetSecond());
return false;
}
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ;
if (CurTime < SignupStartTime)
{
wMessageType |= SMT_CLOSE_ROOM;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>%d-%d-%d %d:%d:%d<><64>%d-%d-%d %d:%d:%d"),
SignupStartTime.GetYear(), SignupStartTime.GetMonth(), SignupStartTime.GetDay(), SignupStartTime.GetHour(), SignupStartTime.GetMinute(), SignupStartTime.GetSecond(),
SignupEndTime.GetYear(), SignupEndTime.GetMonth(), SignupEndTime.GetDay(), SignupEndTime.GetHour(), SignupEndTime.GetMinute(), SignupEndTime.GetSecond());
return false;
}
//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ;
if (IsRoundMatchMode() && nCurrSeconds < (SignupStartTime.GetHour() * 3600 + SignupStartTime.GetMinute() * 60 + SignupStartTime.GetSecond()))
{
wMessageType |= SMT_CLOSE_ROOM;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>%dʱ%d<><64>%d<><64>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μӱ<CEBC><D3B1><EFBFBD><EFBFBD><EFBFBD>"), SignupStartTime.GetHour(), SignupStartTime.GetMinute(), SignupStartTime.GetSecond());
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>;
if (CurTime >= MatchEndTime)
{
wMessageType |= SMT_CLOSE_ROOM | SMT_CLOSE_GAME;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>"));
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD>;
if (nCurrSeconds >= MatchEndTime.GetHour() * 3600 + MatchEndTime.GetMinute() * 60 + MatchEndTime.GetSecond())
{
wMessageType |= SMT_CLOSE_ROOM | SMT_CLOSE_GAME;
_sntprintf(pszMessage, wMaxCount, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%dʱ%d<><64>%d<><64>ǰ<EFBFBD><C7B0><EFBFBD>μӱ<CEBC><D3B1><EFBFBD><EFBFBD><EFBFBD>"), MatchStartTime.GetHour(), MatchStartTime.GetMinute(), MatchStartTime.GetSecond());
return false;
}
return true;
}
void CLockTimeMatch::SendMatchWaitTip(IServerUserItem* pIServerUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
CMD_GR_Match_Wait_Tip WaitTip;
ZeroMemory(&WaitTip, sizeof(WaitTip));
WaitTip.wUserCount = (WORD)m_pIServerUserManager->GetUserItemCount();
WaitTip.wCurGameCount = (WORD)pIServerUserItem->GetUserPlayCount() + 1;
WaitTip.wGameCount = m_pMatchOption->MatchType.LockTime.wMatchPlayCount;
lstrcpyn(WaitTip.szMatchName, m_pMatchOption->szMatchName, LEN_SERVER);
//<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WaitTip.wRank = GetUserRank(pIServerUserItem);
WaitTip.lScore = pIServerUserItem->GetUserScore();
WaitTip.cbScoreMultiple = pIServerUserItem->getScoreMultiple();
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_WAIT_TIP, &WaitTip, sizeof(WaitTip));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////