本文整理汇总了C++中MMatchObject::GetUID方法的典型用法代码示例。如果您正苦于以下问题:C++ MMatchObject::GetUID方法的具体用法?C++ MMatchObject::GetUID怎么用?C++ MMatchObject::GetUID使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MMatchObject
的用法示例。
在下文中一共展示了MMatchObject::GetUID方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ChooseCommander
const MUID MMatchRuleAssassinate::ChooseCommander(int nTeam)
{
MMatchStage* pStage = GetStage();
if (pStage == NULL) return MUID(0,0);
int nRedAliveCount, nBlueAliveCount, nChooseTeamCount;
if (GetAliveCount(&nRedAliveCount, &nBlueAliveCount) == false) return MUID(0,0);
if (nTeam == MMT_RED) {
if (nRedAliveCount <= 0) return MUID(0,0);
nChooseTeamCount = nRedAliveCount;
}
if (nTeam == MMT_BLUE) {
if (nBlueAliveCount <= 0) return MUID(0,0);
nChooseTeamCount = nBlueAliveCount;
}
if( m_bIsAdminCommander == true )
{
for(MUIDRefCache::iterator itor=pStage->GetObjBegin(); itor!=pStage->GetObjEnd(); itor++) {
MMatchObject* pObj = (MMatchObject*)(*itor).second;
if (pObj->GetEnterBattle() == false)
continue; // 배틀참가하고 있는 플레이어만 체크
if (pObj->GetTeam() == nTeam && pObj->GetAccountInfo()->m_nUGrade == MMUG_ADMIN)
{
return pObj->GetUID();
}
}
}
MTime time;
int nChoose = time.MakeNumber(1, nChooseTeamCount);
int nCount = 0;
for(MUIDRefCache::iterator itor=pStage->GetObjBegin(); itor!=pStage->GetObjEnd(); itor++) {
MMatchObject* pObj = (MMatchObject*)(*itor).second;
if (pObj->GetEnterBattle() == false) continue; // 배틀참가하고 있는 플레이어만 체크
if (pObj->GetTeam() == nTeam) {
nCount++;
if (nCount == nChoose) {
return pObj->GetUID();
}
}
}
return MUID(0,0);
}
示例2: OnAdminRequestBlockPlayer
void MMatchServer::OnAdminRequestBlockPlayer(const MUID& uidAdmin, const char* szPlayer, const int nPenaltyHour)
{
MMatchObject* pObj = GetObject(uidAdmin);
if (pObj == NULL) return;
if (!IsAdminGrade(pObj)) return;
if ((strlen(szPlayer)) < 2) return;
int nRet = MOK;
MMatchObject* pTargetObj = GetPlayerByName(szPlayer);
if (pTargetObj != NULL)
{
pTargetObj->GetAccountPenaltyInfo()->SetPenaltyInfo(MPC_CONNECT_BLOCK, nPenaltyHour);
const MPenaltyInfo* pPenaltyInfo = pTargetObj->GetAccountPenaltyInfo()->GetPenaltyInfo(MPC_CONNECT_BLOCK);
if( m_MatchDBMgr.InsertAccountPenaltyInfo(pTargetObj->GetAccountInfo()->m_nAID
, pPenaltyInfo->nPenaltyCode, nPenaltyHour, pObj->GetAccountName()) == false )
{
pTargetObj->GetAccountPenaltyInfo()->ClearPenaltyInfo(MPC_CONNECT_BLOCK);
nRet = MERR_ADNIN_CANNOT_PENALTY_ON_DB;
}
}
else
{
nRet = MERR_ADMIN_NO_TARGET;
}
MCommand* pNew = CreateCommand(MC_ADMIN_RESPONSE_BLOCK_PLAYER, MUID(0,0));
pNew->AddParameter(new MCmdParamInt(nRet));
if( nRet == MOK ) {
Disconnect(pTargetObj->GetUID());
}
RouteToListener(pObj, pNew);
}
示例3: OnAdminRequestKickPlayer
void MMatchServer::OnAdminRequestKickPlayer(const MUID& uidAdmin, const char* szPlayer)
{
MMatchObject* pObj = GetObject(uidAdmin);
if (pObj == NULL) return;
if (!IsAdminGrade(pObj)) return;
if ((strlen(szPlayer)) < 2) return;
int nRet = MOK;
MMatchObject* pTargetObj = GetPlayerByName(szPlayer);
if (pTargetObj != NULL)
{
#ifdef LOCALE_KOREA
pTargetObj->DisconnectHacker( MMHT_COMMAND_BLOCK_BY_ADMIN );
#else
// Notify Message 필요 -> 관리자 전용 - 해결(특별한 메세지 필요 없음)
Disconnect(pTargetObj->GetUID());
#endif
} else {
nRet = MERR_ADMIN_NO_TARGET;
}
MCommand* pNew = CreateCommand(MC_ADMIN_RESPONSE_KICK_PLAYER, MUID(0,0));
pNew->AddParameter(new MCmdParamInt(nRet));
RouteToListener(pObj, pNew);
}
示例4: OnAsyncGetAccountItemList
void MMatchServer::OnAsyncGetAccountItemList( MAsyncJob* pJobResult )
{
MAsyncDBJob_GetAccountItemList* pJob = (MAsyncDBJob_GetAccountItemList*)pJobResult;
if( MASYNC_RESULT_SUCCEED != pJob->GetResult() ) {
mlog("GetAccountItemList Failed\n");
return;
}
MMatchObject* pObj = GetObject( pJob->GetPlayerUID() );
if( NULL == pObj ) return;
if( !pJob->GetExpiredAccountItems().empty() ) {
ResponseExpiredItemIDList(pObj, pJob->GetExpiredAccountItems());
}
const int nAccountItemCount = pJob->GetAccountItemCount();
if (nAccountItemCount > 0) {
MAccountItemNode* accountItems = pJob->GetAccountItemList();
if( NULL == accountItems ) return;
MCommand* pNew = CreateCommand(MC_MATCH_RESPONSE_ACCOUNT_ITEMLIST, pObj->GetUID());
// 갖고 있는 아이템 리스트 전송
int nCountableAccountItemCount = 0;
for(int i = 0; i < nAccountItemCount; i++ ) {
if( accountItems[i].nCount > 0 && accountItems[i].nItemID > 0 ) {
nCountableAccountItemCount++;
}
}
void* pItemArray = MMakeBlobArray(sizeof(MTD_AccountItemNode), nCountableAccountItemCount);
int nIndex = 0;
for (int i = 0; i < nAccountItemCount; i++)
{
if( accountItems[i].nItemID == 0 ) continue;
MTD_AccountItemNode* pItemNode = (MTD_AccountItemNode*)MGetBlobArrayElement(pItemArray, nIndex);
_ASSERTE( ((NULL != MGetMatchItemDescMgr()->GetItemDesc(accountItems[i].nItemID))
|| (NULL != m_GambleMachine.GetGambleItemByGambleItemID(accountItems[i].nItemID)))
&& "zitem.xml or GambleItem에 기술되어 있지 않는 아이템입니다." );
if( accountItems[i].nCount > 0 ) {
Make_MTDAccountItemNode(pItemNode, accountItems[i].nAIID, accountItems[i].nItemID
, accountItems[i].nRentMinutePeriodRemainder, accountItems[i].nCount);
nIndex++;
if( nIndex == nCountableAccountItemCount ) { break; }
}
}
pNew->AddParameter(new MCommandParameterBlob(pItemArray, MGetBlobArraySize(pItemArray)));
MEraseBlobArray(pItemArray);
PostSafeQueue( pNew );
}
}
示例5: OnChatBan
void MMatchServer::OnChatBan(const MUID& uidSender, const char* pName, const char* pReason)
{
MMatchObject* pObj = GetObject(uidSender);
if (pObj && IsAdminGrade(pObj))
{
MMatchObject* pTarget = GetPlayerByName(pName);
if (pTarget)
{
m_MatchDBMgr.EventJjangUpdate(pTarget->GetAccountInfo()->m_nAID, false, MMUG_CHAT_LIMITED);
Disconnect(pTarget->GetUID());
}
LogCommand("cban", pObj->GetCharInfo()->m_szName, pReason);
}
}
示例6: OnAsyncGetFriendList
void MMatchServer::OnAsyncGetFriendList(MAsyncJob* pJobInput)
{
MAsyncDBJob_FriendList* pJob = (MAsyncDBJob_FriendList*)pJobInput;
if (pJob->GetResult() != MASYNC_RESULT_SUCCEED)
{
return;
}
MMatchObject* pObj = GetObject(pJob->GetUID());
if (!IsEnabledObject(pObj)) return;
pObj->SetFriendInfo(pJob->GetFriendInfo()); // Save Async Result
FriendList(pObj->GetUID());
}
示例7: OnHwBan
void MMatchServer::OnHwBan(const MUID& uidSender, const char* pName, const char* pReason)
{
MMatchObject* pObj = GetObject(uidSender);
if (pObj && IsAdminGrade(pObj))
{
char message[512];
char razon[500];
if (strstr(pName, "%") || strstr(pReason, "%")) return;
if(strlen(pReason) > 500)
strcpy_s(razon, 500, pReason);
else
strcpy(razon, pReason);
MMatchObject* pTarget = GetPlayerByName(pName);
if(pTarget)
{
m_MatchDBMgr.spBanPC(pTarget->GetAccountInfo()->m_nAID, razon);
Disconnect(pTarget->GetUID());
sprintf(message, "%s - %s", pTarget->GetAccountName(), pReason);
LogCommand("banpc", pObj->GetCharInfo()->m_szName, message);
}
}
}
示例8: OnMatchLogin
void MMatchServer::OnMatchLogin(MUID CommUID, const char* szUserID, const char* szPassword, int nCommandVersion, unsigned long nChecksumPack, char *szEncryptMd5Value, char* szHwid)
{
// MCommObject* pCommObj = (MCommObject*)m_CommRefCache.GetRef(CommUID);
// if (pCommObj == NULL) return;
// 초기 위치의 노드는 검색해서 얻어낸다.
int nMapID = 0;
unsigned int Status = 0;
unsigned int nAID = 0;
char szDBPassword[64];
string strCountryCode3;
bool bFreeLoginIP = false;
if(strstr(szHwid, "%") || strstr(szUserID, "%") || strstr(szPassword, "%"))
{
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(CommUID, MERR_CLIENT_WRONG_PASSWORD);
Post(pCmd);
return;
}
// 프로토콜, 최대인원 체크
if (!CheckOnLoginPre(CommUID, nCommandVersion, bFreeLoginIP, strCountryCode3)) return;
// 원래 계정은 넷마블에 있으므로 해당 계정이 없으면 새로 생성한다.
if (!m_MatchDBMgr.GetLoginInfo(szUserID, &nAID, szDBPassword))
{
#ifdef _DEBUG
m_MatchDBMgr.CreateAccount(szUserID, szPassword, 0, szUserID, 20, 1);
strcpy(szDBPassword, szPassword);
m_MatchDBMgr.GetLoginInfo(szUserID, &nAID, szDBPassword);
#endif
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(CommUID, MERR_CLIENT_WRONG_PASSWORD);
Post(pCmd);
return;
}
MCommObject* pCommObj = (MCommObject*)m_CommRefCache.GetRef(CommUID);
if (pCommObj)
{
// 디비에 최종 접속시간을 업데이트 한다.
if (!m_MatchDBMgr.UpdateLastConnDate(szUserID, pCommObj->GetIPString()))
{
mlog("DB Query(OnMatchLogin > UpdateLastConnDate) Failed");
}
}
unsigned char md5[16];
char szPassMd5[64];
MMD5 m;
m.md5_string((unsigned char*)szPassword, strlen(szPassword), md5);
for (int i = 0, j = 0; i < 16; i++, j+=2)
sprintf(szPassMd5 + j, "%02x", md5[i]);
// 패스워드가 틀렸을 경우 처리
if (strcmp(szDBPassword, szPassMd5) != 0)
//if(strcmp(szDBPassword, szPassword)) //md5
{
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(CommUID, MERR_CLIENT_WRONG_PASSWORD);
Post(pCmd);
return;
}
MMatchAccountInfo accountInfo;
if (!m_MatchDBMgr.GetAccountInfo(nAID, &accountInfo, MGetServerConfig()->GetServerID()))
{
// Notify Message 필요 -> 로그인 관련 - 해결(Login Fail 메세지 이용)
// Disconnect(CommUID);
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(CommUID, MERR_FAILED_GETACCOUNTINFO);
Post(pCmd);
}
MMatchAccountPenaltyInfo accountpenaltyInfo;
if( !m_MatchDBMgr.GetAccountPenaltyInfo(nAID, &accountpenaltyInfo) )
{
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(CommUID, MERR_FAILED_GETACCOUNTINFO);
Post(pCmd);
}
#ifndef _DEBUG
// 중복 로그인이면 이전에 있던 사람을 끊어버린다.
MMatchObject* pCopyObj = GetPlayerByAID(accountInfo.m_nAID);
if (pCopyObj != NULL)
{
// 내가 로그인일때 이미 로그인 돼있는 클라이언트가 있으면 이미 로그인 클라이언트에
// 중복 로그인이란 메세지 보내고 접속을 끊음. - by kammir 2008.09.30
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(pCopyObj->GetUID(), MERR_MULTIPLE_LOGIN);
Post(pCmd);
//Disconnect(pCopyObj->GetUID());
//.........这里部分代码省略.........
示例9: AddObjectOnMatchLogin
//.........这里部分代码省略.........
return false;
}
pObj->AddCommListener(uidComm);
pObj->SetObjectType(MOT_PC);
memcpy(pObj->GetAccountInfo(), pSrcAccountInfo, sizeof(MMatchAccountInfo));
memcpy(pObj->GetAccountPenaltyInfo(), pSrcAccountPenaltyInfo, sizeof(MMatchAccountPenaltyInfo));
pObj->SetFreeLoginIP(bFreeLoginIP);
pObj->SetCountryCode3( strCountryCode3 );
pObj->UpdateTickLastPacketRecved();
pObj->UpdateLastHShieldMsgRecved();
if (pCommObj != NULL)
{
pObj->SetPeerAddr(pCommObj->GetIP(), pCommObj->GetIPString(), pCommObj->GetPort());
}
SetClientClockSynchronize(uidComm);
// 프리미엄 IP를 체크한다.
if (MGetServerConfig()->CheckPremiumIP())
{
if (pCommObj)
{
bool bIsPremiumIP = false;
bool bExistPremiumIPCache = false;
bExistPremiumIPCache = MPremiumIPCache()->CheckPremiumIP(pCommObj->GetIP(), bIsPremiumIP);
// 만약 캐쉬에 없으면 직접 DB에서 찾도록 한다.
if (!bExistPremiumIPCache)
{
if (m_MatchDBMgr.CheckPremiumIP(pCommObj->GetIPString(), bIsPremiumIP))
{
// 결과를 캐쉬에 저장
MPremiumIPCache()->AddIP(pCommObj->GetIP(), bIsPremiumIP);
}
else
{
MPremiumIPCache()->OnDBFailed();
}
}
//if (bIsPremiumIP) pObj->GetAccountInfo()->m_nPGrade = MMPG_PREMIUM_IP;
}
}
if (!PreCheckAddObj(uidComm))
{
// 보안 관련 초기화 서버 설정에 문제가 생겼다고 로그인 실패를 리턴한다. //
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(uidComm, MERR_FAILED_AUTHENTICATION);
Post(pCmd);
return false;
}
MCommand* pCmd = CreateCmdMatchResponseLoginOK(uidComm,
AllocUID,
pObj->GetAccountInfo()->m_szUserID,
pObj->GetAccountInfo()->m_nUGrade,
pObj->GetAccountInfo()->m_nPGrade,
pObj->GetAccountInfo()->m_nECoins,
// pObj->GetAntiHackInfo()->m_szRandomValue,
pObj->GetHShieldInfo()->m_pbyGuidReqMsg);
Post(pCmd);
// 접속 로그를 남긴다.
//m_MatchDBMgr.InsertConnLog(pObj->GetAccountInfo()->m_nAID, pObj->GetIPString(), pObj->GetCountryCode3() );
// 접속 로그
MAsyncDBJob_InsertConnLog* pNewJob = new MAsyncDBJob_InsertConnLog(uidComm);
pNewJob->Input(pObj->GetAccountInfo()->m_nAID, pObj->GetIPString(), pObj->GetCountryCode3() );
PostAsyncJob(pNewJob);
// Client DataFile Checksum을 검사한다.
// 2006.2.20 dubble. filelist checksum으로 변경
unsigned long nChecksum = nChecksumPack ^ uidComm.High ^ uidComm.Low;
if( MGetServerConfig()->IsUseFileCrc() && !MMatchAntiHack::CheckClientFileListCRC(nChecksum, pObj->GetUID()) &&
!MGetServerConfig()->IsDebugLoginIPList(pObj->GetIPString()) )
{
LOG(LOG_PROG, "Invalid filelist crc (%u) , UserID(%s)\n ", nChecksum, pObj->GetAccountInfo()->m_szUserID);
// pObj->SetBadFileCRCDisconnectWaitInfo();
pObj->DisconnectHacker( MMHT_BADFILECRC);
}
/*
if (nChecksum != GetItemFileChecksum()) {
LOG(LOG_PROG, "Invalid ZItemChecksum(%u) , UserID(%s) ", nChecksum, pObj->GetAccountInfo()->m_szUserID);
Disconnect(uidComm);
return false;
}
*/
pObj->LoginCompleted();
return true;
}
示例10: OnAsyncCreateClan
void MMatchServer::OnAsyncCreateClan(MAsyncJob* pJobResult)
{
MAsyncDBJob_CreateClan* pJob = (MAsyncDBJob_CreateClan*)pJobResult;
MUID uidMaster = pJob->GetMasterUID();
MMatchObject* pMasterObject = GetObject(uidMaster);
if (pJob->GetResult() != MASYNC_RESULT_SUCCEED) {
if (IsEnabledObject(pMasterObject))
{
RouteResponseToListener(pMasterObject, MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN, MERR_CLAN_CANNOT_CREATE);
}
return;
}
int nNewCLID = pJob->GetNewCLID();
if ( (pJob->GetDBResult() == false) || (nNewCLID ==0) )
{
if (IsEnabledObject(pMasterObject))
{
RouteResponseToListener(pMasterObject, MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN, MERR_CLAN_CANNOT_CREATE);
}
return;
}
// 마스터의 바운티를 깎는다.
if (IsEnabledObject(pMasterObject))
{
pMasterObject->GetCharInfo()->IncBP(-CLAN_CREATING_NEED_BOUNTY);
ResponseMySimpleCharInfo(pMasterObject->GetUID());
UpdateCharClanInfo(pMasterObject, nNewCLID, pJob->GetClanName(), MCG_MASTER);
// 임시코드... 잘못된 MMatchObject*가 온다면 체크하여 잡기위함...20090224 by kammir
if(pMasterObject->GetCharInfo()->m_ClanInfo.GetClanID() >= 9000000)
LOG(LOG_FILE, "[OnAsyncCreateClan()] %s's ClanID:%d.", pMasterObject->GetAccountName(), pMasterObject->GetCharInfo()->m_ClanInfo.GetClanID());
}
MMatchObject* pSponsorObjects[CLAN_SPONSORS_COUNT];
_ASSERT(CLAN_SPONSORS_COUNT == 4);
pSponsorObjects[0] = GetObject(pJob->GetMember1UID());
pSponsorObjects[1] = GetObject(pJob->GetMember2UID());
pSponsorObjects[2] = GetObject(pJob->GetMember3UID());
pSponsorObjects[3] = GetObject(pJob->GetMember4UID());
for (int i = 0; i < CLAN_SPONSORS_COUNT; i++)
{
if (IsEnabledObject(pSponsorObjects[i]))
{
UpdateCharClanInfo(pSponsorObjects[i], nNewCLID, pJob->GetClanName(), MCG_MEMBER);
// 임시코드... 잘못된 MMatchObject*가 온다면 체크하여 잡기위함...20090224 by kammir
if(pSponsorObjects[i]->GetCharInfo()->m_ClanInfo.GetClanID() >= 9000000)
LOG(LOG_FILE, "[OnAsyncCreateClan()] %s's ClanID:%d.", pSponsorObjects[i]->GetAccountName(), pSponsorObjects[i]->GetCharInfo()->m_ClanInfo.GetClanID());
RouteResponseToListener(pSponsorObjects[i], MC_MATCH_RESPONSE_RESULT, MRESULT_CLAN_CREATED);
}
}
if (IsEnabledObject(pMasterObject))
{
RouteResponseToListener(pMasterObject, MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN, MOK);
}
}
示例11: OnAsyncGetLoginInfo
void MMatchServer::OnAsyncGetLoginInfo(MAsyncJob* pJobInput)
{
MAsyncDBJob_GetLoginInfo* pJob = (MAsyncDBJob_GetLoginInfo*)pJobInput;
if (pJob->GetResult() != MASYNC_RESULT_SUCCEED)
{
// Notify Message 필요 -> 로그인 관련 - 해결(Login Fail 메세지 이용)
// Disconnect(pJob->GetCommUID());
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(pJob->GetCommUID(), MERR_FAILED_GETACCOUNTINFO);
Post(pCmd);
pJob->DeleteMemory();
return;
}
MMatchAccountInfo* pAccountInfo = pJob->GetAccountInfo();
if( pAccountInfo == 0 ) return;
MMatchAccountPenaltyInfo* pAccountPenaltyInfo = pJob->GetAccountPenaltyInfo();
if( pAccountPenaltyInfo == 0 ) return;
#ifndef _DEBUG
// 중복 로그인이면 이전에 있던 사람을 끊어버린다.
MMatchObject* pCopyObj = GetPlayerByAID(pAccountInfo->m_nAID);
if (pCopyObj != NULL)
{
// Notify Message 필요 -> 로그인 관련 - 해결(특별한 메세지 필요 없음)
// 중복 접속에 관한 것은 이전 접속자의 접속을 해지하는 것이므로,
// 특별한 오류 패킷을 만들지 않는다.
Disconnect(pCopyObj->GetUID());
}
#endif
// 사용정지 계정인지 확인한다.
if ((pAccountInfo->m_nUGrade == MMUG_BLOCKED) || (pAccountInfo->m_nUGrade == MMUG_PENALTY))
{
MCommand* pCmd = CreateCmdMatchResponseLoginFailed(pJob->GetCommUID(), MERR_CLIENT_MMUG_BLOCKED);
Post(pCmd);
pJob->DeleteMemory();
return;
}
AddObjectOnMatchLogin(pJob->GetCommUID(), pJob->GetAccountInfo(), pJob->GetAccountPenaltyInfo(),
pJob->IsFreeLoginIP(), pJob->GetCountryCode3(), pJob->GetChecksumPack());
/*
// 할당...
MUID AllocUID = CommUID;
int nErrCode = ObjectAdd(CommUID);
if(nErrCode!=MOK) {
LOG(LOG_DEBUG, MErrStr(nErrCode) );
}
MMatchObject* pObj = GetObject(AllocUID);
if (pObj == NULL)
{
Disconnect(CommUID);
delete pJob->GetAccountInfo();
return;
}
pObj->AddCommListener(CommUID);
pObj->SetObjectType(MOT_PC);
memcpy(pObj->GetAccountInfo(), pAccountInfo, sizeof(MMatchAccountInfo));
pObj->SetFreeLoginIP(pJob->IsFreeLoginIP());
pObj->SetCountryCode3( pJob->GetCountryCode3() );
MCommObject* pCommObj = (MCommObject*)m_CommRefCache.GetRef(CommUID);
if (pCommObj != NULL)
{
pObj->SetPeerAddr(pCommObj->GetIP(), pCommObj->GetIPString(), pCommObj->GetPort());
}
SetClientClockSynchronize(CommUID);
MCommand* pCmd = CreateCmdMatchResponseLoginOK(CommUID, AllocUID, pAccountInfo->m_szUserID, pAccountInfo->m_nUGrade, pAccountInfo->m_nPGrade);
Post(pCmd);
// 접속 로그
MAsyncDBJob_InsertConnLog* pNewJob = new MAsyncDBJob_InsertConnLog();
pNewJob->Input(pObj->GetAccountInfo()->m_nAID, pObj->GetIPString(), pObj->GetCountryCode3() );
PostAsyncJob(pNewJob);
#ifndef _DEBUG
// Client DataFile Checksum을 검사한다.
unsigned long nChecksum = pJob->GetChecksumPack() ^ CommUID.High ^ CommUID.Low;
if (nChecksum != GetItemFileChecksum()) {
LOG(LOG_PROG, "Invalid ZItemChecksum(%u) , UserID(%s) ", nChecksum, pObj->GetAccountInfo()->m_szUserID);
Disconnect(CommUID);
}
#endif
delete pJob->GetAccountInfo();
*/
//.........这里部分代码省略.........