1167 lines
40 KiB
C++
1167 lines
40 KiB
C++
|
|
#include "stdafx.h"
|
|
// 2011.09.02 - servantes
|
|
#include <toolkit/bits_scramble.h>
|
|
#include "KUITextureManager.h"
|
|
#include "KDeviceManager.h"
|
|
#include "KUIControlQJTV.h"
|
|
#include <kfile/KFileManager.h>
|
|
#include "KResourceDX.h"
|
|
#include "KTGA_IO.h"
|
|
#include "KUIControlStatic.h"
|
|
#include "KUIControlScroll.h"
|
|
#include "SMonsterDB.h"
|
|
#include "SUIDisplayInfo.h"
|
|
#include "SGameManager.h"
|
|
#include "SUIDungeonStoneExWnd.h"
|
|
//#include "SGameMessageUI.h"
|
|
#include "SGameMessage.h"
|
|
#include "KUIControlList.h"
|
|
#include "KUIControlListItem.h"
|
|
#include "SStringDB.h"
|
|
#include "SDungeonResourceDB.h"
|
|
#include <toolkit/nsl.h>
|
|
////#include "Util.h"
|
|
#include <toolkit/nsluni.h>
|
|
#include <toolkit/XEnv.h>
|
|
#include "SNpcResourceDB.h"
|
|
#include "KUIControlButton.h"
|
|
#include "SGameInterface.h"
|
|
#include <toolkit/XStringUtil.h>
|
|
|
|
// 2011.09.02 - servantes
|
|
namespace
|
|
{
|
|
const int nCardImgWidth = 177;
|
|
const int nCardImgHeight = 97;
|
|
};
|
|
|
|
extern void SetCopy( char * pSrc, const int nSrcStride, char * pDst, const int nDstStride, const int nWidth, const int nHeight );
|
|
extern void MsgSplit( const char* szMsg, std::vector<std::string>& vecText, const wchar_t* lpDelimiter, bool bProcSpecialCharacter=false );
|
|
|
|
SUIDungeonStoneWnd::~SUIDungeonStoneWnd()
|
|
{
|
|
|
|
}
|
|
|
|
bool SUIDungeonStoneWnd::InitControls( KPoint kPos )
|
|
{
|
|
SetCustomMovingRect( KRect( 0, 0, m_rcRegion.GetWidth(), 20 ) );
|
|
|
|
// 2011.09.02 - servantes
|
|
/*
|
|
KUIControIStringList* pList = (KUIControIStringList*)(GetChild("list"));
|
|
if( pList )
|
|
{
|
|
pList->SetItemShowCnt(3);
|
|
pList->SetScroll(true);
|
|
}
|
|
*/
|
|
|
|
// 2011.09.02 - servantes
|
|
m_strIllustImg = "game_panel_image_dungeon_01.jpg";
|
|
|
|
int nExpX, nExpY;
|
|
K3DRenderDevice::GetSquareSize( nCardImgWidth, nCardImgHeight, nExpX, nExpY );
|
|
|
|
if( KUITextureManager::GetHWType() == KUITextureManager::HW_SUPPORT )
|
|
{
|
|
m_spTexture = KDeviceManager::GetDeviceManager()->GetRenderDevice()->CreateTexture( nExpX, nExpY, KUSAGE_DYNAMIC, K3DFMT_A8R8G8B8, D3DPOOL_DEFAULT );
|
|
}
|
|
else
|
|
{
|
|
//Intel Chip 계열에서 지원 안 되는 넘들이 있음.
|
|
m_spTexture = KDeviceManager::GetDeviceManager()->GetRenderDevice()->CreateTexture( nExpX, nExpY, K3DFMT_A8R8G8B8, D3DPOOL_MANAGED );
|
|
}
|
|
|
|
KUIControlDynamicTexture* pWndDynamicTex = dynamicCast<KUIControlDynamicTexture*>(GetChild( "back_image_dungeon_01" ));
|
|
if( pWndDynamicTex )
|
|
pWndDynamicTex->SetRenderTarget( m_spTexture, nCardImgWidth, nCardImgHeight );
|
|
|
|
refreshInitImg();
|
|
refreshCardImg();
|
|
|
|
|
|
m_pSlot_select = (KUIControlStatic*)(GetChild( "line_special_01" )); // 2011.09.09 - servantes : 1번 슬롯 표시
|
|
m_pSlot_leader_mark = (KUIControlStatic*)(GetChild( "mark_special_01" )); // 2011.09.09 - servantes : 리더마크
|
|
|
|
visible_staticcontrol("image_bg_01", true);
|
|
visible_staticcontrol("back_inframe01", true);
|
|
visible_staticcontrol("back_linframe02", true);
|
|
visible_staticcontrol("line_select", false);
|
|
// visible_staticcontrol("back_inframe03", true);
|
|
|
|
insert_dungeon_info_help_title(); // 2011.09.07 - servantes
|
|
insert_dungeon_info_title(); // 2011.09.07 - servantes
|
|
insert_dungeon_title(3502); // dungeon title
|
|
insert_seize_member_count(0);
|
|
insert_raid_member_count(0);
|
|
insert_own_guild("");
|
|
insert_guild_boss_name("");
|
|
insert_raid_situation_title(); // 2011.09.15 - servantes
|
|
insert_raid_help_title();
|
|
insert_raid_help2_title();
|
|
|
|
int id=22, id2=3;
|
|
for(int x=0; x<PART_SLOT_COUNT; x++)
|
|
{
|
|
char name[64]; sprintf(name, "list_raid_frame_%02d", x+1);
|
|
m_pSlot_bg [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_rank_%02d", x+1);
|
|
m_pSlot_number_title [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_guildname_%02d", x+1);
|
|
m_pSlot_guildName [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_time_text_%02d", x+1);
|
|
m_pSlot_timeAttack_title [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_time_%02d", x+1);
|
|
m_pSlot_timeAttack [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_master_text_%02d", x+1);
|
|
m_pSlot_guildBossName_title [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_master_%02d", x+1);
|
|
m_pSlot_guildBossName [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_member_text_%02d", x+1);
|
|
m_pSlot_guildMemberCount_title[x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
sprintf(name, "list_raid_member_%02d", x+1);
|
|
m_pSlot_guildMemberCount [x] = (KUIControlStatic*)(GetChild( name ));
|
|
|
|
raid_slot_visible(x, false); // 2011.09.09 - servantes : 보이지 않도록 초기화
|
|
}
|
|
|
|
m_pScrollBar = dynamicCast<KUIControlScrollBase*>(GetChild( "scrollbar_list_01" ));
|
|
if(m_pScrollBar)
|
|
m_pScrollBar->SetScrollRange(PART_SLOT_COUNT, PART_SLOT_COUNT);
|
|
|
|
// test code
|
|
// raid_slot_active(2);
|
|
/*
|
|
m_vecRaidList.push_back( Raid("길드1","길드장1",1,1,100) );
|
|
m_vecRaidList.push_back( Raid("길드2","길드장2",2,2,0) );
|
|
m_vecRaidList.push_back( Raid("길드3","길드장3",3,3,3000) );
|
|
m_vecRaidList.push_back( Raid("길드4","길드장4",4,4,0) );
|
|
m_vecRaidList.push_back( Raid("길드5","길드장5",5,5,0) );
|
|
m_vecRaidList.push_back( Raid("길드6","길드장6",6,6,2345) );
|
|
m_vecRaidList.push_back( Raid("길드6","길드장7",7,7,2345) );
|
|
m_vecRaidList.push_back( Raid("길드6","길드장8",8,8,2345) );
|
|
m_vecRaidList.push_back( Raid("길드6","길드장9",9,9,2345) );
|
|
m_vecRaidList.push_back( Raid("길드6","길드장10",10,10,2345) );
|
|
m_pScrollBar->SetScrollRange(4, m_vecRaidList.size());
|
|
raid_slot_active(4);
|
|
|
|
raid_slot_insert_info(0, &m_vecRaidList[0]);
|
|
raid_slot_insert_info(1, &m_vecRaidList[1]);
|
|
raid_slot_insert_info(2, &m_vecRaidList[2]);
|
|
raid_slot_insert_info(3, &m_vecRaidList[3]);
|
|
*/
|
|
|
|
/// 2011.10.12 - prodongi
|
|
KUIControlSimpleButton* wndOk = dynamicCast<KUIControlSimpleButton*>(GetChild("button_ok"));
|
|
if (wndOk)
|
|
{
|
|
wndOk->SetEnableColor("<#ffffff>");
|
|
wndOk->SetDisableColor("<#a0a0a0>");
|
|
}
|
|
KUIControlSimpleButton* wndCancel = dynamicCast<KUIControlSimpleButton*>(GetChild("button_cancel"));
|
|
if (wndCancel)
|
|
{
|
|
wndCancel->SetEnableColor("<#ffffff>");
|
|
wndCancel->SetDisableColor("<#a0a0a0>");
|
|
}
|
|
|
|
return SUIWnd::InitControls( kPos );
|
|
}
|
|
|
|
// 2011.09.02 - servantes
|
|
void SUIDungeonStoneWnd::refreshInitImg()
|
|
{
|
|
//소프트웨어 락
|
|
char* pDstBuf = NULL;
|
|
int nDstStride;
|
|
|
|
if( m_spTexture == NULL ) return;
|
|
|
|
m_spTexture->LockRect( NULL, (void**)&pDstBuf, nDstStride );
|
|
if( pDstBuf == NULL )
|
|
{
|
|
assert( 0 && "Texture Pool Lock Failed!!!" );
|
|
return;
|
|
}
|
|
|
|
int nWidth = m_spTexture->GetWidth();
|
|
int nHeight = m_spTexture->GetHeight();
|
|
|
|
KColor* pColor;
|
|
for(UINT y = 0; y < nHeight; y++ )
|
|
{
|
|
pColor = ( KColor* )pDstBuf;
|
|
for( UINT x = 0; x < nWidth; x++ )
|
|
{
|
|
KColor col;
|
|
col.r = 255; col.g = 255; col.b = 0; col.a = 255;
|
|
pColor[x] = col;
|
|
}
|
|
pDstBuf += nDstStride;
|
|
}
|
|
|
|
m_spTexture->Unlock();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::refreshCardImg()
|
|
{
|
|
if( m_strIllustImg == "NotFound" ) return;
|
|
|
|
int offset = 0;
|
|
|
|
POINT point;
|
|
point.x = offset;
|
|
point.y = offset;
|
|
|
|
RECT rect;
|
|
rect.left = offset;
|
|
rect.top = offset;
|
|
|
|
KStream *stream = KFileManager::Instance().CreateStreamFromResource( m_strIllustImg.c_str() );
|
|
|
|
//일러스트 없는 크리처
|
|
if( stream == NULL )
|
|
{
|
|
// 크리쳐 일러파일 확장자 변경 tga->jpg
|
|
// 2009-09-19 : hunee
|
|
//stream = KFileManager::Instance().CreateStreamFromResource( "empty_card_red.tga" );
|
|
// 2010.09.08 - prodongi
|
|
//stream = KFileManager::Instance().CreateStreamFromResource( "empty_card_red.jpg" );
|
|
stream = KFileManager::Instance().CreateStreamFromResource( "game_image_card_empty.jpg" );
|
|
}
|
|
|
|
if ( stream == NULL)
|
|
{
|
|
char card[MAX_PATH];
|
|
sprintf(card, "%s", m_strIllustImg.c_str());
|
|
MessageBox(NULL, card, "Creature IllustImg File Not Found", MB_OK);
|
|
return;
|
|
|
|
}
|
|
else
|
|
{
|
|
/// 2010.10.08 카드 이미지에 따라서 배경을 틀리게 해준다 prodongi
|
|
SetChildShow("inframe", false);
|
|
SetChildShow("inframe_gray", false);
|
|
if (0 == m_strIllustImg.compare("game_image_card_empty.jpg")) SetChildShow("inframe_gray", true);
|
|
else SetChildShow("inframe", true);
|
|
|
|
K3DTextureDX * pSrcTex = new K3DTextureDX( (K3DRenderDeviceDX *)KDeviceManager::GetDeviceManager()->GetRenderDevice() );
|
|
pSrcTex->AddRef();
|
|
|
|
if( KUITextureManager::GetHWType() == KUITextureManager::HW_SUPPORT || KUITextureManager::GetHWType() == KUITextureManager::NOT_HW_SUPPORT )
|
|
{
|
|
if( KUITextureManager::GetHWType() == KUITextureManager::HW_SUPPORT )
|
|
{
|
|
pSrcTex->Initialize( *stream, 0, D3DPOOL_SYSTEMMEM, K3DFMT_A8R8G8B8 );
|
|
|
|
rect.right = pSrcTex->GetWidth()-offset;
|
|
rect.bottom = pSrcTex->GetHeight()-offset;
|
|
|
|
if( KDeviceManager::GetDeviceManager()->GetRenderDevice()->UpdateSurface( pSrcTex, &rect, m_spTexture, &point ) != D3D_OK )
|
|
{
|
|
|
|
}
|
|
}
|
|
else if( KUITextureManager::GetHWType() == KUITextureManager::NOT_HW_SUPPORT )
|
|
{
|
|
pSrcTex->Initialize( *stream, 0, D3DPOOL_MANAGED, K3DFMT_A8R8G8B8 );
|
|
|
|
rect.right = pSrcTex->GetWidth()-offset;
|
|
rect.bottom = pSrcTex->GetHeight()-offset;
|
|
|
|
//소프트웨어 락
|
|
char* pDstBuf = NULL;
|
|
char* pSrcBuf = NULL;
|
|
int nSrcStride, nDstStride;
|
|
pSrcTex->LockRect( NULL, (void**)&pSrcBuf, nSrcStride );
|
|
if( pSrcBuf == NULL )
|
|
{
|
|
assert( 0 && "Texture Src Lock Failed!!!" );
|
|
return;
|
|
}
|
|
|
|
KRect krect = KRect(point.x, point.y, point.x+rect.right, point.y+rect.bottom);
|
|
|
|
m_spTexture->LockRect( &krect, (void**)&pDstBuf, nDstStride );
|
|
if( pDstBuf == NULL )
|
|
{
|
|
assert( 0 && "Texture Pool Lock Failed!!!" );
|
|
return;
|
|
}
|
|
|
|
SetCopy( pSrcBuf, nSrcStride, pDstBuf, nDstStride, rect.right, rect.bottom );
|
|
|
|
pSrcTex->Unlock();
|
|
m_spTexture->Unlock();
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
}
|
|
else if( KUITextureManager::GetHWType() == KUITextureManager::NOTPOW_SUPPORT )
|
|
{
|
|
_TEX_SRC_INFO _src_info;
|
|
//TGA 직접 로딩 방법------------------------------------------------------
|
|
if( TGAReadImage( stream, &_src_info.nWidth, &_src_info.nHeight, &_src_info.nBitDepth, &_src_info.pSrcTexel ) )
|
|
{
|
|
rect.right = _src_info.nWidth-offset;
|
|
rect.bottom = _src_info.nHeight-offset;
|
|
|
|
//소프트웨어 락
|
|
char* pDstBuf = NULL;
|
|
char* pSrcBuf = NULL;
|
|
|
|
int nDepth = (_src_info.nBitDepth/8);
|
|
|
|
int nSrcStride, nDstStride;
|
|
nSrcStride = _src_info.nWidth * nDepth;
|
|
pSrcBuf = (char*)_src_info.pSrcTexel;
|
|
|
|
KRect krect = KRect(point.x, point.y, point.x+rect.right, point.y+rect.bottom);
|
|
|
|
m_spTexture->LockRect( &krect, (void**)&pDstBuf, nDstStride );
|
|
if( pDstBuf == NULL )
|
|
{
|
|
assert( 0 && "Texture Pool Lock Failed!!!" );
|
|
return;
|
|
}
|
|
|
|
if( nDepth == 4 ) //32Bit 지원
|
|
{
|
|
SetCopy( pSrcBuf, nSrcStride, pDstBuf, nDstStride, rect.right, rect.bottom );
|
|
}
|
|
|
|
m_spTexture->Unlock();
|
|
}
|
|
}
|
|
|
|
SAFE_RELEASE( pSrcTex );
|
|
KFileManager::Instance().DeleteStream( stream );
|
|
}
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::OnDeviceLost()
|
|
{
|
|
refreshInitImg();
|
|
refreshCardImg();
|
|
|
|
KUIControlDynamicTexture* pWndDynamicTex = dynamicCast<KUIControlDynamicTexture*>(GetChild( "back_image_dungeon_01" ));
|
|
if( pWndDynamicTex )
|
|
pWndDynamicTex->SetRenderTarget( m_spTexture, nCardImgWidth, nCardImgHeight );
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::visible_staticcontrol(const char* ptr_control_name, bool bShow)
|
|
{
|
|
int k=0;
|
|
KUIControlStatic* pStatic = (KUIControlStatic*)(GetChild( ptr_control_name ));
|
|
if(pStatic)
|
|
{
|
|
pStatic->SetShow(bShow);
|
|
}
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_string_staticcontrol(const char* ptr_control_name, const char* ptr_option, const char* ptr_content)
|
|
{
|
|
KUIControlStatic* pText1 = (KUIControlStatic*)(GetChild( ptr_control_name ));
|
|
if(pText1)
|
|
{
|
|
std::string strCaption = ptr_option;
|
|
strCaption += ptr_content;
|
|
pText1->SetCaption(strCaption.c_str());
|
|
}
|
|
}
|
|
|
|
// 던전 정보
|
|
void SUIDungeonStoneWnd::insert_dungeon_info_help_title() // 2011.09.07 - servantes
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("text_manual_01", "<font:font_01><size:8><#626262><left>", GetStringDB().GetString( 9819 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_info_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("titletext_01", "<font:font_01><size:8><#246771><hcenter><left>", GetStringDB().GetString( 1849 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_title(int id_string)
|
|
{
|
|
insert_string_staticcontrol("dungeon_info_text_01", "<font:font_01><size:9><#f7941d><hcenter><vcenter>", GetStringDB().GetString( id_string ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_title(const char* ptr_dungeon_name)
|
|
{
|
|
insert_string_staticcontrol("dungeon_info_text_01", "<font:font_01><size:9><#f7941d><hcenter><vcenter>", ptr_dungeon_name);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_grade_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("dungeon_info_text_02", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 3503 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_grade(int id_level)
|
|
{
|
|
char strGrade[16]={0};
|
|
sprintf(strGrade, "%s", GetDungeonRank(id_level).c_str());
|
|
insert_string_staticcontrol("dungeon_info_text_03", "<font:font_01><size:9><hcenter><vcenter>", strGrade);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_seize_apply_level_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("dungeon_info_text_04", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 9583 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_seize_apply_level(int id_level)
|
|
{
|
|
char strLevel[16]={0};
|
|
sprintf(strLevel, "%s %d", GetStringDB().GetString(9501), id_level);
|
|
insert_string_staticcontrol("dungeon_info_text_05", "<font:font_01><size:9><hcenter><vcenter>", strLevel);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_seize_member_count_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("dungeon_info_text_06", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 3504 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_seize_member_count(int id_member_count)
|
|
{
|
|
std::string playerNum, partyNum;
|
|
|
|
XStringUtil::Format(playerNum, "%d", id_member_count);
|
|
XStringUtil::Format(partyNum, "%d", id_member_count/8);
|
|
|
|
std::string str;
|
|
str = SR(12012, "#@value1@#", playerNum.c_str(), "#@value2@#", partyNum.c_str());
|
|
insert_string_staticcontrol("siege_Participation_text_02", "<font:font_01><size:9><hcenter>", str.c_str());
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_raid_member_count_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("dungeon_info_text_08", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 9564 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_raid_member_count(int id_member_count)
|
|
{
|
|
std::string playerNum, partyNum;
|
|
|
|
XStringUtil::Format(playerNum, "%d", id_member_count);
|
|
XStringUtil::Format(partyNum, "%d", id_member_count/8);
|
|
|
|
std::string str;
|
|
str = SR(12012, "#@value1@#", playerNum.c_str(), "#@value2@#", partyNum.c_str());
|
|
insert_string_staticcontrol("raid_Participation_text_02", "<font:font_01><size:9><hcenter>", str.c_str());
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_tax_rate_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("dungeon_info_text_10", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 9565 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_tax_rate(float rate)
|
|
{
|
|
char strRate[16]={0};
|
|
sprintf(strRate, "%3.3f", rate);
|
|
insert_string_staticcontrol("dungeon_info_text_11", "<font:font_01><size:9><hcenter><vcenter>", strRate);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_boss_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("dungeon_info_text_12", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 9566 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_dungeon_boss(int id_name_boss, int id_name_boss2)
|
|
{
|
|
char const* name;
|
|
|
|
/// 2011.12.15 보스가 없을 때는 빈 공백 출력 - prodongi
|
|
name = (id_name_boss >= 0) ? S(id_name_boss) : "";
|
|
insert_string_staticcontrol("dungeon_info_text_13", "<font:font_01><size:9><hcenter><vcenter>", name);
|
|
name = (id_name_boss2 >= 0) ? S(id_name_boss2) : "";
|
|
insert_string_staticcontrol("dungeon_info_text_14", "<font:font_01><size:9><hcenter><vcenter>", name);
|
|
}
|
|
|
|
// 던전 소유 길드 정보
|
|
void SUIDungeonStoneWnd::insert_own_guild_info_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("titletext_02", "<font:font_01><size:9><hcenter><vcenter>", GetStringDB().GetString( 9569 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_own_guild(const char* ptr_guild_name)
|
|
{
|
|
insert_string_staticcontrol("guild_info_text_02", "<font:font_01><size:9><#f7941d><hcenter><vcenter>", ptr_guild_name);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_guild_boss_name_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("guild_info_text_03", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 1810 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_guild_boss_name(const char* ptr_boss_name)
|
|
{
|
|
insert_string_staticcontrol("guild_info_text_04", "<font:font_01><size:9><hcenter><vcenter>", ptr_boss_name);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_alliance_guild_title(int id_string)
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("guild_info_text_05", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 9567 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_alliance_guild(const char* ptr_guild_name)
|
|
{
|
|
insert_string_staticcontrol("guild_info_text_06", "<font:font_01><size:9><hcenter><vcenter>", ptr_guild_name);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_guild_member_title(int id_string)
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("guild_info_text_07", "<font:font_01><size:9><#626262><hcenter><vcenter>", GetStringDB().GetString( 3509 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_guild_member(int count_member)
|
|
{
|
|
char strCount[16]={0};
|
|
if(count_member == 0)
|
|
sprintf(strCount, " ");
|
|
else
|
|
sprintf(strCount, "%d %s", count_member, S(1853));
|
|
insert_string_staticcontrol("guild_info_text_08", "<font:font_01><size:9><hcenter><vcenter>", strCount);
|
|
}
|
|
|
|
// 레이드 현황
|
|
void SUIDungeonStoneWnd::insert_raid_situation_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("titletext_03", "<font:font_01><size:8><#246771><hcenter><left>", GetStringDB().GetString( 9570 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_raid_help_title()
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("text_manual", "<font:font_01><size:8><#626262><hcenter><right>", GetStringDB().GetString( 9820 ));
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::insert_raid_help2_title() // 2011.09.15 - servantes
|
|
{
|
|
/// 2011.11.15 필요 없는 부분이라서 주석 처리 함 - prodongi
|
|
//insert_string_staticcontrol("text_manual_02", "<font:font_01><size:8><#626262><right>", GetStringDB().GetString( 9821 ));
|
|
}
|
|
|
|
// 레이드 현황 정보
|
|
void SUIDungeonStoneWnd::raid_slot_active(int count_slot)
|
|
{
|
|
/// 2011.12.15 슬롯 개수가 4개로 바뀌었다 - prodongi
|
|
int x = 0;
|
|
for (; x < count_slot; ++x)
|
|
raid_slot_visible(x, true);
|
|
for (; x < PART_SLOT_COUNT; ++x)
|
|
raid_slot_visible(x, false);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::raid_slot_visible(int id_slot, bool bShow)
|
|
{
|
|
if(id_slot < 0 || id_slot > 3)
|
|
return ;
|
|
|
|
m_pSlot_number_title [id_slot]->SetShow(bShow);
|
|
m_pSlot_guildName [id_slot]->SetShow(bShow);
|
|
m_pSlot_timeAttack_title [id_slot]->SetShow(bShow);
|
|
m_pSlot_timeAttack [id_slot]->SetShow(bShow);
|
|
m_pSlot_guildMemberCount_title[id_slot]->SetShow(bShow);
|
|
m_pSlot_guildMemberCount [id_slot]->SetShow(bShow);
|
|
m_pSlot_guildBossName_title [id_slot]->SetShow(bShow);
|
|
m_pSlot_guildBossName [id_slot]->SetShow(bShow);
|
|
m_pSlot_bg [id_slot]->SetShow(bShow);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::raid_slot_insert_info(int id_slot, Raid* ptr_raid_info)
|
|
{
|
|
if(NULL == ptr_raid_info)
|
|
return ;
|
|
if(id_slot < 0 || id_slot > PART_SLOT_COUNT)
|
|
return ;
|
|
|
|
char buf[256]={0};
|
|
std::string strCaption = "<font:font_01><size:9><left>";
|
|
strCaption += ptr_raid_info->strGuildName;
|
|
m_pSlot_guildName[id_slot]->SetCaption(strCaption.c_str());
|
|
|
|
/// 2011.10.13 - prodongi
|
|
int t = ptr_raid_info->nTime/100;
|
|
int s = t%60;
|
|
int m = (t/60)%60;
|
|
int h = t/3600;
|
|
sprintf(buf, "<font:font_01><size:9><#ed145a><right>'%02d:%02d:%02d", h, m, s);
|
|
|
|
m_pSlot_timeAttack[id_slot]->SetCaption(buf);
|
|
|
|
sprintf(buf, "<font:font_01><size:9><hcenter><vcenter>%d %s", ptr_raid_info->nUserCnt, S(1853));
|
|
m_pSlot_guildMemberCount[id_slot]->SetCaption(buf);
|
|
|
|
strCaption = "<font:font_01><size:9><hcenter><vcenter>";
|
|
strCaption += ptr_raid_info->strMasterName;
|
|
m_pSlot_guildBossName[id_slot]->SetCaption(strCaption.c_str());
|
|
}
|
|
|
|
bool SUIDungeonStoneWnd::InitData( bool bReload /*= false*/ )
|
|
{
|
|
return SUIWnd::InitData( bReload );
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::ClearList()
|
|
{
|
|
KUIControIStringList* pList = (KUIControIStringList*)(GetChild("list"));
|
|
if( pList ) pList->ClearItem();
|
|
m_vecRaidList.clear();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::ClearDungeonInfo()
|
|
{
|
|
// 2011.09.09 - servantes
|
|
m_sDungeonInfo.strDungeonName.clear();
|
|
m_sDungeonInfo.nLv = 0;
|
|
m_sDungeonInfo.nSiegeCnt = 0;
|
|
m_sDungeonInfo.nRaidCnt = 0;
|
|
m_sDungeonInfo.strGuild.clear();
|
|
m_sDungeonInfo.strMaster.clear();
|
|
m_sDungeonInfo.bAlliance = false;
|
|
m_sDungeonInfo.UserCnt = 0;
|
|
m_sDungeonInfo.nApplicationCnt = 0;
|
|
|
|
/// 2011.10.12 빠진거 같음 - prodongi
|
|
ClearList();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
|
|
{
|
|
switch( nMessage )
|
|
{
|
|
// 2011.09.02 - servantes
|
|
case KUI_MESSAGE::KSCROLL_SELECT: // 스크롤 선택
|
|
{
|
|
if( ::strcmp(lpszControlID, "scrollbar_list_01") == 0 )
|
|
{
|
|
int nPos = int(lparam);
|
|
nPos = max( nPos, 0 );
|
|
refreshFirstRankMarks(nPos);
|
|
|
|
int x=0, k=0;
|
|
int cnt = m_vecRaidList.size();
|
|
for(x=nPos; x< nPos + PART_SLOT_COUNT; x++, k++)
|
|
{
|
|
if(x >= cnt)
|
|
break;
|
|
|
|
raid_slot_insert_info(k, &m_vecRaidList[x]);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case KUI_MESSAGE::KBUTTON_CLICK:
|
|
{
|
|
if( ::_stricmp( lpszControlID, "button_close" ) == 0 )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_STONE , false) );
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "button_ok" ) == 0 ) //servantes 2010.10.13
|
|
{
|
|
//신청 버튼
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_REQUEST, S(2804), true ) );
|
|
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "button_cancel" ) == 0 ) //servantes 2010.10.13
|
|
{
|
|
//취소 버튼
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_CANCEL, S(2806), true ) );
|
|
}
|
|
/* 2011.10.12 관리 모드는 없음 - prodongi
|
|
else if( ::_stricmp( lpszControlID, "button_manage" ) == 0 ) //servantes 2010.10.13
|
|
{
|
|
//관리 버튼
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_MANAGE, S(3520), true ) );
|
|
}
|
|
*/
|
|
// 2011.09.05 - servantes
|
|
else if( ::_stricmp( lpszControlID, "button_help_01" ) == 0 )
|
|
{
|
|
const KRect & rt = GetChild( "button_help_01" )->GetRect(); // 2011.09.15 - servantes : 도움말 내용 추가
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, false ) ); // 닫기.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, rt.left, rt.top ) ); // 위치전달.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_HELP_TEXT( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, std::string( S( 9822 ) ) ) ); // 텍스트전달.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, true ) ); // 열기.
|
|
}
|
|
else if( ::_stricmp( lpszControlID, "button_help_02" ) == 0 ) // 2011.09.15 - servantes : 도움말 내용 추가
|
|
{
|
|
const KRect & rt = GetChild( "button_help_02" )->GetRect();
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, false ) ); // 닫기.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, rt.left, rt.top ) ); // 위치전달.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_HELP_TEXT( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, std::string( S( 9823 ) ) ) ); // 텍스트전달.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HELP_WND, true ) ); // 열기.
|
|
}
|
|
}
|
|
break;
|
|
case KUI_MESSAGE::KGENWND_MOVE:
|
|
{
|
|
LimitMoveWnd();
|
|
}
|
|
}
|
|
|
|
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::ProcMsgAtStatic( SGameMessage* pMsg )
|
|
{
|
|
switch( pMsg->nType )
|
|
{
|
|
case MSG_NPC_DIALOG:
|
|
{
|
|
SMSG_NPC_DIALOG* pNPCDlgMsg = (SMSG_NPC_DIALOG*)pMsg;
|
|
|
|
ClearDungeonInfo();
|
|
SetDungeonInfo(pNPCDlgMsg);
|
|
SetRaidList(pNPCDlgMsg);
|
|
SetControlButton(pNPCDlgMsg);
|
|
UpdateStoneInfo();
|
|
}
|
|
break;
|
|
case IMSG_UI_DUNGEONSTONE:
|
|
{
|
|
SIMSG_UI_DUNGEONSTONE* pDungeonMsg = (SIMSG_UI_DUNGEONSTONE*)pMsg;
|
|
if( pDungeonMsg->m_nReqType == SIMSG_UI_DUNGEONSTONE::DUNGEONSTONE_REQUEST )
|
|
{
|
|
if( m_strHanDle[0] != " " )
|
|
{
|
|
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG(m_strHanDle[0].c_str()) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_STONE, false ) );
|
|
ClearList();
|
|
|
|
// bintitle 2010.06.14. 레이드신청시, 길드UI - 길드관리 - 공격대결성 UI에 알림.
|
|
this->m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE, "RAID_REQUEST" ) );
|
|
|
|
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_COMPOSE_RAID, 0, -1, S(2805));
|
|
}
|
|
}
|
|
else if( pDungeonMsg->m_nReqType == SIMSG_UI_DUNGEONSTONE::DUNGEONSTONE_CANCEL )
|
|
{
|
|
if( m_strHanDle[1] != " " )
|
|
{
|
|
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG(m_strHanDle[1].c_str()) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_STONE, false ) );
|
|
ClearList();
|
|
}
|
|
}
|
|
/* /// 2011.10.12 관리 모드는 없음 - prodongi
|
|
else if( pDungeonMsg->m_nReqType == SIMSG_UI_DUNGEONSTONE::DUNGEONSTONE_MANAGE )
|
|
{
|
|
if( m_strHanDle[2] != " " )
|
|
{
|
|
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG(m_strHanDle[2].c_str()) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_STONE, false ) );
|
|
ClearList();
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SUIDungeonStoneWnd::GetLocalFlag()
|
|
{
|
|
// sonador 0.2.2 국가별 로컬 비트셋 통합 및 유럽 분리
|
|
return GameRule::GetCurrentLocalBitSet();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::SetDungeonInfo(SMSG_NPC_DIALOG* pNPCDlgMsg)
|
|
{
|
|
if( pNPCDlgMsg == NULL ) return;
|
|
|
|
std::vector<std::string> DungeonStrList;
|
|
GetStringList(DungeonStrList, pNPCDlgMsg->strTitle);
|
|
|
|
int nDungeonNum(0);
|
|
const DungeonResource* pDungeon(NULL);
|
|
|
|
int nSize = DungeonStrList.size();
|
|
if( nSize >=2 )
|
|
{
|
|
// 2011.09.09 - servantes
|
|
m_sDungeonInfo.nDugeonID = ::atoi( DungeonStrList[0].c_str() );
|
|
m_sDungeonInfo.nApplicationCnt = ::atoi( DungeonStrList[1].c_str() );
|
|
setStatus(atoi(DungeonStrList[3].c_str())); /// 2012.01.11 던전 진행 상황 - prodongi
|
|
pDungeon = GetDungeonResDB().GetDungeonRes(m_sDungeonInfo.nDugeonID, GetLocalFlag());
|
|
}
|
|
|
|
if( nSize >= 7 )
|
|
{
|
|
// 2011.09.09 - servantes
|
|
m_sDungeonInfo.nRate = ::atoi(DungeonStrList[2].c_str()); // 2011.09.09 - servantes
|
|
m_sDungeonInfo.strGuild = DungeonStrList[4];
|
|
m_sDungeonInfo.strMaster = DungeonStrList[5];
|
|
m_sDungeonInfo.bAlliance = (::atoi(DungeonStrList[6].c_str()) != 0); // 연합여부
|
|
m_sDungeonInfo.UserCnt = ::atoi(DungeonStrList[7].c_str());
|
|
insert_tax_rate(m_sDungeonInfo.nRate);
|
|
}
|
|
|
|
DungeonStrList.clear();
|
|
|
|
if( pDungeon )
|
|
{
|
|
int nDungeonNameID( GetDungeonResDB().GetDungeonNameID(pDungeon->id) );
|
|
m_sDungeonInfo.strDungeonName = GetStringDB().GetString( nDungeonNameID );
|
|
m_sDungeonInfo.nLv = pDungeon->dungeon_level;
|
|
m_sDungeonInfo.nSiegeCnt = pDungeon->num_party_guild*8 + pDungeon->num_party_mercenary*8;
|
|
m_sDungeonInfo.nRaidCnt = pDungeon->num_party_raid * 8;
|
|
|
|
// 2011.09.05 - servantes
|
|
|
|
// 던전정보
|
|
insert_dungeon_title(nDungeonNameID);
|
|
insert_dungeon_grade(m_sDungeonInfo.nLv);
|
|
insert_seize_apply_level(pDungeon->dungeon_level);
|
|
insert_seize_member_count(m_sDungeonInfo.nSiegeCnt);
|
|
insert_raid_member_count(m_sDungeonInfo.nRaidCnt);
|
|
|
|
const DungeonResource* pDRes = GetDungeonResDB().GetDungeonRes(pDungeon->id, GetLocalFlag());
|
|
if(pDRes)
|
|
{
|
|
ENC_INT mobId = bits_scramble< int, 3 >( pDRes->boss01_id );
|
|
int value = mobId.value();
|
|
|
|
ENC_INT mobId2 = bits_scramble< int, 3 >( pDRes->boss02_id );
|
|
int value2 = mobId2.value();
|
|
|
|
int nMonsterName2 = GetMonsterDB().GetTextID( value2 );
|
|
int nMonsterName = GetMonsterDB().GetTextID( value );
|
|
if( nMonsterName )
|
|
{
|
|
insert_dungeon_boss(nMonsterName, nMonsterName2);
|
|
}
|
|
}
|
|
|
|
//소유길드 정보
|
|
insert_own_guild(m_sDungeonInfo.strGuild.c_str());
|
|
insert_guild_boss_name(m_sDungeonInfo.strMaster.c_str());
|
|
insert_guild_member(m_sDungeonInfo.UserCnt);
|
|
|
|
visible_1st_slot_select(true); // test code
|
|
|
|
// 소유 길드 정보
|
|
// insert_own_guild();
|
|
// insert_guild_boss_name();
|
|
// insert_alliance_guild();
|
|
// insert_guild_member();
|
|
|
|
// 레이드 현황
|
|
}
|
|
|
|
// 2011.09.05 - servantes
|
|
switch(m_sDungeonInfo.nDugeonID)
|
|
{
|
|
case 130000: m_strIllustImg = "game_panel_image_dungeon_03.jpg"; break; //잃어버린 갱도 제 1 탄광
|
|
case 130300: m_strIllustImg = "game_panel_image_dungeon_05.jpg"; break; //제 1 수정 계곡
|
|
case 130600: m_strIllustImg = "game_panel_image_dungeon_04.jpg"; break; //잃어버린 갱도 제 2 탄광
|
|
case 130500: m_strIllustImg = "game_panel_image_dungeon_06.jpg"; break; //제 2 수정 계곡
|
|
case 130400: m_strIllustImg = "game_panel_image_dungeon_01.jpg"; break; //메마른 달빛의 유적 제 1 실
|
|
case 130700: m_strIllustImg = "game_panel_image_dungeon_02.jpg"; break; //메마른 달빛의 유적 제 2 실
|
|
case 130800: m_strIllustImg = "game_panel_image_dungeon_07.jpg"; break; //팔미르 유적 제 1 실
|
|
case 130900: m_strIllustImg = "game_panel_image_dungeon_08.jpg"; break; //팔미르 유적 제 2 실
|
|
case 121000: m_strIllustImg = "game_panel_image_dungeon_10.jpg"; break; //백룡의 쉼터
|
|
case 122000: m_strIllustImg = "game_panel_image_dungeon_11.jpg"; break; //흑룡의 그늘
|
|
case 123000: m_strIllustImg = "game_panel_image_dungeon_12.jpg"; break; //사룡의 심장
|
|
case 120700: m_strIllustImg = "game_panel_image_dungeon_09.jpg"; break; //엘 카시아
|
|
default : m_strIllustImg = "error"; break; // error
|
|
}
|
|
|
|
KUIControlDynamicTexture* pWndDynamicTex = dynamicCast<KUIControlDynamicTexture*>(GetChild( "back_image_dungeon_01" ));
|
|
if( pWndDynamicTex )
|
|
pWndDynamicTex->SetRenderTarget( m_spTexture, nCardImgWidth, nCardImgHeight );
|
|
|
|
refreshInitImg();
|
|
refreshCardImg();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::SetRaidList(SMSG_NPC_DIALOG* pNPCDlgMsg)
|
|
{
|
|
/// 2011.10.13 - prodongi
|
|
if( pNPCDlgMsg == NULL || pNPCDlgMsg->vtTexts.empty() )
|
|
{
|
|
raid_slot_active(0);
|
|
visible_leader_mark(false);
|
|
visible_1st_slot_select(false);
|
|
return;
|
|
}
|
|
|
|
std::vector<std::string> GuildList;
|
|
GetStringList(GuildList, pNPCDlgMsg->vtTexts[0]);
|
|
|
|
int nGuildListSize( GuildList.size() );
|
|
//for( int i=0, j=0; j < m_sDungeonInfo.nApplicationCnt && i < nGuildListSize; i+=7, ++j )
|
|
//{
|
|
// if( 6+i < nGuildListSize )
|
|
// {
|
|
// Raid raid( GuildList[0+i], GuildList[1+i], ::atoi( GuildList[2+i].c_str() ), GuildList[3+i], ::atoi( GuildList[4+i].c_str() ), ::atoi( GuildList[5+i].c_str() ), ::atoi( GuildList[6+i].c_str() ) );
|
|
// m_vecRaidList.push_back( raid );
|
|
// }
|
|
//}
|
|
// 2011.09.02 - servantes
|
|
if(nGuildListSize)
|
|
visible_1st_slot_select(true); // 2011.09.09 - servantes
|
|
|
|
// 2010.06.11. bintitle.
|
|
// 공격대장, 공경대장레벨 제외.
|
|
for( int i=0, j=0; j < m_sDungeonInfo.nApplicationCnt && i < nGuildListSize; i+=5, ++j )
|
|
{
|
|
if( 4+i < nGuildListSize )
|
|
{
|
|
Raid raid( GuildList[0+i], GuildList[1+i], ::atoi( GuildList[2+i].c_str() ), ::atoi( GuildList[3+i].c_str() ), ::atoi( GuildList[4+i].c_str() ) );
|
|
m_vecRaidList.push_back( raid );
|
|
}
|
|
}
|
|
|
|
SortRaidList();
|
|
int showNum = ::min((int)MAX_SHOW_LIST, (int)m_vecRaidList.size());
|
|
raid_slot_active(showNum);
|
|
for (int i = 0; i < showNum; ++i)
|
|
raid_slot_insert_info(i, &m_vecRaidList[i]); // 2011.09.21 servantes : UI 리스트에 내용 추가
|
|
|
|
refreshFirstRankMarks(0);
|
|
GuildList.clear();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::SetControlButton(SMSG_NPC_DIALOG* pNPCDlgMsg)
|
|
{
|
|
for( int i(0); i<pNPCDlgMsg->vtMenus.size(); ++i )
|
|
{
|
|
SMSG_NPC_DIALOG::DLGMENU dlgMenu(pNPCDlgMsg->vtMenus[i].strMenuName.c_str(), pNPCDlgMsg->vtMenus[i].strTrigger.c_str(), pNPCDlgMsg->vtMenus[i].nButtonType);
|
|
if( dlgMenu.strMenuName == "REQUEST")
|
|
{
|
|
m_strHanDle[0] = dlgMenu.strTrigger;
|
|
KUIControl* pButton = dynamicCast<KUIControl*>(GetChild("button_ok"));
|
|
if( pButton )
|
|
{
|
|
if( dlgMenu.strTrigger == " " )
|
|
pButton->Disable();
|
|
else
|
|
pButton->Enable();
|
|
}
|
|
}
|
|
else if( dlgMenu.strMenuName == "CANCEL")
|
|
{
|
|
m_strHanDle[1] = dlgMenu.strTrigger;
|
|
KUIControl* pButton = dynamicCast<KUIControl*>(GetChild("button_cancel"));
|
|
if( pButton )
|
|
{
|
|
if( dlgMenu.strTrigger == " " )
|
|
pButton->Disable();
|
|
else
|
|
pButton->Enable();
|
|
}
|
|
}
|
|
/* 2011.10.12 던전 관리는 없다 - prodongi
|
|
else if( dlgMenu.strMenuName == "MANAGE")
|
|
{
|
|
m_strHanDle[2] = dlgMenu.strTrigger;
|
|
KUIControl* pButton = dynamicCast<KUIControl*>(GetChild("button02"));
|
|
if( pButton )
|
|
{
|
|
if( dlgMenu.strTrigger == " " )
|
|
pButton->Disable();
|
|
else pButton->Enable();
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
/* 2011.10.12 던전 관리는 없다 - prodongi
|
|
//현재는 던선 커스터마이징 미구현
|
|
KUIControl* pButton = dynamicCast<KUIControl*>(GetChild("button02"));
|
|
if( pButton ) pButton->Disable();
|
|
*/
|
|
}
|
|
|
|
std::string SUIDungeonStoneWnd::GetDungeonRank(int nLv)
|
|
{
|
|
if( nLv <= 50 ) return GetStringDB().GetString( 9502 ); // "BASIC";
|
|
else if( nLv <= 70 ) return GetStringDB().GetString( 9503 ); // "COMMON";
|
|
else if( nLv <= 90 ) return GetStringDB().GetString( 9504 ); // "UNCOMMON";
|
|
else if( nLv <= 120 ) return GetStringDB().GetString( 9505 ); // "RARE";
|
|
else return GetStringDB().GetString( 9506 ); // "UNIQUE";
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::SetDungeonInfoCaption(DungeonInfo dungeon)
|
|
{
|
|
// 2011.09.09 - servantes
|
|
insert_dungeon_title(dungeon.strDungeonName.c_str()); // 던전이름
|
|
|
|
insert_dungeon_grade(dungeon.nLv); // 던전 레벨
|
|
|
|
insert_seize_apply_level(dungeon.nLv); // 시즈 신청레벨
|
|
|
|
insert_seize_member_count(dungeon.nSiegeCnt); // 시즈 인원
|
|
insert_raid_member_count(dungeon.nRaidCnt);
|
|
|
|
insert_own_guild(dungeon.strGuild.c_str()); // 길드 이름
|
|
|
|
insert_guild_boss_name(dungeon.strMaster.c_str()); // 길드장 이름
|
|
}
|
|
|
|
std::string SUIDungeonStoneWnd::GetListCaption(Raid raid)
|
|
{
|
|
std::string TempCaption = SR(3516,"#@guild_name@#", raid.strGuildName.c_str(), "#@master_name@#", raid.strMasterName.c_str() );
|
|
TempCaption = SStringDB::ParseString( TempCaption.c_str(), "#@master_lv@#", CStringUtil::StringFormat( "%d", raid.nMasterLv ).c_str() );
|
|
TempCaption = SStringDB::ParseString( TempCaption.c_str(), "#@cnt@#", CStringUtil::StringFormat( "%d", raid.nUserCnt ).c_str() );
|
|
TempCaption = SStringDB::ParseString( TempCaption.c_str(), "#@time@#", GetTimeString( raid.nTime/100.0f ).c_str() );
|
|
return TempCaption;
|
|
}
|
|
|
|
std::string SUIDungeonStoneWnd::GetTimeString( float f_Time )
|
|
{
|
|
std::string strTime;
|
|
|
|
int hour(0);
|
|
int min(0);
|
|
int sec(0);
|
|
|
|
if( f_Time >= 3600 )
|
|
{
|
|
hour = f_Time/3600;
|
|
f_Time -= 3600*hour;
|
|
}
|
|
if( f_Time >= 60 )
|
|
{
|
|
min = f_Time/60;
|
|
f_Time = f_Time -= 60*min;
|
|
}
|
|
sec = f_Time;
|
|
|
|
strTime = CStringUtil::StringFormat( " %02d : %02d : %02d", hour, min, sec );
|
|
|
|
return strTime;
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::UpdateStoneInfo()
|
|
{
|
|
SetDungeonInfoCaption( m_sDungeonInfo );
|
|
|
|
KUIControIStringList* pList = (KUIControIStringList*)(GetChild("list"));
|
|
if( !pList ) return;
|
|
|
|
for( int i(0); i<m_vecRaidList.size(); ++i )
|
|
{
|
|
pList->AddItem( _STRITEM(GetListCaption(m_vecRaidList[i]).c_str()) );
|
|
}
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::SortRaidList()
|
|
{
|
|
struct TRaidLess
|
|
{
|
|
//두인자가 같을 경우 무조건 false가 나오도록 해야한다. 흠 false가 바꾸는 것인데...
|
|
bool operator () ( const Raid& a, const Raid& b )
|
|
{
|
|
if ( a.nTime == 0 )
|
|
return false;
|
|
else if ( b.nTime == 0 )
|
|
return true;
|
|
else return a.nTime < b.nTime;
|
|
}
|
|
} pred;
|
|
|
|
std::sort( m_vecRaidList.begin(), m_vecRaidList.end(), pred );
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::GetStringList( std::vector<std::string>& rStrList, std::string Text )
|
|
{
|
|
std::vector<std::string> vStrList;
|
|
MsgSplit( Text.c_str(), vStrList, L"|" );
|
|
|
|
for( int i(0); i<vStrList.size(); ++i )
|
|
{
|
|
rStrList.push_back( vStrList[i].c_str() );
|
|
}
|
|
vStrList.clear();
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd /*= true*/ )
|
|
{
|
|
if( bOpen )
|
|
m_pGameManager->StartSound( "ui_popup_window01.wav" );
|
|
|
|
SUIWnd::OnNotifyUIWindowOpen( bOpen, bLimitWnd );
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::visible_leader_mark(bool bShow) // 2011.09.09 - servantes : 공대장마크 표시
|
|
{
|
|
m_pSlot_leader_mark->SetShow(bShow);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::visible_1st_slot_select(bool bShow) // 2011.09.09 - servantes : 1번슬롯 표시
|
|
{
|
|
m_pSlot_select->SetShow(bShow);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::refreshFirstRankMarks(int index)
|
|
{
|
|
bool showLeaderMark = false;
|
|
if(0 == index && !m_vecRaidList.empty())
|
|
{
|
|
if (0 != m_vecRaidList[0].nTime)
|
|
showLeaderMark = true;
|
|
}
|
|
|
|
visible_leader_mark(showLeaderMark);
|
|
visible_1st_slot_select(showLeaderMark);
|
|
}
|
|
|
|
void SUIDungeonStoneWnd::setStatus(int status)
|
|
{
|
|
KUIControlStatic* staticRaid = dynamicCast<KUIControlStatic*>(GetChild("dungeon_term_text_raid"));
|
|
KUIControlStatic* staticRest_Before = dynamicCast<KUIControlStatic*>(GetChild("dungeon_term_text_rest"));
|
|
KUIControlStatic* staticSiege = dynamicCast<KUIControlStatic*>(GetChild("dungeon_term_text_siege"));
|
|
KUIControlStatic* staticRest_After = dynamicCast<KUIControlStatic*>(GetChild("dungeon_term_text_rest_01"));
|
|
|
|
/// 진행 상황 텍스트 회색으로
|
|
std::string temp;
|
|
XStringUtil::Format(temp, "<font:font_01><size:9><#545454><b><hcenter>%s", S(9837));
|
|
staticRaid->SetCaption(temp.c_str());
|
|
XStringUtil::Format(temp, "<font:font_01><size:9><#545454><b><hcenter>%s", S(9838));
|
|
staticRest_Before->SetCaption(temp.c_str());
|
|
XStringUtil::Format(temp, "<font:font_01><size:9><#545454><b><hcenter>%s", S(9839));
|
|
staticSiege->SetCaption(temp.c_str());
|
|
XStringUtil::Format(temp, "<font:font_01><size:9><#545454><b><hcenter>%s", S(9838));
|
|
staticRest_After->SetCaption(temp.c_str());
|
|
|
|
char const* aniName = "";
|
|
KUIControlStatic* staticCur = staticRaid;
|
|
int stringId = 0;
|
|
switch (status)
|
|
{
|
|
case STATUS_RAID: aniName = "game_panel_titanium_dungeon_term_raid"; staticCur = staticRaid; stringId = 9837; break;
|
|
case STATUS_REST_BEFORE_SIEGE: aniName = "game_panel_titanium_dungeon_term_rest"; staticCur = staticRest_Before; stringId = 9838; break;
|
|
case STATUS_SIEGE: aniName = "game_panel_titanium_dungeon_term_siege"; staticCur = staticSiege; stringId = 9839; break;
|
|
case STATUS_REST_AFTER_SIEGE: aniName = "game_panel_titanium_dungeon_term_rest"; staticCur = staticRest_After; stringId = 9838; break;
|
|
}
|
|
|
|
XStringUtil::Format(temp, "<font:font_01><size:9><b><hcenter>%s", S(stringId));
|
|
staticCur->SetCaption(temp.c_str());
|
|
|
|
KUIControlStatic* staticStatus = dynamicCast<KUIControlStatic*>(GetChild("dungeon_term_raid"));
|
|
staticStatus->SetBack(c_szDEF_SPR_NAME, aniName);
|
|
} |