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

229 lines
7.7 KiB
C++

#pragma once
//#include <vector>
//#include "SUIWnd.h"
#include "SUIDefine.h"
using std::vector;
class SSkillSlot;
class SUIDisplayInfo;
class SUICreatureSkillWnd : public SUIWnd
{
public:
SUICreatureSkillWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo )
: SUIWnd( pGameManager )
, m_pDisplayInfo( pDisplayInfo )
, m_DragIndex(-1)
, m_pOverBreed( NULL )
, m_pOverBreedIcon( NULL )
, m_pEvolutionRankIcon( NULL )
, m_strOverBreedPropertyTag( "" )
{
}
virtual ~SUICreatureSkillWnd();
virtual void* Perform( KID id, KArg& msg );
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
virtual bool InitControls( KPoint kPos );
virtual void ProcMsgAtStatic( SGameMessage* pMsg );
virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true );
virtual bool InitData( bool bReload = false );
public:
vector<SSkillSlot*> m_vecActiveSkillList;
vector<SSkillSlot*> m_vecPassiveSkillList;
private:
// 윈도우 ================================
////////////////////////////// MJ
void CreateTab();
void RefreshCreatureInfo();
// void RefreshCreatureQuickSlots(); // 2011.11.29 - servantes : 쓰이지 않음
void InitCreatureQuickSlots();
void CreateControls ();
void _setSkillLevel( int nIndex, int nLevel, SSkillSlot* pSkill );
// 잡레벨 ================================
void RequestJobLvUP ();
// 스킬사용 ==============================
void RequestUseSkill ();
// 탭 ====================================
void SelectTab();
bool IsActiveTab () const;
// 스크롤바 ==============================
void ResizeScrollbar ( int nOldHeight );
void RefreshScrollbar ();
// 직업 ==================================
void SetJP ();
void SetJName ();
void SetJLvHistory ();
void SetPrevJLevel ( int nLevel );
void SetCurJLevel ( int nLevel, int nJP );
void SetNextJLevel ( int nLevel );
bool ShowCurJLevel ( string str, int nLevel );
// 스킬리스트 ============================
void FreeSkillList ();
/// skill_list 로 온 데이터 갱신
void UpdateSkill ( class SSkillSlot* pSkill, bool bActive = true );
void RefreshSkillInfo ();
void SetSkillData ( class SSkillSlot* pSkill, int nIndex, bool bShow );
int GetSkillID ( int nIndex );
bool IsExistSkill ( int nSkillID, bool bActive = true );
// 스킬슬롯 ==============================
void EnableSlot ( int nMode = -1, bool bShow = false, bool bPassive = 1/*TAB_PASSIVE*/, int nSkillID = -1 );
void DisableSlot ( int nIndex );
void DisableAllSlot ( bool bShow = false );
void RefreshActiveSkillSlot ( int nRange );
void RefreshPassiveSkillSlot ( int nRange );
void RefreshSkillSlot ( int nRange = 0);
void UpdateCreatureQuickSlots();
// 2010.07.15 - prodongi
void RefreshAddedSkillList();
// 선택바 ================================
void HideSelectBar ();
void ShowSelectBar ( int nIndex );
// 스킬업/다운 ===========================
void SkillUp ( int nIndex );
void SkillDown ( int nIndex );
// 드래그앤드랍 ==========================
int GetSkillIDByCtrlName ( const char* szCtrlName ) const;
int GetUseLevel ( int nSkillID ) const;
int GetActiveSkillID ( const char* szCtrlName ) const;
int GetPassiveSkillID ( const char* szCtrlName ) const;
struct QUICK_SKILL* GetQuickSkillDByCtrlName( const char* szCtrlName ) const;
struct QUICK_SKILL* GetActiveQuickSkill( const char* szSprName ) const;
// 스킬 쿨링 타임 ==========================
void ShowClockBox( int nSkillID, bool bDiable = false );
void CancelSkill( int nSkillID );
// 퀵슬롯
int GetIndexByCtrlID( const char* szControlID );
private:
SUIDisplayInfo* m_pDisplayInfo;
bool m_bShowChildWnd;
int m_nSysMenuPosX; // 좌측 메뉴의 좌표
int m_nSysMenuPosY;
int m_nMaxLine; // 화면에 표시되는 라인 갯수
int m_nTabType;
int m_nSelSkillPos; // 선택한 스킬의 위치
int m_nScrollPos; // 스크롤 위치
// 퀵슬롯
int m_DragIndex;
KRect m_rtQuickSlotRect; // 장착 영역
KRect m_rtSlotRect; // 장착 해제 영역
bool m_bIsQuickSlotItem; // 장착한 스킬
KUIControlStatic* m_pOverBreed; // 오버 브리드 컨트롤
KUIControlStatic* m_pOverBreedIcon; // 오버 브리드 아이콘
KUIControlIconStatic* m_pEvolutionRankIcon; // 진화 등급 아이콘
string m_strOverBreedPropertyTag; // 오버브리드 속성 태그 <font:>,<size:>.. <etc>
};
//-----------------------------------------------------------------------------------------------------------------
// 크리쳐 스킬 배우기 윈도우
//-----------------------------------------------------------------------------------------------------------------
class SUICreatureSkillFundWnd : public SUIWnd
{
public:
SUICreatureSkillFundWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo );
virtual ~SUICreatureSkillFundWnd( void );
virtual bool InitControls( KPoint kPos );
virtual bool InitData( bool bReload = false );
virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true );
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
virtual void ProcMsgAtStatic( SGameMessage* pMsg );
private:
void CreateControls( void );
// 스킬투자 리스트 ==========================================================
bool IsSkill( int nIndex, int nGrade );
void RefreshSkillInfo( void );
int GetEvolution( const class SCreatureInfo& creatureInfo );
void SetSkillData( const SkillTreeEx* pSkillTree, int nIndex, bool bShow );
bool GetSkillID( int& outId, int& outLv, int index, int grade );
bool GetLearnableSkillIDnLv( OUT int& outId, OUT int& outoriginskilliD, OUT int& outLearnableLv, int index, int grade );
void GetSkillList( int nGrade, bool bPassive, vector<const SkillTreeEx>*& pSkillTreeList );
// 스킬투자 슬롯 ==========================================================
void ClearSkillList( void );
void RefreshSkillSlot( int nGrade, int nRange = 0 );
void DisableSlot( int nMode = -1, bool bShow = false );
void DisableAllSlot( bool bShow = false );
void UpdateSkillList( int nTabType, int nGrade );
// 스킬투자 스크롤바 ==========================================================
void RefreshScrollbar( int nGrade );
// 스킬투자 선택바 ==========================================================
void ShowSelectBar( int nIndex, int nGrade );
void HideSelectBar( void );
// 스킬투자 스킬업 ==========================================================
void SkillUP( int nIndex, int nGrade );
// 탭 ========================================================================
void SelectTab( void );
bool IsActiveTab( void ) const;
void InitScrollPosition( void );
bool IsTreeCheck( const vector<SkillTreeEx>& vSkill_list, int nSkillID );
bool ChangeSkill( const SkillTreeEx& rTree, vector<const SkillTreeEx>& rcmpSkillList );
bool IsPrecedentSkillSatisfied( const SkillTreeEx& tree );
void UpdateTab( int nCnt );
private:
SUIDisplayInfo* m_pDisplayInfo;
vector<const SkillTreeEx> m_vActiveSkillTreeList;
vector<const SkillTreeEx> m_vActiveSkillTreeList_1;
vector<const SkillTreeEx> m_vActiveSkillTreeList_2;
vector<const SkillTreeEx> m_vActiveSkillTreeList_3;
vector<const SkillTreeEx> m_vPassiveSkillTreeList;
vector<const SkillTreeEx> m_vPassiveSkillTreeList_1;
vector<const SkillTreeEx> m_vPassiveSkillTreeList_2;
vector<const SkillTreeEx> m_vPassiveSkillTreeList_3;
int m_nTabType;
int m_nGrade;
int m_nMaxLine;
int m_nScrollPos;
};