Files
2022-10-26 12:25:11 +08:00

1846 lines
52 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "InterfaceManager.h"
#include "uiQuestListDlg/uiQuestListDlg.h"
#include "GlobalFunc.h"
#include "GameConst_Color.h"
#include "Quest.h"
#include "QuestManager_Concrete.h"
#include "uiQuestMan/uiQuestMan.h"
#include "uiQuestListMission/uiQuestListMission.h"
#include "uiLoginMan/uiLoginMan.h"
#include "Hero.h"
#include "ContinentMapDlg.h"
#include "uiRadarMan/uiRadarMan.h"
#ifdef _INTERNATIONAL_UI
#include "uiToolTipMan/uiToolTipMan.h"
#include "Mouse.h"
#endif//_INTERNATIONAL_UI
namespace
{
const DWORD kAllChapterCode = 601; // 전체
};
int __stdcall SimpleXorCryption2( PBYTE in_data, DWORD in_size, PBYTE *out_data, DWORD *out_size )
{
PBYTE tmp = (PBYTE) calloc(1, in_size);
if ( NULL == tmp )
{
_ASSERTE( !"calloc fail" );
return -1;
}
for (DWORD i = 0; i < in_size; ++i)
{
tmp[i] = in_data[i] ^ 0x33;
}
*out_data = tmp;
*out_size = in_size;
return 0;
}
WzID uiQuestListDlg::m_wzID[eDIALOG_QUEST_LIST_MAX] =
{
StrToWzID("B999"),//eDIALOG_QUEST_LIST_EXIT_BTN
#ifdef _SCJ_111202_UI_RENEWAL
StrToWzID("C000"),//eDIALOG_QUEST_LIST_MISSION_BTN
#else
StrToWzID("C001"),//eDIALOG_QUEST_LIST_MISSION_BTN
#endif //_SCJ_111202_UI_RENEWAL
StrToWzID("C002"),//eDIALOG_QUEST_LIST_QUEST_BTN
StrToWzID("BT00"),//eDIALOG_QUEST_LIST_CHAPTER_LIST_BTN
#ifdef _SCJ_111202_UI_RENEWAL
#else
StrToWzID("T201"),//eDIALOG_QUEST_LIST_CHAPTER_STRING
#endif //_SCJ_111202_UI_RENEWAL
StrToWzID("LS00"),//eDIALOG_QUEST_LIST_CHAPTER_LIST
StrToWzID("BT01"),//eDIALOG_QUEST_LIST_DP_TYPE_LIST_BTN
#ifdef _SCJ_111202_UI_RENEWAL
#else
StrToWzID("ST01"),//eDIALOG_QUEST_LIST_DP_TYPE_STRING
#endif //_SCJ_111202_UI_RENEWAL
StrToWzID("LS01"),//eDIALOG_QUEST_LIST_DP_TYPE_LIST
StrToWzID("B000"),//eDIALOG_QUEST_LIST_QUEST_NAME_BT_START = 9,
StrToWzID("B001"),//
StrToWzID("B002"),//
StrToWzID("B003"),//
StrToWzID("B004"),//
StrToWzID("B005"),//
StrToWzID("B006"),//
StrToWzID("B007"),//
StrToWzID("B008"),//
StrToWzID("B009"),//
StrToWzID("B010"),//
StrToWzID("B011"),//
StrToWzID("B012"),//
StrToWzID("B013"),//
StrToWzID("B014"),//
StrToWzID("B015"),//
StrToWzID("B016"),//
StrToWzID("B017"),//eDIALOG_QUEST_LIST_QUEST_NAME_BT_END = 27,
StrToWzID("PI00"),//eDIALOG_QUEST_LIST_QUEST_CHK_PICTURE_START = 28,
StrToWzID("PI01"),//
StrToWzID("PI02"),//
StrToWzID("PI03"),//
StrToWzID("PI04"),//
StrToWzID("PI05"),//
StrToWzID("PI06"),//
StrToWzID("PI07"),//
StrToWzID("PI08"),//
StrToWzID("PI09"),//
StrToWzID("PI10"),//
StrToWzID("PI11"),//
StrToWzID("PI12"),//
StrToWzID("PI13"),//
StrToWzID("PI14"),//
#ifdef _SCJ_111202_UI_RENEWAL
StrToWzID("P038"),//
#else
StrToWzID("PI15"),//
#endif //_SCJ_111202_UI_RENEWAL
StrToWzID("PI16"),//
StrToWzID("PI17"),//
StrToWzID("PI18"),//
StrToWzID("PI19"),//
StrToWzID("PI20"),//
StrToWzID("PI21"),//
StrToWzID("PI22"),//
StrToWzID("PI23"),//
StrToWzID("PI24"),//
StrToWzID("PI25"),//
StrToWzID("PI26"),//
StrToWzID("PI27"),//
StrToWzID("PI28"),//
StrToWzID("PI29"),//
StrToWzID("PI30"),//
StrToWzID("PI31"),//
StrToWzID("PI32"),//
StrToWzID("PI33"),//
StrToWzID("PI34"),//
StrToWzID("PI35"),//
StrToWzID("PI36"),//
StrToWzID("PI37"),//
StrToWzID("PI38"),//
StrToWzID("PI39"),//
StrToWzID("PI40"),//
StrToWzID("PI41"),//
StrToWzID("PI42"),//
StrToWzID("PI43"),//
StrToWzID("PI44"),//
StrToWzID("PI45"),//
StrToWzID("PI46"),//
StrToWzID("PI47"),//
StrToWzID("PI48"),//
StrToWzID("PI49"),//
StrToWzID("PI50"),//
StrToWzID("PI51"),//
StrToWzID("PI52"),//
StrToWzID("PI53"),//
StrToWzID("PI54"),//
StrToWzID("PI55"),//
StrToWzID("PI56"),//
StrToWzID("PI57"),//
StrToWzID("PI58"),//
StrToWzID("PI59"),//
StrToWzID("PI60"),//
StrToWzID("PI61"),//
StrToWzID("PI62"),//
StrToWzID("PI63"),//
StrToWzID("PI64"),//
StrToWzID("PI65"),//
StrToWzID("PI66"),//
StrToWzID("PI67"),//
StrToWzID("PI68"),//
StrToWzID("PI69"),//
StrToWzID("PI70"),//
StrToWzID("PI71"),//eDIALOG_QUEST_LIST_QUEST_CHK_PICTURE_END = 98,
StrToWzID("ST02"),//eDIALOG_QUEST_LIST_QUEST_NUM_STRING = 99,
StrToWzID("VS00"),//eDIALOG_QUEST_LIST_SCROLL = 100,
StrToWzID("BT02"),//eDIALOG_QUEST_LIST_NAVI_BTN_START = 101,
StrToWzID("BT03"),
StrToWzID("BT04"),
StrToWzID("BT05"),
StrToWzID("BT06"),
StrToWzID("BT07"),
StrToWzID("BT08"),
StrToWzID("BT09"),
StrToWzID("BT10"),
StrToWzID("BT11"),
StrToWzID("BT12"),
StrToWzID("BT13"),
StrToWzID("BT14"),
StrToWzID("BT15"),
StrToWzID("BT16"),
StrToWzID("BT17"),
StrToWzID("BT18"),
StrToWzID("BT19"),//eDIALOG_QUEST_LIST_NAVI_BTN_END = 118,
StrToWzID("BT20"),//eDIALOG_QUEST_LIST_CHAPTER_LIST_BTN2 = 119,
StrToWzID("BT21"),//eDIALOG_QUEST_LIST_DP_TYPE_LIST_BTN2 = 120,
#ifdef _SCJ_111202_UI_RENEWAL
StrToWzID("PI99"),
StrToWzID("P000"),
StrToWzID("P003"),
StrToWzID("P005"),
StrToWzID("P007"),
StrToWzID("P010"),
StrToWzID("P011"),
StrToWzID("P012"),
StrToWzID("P013"),
StrToWzID("P014"),
StrToWzID("P015"),
StrToWzID("P016"),
StrToWzID("P017"),
StrToWzID("P018"),
StrToWzID("P019"),
StrToWzID("PI15"),
StrToWzID("P021"),
StrToWzID("P022"),
#endif //_SCJ_111202_UI_RENEWAL
};
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
uiQuestListDlg::uiQuestListDlg(InterfaceManager * pUIMan) : uiBase(pUIMan)
{
//m_bShow = FALSE;
m_bInit = FALSE;
for(int i =0; i < MAX_NAVI_CNT; ++i)
{
m_dwNaviQCode[i] = 0;
}
ZeroMemory(m_szFileName, sizeof(m_szFileName));
ZeroMemory(active_chapter_combocontrol_position_, sizeof(active_chapter_combocontrol_position_));
ZeroMemory(active_display_combocontrol_position_, sizeof(active_display_combocontrol_position_));
last_scrollbar_position_.clear();
open_quest_code_ = 0;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
uiQuestListDlg::~uiQuestListDlg()
{
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
uiQuestMan* uiQuestListDlg::GetManager()
{
uiQuestMan* puiQuestMan =
static_cast<uiQuestMan *>(this->GetUIMan()->GetUserInterfaceManager(UIMAN_QUEST));
assert (puiQuestMan);
return puiQuestMan;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::Init(CDrawBase* pDrawBase)
{
uiBase::Init(pDrawBase);
//m_bShow = FALSE;
SetDlgState(QUEST_CATEGORY_MISSION);
m_iCurChapterIdx = 0;
m_dwChapterCode = 0;
m_iOldSelNaviIdx = 0;
m_eQDpType = eQUEST_DISPLAY_TYPE_PRG;
ZeroMemory(m_szFileName, sizeof(m_szFileName));
ZeroMemory(active_chapter_combocontrol_position_, sizeof(active_chapter_combocontrol_position_));
ZeroMemory(active_display_combocontrol_position_, sizeof(active_display_combocontrol_position_));
last_scrollbar_position_.clear();
//(서브)퀘스트에 한하여 진행 표시로 변경.
// set_active_display_combocontrol_position(QUEST_CATEGORY_QUEST, eQUEST_DISPLAY_TYPE_PRG);
// set_active_display_combocontrol_position(QUEST_CATEGORY_MISSION, eQUEST_DISPLAY_TYPE_PRG);
InitControl();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::LoadNaviQCode()
{
if (NULL == GetManager())
{
return;
}
if ((IsLoaded() == FALSE) && (LoadInterface() == FALSE))
{
return;
}
TCHAR szCharInfo[256] = {0,};
uiLoginMan* loginMan = static_cast<uiLoginMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN));
if (loginMan && g_pHero)
{
Snprintf(szCharInfo, 255, _T("%s-%s"), loginMan->GetID(), g_pHero->GetName());
}
TCHAR szCurDirectory[512+1] = {0,};
GlobalFunc::GetModuleFileNameDirectory( szCurDirectory, 512 );
Snprintf( m_szFileName, 512, _T("%s%s"), szCurDirectory, _T("QN.dat") );
SetFileAttributes( m_szFileName, FILE_ATTRIBUTE_NORMAL );
if (-1 != m_MemoryINI.LoadFromFile( m_szFileName, SimpleXorCryption2 ))
{
TCHAR szIdx[5] = {0,};
LONG lTemp = 0l;
GetManager()->clearViewQuestForProgress();
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
Snprintf(szIdx, 4, _T("%d"), i);
m_MemoryINI.getInteger( szCharInfo, szIdx, &lTemp );
m_dwNaviQCode[i] = (DWORD)lTemp;
GetManager()->AddQuestForProgress( (QCODE)m_dwNaviQCode[i]);
}
}
}
void uiQuestListDlg::SaveNaviQCode()
{
if (FALSE == GENERALPARAM->IsNet())
return;
TCHAR szCharInfo[256] = {0,};
uiLoginMan* loginMan =
static_cast<uiLoginMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN));
if (loginMan && g_pHero)
{
Snprintf(szCharInfo, 255, _T("%s-%s"), loginMan->GetID(), g_pHero->GetName());
}
TCHAR szIdx[5] = {0,};
LONG lTemp = 0l;
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
lTemp = (LONG)m_dwNaviQCode[i];
Snprintf(szIdx, 4, _T("%d"), i);
m_MemoryINI.putInteger( szCharInfo, szIdx, lTemp);
}
if (-1 == m_MemoryINI.SaveToFile( m_szFileName, SimpleXorCryption2 ))
{
assert(!"uiQuestListDlg::m_MemoryINI.SaveToFile");
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::Release()
{
m_vecMainQuest.clear();
m_vecSubQuest.clear();
m_MainQChapterCodes.clear();
m_SubQChapterCodes.clear();
m_vecVisCurChapterQuestIdx.clear();
}
//------------------------------------------------------------------------------
void uiQuestListDlg::Reset()
{
SolarDialog::Reset();
ZeroMemory(active_chapter_combocontrol_position_, sizeof(active_chapter_combocontrol_position_));
ZeroMemory(active_display_combocontrol_position_, sizeof(active_display_combocontrol_position_));
last_scrollbar_position_.clear();
//(서브)퀘스트에 한하여 진행 표시로 변경.
// set_active_display_combocontrol_position(QUEST_CATEGORY_QUEST, eQUEST_DISPLAY_TYPE_PRG);
// set_active_display_combocontrol_position(QUEST_CATEGORY_MISSION, eQUEST_DISPLAY_TYPE_PRG);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::OnUpdateSolarDialog()
{
if (!IsVisible())
{
ShowDialog(FALSE);
}
updateMouseWheel();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::OnRenderSolarDialog()
{
#ifdef _INTERNATIONAL_UI
renderToolTip();
#endif//_INTERNATIONAL_UI
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::Process(DWORD dwTick)
{
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::OnShowWindow(BOOL val)
{
if ( val )
{
bool bCheckState = QUEST_CATEGORY_MISSION == GetDlgState();
m_pCtrlMissionTabBtn->SetCheckState(bCheckState);
m_pCtrlQuestTabBtn->SetCheckState(!bCheckState);
m_pCtrlChapterList->SetCurSel(m_iCurChapterIdx);
m_eQDpType = eQUEST_DISPLAY_TYPE_PRG;
m_pCtrlDPTypeList->ShowWindowWZ(WZ_HIDE);
RefreshQuestList();
SelectChapter(); //ShowWindow시엔 한번 더 호출
int scroll_max_value = QuestListCount(GetDlgState(), m_dwChapterCode, m_eQDpType) - QUEST_NAME_CHK_BT_CNT;
m_pCtrlScroll->SetScrollRangeWZ(0, scroll_max_value);
m_pCtrlScroll->SetScrollPosWZ(last_scrollbar_position(GetDlgState(), m_dwChapterCode, m_eQDpType));
RePosQuestList();
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType=eDoType_Dialog_Quest_List_Dlg;
msg.DoSomething=GlobalFunc::DoQuestListDlg;
g_KeyQueueManager.PushBack(msg);
}
else
{
g_KeyQueueManager.DeleteMsg(eDoType_Dialog_Quest_List_Dlg);
open_quest_code_ = 0;
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::SelectDPType()
{
if (m_pCtrlScroll == NULL || m_pCtrlDPTypeList == NULL)
{
return;
}
int iCurSel = m_pCtrlDPTypeList->GetCurSel();
if (-1 == iCurSel)
{
m_pCtrlDPTypeList->SetCurSel(eQUEST_DISPLAY_TYPE_PRG);
set_active_display_combocontrol_position(QUEST_CATEGORY_MISSION, eQUEST_DISPLAY_TYPE_PRG);
set_active_display_combocontrol_position(QUEST_CATEGORY_QUEST, eQUEST_DISPLAY_TYPE_PRG);
iCurSel = m_pCtrlDPTypeList->GetCurSel();
}
m_eQDpType = (eQUEST_DISPLAY_TYPE)iCurSel;
TCHAR szDPType[INTERFACE_STRING_LENGTH + 1] = {0,};
if (eQUEST_DISPLAY_TYPE_ALL == m_eQDpType)
g_InterfaceManager.GetInterfaceString(601,szDPType); //601 전체
else if (eQUEST_DISPLAY_TYPE_PRG == m_eQDpType)
g_InterfaceManager.GetInterfaceString(1664,szDPType); //1664 진행
else if (eQUEST_DISPLAY_TYPE_END == m_eQDpType)
g_InterfaceManager.GetInterfaceString(859,szDPType); //859 종료
else
{
assert(!"uiQuestListDlg::SelectDPType()");
}
#ifdef _SCJ_111202_UI_RENEWAL
m_pCtrlDPTypeBtn2->SetTextWZ(szDPType);
#else
m_pCtrlDPTypeName->SetTextWZ(szDPType);
#endif //_SCJ_111202_UI_RENEWAL
m_pCtrlDPTypeList->ShowWindowWZ(WZ_HIDE);
set_active_display_combocontrol_position(GetDlgState(), m_eQDpType);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::SelectChapter()
{
if ((m_pCtrlChapterList == NULL) || (m_pCtrlScroll == NULL))
{
return;
}
if (0 == m_pCtrlChapterList->GetListRowCnt())
{
SetQuestCntAndChapterCnt();
if (0 == m_pCtrlChapterList->GetListRowCnt())
return;
}
std::vector<DWORD>* pmapChapterCode = NULL;
if (QUEST_CATEGORY_MISSION == m_eDlgState)
{
pmapChapterCode = &m_MainQChapterCodes;
}
else if (QUEST_CATEGORY_QUEST == m_eDlgState)
{
pmapChapterCode = &m_SubQChapterCodes;
}
else
{
assert(!"uiQuestListDlg::SelectChapter()");
return;
}
int iCurSel = m_pCtrlChapterList->GetCurSel();
if (-1 == iCurSel)
{
m_pCtrlChapterList->SetCurSel(0);
iCurSel = m_pCtrlChapterList->GetCurSel();
}
m_iCurChapterIdx = iCurSel;
std::vector<DWORD>::iterator iter;
if (true == pmapChapterCode->empty())
SetQuestCntAndChapterCnt();
if (true == pmapChapterCode->empty())
{
#ifdef _SCJ_111202_UI_RENEWAL
m_pCtrlChapterBtn2->SetTextWZ("");
#else
m_pCtrlChapterName->SetTextWZ("");
#endif //_SCJ_111202_UI_RENEWAL
}
else
{
iter = pmapChapterCode->begin();
int i = 0;
while(iter != pmapChapterCode->end())
{
if (i != m_iCurChapterIdx)
{
++i;
++iter;
continue;
}
m_dwChapterCode = (*iter);
TCHAR szChapter[INTERFACE_STRING_LENGTH + 1] = {0,};
g_InterfaceManager.GetInterfaceString(m_dwChapterCode, szChapter);
#ifdef _SCJ_111202_UI_RENEWAL
m_pCtrlChapterBtn2->SetTextWZ(szChapter);
#else
m_pCtrlChapterName->SetTextWZ(szChapter);
#endif //_SCJ_111202_UI_RENEWAL
break;
}
}
set_active_chapter_combocontrol_position(GetDlgState(), m_iCurChapterIdx);
m_pCtrlChapterList->ShowWindowWZ(WZ_HIDE);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::MessageProc(SI_MESSAGE * pMessage)
{
POSTYPE pos = getControlIDToPos( pMessage->dwCtrlID );
switch ( pMessage->eResultMsg )
{
case RT_MSG_SB_LINETOP:
case RT_MSG_SB_PAGETOP:
{
if (m_pCtrlScroll)
{
int pos = m_pCtrlScroll->GetScrollPosWZ();
int mmin = 0 , mmax = 0;
m_pCtrlScroll->GetScrollRangeWZ( &mmin, &mmax );
if (pos > mmin)// 현재 입력된 라인수 보다 작으면
{
--pos;//한줄 감소 시키고
m_pCtrlScroll->SetScrollPosWZ(pos);
}
set_last_scrollbar_position(GetDlgState(),
m_dwChapterCode,
m_eQDpType,
m_pCtrlScroll->GetScrollPosWZ());
RePosQuestList();
RefreshNaviBtn();
}
}
break;
case RT_MSG_SB_LINEBOTTOM:
case RT_MSG_SB_PAGEBOTTOM:
{
if (m_pCtrlScroll)
{
int pos = m_pCtrlScroll->GetScrollPosWZ();//현재 스크롤 값을 받아 온다.
int mmin = 0 , mmax = 0;
m_pCtrlScroll->GetScrollRangeWZ( &mmin, &mmax );//스크롤 값의 최대 최소를 얻어 온다.
if (pos < mmax)// 맥스값 보다 작으면
{
++pos;//한줄 증가 시키고
m_pCtrlScroll->SetScrollPosWZ(pos);
}
set_last_scrollbar_position(GetDlgState(),
m_dwChapterCode,
m_eQDpType,
m_pCtrlScroll->GetScrollPosWZ());
RePosQuestList();
RefreshNaviBtn();
}
}
break;
case RT_MSG_SB_THUMBTRACK: //. 썸을 드래그 하고 있다.
case RT_MSG_SB_THUMBPOSITION: //. 썸을 드래그한후 마우스를 놓았다.
case RT_MSG_SB_ENDSCROLL: //. 스크롤이 종료 되었다.
{
set_last_scrollbar_position(GetDlgState(),
m_dwChapterCode,
m_eQDpType,
m_pCtrlScroll->GetScrollPosWZ());
RePosQuestList();
RefreshNaviBtn();
}
break;
case RT_MSG_LBUTTONCLICK:
{
switch ( pos )
{
case eDIALOG_QUEST_LIST_MISSION_BTN:
{
m_pCtrlMissionTabBtn->SetCheckState(true);
m_pCtrlQuestTabBtn->SetCheckState(false);
m_pCtrlChapterList->SetCurSel(0);
m_pCtrlChapterList->SetCurSel(active_chapter_combocontrol_position(QUEST_CATEGORY_MISSION));
m_pCtrlDPTypeList->SetCurSel(active_display_combocontrol_position(QUEST_CATEGORY_MISSION));
m_pCtrlDPTypeList->ShowWindowWZ(WZ_HIDE);
SetDlgState(QUEST_CATEGORY_MISSION);
RefreshQuestList();
}
break;
case eDIALOG_QUEST_LIST_QUEST_BTN:
{
m_pCtrlMissionTabBtn->SetCheckState(false);
m_pCtrlQuestTabBtn->SetCheckState(true);
m_pCtrlChapterList->SetCurSel(0);
m_pCtrlChapterList->SetCurSel(active_chapter_combocontrol_position(QUEST_CATEGORY_QUEST));
m_pCtrlDPTypeList->SetCurSel(active_display_combocontrol_position(QUEST_CATEGORY_QUEST));
m_pCtrlDPTypeList->ShowWindowWZ(WZ_HIDE);
SetDlgState(QUEST_CATEGORY_QUEST);
RefreshQuestList();
}
break;
case eDIALOG_QUEST_LIST_CHAPTER_LIST:
{
SelectChapter();
int scroll_max_value = QuestListCount(GetDlgState(), m_dwChapterCode, m_eQDpType) - QUEST_NAME_CHK_BT_CNT;
m_pCtrlScroll->SetScrollRangeWZ(0, scroll_max_value);
m_pCtrlScroll->SetScrollPosWZ(last_scrollbar_position(GetDlgState(), m_dwChapterCode, m_eQDpType));
RePosQuestList();
RefreshNaviBtn();
}
break;
case eDIALOG_QUEST_LIST_DP_TYPE_LIST:
{
SelectDPType();
int scroll_max_value = QuestListCount(GetDlgState(), m_dwChapterCode, m_eQDpType) - QUEST_NAME_CHK_BT_CNT;
m_pCtrlScroll->SetScrollRangeWZ(0, scroll_max_value);
m_pCtrlScroll->SetScrollPosWZ(last_scrollbar_position(GetDlgState(), m_dwChapterCode, m_eQDpType));
RePosQuestList();
RefreshNaviBtn();
}
break;
case eDIALOG_QUEST_LIST_EXIT_BTN:
{
ShowInterfaceWithSound(FALSE);
}
break;
case eDIALOG_QUEST_LIST_CHAPTER_LIST_BTN:
case eDIALOG_QUEST_LIST_CHAPTER_LIST_BTN2:
{
if (WZ_SHOW == m_pCtrlChapterList->GetState())
m_pCtrlChapterList->ShowWindowWZ(WZ_HIDE);
else
m_pCtrlChapterList->ShowWindowWZ(WZ_SHOW);
}
break;
case eDIALOG_QUEST_LIST_DP_TYPE_LIST_BTN:
case eDIALOG_QUEST_LIST_DP_TYPE_LIST_BTN2:
{
if (WZ_SHOW == m_pCtrlDPTypeList->GetState())
m_pCtrlDPTypeList->ShowWindowWZ(WZ_HIDE);
else
m_pCtrlDPTypeList->ShowWindowWZ(WZ_SHOW);
}
break;
default:
{
if (pos >= eDIALOG_QUEST_LIST_QUEST_NAME_BT_START && pos <= eDIALOG_QUEST_LIST_QUEST_NAME_BT_END)
{
int iIdx = pos - eDIALOG_QUEST_LIST_QUEST_NAME_BT_START;
std::vector<DWORD>* pvecQ = NULL;
if (QUEST_CATEGORY_MISSION == m_eDlgState)
{
pvecQ = &m_vecMainQuest;
}
else if (QUEST_CATEGORY_QUEST == m_eDlgState)
{
pvecQ = &m_vecSubQuest;
}
else
{
assert(!"uiQuestListDlg::MessageProc");
return;
}
OpenQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[iIdx]]);
/*Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[iIdx]]);
if (NULL == pQ)
{
pQ = g_pQMGR_Temp->FindQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[iIdx]]);
if (NULL == pQ)
{
assert(!"void uiQuestListDlg::MessageProc");
return;
}
}
uiQuestListMission* pDlg = GET_CAST_DIALOG(uiQuestListMission, IM_QUEST_MANAGER::QUEST_LIST_MISSION);
if (NULL == pDlg)
break;
pDlg->SetCurQuest(pQ);
//if (FALSE == pDlg->IsVisible())
{
pDlg->ShowInterface(TRUE);
}*/
}
else if (pos >= eDIALOG_QUEST_LIST_NAVI_BTN_START && pos <= eDIALOG_QUEST_LIST_NAVI_BTN_END)
{
SetNaviBtn(pos);
}
}
}
}
break;
default:
{
#ifdef _INTERNATIONAL_UI
SolarDialog::MessageProc( pMessage );
#endif//_INTERNATIONAL_UI
}
break;
}
}
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::OpenQuest(QCODE quest_code)
{
Quest* pQ = g_pQMGR_Real->FindQuest(quest_code);
if (NULL == pQ)
{
pQ = g_pQMGR_Temp->FindQuest(quest_code);
if (NULL == pQ)
{
assert(!"void uiQuestListDlg::MessageProc");
return;
}
}
uiQuestListMission* pDlg = GET_CAST_DIALOG(uiQuestListMission, IM_QUEST_MANAGER::QUEST_LIST_MISSION);
if (NULL == pDlg)
{
return;
}
pDlg->SetCurQuest(pQ);
if (FALSE == pDlg->IsVisible() || open_quest_code_ != quest_code)
{
pDlg->ShowInterface(TRUE);
}
else
{
pDlg->ShowInterface(FALSE);
}
open_quest_code_ = quest_code;
}
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::SetNaviQuest(Quest* pQ)
{
if (NULL == pQ)
{
assert(!"uiQuestListDlg::SetNaviBtn::NULL == pQ");
return;
}
if (NULL == GetManager())
return;
//같은 퀘스트 코드가 NaviQCodes에 있는지 검사후 있으면 AddQuestForProgress만 하고 리턴
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
if (pQ->GetQuestCode() == m_dwNaviQCode[i])
{
GetManager()->AddQuestForProgress( pQ->GetQuestCode() );
return;
}
}
int iEmpty = MAX_NAVI_CNT;
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
if (0 == m_dwNaviQCode[i])
{
iEmpty = i;
break;
}
else
{
if (NULL == g_pQMGR_Real->FindQuest((QCODE)m_dwNaviQCode[i]))
{
iEmpty = i;
break;
}
}
}
if (MAX_NAVI_CNT == iEmpty)
{
if (m_iOldSelNaviIdx < MAX_NAVI_CNT)
{
GetManager()->DelQuestForProgress( (QCODE)m_dwNaviQCode[m_iOldSelNaviIdx] );
m_dwNaviQCode[m_iOldSelNaviIdx] = pQ->GetQuestCode();
GetManager()->AddQuestForProgress( pQ->GetQuestCode() );
if (MAX_NAVI_CNT-1 <= m_iOldSelNaviIdx)
m_iOldSelNaviIdx = 0;
else
m_iOldSelNaviIdx++;
}
else
{
SUN_ASSERT_MSG(m_iOldSelNaviIdx < MAX_NAVI_CNT, _T("ERROR!! m_iOldSelNaviIdx >= MAX_NAVI_CNT !!!!!"));
}
}
else
{
m_dwNaviQCode[iEmpty] = pQ->GetQuestCode();
GetManager()->AddQuestForProgress( pQ->GetQuestCode() );
}
RefreshQuestList();
}
void uiQuestListDlg::SetNaviBtn(POSTYPE pos)
{
if (NULL == GetManager())
return;
std::vector<DWORD>* pvecQ = NULL;
if (QUEST_CATEGORY_MISSION == m_eDlgState)
{
pvecQ = &m_vecMainQuest;
}
else if (QUEST_CATEGORY_QUEST == m_eDlgState)
{
pvecQ = &m_vecSubQuest;
}
else
{
assert(!"uiQuestListDlg::SetNaviBtn");
return;
}
int idx = pos - eDIALOG_QUEST_LIST_NAVI_BTN_START;
if (idx >= (int)m_vecVisCurChapterQuestIdx.size())
return;
Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[idx]]);
if (NULL == pQ)
return;
BOOL bNaviState[MAX_NAVI_CNT] = {FALSE,};
for(unsigned int i = 0; i < m_vecMainQuest.size(); ++i)
{
Quest* pQTemp = g_pQMGR_Real->FindQuest((QCODE)m_vecMainQuest[i]);
if (NULL == pQTemp)
continue;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[0])
bNaviState[0] = TRUE;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[1])
bNaviState[1] = TRUE;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[2])
bNaviState[2] = TRUE;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[3])
bNaviState[3] = TRUE;
}
for(unsigned int i = 0; i < m_vecSubQuest.size(); ++i)
{
Quest* pQTemp = g_pQMGR_Real->FindQuest((QCODE)m_vecSubQuest[i]);
if (NULL == pQTemp)
continue;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[0])
bNaviState[0] = TRUE;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[1])
bNaviState[1] = TRUE;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[2])
bNaviState[2] = TRUE;
if (pQTemp->GetQuestCode() == m_dwNaviQCode[3])
bNaviState[3] = TRUE;
}
if (WZ_HIDE == m_pCtrlQusetChkPicture[idx][0]->GetState() &&
WZ_HIDE == m_pCtrlQusetChkPicture[idx][1]->GetState() &&
WZ_HIDE == m_pCtrlQusetChkPicture[idx][2]->GetState() &&
WZ_HIDE == m_pCtrlQusetChkPicture[idx][3]->GetState())
{
BOOL bVal = FALSE;
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
if (FALSE == bNaviState[i])
{
m_pCtrlQusetChkPicture[idx][i]->ShowWindowWZ(WZ_SHOW);
m_dwNaviQCode[i] = pQ->GetQuestCode();
m_iOldSelNaviIdx = i;
GetManager()->AddQuestForProgress( (QCODE)m_dwNaviQCode[i] );
bVal = TRUE;
break;
}
}
if (FALSE == bVal)
{
for(int i = 0; i < QUEST_NAME_CHK_BT_CNT; ++i)
{
if (WZ_SHOW == m_pCtrlQusetChkPicture[i][m_iOldSelNaviIdx]->GetState())
m_pCtrlQusetChkPicture[i][m_iOldSelNaviIdx]->ShowWindowWZ(WZ_HIDE);
}
GetManager()->DelQuestForProgress( (QCODE)m_dwNaviQCode[m_iOldSelNaviIdx] );
m_pCtrlQusetChkPicture[idx][m_iOldSelNaviIdx]->ShowWindowWZ(WZ_SHOW);
m_dwNaviQCode[m_iOldSelNaviIdx] = pQ->GetQuestCode();
GetManager()->AddQuestForProgress( (QCODE)m_dwNaviQCode[m_iOldSelNaviIdx] );
if (MAX_NAVI_CNT-1 <= m_iOldSelNaviIdx)
m_iOldSelNaviIdx = 0;
else
m_iOldSelNaviIdx++;
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
if (0 == m_dwNaviQCode[i])
m_iOldSelNaviIdx = i;
}
}
}
else
{
m_pCtrlQusetChkPicture[idx][0]->ShowWindowWZ(WZ_HIDE);
m_pCtrlQusetChkPicture[idx][1]->ShowWindowWZ(WZ_HIDE);
m_pCtrlQusetChkPicture[idx][2]->ShowWindowWZ(WZ_HIDE);
m_pCtrlQusetChkPicture[idx][3]->ShowWindowWZ(WZ_HIDE);
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
if (pQ->GetQuestCode() == m_dwNaviQCode[i])
{
GetManager()->DelQuestForProgress( (QCODE)m_dwNaviQCode[i] );
m_dwNaviQCode[i] = 0;
m_iOldSelNaviIdx = i;
}
}
}
uiRadarMan* ui_radar_manager = GET_DIALOG_MANAGER(uiRadarMan, UIMAN_RADAR);
if (ui_radar_manager != NULL)
{
ui_radar_manager->SetNavigationPoint();
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::RefreshNaviBtn()
{
for(int i = 0; i < MAX_NAVI_CNT; ++i)
{
if (NULL == g_pQMGR_Real->FindQuest((QCODE)m_dwNaviQCode[i]))
m_dwNaviQCode[i] = 0;
}
for(int i = 0; i < QUEST_NAME_CHK_BT_CNT; ++i)
{
m_pCtrlQusetChkPicture[i][0]->ShowWindowWZ(WZ_HIDE);
m_pCtrlQusetChkPicture[i][1]->ShowWindowWZ(WZ_HIDE);
m_pCtrlQusetChkPicture[i][2]->ShowWindowWZ(WZ_HIDE);
m_pCtrlQusetChkPicture[i][3]->ShowWindowWZ(WZ_HIDE);
}
std::vector<DWORD>* pvecQ = NULL;
if (QUEST_CATEGORY_MISSION == m_eDlgState)
{
pvecQ = &m_vecMainQuest;
}
else if (QUEST_CATEGORY_QUEST == m_eDlgState)
{
pvecQ = &m_vecSubQuest;
}
else
{
assert(!"uiQuestListDlg::RefreshNaviBtn()");
return;
}
int iCnt = m_vecVisCurChapterQuestIdx.size();
if (QUEST_NAME_CHK_BT_CNT < iCnt)
{
assert(!"QUEST_NAME_CHK_BT_CNT <= m_vecVisCurChapterQuestIdx.size()");
return;
}
for(int i = 0; i < iCnt; ++i)
{
Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[i]]);
if (NULL == pQ)
continue;
for(int j = 0; j < MAX_NAVI_CNT; ++j)
{
if (m_dwNaviQCode[j] == pQ->GetQuestCode())
{
m_pCtrlQusetChkPicture[i][j]->ShowWindowWZ(WZ_SHOW);
}
}
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#ifdef _INTERNATIONAL_UI
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
VOID uiQuestListDlg::MouseOver_MsgProc( SI_MESSAGE * pMessage )
{
switch( pMessage->eResultMsg )
{
case RT_MSG_MOUSEOVER:
{
POSTYPE pos = getControlIDToPos( pMessage->dwCtrlID );
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
if (pos >= eDIALOG_QUEST_LIST_QUEST_NAME_BT_START && pos <= eDIALOG_QUEST_LIST_QUEST_NAME_BT_END)
{
int iIdx = pos - eDIALOG_QUEST_LIST_QUEST_NAME_BT_START;
//step1:툴팁이존재하는 버튼에 들어왔을때만 뿌려준다.
if (iIdx < QUEST_NAME_CHK_BT_CNT)
{
//퀘스트포인터를저장해주자
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_QUEST;
m_MouseOverObject.iSkillIdx = iIdx;
}
}
}
break;
}
}
void uiQuestListDlg::renderToolTip()
{
if ( this->m_MouseOverObject.eMouseOverType != eMOUSE_OVER_MAX)
{
if ( eMOUSE_OVER_QUEST == m_MouseOverObject.eMouseOverType )
{
uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP);
int idx = m_MouseOverObject.iSkillIdx;
if (pUIMan && idx <QUEST_NAME_CHK_BT_CNT)
{
std::vector<DWORD>* pvecQ = NULL;
//step1:카테고리설정
switch(m_eDlgState)
{
case QUEST_CATEGORY_MISSION:pvecQ = &m_vecMainQuest; break;
case QUEST_CATEGORY_QUEST:pvecQ = &m_vecSubQuest;break;
}
if (!pvecQ) return;
//step2:퀘스트 얻기
Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[idx]]);
if (NULL == pQ)
{
pQ = g_pQMGR_Temp->FindQuest((QCODE)(*pvecQ)[m_vecVisCurChapterQuestIdx[idx]]);
if (NULL == pQ) return;
}
//step3:퀘스트명랜더링
TCHAR szQName[INTERFACE_STRING_LENGTH + 1] = {0,};
g_InterfaceManager.GetInterfaceString(pQ->GetQuestInfo()->GetQNCode(),szQName);
// (완료) ( 9051 )
if (QS_COMPLETED == pQ->GetQState())
{
TCHAR szSuc[INTERFACE_STRING_LENGTH] = {0,};
GetUIMan()->GetInterfaceString( 9051, szSuc);
_tcscat(szQName, szSuc );
}
pUIMan->InitTooltip();
pUIMan->RegisterTooltipSimpleText(szQName);
pUIMan->SetTooltipDialogID(GetDialogKey());
}
int iMouseX = Mouse::Instance()->GetMouseX();
int iMouseY = Mouse::Instance()->GetMouseY();
BOOL bMouseOver = FALSE;
if (bMouseOver==FALSE)
{
RECT rc = m_pCtrlQuestNameBtn[idx]->GetSizeRect();
if (rc.left <= iMouseX && rc.right >= iMouseX)
{
if (rc.top <= iMouseY && rc.bottom >= iMouseY)
{
bMouseOver = TRUE;
}
}
}
if ( !bMouseOver )
{
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
return;
}
}
}
}
#endif//_INTERNATIONAL_UI
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::RePosQuestList()
{
if (NULL == m_pCtrlScroll)
return;
m_vecVisCurChapterQuestIdx.clear();
AllHideQuestName();
int iQCnt = 0;
int iScrollBarPos = m_pCtrlScroll->GetScrollPosWZ();
std::vector<DWORD>* pvecQ = NULL;
if (QUEST_CATEGORY_MISSION == m_eDlgState)
{
pvecQ = &m_vecMainQuest;
}
else if (QUEST_CATEGORY_QUEST == m_eDlgState)
{
pvecQ = &m_vecSubQuest;
}
else
{
assert(!"uiQuestListDlg::RePosQuestList()");
return;
}
iQCnt = pvecQ->size();
std::vector<int> vecQIdxTemp;
STLX_VECTOR<int> temp_vector_progress;
STLX_VECTOR<int> temp_vector_end;
if (m_pCtrlScroll)
{
int iSameChapterQCode = 0;
for(int i = 0; i < iQCnt; ++i)
{
Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[i]);
if (NULL == pQ)
{
pQ = g_pQMGR_Temp->FindQuest((QCODE)(*pvecQ)[i]);
if (NULL == pQ)
{
assert(!"RePosQuestList()::(NULL == pQ)");
return;
}
}
if ((pQ->GetQuestInfo()->GetGroupCode() != m_dwChapterCode) &&
(m_dwChapterCode != kAllChapterCode))
{
continue;
}
switch (m_eQDpType)
{
case eQUEST_DISPLAY_TYPE_ALL:
{
vecQIdxTemp.push_back(i);
break;
}
case eQUEST_DISPLAY_TYPE_PRG:
case eQUEST_DISPLAY_TYPE_END:
{
if (g_pQMGR_Real->FindQuest(pQ->GetQuestCode()) != NULL)
{
temp_vector_progress.push_back(i);
}
else
{
temp_vector_end.push_back(i);
}
}
break;
}
iSameChapterQCode++;
}//for();
if (eQUEST_DISPLAY_TYPE_PRG == m_eQDpType)
{
vecQIdxTemp.insert(vecQIdxTemp.end(),
temp_vector_progress.begin(), temp_vector_progress.end());
vecQIdxTemp.insert(vecQIdxTemp.end(),
temp_vector_end.begin(), temp_vector_end.end());
}
else if (eQUEST_DISPLAY_TYPE_END == m_eQDpType)
{
vecQIdxTemp.insert(vecQIdxTemp.end(),
temp_vector_end.begin(), temp_vector_end.end());
vecQIdxTemp.insert(vecQIdxTemp.end(),
temp_vector_progress.begin(), temp_vector_progress.end());
}
if (QUEST_NAME_CHK_BT_CNT < iSameChapterQCode)
{
m_pCtrlScroll->SetScrollRangeWZ(0, iSameChapterQCode - QUEST_NAME_CHK_BT_CNT);
iScrollBarPos = m_pCtrlScroll->GetScrollPosWZ();
}
else
{
m_pCtrlScroll->SetScrollRangeWZ(0, 0);
m_pCtrlScroll->SetScrollPosWZ(0);
iScrollBarPos = m_pCtrlScroll->GetScrollPosWZ();
}
}
int iMinus = 0;
for(unsigned int i = iScrollBarPos; i < vecQIdxTemp.size(); ++i)
{
int iCnt = m_vecVisCurChapterQuestIdx.size();
if (QUEST_NAME_CHK_BT_CNT <= iCnt)
{
return;
}
Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[vecQIdxTemp[i]]);
if (NULL == pQ)
{
pQ = g_pQMGR_Temp->FindQuest((QCODE)(*pvecQ)[vecQIdxTemp[i]]);
if (NULL == pQ)
{
assert(!"RePosQuestList()::(NULL == pQ)");
return;
}
}
m_vecVisCurChapterQuestIdx.push_back(vecQIdxTemp[i]);
int FinalPos = i - iScrollBarPos - iMinus;
TCHAR szQName[INTERFACE_STRING_LENGTH + 1] = {0,};
g_InterfaceManager.GetInterfaceString(pQ->GetQuestInfo()->GetQNCode(), szQName);
if (FinalPos >= QUEST_NAME_CHK_BT_CNT)
continue;
m_pCtrlQuestNameBtn[FinalPos]->ShowWindowWZ(WZ_SHOW);
#ifdef _SCJ_111202_UI_RENEWAL
quset_check_bg_picture[FinalPos]->ShowWindowWZ(WZ_SHOW);
#endif //_SCJ_111202_UI_RENEWAL
if (NULL == g_pQMGR_Real->FindQuest(pQ->GetQuestCode())) //보상까지 받은 종료된 퀘스트
{
#ifdef _INTERNATIONAL_UI
GlobalFunc::SetCaptionSimple( m_pCtrlQuestNameBtn[FinalPos], szQName,1);
#else
m_pCtrlQuestNameBtn[FinalPos]->SetTextWZ(szQName);
#endif//_INTERNATIONAL_UI
m_pCtrlQuestNameBtn[FinalPos]->SetTextColor(RGBA(94, 94, 94, 255));
}
else
{
if (QS_NORMAL == pQ->GetQState())
{
#ifdef _INTERNATIONAL_UI
GlobalFunc::SetCaptionSimple( m_pCtrlQuestNameBtn[FinalPos], szQName,1);
#else
m_pCtrlQuestNameBtn[FinalPos]->SetTextWZ(szQName);
#endif//_INTERNATIONAL_UI
m_pCtrlQuestNameBtn[FinalPos]->SetTextColor(RGBA(213, 201, 171, 255));
}
else if (QS_COMPLETED == pQ->GetQState())
{
TCHAR szSuc[INTERFACE_STRING_LENGTH] = {0,};
// (완료) ( 9051 )
GetUIMan()->GetInterfaceString( 9051, szSuc);
_tcscat(szQName, szSuc );
#ifdef _INTERNATIONAL_UI
GlobalFunc::SetCaptionSimple( m_pCtrlQuestNameBtn[FinalPos], szQName,1);
#else
m_pCtrlQuestNameBtn[FinalPos]->SetTextWZ(szQName);
#endif//_INTERNATIONAL_UI
m_pCtrlQuestNameBtn[FinalPos]->SetTextColor(RGBA(213, 201, 171, 255));
}
}
}
vecQIdxTemp.clear();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::SetQuestCntAndChapterCnt()
{
//g_pQMGR_Real->QuestNum
if (m_pCtrlQuestNum)
{
std::vector<DWORD>* pvecQ = NULL;
std::vector<DWORD>* pmapChapterCode = NULL;
std::vector<DWORD> temp_chapter_code;
if (QUEST_CATEGORY_MISSION == m_eDlgState)
{
pvecQ = &m_vecMainQuest;
pmapChapterCode = &m_MainQChapterCodes;
}
else if (QUEST_CATEGORY_QUEST == m_eDlgState)
{
pvecQ = &m_vecSubQuest;
pmapChapterCode = &m_SubQChapterCodes;
}
else
{
assert(!"uiQuestListDlg::SetQuestCntAndChapterCnt()");
return;
}
int iProcessQCnt = 0;
int iQCnt = 0;
std::vector<DWORD>::iterator iter;
iQCnt = pvecQ->size();
for(int i = 0; i < iQCnt; ++i)
{
Quest* pQ = g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[i]);
if (NULL == pQ)
{
pQ = g_pQMGR_Temp->FindQuest((QCODE)(*pvecQ)[i]);
if (NULL == pQ)
{
assert(!"uiQuestListDlg::SetQuestCntAndChapterCnt()");
return;
}
}
DWORD dwGroupCode = pQ->GetQuestInfo()->GetGroupCode();
iter = std::find(temp_chapter_code.begin(), temp_chapter_code.end(), dwGroupCode);
if (iter == temp_chapter_code.end())
{
temp_chapter_code.push_back(dwGroupCode);
}
if ( NULL != g_pQMGR_Real->FindQuest((QCODE)(*pvecQ)[i]) )
iProcessQCnt++;
}
pmapChapterCode->push_back(kAllChapterCode);
TCHAR szTemp[16] = {0,};
Snprintf(szTemp, 16-1, _T("%d/%d"), iProcessQCnt, iQCnt);
m_pCtrlQuestNum->SetTextWZ(szTemp);
TCHAR szChapterName[INTERFACE_STRING_LENGTH + 1] = {0,};
// 2012.12.05 / 송찬종 / 챕터가 저장이 안되는 현상 수정
//m_pCtrlChapterList->DeleteItemAll();를 하면서 CurSel 이 풀려서 생긴 현상
int current_sell = m_pCtrlChapterList->GetCurSel();
m_pCtrlChapterList->DeleteItemAll();
std::sort(temp_chapter_code.begin(), temp_chapter_code.end(), std::greater<DWORD>());
pmapChapterCode->insert(pmapChapterCode->end(), temp_chapter_code.begin(), temp_chapter_code.end());
iter = pmapChapterCode->begin();
while(iter != pmapChapterCode->end())
{
g_InterfaceManager.GetInterfaceString((*iter) ,szChapterName);
int idx = m_pCtrlChapterList->InsertItemBack();
GlobalFunc::SetItem(m_pCtrlChapterList, idx, 0, szChapterName, StrToWzID("mn12"),
DT_CENTER | DT_VCENTER, c_InterfaceBKColor, c_InterfaceTextColor, c_InterfaceSelColor);
++iter;
}
// 2012.12.05 / 송찬종 / 챕터가 저장이 안되는 현상 수정
//m_pCtrlChapterList->DeleteItemAll();를 하면서 CurSel 이 풀려서 생긴 현상
m_pCtrlChapterList->SetCurSel(current_sell);
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::RefreshQuestList()
{
if (NULL == GetManager())
return;
m_vecMainQuest.clear();
m_vecSubQuest.clear();
m_MainQChapterCodes.clear();
m_SubQChapterCodes.clear();
const int FIRST_QUEST = 0;
for (int i = MAX_QUEST_COMPL_NUM-1; i > FIRST_QUEST; --i)
{
Quest* pQuest = g_pQMGR_Real->FindQuest(i);
if (NULL == pQuest)
{
pQuest = g_pQMGR_Temp->FindQuest(i);
if (NULL == pQuest)
{
pQuest = g_pQMGR_Temp->CreateQuest(i);
if (!pQuest) continue;
}
QUEST_CONDITION_REPEAT_INFO* pQCR = (QUEST_CONDITION_REPEAT_INFO*)pQuest->GetQuestInfo()->FindAcceptCondition(eQUEST_CONDITION_REPEAT);
if (NULL == pQCR)
continue;
QUESTPART_COMPL * pComplQ = g_pQMGR_Real->FindComplQuest( i );
if (NULL == pComplQ || pComplQ->m_Num < pQCR->GetMaxRepeatNum())
continue;
else
{
int a = 0; //종료된 퀘스트
}
}
if (QUEST_CATEGORY_MISSION == pQuest->GetQType())
m_vecMainQuest.push_back(pQuest->GetQuestCode());
else if (QUEST_CATEGORY_QUEST == pQuest->GetQType())
m_vecSubQuest.push_back(pQuest->GetQuestCode());
else
{
assert(!"uiQuestListDlg::RefreshQuestList()");
}
}
if (FALSE == m_bInit)
return;
if (m_pCtrlScroll)
m_pCtrlScroll->SetScrollPosWZ(0);
SelectChapter();
SelectDPType();
int scroll_max_value = QuestListCount(GetDlgState(), m_dwChapterCode, m_eQDpType) - QUEST_NAME_CHK_BT_CNT;
m_pCtrlScroll->SetScrollRangeWZ(0, scroll_max_value);
m_pCtrlScroll->SetScrollPosWZ(last_scrollbar_position(GetDlgState(), m_dwChapterCode, m_eQDpType));
RePosQuestList();
RefreshNaviBtn();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::updateMouseWheel()
{
if (NULL == m_pCtrlScroll)
return;
RECT rt;
this->GetDialogWZ()->GetClientRect(&rt);
switch(GetMouseWheelStatus(&rt))
{
case MOUSE_WHEEL_UP:
{
int iPos = m_pCtrlScroll->GetScrollPosWZ();
int iMin, iMax;
int iListCnt = 0;
m_pCtrlScroll->GetScrollRangeWZ(&iMin, &iMax);
if (0 < iPos)
{
m_pCtrlScroll->SetScrollPosWZ(iPos - 1);
set_last_scrollbar_position(GetDlgState(),
m_dwChapterCode,
m_eQDpType,
m_pCtrlScroll->GetScrollPosWZ());
RePosQuestList();
RefreshNaviBtn();
}
}
break;
case MOUSE_WHEEL_DOWN:
{
int iPos = m_pCtrlScroll->GetScrollPosWZ();
int iMin, iMax;
int iListCnt = 0;
m_pCtrlScroll->GetScrollRangeWZ(&iMin, &iMax);
if (iMax > iPos)
{
m_pCtrlScroll->SetScrollPosWZ(iPos + 1);
set_last_scrollbar_position(GetDlgState(),
m_dwChapterCode,
m_eQDpType,
m_pCtrlScroll->GetScrollPosWZ());
RePosQuestList();
RefreshNaviBtn();
}
}
break;
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void uiQuestListDlg::InitControl()
{
m_pCtrlMissionTabBtn = static_cast<CCtrlButtonCheckWZ*>(getControl(eDIALOG_QUEST_LIST_MISSION_BTN));
assert(m_pCtrlMissionTabBtn);
m_pCtrlQuestTabBtn = static_cast<CCtrlButtonCheckWZ*>(getControl(eDIALOG_QUEST_LIST_QUEST_BTN));
assert(m_pCtrlQuestTabBtn);
m_pCtrlChapterList = static_cast<CCtrlListWZ*>(getControl(eDIALOG_QUEST_LIST_CHAPTER_LIST));
assert(m_pCtrlChapterList);
if (m_pCtrlChapterList)
m_pCtrlChapterList->ShowWindowWZ(WZ_HIDE);
m_pCtrlChapterBtn = static_cast<CCtrlButtonWZ*>(getControl(eDIALOG_QUEST_LIST_CHAPTER_LIST_BTN));
assert(m_pCtrlChapterBtn);
m_pCtrlChapterBtn2 = static_cast<CCtrlButtonWZ*>(getControl(eDIALOG_QUEST_LIST_CHAPTER_LIST_BTN2));
assert(m_pCtrlChapterBtn2);
#ifdef _SCJ_111202_UI_RENEWAL
if (m_pCtrlChapterBtn2 != NULL)
{
m_pCtrlChapterBtn2->SetTextWZ("");
}
#else
m_pCtrlChapterName = static_cast<CCtrlStaticWZ*>(getControl(eDIALOG_QUEST_LIST_CHAPTER_STRING));
assert(m_pCtrlChapterName);
if (m_pCtrlChapterName)
m_pCtrlChapterName->SetTextWZ("");
#endif //_SCJ_111202_UI_RENEWAL
m_pCtrlDPTypeList = static_cast<CCtrlListWZ*>(getControl(eDIALOG_QUEST_LIST_DP_TYPE_LIST));
assert(m_pCtrlDPTypeList);
if (m_pCtrlDPTypeList)
{
TCHAR szDPType[INTERFACE_STRING_LENGTH + 1] = {0,};
//601 전체
g_InterfaceManager.GetInterfaceString(601,szDPType);
int idx = m_pCtrlDPTypeList->InsertItemBack();
GlobalFunc::SetItem(m_pCtrlDPTypeList, idx, 0, szDPType, StrToWzID("mn12"),
DT_CENTER | DT_VCENTER, c_InterfaceBKColor, c_InterfaceTextColor, c_InterfaceSelColor);
//1664 진행
g_InterfaceManager.GetInterfaceString(1664,szDPType);
idx = m_pCtrlDPTypeList->InsertItemBack();
GlobalFunc::SetItem(m_pCtrlDPTypeList, idx, 0, szDPType, StrToWzID("mn12"),
DT_CENTER | DT_VCENTER, c_InterfaceBKColor, c_InterfaceTextColor, c_InterfaceSelColor);
//859 종료
g_InterfaceManager.GetInterfaceString(859,szDPType);
idx = m_pCtrlDPTypeList->InsertItemBack();
GlobalFunc::SetItem(m_pCtrlDPTypeList, idx, 0, szDPType, StrToWzID("mn12"),
DT_CENTER | DT_VCENTER, c_InterfaceBKColor, c_InterfaceTextColor, c_InterfaceSelColor);
m_pCtrlDPTypeList->ShowWindowWZ(WZ_HIDE);
}
m_pCtrlDPTypeBtn = static_cast<CCtrlButtonWZ*>(getControl(eDIALOG_QUEST_LIST_DP_TYPE_LIST_BTN));
assert(m_pCtrlDPTypeBtn);
m_pCtrlDPTypeBtn2 = static_cast<CCtrlButtonWZ*>(getControl(eDIALOG_QUEST_LIST_DP_TYPE_LIST_BTN2));
assert(m_pCtrlDPTypeBtn2);
#ifdef _SCJ_111202_UI_RENEWAL
if (m_pCtrlDPTypeBtn2 != NULL)
{
//601 전체
TCHAR szDPType[INTERFACE_STRING_LENGTH + 1] = {0,};
g_InterfaceManager.GetInterfaceString(601, szDPType);
m_pCtrlDPTypeBtn2->SetTextWZ(szDPType);
}
#else
m_pCtrlDPTypeName = static_cast<CCtrlStaticWZ*>(getControl(eDIALOG_QUEST_LIST_DP_TYPE_STRING));
assert(m_pCtrlDPTypeName);
if (m_pCtrlDPTypeName)
{
//601 전체
TCHAR szDPType[INTERFACE_STRING_LENGTH + 1] = {0,};
g_InterfaceManager.GetInterfaceString(601, szDPType);
m_pCtrlDPTypeName->SetTextWZ(szDPType);
}
#endif //_SCJ_111202_UI_RENEWAL
for(int i = 0; i < QUEST_NAME_CHK_BT_CNT; ++i)
{
m_pCtrlQuestNameBtn[i] = static_cast<CCtrlButtonWZ*>(getControl(eDIALOG_QUEST_LIST_QUEST_NAME_BT_START + i));
assert(m_pCtrlQuestNameBtn[i]);
if (m_pCtrlQuestNameBtn[i])
{
m_pCtrlQuestNameBtn[i]->SetTextOffsetY(-1l);
m_pCtrlQuestNameBtn[i]->ShowWindowWZ(WZ_HIDE);
#ifdef _SCJ_LONG_TEXT_REDUCING
m_pCtrlQuestNameBtn[i]->SetTextReducing(true);
#endif //_SCJ_LONG_TEXT_REDUCING
}
m_pCtrlQuestNaviBtn[i] = static_cast<CCtrlButtonWZ*>(getControl(eDIALOG_QUEST_LIST_NAVI_BTN_START + i));
assert(m_pCtrlQuestNaviBtn[i]);
}
for(int i = 0; i < QUEST_CHK_PICTURE_KIND; ++i)
{
for(int j = 0; j < QUEST_NAME_CHK_BT_CNT; ++j)
{
m_pCtrlQusetChkPicture[j][i] =
static_cast<CCtrlPictureWZ*>(getControl(eDIALOG_QUEST_LIST_QUEST_CHK_PICTURE_START + (QUEST_NAME_CHK_BT_CNT * i) + j));
assert(m_pCtrlQusetChkPicture[j][i]);
if (m_pCtrlQusetChkPicture[j][i])
m_pCtrlQusetChkPicture[j][i]->ShowWindowWZ(WZ_HIDE);
}
}
m_pCtrlQuestNum = static_cast<CCtrlStaticWZ*>(getControl(eDIALOG_QUEST_LIST_QUEST_NUM_STRING));
assert(m_pCtrlQuestNum);
if (m_pCtrlQuestNum)
m_pCtrlQuestNum->SetTextWZ("0/0");
m_pCtrlScroll = static_cast<CCtrlVScrollWZ*>(getControl(eDIALOG_QUEST_LIST_SCROLL));
assert(m_pCtrlScroll);
if (m_pCtrlScroll)
{
m_pCtrlScroll->SetScrollRangeWZ(0, 0);
m_pCtrlScroll->SetScrollPosWZ(0);
m_pCtrlScroll->SetScrollPosWZ(last_scrollbar_position(GetDlgState(), m_dwChapterCode, m_eQDpType));
}
#ifdef _SCJ_111202_UI_RENEWAL
for(int i = 0; i < QUEST_NAME_CHK_BT_CNT; ++i)
{
quset_check_bg_picture[i] = static_cast<CCtrlPictureWZ*>(getControl(eDIALOG_QUEST_LIST_QUEST_CHK_BG_PICTURE_START + i));
assert(quset_check_bg_picture[i]);
if (quset_check_bg_picture[i])
{
quset_check_bg_picture[i]->ShowWindowWZ(WZ_HIDE);
}
}
#endif //_SCJ_111202_UI_RENEWAL
m_bInit = TRUE;
}
//------------------------------------------------------------------------------
void uiQuestListDlg::AllHideQuestName()
{
for(int i = 0; i < QUEST_NAME_CHK_BT_CNT; ++i)
{
m_pCtrlQuestNameBtn[i]->ShowWindowWZ(WZ_HIDE);
#ifdef _SCJ_111202_UI_RENEWAL
quset_check_bg_picture[i]->ShowWindowWZ(WZ_HIDE);
#endif //_SCJ_111202_UI_RENEWAL
}
}
//------------------------------------------------------------------------------
DWORD uiQuestListDlg::GetNaviQCodes(BYTE btNaviIdx)
{
if (btNaviIdx < MAX_NAVI_CNT)
{
return m_dwNaviQCode[btNaviIdx];
}
assert(false);
return 0;
}
//------------------------------------------------------------------------------
int uiQuestListDlg::last_scrollbar_position(const eQUEST_CATEGORY quest_category,
const DWORD qeust_chapter_groupcode,
const eQUEST_DISPLAY_TYPE quest_display_type)
{
std::vector<ScrollbarPosition>::iterator begin = last_scrollbar_position_.begin();
std::vector<ScrollbarPosition>::iterator end = last_scrollbar_position_.end();
for (; begin != end; ++begin)
{
if ((begin->quest_category() == quest_category) &&
(begin->qeust_chapter_groupcode() == qeust_chapter_groupcode) &&
(begin->quest_display_type() == quest_display_type))
{
return begin->scrollbar_position();
}
}
return 0;
}
//------------------------------------------------------------------------------
void uiQuestListDlg::set_last_scrollbar_position(const eQUEST_CATEGORY quest_category,
const DWORD qeust_chapter_groupcode,
const eQUEST_DISPLAY_TYPE quest_display_type,
const int scrollbar_position)
{
std::vector<ScrollbarPosition>::iterator begin = last_scrollbar_position_.begin();
std::vector<ScrollbarPosition>::iterator end = last_scrollbar_position_.end();
for (; begin != end; ++begin)
{
if ((begin->quest_category() == quest_category) &&
(begin->qeust_chapter_groupcode() == qeust_chapter_groupcode) &&
(begin->quest_display_type() == quest_display_type))
{
begin->set_scrollbar_position(scrollbar_position);
return;
}
}
last_scrollbar_position_.push_back(ScrollbarPosition(quest_category,
qeust_chapter_groupcode,
quest_display_type,
scrollbar_position));
}
//------------------------------------------------------------------------------
int uiQuestListDlg::QuestListCount(const eQUEST_CATEGORY quest_category,
const DWORD quest_chapter_groupCode,
const eQUEST_DISPLAY_TYPE quest_display_type)
{
std::vector<DWORD>* quest_vector_ptr = NULL;
if (QUEST_CATEGORY_MISSION == quest_category)
{
quest_vector_ptr = &m_vecMainQuest;
}
else if (QUEST_CATEGORY_QUEST == quest_category)
{
quest_vector_ptr = &m_vecSubQuest;
}
else
{
return 0;
}
int filter_quest_count = 0;
int quest_count = quest_vector_ptr->size();
for(int i = 0; i < quest_count; ++i)
{
QCODE quest_code = static_cast<QCODE>((*quest_vector_ptr)[i]);
Quest* quest = g_pQMGR_Real->FindQuest(quest_code);
if (NULL == quest)
{
quest = g_pQMGR_Temp->FindQuest(quest_code);
if (NULL == quest)
{
break;
}
}
if (eQUEST_DISPLAY_TYPE_PRG == quest_display_type)
{
if (g_pQMGR_Real->FindQuest(quest->GetQuestCode()) == NULL)
{
continue;
}
}
else if (eQUEST_DISPLAY_TYPE_END == quest_display_type)
{
if (g_pQMGR_Real->FindQuest(quest->GetQuestCode()) != NULL)
{
continue;
}
}
if (quest->GetQuestInfo()->GetGroupCode() == quest_chapter_groupCode)
{
++filter_quest_count;
}
}
return filter_quest_count;
}
//------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////