1290 lines
43 KiB
C++
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" );
|
|
}
|
|
} |