Files
Leviathan/Client/Game/game/Interface/Quest/SUIQuestDialogWnd.h
T
2026-06-01 12:46:52 +02:00

124 lines
3.7 KiB
C++

/// 2011.09.30 안 쓰임 - prodongi
#ifndef _E7_P4_QUEST_RENEW_
#pragma once
#include "SUIWnd.h"
class SUIDisplayInfo;
class SUIQuestDialogWnd : public SUIWnd
{
public:
SUIQuestDialogWnd
( SGameManager* pGameManager
, SUIDisplayInfo* pDisplayInfo
, int nContentLine = 15
, int nFontSize = 10
, float fMod = 1.0f )
: SUIWnd ( pGameManager )
, m_displayInfo ( pDisplayInfo )
, m_isOpen ( false )
, m_fontSize ( nFontSize )
, m_questCode ( 0 )
, m_questTextId ( 0 )
, m_questContentIndex ( 0 )
, m_questContentPage ( 0 )
, m_questContentLine ( nContentLine )
, m_mod ( fMod )
, m_nCurrentPage( 0 )
{
}
~SUIQuestDialogWnd();
virtual void ProcMsgAtStatic( SGameMessage* pMsg );
virtual void PumpUpMessage( LPCSTR lpszControlID
, DWORD nMessage
, DWORD lparam
, DWORD wparam
);
virtual bool InitControls( KPoint point );
virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true );
protected:
struct ITriggerAction
{
virtual void onRelease() = 0;
};
struct TriggerInfo
{
TriggerInfo() : action( 0 ) {}
~TriggerInfo() { SAFE_DELETE( action ); }
std::string name;
std::string sound;
ITriggerAction* action;
};
// internal
void _PlaySound();
void _Refresh();
void _RefreshQuestDialog();
void _RearrangeScroll( int line );
bool _IsOverContentLine( int line ) { return line > m_questContentLine ? true : false; }
std::string _MakeContentFittable( const std::vector< std::string >& content_list );
void _MakeContentUsing( const QuestBase& quest_data );
void _RefreshHeader( const QuestBase& quest_data );
void _RefreshReward( const QuestBase& quest_data );
std::string _GetExpString( const QuestBase& quest_data );
std::string _GetJPString( const QuestBase& quest_data );
std::string _GetHolicPointString( const QuestBase& quest_data );
std::string _GetRPString( const QuestBase& quest_data );
std::string _GetDefaultRewardString( const QuestBase& quest_data );
std::string _GetOptionalRewardString( const QuestBase& quest_data );
std::string _GetQuestName( const QuestBase& quest_data );
std::string _DecorateNpcName( const char* npc_name );
std::string _DecorateQuestName( int nDificullty
, int nLimitLevel
, const std::string& strQuestName );
std::string _DecorateQuestProgressString( const std::string& strQuestProgress );
void _SetItemSlot( ItemBase::ItemCode code
, int nCount
, const char *szIconControl
, const char *szNumberControl );
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 );
void _SetMod( const QuestBase& quest_data );
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 );
private:
typedef std::map< std::string, TriggerInfo* > t_trigger_controls;
typedef std::vector< SMSG_NPC_DIALOG::DLGMENU > t_trigger_menus;
SUIDisplayInfo* m_displayInfo;
bool m_isOpen;
const int m_fontSize;
int m_questCode;
int m_questTextId;
int m_questContentIndex;
int m_questContentPage;
const int m_questContentLine;
std::string m_questNpc;
float m_mod;
t_trigger_controls m_triggerControls;
t_trigger_menus m_triggerMenus;
std::vector< std::string > m_vQuestContent;
int m_nCurrentPage;
};
#endif