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

157 lines
5.8 KiB
C++

#pragma once
//#include "SUIWnd.h"
//#include <vector>
//#include <string>
#include "KDeviceManager.h"
#include "KRenderDevice.h"
#include "KUITextureManager.h"
#include "KUIControlQJTV.h"
class SUIDisplayInfo;
class SUIQuestInfoWnd : public SUIWnd
{
public:
SUIQuestInfoWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo )
: SUIWnd( pGameManager )
, m_questCode( 0 )
//, m_nStoryIndex( 0 )
, m_pDisplayInfo( pDisplayInfo )
, m_nCurrentPage( 0 )
, m_nCurrentPage2( 0 )
{}
~SUIQuestInfoWnd();
virtual void Process(DWORD dwTime);
//bool CreateControls( class KUIWndManager* pWndManager );
virtual void Create(KUIWND_CREATE_ARG& CREATE_ARG);
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
virtual void* Perform( KID id, KArg& msg );
virtual void ProcMsgAtStatic( SGameMessage* pMsg );
virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true );
virtual bool InitControls( KPoint kPos );
void SetItemSlot( ItemBase::ItemCode code, int nCount, const char *szIconControl, const char *szNumberControl, const char *szTooltipControl );
void SetControlEnableWithColor( const char* lpControl, bool bEnable, const char* lpColor );
void SetControlEnable( const char * pControlName, bool bEnable );
void SetControlEnableColor( const char * pControlName, const char* lpColor );
void SetControlDisableColor( const char * pControlName, const char* lpColor );
protected:
/// 2011.08.19 str을 태그가 있는 텍스트로 만들어 준다 - prodongi
std::string makeQuestTargetTagText(std::string const& str);
/// 2011.08.19 퀘스트 목표 텍스트 리스트를 뽑는다 - prodongi
void extractQuestTarget();
/// 2011.08.19 m_questTargetList의 목표들을 입력 스트링에서 찾아 태그가 있는 스트링으로 교체해준다 - prodongi
void replaceQuestTargetToText(std::string& text, bool addMobNameDiff = false);
/// 2011.09.29 Refresh()함수는 계속 갱신해 주고 있는데, 퀘스트 데이타를 받을 때만 갱신해주는 함수 - prodongi
void refreshWhenRecv(bool initPage = true);
/// 2011.09.29 난이도 설정 - prodongi
void setDifficultyIcon(QuestBase* base);
/// 2011.09.29 진행 상황 설정 - prodongi
void setProgressStatus(int questCode);
/// 2011.09.29 현재 페이지 설정 - prodongi
void setCurPage(int page);
/// 2011.09.29 보상 포인트 설정 - prodongi
void setCompensationPoint(QuestBase* base);
/// 2011.09.29 보상 아이템 설정 - prodongi
void setCompensationItem(QuestBase* base);
/// 2011.09.29 난이도 툴팁 설정 - prodongi
void setDifficultyToolTip();
/// 2011.09.29 텍스트를 최대 라인수 만큼 짜른다 - prodongi
void splitMaxLineString(std::string const& totalStr, std::vector<std::string>& splitedStr);
/// 2011.09.29 m_vQuestContent를 추출한다 - prodongi
void setQuestContent(QuestBase* base);
/// 2011.10.27 dialog type에 따라서 confirm 버튼을 완료/포기로 나누어 준다 - prodongi
void refreshConfirmButtonStatus(int dialogType);
/// 2011.10.27 실시간으로 업데이트 되는 데이타들, 전체가 업데이트 되면 부하가 크므로 실시간이 필요한 것만 추려냄 - prodongi
void refreshRealTime();
/// 2011.12.06 퀘스트 리스트창의 위치에 따라서 인포창의 오픈 위치를 조정해 준다 - prodongi
void movePosAboutQuestList();
/// 2012.02.15 보상 아이템 개수에 따라서 자동 선택해 준다 - prodongi
void autoSelectOptionalReward(int questCode);
/// 2012. 06. 15 호칭보상 관련 컨트롤 등록 - marine
void addhideCtrl(LPCSTR ctrlName);
/// 2012. 06. 15 호칭보상 컨트롤 show/hide - marine
void setTitleShow(bool bShow);
/// 2012. 06. 15 호칭이름 설정 - marine
void setTitleName();
private:
std::string CoordinateQuestName( int nDifficulty, int nLimitLevel, const std::string & strQuestName );
void Refresh(bool bInit = true, bool initPage = true);
void RefreshStoryText();
void SetQuestRewardItem( bool bNeed ) { m_bNeedRewardItem = bNeed; }
bool IsQuestNeedRewardItem() { return m_bNeedRewardItem; }
void IconFocus( int nIndex );
std::string m_strQuestStory;
//int m_nStoryIndex;
int m_questCode;
int m_questTextId;
std::string m_questNpc;
SUIDisplayInfo* m_pDisplayInfo;
std::vector< std::string > m_vQuestContent;
int m_nCurrentPage;
int m_nCurrentPage2;
bool m_bNeedRewardItem;
int m_rewardFocus;
std::vector< std::string > m_vQuestInfoImgName;
std::vector< K3DTextureSPtr > m_vQuestInfospTexture;
// 2010.06.04 epic6에서 갖고옴 - prodongi
K3DVector m_vecQuestStart;
int m_nDialogType;
struct ITriggerAction
{
virtual void onRelease() = 0;
/// 2011.09.29 유효 체크 - prodongi
virtual bool isValid() const { return true; }
};
struct TriggerInfo
{
TriggerInfo() : action( 0 ) {}
~TriggerInfo() { SAFE_DELETE( action ); }
std::string name;
std::string sound;
ITriggerAction* action;
};
typedef std::map< std::string, TriggerInfo* > t_trigger_controls;
typedef std::vector< SMSG_NPC_DIALOG::DLGMENU > t_trigger_menus;
t_trigger_controls m_triggerControls;
t_trigger_menus m_triggerMenus;
void _AddTriggerControl( const char* control_name
, const char* trigger_name
, const char* trigger_sound
, ITriggerAction* trigger_action = 0 );
void _ClearTriggerControls();
void _AssignTriggers( const std::vector< SMSG_NPC_DIALOG::DLGMENU >& menus );
bool _ReleaseTrigger( const char* control_id );
/// 2011.08.19 추출된 퀘스트 목표 리스트 - prodongi
std::vector<std::string> m_extractQuestTarget;
KUIControlButton* m_ctrlComplete;
KUIControlButton* m_ctrlAccept;
KUIControlButton* m_ctrlReject;
KUIControlButton* m_ctrlGiveUp;
KUIControlStatic* m_ctrlQuestName;
std::vector<KUIControlStatic*> m_vHideCtrl;
};