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

1290 lines
43 KiB
C++

#include "stdafx.h"
#include <toolkit/nsl.h>
#include <toolkit/nsluni.h>
#include "CInput.h" //길드명출력하는 부분에서 이용함 -N4-
#include <toolkit/XStringUtil.h>
#include "KUIListControl.h"
#include "KUIControlStatic.h"
#include "KUIControlScroll.h"
#include "KUITabControl.h"
#include "KUIControlButton.h"
#include "SGameManager.h"
#include "SGameMessage.h"
//#include "SGameMessageUI.h"
#include "SMessengerMgr.h"
#include "SGameInterface.h"
#include "SPlayerInfoMgr.h"
#include "SStringDB.h"
#include "SJobDB.h"
#include "SUIMemoViewWnd.h"
#include "SUIGuildMemberTab.h" // 길드원.
#include "SUIGuildApplicantTab.h" // 길드신청자
#include "SUIGuildWnd.h"
#define UI_REFRESH_OK 9998 // UI갱신.
namespace
{
const char * g_pTextDecoration = "<size:8><hcenter><vcenter>";
const char * g_pTabButtonAni_Normal = "common_button_tab_beamblue_cyan";
const char * g_pTabButtonAni_Red = "common_button_tab_beamblue_red";
const char g_arrLineAni[][128] = { "common_guage_titanium_member_high", "common_guage_titanium_member_middle", "common_guage_titanium_member_low" };
// Sub Wnd
SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE g_ArrSubWnd[] =
{
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_INFO,
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE,
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER
};
// 탭 Wnd 타입.
enum GUILDTAB_TYPE
{
GUILDTAB_NONE = -1,
GUILDTAB_MEMBER = 0,
GUILDTAB_APPLICANT,
GUILDTAB_MAX
};
// bintitle 2010.04.09
// 해당 컨트롤의 영역만큼 문자열을 자르고, 마지막 문자는 '..' 으로 변환하여 반환한다.
void CuttingText( KUIControl * pControl, std::string& rText, const char * strFont, int fontSize )
{
std::vector<std::string> lineList;
#ifdef _COUNTRY_ME_
pControl->SplitLine(lineList, rText, KFontManager::KDEFAULT_FONT_NAME, fontSize );
#else
pControl->SplitLine(lineList, rText, strFont, fontSize, std::string("font_02") == strFont ? true : false, fontSize > 0 ? true : false );
#endif
if( lineList.size() > 1 )
{
std::wstring wstr = nsl::uni::conv(lineList[0].c_str());
#ifdef _COUNTRY_ME_
wstr.erase( wstr.begin() );
wstr.erase( wstr.begin() );
std::wstring comma = nsl::uni::conv("..");
wstr = comma + wstr;
#else
wstr.erase(wstr.end()-1);
wstr.erase(wstr.end()-1);
wstr += L"..";
#endif
std::string str = nsl::uni::conv(wstr.c_str());
rText = str;
}
lineList.clear();
}
//--------------------------------------------------
// 권한처리 함수포인터 배열.
typedef void (SUIGuildWnd::*fpAuthority)();
fpAuthority g_arrFpAuthority[ MAX_AUTHORITY_CLASS ] = { &SUIGuildWnd::Class_1, &SUIGuildWnd::Class_2, &SUIGuildWnd::Class_3,
&SUIGuildWnd::Class_4, &SUIGuildWnd::Class_5, &SUIGuildWnd::Class_6, &SUIGuildWnd::Class_7};
}
void SUIGuildWnd::Class_1()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MASTER, false ) ); // 길드마스터 창 닫기.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
// m_pTabControl->SetDisableTab( GUILDTAB_TYPE::GUILDTAB_APPLICANT ); // 길드신청자 탭.
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_APPLICANT ]->Disable();
}
void SUIGuildWnd::Class_2()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MASTER, false ) ); // 길드마스터 창 닫기.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
}
void SUIGuildWnd::Class_3()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MASTER, false ) ); // 길드마스터 창 닫기.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
}
void SUIGuildWnd::Class_4()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MASTER, false ) ); // 길드마스터 창 닫기.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
}
void SUIGuildWnd::Class_5()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MASTER, false ) ); // 길드마스터 창 닫기.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
}
void SUIGuildWnd::Class_6() // 부길마.
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MASTER, false ) ); // 길드마스터 창 닫기.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
}
void SUIGuildWnd::Class_7(){} // 마스터.
//--------------------------------------------------
SUIGuildWnd::SUIGuildWnd( SGameManager * pGameManager ) :
SUIWnd( pGameManager ),
m_BaseControl( NULL ),
m_pMemoControl( NULL ),
//m_pTabControl( NULL ),
m_pBtnCtrlMaster( NULL ),
m_pNoticePictogram( NULL ),
m_pControlGuildName( NULL ),
m_pControlCurrent( NULL ),
m_pControlGrade( NULL ),
m_pControlConnect( NULL ),
m_pControlJob( NULL ),
m_pControlLv( NULL ),
m_pControlID( NULL ),
m_nSrcHeightLocal( 0 ),
m_bExtendLocal( 0 ),
m_bMemoText( false ),
m_bFirstOpen( true ),
m_bGuild( false ),
m_bManageMode( false ),
m_bMasterMode( false ),
m_bUIRefresh( true ),
m_beforeAuthority( -1 ),
m_bRefresh( GUILD_UPDATE::GUILD_UPDATE_NONE )
{
}
SUIGuildWnd::~SUIGuildWnd()
{
Release();
}
void SUIGuildWnd::Release()
{
}
SUIWnd* SUIGuildWnd::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID )
{
// 커스텀 윈도우 move 영역 설정
SetCustomMovingRect( KRect( 2, 2, 250, 22 ) );
SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID );
//--------------------------------
// 탭 컨트롤 생성.
// 길드원.
SUIWnd * pTapMember = new SUIGuildMemberTab( m_pGameManager );
pTapMember->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기.
pTapMember->CreateWnd( "window_guild_main_member_list.nui", pWndManager, KPoint( kPos.x, kPos.y ) );
pTapMember->SetParent( this );
/// 2011.04.01 right click tool tip - prodongi
// 2011.11.29 - servantes : 옵션 nui에 해당 컨트롤 없음 / 주석처리
//KUIControl* rmark = dynamicCast<KUIControl*>(pTapMember->GetChild("mark_right_click_01"));
//if (rmark)
//{
// std::string str;
// XStringUtil::Format(str, "<#b92c36>%s", S(6776)); /// 2011.05.24 칼라 적용 - prodongi
// rmark->SetTooltip(str.c_str());
//}
// 길드신청자.
SUIWnd * pTabApplicant = new SUIGuildApplicantTab( m_pGameManager );
pTabApplicant->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기.
pTabApplicant->CreateWnd( "window_guild_main_applicant_list.nui", pWndManager, KPoint( kPos.x, kPos.y ) );
pTabApplicant->SetParent( this );
// 부모에 자식으로 등록.
this->AddChild( pTapMember ); m_ArrTabWnd.push_back( pTapMember );
this->AddChild( pTabApplicant ); m_ArrTabWnd.push_back( pTabApplicant );
//// 최초엔 길드원 탭을 보여줌. // 주석. bintitle. 2010.11.30.
//pTapMember->SetShow( true );
// 위치설정
KRect rtTab = GetChild( "listcontrol01" )->GetRect(); // 탭 컨트롤 위치지정을 위한 컨트롤.
pTapMember->MovePos( rtTab.left, rtTab.top );
pTabApplicant->MovePos( rtTab.left, rtTab.top );
////
//// 탭 컨트롤 설정.
//m_pTabControl = static_cast< KUISimpleTabControl * >( GetChild( "tab00" ) );
//if( m_pTabControl )
//{
// m_pTabControl->SetTabProperty( 0, false, 2 );
// /*m_pTabControl->AddTabItem( "길드원", "길드원", "common_button_titanium_line_nomal" );
// m_pTabControl->AddTabItem( "길드신청자", "길드신청자", "common_button_titanium_line_nomal" );*/
// m_pTabControl->AddTabItem( "길드원", "길드원", 0, 1.0f, "<#a0a0a0>" );
// m_pTabControl->AddTabItem( "길드신청자", "길드신청자", 0, 1.0f, "<#a0a0a0>" );
// m_pTabControl->SetSelectedItem( 0 );
// ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_MEMBER );
//}
////m_pTabControl->SetTabItemAniName( GUILDTAB_TYPE::GUILDTAB_MEMBER, "common_button_tab_beamblue_red" );
//
// 탭 버튼. 탭컨트롤 기능을 대신한다.
m_arrTabButton.push_back( dynamicCast< KUIControlButton * >( GetChild( "tab00" ) ) );
m_arrTabButton.push_back( dynamicCast< KUIControlButton * >( GetChild( "tab01" ) ) );
int size = m_arrTabButton.size();
for( int i=0; i<size; ++i )
{
m_arrTabButton[ i ]->SetEnableColor( "<#ffffff>" );
m_arrTabButton[ i ]->SetDisableColor( "<#a0a0a0>" );
}
// 이부분 때문에 탭컨트롤 대신 버튼을 사용했다.
// 활성화된 탭의 레이아웃을 탭에 속한 Wnd 보다 높게하여 ------
// _____| |_______
// 이런 모양이 되도록 해야하지만,
// 탭컨트롤은 탭컨트롤안에 버튼기능의 TabItem 이 포함된다.
// 탭컨트롤의 레이아웃이 탭에속한 Wnd 보다 낮은 상태에서 TabItem의 레이아웃은 탭에속한 Wnd 보다 높게 할 수 없다.
std::list<KUIWnd*> & rChildList = const_cast< std::list<KUIWnd*> & >( this->GetChildList() );
std::list< KUIWnd* >::iterator it = std::find( rChildList.begin(), rChildList.end(), m_arrTabButton[ 0 ] );
if( it != rChildList.end() )
{
rChildList.erase( it );
rChildList.push_back( m_arrTabButton[ 0 ] );
}
//-----------------------------
// Sub Wnd
m_nShowSubWnd = GUILDWND_TYPE::GUILDWND_NONE;
m_ArrSubWndID.push_back( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_INFO ); // 길드정보
m_ArrSubWndID.push_back( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE ); // 길드관리
m_ArrSubWndID.push_back( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER ); // 길드마스터
//
// 자신의 길드정보 컨트롤 배열.
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "mark_online_01" ) ) ); // 0
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "mark_job_01" ) ) ); // 1
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "text_Lv_01" ) ) ); // 2
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "text_id_01" ) ) ); // 3
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "button_fold_01" ) ) ); // 4
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "mark_guild_class_01" ) ) ); // 5
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "text_guild_class_01" ) ) ); // 6
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "mark_guild_memo_01" ) ) ); // 7
m_ArrOwnGuildStateControl.push_back( dynamicCast< KUIControl * >( GetChild( "guild_memo_text_01" ) ) ); // 8
// 위 컨트롤들의 Base Control.
m_BaseControl = dynamicCast< KUIControl * >( GetChild( "backline_03" ) );
m_nSrcHeightLocal = m_BaseControl->GetRect().GetHeight(); // 원본 높이.
// 길드정보 컨트롤의 보임, 숨김처리.
SetShowGuildState();
// 내길드정보 - 확장버튼 초기 이미지변경.
dynamicCast< KUIControlSimpleButton * >( m_ArrOwnGuildStateControl[ 4 ] )->SetAniName( "common_button_titanium_unfold" );
////// 길드메모 텍스트 컨트롤.
m_pMemoControl = GetChild( "backline_02" ); // "guild_notice_text_02" ); //"guild_notice_text_02" );
m_pBtnCtrlMaster = dynamicCast< KUIControlSimpleButton * >( GetChild( "button_guild_master_01" ) ); // 길드마스터 버튼.
//m_pBtnCtrlMaster = GetChild( "button_guild_master_01" ) ; // 길드마스터 버튼.
//
// Controls //
//
m_pNoticePictogram = dynamicCast< KUIControlStatic * >( GetChild( "mark_guild_notice_01" ) ); // 메모픽토그램.
m_pControlGuildName = dynamicCast< KUIControl * >( GetChild( "guild_name_text_01" ) ); // 길드명.
m_pControlNotice = dynamicCast< KUIControl * >( GetChild( "guild_notice_text_02" ) ) ; // 길드공지.
m_pControlCurrent = dynamicCast< KUIControl * >( GetChild( "text_current" ) );
m_pControlGrade = dynamicCast< KUIControl * >( GetChild( "text_grade" ) );
m_pControlConnect = dynamicCast< KUIControlStatic * >( GetChild( "mark_online_01" ) ) ; // 접속
m_pControlJob = dynamicCast< KUIControlStatic * >( GetChild( "mark_job_01" ) ) ; ; // 직업
m_pControlLv = dynamicCast< KUIControl * >( GetChild( "text_Lv_01" ) ) ; ; // Level
m_pControlID = dynamicCast< KUIControl * >( GetChild( "text_id_01" ) ) ; ; // 아이디
//-----------------------------
// 2010.11.26. 길드정보 변경시 UI 갱신방식 => 길드윈도우 open 시 UI 갱신 으로 변경.
m_bUIRefresh = true; // 길드윈도우 open 시에 UI를 갱신할지 여부.
m_beforeGuildMemberCount = -1; // 갱신 이전 길드원수.
//-----------------------------
return this;
}
bool SUIGuildWnd::InitControls( KPoint kPos )
{
return SUIWnd::InitControls( kPos );
}
void SUIGuildWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd)
{
if( bOpen )
{
// bintitle. 2010.11.30.
// 하나의 탭도 보이지 않는 상태이면 길드맴버탭 을 보이게 한다.
bool bTabOpen = false;
for( int i=0; i<GUILDTAB_TYPE::GUILDTAB_MAX; ++i )
{
if( m_ArrTabWnd[ i ]->IsShow() )
{
bTabOpen = true;
break;
}
}
if( !bTabOpen )
m_ArrTabWnd[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->SetShow( true );
// 길드UI 갱신.
if( m_bUIRefresh )
{
// 길드마스터 정보 컨트롤 변경.
UpdateMaster( m_bRefresh );
m_bUIRefresh = false; // 갱신여부 클리어.
m_bRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 클리어.
}
// 길드마스터 정보 컨트롤 설정.
//UpdateMaster();
}
else
{
// 길드공지 닫기.
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, false ) );
// 나의메모 닫기.
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, false ) );
// 메모뷰어 닫기.
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, false) );
// 모든 길드 Sub Wnd 숨김.
CloseAllSubWnd();
// 2010.12.07. Tab 윈도우들 숨김.
for( int i=0; i<GUILDTAB_TYPE::GUILDTAB_MAX; ++i )
m_ArrTabWnd[ i ]->SetShow( false );
m_bUIRefresh = false; // 갱신여부 클리어.
m_bRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 클리어.
}
}
void SUIGuildWnd::ProcMsgAtStatic( SGameMessage* pMsg )
{
switch(pMsg->nType)
{
// 조건 검사 위치 변경 및 else 추가. bintitle. 2010.11.26.
case IMSG_UI_SEND_DATA:
{
SIMSG_UI_SEND_DATA *pData = (SIMSG_UI_SEND_DATA *)pMsg;
//
// 길드 업데이트.
if( pData->m_strString == "guild_update" )
{
pData->bUse = true;
//// 길드없음.
////if( m_GuildMgr.GetGuildMemberCount() < 1 )
//if( !m_GuildMgr.IsExist() )
//{
// m_bRefresh = UI_REFRESH_OK; // UI갱신.
//
// // 열려있고, 이전에 길드존재였으나 현재 길드가없는상태( 해체, 탈퇴, 강퇴 등의경우 ).
// if( this->IsShow() && m_bBeforeExist )
// {
// m_bBeforeExist = false;
// UpdateMaster( GUILD_UPDATE::GUILD_UPDATE_MAX );
// }
// // 모든 길드 Sub Wnd 숨김.
// CloseAllSubWnd();
// //m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, false ) ); 2010.12.07. 주석.
// m_bUIRefresh = true; // UI갱신.
//}
// 길드없음.
if( !m_GuildMgr.IsExist() )
{
UpdateMaster( GUILD_UPDATE::GUILD_UPDATE_MAX );
}
// 길드있음.
else if( !(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_NONE) ) // 길드정보관련 메세지 아닌경우 제외. bintitle. 2010.11.26.
{
if( this->IsShow() )
{
// 길드마스터 정보 컨트롤 변경.
UpdateMaster( pData->m_dwData );
m_bUIRefresh = false; // UI갱신X.
m_bRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 클리어.
}
else
{
m_bUIRefresh = true; // 갱신.
m_bRefresh |= pData->m_dwData; // UI open 시에 비교하기위해 갱신조건 누적.
}
// SUB WND 에 메세지 전송.
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_INFO, "guild_update", pData->m_dwData ) );
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, "guild_update", pData->m_dwData ) );
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER, "guild_update", pData->m_dwData ) );
//m_ArrTabWnd[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->ProcMsgAtStatic( pMsg ); // 메세지 전달. 2010.12.07. bintitle.
}
m_ArrTabWnd[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->ProcMsgAtStatic( pMsg ); // 메세지 전달. 2010.12.07. bintitle.
}
//
// 길드아이콘 업데이트.
else if( pData->m_dwData == IMSG_GUILD_ICON || pData->m_dwData == IMSG_GUILD_ICON_REFRESH )
{
pMsg->bUse = true;
if( this->m_GuildMgr.GetGuildID() == (int)pData->m_nNumber.getAmount() )
{
if( pData->m_strText == "" || pData->m_strText.size() < 1 )
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( "common_mark_icon_none" );
else
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( pData->m_strText.c_str() );
}
}
//
// 길드장 변경.
else if( pData->m_strString == "change_guild_master" )
{
pData->bUse = true;
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, "change_guild_master" ) );
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER, "change_guild_master" ) );
// 권한처리.
AuthorityProcess();
}
}
break;
case IMSG_UI_GUILD_MASTER_MODE : // 길드마스터 모드 설정.
{
m_ArrTabWnd[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->ProcMsgAtStatic( pMsg ); // 메세지 전달.
SIMSG_UI_GUILD_WNDMSG * pData = dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg );
m_bMasterMode = pData->bMode;
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->SetAniName(
m_bMasterMode ? g_pTabButtonAni_Red : g_pTabButtonAni_Normal );
}
break;
case IMSG_UI_GUILD_MANAGE_MODE : // 길드원 관리모드 설정.
{
m_ArrTabWnd[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->ProcMsgAtStatic( pMsg ); // 메세지 전달.
SIMSG_UI_GUILD_WNDMSG * pData = dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg );
m_bManageMode = pData->bMode;
// 관리모드적용.
ManageMode();
}
break;
// 길드관리 윈도우 -> 길드원 신청관리.
case IMSG_UI_GUILD_APPLICANTTAB :
ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_APPLICANT ); // 길드신청자 탭 을 보임.
//m_pTabControl->SetSelectedItem( GUILDTAB_TYPE::GUILDTAB_APPLICANT ); // 탭 컨트롤 셀렉트 변경.
/// 2011.09.30 두번 호출 되어서 주석 처리함 - prodongi
//ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_APPLICANT );
pMsg->bUse = true;
break;
case IMSG_UI_GUILD_MEMBERTAB :
ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_MEMBER ); // 길드원 탭 을 보임.
// m_pTabControl->SetSelectedItem( GUILDTAB_TYPE::GUILDTAB_MEMBER ); // 탭 컨트롤 셀렉트 변경.
/// 2011.09.30 두번 호출 되어서 주석 처리함 - prodongi
//ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_MEMBER );
pMsg->bUse = true;
break;
case IMSG_UI_GUILD_MEMBERCLASS_SETUP :
{
// Open 길드관리 창.
OpenSubWnd( GUILDWND_TYPE::GUILDWND_MANAGE );
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, IMSG_UI_GUILD_MEMBERCLASS_SETUP ) );
pMsg->bUse = true;
}
break;
case IMSG_UI_GUILD_EXPULSION_SETUP :
// Open 길드관리 창.
OpenSubWnd( GUILDWND_TYPE::GUILDWND_MANAGE );
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, IMSG_UI_GUILD_EXPULSION_SETUP ) );
pMsg->bUse = true;
break;
case IMSG_UI_GUILD_DONATE_MODE:
// Open 길드관리 창.
OpenSubWnd( GUILDWND_TYPE::GUILDWND_MANAGE );
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, IMSG_UI_GUILD_DONATE_MODE ) );
pMsg->bUse = true;
break;
// 길드아이콘.
case IMSG_GUILD_ICON :
case IMSG_GUILD_ICON_REFRESH :
{
SIMSG_UI_GUILD_WNDMSG *pData = (SIMSG_UI_GUILD_WNDMSG *)pMsg;
if( pData->strData == m_GuildMgr.GetGuildName() )
{
if( pData->strData_2 == "" || pData->strData_2.size() < 1 )
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( "common_mark_icon_none" );
else
{
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( pData->strData_2.c_str() );
}
}
pMsg->bUse = true;
}
break;
case IMSG_GUILD_ICON_DESTROY :
{
SIMSG_UI_GUILD_WNDMSG *pData = (SIMSG_UI_GUILD_WNDMSG *)pMsg;
if( pData->nData == m_GuildMgr.GetGuildID() )
{
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( "common_mark_icon_none" );
}
pMsg->bUse = true;
}
break;
case IMSG_GUILD_ICON_LEAVE :
{
SIMSG_UI_GUILD_WNDMSG *pData = (SIMSG_UI_GUILD_WNDMSG *)pMsg;
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( "common_mark_icon_none" );
pMsg->bUse = true;
}
break;
}
}
void SUIGuildWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
{
switch( nMessage )
{
case KUI_MESSAGE::KBUTTON_CLICK :
{
// close.
if( !::_stricmp( lpszControlID, "button_close" ) )
{
// 모든 길드 Sub Wnd 숨김.
CloseAllSubWnd();
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, false ) );
}
// Open 길드정보 창.
else if( !::_stricmp( lpszControlID, "button_guild_data_01" ) )
ShowSubWnd( GUILDWND_TYPE::GUILDWND_INFO );
// Open 길드관리 창.
else if( !::_stricmp( lpszControlID, "button_guild_manage_01" ) )
ShowSubWnd( GUILDWND_TYPE::GUILDWND_MANAGE );
// Open 길드마스터 창.
else if( !::_stricmp( lpszControlID, "button_guild_master_01" ) )
ShowSubWnd( GUILDWND_TYPE::GUILDWND_MASTER );
// 자신의 길드정보 확장버튼.
else if( !::_stricmp( lpszControlID, "button_fold_01" ) )
{
ExtendOwnState();
}
// 탭 버튼( 길드원 ).
if( !::_stricmp( lpszControlID, "tab00" ) )
{
/// 2011.09.30 Process로 뺌, 뻑이 날 가능성이 있음 - prodongi
m_selectedTempTabIdx = GUILDTAB_TYPE::GUILDTAB_MEMBER;
//ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_MEMBER );
}
// 탭 버튼( 길드신청자 ).
if( !::_stricmp( lpszControlID, "tab01" ) )
{
/// 2011.09.30 Process로 뺌, 뻑이 날 가능성이 있음 - prodongi
m_selectedTempTabIdx = GUILDTAB_TYPE::GUILDTAB_APPLICANT;
//ShowTabWnd( GUILDTAB_TYPE::GUILDTAB_APPLICANT );
}
}
break;
// Scroll
case KUI_MESSAGE::KSCROLL_SELECT :
{
}
break;
//// 탭 변경
//case KUI_MESSAGE::KTAB_SELECT :
//
// ShowTabWnd( (int)lparam );
// break;
// 윈도우 이동
case KUI_MESSAGE::KGENWND_MOVE:
{
LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한
if( m_nShowSubWnd > GUILDWND_TYPE::GUILDWND_NONE && m_nShowSubWnd < GUILDWND_TYPE::GUILDWND_MAX )
{
// 길드서브창 이동.
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE(
( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE )m_ArrSubWndID[ m_nShowSubWnd ],
GetRect().right - 4, GetRect().top ) );
// 메모뷰어 닫기. 잔상문제때문.
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, false ) ); // 팝업 Wnd 닫기.
}
}
break;
}
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
}
DWORD SUIGuildWnd::OnMouseMessage(DWORD dwMessage, int x, int y)
{
switch( dwMessage )
{
case KMOUSE_MOVE :
if( m_bGuild )
{
static DWORD dwTime = 0;
if(GetSafeTickCount() - dwTime > 300)
{
// 길드메모뷰 Wnd.
ShowMemoView( x, y );
dwTime = GetSafeTickCount();
}
//// 길드메모뷰 Wnd.
//ShowMemoView( x, y );
}
break;
}
return SUIWnd::OnMouseMessage(dwMessage, x, y);
}
/// 2011.09.30 - prodongi
void SUIGuildWnd::Process(DWORD dwTime)
{
updateSelectedTempTab();
SUIWnd::Process(dwTime);
}
void SUIGuildWnd::updateSelectedTempTab()
{
if (-1 == m_selectedTempTabIdx)
return ;
ShowTabWnd(m_selectedTempTabIdx);
m_selectedTempTabIdx = -1;
}
// 길드메모뷰 Wnd.
void SUIGuildWnd::ShowMemoView( int x, int y )
{
bool bOpen = true;
// 길드공지.
if( bOpen &&
m_GuildMgr.GetGuildNotice() && ::_stricmp( m_GuildMgr.GetGuildNotice(), "" ) &&
m_pMemoControl && m_pMemoControl->GetRect().IsInRect( x, y ) )
{
bOpen = false;
KRect rt = m_pMemoControl->GetRect();
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SETUP_REGION( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, "guild_ui_main_memo_01", rt.left, rt.top ) ); // 위치이동 및 크기 지정.
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, true ) ); // 팝업 Wnd 열기.
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, "guild_memo", m_GuildMgr.GetGuildNotice(), 0 ) ); // 메모 데이터 전송.
}
// 나의메모.
else if( bOpen && m_bMemoText &&
m_ArrOwnGuildStateControl[ 8 ] &&
m_ArrOwnGuildStateControl[ 8 ]->IsShow() &&
m_ArrOwnGuildStateControl[ 8 ]->GetRect().IsInRect( x, y ) )
{
bOpen = false;
KRect rt = m_BaseControl->GetRect();
rt.top += ( rt.GetHeight() / 2 );
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SETUP_REGION( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, "guild_ui_main_memo_01", rt.left, rt.top ) ); // 위치이동 및 크기 지정.
SPlayerInfo player = m_PlayerInfoMgr.GetPlayerInfo();
SPlayerSlot * pPlayerSlot = this->m_GuildMgr.FindMember( player.GetName() );
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, "guild_memo", pPlayerSlot->GetGuildMemo().c_str(), 1 ) ); // 메모 데이터 전송.
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, true ) ); // 팝업 Wnd 열기.
}
//// 닫기.
//else
//{
// m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, false ) ); // 닫기.
//}
}
// 길드 Sub Wnd 보임, 숨김 처리.
void SUIGuildWnd::ShowSubWnd( GUILDWND_TYPE wndType )
{
m_nShowSubWnd = (int)wndType;
m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( g_ArrSubWnd[ m_nShowSubWnd ] ) );
// 하나의 Sub Wnd가 띄워지면 다른창들은 숨긴다.
for( int i=0; i<GUILDWND_TYPE::GUILDWND_MAX; ++i )
{
if( i == m_nShowSubWnd )
continue;
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( g_ArrSubWnd[ i ], false ) );
}
}
// 길드 Sub Wnd Open, 이외 sub wnd 는 Close.
void SUIGuildWnd::OpenSubWnd( GUILDWND_TYPE wndType )
{
m_nShowSubWnd = (int)wndType;
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( g_ArrSubWnd[ m_nShowSubWnd ], true ) );
// 하나의 Sub Wnd가 띄워지면 다른창들은 숨긴다.
for( int i=0; i<GUILDWND_TYPE::GUILDWND_MAX; ++i )
{
if( i == m_nShowSubWnd )
continue;
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( g_ArrSubWnd[ i ], false ) );
}
}
// 모든 길드 Sub Wnd 숨김.
void SUIGuildWnd::CloseAllSubWnd()
{
for( int i=0; i<GUILDWND_TYPE::GUILDWND_MAX; ++i )
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( g_ArrSubWnd[ i ], false ) );
}
// 탭 Wnd 보임, 숨김 처리.
void SUIGuildWnd::ShowTabWnd( int tabWndType )
{
if( tabWndType > GUILDTAB_TYPE::GUILDTAB_NONE && tabWndType < GUILDTAB_TYPE::GUILDTAB_MAX )
{
// 탭에 속하는 윈도우들의 레이아웃을 최하단으로 이동.
std::list<KUIWnd*> & rChildList = const_cast< std::list<KUIWnd*> & >( this->GetChildList() );
int size = m_ArrTabWnd.size();
for( int i=0; i<size; ++i )
{
std::list< KUIWnd* >::iterator it = std::find( rChildList.begin(), rChildList.end(), m_ArrTabWnd[ i ] );
if( it != rChildList.end() )
{
rChildList.erase( it );
rChildList.push_back( m_ArrTabWnd[ i ] );
}
}
m_ArrTabWnd[ tabWndType ]->SetShow( true );
for( int i=0; i<GUILDTAB_TYPE::GUILDTAB_MAX; ++i )
{
if( i == tabWndType )
{
// 선택된 탭버튼의 레이아웃을 최하단으로 이동.
std::list< KUIWnd* >::iterator it = std::find( rChildList.begin(), rChildList.end(), m_arrTabButton[ tabWndType ] );
if( it != rChildList.end() )
{
rChildList.erase( it );
rChildList.push_back( m_arrTabButton[ tabWndType ] );
}
}
else
{
m_ArrTabWnd[ i ]->SetShow( false );
}
}
//
// 길드신청자 탭.
if( tabWndType == GUILDTAB_TYPE::GUILDTAB_APPLICANT )
{
// 길드관리 윈도우 오픈.
//m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE, true ) );
OpenSubWnd( GUILDWND_TYPE::GUILDWND_MANAGE );
// 권한.
SPlayerInfo player = m_PlayerInfoMgr.GetPlayerInfo();
SPlayerSlot * pPlayerSlot = this->m_GuildMgr.FindMember( player.GetName() );
if( pPlayerSlot )
{
int nBitSet = m_GuildMgr.GetAuthorityClassBitSet( pPlayerSlot->GetAuthority() - 1 ); // 권한 비트셋.
//if( pPlayerSlot->GetAuthority() == 7 || ( nBitSet & _PERMIT_REQUIRED_ACTION::PRA_PERMISSION_MANAGEMENT ) )
if( pPlayerSlot->GetAuthority() == 7 )
{
// 길드관리-길드원가입 패널 오픈 메세지 전송.
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE,
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_PANEL_INVITATION,
IMSG_UI_GUILD_APPLICANT_FOR_ADMISSION ) );
}
}
}
}
}
inline void SUIGuildWnd::DisableBtnCtrl( const char * pStr )
{
KUIControl * pControl = dynamicCast< KUIControl * >( GetChild( pStr ) );
if( m_bFirstOpen || !( pControl->IsDisable() ) )
pControl->Disable(); // 길드정보 버튼.
}
inline void SUIGuildWnd::EnableBtnCtrl( const char * pStr )
{
KUIControl * pControl = dynamicCast< KUIControl * >( GetChild( pStr ) );
if( m_bFirstOpen || pControl->IsDisable() )
pControl->Enable(); // 길드정보 버튼.
}
// 권한처리.
void SUIGuildWnd::AuthorityProcess()
{
int nMemberCount = m_GuildMgr.GetGuildMemberCount();
SPlayerInfo player = m_PlayerInfoMgr.GetPlayerInfo();
SPlayerSlot * pPlayerSlot = this->m_GuildMgr.FindMember( player.GetName() );
if( nMemberCount && pPlayerSlot )
{
int nAuthority = pPlayerSlot->GetAuthority(); // 권한.
if( nAuthority > 0 && nAuthority <= 7 )
(this->*g_arrFpAuthority[ nAuthority - 1 ])(); // 권한처리.
//// 등급별권한설정 권한 추가.
//if( nAuthority < _PERMISSION::PERMISSION_LEADER )
//{
// int nBitSet = m_GuildMgr.GetAuthorityClassBitSet( nAuthority - 1 ); // 권한 비트셋.
//
// if( _PERMIT_REQUIRED_ACTION::PRA_CLASS_AUTHORITY_SET & nBitSet )
// {
// EnableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
// }
//}
}
}
// 길드마스터 정보 컨트롤 변경.
void SUIGuildWnd::UpdateMaster( DWORD nRefresh ) // 갱신조건 추가. bintitle.2010.11.26.
{
//--------------------------------
// 길드마스터 정보 컨트롤 설정.
//
SPlayerInfo player = m_PlayerInfoMgr.GetPlayerInfo();
KUIWnd * pWnd = NULL;
//----------------------------
// 길드가 없다.
//if( m_beforeGuildMemberCount != m_GuildMgr.GetGuildMemberCount() && m_GuildMgr.GetGuildMemberCount() < 1 )
if( !m_GuildMgr.IsExist() )
{
m_bGuild = false; // 길드가입여부.
// 모든 길드 Sub Wnd 숨김.
CloseAllSubWnd();
// KUIControl * pControl;
GetChild( "guild_name_text_01" )->SetCaption( " " ); // 길드명.
m_ArrOwnGuildStateControl[ 3 ]->SetCaption( " " ); // 내아이디.
DisableBtnCtrl( "button_guild_data_01" ); // 길드정보 버튼.
DisableBtnCtrl( "button_guild_manage_01" ); // 길드관리 버튼.
DisableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
DisableBtnCtrl( "button_fold_01" ); // 확장 버튼.
m_pControlNotice->SetCaption( " " ); // 길드공지.
m_pControlGrade->SetCaption( " " );
m_pControlCurrent->SetCaption( " " );
dynamicCast< KUIControlStatic * >( GetChild( "mark_guild_notice_01" ) )->SetAniName( "common_mark_titanium_guild_notice_offline" ); // 메모픽토그램.
dynamicCast< KUIControlStatic * >( GetChild( "mark_online_01" ) )->SetAniName( "common_mark_titanium_offline" ); // 접속아이콘.
string jobName( player.GetJobName() );
dynamicCast< KUIControlStatic * >( GetChild( "mark_job_01" ) )->SetAniName( jobName.append("_off").c_str() ); // 직업아이콘.
GetChild( "text_Lv_01" )->SetCaption( CStringUtil::StringFormat( "%s<left><vcenter><#93fe00>", S(6425) ).c_str() ); // Level 컨트롤
dynamicCast< KUIControlStatic * >( GetChild( "guild_mark" ) )->SetAniName( "common_mark_icon_none" ); // 길드마크.
// 등급명.
// -1 하는 이유 : 등급은 1부터시작, 클래스명배열은 0부터 시작. 따라서 -1로 맞춰줌.
m_ArrOwnGuildStateControl[ 6 ]->SetCaption( "" );
// 메모텍스트
m_ArrOwnGuildStateControl[ 8 ]->SetCaption( "" );
// 길드맴버 탭.
//m_pTabControl->SetDisableTab( GUILDTAB_TYPE::GUILDTAB_MEMBER );
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->Disable();
// 길드신청자 탭.
//m_pTabControl->SetDisableTab( GUILDTAB_TYPE::GUILDTAB_APPLICANT );
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_APPLICANT ]->Disable();
// 권한처리.
AuthorityProcess();
// 2010.12.07. bintitle. 자신의정보 축소시킴.
m_bExtendLocal = true;
ExtendOwnState();
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, false ) ); // 2010.12.07. bintitle.
}
//----------------------------
// 길드 존재
else
{
m_bGuild = true; // 길드가입여부.
int nAuthority = 0;
SPlayerSlot * pPlayerSlot = this->m_GuildMgr.FindMember( player.GetName() );
//-----------------------------
// 플레이어가 길드맴버로 갱신되기 이전에 화면갱신이 이루어지는 경우에 길드명과 공지가 갱신이 되지않아
// 길드맴버에 나(플레이어) 가 없어도 출력하도록 위치를 이동. 2010.12.10. bintitle.
// 길드명.
if( ( nRefresh & GUILD_UPDATE::GUILD_UPDATE_GINFO ) || /// 2010.12.14 or 연산 수정 - prodongi
( nRefresh & GUILD_UPDATE::GUILD_UPDATE_CHANGE_GUILD_NAME )
)
{
m_pControlGuildName->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><hcenter><vcenter>%s", m_pControlGuildName->GetFontSize(), m_GuildMgr.GetGuildName() ).c_str() );
m_pControlGuildName->CutCaptionNTooltip();
}
//
// 길드공지 컨트롤.
if( ( nRefresh & GUILD_UPDATE::GUILD_UPDATE_GINFO ) || /// 2010.12.14 or 연산 수정 - prodongi
( nRefresh & GUILD_UPDATE::GUILD_UPDATE_NOTICE )
)
{
std::string strNotice( m_GuildMgr.GetGuildNotice() );
m_pControlNotice->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><#4d4d4d><hcenter><left>%s", m_pControlNotice->GetFontSize(), strNotice.c_str() ).c_str() );
m_pControlNotice->CutCaptionNTooltip();
}
//-----------------------------
if( pPlayerSlot )
{
EnableBtnCtrl( "button_guild_data_01" ); // 길드정보 버튼.
EnableBtnCtrl( "button_guild_manage_01" ); // 길드관리 버튼.
EnableBtnCtrl( "button_guild_master_01" ); // 길드마스터 버튼.
EnableBtnCtrl( "button_fold_01" ); // 확장 버튼.
//m_pTabControl->SetEnableTab( GUILDTAB_TYPE::GUILDTAB_APPLICANT ); // 길드신청자 탭.
//if( m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_APPLICANT ]->IsDisable() )
// m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_APPLICANT ]->Enable();
/// 2010.12.17 길마만 버튼 활성화- prodongi
if (7 != pPlayerSlot->GetAuthority())
DisableBtnCtrl("button_guild_master_01");
if( m_bFirstOpen || ::_stricmp( m_pNoticePictogram->GetAniName(), "common_mark_titanium_guild_notice" ) )
m_pNoticePictogram->SetAniName( "common_mark_titanium_guild_notice" ); // 메모픽토그램.
// 길드맴버 탭.
//m_pTabControl->SetEnableTab( GUILDTAB_TYPE::GUILDTAB_MEMBER );
if( m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->IsDisable() )
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->Enable();
// 접속 컨트롤.
if( m_bFirstOpen || ::_stricmp( m_pControlConnect->GetAniName(), "common_mark_titanium_online" ) )
{
m_pControlConnect->SetAniName( "common_mark_titanium_online" );
}
// 직업 컨트롤.
m_pControlJob->SetAniName( GetJobDB().GetJobIconName( pPlayerSlot->GetJobID() ) );
// Level 컨트롤
m_pControlLv->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><hcenter><vcenter>%d", m_pControlLv->GetFontSize(), pPlayerSlot->GetLevel() ).c_str() );
// 아이디 컨트롤
std::string strCutName( player.GetName() );
//CuttingText( m_pControlID, strCutName, "font_02", m_pControlID->GetFontSize() );
m_pControlID->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><hcenter><vcenter>%s", m_pControlID->GetFontSize(), strCutName.c_str() ).c_str() );
m_pControlID->CutCaptionNTooltip();
KUIControl * pControl = NULL;
// 메모텍스트
if( nRefresh & GUILD_UPDATE::GUILD_UPDATE_MEMO )
{
pControl = m_ArrOwnGuildStateControl[ 8 ];
std::string strMemo = pPlayerSlot->GetGuildMemo();
if( strMemo.size() < 1 && ( strMemo == "" ) )
m_bMemoText = false;
else
m_bMemoText = true;
//CuttingText( pControl, strMemo, "font_02", pControl->GetFontSize() );
pControl->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><#4d4d4d><hcenter><left>%s", pControl->GetFontSize(), strMemo.c_str() ).c_str() );
pControl->CutCaptionNTooltip();
}
//----------------------------
// 권한 처리.
nAuthority = pPlayerSlot->GetAuthority(); // 등급.
pControl = m_ArrOwnGuildStateControl[ 5 ]; // 등급icon 컨트롤.
if( m_beforeAuthority != nAuthority ) // 등급이 변경됐을때. bintitle.2010.11.26.
{
int nClass = nAuthority;
if( nClass != _PERMISSION::PERMISSION_LEADER )
nClass = _PERMISSION::PERMISSION_LEADER - nClass;
std::string strClassAni = CStringUtil::StringFormat( "common_mark_titanium_guild_class_0%d", nClass );
if( m_bFirstOpen || pControl->GetAniName() != strClassAni )
{
dynamicCast< KUIControlStatic * >( pControl )->SetAniName( strClassAni.c_str() );
}
// 등급명.
// -1 하는 이유 : 등급은 1부터시작, 클래스명배열은 0부터 시작. 따라서 -1로 맞춰줌.
pControl = m_ArrOwnGuildStateControl[ 6 ];
if( nAuthority == 7 )
pControl->SetCaption( CStringUtil::StringFormat("<font:font_02><size:%d><#955c5c><hcenter><left>%s", pControl->GetFontSize(), S(3508) ).c_str() );
else
{
const char * pStr = this->m_GuildMgr.GetAuthorityClassName( ( nAuthority - 1 ) );
if( pStr )
pControl->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><#955c5c><hcenter><left>%s", pControl->GetFontSize(), pStr ).c_str() );
}
pControl->CutCaptionNTooltip();
// 권한처리.
if( (nRefresh & GUILD_UPDATE_GPERMISSION) || /// 2010.12.14 or 연산 수정 - prodongi
(nRefresh & GUILD_UPDATE_CHANGE_PERMISSION) ||
(nRefresh & GUILD_UPDATE_CHANGE_PERMISSION_NAME) ||
(nRefresh & GUILD_UPDATE_PROMOTE) )
{
AuthorityProcess();
}
}
//----------------------------
//// 권한처리.
//AuthorityProcess();
// Grade
if( ( nRefresh & GUILD_UPDATE::GUILD_UPDATE_GINFO ) ||
( nRefresh & GUILD_UPDATE::GUILD_UPDATE_DONATION ) )
{
int nGuildeGrade = m_GuildMgr.GetGuildGrade();
std::string stdGrade( SR( 759, "#@value@#", nGuildeGrade ) );
m_pControlGrade->SetCaption( CStringUtil::StringFormat( "<font:font_01><size:%d><hcenter><vcenter><left>%s", m_pControlGrade->GetFontSize(), stdGrade.c_str() ).c_str() );
}
// Current
int nLoginCount = m_GuildMgr.GetLoginMemberCount();
int nMemberCount = m_GuildMgr.GetMemberCount();
if( m_beforeGuildMemberCount != nMemberCount ||
m_beforeGuildMemberLoginCount != nLoginCount )
{
std::string stdCurrent( SR( 893, "#@value@#", CStringUtil::StringFormat( "%d / %d", nLoginCount, nMemberCount ).c_str() ) );
m_pControlCurrent->SetCaption( CStringUtil::StringFormat( "<font:font_01><size:%d><hcenter><vcenter><right>%s", m_pControlCurrent->GetFontSize(), stdCurrent.c_str() ).c_str() );
m_beforeGuildMemberCount = nMemberCount;
m_beforeGuildMemberLoginCount = nLoginCount;
}
}
// 2010.06.10. Epic7 Part1 에서는 사용하지 않으므로 비활성처리. < 길드신청자 탭 >
// m_pTabControl->SetDisableTab( GUILDTAB_TYPE::GUILDTAB_APPLICANT );
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_APPLICANT ]->Disable();
}
// 접속률 라인컨트롤.
//RefreshLineControl();
//-----------------------
// Tab Wnd Update.
UpdateTabWnd();
// 단한번만...
if( m_bFirstOpen )
m_bFirstOpen = false;
}
// Tab Wnd Update.
void SUIGuildWnd::UpdateTabWnd()
{
for( int i=0; i<GUILDTAB_TYPE::GUILDTAB_MAX; ++i )
m_ArrTabWnd[ i ]->ForcedProcess( 0 );
}
// 자신의 길드정보 컨트롤 확장.
void SUIGuildWnd::ExtendOwnState()
{
if( m_BaseControl )
{
KRect rt = m_BaseControl->GetRect();
// 원본크기로 축소함.
if( m_bExtendLocal )
{
rt.bottom = rt.top + m_nSrcHeightLocal;
m_BaseControl->Resize( rt );
}
// 확장시킴.
else
{
rt.bottom = rt.top + rt.GetHeight() * 2;
m_BaseControl->Resize( rt );
}
m_bExtendLocal ^= true; // 확장여부 토글.
// 버튼이미지 변경.
dynamicCast< KUIControlSimpleButton * >( m_ArrOwnGuildStateControl[ 4 ] )->SetAniName(
m_bExtendLocal ? "common_button_titanium_fold" : "common_button_titanium_unfold" );
// 길드정보 컨트롤의 보임, 숨김처리.
SetShowGuildState();
}
}
// 길드정보 컨트롤의 보임, 숨김처리.
void SUIGuildWnd::SetShowGuildState()
{
KRect rt = m_BaseControl->GetRect();
//
// Base Control의 영역안에 포함되는 컨트롤들만 보임.
int size = m_ArrOwnGuildStateControl.size();
for( int i=0; i<size; i++ )
{
if( rt.IsIntersect( m_ArrOwnGuildStateControl[ i ]->GetRect() ) )
m_ArrOwnGuildStateControl[ i ]->SetShow( true );
else
m_ArrOwnGuildStateControl[ i ]->SetShow( false );
}
}
// 관리모드적용.
void SUIGuildWnd::ManageMode()
{
if( m_bManageMode )
{
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->SetAniName( "common_button_tab_beamblue_red" );
}
else
{
m_arrTabButton[ GUILDTAB_TYPE::GUILDTAB_MEMBER ]->SetAniName( "common_button_tab_beamblue_cyan" );
}
}