#include "stdafx.h" #include "SGameManager.h" #include "SGameMessage.h" //#include "SGameMessageUI.h" #include "SMessengerMgr.h" #include #include "SStringDB.h" #include "SPlayerInfoMgr.h" //#include "KUIControl.h" #include "KUIControlPanel.h" #include "KUIControlButton.h" #include "KUIControlStatic.h" #include "SUIOneselfPanelWnd.h" // Panel 나의관리 #include "SUIMarkPanelWnd.h" // Panel 길드마크넣기 #include "SUIAdministraionPanelWnd.h" // Panel 길드원 관리 #include "SUIAttackingArmyPanelWnd.h" // Panel 공격대 결성 #include "SUIClassNamePanelWnd.h" // Panel 길드등급 명칭 #include "SUIJoinPanelWnd.h" // Panel 길드원 가입 #include "SUINoticePanelWnd.h" // Panel 길드공지쓰기 #include "SUIGuildSubManageWnd.h" #include "SUIDonationPanelWnd.h" namespace { const char * g_pTextDecorate = "<#4d4d4d>%d <$1854:등급>"; const char * g_pTextDecorate_ClassName = "<#955c5c>"; } SUIGuildSubManageWnd::SUIGuildSubManageWnd( SGameManager * pGameManager ) : SUIWnd( pGameManager ), m_pPanelManager( NULL ), m_pCrrOpenPanel( NULL ), m_pPosPopupWnd( NULL ), m_bOpenTheOne( false ), m_bUIRefresh( true ), m_bRefresh( GUILD_UPDATE::GUILD_UPDATE_NONE ) //m_pPanelOneself( NULL ), // Panel 나의관리 //m_pPanelMark( NULL ), // Panel 길드마크넣기 //m_pPanelAdmin( NULL ), // Panel 길드원 관리 //m_pPanelAttacking( NULL ),// Panel 공격대 결성 //m_pPanelClassName( NULL ),// Panel 길드등급 명칭 //m_pPanelJoin( NULL ), // Panel 길드원 가입 //m_pPanelNotice( NULL ) // Panel 길드공지쓰기 { } SUIGuildSubManageWnd::~SUIGuildSubManageWnd() { Release(); } // 메모리 해제. void SUIGuildSubManageWnd::Release() { SAFE_DELETE( m_pPanelManager ); // Panel Manager. } SUIWnd* SUIGuildSubManageWnd::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID ) { SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID ); // Panel Control 이 들어갈 영역 지정용 컨트롤. KUIControl * pPanelOutline = dynamicCast( GetChild( "panel_control" ) ); // 각 패널들에서 띄우게될 팝업Wnd( 모달리스 메세지창 ) 의 시작위치 지정. m_pPosPopupWnd = GetChild( "pos_manage_control_01" ); KPoint posPopupWnd( GetRect().left, m_pPosPopupWnd->GetRect().top ); //---------------------------------- // Panel Manager 생성. // if( !m_pPanelManager ) { m_pPanelManager = new KUIControlPanelManager( this, pPanelOutline, 2 ); m_pPanelManager->SetMultipurposePos( posPopupWnd ); //// 패널들을 생성하여 등록한다. RegisterPanel( pWndManager, new SUIOneselfPanelWnd( m_pGameManager, m_pPanelManager ), // Panel 나의관리 "window_guild_sub_manage_persnal.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_PERSNAL ); RegisterPanel( pWndManager, new SUIMarkPanelWnd( m_pGameManager, m_pPanelManager ), // Panel 길드마크넣기 "window_guild_sub_manage_guildmark.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_GUILDMARK ); RegisterPanel( pWndManager, new SUINoticePanelWnd( m_pGameManager, m_pPanelManager ), // Panel 길드공지쓰기 "window_guild_sub_manage_notice.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_NOTICE ); RegisterPanel( pWndManager, new SUIJoinPanelWnd( m_pGameManager, m_pPanelManager ), // Panel 길드원 가입 "window_guild_sub_manage_invitation.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_INVITATION ); RegisterPanel( pWndManager, new SUIAdministraionPanelWnd( m_pGameManager, m_pPanelManager ), // Panel 길드원 관리 "window_guild_sub_manage_member.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_MEMBER ); RegisterPanel( pWndManager, new SUIAttackingArmyPanelWnd( m_pGameManager, m_pPanelManager ), // Panel 공격대 결성 "window_guild_sub_manage_team.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_TEAM ); RegisterPanel( pWndManager, new SUIClassNamePanelWnd( m_pGameManager, m_pPanelManager ), // Panel 길드등급 명칭 "window_guild_sub_manage_classname.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_CLASSNAME ); RegisterPanel( pWndManager, new SUIDonationPanelWnd( m_pGameManager, m_pPanelManager ), "window_guild_sub_manage_donate.nui", kPos, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_DONATE ); } return this; } // 패널 등록 void SUIGuildSubManageWnd::RegisterPanel( KUIWndManager* pWndManager, KUIControlPanel * pPanel, char * strNUI, KPoint & kPos, int nWindowID/*-1*/ ) { // 패널 설정. pPanel->SetUseCutCaption(); // Caption 텍스트 자르기. pPanel->CreateWnd( strNUI, pWndManager, kPos, nWindowID ); pPanel->SetParent( this ); this->AddChild( pPanel ); // Panel Manager에 등록. m_pPanelManager->AddPanel( pPanel ); } bool SUIGuildSubManageWnd::InitControls( KPoint kPos ) { return SUIWnd::InitControls( kPos ); } void SUIGuildSubManageWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd) { if( bOpen ) { // 각 패널들에서 띄우게될 팝업Wnd( 모달리스 메세지창 ) 의 시작위치 지정. if( m_pPanelManager ) { KPoint posPopupWnd( m_pPosPopupWnd->GetRect().left, m_pPosPopupWnd->GetRect().top ); m_pPanelManager->SetMultipurposePos( posPopupWnd ); } m_bOpenTheOne = false; // 한개 패널오픈 여부. // // Panel Manager 초기설정. m_pPanelManager->Initialize(); m_pCrrOpenPanel = m_pPanelManager->GetCrrOpenPanel(); // Guild Main Wnd 옆의 위치 잡기. KUIWnd *pInfoWnd = m_pManager->FindWnd( "window_guild_main" ); if( pInfoWnd ) MovePos( pInfoWnd->GetRect().right - 4, pInfoWnd->GetRect().top ); // Data설정. if( ( m_bRefresh & GUILD_UPDATE::GUILD_UPDATE_PROMOTE ) || /// 2010.12.14 or 연산 수정 - prodongi ( m_bRefresh & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION ) || ( m_bRefresh & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_NAME ) || ( m_bRefresh & GUILD_UPDATE::GUILD_UPDATE_GPERMISSION ) || ( m_bRefresh & GUILD_UPDATE::GUILD_UPDATE_DONATION ) || ( m_bRefresh & GUILD_UPDATE::GUILD_UPDATE_GMEMBER ) ) { DataMapping(); } m_bUIRefresh = false; // 갱신여부 초기화. m_bRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 초기화. //// Data설정. //DataMapping( bOpen ); } else { // Panel Manager 에 닫기통지. m_pPanelManager->CloseNotify(); // 팝업들 닫기. m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS, false ) ); // 등급관리. m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, false ) ); // 길드원제명. m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION, false ) );// 길드원초대. // 길드원 관리 모드 해제. /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //m_pGameManager->ProcMsgAtStatic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_MAINWND, // SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_MAIN_TAP_MEMBER, // IMSG_UI_GUILD_MANAGE_MODE, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_MAINWND, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_MAIN_TAP_MEMBER, IMSG_UI_GUILD_MANAGE_MODE, false ) ); // 공격대 도움말 팝업 닫기. m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM_HELP, false ) ); m_bUIRefresh = false; // 갱신여부 초기화. m_bRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 초기화. } } // Data설정. void SUIGuildSubManageWnd::DataMapping( bool bOpen ) { SPlayerInfo player = m_PlayerInfoMgr.GetPlayerInfo(); SPlayerSlot * pPlayerSlot = this->m_GuildMgr.FindMember( player.GetName() ); if( pPlayerSlot ) { int nAuthority = pPlayerSlot->GetAuthority(); // 등급. if( nAuthority != _PERMISSION::PERMISSION_LEADER ) nAuthority = _PERMISSION::PERMISSION_LEADER - nAuthority; std::string strDeco; KUIControl * pControl; // 등급. //g_TextDecorate_L + CStringUtil::StringFormat( "%d", nAuthority ) + g_TextDecorate_R pControl = dynamicCast< KUIControl * >( GetChild( "guild_class_text_01" ) ); if( pControl ) { if( nAuthority == _PERMISSION::PERMISSION_LEADER ) { pControl->SetCaption( CStringUtil::StringFormat( "<#4d4d4d>%s", pControl->GetFontSize(), S(3508) ).c_str() ); } else { strDeco = g_pTextDecorate; XStringUtil::Replace( strDeco, "", CStringUtil::StringFormat("", pControl->GetFontSize() ) ); pControl->SetCaption( CStringUtil::StringFormat( strDeco.c_str(), nAuthority ).c_str() ); } } // 등급픽토그램. KUIWnd * pWnd = GetChild( "mark_guild_class_01" ); KUIControlStatic* markIcon = dynamicCast< KUIControlStatic * >( pWnd ); if (markIcon) markIcon->SetAniName( CStringUtil::StringFormat( "common_mark_titanium_guild_class_0%d", nAuthority ).c_str() ); // 등급명. // -1 하는 이유 : 등급은 1부터시작, 클래스명배열은 0부터 시작. 따라서 -1로 맞춰줌. pControl = dynamicCast< KUIControl * >( GetChild( "guild_class_name_01" ) ); if( nAuthority == 7 ) pControl->SetCaption( CStringUtil::StringFormat("<#955c5c>%s", pControl->GetFontSize(), S(3508) ).c_str() ); else { std::string strText( g_pTextDecorate_ClassName ); XStringUtil::Replace( strText, "", CStringUtil::StringFormat("", pControl->GetFontSize() ) ); strText.append( this->m_GuildMgr.GetAuthorityClassName( ( pPlayerSlot->GetAuthority() - 1 ) ) ); pControl->SetCaption( strText.c_str() ); } pControl->CutCaptionNTooltip(); // 권한처리. AuthorityProcess( pPlayerSlot, bOpen ); } } void SUIGuildSubManageWnd::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 ); // 각 패널들에서 띄우게될 팝업Wnd( 모달리스 메세지창 ) 의 시작위치 지정. KPoint posPopupWnd( m_pPosPopupWnd->GetRect().left, m_pPosPopupWnd->GetRect().top ); m_pPanelManager->SetMultipurposePos( posPopupWnd ); // 팝업들 위치지정. int x = m_pPosPopupWnd->GetRect().left; int y = m_pPosPopupWnd->GetRect().top; m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS, x, y ) ); // 등급관리. m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, x, y ) ); // 길드원제명. m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION, x, y ) );// 길드원초대. pMsg->bUse = true; } break; // 길드관리 -> 길드원가입 패널 오픈 메세지. case IMSG_UI_GUILD_APPLICANT_FOR_ADMISSION : { // 해당 패널 오픈. int x = m_pPosPopupWnd->GetRect().left; int y = m_pPosPopupWnd->GetRect().top; m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION, x, y ) );// 길드원초대. m_pPanelManager->OpenPanel( dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg )->wndApplicationType ); pMsg->bUse = true; } break; case IMSG_UI_GUILD_EXPULSION_SETUP : // 길드맴버 팝업메뉴( 길드원제명 ) -> 길드원관리패널( 길드원제명 팝업 오픈 ) pMsg->bUse = true; // 길드원제명 팝업 윈도우 오픈. //m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, false ) ); // 이전에 열려있을 경우를 대비해서 닫는다. //m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, posX, posY ) ); // 위치 지정. m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, true ) ); // 팝업 Wnd 열기. // break; 생략. case IMSG_UI_GUILD_MEMBERCLASS_SETUP : // 길드맴버 팝업메뉴( 등급관리 ) -> 길드원관리패널( 길드원등급 팝업 오픈 ) { pMsg->bUse = true; // 길드원 관리 패널 오픈 & 메세지 전달. int x = m_pPosPopupWnd->GetRect().left; int y = m_pPosPopupWnd->GetRect().top; m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS, x, y ) ); // 등급관리. m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, x, y ) ); // 길드원제명. m_pPanelManager->OpenPanel( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_MEMBER )->ProcMsgAtStatic( pMsg ); } break; case IMSG_UI_GUILD_DONATE_MODE: { pMsg->bUse = true; m_pPanelManager->OpenPanel( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_DONATE )->ProcMsgAtStatic( pMsg ); } break; case IMSG_UI_SEND_DATA: { SIMSG_UI_SEND_DATA *pData = (SIMSG_UI_SEND_DATA *)pMsg; if( pData->m_strString == "guild_update" ) { pData->bUse = true; m_bOpenTheOne = false; // 한개 패널오픈 여부. if( this->IsShow() ) { // Data설정. if( ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_PROMOTE ) || /// 2010.12.14 or 연산 수정 - prodongi ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION ) || ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_GPERMISSION ) || ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_NAME ) || ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_SET ) || ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_DONATION ) || ( ( pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_GMEMBER ) && ( pData->m_strText == "Self" ) ) ) { DataMapping(); } m_bUIRefresh = false; // 갱신여부 초기화. m_bRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 초기화. } else { m_bUIRefresh = true; // Open 시에 갱신. m_bRefresh |= pData->m_dwData; // 갱신조건 누적. } } // // 길드장 변경. else if( pData->m_strString == "change_guild_master" ) { pData->bUse = true; // Data설정. DataMapping(); } } break; } // 패널 윈도우들의 ProcMsgAtStatic. //if( !pMsg->bUse ) // PanelProcMsg( pMsg ); PanelProcMsg( pMsg ); } // 패널 윈도우들의 ProcMsgAtStatic. void SUIGuildSubManageWnd::PanelProcMsg( SGameMessage * pMsg ) { const vector< KUIControlPanel * > & arrPanel = m_pPanelManager->GetPanelControls(); int size = arrPanel.size(); for( int i=0; iProcMsgAtStatic( pMsg ); } void SUIGuildSubManageWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch( nMessage ) { case KUI_MESSAGE::KBUTTON_CLICK : if( !::_stricmp( lpszControlID, "button_close" ) ) { CloseWnd(); } else { // 라인 버튼 컨트롤. std::string strButton( lpszControlID ); std::string::size_type nSize = strButton.find( "button_line" ); if( nSize != -1 ) { nSize = strButton.find_last_of( "_" ); KUIControlPanel * pPanel; if( m_pPanelManager->FindPanelByIndex( pPanel, ( ::atoi( strButton.substr( (nSize + 2 ) ).c_str() ) - 1 ) ) ) pPanel->OpenPanel(); } } break; // 윈도우 이동 case KUI_MESSAGE::KGENWND_MOVE: { LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한 // lparam, wparam 에 이동전 위치가 넘어온다. ** KUIGenWnd 의 OnMouseMessage() 에서 넘겨줌. KRect rtCrr = GetRect(); rtCrr.left -= lparam; rtCrr.top -= wparam; // Panel Manager 부모윈도우의 이동. m_pPanelManager->MovedParentWnd( rtCrr.left, rtCrr.top ); } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } //DWORD SUIGuildSubManageWnd::OnMouseMessage(DWORD dwMessage, int x, int y) //{ // // return SUIWnd::OnMouseMessage( dwMessage, x, y ); //} void SUIGuildSubManageWnd::Process(DWORD dwTime) { m_pPanelManager->GetPanelControls()[ 1 ]->Process( dwTime ); } // 창 닫기. void SUIGuildSubManageWnd::CloseWnd() { // 메모뷰Wnd 열기. //m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_ONESELF, false ) ); //m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_MARK, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, false) ); } // 해당 패널 disable. void SUIGuildSubManageWnd::PanelDisable( int nBitSet, int _and, int wndID, bool bOpen, int nLine ) { //// 이게 더 깔끔한데 Disable() 되었다가 Enable() 되면 버튼상태가 원래와 좀달라지는 //// 문제가 발생하여서 부득이 아래코드로 변경. //KUIControlPanel * pPanel; //if( m_pPanelManager->FindPanel( pPanel, wndID ) ) //{ // if( ( nBitSet & _and ) ) // pPanel->Enable(); // 활성화 // else // pPanel->Disable(); // 비활성화. //} KUIControlPanel * pPanel; if( m_pPanelManager->FindPanel( pPanel, wndID ) ) { if( ( nBitSet & _and ) ) { // 이전에 오픈된 패널이 없을때만 오픈한다. 한개의 패널은 열려야한다.( 단 권한이없다면 하나도 열려선 안된다. ) if( bOpen && !m_bOpenTheOne ) { pPanel->OpenPanel(); m_bOpenTheOne = true; // 한개패널오픈여부. m_pCrrOpenPanel = pPanel; } KUIControlStatic * pStatic = dynamicCast< KUIControlStatic * >( pPanel->GetChild( "guild_manage_menu" ) ); pStatic->SetEnableOption( true ); pStatic->Enable(); KUIControlSimpleButton * pTitleBtn = dynamicCast< KUIControlSimpleButton * >( pPanel->GetChild( "trim_titlebar_open" ) ); pTitleBtn->SetEnableColor( "<#ffffff>" ); pTitleBtn->Enable(); KUIControlSimpleButton* openBtn = dynamicCast< KUIControlSimpleButton * >( pPanel->GetChild( "sub_open" ) ); if (openBtn) openBtn->Enable(); // Line Control Button. KUIControlButton* lineBtn = dynamicCast< KUIControlButton * >( GetChild( CStringUtil::StringFormat( "button_line_control_0%d", nLine ).c_str() ) ); if (lineBtn) lineBtn->Enable(); //KUIControlSimpleButton * pBtn = static_cast< KUIControlSimpleButton * >( pPanel->GetChild( "sub_open" ) ); // pBtn->Enable(); // pBtn->SetButtonState( KUIControlSimpleButton::KBUTTON_STATE::KBUTTON_NORMAL ); } else { KUIControlStatic * pStatic = dynamicCast< KUIControlStatic * >( pPanel->GetChild( "guild_manage_menu" ) ); pStatic->SetEnableOption( false ); pStatic->Disable(); // static_cast< KUIControlSimpleButton * >( pPanel->GetChild( "trim_titlebar_open" ) )->Disable(); KUIControlSimpleButton * pTitleBtn = dynamicCast< KUIControlSimpleButton * >( pPanel->GetChild( "trim_titlebar_open" ) ); pTitleBtn->SetDisableColor( "<#a0a0a0>" ); pTitleBtn->Disable(); KUIControlSimpleButton* openBtn = dynamicCast< KUIControlSimpleButton * >( pPanel->GetChild( "sub_open" ) ); if (openBtn) openBtn->Disable(); // Line Control Button. KUIControlButton* lineBtn = dynamicCast< KUIControlButton * >( GetChild( CStringUtil::StringFormat( "button_line_control_0%d", nLine ).c_str() ) ); if (lineBtn) lineBtn->Disable(); } } } // 권한처리. void SUIGuildSubManageWnd::AuthorityProcess( SPlayerSlot * pPlayerSlot, bool bOpen ) { int nMemberCount = m_GuildMgr.GetMemberCount(); /*SPlayerInfo player = m_PlayerInfoMgr.GetPlayerInfo(); SPlayerSlot * pPlayerSlot = this->m_GuildMgr.FindMember( player.GetName() ); */ if( nMemberCount ) { KUIControlPanel * pPanel; int nAuthority = pPlayerSlot->GetAuthority(); // 권한. if( nAuthority < 7 ) { int nBitSet = m_GuildMgr.GetAuthorityClassBitSet( nAuthority - 1 ); // 권한 비트셋. //PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_MEMBER_MEMO, // SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_PERSNAL, bOpen, 1 ); // 나의관리. PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_MEMBER_INVITE, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_INVITATION, bOpen, 4 ); // 길드원 가입. PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_UPDATE_GUILD_ICON, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_GUILDMARK, bOpen, 2 ); // 길드마크넣기. PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_NOTICE, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_NOTICE, bOpen, 3 ); // 길드공지 PanelDisable( nBitSet, ( _PERMIT_REQUIRED_ACTION::PRA_GRANT_REVOKE_PERMISSION | _PERMIT_REQUIRED_ACTION::PRA_MEMBER_KICK ), SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_MEMBER, bOpen, 5 ); // 길드원관리. PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_ATTACK_TEAM_CREATE, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_TEAM, bOpen, 6 ); // 공격대결성. //PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_PERMISSION_MANAGEMENT, // SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_CLASSNAME, bOpen, 7 ); // 길드등급명쓰기. PanelDisable( nBitSet, _PERMIT_REQUIRED_ACTION::PRA_SET_PERMISSION_NAME, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_CLASSNAME, bOpen, 7 ); // 길드등급명쓰기. } else if( nAuthority == 7 ) { //// //KUIControlPanel * pPanel; const std::vector< KUIControlPanel * > & arrPanels = m_pPanelManager->GetPanelControls(); int size = arrPanels.size(); for( int i=0; i( pPanel->GetChild( "guild_manage_menu" ) ); pStatic->SetEnableOption( true ); pStatic->Enable(); dynamicCast< KUIControl * >( pPanel->GetChild( "trim_titlebar_open" ) )->Enable(); dynamicCast< KUIControlSimpleButton * >( pPanel->GetChild( "sub_open" ) )->Enable(); // Line Control Button. for( int j=1; j<8; ++j ) dynamicCast< KUIControlButton * >( GetChild( CStringUtil::StringFormat( "button_line_control_0%d", j ).c_str() ) )->Enable(); } } if( bOpen && !m_bOpenTheOne ) { //// 길드관리 창 오픈시, 한개 패널은 오픈되어야 한다. //if( m_pPanelManager->FindPanel( m_pCrrOpenPanel, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_PERSNAL ) ) //{ // m_pCrrOpenPanel->OpenPanel(); // m_bOpenTheOne = true; //} // 길드관리 창 오픈시, 한개 패널은 오픈되어야 한다. if( m_pCrrOpenPanel == NULL ) m_pPanelManager->FindPanel( m_pCrrOpenPanel, SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE_PANEL_PERSNAL ); if( m_pCrrOpenPanel ) m_pCrrOpenPanel->OpenPanel(); m_bOpenTheOne = true; } } } }