#pragma once //#include "SUIWnd.h" //#include // // 노점. // class SUIDisplayInfo; enum STORE_MODE { MODE_READY_TO_SELL = 0, MODE_READY_TO_BUY, MODE_SELLING, MODE_BUYING, }; static const size_t MAX_SLOT_COUNT = 8; ///< 최대 올릴 수 있는 아이템 갯수 static const size_t CONTROL_PER_SLOT = 6; ///< 한개의 슬롯이 사용하는 UI 컨트롤 갯수 class SUIStoreHostWnd : public SUIWnd { public: SUIStoreHostWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ); 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 ); virtual bool InitData( bool bReload = false ); bool IsStarted() const { return ( m_nMode == MODE_SELLING || m_nMode == MODE_BUYING ); } bool IsBoothNameFocus(); private: void TagFillter( std::string& strChat ); void EraseColorTag( std::string& strChat ); void EraseTag( std::string& strChat, const char* lpTag ); void StartBooth(); void StopBooth( bool bEnd ); void Refresh( int index=-1 ); void RequestPrice( class SInventorySlot* pSlot ); /// -1 이면 없앤다 void MoveFocus( int idx ); int CheckAddItem( AR_HANDLE handle, ItemBase::ItemCode code, int nLevel, int nEnhance, count_t nCount, money_t nPrice, int nFlag ); void AddItem( AR_HANDLE handle, ItemBase::ItemCode code, count_t count, money_t price, int nLevel, int nEnhance, int nEndurance, int nFlag, const int aSocket[ ItemBase::MAX_SOCKET_NUMBER ], int remain_time, char eet, int eert, int eeap, int eemp, int ed , ItemBase::ItemCode apCode, TS_ITEM_BASE_INFO::AwakenOption* pAwakenOption, TS_ITEM_BASE_INFO::LPRANDOM_OPTION const pRandomOption, int nSummonID, int nAdditionalItemEffect ); // Fraun Sky Accessories 7/12/2025 void RemoveItem( int idx ); void SwitchStoreMode( int nNewMode, bool bNeedClear = true ); void SetSlotShowMode( size_t idx, bool bShow ); void CreateControls(); void SendStartBoothMsg(); int StartBoothPossibilityCheck(); void SendEndBoothMsg(); void onMsgResult( struct SMSG_RESULT* pMsg ); void onBoothInfo( struct SMSG_BOOTH_INFO *pMsg ); void onBoothTradeInfo( struct SMSG_BOOTH_TRADE_INFO * pMsg ); bool BoothEditUpdate( int nCase ); int CheckPrice( int index ); void EditControlEnable(); void ShowDisableBackGround( int nCnt ); void RemoveAllItem( bool bRefresh ); void EnableEditAll(bool bAble, bool bStrClear); void OpenStore(); bool GetPresumptionGoldWeight( money_t& rGold, float& rfWeightRate ); int GetItemSlotCount( AR_HANDLE hHandle ); //servantes 2010.10.19 // bintitle. 2011.11.11. 노점에 아이템 등록할때 EditControl활성화 & Sound출력. void AddSaleItem(); public: int GetMode() const { return m_nMode; } protected: bool isEnableSell(class SInventorySlot* slot); /// 2011.05.16 - prodongi private: bool m_bItemDrag; int m_nMode; int m_nFocus; count_t m_unCount; money_t m_unPrice; AR_HANDLE m_hCurrentAddingItem; AR_HANDLE m_hCurrentDragItem; std::string m_strLastEditBox; SUIDisplayInfo* m_pDisplayInfo; count_t m_OldInvenItemList[MAX_SLOT_COUNT]; ///< 서버에서 구입된 아이템의 핸들과 갯수를 보내주면 필요 없음... -N4- }; class SUIStoreClientWnd : public SUIWnd { public: SUIStoreClientWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ) : SUIWnd( pGameManager ) , m_nFocus( -1 ) , m_nDragIndex( 0 ) , m_hTarget( 0 ) , m_pDisplayInfo( pDisplayInfo ) , m_bSellStore( false ) {} virtual void*Perform( KID id, KArg& msg ); 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 bool InitControls( KPoint kPos ); virtual bool InitData( bool bReload = false ); private: void StopBooth(); void SendEndWatchBoothMsg(); void Refresh(); void RefreshGold(); void RefreshWeight(); /// -1 이면 없앤다 void MoveFocus( int idx ); void AddItem(); void RemoveItem( int idx ); void SetSlotShowMode( size_t idx, bool bShow ); void CreateControls(); void MoveItemToKart( int idx, count_t nItemCnt ); bool GetMoveItemCount( int idx, bool bSellStore ); void onMsgResult( struct SMSG_RESULT* pMsg ); void onBoothInfo( struct SMSG_BOOTH_INFO *pMsg); void onBoothTradeInfo( struct SMSG_BOOTH_TRADE_INFO * pMsg ); count_t GetItemCountInven( ItemBase::ItemCode code, int level, int enhance, int nFlag ); AR_HANDLE GetItemHandle( ItemBase::ItemCode code, int level, int enhance, count_t byCount ); bool m_bSellStore; int m_nFocus; AR_HANDLE m_hTarget; size_t m_nDragIndex; SUIDisplayInfo* m_pDisplayInfo; };