#include "StdAfx.h" #include "QuestWindow.h" #include "QuestManager.h" #include "GameResourceManager.h" #include "SkillScript.h" #include "TipWindow.h" #include "GameUIManager.h" #include "ObjectManager.h" #include "Hero.h" #include "UIFuncText.h" #include "ItemManager.h" #include "NpcScript.h" #include "Npc_Common.h" #include "QuestSimpleWindow.h" #include "TitleManager.h" #include "CheckBox.h" #include "PlaneObject.h" #include "Label.h" #include "TextBox.h" #include "Button.h" #include "NumberEditBox.h" #include "ScrollBar.h" #include "SoundSystem.h" #include "TriggerManager.h" const int REWARD_ITEM_IMG_GAP = 30; cQuestWindow::cQuestWindow() : mpListBox(0) , mpCount(0) , mpCompleteCount(0) , mpProgressCount(0) , mpDescBox(0) , mpDelete(0) , mpHighImage(0) , mpLowImage(0) , mTimeLine(-1) , mSelectQuestIndex(0) , mpViewInfo(0) { for( unsigned int idx = 0; idx < eQUEST_REWARD_LABEL_MAX; ++idx ) { mpRewardLabel[idx] = NULL; } for( unsigned int idx = 0; idx < eQUEST_REWARD_IMG_MAX; ++idx ) { mpRewordBack[idx] = NULL; } for( unsigned int idx = 0; idx < eQUEST_REWARD_IMG_MAX; ++idx ) { mpRewordBackImg[idx] = NULL; mIsShowBackImg[idx] = false; } } cQuestWindow::~cQuestWindow() { SAFE_DELETE( mpLowImage ); SAFE_DELETE( mpHighImage ); for( unsigned int cnt = 0; cnt < eQUEST_REWARD_IMG_MAX; ++cnt ) { SAFE_DELETE( mpRewordBackImg[cnt] ); } } /// Äù½ºÆ® ¸®½ºÆ® °»½ÅµÉ¶§ È£ÃâµÊ void cQuestWindow::Clear() { if( mpListBox ) mpListBox->Clear(); /// ÃʱâÈ­ if( mpDescBox ) mpDescBox->Clear(); /// ÃʱâÈ­ ClearIcon(); mTimeLine = -1; mSelectQuestIndex = 0; UpdateCount( 0, 0 ); if( mpDelete ) mpDelete->SetEnabled( false ); for( unsigned int idx = 0; idx < eQUEST_REWARD_LABEL_MAX; ++idx ) { mpRewardLabel[idx]->Hide(); } for( unsigned int idx = 0; idx < eQUEST_REWARD_IMG_MAX; ++idx ) { mIsShowBackImg[idx] = false; } if( mpCount ) mpCount->Hide(); } /// ¾ÆÀÌÄÜ ÃʱâÈ­ void cQuestWindow::ClearIcon() { for( unsigned int i = 0; i < 5; ++i ) { cIcon* icon = mDefaultIcon[i].icon; if( icon ) { mDefaultIcon[i].index = 0; icon->SetIconType( eICON_NORMAL ); icon->ChangeImage(0); } cIcon* selectIcon = mSelectIcon[i].icon; if( selectIcon ) { mSelectIcon[i].index = 0; selectIcon->SetIconType( eICON_NORMAL ); selectIcon->ChangeImage(0); } } } void cQuestWindow::Open() { } void cQuestWindow::Close() { cUIWindow::Close(); Clear(); } void cQuestWindow::OnShow() { cUIWindow::OnShow(); mpDelete->SetEnabled( false ); /// º¸À϶§ °»½Å UpdateQuestInfo(); } bool cQuestWindow::OnCreate( cUINodeProperty* pproperty ) { if( cUIWindow::OnCreate( pproperty ) == false ) return false; mpListBox = (cQuestListFolder*)GetChild( eUIID_QUEST_FOLDER ); if( !mpListBox ) return false; /// º¸»ó¿ë ¾ÆÀÌÄÜ »ý¼º cString str; for( unsigned int i = 0; i < 5; ++i ) { str.Format( "RewardDefault_Icon%d", i ); cIcon* icon = new cIcon; if( icon->CreateBySkinName( str, this, i ) == false ) return false; mDefaultIcon[i].icon = icon; } for( unsigned int i = 0; i < 5; ++i ) { str.Format( "RewardSelect_Icon%d", i ); cIcon* icon = new cIcon; if( icon->CreateBySkinName( str, this, i+10 ) == false ) return false; mSelectIcon[i].icon = icon; } for( unsigned int cnt = 0; cnt < eQUEST_REWARD_LABEL_MAX; ++cnt ) { mpRewardLabel[cnt] = (cLabel*)GetChild( eUIID_QUEST_REWARD_LABEL0 + cnt ); } mpCount = (cLabel*)GetChild( eUIID_QUEST_COUNT ); mpCompleteCount = (cLabel*)GetChild( eUIID_QUEST_COMPLETE ); mpProgressCount = (cLabel*)GetChild( eUIID_QUEST_PROGRESS ); mpDescBox = (cTextBox*)GetChild( eUIID_QUEST_DESCBOX ); mpDelete = (cButton*)GetChild( eUIID_QUEST_DELETE ); mpViewInfo = (cCheckBox*)GetChild( eUIID_QUEST_VIEWINFO ); if( mpViewInfo ) mpViewInfo->SetPress( true ); if( mpProgressCount ) mpProgressCount->SetTextColor( COLOR_GREEN ); if( mpCompleteCount ) mpCompleteCount->SetTextColor( COLOR_GREEN ); if( mpDescBox ) mpDescBox->SetDrawTextBottom( false ); cUISkin* pSkin = UIMAN->GetSkin(); if( !pSkin ) { assert(0); return false; } for( unsigned int cnt = 0; cnt < eQUEST_REWARD_IMG_MAX; ++cnt ) { cString name; name.Format( "QuestReward_Back%02d", cnt ); cUINodeSkin* pNodeSkin = pSkin->GetNodeSkin( name.Cstr() ); if( pNodeSkin ) { mpRewordBack[cnt] = pNodeSkin; mpRewordBackImg[cnt] = new cUIImage( pNodeSkin->mpTexture ); unsigned int tx = pNodeSkin->mSkinInfo->mTexX; unsigned int ty = pNodeSkin->mSkinInfo->mTexY; unsigned int w = pNodeSkin->mSkinInfo->mWidth; unsigned int h = pNodeSkin->mSkinInfo->mHeight; unsigned int x = pNodeSkin->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = pNodeSkin->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[cnt]->SetTextureRect( tx, ty, tx + w, ty + h ); mpRewordBackImg[cnt]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); } else { assert(0); return false; } } /// À̹ÌÁö »ý¼º cUINodeSkin* pHighSkin = pSkin->GetNodeSkin( "Quest_FolderHigh" ); cUINodeSkin* pHighNoSkin = pSkin->GetNodeSkin( "Quest_FolderHighNoCheck" ); if( pHighSkin && pHighNoSkin ) { mpHighImage = new cUIImage( pHighSkin->mpTexture ); unsigned int tx = pHighSkin->mSkinInfo->mTexX; unsigned int ty = pHighSkin->mSkinInfo->mTexY; unsigned int w = pHighSkin->mSkinInfo->mWidth; unsigned int h = pHighSkin->mSkinInfo->mHeight; unsigned int x = pHighSkin->mSkinInfo->mX; unsigned int y = pHighSkin->mSkinInfo->mY; mpHighImage->SetTextureRect( tx, ty, tx + w, ty + h ); mpHighImage->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); unsigned int tx2 = pHighNoSkin->mSkinInfo->mTexX; unsigned int ty2 = pHighNoSkin->mSkinInfo->mTexY; mpListBox->SetHighNoCheckPos( tx, ty ); mpListBox->SetHighCheckPos( tx2, ty2 ); } cUINodeSkin* pLowSkin = pSkin->GetNodeSkin( "Quest_FolderLow" ); cUINodeSkin* pLowNoSkin = pSkin->GetNodeSkin( "Quest_FolderLowNoCheck" ); if( pLowSkin && pLowNoSkin ) { mpLowImage = new cUIImage( pLowSkin->mpTexture ); unsigned int tx = pLowSkin->mSkinInfo->mTexX; unsigned int ty = pLowSkin->mSkinInfo->mTexY; unsigned int w = pLowSkin->mSkinInfo->mWidth; unsigned int h = pLowSkin->mSkinInfo->mHeight; unsigned int x = pLowSkin->mSkinInfo->mX; unsigned int y = pLowSkin->mSkinInfo->mY; mpLowImage->SetTextureRect( tx, ty, tx + w, ty + h ); mpLowImage->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); unsigned int tx2 = pLowNoSkin->mSkinInfo->mTexX; unsigned int ty2 = pLowNoSkin->mSkinInfo->mTexY; mpListBox->SetLowCheckPos( tx, ty ); mpListBox->SetLowNoCheckPos( tx2, ty2 ); } return true; } void cQuestWindow::UpdateRect() { cUIWindow::UpdateRect(); for( unsigned int idx = 0; idx < eQUEST_REWARD_IMG_MAX; ++idx ) { if( mIsShowBackImg[idx] ) { SetQuestReward(); break; } } } void cQuestWindow::OnCommand( cUINode*, unsigned int id ) { switch( id ) { case eUIID_QUEST_CLOSE: /// ´Ý±â Hide(); break; case eUIID_QUEST_DELETE: { /// Äù½ºÆ® Æ÷±â unsigned int row = mpListBox->GetSelectRow(); unsigned int column = mpListBox->GetSelectRowColumn(); if( column > 0 ) { unsigned int arrIdx = (unsigned int)mpListBox->GetColumnData( row, column ); unsigned long questIdx = QUESTMAN->GetQuestIndex( arrIdx ); cQuestDefine* define = QUESTMAN->GetQuestDefine( questIdx ); if( !define ) { assert(0); return; } cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 416 ), GAMERESOURCEMAN->GetQuestTitle( define->mTitleIndex )); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_QUEST_DELETE, eSKIN_YESNO, (LPCTSTR)str.Cstr(), GAMERESOURCEMAN->GetGameText( 301 ), (void*)arrIdx ); } } break; } } void cQuestWindow::OnCheckBoxChanged( cUINode* , unsigned int id ) { if( id == eUIID_QUEST_VIEWINFO ) { cQuestSimpleWindow* simple = GAMEUI->GetQuestSimpleWindow(); if( mpViewInfo && simple ) { if( mpViewInfo->IsPress() == true ) { // Äѱâ simple->Show(); } else { // ²ô±â simple->Hide(); } } else assert(0); } } void cQuestWindow::OnListBoxChanged( cUINode* caller, unsigned int id ) { cQuestWindow::OnListBoxSelected( caller, id ); } void cQuestWindow::OnListBoxSelected(cUINode* , unsigned int ) { if( !mpListBox ) return; unsigned int row = mpListBox->GetSelectRow(); unsigned int column = mpListBox->GetSelectRowColumn(); unsigned long questIdx = 0; if( column > 0 ) { unsigned int arrIdx = (unsigned int)mpListBox->GetColumnData( row, column ); questIdx = QUESTMAN->GetQuestIndex( arrIdx ); } // ÃßÀû ¼±Åà if( questIdx == 0 ) { /// ÃʱâÈ­ if( mpDescBox ) mpDescBox->Clear(); /// ÃʱâÈ­ ClearIcon(); if( mpDelete ) mpDelete->SetEnabled( false ); for( unsigned int idx = 0; idx < eQUEST_REWARD_LABEL_MAX; ++idx ) { mpRewardLabel[idx]->Hide(); } for( unsigned int idx = 0; idx < eQUEST_REWARD_IMG_MAX; ++idx ) { mIsShowBackImg[idx] = false; } if( mpCount ) mpCount->Hide(); /// ÃßÀû ÃʱâÈ­ QUESTMAN->ClearChaseQuest(); } else QUESTMAN->UpdateChaseQuest( questIdx ); } void cQuestWindow::UpdateSelect() { if( !mpListBox ) { assert(0); return; } // ÃßÀû Äù½ºÆ® À妽º¸¦ °¡Áø ¿­À» ¼±ÅÃÇϵµ·Ï ÇÔ. unsigned long questIndex = QUESTMAN->GetChangeQuestIndex(); cQuestDefine* define = QUESTMAN->GetQuestDefine( questIndex ); if( !define ) { mpListBox->ShowOn( false ); return; } int arrIdx = QUESTMAN->GetQuestArrIdx( questIndex ); if( arrIdx == -1 ) return; int column = mpListBox->FindColumnByExtra( define->mTakeMapIndex, arrIdx ); mpListBox->ChangeSelectColumn( column ); if( column != -1 ) { // Ç¥½ÃÇØÁÙ Á¤º¸°¡ ÀÖ´ÂÁö ¾ø´ÂÁö ÆÇ´Ü bool show = ( define->mQuestInfo ) ? true : false; mpListBox->ShowOn( show ); } else { mpListBox->ShowOn( false ); } /// Äù½ºÆ® Á¤º¸ ¾÷µ¥ÀÌÆ® SetQuestReward(); UpdateQuestInfo(); } void cQuestWindow::OnImageClicked( cUINode* , unsigned int ) { if( mpListBox ) { unsigned int row = mpListBox->GetSelectRow(); unsigned int column = mpListBox->GetSelectRowColumn(); unsigned int arrIdx = (unsigned int)mpListBox->GetColumnData( row, column ); unsigned long questIdx = QUESTMAN->GetQuestIndex( arrIdx ); bool check = QUESTMAN->IsSelectQuest( questIdx ); if( check == true ) { /// üũ Ç®±â sFolderData* data = mpListBox->GetFolderData( row, column ); if( data ) data->mCheck = false; QUESTMAN->DeleteQuestSelect( questIdx ); } else { /// üũ Ãß°¡ sFolderData* data = mpListBox->GetFolderData( row, column ); if( data ) data->mCheck = true; QUESTMAN->AddQuestSelect( questIdx ); } } } void cQuestWindow::OnIconHovered( cUINode* caller, unsigned int id, const cUIPos& pos ) { cIcon* hoverIcon = (cIcon*)caller; bool defaultIcon = true; int index = -1; for( unsigned int i = 0; i < 5; ++i ) { if( mDefaultIcon[i].icon == hoverIcon || mSelectIcon[i].icon == hoverIcon ) { if( mSelectIcon[i].icon == hoverIcon ) defaultIcon = false; index = i; break; } } if( index == -1 ) return; sRewardIcon& data = ( defaultIcon == true )? mDefaultIcon[index] : mSelectIcon[index]; if( data.icon ) { int type = data.icon->GetIconType(); if( type == eICON_ITEM ) { UIMAN->ShowItemTip( eTIP_ITEM, pos, data.index, USHRT_MAX, true ); } else if( type == eICON_SKILL ) { cBuffToolTipWindow* pTip = GAMEUI->GetBuffTip(); UIMAN->ShowBuffTip( pTip, pos, (unsigned long)-1, data.index, false ); } } } bool cQuestWindow::SetQuestReward() { /// ÃʱâÈ­ ClearIcon(); ClearLabels(); /// ¼±ÅÃµÈ Äù½ºÆ®ÀÇ º¸»óÁ¤º¸ ¼¼ÆÃ unsigned int row = mpListBox->GetSelectRow(); unsigned int column = mpListBox->GetSelectRowColumn(); /// »óÀ§¿­À» ¼±ÅÃÇÏ¿´À» °æ¿ì. if( column == 0 ) return false; unsigned int arrIdx = (unsigned int)mpListBox->GetColumnData( row, column ); unsigned long questIdx = QUESTMAN->GetQuestIndex( arrIdx ); cQuestDefine* define = QUESTMAN->GetQuestDefine( questIdx ); if( !define ) { assert(0); return false; } SetSelectCount( define->mSelectCount ); bool isShowDefaultIcon = false; bool isShowSelectIcon = false; unsigned int rewardCounter = 0; /// ±âº» º¸»ó ¼¼ÆÃ cQuestReward* reward = define->mDefaultReward; if( reward ) { if( reward->mExp > 0 ) { /// ±ÛÀÚ Ãâ·Â LPCTSTR expStr = cNumberEditBox::FormatNumber( reward->mExp ); mpRewardLabel[rewardCounter]->SetText( expStr ); mpRewardLabel[rewardCounter]->Show(); ///¼ÂÆÃÇØ¾ß ÇÒ À§Ä¡°ªÀ» ¾ò¾î¿Í ÇØ´ç À̹ÌÁö¸¦ ¼ÂÆÃÇØ ÁØ´Ù. unsigned int w = mpRewordBack[rewardCounter]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[rewardCounter]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[rewardCounter]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[rewardCounter]->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[eQUEST_REWARD_EXP_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_EXP_IMG] = true; rewardCounter++; } if( reward->mSxp > 0 ) { /// ±ÛÀÚ Ãâ·Â LPCTSTR sxpStr = cNumberEditBox::FormatNumber( reward->mSxp ); mpRewardLabel[rewardCounter]->SetText( sxpStr ); mpRewardLabel[rewardCounter]->Show(); ///¼ÂÆÃÇØ¾ß ÇÒ À§Ä¡°ªÀ» ¾ò¾î¿Í ÇØ´ç À̹ÌÁö¸¦ ¼ÂÆÃÇØ ÁØ´Ù. unsigned int w = mpRewordBack[rewardCounter]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[rewardCounter]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[rewardCounter]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[rewardCounter]->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[eQUEST_REWARD_SXP_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_SXP_IMG] = true; rewardCounter++; } if( reward->mMoney > 0 ) { /// ±ÛÀÚ Ãâ·Â LPCTSTR moneyStr = cNumberEditBox::FormatNumber( reward->mMoney ); mpRewardLabel[rewardCounter]->SetText( moneyStr ); mpRewardLabel[rewardCounter]->Show(); ///¼ÂÆÃÇØ¾ß ÇÒ À§Ä¡°ªÀ» ¾ò¾î¿Í ÇØ´ç À̹ÌÁö¸¦ ¼ÂÆÃÇØ ÁØ´Ù. unsigned int w = mpRewordBack[rewardCounter]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[rewardCounter]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[rewardCounter]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[rewardCounter]->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[eQUEST_REWARD_GOLD_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_GOLD_IMG] = true; rewardCounter++; } if( reward->mSkillPoint > 0 ) { /// ±ÛÀÚ Ãâ·Â LPCTSTR spStr = cNumberEditBox::FormatNumber( reward->mSkillPoint ); mpRewardLabel[rewardCounter]->SetText( spStr ); mpRewardLabel[rewardCounter]->Show(); ///¼ÂÆÃÇØ¾ß ÇÒ À§Ä¡°ªÀ» ¾ò¾î¿Í ÇØ´ç À̹ÌÁö¸¦ ¼ÂÆÃÇØ ÁØ´Ù. unsigned int w = mpRewordBack[rewardCounter]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[rewardCounter]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[rewardCounter]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[rewardCounter]->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[eQUEST_REWARD_SP_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_SP_IMG] = true; rewardCounter++; } isShowDefaultIcon = UpdateRewardIcon( reward, mDefaultIcon ); } /// ¼±Åà º¸»ó ¼¼ÆÃ cQuestReward* selectReward = define->mSelectReward; if( selectReward ) { isShowSelectIcon = UpdateRewardIcon( selectReward, mSelectIcon ); } ///±âº»Áö±Þ À̹ÌÁö¿Í ¼±Åà Áö±Þ À̹ÌÁö À§Ä¡ Á¶Á¤ if( rewardCounter < 3 ) { if( isShowDefaultIcon ) { ///±âº»Áö±Þ À§Ä¡¸¦ ÇÑÄ­ À§·Î ¿Å°Ü¼­ Ç¥½ÃÇÑ´Ù. unsigned int w = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mY + mAbsoluteRect.mTop - REWARD_ITEM_IMG_GAP; mpRewordBackImg[eQUEST_REWARD_BASE_ITEM_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_BASE_ITEM_IMG] = true; if( isShowSelectIcon ) { /// ¼±Åà Áö±Þ À§Ä¡¸¦ ÇÑÄ­ À§·Î ¿Å°Ü¼­ Ç¥½ÃÇÑ´Ù. unsigned int w = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mY + mAbsoluteRect.mTop - REWARD_ITEM_IMG_GAP; mpRewordBackImg[eQUEST_REWARD_SELECT_ITEM_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = true; } else { /// ¼±Åà Áö±Þ À̹ÌÁö ¼û±â±â mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = false; mpCount->Hide(); } } else if( isShowSelectIcon ) { /// ±âº»Áö±Þ À̹ÌÁö ¼û±â±â mIsShowBackImg[eQUEST_REWARD_BASE_ITEM_IMG] = false; /// ¼±Åà Áö±Þ À§Ä¡¸¦ À§·Î 2Ä­ ¿Å°Ü¼­ Ç¥½ÃÇÑ´Ù. unsigned int w = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mY + mAbsoluteRect.mTop - (REWARD_ITEM_IMG_GAP*2); mpRewordBackImg[eQUEST_REWARD_SELECT_ITEM_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = true; } else { //±âº»Áö±Þ, ¼±ÅÃÁö±Þ À̹ÌÁö ¼û±â±â mIsShowBackImg[eQUEST_REWARD_BASE_ITEM_IMG] = false; mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = false; mpCount->Hide(); } } else { if( isShowDefaultIcon ) { ///±âº»Áö±Þ À§Ä¡¸¦ ¿ø·¡ ÀÚ¸®¿¡ Ç¥½ÃÇÑ´Ù. unsigned int w = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[eQUEST_REWARD_BASE_ITEM_IMG]->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[eQUEST_REWARD_BASE_ITEM_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_BASE_ITEM_IMG] = true; if( isShowSelectIcon ) { /// ¼±Åà Áö±Þ À§Ä¡¸¦ ¿ø·¡ ÀÚ¸®¿¡ Ç¥½ÃÇÑ´Ù. unsigned int w = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mY + mAbsoluteRect.mTop; mpRewordBackImg[eQUEST_REWARD_SELECT_ITEM_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = true; } else { /// ¼±Åà Áö±Þ À̹ÌÁö ¼û±â±â mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = false; mpCount->Hide(); } } else if( isShowSelectIcon ) { /// ±âº»Áö±Þ À̹ÌÁö ¼û±â±â mIsShowBackImg[eQUEST_REWARD_BASE_ITEM_IMG] = false; /// ¼±Åà Áö±Þ À§Ä¡¸¦ ÇÑÄ­ À§·Î ¿Å°Ü¼­ Ç¥½ÃÇÑ´Ù. unsigned int w = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mWidth; unsigned int h = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mHeight; unsigned int x = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mX + mAbsoluteRect.mLeft; unsigned int y = mpRewordBack[eQUEST_REWARD_SELECT_ITEM_IMG]->mSkinInfo->mY + mAbsoluteRect.mTop - REWARD_ITEM_IMG_GAP; mpRewordBackImg[eQUEST_REWARD_SELECT_ITEM_IMG]->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = true; } else { //±âº»Áö±Þ, ¼±ÅÃÁö±Þ À̹ÌÁö ¼û±â±â mIsShowBackImg[eQUEST_REWARD_BASE_ITEM_IMG] = false; mIsShowBackImg[eQUEST_REWARD_SELECT_ITEM_IMG] = false; mpCount->Hide(); } } /// ¾ÆÀÌÄÜ À§Ä¡ ¾÷µ¥ÀÌÆ® if( isShowDefaultIcon ) { int relativeY = mpRewordBackImg[eQUEST_REWARD_BASE_ITEM_IMG]->GetScreenPosY() - mAbsoluteRect.mTop + 3; for( unsigned int i = 0; i < 5; ++i ) { cIcon* pIcon = mDefaultIcon[i].icon; if( pIcon ) { pIcon->SetRelativePos( cUIPos( pIcon->GetRelativeRect().mLeft, relativeY ) ); } else { assert(0); return false; } } } if( isShowSelectIcon ) { int relativeY = mpRewordBackImg[eQUEST_REWARD_SELECT_ITEM_IMG]->GetScreenPosY() - mAbsoluteRect.mTop + 3; for( unsigned int i = 0; i < 5; ++i ) { cIcon* pIcon = mSelectIcon[i].icon; if( pIcon ) { pIcon->SetRelativePos( cUIPos( pIcon->GetRelativeRect().mLeft, relativeY ) ); } else { assert(0); return false; } } mpCount->SetRelativePos( cUIPos(mpCount->GetRelativeRect().mLeft, relativeY + 7) ); mpCount->Show(); } return true; } bool cQuestWindow::UpdateRewardIcon( cQuestReward* reward, sRewardIcon* icon ) { bool retValue = false; /// ¾ÆÀÌÄÜ ¼¼ÆÃ int iconIdx = 0; cItemDefine* itemDefine = 0; for( int i = 0; i < QUEST_ITEM_MAX; ++i ) { sQuestItem& item = reward->mRewardItem[i]; itemDefine = ITEMMAN->GetItemDefine( item.itemIndex ); if( !itemDefine ) continue; cIconParam* pParam = itemDefine->GetIconParam(); if( pParam && iconIdx < 5 ) { sRewardIcon* rewardIcon = (icon + iconIdx); if( rewardIcon && rewardIcon->icon ) { cIcon* icon = rewardIcon->icon; rewardIcon->index = item.itemIndex; icon->SetIconType( eICON_ITEM ); icon->ChangeImage( pParam, ICON_SIZE, ICON_SIZE ); icon->SetNumber( item.count ); bool show = ( itemDefine->GetCapacity() > 1 ) ? true : false; icon->ShowNumber( show ); iconIdx++; retValue = true; } } else { assert(0); } } /// ¹öÇÁ ¼¼ÆÃ for( int i = 0; i < QUEST_BUFF_MAX; ++i ) { unsigned long buffIdx = reward->mRewardBuff[i]; sInfluenceScript* pInfo = SKILLSCRIPT->GetInfluenceInfo( buffIdx ); if( pInfo ) { cIconParam* pParam = UIMAN->GetIconParam( pInfo->mIconIdx ); if( pParam && iconIdx < 5 ) { sRewardIcon* rewardIcon = (icon + iconIdx); if( rewardIcon && rewardIcon->icon ) { cIcon* icon = rewardIcon->icon; rewardIcon->index = buffIdx; icon->SetIconType( eICON_SKILL ); icon->ShowNumber( false ); icon->ChangeImage( pParam, ICON_SIZE, ICON_SIZE ); iconIdx++; retValue = true; } } else { assert(0); } } } /// ŸÀÌÆ² º¸»ó ¼¼ÆÃ if( reward->mGiveTitleIndex > 0 ) { cTitleDefine* define = TITLEMAN->GetTitleDefine( reward->mGiveTitleIndex ); if( define ) { sInfluenceScript* pInfo = SKILLSCRIPT->GetInfluenceInfo( define->mInfluenceIndex ); if( pInfo ) { cIconParam* pParam = UIMAN->GetIconParam( pInfo->mIconIdx ); if( pParam && iconIdx < 5 ) { sRewardIcon* rewardIcon = (icon + iconIdx); if( rewardIcon && rewardIcon->icon ) { cIcon* icon = rewardIcon->icon; rewardIcon->index = define->mInfluenceIndex; icon->SetIconType( eICON_SKILL ); icon->ShowNumber( false ); icon->ChangeImage( pParam, ICON_SIZE, ICON_SIZE ); iconIdx++; retValue = true; } } else { assert(0); } } } } return retValue; } void cQuestWindow::OnProcess( unsigned long deltaTime, unsigned long accumTime ) { cUIWindow::OnProcess( deltaTime, accumTime ); if( mTimeLine == -1 || mSelectQuestIndex <= 0 ) return; /// ½Ã°£°»½Å long restTime = QUESTMAN->GetQuestRestTime( mSelectQuestIndex ); int time = (int)(restTime*0.001); if( time >= 0 ) { int h = time / 3600; int m = time / 60; int s = time % 60; cStringT th,tm,ts; if( h != 0 ) th.Format( GAMERESOURCEMAN->GetGameText( 70 ), h ); if( m != 0 ) tm.Format( GAMERESOURCEMAN->GetGameText( 71 ), m ); ts.Format( GAMERESOURCEMAN->GetGameText( 72 ), s ); th = (th+tm+ts); cStringT timeStr; timeStr.Format( GAMERESOURCEMAN->GetGameText( 471 ), (LPCTSTR)th.Cstr() ); mpDescBox->UpdateRowText( mTimeLine, (LPCTSTR)timeStr.Cstr() ); } } void cQuestWindow::OnRender( cUIFontItemKeeper* pKeeper ) { if( mVisible == false ) return; /// À̹ÌÁö ·»´õ¸µ if( mpImage ) mpImage->Draw(); for( unsigned int idx = 0; idx < eQUEST_REWARD_IMG_MAX; ++idx ) { if( mIsShowBackImg[idx] ) { mpRewordBackImg[idx]->Draw(); } } /// ÀÚ½Ä ·»´õ¸µ cChildList::cIterator i = mChildList.Begin(); cChildList::cIterator end = mChildList.End(); for( ; i != end; ++i ) { if( ((cUINode*)(*i))->IsVisible() == true ) { ((cUINode*)(*i))->OnRender(pKeeper); } } pKeeper->DrawAll(); } /// ¸ðµçÁ¤º¸´Â Äù½ºÆ®¸Å´ÏÀúÀÇ Äù½ºÆ®Á¤º¸, ¹è¿­À妽º·Î ÂüÁ¶ bool cQuestWindow::AddQuest( unsigned int arrIdx, unsigned long questIdx, bool complete, bool IsNewQuest ) { cQuestDefine* define = QUESTMAN->GetQuestDefine( questIdx ); if( !define ) { assert(0); return false; } /// cStringT title; unsigned long textColor = mDefaultColor; title.Format( GAMERESOURCEMAN->GetGameText( 444 ), define->mLevel, GAMERESOURCEMAN->GetQuestTitle( define->mTitleIndex ) ); ///¹Ýº¹ üũ // if( define->mRepeatType == eQUEST_REPEAT ) // title.Append( GAMERESOURCEMAN->GetGameText( 472 ) ); ///Àú ·¹º§ Äù½ºÆ® üũ. short lowLevel = TRIGGERMAN->GetLowLevel( questIdx ); if( lowLevel != 0 && lowLevel <= (HERO->GetLevel() - LOW_LEVEL_QUEST_GAP) ) { title.Append( GAMERESOURCEMAN->GetGameText( 476 ) ); textColor = COLOR_LOW_LEVEL_QUEST; } ////¿Ï·á üũ if( complete == true ) title.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); /// üũ »óÅ °¡Á®¿À±â bool check = QUESTMAN->IsSelectQuest( questIdx ); /// ¸ÊÀÌ Á¸ÀçÇϸé Á¤º¸ ¼¼ÆÃ if( define->mTakeMapIndex > 0 ) { mpListBox->AddHighData( define->mTakeMapIndex, GAMERESOURCEMAN->GetMapName( define->mTakeMapIndex ), COLOR_YELLOW, 0, mpHighImage ); /// Äù½ºÆ® Á¤º¸ »ðÀÔ mpListBox->AddLowData( define->mTakeMapIndex, (LPCTSTR)title.Cstr(), textColor, (void*)arrIdx, mpLowImage, check ); } else { assert(0); } /// »õ·Î¿î Äù½ºÆ® ½Àµæ ½Ã ÀÌÆåÆ® º¸¿©ÁÖ±â if( IsNewQuest ) { if( complete == true ) { /// ȹµæ °ú µ¿½Ã¿¡ ¿Ï·áÀÎ °æ¿ì NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_get_04.nif", &trans, false, true ); SOUNDSYS->Play2DSound( 2011 ); } else { /// Äù½ºÆ® ½Å±Ô ȹµæ È¿°ú NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_get_03.nif", &trans, false, true ); SOUNDSYS->Play2DSound( 2010 ); } } return true; } void cQuestWindow::SetCheck( unsigned int arrIdx, unsigned long questIdx, bool check ) { cQuestDefine* define = QUESTMAN->GetQuestDefine( questIdx ); if( define ) { sFolderData* data = mpListBox->GetFolderDataByExtra( define->mTakeMapIndex, (void*)arrIdx ); if( data ) { data->mCheck = check; } else assert(0); } } void cQuestWindow::SetCompleteQuest( unsigned int arrIdx, unsigned long questIdx ) { cQuestDefine* define = QUESTMAN->GetQuestDefine( questIdx ); if( define ) { unsigned long textColor = mDefaultColor; cStringT title; title.Format( GAMERESOURCEMAN->GetGameText( 444 ), define->mLevel, GAMERESOURCEMAN->GetQuestTitle( define->mTitleIndex ) ); /// ¹Ýº¹¿©ºÎ // if( define->mRepeatType == eQUEST_REPEAT ) // title.Append( GAMERESOURCEMAN->GetGameText( 472 ) ); ///Àú ·¹º§ Äù½ºÆ® üũ. short lowLevel = TRIGGERMAN->GetLowLevel( questIdx ); if( lowLevel != 0 && lowLevel <= (HERO->GetLevel() - LOW_LEVEL_QUEST_GAP) ) { title.Append( GAMERESOURCEMAN->GetGameText( 476 ) ); textColor = COLOR_LOW_LEVEL_QUEST; } title.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); sFolderData* data = mpListBox->GetFolderDataByExtra( define->mTakeMapIndex, (void*)arrIdx ); if( data ) { data->mText = title; data->mTextColor = textColor; } else assert(0); /// Äù½ºÆ® Á¶°Ç ÃæÁ· ÀÌÆåÆ® º¸¿©ÁÖ±â NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_get_04.nif", &trans, false, true ); SOUNDSYS->Play2DSound( 2011 ); } } /// Äù½ºÆ® ¼³¸í¹× ÁøÇà»óȲ Ãâ·Â void cQuestWindow::UpdateQuestInfo() { if( !mVisible ) return; if( mpDelete ) mpDelete->SetEnabled( false ); if( !mpDescBox ) { assert(0); return; } if( mpListBox->GetRowCount() == 0 ) return; /// ÃʱâÈ­ mpDescBox->Clear(); mSelectQuestIndex = 0; mTimeLine = -1; /// ¼±ÅÃµÈ Äù½ºÆ®ÀÇ º¸»óÁ¤º¸ ¼¼ÆÃ unsigned int row = mpListBox->GetSelectRow(); unsigned int column = mpListBox->GetSelectRowColumn(); /// »óÀ§¿­À» ¼±ÅÃÇÏ¿´À» °æ¿ì. if( column == 0 ) return; unsigned int arrIdx = (unsigned int)mpListBox->GetColumnData( row, column ); unsigned char status = QUESTMAN->GetQuestStatus( arrIdx ); mSelectQuestIndex = QUESTMAN->GetQuestIndex( arrIdx ); cQuestDefine* define = QUESTMAN->GetQuestDefine( mSelectQuestIndex ); if( !define ) { assert(0); return; } /// [ ¸ñÇ¥ ] mpDescBox->AddNewRow( GAMERESOURCEMAN->GetGameText( 450 ), COLOR_GREEN ); if( status == eQUEST_COMPLETE ) { mpDescBox->AddNewRow( GAMERESOURCEMAN->GetGameText( 449 ), mDefaultColor ); } else if( status == eQUEST_PLAYING ) { /// ³²Àº½Ã°£ ¹®ÀÚ¿­ Ãâ·Â ( Äù½ºÆ®¸Å´ÏÀú¿¡¼­ °¡Á®¿À±â ) cQuestLimit* limit = define->mQuestLimit; if( limit && limit->mTimeType != eTIME_NONE ) { long restTime = QUESTMAN->GetQuestRestTime( mSelectQuestIndex ); cStringT time; int h = restTime / 3600; int m = restTime / 60; int s = restTime % 60; cStringT th,tm,ts; if( h != 0 ) th.Format( GAMERESOURCEMAN->GetGameText( 70 ), h ); if( m != 0 ) tm.Format( GAMERESOURCEMAN->GetGameText( 71 ), m ); ts.Format( GAMERESOURCEMAN->GetGameText( 72 ), s ); th = (th+tm+ts); cStringT timeStr; timeStr.Format( GAMERESOURCEMAN->GetGameText( 471 ), (LPCTSTR)th.Cstr() ); mTimeLine = mpDescBox->AddNewRow( (LPCTSTR)timeStr.Cstr(), mDefaultColor ); } /// ÁøÇàÁ¤º¸ ±¸¼º ¹× ¼¼ÆÃ cQuestDuty* duty = define->mQuestDuty; if( duty ) { cStringT str; __int64 check = QUESTMAN->GetProgress( arrIdx ); __int64 end = 0xFF; for( unsigned int i = 0; i < MAX_DUTY; ++i ) { eDutyType type = duty->mDuty[i].dutyType; unsigned long targetIdx = duty->mDuty[i].targetIdx; unsigned int count = duty->mDuty[i].count; unsigned long skillIndex = duty->mDuty[i].skillIndex; if( type == eDUTY_NONE ) break; /// Á¤º¸ Ãâ·Â switch( type ) { case eDUTY_HUNT: /// »ç³É { LPCTSTR monName = GAMERESOURCEMAN->GetMonsterName( targetIdx ); str.Format( GAMERESOURCEMAN->GetGameText( 451 ), monName, count ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); /// ÁøÇàÁß else { __int64 cnt = check & end; for( unsigned int b = 0; b < i; ++b) cnt = cnt >> 8; cStringT str1; str1.Format( GAMERESOURCEMAN->GetGameText( 459 ), (unsigned int)cnt, count ); str += str1; } mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; case eDUTY_COLLECT: /// ¼öÁý { LPCTSTR itemName = ITEMMAN->GetItemName( targetIdx ); str.Format( GAMERESOURCEMAN->GetGameText( 453 ), itemName, count ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); /// ÁøÇàÁß else { __int64 cnt = check & end; for( unsigned int b = 0; b < i; ++b) cnt = cnt >> 8; cStringT str1; str1.Format( GAMERESOURCEMAN->GetGameText( 459 ), (unsigned int)cnt, count ); str += str1; } mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; case eDUTY_MEET: /// npc ¸¸³ª±â { LPCTSTR npcName = GAMERESOURCEMAN->GetNpcName( targetIdx ); str.Format( GAMERESOURCEMAN->GetGameText( 455 ), npcName ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; case eDUTY_ACTIVESKILL: // ½ºÅ³¹ßµ¿ { LPCTSTR skillName = GAMERESOURCEMAN->GetSkillNameText( skillIndex ); LPCTSTR monName = GAMERESOURCEMAN->GetMonsterName( targetIdx ); str.Format( GAMERESOURCEMAN->GetGameText( 456 ), skillName, monName ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; case eDUTY_ENHANCE: { str.Format( GAMERESOURCEMAN->GetGameText( 457 ) ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; case eDUTY_PUTCARD: { str.Format( GAMERESOURCEMAN->GetGameText( 458 ) ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; case eDUTY_PVPJOIN: case eDUTY_PVPWIN: case eDUTY_PVPLOSE: { unsigned int pvpIndex = 0; switch( targetIdx ) { case MAP_DEATHMATCH: pvpIndex = 859; break; case MAP_FLAG: pvpIndex = 860; break; } unsigned int textIndex = 0; switch( type ) { case eDUTY_PVPJOIN: textIndex = 465; break; case eDUTY_PVPWIN: textIndex = 466; break; case eDUTY_PVPLOSE: textIndex = 467; break; } str.Format( GAMERESOURCEMAN->GetGameText( textIndex ), GAMERESOURCEMAN->GetGameText( pvpIndex ), count ); /// ¿Ï·á if( (check & end) == (define->mComplete & end) ) str.Append( GAMERESOURCEMAN->GetGameText( 445 ) ); /// ÁøÇàÁß else { __int64 cnt = check & end; for( unsigned int b = 0; b < i; ++b) cnt = cnt >> 8; cStringT str1; str1.Format( GAMERESOURCEMAN->GetGameText( 459 ), (unsigned int)cnt, count ); str += str1; } mpDescBox->AddNewRow( (LPCTSTR)str.Cstr(), mDefaultColor ); } break; } /// ¿Ï·á üũ¿ë end = end << 8; } } } /// ¶óÀÎ ¶ç±â mpDescBox->AddEmptyRow(1); /// ¹Ýº¹¿©ºÎ // if( define->mRepeatType == eQUEST_REPEAT ) // { // mpDescBox->AddNewRow( GAMERESOURCEMAN->GetGameText( 472 ), mDefaultColor ); // mpDescBox->AddEmptyRow(1); // } /// [ÀÇ·ÚÁ¤º¸] - ÀÇ·ÚÀÚ, ÀÇ·Ú¸Ê cStringT info, mapinfo; mpDescBox->AddNewRow( GAMERESOURCEMAN->GetGameText( 440 ), COLOR_GREEN ); sNPCList* pNpc = NPCSCRIPT->GetNPCList( define->mTakeNpcIndex ); if( pNpc ) { info.Format( GAMERESOURCEMAN->GetGameText( 441 ), pNpc->mName ); mpDescBox->AddNewRow( (LPCTSTR)info.Cstr(), mDefaultColor ); } mapinfo.Format( GAMERESOURCEMAN->GetGameText( 442 ), GAMERESOURCEMAN->GetMapName( define->mTakeMapIndex ) ); mpDescBox->AddNewRow( (LPCTSTR)mapinfo.Cstr(), mDefaultColor ); mpDescBox->AddEmptyRow(1); mpDescBox->AddNewRow( GAMERESOURCEMAN->GetGameText( 452 ), COLOR_GREEN ); cUIFuncTextParam textParam; textParam.mName = HERO->GetName(); for( unsigned int i = 0; i < define->mDestLineNum; ++i ) { mpDescBox->AddFucnText( QUESTMAN->GetNpcTextNode( define->mDestIndex + i), &textParam ); } // Æ©Å丮¾ó Çü Äù½ºÆ®°¡ ¾Æ´Ï¸é »èÁ¦ °¡´É if( define->mType != eQUEST_TYPE_TUTORIAL ) { if( mpDelete ) mpDelete->SetEnabled( true ); } } void cQuestWindow::SetSelectCount( unsigned int count ) { if( mpCount ) { cStringT str; str.Format( _T("%d"), count ); /// ¼¼ÆÃ mpCount->SetText( (LPCTSTR)str.Cstr() ); } } void cQuestWindow::UpdateCount( unsigned int progress, unsigned int complete ) { if( mpProgressCount && mpCompleteCount ) { cStringT str; str.Format( _T("%d"), progress ); mpProgressCount->SetText( (LPCTSTR)str.Cstr() ); str.Format( _T("%d"), complete ); mpCompleteCount->SetText( (LPCTSTR)str.Cstr() ); } } void cQuestWindow::ClearLabels() { for( unsigned int idx = 0; idx < eQUEST_REWARD_LABEL_MAX; ++idx ) { mpRewardLabel[idx]->Hide(); mIsShowBackImg[idx] = false; } } void cQuestWindow::SetShowInfo( bool show ) { if( mpViewInfo ) { /// press : Äѱâ, no press : ²ô±â mpViewInfo->SetPress( show ); } } bool cQuestWindow::IsShowInfo() { return ( mpViewInfo ) ? mpViewInfo->IsPress() : false; } void cQuestWindow::OnNetLock( int lockTry ) { if( mpDelete ) mpDelete->NetLock( lockTry ); } void cQuestWindow::OnNetUnLock( int lockTry ) { if( mpDelete ) mpDelete->NetUnLock( lockTry ); } void cQuestWindow::GetHideMapCategorySet( tHashSet& mapSet ) { if( mpListBox ) mpListBox->GetClosedCategory( mapSet ); } void cQuestWindow::SetHideMapCategory( unsigned long mapIndex ) { if( mpListBox ) mpListBox->SetClosedCategory( mapIndex ); } //------------------------------------------------------------------------- cQuestListFolder::cQuestListFolder() : mpOnImage(0) , mpOnSkin(0) , mShowOn(false) { } cQuestListFolder::~cQuestListFolder() { SAFE_DELETE( mpOnImage ); } void cQuestListFolder::Clear() { cListFolderBox::Clear(); mShowOn = false; } bool cQuestListFolder::OnCreate( cUINodeProperty* pproperty ) { if( cListFolderBox::OnCreate( pproperty ) == false ) return false; cUISkin* pSkin = UIMAN->GetSkin(); if( !pSkin ) { assert(0); return false; } mpOnSkin = pSkin->GetNodeSkin( "Quest_ChaseOn" ); if( mpOnSkin && mpOnSkin->mpTexture ) { mpOnImage = new cPlaneObject; unsigned short tx = (unsigned short)mpOnSkin->mSkinInfo->mTexX; unsigned short ty = (unsigned short)mpOnSkin->mSkinInfo->mTexY; unsigned short tw = (unsigned short)mpOnSkin->mSkinInfo->mTexWidth; unsigned short th = (unsigned short)mpOnSkin->mSkinInfo->mTexHeight; unsigned int x = GetAbsoluteRect().mLeft + GetAbsoluteRect().GetWidth() - tw; unsigned int y = GetAbsoluteRect().mTop; if( mpOnImage->Create( mpOnSkin->mpTexture, x, y, tw, th, tx, ty, tx + tw, ty + th ) == false ) { assert( 0 && "failed to create mpOnSkin image"); return false; } } else return false; return true; } void cQuestListFolder::UpdateRect() { cListFolderBox::UpdateRect(); UpdateSelectImage(); } void cQuestListFolder::OnRender( cUIFontItemKeeper* pKeeper ) { cListFolderBox::OnRender( pKeeper ); if( mpOnImage && mShowOn ) { if( mSelectedColumnIdx >= mTopColumnIdx && mSelectedColumnIdx < mTopColumnIdx + mMaxRowInPage && mSelectedRowColumn > 0 ) mpOnImage->Draw(); } } // ÇØ´ç µ¥ÀÌÅ͸¦ °¡Áö°íÀÖ´Â Ä÷³ ¸®ÅÏ // ÇØ´ç ¿­ÀÌ Á¢ÇôÀÖÀ¸¸é ¸®ÅÏ ¾ÈÇÔ int cQuestListFolder::FindColumnByExtra( unsigned short mapIndex, int arrIndex ) { int totalCount = 0; for( unsigned int ri = 0; ri < mRows.GetSize(); ++ri ) { sRowData* p = (sRowData*)mRows[ri]; if( p && p->mColumes.GetSize() > 0 ) { sFolderData* data = (sFolderData*)p->mColumes[0]; if( !data ) { assert(0); continue; } if( data->key != mapIndex ) { if( data->mCheck == true ) totalCount += p->mColumes.GetSize(); else totalCount += 1; } else { // Á¢ÇôÀÖÀ¸¸é ¸®ÅÏ if( data->mCheck == false ) return -1; /// µ¿ÀÏ µ¥ÀÌÅÍ °Ë»ö for( unsigned int ci = 0; ci < p->mColumes.GetSize(); ++ci ) { sFolderData* data = (sFolderData*)p->mColumes[ci]; if( !data ) { assert(0); continue; } if( ci > 0 && data->mExtraData == (void*)arrIndex ) return totalCount; totalCount++; } break; } } } return -1; } void cQuestListFolder::UpdateSelectImage() { if( !mpSelectImage || !mpOnImage ) return; mShowSelect = true; int scrollWidth = 0; if( mpScrollBar && mpScrollBar->IsVisible() ) scrollWidth = mpScrollBar->GetAbsoluteRect().GetWidth(); cUIRect imageRc; imageRc.mLeft = GetAbsoluteRect().mLeft; imageRc.mRight = imageRc.mLeft + GetAbsoluteRect().GetWidth() - scrollWidth; imageRc.mTop = GetAbsoluteRect().mTop + ( mRowHeight * ( mSelectedColumnIdx - mTopColumnIdx) ); imageRc.mBottom = imageRc.mTop + mRowHeight; /// À§Ä¡ ¼¼ÆÃ mpSelectImage->SetScreenXY( (unsigned short)imageRc.mLeft, (unsigned short)imageRc.mTop ); mpSelectImage->SetScreenWH( (unsigned short)imageRc.GetWidth(), (unsigned short)imageRc.GetHeight() ); // ÃßÀû À̹ÌÁö ¼¼ÆÃ if( mpOnSkin ) { int tw = (short)mpOnSkin->mSkinInfo->mTexWidth; int th = (short)mpOnSkin->mSkinInfo->mTexHeight; int x = imageRc.mRight - tw; int y = (int)(imageRc.mTop + (int)(mRowHeight - th) * 0.5f); mpOnImage->SetScreenXY( x, y ); } }