#include "Stdafx.h" #if defined(PRE_ADD_DWC) #include "DNDWCTeam.h" #include "DNDWCSystem.h" #include "DNUserSession.h" #include "DNUserSessionManager.h" #include "DNWorldUserState.h" #include "DNMasterConnection.h" CDnDWCTeam::CDnDWCTeam(UINT nDWCTeamID, TDWCTeam *pInfo, CDNDWCSystem *pManager) : m_nTeamID(nDWCTeamID), m_Info(*pInfo), m_pManager(pManager), m_biLeaderCharacterDBID(0), m_bRecvMemberList(false) { if(m_Info.nDWCPoint == 0) { m_Info.nDWCPoint = LadderSystem::Stats::InitGradePoint; m_Info.nHiddenDWCPoint = LadderSystem::Stats::InitGradePoint; } } void CDnDWCTeam::UpdateTeamInfo( TDWCTeam *pInfo ) { m_Info = *pInfo; if(m_Info.nDWCPoint == 0) { m_Info.nDWCPoint = LadderSystem::Stats::InitGradePoint; m_Info.nHiddenDWCPoint = LadderSystem::Stats::InitGradePoint; } } bool CDnDWCTeam::AddMember(TDWCTeamMember *pMember, TCommunityLocation* pLocation) { if( m_VectTotalMember.size() > DWC::DWC_MAX_MEMBERISZE ) return false; for( std::vector::iterator iter = m_VectTotalMember.begin() ; iter != m_VectTotalMember.end() ; iter++ ) { if( iter->biCharacterDBID == pMember->biCharacterDBID ) return false; } sWorldUserState aWorldUserState; bool bRetVal = g_pWorldUserState->GetUserState(pMember->biCharacterDBID, &aWorldUserState); if(bRetVal) { pMember->Location.cServerLocation = aWorldUserState.nLocationState; pMember->Location.nChannelID = aWorldUserState.nChannelID; pMember->Location.nMapIdx = aWorldUserState.nMapIdx; if(pLocation) { pLocation->cServerLocation = aWorldUserState.nLocationState; pLocation->nChannelID = aWorldUserState.nChannelID; pLocation->nMapIdx = aWorldUserState.nMapIdx; } } g_pDWCTeamManager->RegistDWCCharacter(pMember->biCharacterDBID, GetTeamID()); m_VectTotalMember.push_back(*pMember); if( pMember->bTeamLeader ) { if(!m_bRecvMemberList) //¸®´õ°¡ óÀ½ ÆÀ»ý¼ºÇßÀ» °æ¿ì m_bRecvMemberList = true; m_biLeaderCharacterDBID = pMember->biCharacterDBID; } return true; } bool CDnDWCTeam::DelMember(INT64 biCharacterDBID) { for( std::vector::iterator iter = m_VectTotalMember.begin() ; iter != m_VectTotalMember.end() ; iter++ ) { if( iter->biCharacterDBID == biCharacterDBID ) { g_pDWCTeamManager->RemoveDWCCharacter(biCharacterDBID); m_VectTotalMember.erase(iter); return true; } } return false; } void CDnDWCTeam::UpdateMemberList(int nCount, TDWCTeamMember *MemberList) { m_VectTotalMember.clear(); for(int i=0; i < MIN(nCount, DWC::DWC_MAX_MEMBERISZE); i++) { m_VectTotalMember.push_back(MemberList[i]); sWorldUserState aWorldUserState; if(g_pWorldUserState->GetUserState(m_VectTotalMember[i].biCharacterDBID, &aWorldUserState)) { TCommunityLocation Location; Location.Reset(); Location.cServerLocation = aWorldUserState.nLocationState; Location.nChannelID = aWorldUserState.nChannelID; Location.nMapIdx = aWorldUserState.nMapIdx; ChangeDWCTeamMemberState(m_VectTotalMember[i].biCharacterDBID, &Location, false); //Ȥ½Ã³ª ÇØ¼­ µî·Ï ¾ÈµÇ¾î ÀÖ´Â À¯Àú ÀÖÀ¸¸é ¿©±â¼­ Ãß°¡ÇØ ÁØ´Ù. if( !g_pDWCTeamManager->IsRegisterdCharacter(m_VectTotalMember[i].biCharacterDBID) ) g_pDWCTeamManager->RegistDWCCharacter(m_VectTotalMember[i].biCharacterDBID, m_nTeamID); } if( MemberList[i].bTeamLeader ) m_biLeaderCharacterDBID = m_VectTotalMember[i].biCharacterDBID; } m_bRecvMemberList = true; } bool CDnDWCTeam::ChangeDWCTeamMemberState(INT64 biCharacterDBID, TCommunityLocation* pLocation, bool bSend, bool bLogin) { if(!pLocation) return false; for( std::vector::iterator iter = m_VectTotalMember.begin() ; iter != m_VectTotalMember.end() ; iter++ ) { if( iter->biCharacterDBID == biCharacterDBID ) { iter->Location = (*pLocation); if(bSend) SendChangeDWCTeamMemberState(&(*iter), bLogin); return true; } } return false; } bool CDnDWCTeam::CheckRemoveResource() { bool bRetVal = false; for(int i = 0; i < m_VectTotalMember.size() ; i++) { sWorldUserState aWorldUserState; bRetVal = g_pWorldUserState->GetUserState(m_VectTotalMember[i].biCharacterDBID, &aWorldUserState); if(bRetVal) return false; //Á¢¼ÓÁßÀÎ ÆÀ¿øÀÌ ÀÖÀ¸¸é ÆÐ½º } return true; } bool CDnDWCTeam::CheckDuplicationJob(BYTE cJobCode) { for(int i = 0; i < m_VectTotalMember.size() ; i++) { if( m_VectTotalMember[i].cJobCode == cJobCode) return false; } return true; } bool CDnDWCTeam::CheckCanLeaveTeam() { // °ÔÀÓÁßÀÎ À¯Àú°¡ ÀÖ´Â °æ¿ì Å»Åð³ª ÇØÃ¼ ºÒ°¡ for( int i = 0 ; i < m_VectTotalMember.size() ; i++ ) { if(m_VectTotalMember[i].Location.cServerLocation == _LOCATION_GAME ) return false; } return true; } void CDnDWCTeam::RemoveDWCCharacters() { for(int i = 0; i < m_VectTotalMember.size() ; i++) g_pDWCTeamManager->RemoveDWCCharacter(m_VectTotalMember[i].biCharacterDBID); } //°ÔÀÓ¼­¹ö¿¡¼­ ¾÷µ¥ÀÌÆ® µÈ DWC ½ºÄÚ¾î Á¤º¸ void CDnDWCTeam::UpdateDWCScore(MADWCUpdateScore *pPacket) { m_Info.nTotalWin = pPacket->DWCScore.nTotalWin; m_Info.nTotalLose = pPacket->DWCScore.nTotalLose; m_Info.nTotalDraw = pPacket->DWCScore.nTotalDraw; m_Info.nDWCPoint = pPacket->DWCScore.nDWCPoint; m_Info.nHiddenDWCPoint = pPacket->DWCScore.nHiddenDWCPoint; m_Info.wTodayWin = pPacket->DWCScore.wTodayWin; m_Info.wTodayLose = pPacket->DWCScore.wTodayLose; m_Info.wTodayDraw = pPacket->DWCScore.wTodayDraw; m_Info.wConsecutiveWin = pPacket->DWCScore.wConsecutiveWin; m_Info.wConsecutiveLose = pPacket->DWCScore.wConsecutiveLose; m_Info.nWeeklyPlayCount = pPacket->DWCScore.nWeeklyPlayCount; //ºô¸®Áö¿¡ Á¢¼ÓÁßÀÎ À¯ÀúÇÑÅ׸¸ ¾÷µ¥ÀÌÆ® ½ÃÄÑÁØ´Ù. for( int i = 0 ; i < m_VectTotalMember.size() ; i++ ) { CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(m_VectTotalMember[i].nAccountDBID); if(pUserObj) pUserObj->SendGetDWCTeamInfo(this, ERROR_NONE); } } void CDnDWCTeam::GetMemberList( std::vector &vMemberList ) { if( !m_bRecvMemberList ) return; vMemberList.assign(m_VectTotalMember.begin(), m_VectTotalMember.end()); } void CDnDWCTeam::GetMemberCharacterDBIDList(std::vector &vMemberCharacterDBIDList) { if( !m_bRecvMemberList ) return; for(int i = 0; i < m_VectTotalMember.size() ; i++) vMemberCharacterDBIDList.push_back(m_VectTotalMember[i].biCharacterDBID); } void CDnDWCTeam::ResetTeamScore() { m_Info.nDWCRank = 0; m_Info.nTotalWin = 0; m_Info.nTotalLose = 0; m_Info.nTotalDraw = 0; m_Info.nDWCPoint = LadderSystem::Stats::InitGradePoint; m_Info.nHiddenDWCPoint = LadderSystem::Stats::InitGradePoint; m_Info.wTodayWin = 0; m_Info.wTodayLose = 0; m_Info.wTodayDraw = 0; m_Info.wConsecutiveWin = 0; m_Info.wConsecutiveLose = 0; m_Info.nWeeklyPlayCount = 0; m_Info.tLastPlayDate = 0; } void CDnDWCTeam::SendAddDWCTeamMember(UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszCharacterName, TP_JOB nJob, TCommunityLocation* pLocation) { for( int i = 0 ; i < m_VectTotalMember.size() ; i++ ) { bool bAlredySentByVillage = false; CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(m_VectTotalMember[i].nAccountDBID); if(pUserObj) { pUserObj->SendInviteDWCTeamMemberAck(nAccountDBID, nCharacterDBID, lpwszCharacterName, ERROR_NONE, 0, 0, nJob, pLocation, GetTeamID()); bAlredySentByVillage = true; } g_pMasterConnection->SendAddDWCTeamMember(m_VectTotalMember[i].nAccountDBID, GetTeamID(), nAccountDBID, nCharacterDBID, lpwszCharacterName, nJob, pLocation, bAlredySentByVillage); } } void CDnDWCTeam::SendDismissDWCTeam(UINT nTeamID, int nRet) { for( int i = 0 ; i < m_VectTotalMember.size() ; i++ ) { bool bAlredySentByVillage = false; CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(m_VectTotalMember[i].nAccountDBID); if(pUserObj) { pUserObj->SendDismissDWCTeam(nTeamID, nRet); pUserObj->SetDWCTeamID(0); bAlredySentByVillage = true; pUserObj->RefresDWCTeamName(); } g_pMasterConnection->SendDismissDWCTeam(m_VectTotalMember[i].nAccountDBID, nTeamID, nRet, bAlredySentByVillage); } } void CDnDWCTeam::SendLeaveDWCTeamMember(UINT nTeamID, INT64 biLeaveUserCharacterDBID, LPCWSTR lpwszCharacterName, int nRet) { for( int i = 0 ; i < m_VectTotalMember.size() ; i++ ) { bool bAlredySentByVillage = false; CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(m_VectTotalMember[i].nAccountDBID); if(pUserObj) { bAlredySentByVillage = true; pUserObj->SendLeaveDWCTeamMember(nTeamID, biLeaveUserCharacterDBID, lpwszCharacterName, nRet); } g_pMasterConnection->SendLeaveDWCTeamMember(m_VectTotalMember[i].nAccountDBID, nTeamID, biLeaveUserCharacterDBID, lpwszCharacterName, nRet, bAlredySentByVillage); } } void CDnDWCTeam::SendChangeDWCTeamMemberState(TDWCTeamMember *pDWCTeamMember, bool bLogin) { if(!pDWCTeamMember) return; for( int i = 0 ; i < m_VectTotalMember.size() ; i++ ) { CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(m_VectTotalMember[i].nAccountDBID); if(pUserObj) pUserObj->SendChangeDWCTeamMemberState(GetTeamID(), pDWCTeamMember->biCharacterDBID, &pDWCTeamMember->Location); else g_pMasterConnection->SendChangeDWCTeamMemberState(m_VectTotalMember[i].nAccountDBID, GetTeamID(), pDWCTeamMember->biCharacterDBID, &pDWCTeamMember->Location, bLogin); } } #endif //#if defined(PRE_ADD_DWC)