📄 eventinventoryslotcontainer.cpp
字号:
#include "StdAfx.h"
#include ".\eventinventoryslotcontainer.h"
#include ".\EventItemSlot.h"
#include "ItemManager.h"
EventInventorySlotContainer::EventInventorySlotContainer(void)
{
Init( MAX_EVENT_INVENTORY_SLOT_NUM, SI_EVENT_INVENTORY );
m_eEventIvenState = EVENT_INVEN_STATE_UNAVAILABLE;
m_eEventIvenTransaction = EVENT_INVEN_TRANS_END;
}
EventInventorySlotContainer::~EventInventorySlotContainer(void)
{
}
VOID EventInventorySlotContainer::Init( POSTYPE MaxSlotSize, SLOTIDX SlotIdx )
{
m_nSlotNum = 0;
m_SlotIdx = SlotIdx;
m_nMaxSlotNum = MaxSlotSize;
m_ppSlotArray = new SCSlot*[MaxSlotSize];
for(POSTYPE i=0;i<MaxSlotSize;++i)
m_ppSlotArray[i] = new EventItemSlot;
ClearAll();
}
//
//BOOL EventInventorySlotContainer::InsertSlot( POSTYPE AtPos, SCSlot & IN rSlot )
//{
// if( SCSlotContainer::InsertSlot( AtPos, rSlot ) )
// {
// return TRUE;
// }
// else
// return FALSE;
//}
//
//
//VOID EventInventorySlotContainer::DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut )
//{
// SCSlotContainer::DeleteSlot( AtPos, pSlotOut );
//}
VOID EventInventorySlotContainer::InsertSlot( POSTYPE AtPos, EVENTSLOTEX & IN rSlotInfo )
{
if( rSlotInfo.m_ItemCode == 0 ) return;
if( rSlotInfo.m_ItemSeq == 0 ) return;
if( rSlotInfo.m_ItemCount == 0 ) return;
((EventItemSlot*)(m_ppSlotArray[AtPos]))->Serialize( rSlotInfo, SERIALIZE_STORE );
m_ppSlotArray[AtPos]->SetPos( AtPos );
m_ppSlotArray[AtPos]->SetSlotIdx( GetSlotIdx() );
++m_nSlotNum;
ASSERT( m_nSlotNum <= GetMaxSlotNum() );
}
VOID EventInventorySlotContainer::ClearAll()
{
SCItemSlotContainer::ClearAll();
Close();
}
VOID EventInventorySlotContainer::Close()
{
m_eEventIvenState = EVENT_INVEN_STATE_UNAVAILABLE;
m_eEventIvenTransaction = EVENT_INVEN_TRANS_END;
}
RC::eEVENT_RESULT EventInventorySlotContainer::Open()
{
m_eEventIvenState = EVENT_INVEN_STATE_AVAILABLE;
return Select();
}
RC::eEVENT_RESULT EventInventorySlotContainer::Select()
{
if( IsEventTransaction() ) return RC::RC_EVENT_ALREADY_ANOTHER_TRANSACTION;
SetEventTransaction( EVENT_INVEN_TRANS_BEGIN_SELECT );
return RC::RC_EVENT_SUCCESS;
}
RC::eEVENT_RESULT EventInventorySlotContainer::MoveItemToInventory( POSTYPE AtPos, DWORD & OUT ItemSeqOut )
{
if( IsEventTransaction() ) return RC::RC_EVENT_ALREADY_ANOTHER_TRANSACTION;
SetEventTransaction( EVENT_INVEN_TRANS_BEGIN_SELECT );
if( IsEmpty( AtPos) )
return RC::RC_EVENT_NOTEXIST_EVENTITEM;
EventItemSlot & rSlot = (EventItemSlot &)GetSlot( AtPos );
ItemSeqOut = rSlot.GetSerial();
POSTYPE need_num = 1; //< Event酒捞袍 浇吩窍唱绰 牢亥配府 浇吩 窍唱促扼绰 啊沥
if( rSlot.GetNum() != 5 )
need_num = 2;
// 俺荐 眉农
if( !m_pPlayer->GetItemManager()->CheckInsertItem( m_pPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY), need_num ) )
{
return RC::RC_EVENT_FULL_INVENTORY;
}
// 酒捞袍 包访 喉遏阑 扒促.
return RC::RC_EVENT_SUCCESS;
}
//////////////////////////////////////////////////////////////////////////
// 搬苞蔼阑 罐酒辑 贸府窍绰 何盒
//////////////////////////////////////////////////////////////////////////
VOID EventInventorySlotContainer::OnSelect( BOOL bSuccess, EVENT_ITEM_TOTAL_INFO_EX * IN pTotalInfo )
{
ASSERT( IsEventTransaction() );
SetEventTransaction( EVENT_INVEN_TRANS_END );
if( bSuccess )
{
if( GetSlotNum() > 0 ) SCItemSlotContainer::ClearAll();
for( int i = 0 ; i < pTotalInfo->m_Count ; ++i )
{
InsertSlot( i, pTotalInfo->m_Slot[i] );
}
}
else
{
}
}
VOID EventInventorySlotContainer::OnMoveItemToInventory( BOOL bSuccess, POSTYPE atPos, INVENTORY_TOTAL_INFO * OUT pTotalInfoOut )
{
ASSERT( IsEventTransaction() );
SetEventTransaction( EVENT_INVEN_TRANS_END );
if( bSuccess )
{
EventItemSlot EventSlot;
DeleteSlot( atPos, &EventSlot );
// 付窍器记1, 酒肺捞靛俩2,饭捞瘤靛 俩3, 颇况肺捞靛俩4
SCItemSlot ItemSlot;
switch( EventSlot.GetCode() )
{
case 1: { ItemSlot.SetCode(9001); }break;
case 2: { ItemSlot.SetCode(9002); }break;
case 3: { ItemSlot.SetCode(9003); }break;
case 4: { ItemSlot.SetCode(9004); }break;
default: { return; }
}
ASSERT( EventSlot.GetNum() != 0 );
if( ItemSlot.IsOverlap() )
{
RC::eITEM_RESULT rt = m_pPlayer->GetItemManager()->ObtainDup( ItemSlot, EventSlot.GetNum(), pTotalInfoOut );
ASSERT( rt == RC::RC_ITEM_SUCCESS );
}
else
{
RC::eITEM_RESULT rt = m_pPlayer->GetItemManager()->Obtain( ItemSlot, EventSlot.GetNum(), pTotalInfoOut );
ASSERT( rt == RC::RC_ITEM_SUCCESS );
}
}
else
{
}
}
VOID EventInventorySlotContainer::Serialize( EVENT_ITEM_TOTAL_INFO & rTotalInfo, eSERIALIZE se )
{
if( se == SERIALIZE_LOAD )
{
rTotalInfo.m_Count = GetSlotNum();
for( POSTYPE i = 0 ; i < GetSlotNum() ; ++i )
{
SCSlot & rSlot = GetSlot(i);
rTotalInfo.m_Slot[i].m_ItemCode = rSlot.GetCode();
rTotalInfo.m_Slot[i].m_ItemCount = rSlot.GetNum();
}
}
else
{
ASSERT( NULL );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -