Files
2026-06-01 12:46:52 +02:00

639 lines
23 KiB
C++

#include "stdafx.h"
#include "SGameManager.h"
#include "SGameMessage.h"
//#include "SGameMessageUI.h"
#include "SMessengerMgr.h"
#include <toolkit/XStringUtil.h>
#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 = "<font:font_02><size:8><#4d4d4d><hcenter><vcenter>%d <$1854:등급>";
const char * g_pTextDecorate_ClassName = "<font:font_02><size:8><#955c5c><hcenter><vcenter>";
}
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<KUIControl *>( 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( "<font:font_02><size:%d><#4d4d4d><hcenter><vcenter>%s", pControl->GetFontSize(), S(3508) ).c_str() );
}
else
{
strDeco = g_pTextDecorate;
XStringUtil::Replace( strDeco, "<size:8>", CStringUtil::StringFormat("<size:%d>", 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("<font:font_02><size:%d><#955c5c><hcenter><vcenter>%s", pControl->GetFontSize(), S(3508) ).c_str() );
else
{
std::string strText( g_pTextDecorate_ClassName );
XStringUtil::Replace( strText, "<size:8>", CStringUtil::StringFormat("<size:%d>", 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; i<size; i++ )
arrPanel[ i ]->ProcMsgAtStatic( 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<size; ++i )
{
pPanel = arrPanels[ i ];
if( pPanel )
{
KUIControlStatic * pStatic = dynamicCast< KUIControlStatic * >( 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;
}
}
}
}