void CPartyManager::DeleteAllParty() { TPCPartySet::iterator it = m_set_pkPCParty.begin(); while (it != m_set_pkPCParty.end()) { DeleteParty(*it); it = m_set_pkPCParty.begin(); } }
void CPartyMng::RemoveConnection( CPlayer* pPlayer ) { if( pPlayer->m_uPartyId == 0 ) return; CParty* pParty; CMclAutoLock Lock( m_AddRemoveLock ); pParty = GetParty( pPlayer->m_uPartyId ); if( pParty ) { int i = pParty->FindMember( pPlayer->uKey ); if( i < 0 ) return; pParty->m_aMember[i].m_tTime = CTime::GetCurrentTime(); pParty->m_aMember[i].m_bRemove = TRUE; pParty->m_nReferens++; BEFORESENDDUAL( ar, PACKETTYPE_REMOVEPLAYERPARTY, DPID_UNKNOWN, DPID_UNKNOWN ); ar << pPlayer->m_uPartyId << pPlayer->uKey; SEND( ar, &g_dpCoreSrvr, DPID_ALLPLAYERS ); #if __VER >= 12 // __PARSKILL1001 090917 mirchang - 파스킬 아이템 수정 if( pParty->m_nModeTime[PARTY_PARSKILL_MODE] ) g_dpCoreSrvr.SendSetPartyMode( pParty->m_uPartyId, PARTY_PARSKILL_MODE, FALSE ); #endif // __PARSKILL1001 090917 mirchang - 파스킬 아이템 수정 if( i == 0 ) { bool fRemoveParty = true; for( int j = 1; j < pParty->m_nSizeofMember; j++ ) { if( pParty->m_aMember[j].m_bRemove == FALSE ) { fRemoveParty = false; pParty->SwapPartyMember( 0, j ); break; } } #if __VER >= 12 // __PARSKILL1001 //12차 파스킬 아이템 수정 world,core,neuz for( int k = 0 ; k < MAX_PARTYMODE ; k++ ) { if( pParty->m_nModeTime[k] ) { if( k == PARTY_PARSKILL_MODE) continue; pParty->m_nModeTime[k] = 0; } } #endif //__PARSKILL1001 //12차 파스킬 아이템 수정 world,core,neuz if( fRemoveParty ) { CPlayer* pPlayer; for( j = 0; j < pParty->m_nSizeofMember; j++ ) { pPlayer = g_PlayerMng.GetPlayer( pParty->GetPlayerId( j ) ); if( pPlayer ) pPlayer->m_uPartyId = 0; } DeleteParty( pParty->m_uPartyId ); } } } }
void CPartyMng::Worker( void ) { CPlayer* pMember; HANDLE hHandle = m_hCloseWorker; while( WaitForSingleObject( hHandle, 1000 ) == WAIT_TIMEOUT ) { CTime timeCurr = CTime::GetCurrentTime(); CMclAutoLock Lock( g_PlayerMng.m_AddRemoveLock ); CMclAutoLock Lock2( m_AddRemoveLock ); for( C2PartyPtr::iterator i = m_2PartyPtr.begin(); i != m_2PartyPtr.end(); ) { CParty* pParty = (CParty*)i->second; ++i; if( pParty->m_nReferens > 0 ) { for( int j = 1; j < pParty->m_nSizeofMember; j++ ) { if( pParty->m_aMember[j].m_uPlayerId != 0 && pParty->m_aMember[j].m_bRemove ) { if( timeCurr.GetTime() - pParty->m_aMember[j].m_tTime.GetTime() > 60 * 10 ) // 10분 : 60 * 10 // 지금은 1분 { u_long idMember = pParty->GetPlayerId( j ); if( pParty->DeleteMember( idMember ) ) { pParty->m_nReferens--; g_dpCoreSrvr.SendRemoveParty( pParty->m_uPartyId, pParty->m_aMember[0].m_uPlayerId, idMember ); if( pParty->GetSizeofMember() < 2 ) { pMember = g_PlayerMng.GetPlayer( pParty->GetPlayerId( 0 ) ); if( pMember ) pMember->m_uPartyId = 0; DeleteParty( pParty->m_uPartyId ); break; } if( pParty->m_nReferens == 0 ) break; } } } } // for } // if // 파티모드를 체크 for( int j = 0 ; j < MAX_PARTYMODE ; j++ ) { if( pParty->m_nModeTime[j] ) { #if __VER >= 12 // __PARSKILL1001 //12차 파스킬 아이템 수정 world,core,neuz if( j == PARTY_PARSKILL_MODE) continue; #endif //__PARSKILL1001 //12차 파스킬 아이템 수정 world,core,neuz pParty->m_nModeTime[j] -= 1000; if( pParty->m_nModeTime[j] <= 0 ) { pParty->m_nModeTime[j] = 0; g_dpCoreSrvr.SendSetPartyMode( pParty->m_uPartyId, j, FALSE ); } } } } // for // TRACE( "Worker Party\n" ); } }