#include "stdafx.h" #include "SStringDB.h" #include #include "SGameManager.h" #include "SGameMessage.h" //#include "SGameMessageUI.h" #include "SMessengerMgr.h" #include "SChatType.h" //#include "KUIControl.h" #include "KUIControlEdit.h" #include "SUIExpulsionWnd.h" namespace { const int g_LimitText = 20; // Edit 컨트롤 최대 텍스트. } SUIExpulsionWnd::SUIExpulsionWnd( SGameManager * pGameManager ) : SUIWnd( pGameManager ), m_EditName( NULL ), m_pClassName( NULL ) { } SUIExpulsionWnd::~SUIExpulsionWnd() { Release(); } void SUIExpulsionWnd::Release() { } SUIWnd* SUIExpulsionWnd::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID ) { SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID ); return this; } bool SUIExpulsionWnd::InitControls( KPoint kPos ) { // 에디트 박스 리밋 KUIControlEdit * pEdit = dynamicCast< KUIControlEdit * >( GetChild( "text_02" ) ); if( pEdit ) { pEdit->SetLimitation( g_LimitText ); pEdit->SetLineChange( false ); pEdit->SetText(""); pEdit->SetCaption(""); pEdit->SetFontSize( 9 ); pEdit->UseEmoticonFilter( false ); pEdit->SetFont( "font_02" ); } m_EditName = pEdit; // 길드 등급명 컨트롤. m_pClassName = dynamicCast< KUIControl * >( GetChild( "text_01" ) ); // 등급명의 텍스트 데코레이션 뽑아내기. string strOrg( m_pClassName->GetCaption() ); std::string::size_type sizeEnd = strOrg.find_last_of( ">" ); m_strDecoClassName = strOrg.substr( 0, ++sizeEnd ); //m_strDecoClassName; return SUIWnd::InitControls( kPos ); } void SUIExpulsionWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd) { if( bOpen ) { /*if( m_EditName ) m_EditName->SetText( " " ); if( m_pClassName ) m_pClassName->SetCaption( " " );*/ this->SetShow( true ); // 기존 포커스 제거. this->m_pManager->RemoveWnd( this ); // wnd 출력 리스트의 최하단에 추가. ( wnd 들중 가장 상위에 뜨게 된다. ) this->m_pManager->AddWnd( this ); // 가장위에 뜨도록 한다. this->m_pManager->SetFocus( this ); // Edit. //m_EditName->SetFocus( true ); //static_cast< KUIControlEdit * >( GetChild( "text_02" ) )->SetFocus( true ); } else { m_EditName->SetFocus( false ); /*if( m_EditName ) m_EditName->SetText( " " ); if( m_pClassName ) m_pClassName->SetCaption( " " );*/ } } void SUIExpulsionWnd::ProcMsgAtStatic( SGameMessage* pMsg ) { switch( pMsg->nType ) { case IMSG_UI_MOVE: { SIMSG_UI_MOVE* pMoveMsg = ( SIMSG_UI_MOVE* )pMsg; MovePos( pMoveMsg->m_nX, pMoveMsg->m_nY ); pMsg->bUse = true; } break; case IMSG_SHOW_UIWINDOW: pMsg->bUse = true; break; case IMSG_UI_SEND_DATA: { SIMSG_UI_SEND_DATA * pData = dynamicCast< SIMSG_UI_SEND_DATA * >( pMsg ); if( pData->m_strString == "ERROR_PERMISSION" ) { // string strMsg( S( 610 ) ); string strMsg( S(1907) ); // stringDB string db 필요. /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_YES, strMsg.c_str() ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_YES, strMsg.c_str() ) ); pMsg->bUse = true; } } break; // 길드원 제명 결정. case IMSG_UI_GUILD_EXPULSION : { const char * pStrMember = m_EditName->GetText(); // 제명할 길드원. bool bIsMaster = false; SPlayerSlot * pPlayer = m_GuildMgr.GetPlayerByName( pStrMember ); if( pPlayer ) { if( _PERMISSION::PERMISSION_LEADER == pPlayer->GetAuthority() ) bIsMaster = true; } // 길드마스터. if( bIsMaster ) { /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_YES, S( 622 ) ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_YES, S( 622 ) ) ); } // 길드원. else { // 길드원 제명 메세지 전송. // 길드탈퇴 메세지 전송. SMSG_CHATTING_REQUEST msg; msg.type = CHAT_TYPE::CHAT_NORMAL; msg.strText = "/gkick "; msg.strText.append( pStrMember ); m_pGameManager->ProcMsgAtStatic( &msg ); //// 추방메세지 출력. //string strMsg( S( 610 ) ); //CStringUtil::ReplacePhrase( strMsg, "#@user_name@#", pStrMember ); //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_YES, strMsg.c_str() ) ); // 에디트창 클리어. m_EditName->SetText( "" ); } pMsg->bUse = true; } break; // 길드맴버 팝업메뉴( 길드원제명 ) -> 길드원관리패널( 길드원제명 팝업 오픈 ) case IMSG_UI_GUILD_EXPULSION_SETUP : { SIMSG_UI_GUILD_WNDMSG * pMsgData = dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg ); // 데코 제외 순수 텍스트만 뽑아내기. std::string strOrg( pMsgData->strData ); std::string::size_type size = strOrg.find_last_of( ">" ); strOrg = strOrg.substr( ++size ); if( strOrg.size() > 0 && strOrg != "" ) { // 캐릭터명 설정. m_EditName->SetText( ( strOrg ).c_str() ); // 등급명. if( pMsgData->strData_2 == "" ) { // 길드원 이름으로 길드원의 등급명 얻기. SPlayerSlot * pPlayer = m_GuildMgr.GetPlayerByName( strOrg.c_str() ); if( pPlayer ) { int nClass = pPlayer->GetAuthority(); if( nClass == 7 ) // 길드장. strOrg = S(3508); else strOrg = m_GuildMgr.GetAuthorityClassName( nClass - 1 ); } } else strOrg = pMsgData->strData_2; ///strOrg = pMsgData->strData_2 == "" ? " " : pMsgData->strData_2; size = strOrg.find_last_of( ">" ); if( size != std::string::npos ) strOrg = strOrg.substr( ++size ); // 등급명. //pMsgData->strData_2 = pMsgData->strData_2 == "" ? " " : pMsgData->strData_2; m_pClassName->SetCaption( ( m_strDecoClassName + strOrg ).c_str() ); m_pClassName->CutCaptionNTooltip(); } pMsg->bUse = true; } break; } } void SUIExpulsionWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch( nMessage ) { //// Edit. //case KUI_MESSAGE::KEDIT_CHANGE : // // 해당 아이디의 등급 출력. // //PrintClassName(); // break; case KUI_MESSAGE::KBUTTON_CLICK : // close. if( !::_stricmp( lpszControlID, "button_close" ) || !::_stricmp( lpszControlID, "button_cancel" )) //servantes 2010.10.13 { if( m_EditName ) m_EditName->SetText( "" ); if( m_pClassName ) m_pClassName->SetCaption( " " ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, false ) ); } // 확인. else if( !::_stricmp( lpszControlID, "button_ok" ) ) { ConfirmationButton(); } break; // 윈도우 이동 case KUI_MESSAGE::KGENWND_MOVE: LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한 break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } DWORD SUIExpulsionWnd::OnMouseMessage(DWORD dwMessage, int x, int y) { switch( dwMessage ) { case KLBUTTON_DOWN : //// Edit. //if( m_EditName->GetRect().IsInRect( x, y ) ) // m_EditName->SetFocus( true ); // Edit. if( m_EditName && !m_EditName->GetRect().IsInRect( x, y ) ) { m_EditName->SetFocus( false ); } break; } return SUIWnd::OnMouseMessage(dwMessage, x, y); } // 확인버튼. void SUIExpulsionWnd::ConfirmationButton() { LPCSTR strName = m_EditName->GetText(); if( strName == NULL || !::_stricmp( strName, " " ) || !::_stricmp( strName, "" ) ) { //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, S( 622 ) ) ); /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, S(1931) ) ); // stringDB 필요. m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, S(1931) ) ); // stringDB 필요. return; } SPlayerSlot * pPlayer = m_GuildMgr.FindMember( strName ); // 길드원. if( pPlayer ) { // 길드장의 경우 탈퇴 불가. if( pPlayer->GetAuthority() == _PERMISSION::PERMISSION_LEADER ) { /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, S( 622 ) ) ); // 텍스트 확인용 m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, S( 622 ) ) ); // 텍스트 확인용 return; } string strMsg( S( 608 ) ); CStringUtil::ReplacePhrase( strMsg, "#@user_name@#", strName ); /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_EXPULSION, strMsg.c_str(), true ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_EXPULSION, strMsg.c_str(), true ) ); } // 비길드원 or 비존재캐릭터. else { //std::string strMsg( m_EditName->GetText() ); //strMsg.append( " 은(는) 비길드원 이다." ); // string DB 값 필요. std::string strMsg( S( 1905 ) ); CStringUtil::ReplacePhrase( strMsg, "#@user_name@#", m_EditName->GetText() ); /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, strMsg.c_str() ) ); // 텍스트 확인용 m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, strMsg.c_str() ) ); // 텍스트 확인용 } } // 해당 아이디의 등급 출력. void SUIExpulsionWnd::PrintClassName() { LPCSTR text = m_EditName->GetText(); SPlayerSlot * pPlayer = m_GuildMgr.FindMember( text ); // 길드원. if( pPlayer ) { m_pClassName->SetCaption( text ); } }