Files
Sun1602/Server/GameServer/EventInventorySlotContainer.h
2022-10-26 12:25:11 +08:00

83 lines
2.7 KiB
C++

//=======================================================================================================================
/// EventInventorySlotContainer
/**
@author
Kim Min Wook < taiyo@webzen.com >
@since
2006. 1. 19
@remark
- 이벤트 아이템을 가져 오기 위한 인벤토리를 나타낸다.
@implement
- 인벤토리에서 이벤트 인벤토리 버튼을 누르면, Open() 함수를 호출하여 DB로부터 이벤트 아이템을 쿼리한다.
이벤트 아이템스트림 클러스터를 받고 나서(이용할수있는상태로변경) 다른 트랜젝션을 수행할수있다.
@todo
- 인벤트아이템코드를 실제아이템 코드로 변경하는 작업을 자동적으로 처리하게!
- 클라이언트와 같이 사용할 수 있게
@history
-
*/
//=======================================================================================================================
#pragma once
#include <scitemslotcontainer.h>
#include "ItemManager.h"
enum eEVENT_INVENTORY_STATE
{
EVENT_INVEN_STATE_UNAVAILABLE,
EVENT_INVEN_STATE_AVAILABLE,
};
enum eEVENT_INVENTORY_TRANSACTION
{
EVENT_INVEN_TRANS_END = (1<<0),
EVENT_INVEN_TRANS_BEGIN = (1<<1),
EVENT_INVEN_TRANS_BEGIN_SELECT = ( EVENT_INVEN_TRANS_BEGIN | (1<<2) ),
EVENT_INVEN_TRANS_BEGIN_MOVE_TO_INVEN = ( EVENT_INVEN_TRANS_BEGIN | (1<<3) ),
};
class EventInventorySlotContainer :
public SCItemSlotContainer
{
public:
EventInventorySlotContainer(void);
virtual ~EventInventorySlotContainer(void);
virtual eSlotType GetSlotType() const { return ST_EVENT; }
virtual SCSlot * CreateSlot();
virtual VOID ClearAll();
// custom
VOID InsertSlot( POSTYPE AtPos, EVENTSLOTEX & IN rSlotInfo );
public:
// 이벤트 인벤토리를 열때
RC::eITEM_RESULT Open();
VOID Serialize( EVENT_ITEM_TOTAL_INFO & rTotalInfo, eSERIALIZE se );
private:
VOID Close();
inline BOOL IsEventTransaction() { return (EVENT_INVEN_TRANS_BEGIN & m_eEventIvenTransaction); }
inline VOID SetEventTransaction(eEVENT_INVENTORY_TRANSACTION stat) { m_eEventIvenTransaction=stat; }
public:
// 이벤트 인벤토리에서 새로고침을 누를때
RC::eITEM_RESULT Select();
VOID OnSelect( BOOL bSuccess, EVENT_ITEM_TOTAL_INFO_EX * IN pTotalInfo );
// 이벤트 아이템을 인벤토리로 가져올 때
RC::eITEM_RESULT MoveItemToInventory( POSTYPE AtPos, DWORD & OUT ItemSeq );
VOID OnMoveItemToInventory( BOOL bSuccess, POSTYPE atPos, JUST_INVENTORY_TOTAL_INFO * OUT pTotalInfoOut );
inline VOID SetPlayer( Player * pPlayer ) { m_pPlayer = pPlayer; }
protected:
Player * m_pPlayer;
private:
eEVENT_INVENTORY_STATE m_eEventIvenState;
eEVENT_INVENTORY_TRANSACTION m_eEventIvenTransaction;
static const int MAX_LOCKED_INFO_NUM = MAX_INVENTORY_SLOT_NUM;
EVENTSLOT m_TransactionInfo;
LOCKED_INFO m_TransLockedInfo[MAX_LOCKED_INFO_NUM];
POSTYPE m_LockedCount;
};