908 lines
20 KiB
C++
908 lines
20 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "ServerUserManager.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
DWORD CServerUserItem::g_dwCardLibCount = 0;
|
|||
|
|
BYTE CServerUserItem::g_cbCardLibEnable = 0;
|
|||
|
|
DWORD CServerUserItem::g_dwLibStartDateTime = 0;
|
|||
|
|
DWORD CServerUserItem::g_dwLibEndDateTime = 0;
|
|||
|
|
DWORD CServerUserItem::g_dwCardLibCustomCount = 0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CServerUserItem::CServerUserItem()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
|
|||
|
|
m_dwUserRight=0L;
|
|||
|
|
m_dwMasterRight=0L;
|
|||
|
|
|
|||
|
|
//<2F>йܱ<D0B9><DCB1><EFBFBD>
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
m_lRestrictScore=0L;
|
|||
|
|
m_lFrozenedScore=0L;
|
|||
|
|
m_lFrozenedScore=0L;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
m_dwDBQuestID=0L;
|
|||
|
|
m_dwLogonTime=0L;
|
|||
|
|
m_dwInoutIndex=INVALID_DWORD;
|
|||
|
|
|
|||
|
|
//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_bMobileUser=false;
|
|||
|
|
m_bAndroidUser=false;
|
|||
|
|
m_bCheatUser = false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
m_pIServerUserItemSink=NULL;
|
|||
|
|
|
|||
|
|
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|||
|
|
m_wBindIndex=INVALID_WORD;
|
|||
|
|
m_dwClientAddr=INADDR_NONE;
|
|||
|
|
ZeroMemory(m_szMachineID,sizeof(m_szMachineID));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_bClientReady=false;
|
|||
|
|
m_bModifyScore=false;
|
|||
|
|
m_cbReUserStatus = US_NULL;
|
|||
|
|
ZeroMemory(m_szLogonPass,sizeof(m_szLogonPass));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>
|
|||
|
|
ZeroMemory(&m_UserInfo,sizeof(m_UserInfo));
|
|||
|
|
ZeroMemory(&m_UserRule,sizeof(m_UserRule));
|
|||
|
|
ZeroMemory(&m_ScoreFormer,sizeof(m_ScoreFormer));
|
|||
|
|
ZeroMemory(&m_UserProperty,sizeof(m_UserProperty));
|
|||
|
|
m_UserInfo.wTableID=INVALID_TABLE;
|
|||
|
|
m_UserInfo.wChairID=INVALID_CHAIR;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
ZeroMemory(&m_RecordInfo,sizeof(m_RecordInfo));
|
|||
|
|
ZeroMemory(&m_VariationInfo,sizeof(m_VariationInfo));
|
|||
|
|
|
|||
|
|
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_wMobileUserRule=0;
|
|||
|
|
m_wMobileUserRule |= VIEW_MODE_PART;
|
|||
|
|
m_wMobileUserRule |= VIEW_INFO_LEVEL_1;
|
|||
|
|
m_wDeskPos=0;
|
|||
|
|
m_wDeskCount=1;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
|
|||
|
|
m_cbMatchStatus = MUS_NULL;
|
|||
|
|
|
|||
|
|
//<2F>ƿ<EFBFBD>
|
|||
|
|
m_dwCardLibIndex = 0;
|
|||
|
|
m_dwStartLibTime = 0;
|
|||
|
|
m_dwStopLibTime = 0;
|
|||
|
|
m_cbCardLibEnabled = 0;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServerUserItem::~CServerUserItem()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
VOID * CServerUserItem::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
QUERYINTERFACE(IServerUserItem,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE(IServerUserService,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE_IUNKNOWNEX(IServerUserItem,Guid,dwQueryVer);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE CServerUserItem::getScoreMultiple()
|
|||
|
|
{
|
|||
|
|
BYTE cbScoreMultiple = m_UserInfo.cbScoreMultiple;
|
|||
|
|
|
|||
|
|
if (cbScoreMultiple <= 1)
|
|||
|
|
{
|
|||
|
|
cbScoreMultiple = 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return cbScoreMultiple;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD>ʤ<EFBFBD><CAA4>
|
|||
|
|
WORD CServerUserItem::GetUserWinRate()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʤ<EFBFBD><CAA4>
|
|||
|
|
DWORD dwPlayCount=GetUserPlayCount();
|
|||
|
|
if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwWinCount*10000L/dwPlayCount);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CServerUserItem::GetUserLostRate()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DWORD dwPlayCount=GetUserPlayCount();
|
|||
|
|
if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwLostCount*10000L/dwPlayCount);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CServerUserItem::GetUserDrawRate()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DWORD dwPlayCount=GetUserPlayCount();
|
|||
|
|
if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwDrawCount*10000L/dwPlayCount);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CServerUserItem::GetUserFleeRate()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DWORD dwPlayCount=GetUserPlayCount();
|
|||
|
|
if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwFleeCount*10000L/dwPlayCount);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1>ʺ<EFBFBD>
|
|||
|
|
bool CServerUserItem::ContrastNickName(LPCTSTR pszNickName)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pszNickName!=NULL);
|
|||
|
|
if (pszNickName==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ȶԱ<C8B6>
|
|||
|
|
INT nContrastLen=lstrlen(pszNickName);
|
|||
|
|
INT nSourceLen=lstrlen(m_UserInfo.szNickName);
|
|||
|
|
|
|||
|
|
//<2F>ַ<EFBFBD><D6B7>Ա<EFBFBD>
|
|||
|
|
if (nContrastLen!=nSourceLen) return false;
|
|||
|
|
if (CompareString(LOCALE_SYSTEM_DEFAULT,NORM_IGNORECASE,pszNickName,nContrastLen,m_UserInfo.szNickName,nSourceLen)!=CSTR_EQUAL) return false;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServerUserItem::ContrastLogonPass(LPCTSTR pszPassword)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pszPassword!=NULL);
|
|||
|
|
if (pszPassword==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ȶԱ<C8B6>
|
|||
|
|
INT nTargetLen=lstrlen(pszPassword);
|
|||
|
|
INT nSourceLen=lstrlen(m_szLogonPass);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
|
|||
|
|
if (nTargetLen!=nSourceLen) return false;
|
|||
|
|
if (CompareString(LOCALE_SYSTEM_DEFAULT,NORM_IGNORECASE,pszPassword,nTargetLen,m_szLogonPass,nSourceLen)!=CSTR_EQUAL) return false;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>;
|
|||
|
|
bool CServerUserItem::SetUserStatus(BYTE cbUserStatus)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID != 0L);
|
|||
|
|
if (m_UserInfo.dwUserID == 0L) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_UserInfo.cbUserStatus = cbUserStatus;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
bool CServerUserItem::SetUserStatus(BYTE cbUserStatus, WORD wTableID, WORD wChairID)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
WORD wOldTableID=m_UserInfo.wTableID;
|
|||
|
|
WORD wOldChairID=m_UserInfo.wChairID;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_UserInfo.wTableID=wTableID;
|
|||
|
|
m_UserInfo.wChairID=wChairID;
|
|||
|
|
m_UserInfo.cbUserStatus=cbUserStatus;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
ASSERT(m_pIServerUserItemSink!=NULL);
|
|||
|
|
if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemStatus(this,wOldTableID,wOldChairID);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServerUserItem::WriteUserScore(SCORE lScore, SCORE lGrade, SCORE lRevenue, DWORD dwUserMedal, BYTE cbScoreType, BYTE cbNextScoreMultiple, DWORD dwPlayTimeCount)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT((m_UserInfo.dwUserID!=0L)&&(cbScoreType!=SCORE_TYPE_NULL));
|
|||
|
|
if ((m_UserInfo.dwUserID==0L)||(cbScoreType==SCORE_TYPE_NULL)) return false;
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD>ʤ<EFBFBD><CAA4>
|
|||
|
|
switch (cbScoreType)
|
|||
|
|
{
|
|||
|
|
case SCORE_TYPE_WIN: //ʤ<><CAA4>
|
|||
|
|
{
|
|||
|
|
m_UserInfo.dwWinCount++;
|
|||
|
|
m_RecordInfo.dwWinCount++;
|
|||
|
|
m_VariationInfo.dwWinCount++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case SCORE_TYPE_LOSE: //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
m_UserInfo.dwLostCount++;
|
|||
|
|
m_RecordInfo.dwLostCount++;
|
|||
|
|
m_VariationInfo.dwLostCount++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case SCORE_TYPE_DRAW: //<2F>;<EFBFBD>
|
|||
|
|
{
|
|||
|
|
m_UserInfo.dwDrawCount++;
|
|||
|
|
m_RecordInfo.dwDrawCount++;
|
|||
|
|
m_VariationInfo.dwDrawCount++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case SCORE_TYPE_FLEE: //<2F>Ӿ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
m_UserInfo.dwFleeCount++;
|
|||
|
|
m_RecordInfo.dwFleeCount++;
|
|||
|
|
m_VariationInfo.dwFleeCount++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD>־
|
|||
|
|
m_bModifyScore=true;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
|
|||
|
|
m_UserInfo.lScore+=lScore;
|
|||
|
|
m_UserInfo.lGrade+=lGrade;
|
|||
|
|
m_UserInfo.dwUserMedal+=dwUserMedal;
|
|||
|
|
m_UserInfo.dwExperience+=(dwPlayTimeCount+59L)/60L;
|
|||
|
|
m_UserInfo.cbScoreMultiple = cbNextScoreMultiple;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
m_RecordInfo.lScore+=lScore;
|
|||
|
|
m_RecordInfo.lGrade+=lGrade;
|
|||
|
|
m_RecordInfo.lRevenue+=lRevenue;
|
|||
|
|
m_RecordInfo.dwUserMedal+=dwUserMedal;
|
|||
|
|
m_RecordInfo.dwPlayTimeCount+=dwPlayTimeCount;
|
|||
|
|
m_RecordInfo.dwExperience+=(dwPlayTimeCount+59L)/60L;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
m_VariationInfo.cbNextScoreMultiple = cbNextScoreMultiple;
|
|||
|
|
m_VariationInfo.dwUserMedal+=dwUserMedal;
|
|||
|
|
m_VariationInfo.dwPlayTimeCount+=dwPlayTimeCount;
|
|||
|
|
m_VariationInfo.dwExperience+=(dwPlayTimeCount+59L)/60L;
|
|||
|
|
if ((m_cbMatchStatus != MUS_NULL) || IsAndroidUser() == false)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>;(<28><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>ر<EFBFBD>ע<EFBFBD><D7A2>);
|
|||
|
|
m_VariationInfo.lScore+=lScore;
|
|||
|
|
m_VariationInfo.lGrade+=lGrade;
|
|||
|
|
m_VariationInfo.lRevenue+=lRevenue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>йܻ<D0B9><DCBB><EFBFBD>
|
|||
|
|
if (m_lRestrictScore>0L)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore;
|
|||
|
|
|
|||
|
|
//<2F>йܵ<D0B9><DCB5><EFBFBD>
|
|||
|
|
if (lTotalScore>m_lRestrictScore)
|
|||
|
|
{
|
|||
|
|
m_UserInfo.lScore=m_lRestrictScore;
|
|||
|
|
m_lTrusteeScore=lTotalScore-m_lRestrictScore;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
m_UserInfo.lScore=lTotalScore;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
ASSERT(m_pIServerUserItemSink!=NULL);
|
|||
|
|
if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemScore(this,SCORE_REASON_WRITE);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ƿ<EFBFBD>z
|
|||
|
|
bool CServerUserItem::canUseCardLib()
|
|||
|
|
{
|
|||
|
|
if (m_cbCardLibEnabled == 0)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CTime cTime = CTime::GetCurrentTime();
|
|||
|
|
DWORD dwCurTime = cTime.GetTime();
|
|||
|
|
if (dwCurTime >= m_dwStartLibTime && dwCurTime <= m_dwStopLibTime)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DWORD CServerUserItem::getCardLibIndex()
|
|||
|
|
{
|
|||
|
|
return m_dwCardLibIndex;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void CServerUserItem::setCardLibIndex(DWORD dwCardLibIndex)
|
|||
|
|
{
|
|||
|
|
m_dwCardLibIndex = dwCardLibIndex;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ۼ<EFBFBD><DBBC>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void CServerUserItem::addCardLibIndex()
|
|||
|
|
{
|
|||
|
|
//if (++m_dwCardLibIndex >= g_dwCardLibCount)
|
|||
|
|
//{
|
|||
|
|
// m_dwCardLibIndex = 0;
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
if (++m_dwCardLibIndex > g_dwCardLibCustomCount)
|
|||
|
|
{
|
|||
|
|
m_dwCardLibIndex = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void CServerUserItem::setCardLibEnabled(bool bEnabled)
|
|||
|
|
{
|
|||
|
|
m_cbCardLibEnabled = bEnabled ? 1 : 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
void CServerUserItem::setUseCardLibTime(DWORD dwStartTime, DWORD dwEndTime)
|
|||
|
|
{
|
|||
|
|
m_dwStartLibTime = dwStartTime;
|
|||
|
|
m_dwStopLibTime = dwEndTime;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CServerUserItem::addPrivateAction(DWORD dwAction)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ͳ<><CDB3>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>Ҿ<EFBFBD><D2BE><EFBFBD>
|
|||
|
|
VOID CServerUserItem::addPrivatePlayCout(WORD wCout)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ѯ<EFBFBD><D1AF>¼
|
|||
|
|
bool CServerUserItem::QueryRecordInfo(tagVariationInfo & RecordInfo)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
RecordInfo=m_RecordInfo;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
bool CServerUserItem::DistillVariation(tagVariationInfo & VariationInfo)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><DEB8>ж<EFBFBD>
|
|||
|
|
if (m_bModifyScore==true)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
VariationInfo=m_VariationInfo;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
ZeroMemory(&VariationInfo,sizeof(VariationInfo));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
|||
|
|
m_bModifyScore=false;
|
|||
|
|
ZeroMemory(&m_VariationInfo,sizeof(m_VariationInfo));
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServerUserItem::FrozenedUserScore(SCORE lScore)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT((lScore>=0L)&&((m_UserInfo.lScore+m_lTrusteeScore)>=lScore));
|
|||
|
|
if ((lScore<0L)||((m_UserInfo.lScore+m_lTrusteeScore)<lScore)) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_lFrozenedScore+=lScore;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
if (m_lTrusteeScore<lScore)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
lScore-=m_lTrusteeScore;
|
|||
|
|
m_UserInfo.lScore-=lScore;
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_lTrusteeScore-=lScore;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ⶳ<EFBFBD><E2B6B3><EFBFBD><EFBFBD>
|
|||
|
|
bool CServerUserItem::UnFrozenedUserScore(SCORE lScore)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT((lScore>=0L)&&(m_lFrozenedScore>=lScore));
|
|||
|
|
if ((lScore<0L)||(m_lFrozenedScore<lScore)) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_lFrozenedScore-=lScore;
|
|||
|
|
m_UserInfo.lScore+=lScore;
|
|||
|
|
|
|||
|
|
//<2F>йܻ<D0B9><DCBB><EFBFBD>
|
|||
|
|
if (m_lRestrictScore>0L)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore;
|
|||
|
|
|
|||
|
|
//<2F>йܵ<D0B9><DCB5><EFBFBD>
|
|||
|
|
if (lTotalScore>m_lRestrictScore)
|
|||
|
|
{
|
|||
|
|
m_UserInfo.lScore=m_lRestrictScore;
|
|||
|
|
m_lTrusteeScore=lTotalScore-m_lRestrictScore;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
m_UserInfo.lScore=lTotalScore;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><DEB8><EFBFBD>Ϣ
|
|||
|
|
bool CServerUserItem::ModifyUserProperty(SCORE lScore,LONG lLoveLiness)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
|
|||
|
|
m_UserInfo.lScore+=lScore;
|
|||
|
|
m_UserInfo.lLoveLiness+=lLoveLiness;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
m_RecordInfo.lScore+=lScore;
|
|||
|
|
m_RecordInfo.lLoveLiness+=lLoveLiness;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
if (lLoveLiness!=0L)
|
|||
|
|
{
|
|||
|
|
m_bModifyScore=true;
|
|||
|
|
m_VariationInfo.lLoveLiness+=lLoveLiness;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>йܻ<D0B9><DCBB><EFBFBD>
|
|||
|
|
if ((m_lRestrictScore>0L)&&(lScore!=0L))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore;
|
|||
|
|
|
|||
|
|
//<2F>йܵ<D0B9><DCB5><EFBFBD>
|
|||
|
|
if (lTotalScore>m_lRestrictScore)
|
|||
|
|
{
|
|||
|
|
m_UserInfo.lScore=m_lRestrictScore;
|
|||
|
|
m_lTrusteeScore=lTotalScore-m_lRestrictScore;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
m_UserInfo.lScore=lTotalScore;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
ASSERT(m_pIServerUserItemSink!=NULL);
|
|||
|
|
if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemScore(this, SCORE_REASON_PROPERTY);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServerUserItem::DetachBindStatus()
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_bClientReady=false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_wBindIndex=INVALID_WORD;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
|
|||
|
|
bool CServerUserItem::ModifyUserInsure(SCORE lScore, SCORE lInsure, SCORE lRevenue)
|
|||
|
|
{
|
|||
|
|
//ƽ<><C6BD>Ч<EFBFBD><D0A7>
|
|||
|
|
/*ASSERT((m_bAndroidUser==true)||(((lScore+lInsure+lRevenue)==0L)&&(lRevenue>=0L)));
|
|||
|
|
if ((m_bAndroidUser==false)&&(((lScore+lInsure+lRevenue)!=0L)||(lRevenue<0L))) return false;*/
|
|||
|
|
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
/*ASSERT((m_UserInfo.dwUserID!=0L)&&((m_UserInfo.lScore+m_lTrusteeScore+lScore)>=0L));
|
|||
|
|
if ((m_UserInfo.dwUserID==0L)||((m_UserInfo.lScore+m_lTrusteeScore+lScore)<0L)) return false;*/
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
|
|||
|
|
m_UserInfo.lScore+=lScore;
|
|||
|
|
m_UserInfo.lInsure+=lInsure;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
m_RecordInfo.lScore+=lScore;
|
|||
|
|
m_RecordInfo.lInsure+=lInsure;
|
|||
|
|
m_RecordInfo.lRevenue+=lRevenue;
|
|||
|
|
|
|||
|
|
//<2F>йܻ<D0B9><DCBB><EFBFBD>
|
|||
|
|
if (m_lRestrictScore>0L)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore;
|
|||
|
|
|
|||
|
|
//<2F>йܵ<D0B9><DCB5><EFBFBD>
|
|||
|
|
if (lTotalScore>m_lRestrictScore)
|
|||
|
|
{
|
|||
|
|
m_UserInfo.lScore=m_lRestrictScore;
|
|||
|
|
m_lTrusteeScore=lTotalScore-m_lRestrictScore;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
m_UserInfo.lScore=lTotalScore;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
ASSERT(m_pIServerUserItemSink!=NULL);
|
|||
|
|
if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemScore(this, SCORE_REASON_INSURE);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
bool CServerUserItem::SetUserParameter(DWORD dwClientAddr, WORD wBindIndex, TCHAR szMachineID[LEN_MACHINE_ID], bool bAndroidUser, bool bClientReady)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_UserInfo.dwUserID!=0L);
|
|||
|
|
if (m_UserInfo.dwUserID==0L) return false;
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_bAndroidUser=bAndroidUser;
|
|||
|
|
m_bClientReady=bClientReady;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_wBindIndex=wBindIndex;
|
|||
|
|
m_dwClientAddr=dwClientAddr;
|
|||
|
|
lstrcpyn(m_szMachineID,szMachineID,CountArray(m_szMachineID));
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD>Ȩ<EFBFBD><C8A8>
|
|||
|
|
VOID CServerUserItem::ModifyUserRight( DWORD dwAddRight, DWORD dwRemoveRight, bool bGameRight)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
|
|||
|
|
m_dwUserRight |= dwAddRight;
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE>Ȩ<EFBFBD><C8A8>
|
|||
|
|
m_dwUserRight &= ~dwRemoveRight;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
ASSERT(m_pIServerUserItemSink!=NULL);
|
|||
|
|
if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemRight(this,dwAddRight,dwRemoveRight,bGameRight);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
VOID CServerUserItem::ResetUserItem()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
|
|||
|
|
m_dwUserRight=0L;
|
|||
|
|
m_dwMasterRight=0L;
|
|||
|
|
|
|||
|
|
//<2F>йܱ<D0B9><DCB1><EFBFBD>
|
|||
|
|
m_lTrusteeScore=0L;
|
|||
|
|
m_lRestrictScore=0L;
|
|||
|
|
m_lFrozenedScore=0L;
|
|||
|
|
m_lFrozenedScore=0L;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
m_dwDBQuestID=0L;
|
|||
|
|
m_dwLogonTime=0L;
|
|||
|
|
m_dwInoutIndex=INVALID_DWORD;
|
|||
|
|
|
|||
|
|
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|||
|
|
m_wBindIndex=INVALID_WORD;
|
|||
|
|
m_dwClientAddr=INADDR_ANY;
|
|||
|
|
ZeroMemory(m_szMachineID,sizeof(m_szMachineID));
|
|||
|
|
|
|||
|
|
//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_bMobileUser=false;
|
|||
|
|
m_bAndroidUser=false;
|
|||
|
|
m_bCheatUser = false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_bClientReady=false;
|
|||
|
|
m_bModifyScore=false;
|
|||
|
|
ZeroMemory(m_szLogonPass,sizeof(m_szLogonPass));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>
|
|||
|
|
ZeroMemory(&m_UserInfo,sizeof(m_UserInfo));
|
|||
|
|
ZeroMemory(&m_UserRule,sizeof(m_UserRule));
|
|||
|
|
ZeroMemory(&m_ScoreFormer,sizeof(m_ScoreFormer));
|
|||
|
|
//ZeroMemory(&m_UserProperty,sizeof(m_UserProperty));
|
|||
|
|
m_UserInfo.wTableID=INVALID_TABLE;
|
|||
|
|
m_UserInfo.wChairID=INVALID_CHAIR;
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
ZeroMemory(&m_RecordInfo,sizeof(m_RecordInfo));
|
|||
|
|
ZeroMemory(&m_VariationInfo,sizeof(m_VariationInfo));
|
|||
|
|
|
|||
|
|
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_wMobileUserRule=0;
|
|||
|
|
m_wMobileUserRule |= VIEW_MODE_PART;
|
|||
|
|
m_wMobileUserRule |= VIEW_INFO_LEVEL_1;
|
|||
|
|
m_wDeskPos=0;
|
|||
|
|
m_wDeskCount=1;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CServerUserManager::CServerUserManager()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
m_pIServerUserItemSink=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_UserIDMap.InitHashTable(PRIME_SERVER_USER);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServerUserManager::~CServerUserManager()
|
|||
|
|
{
|
|||
|
|
//<2F>ͷ<EFBFBD><CDB7>û<EFBFBD>
|
|||
|
|
for (INT_PTR i=0;i<m_UserItemStore.GetCount();i++) m_UserItemStore[i]->Release();
|
|||
|
|
for (INT_PTR i=0;i<m_UserItemArray.GetCount();i++) m_UserItemArray[i]->Release();
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_UserIDMap.RemoveAll();
|
|||
|
|
m_UserItemStore.RemoveAll();
|
|||
|
|
m_UserItemArray.RemoveAll();
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
VOID * CServerUserManager::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
QUERYINTERFACE(IServerUserManager,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE_IUNKNOWNEX(IServerUserManager,Guid,dwQueryVer);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
bool CServerUserManager::SetServerUserItemSink(IUnknownEx * pIUnknownEx)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
if (pIUnknownEx!=NULL)
|
|||
|
|
{
|
|||
|
|
//<2F><>ѯ<EFBFBD>ӿ<EFBFBD>
|
|||
|
|
ASSERT(QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IServerUserItemSink)!=NULL);
|
|||
|
|
m_pIServerUserItemSink=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IServerUserItemSink);
|
|||
|
|
|
|||
|
|
//<2F>ɹ<EFBFBD><C9B9>ж<EFBFBD>
|
|||
|
|
if (m_pIServerUserItemSink==NULL) return false;
|
|||
|
|
}
|
|||
|
|
else m_pIServerUserItemSink=NULL;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ö<><C3B6><EFBFBD>û<EFBFBD>
|
|||
|
|
IServerUserItem * CServerUserManager::EnumUserItem(WORD wEnumIndex)
|
|||
|
|
{
|
|||
|
|
if (wEnumIndex>=m_UserItemArray.GetCount()) return NULL;
|
|||
|
|
return m_UserItemArray[wEnumIndex];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
IServerUserItem * CServerUserManager::SearchUserItem(DWORD dwUserID)
|
|||
|
|
{
|
|||
|
|
return m_UserIDMap[dwUserID];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
IServerUserItem * CServerUserManager::SearchUserItem(LPCTSTR pszNickName)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServerUserItem * pServerUserItem=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
for (INT_PTR i=0;i<m_UserItemArray.GetCount();i++)
|
|||
|
|
{
|
|||
|
|
pServerUserItem=m_UserItemArray[i];
|
|||
|
|
if (pServerUserItem->ContrastNickName(pszNickName)==true) return pServerUserItem;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
|
|||
|
|
bool CServerUserManager::DeleteUserItem()
|
|||
|
|
{
|
|||
|
|
//<2F>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>
|
|||
|
|
m_UserItemStore.Append(m_UserItemArray);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_UserIDMap.RemoveAll();
|
|||
|
|
m_UserItemArray.RemoveAll();
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
|
|||
|
|
bool CServerUserManager::DeleteUserItem(IServerUserItem * pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT((pIServerUserItem!=NULL)&&(pIServerUserItem->GetUserStatus()==US_NULL));
|
|||
|
|
if ((pIServerUserItem==NULL)||(pIServerUserItem->GetUserStatus()!=US_NULL)) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServerUserItem * pTempUserItem=NULL;
|
|||
|
|
DWORD dwUserID=pIServerUserItem->GetUserID();
|
|||
|
|
|
|||
|
|
//Ѱ<>Ҷ<EFBFBD><D2B6><EFBFBD>
|
|||
|
|
for (INT_PTR i=0;i<m_UserItemArray.GetCount();i++)
|
|||
|
|
{
|
|||
|
|
//<2F><>ȡ<EFBFBD>û<EFBFBD>
|
|||
|
|
pTempUserItem=m_UserItemArray[i];
|
|||
|
|
if (pIServerUserItem!=pTempUserItem) continue;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
|||
|
|
pTempUserItem->ResetUserItem();
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_UserItemArray.RemoveAt(i);
|
|||
|
|
m_UserIDMap.RemoveKey(dwUserID);
|
|||
|
|
m_UserItemStore.Add(pTempUserItem);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
bool CServerUserManager::InsertUserItem(IServerUserItem * * pIServerUserResult, tagUserInfo & UserInfo, tagUserInfoPlus & UserInfoPlus)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServerUserItem * pServerUserItem=NULL;
|
|||
|
|
|
|||
|
|
//<2F><>ȡָ<C8A1><D6B8>
|
|||
|
|
if (m_UserItemStore.GetCount()>0)
|
|||
|
|
{
|
|||
|
|
INT_PTR nItemPostion=m_UserItemStore.GetCount()-1;
|
|||
|
|
pServerUserItem=m_UserItemStore[nItemPostion];
|
|||
|
|
m_UserItemStore.RemoveAt(nItemPostion);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
pServerUserItem=new CServerUserItem;
|
|||
|
|
}
|
|||
|
|
catch (...)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
pServerUserItem->m_pIServerUserItemSink=m_pIServerUserItemSink;
|
|||
|
|
|
|||
|
|
//ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
pServerUserItem->m_ScoreFormer.lScore=UserInfo.lScore;
|
|||
|
|
pServerUserItem->m_ScoreFormer.dwWinCount=UserInfo.dwWinCount;
|
|||
|
|
pServerUserItem->m_ScoreFormer.dwLostCount=UserInfo.dwLostCount;
|
|||
|
|
pServerUserItem->m_ScoreFormer.dwDrawCount=UserInfo.dwDrawCount;
|
|||
|
|
pServerUserItem->m_ScoreFormer.dwFleeCount=UserInfo.dwFleeCount;
|
|||
|
|
pServerUserItem->m_ScoreFormer.dwExperience=UserInfo.dwExperience;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>
|
|||
|
|
CopyMemory(&pServerUserItem->m_UserInfo,&UserInfo,sizeof(UserInfo));
|
|||
|
|
ZeroMemory(&pServerUserItem->m_RecordInfo,sizeof(pServerUserItem->m_RecordInfo));
|
|||
|
|
ZeroMemory(&pServerUserItem->m_VariationInfo,sizeof(pServerUserItem->m_VariationInfo));
|
|||
|
|
|
|||
|
|
//<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pServerUserItem->m_dwCardLibIndex = UserInfoPlus.dwCardLibIndex; //ʹ<><CAB9><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pServerUserItem->m_dwStartLibTime = UserInfoPlus.dwStartLibTime; //<2F>ƿʼʹ<CABC><CAB9>ʱ<EFBFBD><CAB1>
|
|||
|
|
pServerUserItem->m_dwStopLibTime = UserInfoPlus.dwStopLibTime; //<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1>
|
|||
|
|
pServerUserItem->m_cbCardLibEnabled = UserInfoPlus.cbCardLibEnabled; //<2F>ƿ<EFBFBD><C6BF><EFBFBD>Ч<EFBFBD><D0A7>־
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|||
|
|
pServerUserItem->m_dwLogonTime=UserInfoPlus.dwLogonTime;
|
|||
|
|
pServerUserItem->m_dwInoutIndex=UserInfoPlus.dwInoutIndex;
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
|
|||
|
|
pServerUserItem->m_dwUserRight=UserInfoPlus.dwUserRight;
|
|||
|
|
pServerUserItem->m_dwMasterRight=UserInfoPlus.dwMasterRight;
|
|||
|
|
pServerUserItem->m_lRestrictScore=UserInfoPlus.lRestrictScore;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
pServerUserItem->m_wBindIndex=UserInfoPlus.wBindIndex;
|
|||
|
|
pServerUserItem->m_dwClientAddr=UserInfoPlus.dwClientAddr;
|
|||
|
|
lstrcpyn(pServerUserItem->m_szMachineID,UserInfoPlus.szMachineID,CountArray(pServerUserItem->m_szMachineID));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pServerUserItem->m_bClientReady=false;
|
|||
|
|
pServerUserItem->m_bModifyScore=false;
|
|||
|
|
pServerUserItem->m_bMobileUser=UserInfoPlus.bMobileUser;
|
|||
|
|
pServerUserItem->m_bAndroidUser=UserInfoPlus.bAndroidUser;
|
|||
|
|
lstrcpyn(pServerUserItem->m_szLogonPass,UserInfoPlus.szPassword,CountArray(pServerUserItem->m_szLogonPass));
|
|||
|
|
|
|||
|
|
//<2F>йܵ<D0B9><DCB5><EFBFBD>
|
|||
|
|
if ((UserInfoPlus.lRestrictScore>0L)&&(UserInfo.lScore>UserInfoPlus.lRestrictScore))
|
|||
|
|
{
|
|||
|
|
pServerUserItem->m_UserInfo.lScore=UserInfoPlus.lRestrictScore;
|
|||
|
|
pServerUserItem->m_lTrusteeScore=UserInfo.lScore-UserInfoPlus.lRestrictScore;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
m_UserItemArray.Add(pServerUserItem);
|
|||
|
|
m_UserIDMap[UserInfo.dwUserID]=pServerUserItem;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
*pIServerUserResult=pServerUserItem;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|