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

📄 quickmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\quickmanager.h"
#include ".\SlotManager.h"
#include ".\SCQuickSlot.h"
#include ".\SCQuickSlotContainer.h"

QuickManager::QuickManager(void)
{
}

QuickManager::~QuickManager(void)
{
}

VOID QuickManager::Release()
{
}

VOID QuickManager::Init( SlotManager * pMGR )
{
	m_pPlayer			= pMGR->m_pPlayer;
	m_ppSlotContainer	= pMGR->m_pSlotContainer;
	m_pSlotMGR			= pMGR;
}

BOOL QuickManager::IsEmpty( POSTYPE pos )
{
	return m_pSlotMGR->IsEmpty( SI_QUICK, pos );
}

SCQuickSlotContainer * QuickManager::GetQuickSlotContainer()
{
	return (SCQuickSlotContainer *)m_pSlotMGR->GetSlotContainer(SI_QUICK);
}

BOOL QuickManager::ValidPos( SLOTIDX atIndex, POSTYPE atPos, BOOL bEmptyCheck )
{
	return m_pSlotMGR->ValidPos(atIndex, atPos, bEmptyCheck);
}

BOOL QuickManager::ValidState()
{
	return m_pSlotMGR->ValidState();
}

VOID QuickManager::SerializeQuickStream( POSTYPE pos, QUICKSTREAM * IN pStream, eSERIALIZE eType )
{
	if( eType == SERIALIZE_LOAD )
	{
		SCQuickSlot & rSlot = static_cast<SCQuickSlot &>(GetQuickSlotContainer()->GetSlot(pos));
		rSlot.CopyOut(*pStream);
	}
	else if( eType == SERIALIZE_STORE )
		((SCQuickSlotContainer*)GetQuickSlotContainer())->InsertSlot( pos, *pStream );
}

VOID QuickManager::UpdateOriginalItems()
{
	return;
	SCQuickSlotContainer * pQuickContainer = GetQuickSlotContainer();
	SCSlotContainer * pInvenContainer = m_pSlotMGR->GetSlotContainer(SI_INVENTORY);

	for( POSTYPE pos = 0 ; pos < pQuickContainer->GetMaxSlotNum() ; ++pos )
	{
		if( !pQuickContainer->IsEmpty(pos) )
		{
			SCQuickSlot & rQuickSlot = (SCQuickSlot &)pQuickContainer->GetSlot(pos);
			if( rQuickSlot.GetOrgSlotIndex() == SI_INVENTORY && rQuickSlot.GetOrgPos() != 255 )
			{
				SCItemSlot & rItemSlot = (SCItemSlot &)pInvenContainer->GetSlot( rQuickSlot.GetOrgPos() );
				if( rItemSlot.GetCode() != rQuickSlot.GetOrgCode() )
				{
					_IteratingOriginalItem( pInvenContainer, rQuickSlot, rQuickSlot.GetOrgCode() );
				}
			}
		}
	}
}

VOID QuickManager::_IteratingOriginalItem( SCSlotContainer * pContainer, SCQuickSlot & rQuickSlot, SLOTCODE ItemCode )
{
	for( POSTYPE pos = 0 ; pos < pContainer->GetMaxSlotNum() ; ++pos )
	{
		if( !pContainer->IsEmpty(pos) )
		{
			SCItemSlot & rSlot = (SCItemSlot &)pContainer->GetSlot(pos);
			if( rSlot.GetCode() == ItemCode )
			{
				SCQuickSlotContainer * pQuickContainer = GetQuickSlotContainer();
				pQuickContainer->UpdateQuickSlot( rQuickSlot.GetOrgSlotIndex(), rQuickSlot.GetOrgPos(), rQuickSlot.GetOrgCode(),
													rQuickSlot.GetOrgSlotIndex(), pos, rQuickSlot.GetOrgCode() );
				break;
			}
		}
	}
}

RC::eQUICK_RESULT QuickManager::LinkSkill( SLOTCODE code, POSTYPE toPos )
{
	if( !ValidState() ) 
		return RC::RC_QUICK_INVALIDSTATE;
	if( !ValidPos(  SI_QUICK,  toPos, FALSE ) )
		return RC::RC_QUICK_INVALIDPOS;
	
	SCSlotContainer * pContainer = GetQuickSlotContainer();
	if( !pContainer->IsEmpty(toPos) )
	{
		// 丹绢静扁
		pContainer->DeleteSlot( toPos, NULL );
	}

	// 绢恫 巴阑 棵副 荐 乐绰瘤俊 措茄 眉农 鞘夸!

	SCQuickSlot slot;
	slot.SetOrgCode(code);
	slot.SetOrgSlotIndex(SI_SKILL);
	pContainer->InsertSlot(toPos, slot);

	return RC::RC_QUICK_SUCCESS;
}

RC::eQUICK_RESULT QuickManager::LinkItem( POSTYPE orgPos, POSTYPE toPos )
{
	if( !ValidState() ) 
		return RC::RC_QUICK_INVALIDSTATE;
	if( !ValidPos(  SI_INVENTORY,  orgPos ) )
		return RC::RC_QUICK_INVALIDPOS;
	if( !ValidPos(  SI_QUICK,  toPos, FALSE ) )
		return RC::RC_QUICK_INVALIDPOS;


	SCSlotContainer * pContainer = GetQuickSlotContainer();
	if( !pContainer->IsEmpty(toPos) )
	{
		// 丹绢静扁
		pContainer->DeleteSlot( toPos, NULL );
	}


	// 绢恫 巴阑 棵副 荐 乐绰瘤俊 措茄 眉农 鞘夸!

	SCSlotContainer * pOrgContainer = m_pSlotMGR->GetSlotContainer(SI_INVENTORY);
	SCSlot & rOrgSlot = (SCSlot & )pOrgContainer->GetSlot(orgPos);

	SCQuickSlot slot;
	slot.SetOrgPos(orgPos);
	slot.SetOrgCode(rOrgSlot.GetCode());
	slot.SetOrgSlotIndex(SI_INVENTORY);
	BOOL rt = pContainer->InsertSlot(toPos, slot);
	ASSERT( rt );

	return RC::RC_QUICK_SUCCESS;
}

RC::eQUICK_RESULT QuickManager::Unlink( POSTYPE atPos )
{
	if( !ValidState() ) 
		return RC::RC_QUICK_INVALIDSTATE;
	if( !ValidPos(  SI_QUICK,  atPos ) )
		return RC::RC_QUICK_INVALIDPOS;

	SCSlotContainer * pContainer = GetQuickSlotContainer();
	pContainer->DeleteSlot( atPos, NULL );

	return RC::RC_QUICK_SUCCESS;
}

RC::eQUICK_RESULT QuickManager::Move( POSTYPE fromPos, POSTYPE toPos )
{
	if( !ValidState() ) 
		return RC::RC_QUICK_INVALIDSTATE;
	if( !ValidPos(  SI_QUICK,  fromPos ) )
		return RC::RC_QUICK_INVALIDPOS;
	if( !ValidPos(  SI_QUICK,  toPos, FALSE ) )
		return RC::RC_QUICK_INVALIDPOS;

	SCSlotContainer * pContainer	= GetQuickSlotContainer();

	SCQuickSlot FromSlot;
	pContainer->DeleteSlot( fromPos, &FromSlot );
	if( TRUE == pContainer->IsEmpty( toPos ) )
	{
		// 茄 规氢 捞悼
		if( !pContainer->InsertSlot( toPos, FromSlot ) )
		{
			pContainer->InsertSlot( fromPos, FromSlot );
			return RC::RC_QUICK_UNKNOWNERROR;
		}
	}
	else
	{
		// 背券
		SCQuickSlot ToSlot;
		pContainer->DeleteSlot( toPos, &ToSlot );
		if( !pContainer->InsertSlot( fromPos, ToSlot ) )
		{
			//rollback
			pContainer->InsertSlot( fromPos, FromSlot );
			pContainer->InsertSlot( toPos, ToSlot );
			return RC::RC_QUICK_UNKNOWNERROR;
		}
		if( !pContainer->InsertSlot( toPos, FromSlot ) )
		{
			//rollback
			pContainer->DeleteSlot( fromPos, NULL );
			pContainer->InsertSlot( fromPos, FromSlot );
			pContainer->InsertSlot( toPos, ToSlot );
			return RC::RC_QUICK_UNKNOWNERROR;
		}
	}

	return RC::RC_QUICK_SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -