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

📄 handler_cg_item.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_COMBINE_ACK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_COMBINE_ACK;
			msg.m_fromIndex		= pRecvMsg->m_fromIndex;
			msg.m_toIndex		= pRecvMsg->m_toIndex;
			msg.m_fromPos		= pRecvMsg->m_fromPos;
			msg.m_toPos			= pRecvMsg->m_toPos;

			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_COMBINE_NAK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_COMBINE_NAK;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

// 家葛己 酒捞袍父 贸府窃
VOID Handler_CG_ITEM::OnCG_ITEM_USE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_USE_SYN * pRecvMsg = (MSG_CG_ITEM_USE_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Use( pRecvMsg->m_atIndex, pRecvMsg->m_atPos );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_USE_ACK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_USE_ACK;
			msg.m_atIndex		= pRecvMsg->m_atIndex;
			msg.m_atPos			= pRecvMsg->m_atPos;

			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_USE_NAK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_USE_NAK;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

VOID Handler_CG_ITEM::OnCG_ITEM_SELL_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_SELL_SYN * pRecvMsg = (MSG_CG_ITEM_SELL_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Sell(  pRecvMsg->m_atIndex, pRecvMsg->m_atPos );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_SELL_ACK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_SELL_ACK;
			msg.m_atIndex		= pRecvMsg->m_atIndex;
			msg.m_atPos			= pRecvMsg->m_atPos;
			msg.m_Money			= pPlayer->GetMoney();

			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_SELL_NAK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_SELL_NAK;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

VOID Handler_CG_ITEM::OnCG_ITEM_BUY_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_BUY_SYN * pRecvMsg = (MSG_CG_ITEM_BUY_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	MSG_CG_ITEM_BUY_ACK amsg;
	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Buy( pRecvMsg->m_dwShopListID, pRecvMsg->m_ShopTabIndex, pRecvMsg->m_ShopItemIndex, &amsg.m_TotalInfo );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			amsg.m_Money = pPlayer->GetMoney();
			pPlayer->SendPacket( &amsg, amsg.GetSize() );
			
		}
		break;
	default:
		{
			MSG_CG_ITEM_BUY_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

VOID Handler_CG_ITEM::OnCG_ITEM_DROP_MONEY_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_DROP_MONEY_SYN * pRecvMsg = (MSG_CG_ITEM_DROP_MONEY_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->DropMoney( pRecvMsg->m_dwDropMoney );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			/* Nothing To Do */
		}
		break;
	default:
		{
			MSG_CG_ITEM_DROP_MONEY_NAK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_DROP_MONEY_NAK;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}

}



class TotalLevelSum
{
	float				m_limitDistance;
	Player *			m_pStandardPlayer;
	LEVELTYPE			m_TotalLevelSum;
public:
	TotalLevelSum( Player *	pStandardPlayer ):m_TotalLevelSum(0),m_pStandardPlayer(pStandardPlayer){}
	~TotalLevelSum(){}

	inline LEVELTYPE GetTotalLevelSum() { return m_TotalLevelSum; }
	inline VOID	SetDistance(  float limitDistance ) { m_limitDistance = limitDistance;	}

	VOID operator()( Player * pPlayer )
	{
		if( m_limitDistance == 0.0f )
		{
			m_TotalLevelSum += pPlayer->GetLevel();
		}
		else
		{
			if( pPlayer->GetDist(m_pStandardPlayer) < m_limitDistance )
			{
				m_TotalLevelSum += pPlayer->GetLevel();
			}
		}
	}
};
VOID Handler_CG_ITEM::OnCG_ITEM_PICK_MONEY_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_PICK_MONEY_SYN * pRecvMsg = (MSG_CG_ITEM_PICK_MONEY_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	if( !pPlayer->GetItemManager()->ValidState() )
	{
		MSG_CG_ITEM_PICK_MONEY_NAK msg;
		msg.m_dwErrorCode	= RC::RC_ITEM_INVALIDSTATE;
		msg.m_dwFieldItemObjectKey = pRecvMsg->m_dwFieldItemObjectKey;
		pPlayer->SendPacket( &msg, sizeof( msg ) );
		return;
	}

	Field * pField = pPlayer->GetField();
	ObjectFinder<Item> finder( pRecvMsg->m_dwFieldItemObjectKey );
	if( !pField->SearchNeighborFieldItemAt( pPlayer->GetSectorIndex(), finder ) )
	{
		MSG_CG_ITEM_PICK_MONEY_NAK msg;
		msg.m_dwErrorCode	= RC::RC_ITEM_NOTEXISTITEMATFIELD;
		msg.m_dwFieldItemObjectKey = pRecvMsg->m_dwFieldItemObjectKey;
		pPlayer->SendPacket( &msg, sizeof( msg ) );
		return;
	}
	Item * pItem = finder.GetTargetObject();

	/*
	LEVELTYPE TotalLevelOfPlayers = 1;
	if( pField->GetMap()->GetZoneType() == eZONETYPE_MISSION )
	{
		TotalLevelSum sum(pPlayer);
		pPlayer->GetField()->ForeachPlayer(sum);
		TotalLevelOfPlayers = sum.GetTotalLevelSum();
		ASSERT( TotalLevelOfPlayers != 0 );
		ASSERT( pPlayer->GetField()->GetPlayerNum() != 0 );
		TotalLevelOfPlayers = (TotalLevelOfPlayers==0?1:TotalLevelOfPlayers);
	}
	else
	{
		TotalLevelSum sum(pPlayer);
		sum.SetDistance(15.0f);
		pPlayer->GetField()->ForeachNeighborPlayerAt(pPlayer->GetSectorIndex(), sum);
		TotalLevelOfPlayers = sum.GetTotalLevelSum();
		ASSERT( TotalLevelOfPlayers != 0 );
		ASSERT( pPlayer->GetField()->GetPlayerNum() != 0 );
		TotalLevelOfPlayers = (TotalLevelOfPlayers==0?1:TotalLevelOfPlayers);
	}
	*/

	if( pItem->GetFromMonsterKey() != 0 )
	{
		// 清泼捞衬 固记捞衬
		// 付阑
		SharingMoney<MSG_CG_ITEM_PICK_MONEY_ACK> sp(pPlayer,pItem->GetMoney());
		if( pField->GetMap()->GetZoneType() == eZONETYPE_MISSION )
		{
			// 固记
			pPlayer->GetField()->ForeachPlayer(sp);
		}
		else
		{
			// 付阑, 清泼
			sp.SetDistance( 15.0f );
			pPlayer->GetField()->ForeachNeighborPlayerAt(pPlayer->GetSectorIndex(), sp);
		}
	}

//	pPlayer->SetMoney( pPlayer->GetMoney() +pItem->GetMoney());	
	pPlayer->PlusMoney( pItem->GetMoney() );	// SetMoney肺 捣 冈绰 何盒 傈何 PlusMoney()肺 背眉吝(泅芒)

	pPlayer->GetField()->LeaveField( pItem );
	ObjectFactory::Instance()->FreeObject( pItem );

	MSG_CG_ITEM_PICK_MONEY_ACK sendMsg;
	sendMsg.m_Money			= pPlayer->GetMoney();
	pPlayer->SendPacket( &sendMsg, sizeof( sendMsg ) );

}

Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_LINKITEM_SYN )
{
	MSG_CG_ITEM_QUICK_LINKITEM_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKITEM_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->LinkItem( pRecvMsg->m_OrgPos, pRecvMsg->m_ToPos );
	switch( rt )
	{
	case RC::RC_QUICK_SUCCESS:
		{
			MSG_CG_ITEM_QUICK_LINKITEM_ACK msg;
			msg.m_OrgPos		= pRecvMsg->m_OrgPos;
			msg.m_ToPos			= pRecvMsg->m_ToPos;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_QUICK_LINKITEM_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_LINKSKILL_SYN )
{
	MSG_CG_ITEM_QUICK_LINKSKILL_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKSKILL_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->LinkSkill( pRecvMsg->m_SkillCode, pRecvMsg->m_ToPos );
	switch( rt )
	{
	case RC::RC_QUICK_SUCCESS:
		{
			MSG_CG_ITEM_QUICK_LINKSKILL_ACK msg;
			msg.m_SkillCode		= pRecvMsg->m_SkillCode;
			msg.m_ToPos			= pRecvMsg->m_ToPos;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_QUICK_LINKSKILL_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_UNLINK_SYN )
{
	MSG_CG_ITEM_QUICK_UNLINK_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_UNLINK_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->Unlink( pRecvMsg->m_atPos );
	switch( rt )
	{
	case RC::RC_QUICK_SUCCESS:
		{
			MSG_CG_ITEM_QUICK_UNLINK_ACK msg;
			msg.m_atPos			= pRecvMsg->m_atPos;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_QUICK_UNLINK_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_MOVE_SYN )
{
	MSG_CG_ITEM_QUICK_MOVE_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_MOVE_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->Move( pRecvMsg->m_fromPos, pRecvMsg->m_toPos );
	switch( rt )
	{
	case RC::RC_QUICK_SUCCESS:
		{
			MSG_CG_ITEM_QUICK_MOVE_ACK msg;
			msg.m_fromPos		= pRecvMsg->m_fromPos;
			msg.m_toPos			= pRecvMsg->m_toPos;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_QUICK_MOVE_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

⌨️ 快捷键说明

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