Files
wnmj/Servers/服务器组件/游戏服务/ServerUserManager.cpp

908 lines
20 KiB
C++
Raw Normal View History

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