2136 lines
62 KiB
C++
2136 lines
62 KiB
C++
|
|
#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));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|