//======================================================================================================================= /// TradeManager class /** @author Kim Min Wook < taiyo@webzen.com > @since 2004. 8. 11~ @note - PutMoney : °Å·¡Ã¢¿¡ Ç÷¹À̾ ¼³Á¤ÇÑ ÇÏÀÓÀÇ ¾×¼ö¸¦ µ¤¾î¾´´Ù ( +ÇÏÁö ¾Ê´Â´Ù ) - GetMoney : °Å·¡Ã¢¿¡ Ç÷¹À̾ ¼³Á¤ÇÑ ÇÏÀÓÀÇ ¾×¼ö¸¦ »«´Ù @condition check - PROPOSAL »óÅ¿¡¼­ READY »óÅ·Πµ¹¾Æ¿Ã °æ¿ì : »ó´ë¹æÀÌ ACCEPT »óÅÂÀ̸é PROPOSAL»óÅ·Πº¯°æ - ACCEPT»óÅ·Πº¯°æÇÒ ¶§ : »ó´ë¹æÀÌ PROPOSALÀÌ¿©¾ß¸¸ Çϰí, »ó´ë¹æÀÌ ACCEPTÀ̸é Exchange()ÇÑ ´ÙÀ½ °Å·¡ Á¾·á @history - 2006. 3. 4 : trade°ü·Ã ¸®ÆåÅ丵, °Å·¡¿äû ¼ö¶ô ¹æ½ÄÀÇ º¯°æ(ÀÚµ¿¼ö¶ô)°ú Á¦ÇÑ Á¶°Ç º¯°æ */ //======================================================================================================================= #pragma once #include #include #include #include "TradeSlotContainer.h" //test¿ë Ç® class SCSlotContainer; class TradeSlot; class TradeManager { public: TradeManager(void); ~TradeManager(void); VOID Init( DWORD maxPoolSize ); VOID Release(); //BOOL CreateTradeContainer( Player * pPlayer1, Player * pPlayer2 ); //BOOL DestroyTradeContainer( Player * pPlayer ); RC::eTRADE_RESULT StartTrade( Player * pRequester, Player * pAcceptor ); RC::eTRADE_RESULT EndTrade( Player * pPlayer ); RC::eTRADE_RESULT PutItem( Player * pPlayer, //< ºó À§Ä¡¸¦ ã¾Æ¼­ ¾ÆÀÌÅÛÀ» ³Ö´Â ÇÔ¼ö POSTYPE org_pos, POSTYPE & OUT trade_pos_out, RENDER_ITEMSTREAMEX & OUT trade_stream_out ); RC::eTRADE_RESULT GetItem( Player * pPlayer, POSTYPE trade_pos ); RC::eTRADE_RESULT PutMoney( Player * pPlayer, MONEY & IN money ); RC::eTRADE_RESULT GetMoney( Player * pPlayer, MONEY & IN money ); // °Å·¡ Á¦½Ã RC::eTRADE_RESULT Proposal( Player * pPlayer ); // ¼öÁ¤ RC::eTRADE_RESULT Modify( Player * pPlayer ); // °Å·¡ ¿Ï·á RC::eTRADE_RESULT Exchange( Player* pPlayer1, TRADE_TOTAL_INFO& OUT rTradeInfo1, MONEY& OUT money1, TRADE_TOTAL_INFO& OUT rTradeInfo2, MONEY& OUT money2 ); BOOL ValidTradeState( Player * pPlayer ); private: VOID _GiveItem( SCSlotContainer* pContainer, TradeSlot** ppSlot, POSTYPE& INOUT num, TRADE_TOTAL_INFO::SLOT_TYPE* OUT rItemSlot, POSTYPE & OUT Count ); __inline TradeSlotContainer* _ALLOC() { TradeSlotContainer* pContainer = (TradeSlotContainer *)m_pTradePool.Alloc(); m_TestHash.insert( pContainer ); return pContainer; } __inline BOOL _FREE( TradeSlotContainer* pUnit ); ////////////////////////////////////////////////////////////////////////// // private: DWORD m_TradeKey; util::CMemoryPoolFactory m_pTradePool; typedef STLX_SET TEST_HASH; TEST_HASH m_TestHash; }; extern TradeManager g_TradeManager;