⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventinventoryslotcontainer.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -