#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; //构造函数 CServerUserItem::CServerUserItem() { //附加变量 m_dwUserRight=0L; m_dwMasterRight=0L; //托管变量 m_lTrusteeScore=0L; m_lRestrictScore=0L; m_lFrozenedScore=0L; m_lFrozenedScore=0L; //登录信息 m_dwDBQuestID=0L; m_dwLogonTime=0L; m_dwInoutIndex=INVALID_DWORD; //客户类型 m_bMobileUser=false; m_bAndroidUser=false; m_bCheatUser = false; //组件接口 m_pIServerUserItemSink=NULL; //系统属性 m_wBindIndex=INVALID_WORD; m_dwClientAddr=INADDR_NONE; ZeroMemory(m_szMachineID,sizeof(m_szMachineID)); //辅助变量 m_bClientReady=false; m_bModifyScore=false; m_cbReUserStatus = US_NULL; ZeroMemory(m_szLogonPass,sizeof(m_szLogonPass)); //属性变量 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; //记录信息 ZeroMemory(&m_RecordInfo,sizeof(m_RecordInfo)); ZeroMemory(&m_VariationInfo,sizeof(m_VariationInfo)); //手机定义 m_wMobileUserRule=0; m_wMobileUserRule |= VIEW_MODE_PART; m_wMobileUserRule |= VIEW_INFO_LEVEL_1; m_wDeskPos=0; m_wDeskCount=1; //比赛信息; m_cbMatchStatus = MUS_NULL; //牌库 m_dwCardLibIndex = 0; m_dwStartLibTime = 0; m_dwStopLibTime = 0; m_cbCardLibEnabled = 0; return; } //析构函数 CServerUserItem::~CServerUserItem() { } //接口查询 VOID * CServerUserItem::QueryInterface(REFGUID Guid, DWORD dwQueryVer) { QUERYINTERFACE(IServerUserItem,Guid,dwQueryVer); QUERYINTERFACE(IServerUserService,Guid,dwQueryVer); QUERYINTERFACE_IUNKNOWNEX(IServerUserItem,Guid,dwQueryVer); return NULL; } //用户倍数; BYTE CServerUserItem::getScoreMultiple() { BYTE cbScoreMultiple = m_UserInfo.cbScoreMultiple; if (cbScoreMultiple <= 1) { cbScoreMultiple = 1; } return cbScoreMultiple; } //用户胜率 WORD CServerUserItem::GetUserWinRate() { //计算胜率 DWORD dwPlayCount=GetUserPlayCount(); if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwWinCount*10000L/dwPlayCount); return 0; } //用户输率 WORD CServerUserItem::GetUserLostRate() { //计算输率 DWORD dwPlayCount=GetUserPlayCount(); if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwLostCount*10000L/dwPlayCount); return 0; } //用户和率 WORD CServerUserItem::GetUserDrawRate() { //计算和率 DWORD dwPlayCount=GetUserPlayCount(); if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwDrawCount*10000L/dwPlayCount); return 0; } //用户逃率 WORD CServerUserItem::GetUserFleeRate() { //计算逃率 DWORD dwPlayCount=GetUserPlayCount(); if (dwPlayCount!=0L) return (WORD)(m_UserInfo.dwFleeCount*10000L/dwPlayCount); return 0; } //对比帐号 bool CServerUserItem::ContrastNickName(LPCTSTR pszNickName) { //效验参数 ASSERT(pszNickName!=NULL); if (pszNickName==NULL) return false; //长度对比 INT nContrastLen=lstrlen(pszNickName); INT nSourceLen=lstrlen(m_UserInfo.szNickName); //字符对比 if (nContrastLen!=nSourceLen) return false; if (CompareString(LOCALE_SYSTEM_DEFAULT,NORM_IGNORECASE,pszNickName,nContrastLen,m_UserInfo.szNickName,nSourceLen)!=CSTR_EQUAL) return false; return true; } //对比密码 bool CServerUserItem::ContrastLogonPass(LPCTSTR pszPassword) { //效验参数 ASSERT(pszPassword!=NULL); if (pszPassword==NULL) return false; //长度对比 INT nTargetLen=lstrlen(pszPassword); INT nSourceLen=lstrlen(m_szLogonPass); //密码对比 if (nTargetLen!=nSourceLen) return false; if (CompareString(LOCALE_SYSTEM_DEFAULT,NORM_IGNORECASE,pszPassword,nTargetLen,m_szLogonPass,nSourceLen)!=CSTR_EQUAL) return false; return true; } //设置状态不同步到客户端; bool CServerUserItem::SetUserStatus(BYTE cbUserStatus) { //效验状态 ASSERT(m_UserInfo.dwUserID != 0L); if (m_UserInfo.dwUserID == 0L) return false; //设置变量 m_UserInfo.cbUserStatus = cbUserStatus; return true; } //设置状态 bool CServerUserItem::SetUserStatus(BYTE cbUserStatus, WORD wTableID, WORD wChairID) { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //记录信息 WORD wOldTableID=m_UserInfo.wTableID; WORD wOldChairID=m_UserInfo.wChairID; //设置变量 m_UserInfo.wTableID=wTableID; m_UserInfo.wChairID=wChairID; m_UserInfo.cbUserStatus=cbUserStatus; //发送状态 ASSERT(m_pIServerUserItemSink!=NULL); if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemStatus(this,wOldTableID,wOldChairID); return true; } //写入积分 bool CServerUserItem::WriteUserScore(SCORE lScore, SCORE lGrade, SCORE lRevenue, DWORD dwUserMedal, BYTE cbScoreType, BYTE cbNextScoreMultiple, DWORD dwPlayTimeCount) { //效验状态 ASSERT((m_UserInfo.dwUserID!=0L)&&(cbScoreType!=SCORE_TYPE_NULL)); if ((m_UserInfo.dwUserID==0L)||(cbScoreType==SCORE_TYPE_NULL)) return false; //修改胜负 switch (cbScoreType) { case SCORE_TYPE_WIN: //胜局 { m_UserInfo.dwWinCount++; m_RecordInfo.dwWinCount++; m_VariationInfo.dwWinCount++; break; } case SCORE_TYPE_LOSE: //输局 { m_UserInfo.dwLostCount++; m_RecordInfo.dwLostCount++; m_VariationInfo.dwLostCount++; break; } case SCORE_TYPE_DRAW: //和局 { m_UserInfo.dwDrawCount++; m_RecordInfo.dwDrawCount++; m_VariationInfo.dwDrawCount++; break; } case SCORE_TYPE_FLEE: //逃局 { m_UserInfo.dwFleeCount++; m_RecordInfo.dwFleeCount++; m_VariationInfo.dwFleeCount++; break; } } //设置标志 m_bModifyScore=true; //设置积分 m_UserInfo.lScore+=lScore; m_UserInfo.lGrade+=lGrade; m_UserInfo.dwUserMedal+=dwUserMedal; m_UserInfo.dwExperience+=(dwPlayTimeCount+59L)/60L; m_UserInfo.cbScoreMultiple = cbNextScoreMultiple; //记录信息 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; //变更信息 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) { //比赛场机器人也参与了排名,所以需要分数;(这个地方特别注意); m_VariationInfo.lScore+=lScore; m_VariationInfo.lGrade+=lGrade; m_VariationInfo.lRevenue+=lRevenue; } //托管积分 if (m_lRestrictScore>0L) { //变量定义 SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore; //托管调整 if (lTotalScore>m_lRestrictScore) { m_UserInfo.lScore=m_lRestrictScore; m_lTrusteeScore=lTotalScore-m_lRestrictScore; } else { m_lTrusteeScore=0L; m_UserInfo.lScore=lTotalScore; } } //发送状态 ASSERT(m_pIServerUserItemSink!=NULL); if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemScore(this,SCORE_REASON_WRITE); return true; } //是否可以使用牌库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; } //获取牌库索引 DWORD CServerUserItem::getCardLibIndex() { return m_dwCardLibIndex; } //设置牌库索引 void CServerUserItem::setCardLibIndex(DWORD dwCardLibIndex) { m_dwCardLibIndex = dwCardLibIndex; } //累加牌库索引 void CServerUserItem::addCardLibIndex() { //if (++m_dwCardLibIndex >= g_dwCardLibCount) //{ // m_dwCardLibIndex = 0; //} if (++m_dwCardLibIndex > g_dwCardLibCustomCount) { m_dwCardLibIndex = 1; } } //设置牌库可用性 void CServerUserItem::setCardLibEnabled(bool bEnabled) { m_cbCardLibEnabled = bEnabled ? 1 : 0; } //设置牌库使用时间段 void CServerUserItem::setUseCardLibTime(DWORD dwStartTime, DWORD dwEndTime) { m_dwStartLibTime = dwStartTime; m_dwStopLibTime = dwEndTime; } VOID CServerUserItem::addPrivateAction(DWORD dwAction) { } //统计私人场玩家局数 VOID CServerUserItem::addPrivatePlayCout(WORD wCout) { } //查询记录 bool CServerUserItem::QueryRecordInfo(tagVariationInfo & RecordInfo) { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //设置变量 RecordInfo=m_RecordInfo; return true; } //提取变更 bool CServerUserItem::DistillVariation(tagVariationInfo & VariationInfo) { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //修改判断 if (m_bModifyScore==true) { //设置变量 VariationInfo=m_VariationInfo; } else { //设置变量 ZeroMemory(&VariationInfo,sizeof(VariationInfo)); } //还原变量 m_bModifyScore=false; ZeroMemory(&m_VariationInfo,sizeof(m_VariationInfo)); return true; } //冻结积分 bool CServerUserItem::FrozenedUserScore(SCORE lScore) { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //效验积分 ASSERT((lScore>=0L)&&((m_UserInfo.lScore+m_lTrusteeScore)>=lScore)); if ((lScore<0L)||((m_UserInfo.lScore+m_lTrusteeScore)=0L)&&(m_lFrozenedScore>=lScore)); if ((lScore<0L)||(m_lFrozenedScore0L) { //变量定义 SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore; //托管调整 if (lTotalScore>m_lRestrictScore) { m_UserInfo.lScore=m_lRestrictScore; m_lTrusteeScore=lTotalScore-m_lRestrictScore; } else { m_lTrusteeScore=0L; m_UserInfo.lScore=lTotalScore; } } return true; } //修改信息 bool CServerUserItem::ModifyUserProperty(SCORE lScore,LONG lLoveLiness) { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //设置积分 m_UserInfo.lScore+=lScore; m_UserInfo.lLoveLiness+=lLoveLiness; //记录信息 m_RecordInfo.lScore+=lScore; m_RecordInfo.lLoveLiness+=lLoveLiness; //变更信息 if (lLoveLiness!=0L) { m_bModifyScore=true; m_VariationInfo.lLoveLiness+=lLoveLiness; } //托管积分 if ((m_lRestrictScore>0L)&&(lScore!=0L)) { //变量定义 SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore; //托管调整 if (lTotalScore>m_lRestrictScore) { m_UserInfo.lScore=m_lRestrictScore; m_lTrusteeScore=lTotalScore-m_lRestrictScore; } else { m_lTrusteeScore=0L; m_UserInfo.lScore=lTotalScore; } } //发送状态 ASSERT(m_pIServerUserItemSink!=NULL); if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemScore(this, SCORE_REASON_PROPERTY); return true; } //解除绑定 bool CServerUserItem::DetachBindStatus() { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //用户属性 m_bClientReady=false; //连接属性 m_wBindIndex=INVALID_WORD; return true; } //银行操作 bool CServerUserItem::ModifyUserInsure(SCORE lScore, SCORE lInsure, SCORE lRevenue) { //平衡效验 /*ASSERT((m_bAndroidUser==true)||(((lScore+lInsure+lRevenue)==0L)&&(lRevenue>=0L))); if ((m_bAndroidUser==false)&&(((lScore+lInsure+lRevenue)!=0L)||(lRevenue<0L))) return false;*/ //效验状态 /*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;*/ //设置积分 m_UserInfo.lScore+=lScore; m_UserInfo.lInsure+=lInsure; //记录信息 m_RecordInfo.lScore+=lScore; m_RecordInfo.lInsure+=lInsure; m_RecordInfo.lRevenue+=lRevenue; //托管积分 if (m_lRestrictScore>0L) { //变量定义 SCORE lTotalScore=m_UserInfo.lScore+m_lTrusteeScore; //托管调整 if (lTotalScore>m_lRestrictScore) { m_UserInfo.lScore=m_lRestrictScore; m_lTrusteeScore=lTotalScore-m_lRestrictScore; } else { m_lTrusteeScore=0L; m_UserInfo.lScore=lTotalScore; } } //发送状态 ASSERT(m_pIServerUserItemSink!=NULL); if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemScore(this, SCORE_REASON_INSURE); return true; } //设置参数 bool CServerUserItem::SetUserParameter(DWORD dwClientAddr, WORD wBindIndex, TCHAR szMachineID[LEN_MACHINE_ID], bool bAndroidUser, bool bClientReady) { //效验状态 ASSERT(m_UserInfo.dwUserID!=0L); if (m_UserInfo.dwUserID==0L) return false; //用户属性 m_bAndroidUser=bAndroidUser; m_bClientReady=bClientReady; //连接属性 m_wBindIndex=wBindIndex; m_dwClientAddr=dwClientAddr; lstrcpyn(m_szMachineID,szMachineID,CountArray(m_szMachineID)); return true; } //修改权限 VOID CServerUserItem::ModifyUserRight( DWORD dwAddRight, DWORD dwRemoveRight, bool bGameRight) { //添加权限 m_dwUserRight |= dwAddRight; //删除权限 m_dwUserRight &= ~dwRemoveRight; //发送状态 ASSERT(m_pIServerUserItemSink!=NULL); if (m_pIServerUserItemSink!=NULL) m_pIServerUserItemSink->OnEventUserItemRight(this,dwAddRight,dwRemoveRight,bGameRight); return; } //重置数据 VOID CServerUserItem::ResetUserItem() { //附加变量 m_dwUserRight=0L; m_dwMasterRight=0L; //托管变量 m_lTrusteeScore=0L; m_lRestrictScore=0L; m_lFrozenedScore=0L; m_lFrozenedScore=0L; //登录信息 m_dwDBQuestID=0L; m_dwLogonTime=0L; m_dwInoutIndex=INVALID_DWORD; //系统属性 m_wBindIndex=INVALID_WORD; m_dwClientAddr=INADDR_ANY; ZeroMemory(m_szMachineID,sizeof(m_szMachineID)); //客户类型 m_bMobileUser=false; m_bAndroidUser=false; m_bCheatUser = false; //辅助变量 m_bClientReady=false; m_bModifyScore=false; ZeroMemory(m_szLogonPass,sizeof(m_szLogonPass)); //属性变量 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; //记录信息 ZeroMemory(&m_RecordInfo,sizeof(m_RecordInfo)); ZeroMemory(&m_VariationInfo,sizeof(m_VariationInfo)); //手机定义 m_wMobileUserRule=0; m_wMobileUserRule |= VIEW_MODE_PART; m_wMobileUserRule |= VIEW_INFO_LEVEL_1; m_wDeskPos=0; m_wDeskCount=1; return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CServerUserManager::CServerUserManager() { //组件接口 m_pIServerUserItemSink=NULL; //设置质数 m_UserIDMap.InitHashTable(PRIME_SERVER_USER); return; } //析构函数 CServerUserManager::~CServerUserManager() { //释放用户 for (INT_PTR i=0;iRelease(); for (INT_PTR i=0;iRelease(); //删除数据 m_UserIDMap.RemoveAll(); m_UserItemStore.RemoveAll(); m_UserItemArray.RemoveAll(); return; } //接口查询 VOID * CServerUserManager::QueryInterface(REFGUID Guid, DWORD dwQueryVer) { QUERYINTERFACE(IServerUserManager,Guid,dwQueryVer); QUERYINTERFACE_IUNKNOWNEX(IServerUserManager,Guid,dwQueryVer); return NULL; } //设置接口 bool CServerUserManager::SetServerUserItemSink(IUnknownEx * pIUnknownEx) { //设置接口 if (pIUnknownEx!=NULL) { //查询接口 ASSERT(QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IServerUserItemSink)!=NULL); m_pIServerUserItemSink=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IServerUserItemSink); //成功判断 if (m_pIServerUserItemSink==NULL) return false; } else m_pIServerUserItemSink=NULL; return true; } //枚举用户 IServerUserItem * CServerUserManager::EnumUserItem(WORD wEnumIndex) { if (wEnumIndex>=m_UserItemArray.GetCount()) return NULL; return m_UserItemArray[wEnumIndex]; } //查找用户 IServerUserItem * CServerUserManager::SearchUserItem(DWORD dwUserID) { return m_UserIDMap[dwUserID]; } //查找用户 IServerUserItem * CServerUserManager::SearchUserItem(LPCTSTR pszNickName) { //变量定义 CServerUserItem * pServerUserItem=NULL; //搜索用户 for (INT_PTR i=0;iContrastNickName(pszNickName)==true) return pServerUserItem; } return NULL; } //删除用户 bool CServerUserManager::DeleteUserItem() { //存储对象 m_UserItemStore.Append(m_UserItemArray); //删除对象 m_UserIDMap.RemoveAll(); m_UserItemArray.RemoveAll(); return true; } //删除用户 bool CServerUserManager::DeleteUserItem(IServerUserItem * pIServerUserItem) { //效验参数 ASSERT((pIServerUserItem!=NULL)&&(pIServerUserItem->GetUserStatus()==US_NULL)); if ((pIServerUserItem==NULL)||(pIServerUserItem->GetUserStatus()!=US_NULL)) return false; //变量定义 CServerUserItem * pTempUserItem=NULL; DWORD dwUserID=pIServerUserItem->GetUserID(); //寻找对象 for (INT_PTR i=0;iResetUserItem(); //删除对象 m_UserItemArray.RemoveAt(i); m_UserIDMap.RemoveKey(dwUserID); m_UserItemStore.Add(pTempUserItem); return true; } //错误断言 ASSERT(FALSE); return false; } //插入用户 bool CServerUserManager::InsertUserItem(IServerUserItem * * pIServerUserResult, tagUserInfo & UserInfo, tagUserInfoPlus & UserInfoPlus) { //变量定义 CServerUserItem * pServerUserItem=NULL; //获取指针 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; //原始变量 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; //属性变量 CopyMemory(&pServerUserItem->m_UserInfo,&UserInfo,sizeof(UserInfo)); ZeroMemory(&pServerUserItem->m_RecordInfo,sizeof(pServerUserItem->m_RecordInfo)); ZeroMemory(&pServerUserItem->m_VariationInfo,sizeof(pServerUserItem->m_VariationInfo)); //牌库变量 pServerUserItem->m_dwCardLibIndex = UserInfoPlus.dwCardLibIndex; //使用牌库索引 pServerUserItem->m_dwStartLibTime = UserInfoPlus.dwStartLibTime; //牌库开始使用时间 pServerUserItem->m_dwStopLibTime = UserInfoPlus.dwStopLibTime; //牌库结束使用时间 pServerUserItem->m_cbCardLibEnabled = UserInfoPlus.cbCardLibEnabled; //牌库有效标志 //登录信息 pServerUserItem->m_dwLogonTime=UserInfoPlus.dwLogonTime; pServerUserItem->m_dwInoutIndex=UserInfoPlus.dwInoutIndex; //用户权限 pServerUserItem->m_dwUserRight=UserInfoPlus.dwUserRight; pServerUserItem->m_dwMasterRight=UserInfoPlus.dwMasterRight; pServerUserItem->m_lRestrictScore=UserInfoPlus.lRestrictScore; //连接信息 pServerUserItem->m_wBindIndex=UserInfoPlus.wBindIndex; pServerUserItem->m_dwClientAddr=UserInfoPlus.dwClientAddr; lstrcpyn(pServerUserItem->m_szMachineID,UserInfoPlus.szMachineID,CountArray(pServerUserItem->m_szMachineID)); //辅助变量 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)); //托管调整 if ((UserInfoPlus.lRestrictScore>0L)&&(UserInfo.lScore>UserInfoPlus.lRestrictScore)) { pServerUserItem->m_UserInfo.lScore=UserInfoPlus.lRestrictScore; pServerUserItem->m_lTrusteeScore=UserInfo.lScore-UserInfoPlus.lRestrictScore; } //插入用户 m_UserItemArray.Add(pServerUserItem); m_UserIDMap[UserInfo.dwUserID]=pServerUserItem; //设置变量 *pIServerUserResult=pServerUserItem; return true; } //////////////////////////////////////////////////////////////////////////////////