637 lines
No EOL
18 KiB
C++
637 lines
No EOL
18 KiB
C++
#include "StdAfx.h"
|
||
#include "DNUser.h"
|
||
#include "DNVillageConnection.h"
|
||
#include "DNGameConnection.h"
|
||
#include "DNDivisionManager.h"
|
||
#include "Log.h"
|
||
#include "Util.h"
|
||
|
||
#if defined(_CH)
|
||
#include "DNShandaFCM.h"
|
||
#endif // _CH
|
||
|
||
#if !defined(_FINAL_BUILD)
|
||
extern int g_nPCBangGrade;
|
||
#endif // #if defined(_WORK)
|
||
|
||
extern TMasterConfig g_Config;
|
||
|
||
CDNUser::CDNUser(void)
|
||
{
|
||
m_nNexonUserNo = 0;
|
||
#if defined(_KR)
|
||
m_biNexonSessionNo = 0;
|
||
m_cPCBangResult = m_cPCBangOption = 0;
|
||
m_cPCBangAuthorizeType = 0;
|
||
|
||
m_nPCBangArgument = 0;
|
||
m_bShutdowned = false;
|
||
m_cPolicyError = 0;
|
||
|
||
memset(m_szMID, 0, sizeof(m_szMID));
|
||
m_dwGRC = 0;
|
||
m_nShutdownTime = 0;
|
||
#endif // #if defined(_KR)
|
||
|
||
#if defined (_JP) && defined (WIN64)
|
||
memset(m_szNHNNetCafeCode, 0, sizeof(m_szNHNNetCafeCode));
|
||
memset(m_szNHNProdectCode, 0, sizeof(m_szNHNProdectCode));
|
||
#endif // #if defined (_JP) && defined (WIN64)
|
||
|
||
#if defined(_KRAZ)
|
||
memset(&m_ShutdownData, 0, sizeof(TShutdownData));
|
||
#endif // #if defined(_KRAZ)
|
||
|
||
m_nSessionID = m_nAccountDBID = m_nChannelID = 0;
|
||
m_biCharacterDBID = 0;
|
||
|
||
memset(&m_wszAccountName, 0, sizeof(m_wszAccountName));
|
||
memset(&m_szAccountName, 0, sizeof(m_szAccountName));
|
||
memset(&m_wszCharacterName, 0, sizeof(m_wszCharacterName));
|
||
memset(&m_szCharacterName, 0, sizeof(m_szCharacterName));
|
||
memset(&m_szIp, 0, sizeof(m_szIp));
|
||
memset(&m_szVirtualIp, 0, sizeof(m_szVirtualIp));
|
||
|
||
m_nLoginServerID = 0;
|
||
|
||
m_cVillageID = 0;
|
||
m_cPreVillageID = 0;
|
||
|
||
m_wGameID = 0;
|
||
m_nGameServerIdx = -1;
|
||
|
||
m_nRoomID = m_nRandomSeed = m_nMapIndex = 0;
|
||
m_VillageCheckPartyID = 0;
|
||
m_cGateNo = 0;
|
||
m_cGateSelect = -1;
|
||
|
||
m_eUserState = STATE_NONE;
|
||
m_nCheckStateTick = 0;
|
||
|
||
memset(&m_szIp, 0, sizeof(char) * IPLENMAX);
|
||
m_bAdult = true;
|
||
m_bPCBang = false;
|
||
m_cPCBangGrade = PCBang::Grade::None;
|
||
|
||
// PvP
|
||
m_uiPvPIndex = 0;
|
||
m_usPvPTeam = PvPCommon::Team::Max;
|
||
m_uiPvPUserState = PvPCommon::UserState::None;
|
||
m_cPvPVillageID = 0;
|
||
m_nPvPVillageChannelID = 0;
|
||
|
||
#if defined(_CH)
|
||
m_nFCMOnlineMin = 0;
|
||
#endif
|
||
m_nCreateTick = 0;
|
||
m_nAccountLevel = 0;
|
||
#if defined(PRE_ADD_DWC)
|
||
m_cCharacterAccountLevel = 0;
|
||
m_nDWCTeamID = 0;
|
||
m_VecDWCMemberCharacterDBIDList.clear();
|
||
m_VecDWCMemberCharacterDBIDList.reserve(DWC::DWC_MAX_MEMBERISZE);
|
||
#endif
|
||
|
||
#if defined(PRE_ADD_SENDLOGOUT)
|
||
m_bSendLogOut = false;
|
||
#endif
|
||
m_nDungeonClearCount = 0;
|
||
m_bPvPFatigue = false;
|
||
#if defined(PRE_ADD_MULTILANGUAGE)
|
||
m_eSelectedLanguage = MultiLanguage::eDefaultLanguage;
|
||
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
||
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
|
||
m_MatchType = LadderSystem::MatchType::None;
|
||
#endif
|
||
#ifdef PRE_ADD_COMEBACK
|
||
m_bComebackUser = false;
|
||
#endif //#ifdef PRE_ADD_COMEBACK
|
||
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
m_bReConnectNewbieReward = false;
|
||
m_eUserGameQuitRewardType = GameQuitReward::RewardType::None;
|
||
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
||
m_ePvPChannelType = PvPCommon::RoomType::max;
|
||
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
||
#if defined(_ID)
|
||
memset(m_szMacAddress, 0, sizeof(m_szMacAddress));
|
||
memset(m_szKey, 0, sizeof(m_szKey));
|
||
m_bBlockPcCafe = false;
|
||
m_dwKreonCN = 0;
|
||
#endif
|
||
#if defined(PRE_ADD_REMOTE_QUEST)
|
||
m_AcceptWaitRemoteQuestList.clear();
|
||
#endif
|
||
#ifdef PRE_ADD_STEAM_USERCOUNT
|
||
m_bSteamUser = false;
|
||
#endif //#ifdef PRE_ADD_STEAM_USERCOUNT
|
||
}
|
||
|
||
CDNUser::~CDNUser(void)
|
||
{
|
||
}
|
||
|
||
eLocationState CDNUser::GetLocationState()
|
||
{
|
||
switch( GetUserState() )
|
||
{
|
||
case STATE_VILLAGE:
|
||
return _LOCATION_VILLAGE;
|
||
case STATE_GAME:
|
||
return _LOCATION_GAME;
|
||
case STATE_LOGIN:
|
||
return _LOCATION_LOGIN;
|
||
case STATE_CHECKVILLAGE:
|
||
case STATE_CHECKGAME:
|
||
return _LOCATION_MOVE;
|
||
}
|
||
|
||
return _LOCATION_NONE;
|
||
}
|
||
|
||
void CDNUser::SetPCGrade(char cGrade)
|
||
{
|
||
m_cPCBangGrade = cGrade;
|
||
|
||
if (cGrade == PCBang::Grade::None)
|
||
m_bPCBang = false;
|
||
else
|
||
m_bPCBang = true;
|
||
}
|
||
|
||
void CDNUser::SetPCBang(bool bFlag)
|
||
{
|
||
m_bPCBang = bFlag;
|
||
if (m_bPCBang)
|
||
m_cPCBangGrade = PCBang::Grade::Normal;
|
||
}
|
||
|
||
char CDNUser::GetPCBangGrade()
|
||
{
|
||
#if !defined(_FINAL_BUILD)
|
||
return g_nPCBangGrade; // <20>̰<EFBFBD> <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||
#else // #if !defined(_WORK)
|
||
return m_cPCBangGrade; // <20>̰<EFBFBD> <20><>¥
|
||
#endif // #if !defined(_WORK)
|
||
}
|
||
|
||
#if defined(_KR)
|
||
void CDNUser::SetMachineID(BYTE *pszMID, DWORD dwGRC)
|
||
{
|
||
if (pszMID)
|
||
memcpy(m_szMID, pszMID, sizeof(m_szMID));
|
||
|
||
m_dwGRC = dwGRC;
|
||
}
|
||
#endif // #if defined(_KR)
|
||
|
||
#if defined(_KRAZ)
|
||
void CDNUser::SetShutdownData(TShutdownData &ShutdownData)
|
||
{
|
||
m_ShutdownData = ShutdownData;
|
||
}
|
||
#endif // #if defined(_KRAZ)
|
||
|
||
#if defined(PRE_MOD_SELECT_CHAR)
|
||
bool CDNUser::InitUser(LOMAAddUser *pPacket, int nServerID)
|
||
{
|
||
SetLoginServerID(nServerID);
|
||
|
||
SetAccountDBID(pPacket->nAccountDBID);
|
||
SetSessionID(pPacket->nSessionID);
|
||
SetCharacterDBID(pPacket->biCharacterDBID);
|
||
SetAccountName(pPacket->wszAccountName);
|
||
SetCharacterName(pPacket->wszCharacterName);
|
||
SetPCGrade(pPacket->cPCBangGrade);
|
||
SetIp(pPacket->szIP);
|
||
SetVirtualIp(pPacket->szIP);
|
||
SetChannelID(pPacket->wChannelID);
|
||
SetAdult(pPacket->bAdult);
|
||
#if defined (_KR)
|
||
SetMachineID(pPacket->szMID, pPacket->dwGRC);
|
||
#endif
|
||
#if defined(_KRAZ)
|
||
SetShutdownData(pPacket->ShutdownData);
|
||
#endif // CDNUser::
|
||
#ifdef PRE_ADD_MULTILANGUAGE
|
||
m_eSelectedLanguage = static_cast<MultiLanguage::SupportLanguage::eSupportLanguage>(pPacket->cSelectedLanguage);
|
||
#endif //#ifdef PRE_ADD_MULTILANGUAGE
|
||
m_nAccountLevel = pPacket->cAccountLevel;
|
||
#if defined(PRE_ADD_DWC)
|
||
m_cCharacterAccountLevel = pPacket->cCharacterAccountLevel;
|
||
#endif
|
||
#if defined(_US)
|
||
m_nNexonUserNo = pPacket->nNexonUserNo;
|
||
#endif // _US
|
||
#ifdef PRE_ADD_COMEBACK
|
||
m_bComebackUser = pPacket->bComebackUser;
|
||
#endif //#ifdef PRE_ADD_COMEBACK
|
||
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
m_bReConnectNewbieReward = pPacket->bReConnectNewbieReward;
|
||
m_eUserGameQuitRewardType = pPacket->eUserGameQuitReward;
|
||
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
#if defined(_CH) && defined(_FINAL_BUILD)
|
||
FCMIDOnline(); // <20>Ƿε<C7B7> online
|
||
#endif // _CH
|
||
#if defined(_ID)
|
||
SetVirtualIp(pPacket->szVirtualIp);
|
||
_strcpy(m_szMacAddress, _countof(m_szMacAddress), pPacket->szMacAddress, (int)strlen( pPacket->szMacAddress));
|
||
_strcpy(m_szKey, _countof(m_szKey), pPacket->szKey, (int)strlen( pPacket->szKey));
|
||
m_dwKreonCN = pPacket->dwKreonCN;
|
||
#endif //#if defined(_ID)
|
||
|
||
SetUserState(STATE_LOGIN);
|
||
m_nCreateTick = timeGetTime();
|
||
|
||
bool bMoveServerCheck = false;
|
||
if (pPacket->cVillageID > 0)
|
||
bMoveServerCheck = SetCheckVillageInfo(pPacket->cVillageID, pPacket->wChannelID);
|
||
|
||
return bMoveServerCheck;
|
||
}
|
||
|
||
bool CDNUser::InitUser(GAMAAddUserList *pPacket)
|
||
{
|
||
SetAccountDBID(pPacket->nAccountDBID);
|
||
SetSessionID(pPacket->nSessionID);
|
||
SetCharacterDBID(pPacket->biCharacterDBID);
|
||
SetAccountName(pPacket->wszAccountName);
|
||
SetCharacterName(pPacket->wszCharacterName);
|
||
SetPCGrade(pPacket->cPCBangGrade);
|
||
SetIp(pPacket->szIP);
|
||
#if defined(_ID)
|
||
SetVirtualIp(pPacket->szVirtualIp);
|
||
#else
|
||
SetVirtualIp(pPacket->szIP);
|
||
#endif
|
||
SetChannelID(pPacket->wChannelID);
|
||
SetAdult(pPacket->bAdult);
|
||
#if defined (_KR)
|
||
SetMachineID(pPacket->szMID, pPacket->dwGRC);
|
||
#endif
|
||
#if defined(_KRAZ)
|
||
SetShutdownData(pPacket->ShutdownData);
|
||
#endif // CDNUser::
|
||
#ifdef PRE_ADD_MULTILANGUAGE
|
||
m_eSelectedLanguage = static_cast<MultiLanguage::SupportLanguage::eSupportLanguage>(pPacket->cSelectedLanguage);
|
||
#endif //#ifdef PRE_ADD_MULTILANGUAGE
|
||
|
||
m_nRoomID = pPacket->nRoomID;
|
||
|
||
#if defined(_CH) && defined(_FINAL_BUILD)
|
||
FCMIDOnline(); // <20>Ƿε<C7B7> online
|
||
#endif // _CH
|
||
#if defined(PRE_ADD_DWC)
|
||
SetCharacterAccountLevel(pPacket->cAccountLevel);
|
||
#endif
|
||
|
||
m_nCreateTick = timeGetTime();
|
||
|
||
return true;
|
||
}
|
||
|
||
bool CDNUser::InitUser(VIMAAddUserList *pPacket)
|
||
{
|
||
SetAccountDBID(pPacket->nAccountDBID);
|
||
SetSessionID(pPacket->nSessionID);
|
||
SetCharacterDBID(pPacket->biCharacterDBID);
|
||
SetAccountName(pPacket->wszAccountName);
|
||
SetCharacterName(pPacket->wszCharacterName);
|
||
SetPCGrade(pPacket->cPCBangGrade);
|
||
SetIp(pPacket->szIP);
|
||
#if defined(_ID)
|
||
SetVirtualIp(pPacket->szVirtualIp);
|
||
#else
|
||
SetVirtualIp(pPacket->szIP);
|
||
#endif
|
||
SetChannelID(pPacket->wChannelID);
|
||
SetAdult(pPacket->bAdult);
|
||
#if defined (_KR)
|
||
SetMachineID(pPacket->szMID, pPacket->dwGRC);
|
||
#endif
|
||
#if defined(_KRAZ)
|
||
SetShutdownData(pPacket->ShutdownData);
|
||
#endif // CDNUser::
|
||
#ifdef PRE_ADD_MULTILANGUAGE
|
||
m_eSelectedLanguage = static_cast<MultiLanguage::SupportLanguage::eSupportLanguage>(pPacket->cSelectedLanguage);
|
||
#endif //#ifdef PRE_ADD_MULTILANGUAGE
|
||
|
||
SetPvPVillageInfo(pPacket->cPvPVillageID, pPacket->unPvPVillageChannelID);
|
||
|
||
#if defined(_CH) && defined(_FINAL_BUILD)
|
||
FCMIDOnline(); // <20>Ƿε<C7B7> online
|
||
#endif // _CH
|
||
#if defined(PRE_ADD_DWC)
|
||
SetCharacterAccountLevel(pPacket->cAccountLevel);
|
||
#endif
|
||
|
||
m_nCreateTick = timeGetTime();
|
||
|
||
return true;
|
||
}
|
||
|
||
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
||
|
||
void CDNUser::PreInit(int nServerID, UINT nAccountDBID, int nAccountLevel, const char * pszIP)
|
||
{
|
||
m_nLoginServerID = nServerID;
|
||
|
||
m_nAccountDBID = nAccountDBID;
|
||
m_eUserState = STATE_NONE;
|
||
m_nAccountLevel = nAccountLevel;
|
||
m_nCreateTick = timeGetTime();
|
||
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
||
if (pszIP)
|
||
_strcpy(m_szIp, _countof(m_szIp), pszIP, (int)strlen(pszIP));
|
||
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
||
}
|
||
|
||
void CDNUser::Init(UINT nAccountDBID, UINT nSessionID, INT64 biCharacterDBID, WCHAR *pwszCharacterName, WCHAR *pwszAccountName, USHORT nChannelID, bool bAdult, char *pszIp, char *pszVirtualIp)
|
||
{
|
||
m_nAccountDBID = nAccountDBID;
|
||
m_nSessionID = nSessionID;
|
||
m_biCharacterDBID = biCharacterDBID;
|
||
m_nChannelID = nChannelID;
|
||
|
||
_wcscpy(m_wszCharacterName, NAMELENMAX, pwszCharacterName, (int)wcslen(pwszCharacterName));
|
||
WideCharToMultiByte(CP_ACP, 0, m_wszCharacterName, -1, m_szCharacterName, NAMELENMAX, NULL, NULL);
|
||
_wcscpy(m_wszAccountName, IDLENMAX, pwszAccountName, (int)wcslen(pwszAccountName));
|
||
WideCharToMultiByte(CP_ACP, 0, m_wszAccountName, -1, m_szAccountName, IDLENMAX, NULL, NULL);
|
||
|
||
_strcpy(m_szIp, _countof(m_szIp), pszIp, (int)strlen(pszIp));
|
||
_strcpy(m_szVirtualIp, _countof(m_szVirtualIp), pszVirtualIp, (int)strlen(pszVirtualIp));
|
||
m_bAdult = bAdult;
|
||
m_eUserState = STATE_LOGIN;
|
||
}
|
||
|
||
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
||
|
||
bool CDNUser::SetCheckVillageInfo(BYTE cVillageID, USHORT nChannelID)
|
||
{
|
||
if (m_eUserState == STATE_CHECKVILLAGE && (cVillageID != m_cVillageID || nChannelID != m_nChannelID))
|
||
{
|
||
g_Log.Log(LogType::_MOVEPACKET_SEQ, this, L"[ADBID:%u CDBID:%I64d SID:%u] Fail SetCheckVillageInfo():%d (VillageID:%d!=%d) (ChannelID:%d!=%d)\r\n", GetAccountDBID(), GetCharacterDBID(), GetSessionID(), m_nCheckStateTick, (int)cVillageID, (int)m_cVillageID, nChannelID, m_nChannelID );
|
||
//_ASSERT_EXPR(0, L"<22><><EFBFBD>縦 ã<><C3A3><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>!");
|
||
return false;
|
||
}
|
||
m_cPreVillageID = m_cVillageID;
|
||
m_cVillageID = cVillageID;
|
||
m_nChannelID = nChannelID;
|
||
m_eUserState = STATE_CHECKVILLAGE;
|
||
m_nCheckStateTick = timeGetTime();
|
||
g_Log.Log(LogType::_NORMAL, this, L"[ADBID:%u CDBID:%I64d SID:%u] SetCheckVillageInfo():%d (VillageID:%d) (ChannelID:%d)\r\n", GetAccountDBID(), GetCharacterDBID(), GetSessionID(), m_nCheckStateTick, (int)cVillageID, nChannelID );
|
||
return true;
|
||
}
|
||
|
||
bool CDNUser::SetCheckGameInfo(USHORT nGameID, short nServerIdx)
|
||
{
|
||
if (m_eUserState == STATE_CHECKGAME && m_nGameServerIdx != -1 && nServerIdx == -1)
|
||
{
|
||
g_Log.Log(LogType::_MOVEPACKET_SEQ, this, L"[ADBID:%u CDBID:%I64d SID:%u] Fail SetCheckGameInfo():%d (GameID:%d,%d)\r\n", GetAccountDBID(), GetCharacterDBID(), GetSessionID(), m_nCheckStateTick, nGameID, nServerIdx );
|
||
//_ASSERT_EXPR(0, L"<22><><EFBFBD>縦 ã<><C3A3><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>!");
|
||
return false;
|
||
}
|
||
|
||
m_wGameID = nGameID;
|
||
m_nGameServerIdx = nServerIdx;
|
||
m_eUserState = STATE_CHECKGAME;
|
||
m_nCheckStateTick = timeGetTime();
|
||
|
||
if( nServerIdx > -1 )
|
||
g_Log.Log(LogType::_NORMAL, this, L"[ADBID:%u CDBID:%I64d SID:%u] SetCheckGameInfo():%d (GameID:%d,%d)\r\n", GetAccountDBID(), GetCharacterDBID(), GetSessionID(), m_nCheckStateTick, nGameID, nServerIdx );
|
||
return true;
|
||
}
|
||
|
||
bool CDNUser::SetVillageInfo(BYTE cVillageID, USHORT nChannelID, bool bForce)
|
||
{
|
||
//STATE_CHECKRECONNECTLOGIN<49><4E><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>. <20><EFBFBD>Ʈ<EFBFBD>ϰ<EFBFBD><CFB0>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> ó<><C3B3><EFBFBD>մϴ<D5B4>.
|
||
if (bForce == false && ((m_eUserState != STATE_CHECKVILLAGE && m_eUserState != STATE_CHECKRECONNECTLOGIN) || m_cVillageID != cVillageID || m_nChannelID != nChannelID))
|
||
{
|
||
g_Log.Log(LogType::_MOVEPACKET_SEQ, this, L"Fail SetVillageInfo ADBID[%u] VID[%d:%d] CHID[%d:%d] STATE[%d]\n", GetAccountDBID(), m_cVillageID, cVillageID, m_nChannelID, nChannelID, static_cast<int>(m_eUserState));
|
||
_ASSERT_EXPR(0, L"<EFBFBD><EFBFBD><EFBFBD>縦 ã<><C3A3><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>!");
|
||
return false;
|
||
}
|
||
|
||
m_cVillageID = cVillageID;
|
||
m_cPreVillageID = m_cVillageID;
|
||
m_nChannelID = nChannelID;
|
||
m_eUserState = STATE_VILLAGE;
|
||
m_nCheckStateTick = 0;
|
||
g_Log.Log(LogType::_NORMAL, this, L"SetVillageInfo ADBID[%u] VID[%d] CHID[%d]\n", GetAccountDBID(), cVillageID, nChannelID);
|
||
return true;
|
||
}
|
||
|
||
bool CDNUser::SetGameInfo(USHORT nGameID, USHORT nServerIdx, bool bForce)
|
||
{
|
||
if (bForce == false && (m_eUserState != STATE_CHECKGAME || m_wGameID != nGameID || m_nGameServerIdx != nServerIdx))
|
||
{
|
||
g_Log.Log(LogType::_MOVEPACKET_SEQ, this, L"Fail SetGameInfo ADBID[%u] GID[%d] SIDX[%d]\n", GetAccountDBID(), nGameID, nServerIdx);
|
||
_ASSERT_EXPR(0, L"<EFBFBD><EFBFBD><EFBFBD>縦 ã<><C3A3><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>!");
|
||
return false;
|
||
}
|
||
|
||
m_wGameID = nGameID;
|
||
m_nGameServerIdx = nServerIdx;
|
||
m_eUserState = STATE_GAME;
|
||
m_nCheckStateTick = 0;
|
||
g_Log.Log(LogType::_NORMAL, this, L"SetGameInfo ADBID[%u] GID[%d] SIDX[%d]\n", GetAccountDBID(), nGameID, nServerIdx);
|
||
return true;
|
||
}
|
||
|
||
void CDNUser::SetCheckReconnectLogin()
|
||
{
|
||
m_eUserState = STATE_CHECKRECONNECTLOGIN;
|
||
m_nCheckStateTick = timeGetTime();
|
||
|
||
g_Log.Log(LogType::_NORMAL, this, L"SetCheckReconnectLogin ADBID[%u]\n", GetAccountDBID());
|
||
}
|
||
|
||
CDNVillageConnection* CDNUser::GetCurrentVillageConnection()
|
||
{
|
||
CDNVillageConnection *pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID(m_cVillageID);
|
||
return pVillageCon;
|
||
}
|
||
|
||
CDNGameConnection* CDNUser::GetCurrentGameConnection()
|
||
{
|
||
CDNGameConnection *pGameCon = g_pDivisionManager->GetGameConnectionByGameID(m_wGameID);
|
||
return pGameCon;
|
||
}
|
||
|
||
bool CDNUser::bIsPvPVillage()
|
||
{
|
||
const TChannelInfo* pChannelInfo = g_pDivisionManager->GetChannelInfo( m_cVillageID, m_nChannelID );
|
||
if( pChannelInfo )
|
||
{
|
||
#if defined(PRE_ADD_DWC)
|
||
if( pChannelInfo->nAttribute&GlobalEnum::CHANNEL_ATT_PVP || pChannelInfo->nAttribute&GlobalEnum::CHANNEL_ATT_DWC )
|
||
#else
|
||
if( pChannelInfo->nAttribute&GlobalEnum::CHANNEL_ATT_PVP )
|
||
#endif
|
||
return true;
|
||
}
|
||
else
|
||
_DANGER_POINT();
|
||
|
||
return false;
|
||
}
|
||
|
||
bool CDNUser::bIsPvPLobby()
|
||
{
|
||
const TChannelInfo* pChannelInfo = g_pDivisionManager->GetChannelInfo( m_cVillageID, m_nChannelID );
|
||
if( pChannelInfo )
|
||
{
|
||
if( pChannelInfo->nAttribute&GlobalEnum::CHANNEL_ATT_PVPLOBBY )
|
||
return true;
|
||
}
|
||
else
|
||
_DANGER_POINT();
|
||
|
||
return false;
|
||
}
|
||
|
||
#if defined(_CH) && defined(_FINAL_BUILD)
|
||
void CDNUser::FCMIDOnline()
|
||
{
|
||
if (m_bAdult) return; // <20>̼<EFBFBD><CCBC>⸸ <20><><EFBFBD><EFBFBD>
|
||
g_pShandaFCM->FCMIDOnline(m_szAccountName, m_szCharacterName, m_szIp); // <20>Ƿε<C7B7> online
|
||
}
|
||
|
||
void CDNUser::FCMIDOffline()
|
||
{
|
||
if (m_bAdult) return; // <20>̼<EFBFBD><CCBC>⸸ <20><><EFBFBD><EFBFBD>
|
||
g_pShandaFCM->FCMIDOffline(m_szAccountName, m_szCharacterName, m_szIp); // <20>Ƿε<C7B7> offline
|
||
}
|
||
|
||
void CDNUser::SetFCMOnlineMin(int nOnlineMin)
|
||
{
|
||
if (m_bAdult) return; // <20>̼<EFBFBD><CCBC>⸸ <20><><EFBFBD><EFBFBD>
|
||
if (m_nFCMOnlineMin == nOnlineMin) return;
|
||
|
||
m_nFCMOnlineMin = nOnlineMin;
|
||
|
||
if (m_eUserState == STATE_VILLAGE){
|
||
CDNVillageConnection *pVillageCon = GetCurrentVillageConnection();
|
||
if (pVillageCon)
|
||
pVillageCon->SendFCMState(m_nAccountDBID, m_nFCMOnlineMin, true);
|
||
}
|
||
else if (m_eUserState == STATE_GAME){
|
||
CDNGameConnection *pGameCon = GetCurrentGameConnection();
|
||
if (pGameCon)
|
||
pGameCon->SendFCMState(m_nAccountDBID, m_nFCMOnlineMin, true);
|
||
}
|
||
}
|
||
#endif
|
||
|
||
void CDNUser::SetCharacterName(const WCHAR *pwszCharacterName)
|
||
{
|
||
if (!pwszCharacterName) return;
|
||
|
||
_wcscpy(m_wszCharacterName, NAMELENMAX, pwszCharacterName, (int)wcslen(pwszCharacterName));
|
||
WideCharToMultiByte(CP_ACP, 0, m_wszCharacterName, -1, m_szCharacterName, NAMELENMAX, NULL, NULL);
|
||
}
|
||
|
||
void CDNUser::SetAccountName(const WCHAR *pwszAccountName)
|
||
{
|
||
if (!pwszAccountName) return;
|
||
|
||
_wcscpy(m_wszAccountName, IDLENMAX, pwszAccountName, (int)wcslen(pwszAccountName));
|
||
WideCharToMultiByte(CP_ACP, 0, m_wszAccountName, -1, m_szAccountName, IDLENMAX, NULL, NULL);
|
||
}
|
||
|
||
void CDNUser::SetIp(char *pszIp)
|
||
{
|
||
if (!pszIp) return;
|
||
_strcpy(m_szIp, _countof(m_szIp), pszIp, (int)strlen(pszIp));
|
||
}
|
||
|
||
void CDNUser::SetVirtualIp(char *pszIp)
|
||
{
|
||
if (!pszIp) return;
|
||
_strcpy(m_szVirtualIp, _countof(m_szVirtualIp), pszIp, (int)strlen(pszIp));
|
||
}
|
||
|
||
#if defined(PRE_ADD_REMOTE_QUEST)
|
||
void CDNUser::SetAcceptWaitRemoteQuest(int nAcceptWaitRemoteQuestCount, int *AcceptWaitRemoteQuestList)
|
||
{
|
||
SAFE_DELETE_VEC(m_AcceptWaitRemoteQuestList);
|
||
if( nAcceptWaitRemoteQuestCount > MAX_PLAY_QUEST) nAcceptWaitRemoteQuestCount = MAX_PLAY_QUEST;
|
||
for(int i = 0 ; i < nAcceptWaitRemoteQuestCount ; i++)
|
||
m_AcceptWaitRemoteQuestList.push_back(AcceptWaitRemoteQuestList[i]);
|
||
}
|
||
|
||
void CDNUser::GetAcceptWaitRemoteQuest(int *nAcceptWaitRemoteQuestCount, int *AcceptWaitRemoteQuestList)
|
||
{
|
||
for(int i = 0 ; i < m_AcceptWaitRemoteQuestList.size() ; i++)
|
||
{
|
||
if( i >= MAX_PLAY_QUEST ) break;
|
||
AcceptWaitRemoteQuestList[i] = m_AcceptWaitRemoteQuestList[i];
|
||
}
|
||
|
||
*nAcceptWaitRemoteQuestCount = (int)m_AcceptWaitRemoteQuestList.size();
|
||
if(*nAcceptWaitRemoteQuestCount > MAX_PLAY_QUEST)
|
||
*nAcceptWaitRemoteQuestCount = MAX_PLAY_QUEST;
|
||
}
|
||
#endif
|
||
|
||
#if defined(PRE_ADD_DWC)
|
||
void CDNUser::SetDWCTeamInfo(VIMADWCTeamMemberList *pPacket)
|
||
{
|
||
m_nDWCTeamID = pPacket->nTeamID;
|
||
m_VecDWCMemberCharacterDBIDList.clear();
|
||
|
||
for(int i = 0 ; i < pPacket->cCount ; i++)
|
||
m_VecDWCMemberCharacterDBIDList.push_back(pPacket->MemberListCharacterDBID[i]);
|
||
}
|
||
|
||
void CDNUser::GetDWCMemberList(std::vector<INT64> &vecMemberList)
|
||
{
|
||
vecMemberList.assign(m_VecDWCMemberCharacterDBIDList.begin(), m_VecDWCMemberCharacterDBIDList.end());
|
||
}
|
||
|
||
bool CDNUser::AddDWCMemberList(INT64 biCharacterDBID)
|
||
{
|
||
if( m_nDWCTeamID <= 0 )
|
||
return false;
|
||
|
||
if( m_VecDWCMemberCharacterDBIDList.size() > DWC::DWC_MAX_MEMBERISZE )
|
||
return false;
|
||
|
||
for( int i = 0 ; i < m_VecDWCMemberCharacterDBIDList.size() ; i++ )
|
||
{
|
||
if( m_VecDWCMemberCharacterDBIDList[i] == biCharacterDBID )
|
||
return false;
|
||
}
|
||
|
||
m_VecDWCMemberCharacterDBIDList.push_back(biCharacterDBID);
|
||
return true;
|
||
}
|
||
|
||
bool CDNUser::DelDWCMemberList(INT64 biCharacterDBID)
|
||
{
|
||
if( m_nDWCTeamID <= 0 )
|
||
return false;
|
||
|
||
if( biCharacterDBID == GetCharacterDBID() )
|
||
{
|
||
ResetDWCInfo();
|
||
return true;
|
||
}
|
||
|
||
for( int i = 0 ; i < m_VecDWCMemberCharacterDBIDList.size() ; i++ )
|
||
{
|
||
if( m_VecDWCMemberCharacterDBIDList[i] == biCharacterDBID )
|
||
{
|
||
m_VecDWCMemberCharacterDBIDList.erase( m_VecDWCMemberCharacterDBIDList.begin()+i );
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
void CDNUser::ResetDWCInfo()
|
||
{
|
||
m_nDWCTeamID = 0;
|
||
m_VecDWCMemberCharacterDBIDList.clear();
|
||
}
|
||
#endif |