#pragma once #ifdef _PARTY_RENEWAL_X_ // 이름은 메신저윈도우인테 파티창인 듯 -_- #include "SUIWnd.h" class SMessengerMgr; class SUIDisplayInfo; enum RIGHT_CLICK_MENU1 { RMN1_WHISPER = 0, RMN1_ADD_DRIEND, RMN1_BLOCK, RMN1_REQUEST_DEAL, RMN1_REQUEST_FIGHT, RMN1_KICK_OUT, RMN1_CHANGE_LEADER, RMN1_SHOW_BUF, RMN1_SHOW_CREATURE, RMN1_SHOW_SMALL_UI, RMN1_HIDE_BUF, RMN1_HIDE_CREATURE, RMN1_SHOW_BIG_UI, RMN1_FOLLOW, RMN1_MAX }; enum RIGHT_CLICK_MENU2 { RMN2_SHOW_BUF = 0, RMN2_SHOW_CREATURE, RMN2_HIDE_BUF, RMN2_HIDE_CREATURE, RMN2_MAX }; enum CHANGE_VISIBLE_MINMAX_BTN // 2011.09.28 : servantes : 최대, 최소화버튼 보이기/안보이기 { TO_BE_MIN = 0, // 최소화 버튼 보이고 최대화 버튼 숨김 TO_BE_MAX // 최대화 버튼 보이고 최소화 버튼 숨김 }; enum PARTY_UI_ID // 2011.09.28 : servantes : 파티 UI 아이디 { PARTY_UI_ID_SMALL = 0, // 작은 UI PARTY_UI_ID_BIG // 큰 UI }; enum PARTY_UI_SIZE_TYPE // 2011.09.19 : servantes : 파티 타입 { PARTY_UI_SIZE_SMALL = 0, // 작은 상태 PARTY_UI_SIZE_BIG // 큰 상태 }; enum PARTY_UI_LIST_SIZE_TYPE // 2011.09.19 : servantes : 파티 타입 { PARTY_UI_LIST_SIZE_EXTEND = 0, // 리스트를 펼친 상태 PARTY_UI_LIST_SIZE_REDUCE // 리스트를 접은 상태 }; enum SIEGE_UI_STATE_TYPE // 2011.09.19 : servantes : 공격대 UI 종류 { SIEGE_UI_STATE_MY = 0, // 내 파티 SIEGE_UI_STATE_OTHER // 다른 이들의 파티 }; enum PARTY_TYPE // 2011.09.19 : servantes : 파티 타입 { PARTY_NORMAL = 0, // 일반파티 PARTY_BEARROAD, // 베어로드 PARTY_DUNGEON_RAID, // 던전 레이드 PARTY_SIEGE, // 공격대 PARTY_SIEGE_OTHER, // 다른 공격대 PARTY_MAX }; #define SLOT_MAXLINE 8 ///< 보여주는 최대 라인수 struct PartyCreatureInfo { PartyCreatureInfo::PartyCreatureInfo() { hCreature1st = hCreature2nd = hMaster = 0; } PartyCreatureInfo::PartyCreatureInfo(AR_HANDLE _handle, AR_HANDLE _hMaster) :hCreature1st(_handle), hMaster(_hMaster), bRender(true), bRenderUI(true) {}; // 2010.08.30 - prodongi PartyCreatureInfo::PartyCreatureInfo(AR_HANDLE _handle1, AR_HANDLE _handle2, AR_HANDLE _hMaster) :hCreature1st(_handle1), hCreature2nd(_handle2), hMaster(_hMaster), bRender(true), bRenderUI(true) {}; // 2010.08.30 - prodongi bool bRender; bool bRenderUI; // 2010.08.30 - prodongi AR_HANDLE hCreature1st; // 2011.10.12 : servantes : 크리처 핸들 변수명 교체 AR_HANDLE hCreature2nd; // 2011.10.12 : servantes : 크리처 핸들 변수명 교체 AR_HANDLE hMaster; }; class SUIMessengerWnd : public SUIWnd { public: SUIMessengerWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ) : SUIWnd( pGameManager ) , m_pDisplayInfo ( pDisplayInfo ) , m_nTabType( 0 ) {}; virtual ~SUIMessengerWnd(); // 2011.05.17 virtual void *Perform( KID id, KArg& msg ); // #2.1.2.11.1 virtual bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); public: struct SSlotInfoCharacter { enum TYPE { SELECT = 0, LOGOFF, DEAD, HP, MP, NOFRAME, NAME, JOB, NUMBER }; SSlotInfoCharacter(); void Show(bool bShow); KUIWnd* GetControl(int id); KUIControlStatic* pSelect; // select_zone00 KUIControlStatic* pLogOff; // select_logoff00 KUIControlStatic* pDead; // select_dead00 KUIControlGauge* pHP; // party_hp_gauge00 KUIControlGauge* pMP; // party_mp_gauge00 KUIControlStatic* pNoFrame; // panel_inframe_black00 KUIControlStatic* pName; // party_name_text00 KUIControlIconStatic* pJob; // party_member_job00 // KUIControlStatic* pJob; // party_member_job00 KUIControlStatic* pNumber; // mark_number_01 }; struct SSlotInfoCreature { enum TYPE { MAINMARK = 0, SELECT, HP, MP, JOB, DEAD, HP2, MP2, JOB2, DEAD2 }; SSlotInfoCreature(); void Show(bool bShow, int id=-1); KUIWnd* GetControl(int id); KUIControlStatic* pMainMark; // mark_creature_main00 KUIControlStatic* pSelect; // creature_select_zone00 KUIControlGauge* pHP; // creature_hp_gauge00 KUIControlGauge* pMP; // creature_mp_gauge00 KUIControlIconStatic* pJob; // creature_job00 // KUIControlStatic* pJob; // creature_job00 KUIControlStatic* pDead; // creature_dead00 KUIControlGauge* pHP2; // creature_hp_gauge00 KUIControlGauge* pMP2; // creature_mp_gauge00 KUIControlIconStatic* pJob2; // creature_job00 // KUIControlStatic* pJob2; // creature_job00 KUIControlStatic* pDead2; // creature_dead00 }; private: // 생성 ========================= void CreateControls(); public: void DisableSlots(); private: void DisableCreatureSlot( AR_HANDLE hMaster ); // void DisableCreature2ndSlot( AR_HANDLE hMaster ); void DisableCreatureSlot( int nIndex ); // 첫번째, 두번? 크리처 전부 적용 void MoveSlot( int nIndex, int nY ); void MoveCreatureSlot( int nIndex, int nY ); void ChangeSize(); void UpdateCreatureData_N_UI( int nPos, AR_HANDLE hMaster ); bool GetCreature( AR_HANDLE hMaster, int nIndex, PartyCreatureInfo& rCreatureInfo ); int GetCreatureIndex( AR_HANDLE handle ); bool IsAddCreature( AR_HANDLE handle, bool bMaster=false ); int AddCreature( AR_HANDLE handle ); //void AddCreature( int nIndex ); // 2010.08.30 - prodongi bool ChangeCreature( AR_HANDLE handle ); bool ChangeMasterCreature( AR_HANDLE hMaster ); void LeaveMaster( AR_HANDLE hMaster ); int LeaveCreature( AR_HANDLE handle ); int RemoveCreature( AR_HANDLE handle ); //void RemoveCreature( int nIndex ); // 2010.08.30 - prodongi void setRenderCreatureUI(int index, bool render); // 2010.08.30 - prodongi AR_HANDLE GetMaster( AR_HANDLE handle ); class SGameAvatarEx* GetObject( AR_HANDLE handle ); bool SetPlayerCreatureData( int nPos, AR_HANDLE hMaster ); bool SetCreatureData( int nPos, AR_HANDLE handle ); bool SetCreature2ndData( int nPos, AR_HANDLE handle ); void RefreshCreatureSlots(); SGameAvatarEx* GetPlayerPtr( int nIndex ); public: // 슬롯 ========================= void RefreshSlots(); void RefreshEnableSlots(); void SetMemberData( const char* szName, int nPos ); void SetPartyMemberData( const char* szName, int nPos ); void RefreshPartyInfo(); void RefreshGauge( int nPos, bool bHP, int curValue, int maxValue, bool bCreature=false ); /// 2011.08.08 - prodongi void RefreshGauge2nd( int nPos, bool bHP, int curValue, int maxValue, bool bCreature=false ); /// 2011.10.12 : servantes bool RefreshCreatureGauge( AR_HANDLE handle ); void EnableSlot( int nPos, bool bShow ); void EnableCreatureSlot( int nPos, bool bShow ); // 2011.09.15 - servantes : EnableCreatureSlot2nd 함수 추가 : 두번째 크리처도 표기해야 한다 void EnableCreatureSlot2nd( int nPos, bool bShow ); // 2011.10.05 : servantes void MoveSlotEx(int id_slot, int& x_next_startpos); // 2011.10.06 : servantes : 해당 슬롯의 위치를 변경한다 void MoveSlotControl(const char* ptr_name, int x, int y); // 2011.10.06 : servantes : 컨트롤 위치를 변경한다 public: AR_HANDLE GetSelectMember() { return m_hSelectMember; } // 2011.10.05 : servantes : 선택한 멤버 핸들 int GetPartyType(); // 2011.09.19 : servantes : 파티 타입 int GetUISizeState() { return m_nUISizeState; } // 2011.09.19 : servantes : UI 크기 상태 int GetListSizeType() { return m_nListSizeType; } // 2011.09.19 : servantes : 리스트 크기 타입 int GetSiegeUIType() { return m_nSiegeUIType; } // 2011.09.19 : servantes : 공격대 UI 타입 void SetPartyType(int type); // 2011.09.19 : servantes : 파티 타입 void SetUISizeState(int nState) { m_nUISizeState = nState; } // 2011.09.19 : servantes : UI 크기 상태 void SetListSizeType(int type); // 2011.09.19 : servantes : 리스트 크기 타입 void SetSiegeUIType(int type); // 2011.09.19 : servantes : 공격대 UI 타입 void SetUpClickDragRect(); // 2011.09.19 : servantes : UI 영역 재설정(클릭, 드래그) void ChangeVisibleMinimizeManimizeButtom(int nToBeState); // 2011.09.28 : servantes : 최대 최소화버튼 서로 바뀜, 최대화(보임) 최소화(안보임) / 최대화(보임) 최소화(안보임) void VisibleCloseButton(); // MSG_UI_SEND_DATA 로 메세지를 보내고 받고 하지만 현재의 UI는 SUITopPartyWnd 의 자식으로 UI 매니저에서 관리하는 메세지들을 // 받을 수가 없는 관계로 부모인 SUITopPartyWnd 가 메세지는 받고 필요한 동작들은 자식들에게 이 함수를 통하여 하도록 하자 void SendUIMessage(SGameMessage* pMsg); // 2011.10.05 : servantes : 메세지 처리 함수 private: void RefreshOnLine(); // 선택 ========================= void UnSelect(); void unSelectCreature(); // 2010.08.31 - prodongi void SelectMember( int nPos ); void SelectCreatureMember( int nPos ); void RefreshSelectMember( AR_HANDLE hPlayer, const char* szPlayer ); AR_HANDLE GetHandle( int nPos ); int GetSlotIndex( const char * szPlayer ); // 요청 ========================= void RequestPartyJoinAccept(); void RequestGuildJoinAccept(); void RequestRaidGuildJoinAccept(); void RequestRaidMercenaryJoinAccept(); // 출력 ========================= void OutputPartyText( const char* szText ); void OutputGuildText( const char* szText ); void OutputRaidText( const char* szText ); void OutputAllianceText( const char* szText ); void OutputMsg( int nMsgID ); private: SUIDisplayInfo* m_pDisplayInfo; std::string m_strSelectMember; int m_nViewLine; int m_nOldHP; int m_nOldMP; int m_nTabType; int m_nSelectIndex; int m_nSelectCreatureIndex; bool m_bLogIn[SLOT_MAXLINE]; bool m_bLeaderCreature; PartyCreatureInfo m_vecCreatureList[SLOT_MAXLINE]; AR_HANDLE m_hSelectMember; int m_nUISizeState; // 2011.09.19 : servantes : UI 크기 상태 int m_nPartyType; // 2011.09.19 : servantes : 파티 타입 int m_nListSizeType; // 2011.09.19 : servantes : 리스트 크기 타입 int m_nSiegeUIType; // 2011.09.19 : servantes : 공격대 UI 타입 KUIControlStatic* m_pStaticLeaderMark; KUIControlStatic* m_pStaticTitle; KUIControlStatic* m_pStaticTitleBar; KUIControlStatic* m_pStaticPartyMarkNormal; KUIControlStatic* m_pStaticPartyMarkBearLoad; KUIControlStatic* m_pStaticPartyMarkSeige; KUIControlStatic* m_pStaticPartyMarkSeigeOther; KUIControlSimpleButton* m_pBtnMaximize; // 2011.09.19 : servantes : 최대,최소,닫기버튼 포인터 KUIControlSimpleButton* m_pBtnMinimize; KUIControlSimpleButton* m_pBtnClose; KUIControlSimpleButton* m_pBtnSubOption; SSlotInfoCreature m_aSlotCreature[SLOT_MAXLINE]; SSlotInfoCharacter m_aSlotChar[SLOT_MAXLINE]; }; ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// typedef struct _tagPARTYMENU { KRect rtMenu; bool bEnableMenu; std::string strCaption; } PARTY_MENU; /// 파티메뉴 class SUIMessengerMenuWnd : public SUIWnd { public: SUIMessengerMenuWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ) : SUIWnd( pGameManager ) , m_pDisplayInfo( pDisplayInfo ) {}; virtual bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); private: void RefreshMenu(); void RefreshPartyMenu(); void RefreshGuildMenu(); void SetControlEnableColor( const char * pControlName, const char * pColor ); void SetControlEnable( const char * pControlName, bool bEnable ); bool IsPartyMember( const AR_HANDLE handle ); void InitMenuList(); void RefreshMenuSlot(); void DisableMenuSlot(); void ShowSelectMenu( int nIndex ); bool SelectPartyMenu( int nIndex ); bool SelectGuildMenu( int nIndex ); private: SUIDisplayInfo* m_pDisplayInfo; std::vector m_vecMenuList; enum { REQ_NONE, REQ_INVITE, REQ_KICK, REQ_TRANSFER, }; int m_nWorkMode; ///< 요청한 작업 모드 bool m_bOpen; bool m_bCheck00; bool m_bCheck01; bool m_bCheck02; }; class SUIPartyCreate : public SUIWnd { public: SUIPartyCreate( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ) : SUIWnd( pGameManager ) , m_pDisplayInfo( pDisplayInfo ) {}; virtual bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); private: SUIDisplayInfo* m_pDisplayInfo; }; /// 파티원 지속효과 class SUIPartyStateWnd : public SUIWnd { public: SUIPartyStateWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ); ~SUIPartyStateWnd() { ClearCtr(); } virtual bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); void ClearCtr(); void ChangeSize(int nCount); void MoveStateWindow( int nIndex, int nY, bool Creature ); void SetSlotData_N_Enable( int nIndex, class SPlayerSlot* pSlot, bool bCreature ); void SetSlotData_N_Enable( int nIndex, AR_HANDLE handle, bool bCreature ); void DisableAllSlots(); void RefreshEnableSlots(); void RefreshSlots(); void RefreshCreatureSlots(); class SUIPartyStateSetWnd* GetChildWnd( AR_HANDLE handle ); bool ChangeCreature( AR_HANDLE handle ); bool ChangeMasterCreature( AR_HANDLE hMaster ); int AddCreature( AR_HANDLE handle ); //void AddCreature( int nIndex ); // 2010.08.30 - prodongi void LeaveMaster( AR_HANDLE hMaster ); int LeaveCreature( AR_HANDLE handle ); int RemoveCreature( AR_HANDLE handle ); //void RemoveCreature( int nIndex ); // 2010.08.30 - prodongi void setRenderCreatureUI(int index, bool render); // 2010.08.30 - prodongi void SetCreatureMaster( int nPos, AR_HANDLE hMaster ); bool IsAddCreature( AR_HANDLE handle, bool bMaster/*=false*/ ); SGameAvatarEx* GetPlayerPtr( int nIndex ); void ClearCreatureList(); AR_HANDLE GetMaster( AR_HANDLE handle ); SGameAvatarEx* GetMasterPtr( AR_HANDLE handle ); SGameAvatarEx* GetObject( AR_HANDLE handle ); void Move( int nX, int nY ); bool IsRenderStateLeft(int nRight=-1); private: bool m_bStateRender; bool m_MemberStateRender[SLOT_MAXLINE]; bool m_CreatureStateRender[SLOT_MAXLINE]; SUIDisplayInfo* m_pDisplayInfo; bool m_bLeftRender; PartyCreatureInfo m_vecCreatureList[SLOT_MAXLINE]; }; /// 파티메뉴 class SUIMessengerPrivateMenuWnd : public SUIWnd { public: SUIMessengerPrivateMenuWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ); virtual bool InitControls( KPoint kPos ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); private: private: SUIDisplayInfo* m_pDisplayInfo; bool m_bSendMsg; bool m_bPlayer; int m_nIndex; bool m_bRender; // bool m_MemberStateRender[SLOT_MAXLINE]; // bool m_CreatureStateRender[SLOT_MAXLINE]; }; // 2011.09.01 - servantes class SUITopPartyWnd : public SUIWnd { public: SUITopPartyWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ); virtual SUIWnd* CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID ); virtual bool InitControls( KPoint kPos ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y); void DeleverMessage(int nSendID, int nReceiveID, const char* pStrMessage, int w=0, int l=0); //2011.09.28 : servantes : 작은 UI와 큰 UI간의 메세지 전달 함수 void ChangeWndState(int nUISizeState); // 0:small / 1:big int GetUISizeState() { return m_nUISizeState; } int GetPartyType(); // 2011.09.19 : servantes : 파티 타입 void SetPartyType(int type); // 2011.09.19 : servantes : 파티 타입 void SetUISizeState(int nState); // 2011.09.19 : servantes : UI 크기 상태 void SetListSizeType(int type); // 2011.09.19 : servantes : 리스트 크기 타입 void SetSiegeUIType(int type); // 2011.09.19 : servantes : 공격대 UI 타입 void SetUpClickDragRect(); // 2011.09.23 : servantes : UI 영역 재설정 private: int m_nUISizeState; // 2011.09.22 : servantes : UI 상태변수 int m_nListSizeType; // 2011.09.27 : servantes : 리스트 크기 타입 SUIMessengerWnd* m_pWndBig; SUIMessengerWnd* m_pWndSml; SUIDisplayInfo* m_pDisplayInfo; }; extern SUITopPartyWnd* g_pUITopPartyWnd; /// 우클릭 메뉴1 : 2011.09.16 - servantes class SUIRightMenu1Wnd : public SUIWnd { public: SUIRightMenu1Wnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ) : SUIWnd( pGameManager ) , m_pDisplayInfo( pDisplayInfo ) {}; virtual bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); private: public: int GetUISizeState() { return m_nUISizeState; } // UI 크기 상태 void SetUISizeState(int nState) { m_nUISizeState = nState; } // UI 크기 상태 void ArrangeMenuByUISizeState(int nState); private: SUIDisplayInfo* m_pDisplayInfo; int m_nUISizeState; // UI 크기 상태 KUIControlButton* m_paMenuButton[RMN1_MAX]; // 2011.09.29 : servantes }; /// 우클릭 메뉴2 : 2011.09.16 - servantes class SUIRightMenu2Wnd : public SUIWnd { public: SUIRightMenu2Wnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ) : SUIWnd( pGameManager ) , m_pDisplayInfo( pDisplayInfo ) {}; virtual bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); private: private: SUIDisplayInfo* m_pDisplayInfo; KUIControlButton* m_paMenuButton[RMN2_MAX]; // 2011.09.29 : servantes }; #endif