// 모든 대전장의 길드대전이 끝났다. void CGuildCombat1to1Mng::GuildCombat1to1AllClose() { ClearTime(); m_nState = GC1TO1_CLOSE; for( int i=0; i<(int)( m_vecTenderGuild.size() ); i++ ) { CGuild* pGuild = g_GuildMng.GetGuild( m_vecTenderGuild[i].ulGuildId ); if( pGuild ) { for( map<u_long, CGuildMember*>::iterator it=pGuild->m_mapPMember.begin(); it!=pGuild->m_mapPMember.end(); it++ ) { CUser* pUser = (CUser*)prj.GetUserByID( it->first ); if( IsValidObj(pUser) ) SendNowState( pUser ); } } } m_vecGuilCombat1to1.clear(); m_vecTenderGuild.clear(); g_dpDBClient.SendGC1to1StateToDBSrvr(); }
// 1대1 길드대전 오픈 void CGuildCombat1to1Mng::GuildCombat1to1Open( BOOL bGMText ) { if( !g_eLocal.GetState( EVE_GUILDCOMBAT1TO1 ) ) return; vector<__GC1TO1TENDER>::iterator it; if( !bGMText ) { for( it=m_vecTenderFailGuild.begin(); it!=m_vecTenderFailGuild.end(); it++ ) { // 이전 1:1길드대전에 입찰 실패 길드가 신청금을 수령하지 않았을 경우 g_dpDBClient.SendGC1to1Tender( 'U', (*it).ulGuildId, (*it).nPenya, 'N' ); } m_vecTenderFailGuild.clear(); } // 신청한 길드수가 최소 참여 길드수보다 적을 때 if( (int)( m_vecTenderGuild.size() ) < m_nMinJoinGuild ) { // 1대1 길드대전 취소 및 연장 처리 CString strTemp; strTemp.Format( prj.GetText( TID_GAME_GUILDCOMBAT1TO1_NOGAME ), m_nMinJoinGuild ); g_DPCoreClient.SendCaption( strTemp ); ClearTime(); m_nState = GC1TO1_CLOSE; return; } // 1:1길드대전 오픈 메세지.. g_DPCoreClient.SendCaption( prj.GetText( TID_GAME_GUILDCOMBAT1TO1_OPEN ) ); g_DPCoreClient.SendCaption( prj.GetText( TID_GAME_GUILDCOMBAT1TO1_LINEUP ) ); // 참가자 구성 시간 설정 m_nState = GC1TO1_OPEN; m_nWaitTime = (int)m_Lua.GetGlobalNumber( "MemberLineUpTime" ); m_dwTime = GetTickCount(); // 입찰 순위에 들지 못한 길드 제거 int nCount = 0; for( it=m_vecTenderGuild.begin(); it!=m_vecTenderGuild.end(); ) { nCount++; if( nCount <= m_nMaxJoinGuild ) it++; else // 입찰 순위에서 밀려난 경우 { CGuild* pGuild = g_GuildMng.GetGuild( (*it).ulGuildId ); if( pGuild ) { CUser* pUser = (CUser*)prj.GetUserByID( pGuild->m_idMaster ); if( IsValidObj( pUser ) ) pUser->AddDefinedText( TID_GAME_GUILDCOMBAT1TO1_FAILTENDER ); } g_dpDBClient.SendGC1to1Tender( 'U', (*it).ulGuildId, (*it).nPenya, 'F' ); m_vecTenderFailGuild.push_back( (*it) ); it = m_vecTenderGuild.erase( it ); } } // 입찰 순위에는 들어갔지만 상대 길드가 없는 경우(홀수) if( m_vecTenderGuild.size() % 2 != 0 ) { it = m_vecTenderGuild.end(); it--; // 마지막 순위 // 노트 : rbegin()을 사용하시오. CGuild* pGuild = g_GuildMng.GetGuild( (*it).ulGuildId ); if( pGuild ) { CUser* pUser = (CUser*)prj.GetUserByID( pGuild->m_idMaster ); if( IsValidObj( pUser ) ) pUser->AddDefinedText( TID_GAME_GUILDCOMBAT1TO1_FAILTENDER ); } g_dpDBClient.SendGC1to1Tender( 'U', (*it).ulGuildId, (*it).nPenya, 'F' ); m_vecTenderFailGuild.push_back( (*it) ); m_vecTenderGuild.erase( it ); } // 출전 가능한 길드의 모든 길드원에게 OPEN STATE 알림(길드 마스터는 참가자 구성 시간 출력) for( it=m_vecTenderGuild.begin(); it!=m_vecTenderGuild.end(); it++ ) { CGuild* pGuild = g_GuildMng.GetGuild( (*it).ulGuildId ); if( pGuild ) { for( map<u_long, CGuildMember*>::iterator it2=pGuild->m_mapPMember.begin(); it2!=pGuild->m_mapPMember.end(); it2++ ) { CUser* pUser = (CUser*)prj.GetUserByID( it2->first ); if( IsValidObj( pUser ) ) SendNowState( pUser ); } } } g_dpDBClient.SendGC1to1StateToDBSrvr(); // 1:1길드대전이 오픈되었다고 DBServer에 알림 }