639 lines
23 KiB
C++
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;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
} |