Example #1
0
uint CGMyEquipHandler::Execute( CGMyEquip* pPacket, Player* pPlayer )
{
__ENTER_FUNCTION

	GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ;
	Assert( pGamePlayer ) ;

	Human* pHuman = pGamePlayer->GetHuman() ;
	Assert( pHuman ) ;

	Scene* pScene = pHuman->getScene() ;
	Assert( pScene ) ;

	//检查线程执行资源是否正确
	Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ;

	ObjID_t ObjID = pHuman->GetID() ;
	if( ObjID != pPacket->getObjID() )
	{
		Assert(FALSE) ;
		return PACKET_EXE_ERROR ;
	}

	GCMyEquip Msg ;
	Msg.setObjID( ObjID ) ;
	Msg.setName( pHuman->GetName() ) ;
	Msg.setDirectory( pHuman->getDir() ) ;
//其他信息设置

	pGamePlayer->SendPacket( &Msg ) ;

	g_pLog->FastSaveLog( LOG_FILE_1, "CGMyEquipHandler::ObjID=%d\r\n", ObjID ) ;


	return PACKET_EXE_CONTINUE ;

__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;
}
uint CGBuyHandler::Execute( CGBuy* pPacket, Player* pPlayer )
{
	__ENTER_FUNCTION

	GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ;
	Assert( pGamePlayer ) ;

	Human* pHuman = pGamePlayer->GetHuman() ;
	Assert( pHuman ) ;

	Scene* pScene = pHuman->getScene() ;
	if( pScene==NULL )
	{
		Assert(FALSE) ;
		return PACKET_EXE_ERROR ;
	}
	//检查线程执行资源是否正确
	Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ;

	DWORD	m_idTable	=	pPacket->GetBuyTableID();		//资源id
	BYTE	m_byNumber	=	pPacket->GetBuyNum();		//数量


	if(pHuman->GetCurrentShopId( ) == -1)
	{//没有打开交易窗口就买
		Assert(0);
		return PACKET_EXE_CONTINUE ;
	}

	_SHOP* pShop = pScene->GetShopManager()->GetShopByID(pHuman->GetCurrentShopId());
	int i;
	for(i = 0;i<pShop->m_ItemList->m_ListCount;i++)
	{
		if(pShop->m_ItemList->m_ListTypeIndex[i] == m_idTable)
			break;
	}

	if(i == pShop->m_ItemList->m_ListCount)
	{
		Assert(0);
		return PACKET_EXE_CONTINUE ;
	}

	//计算价格
    uint BaseMoney = ShopManager::ConvertItemType2Money(pShop->m_ItemList->m_ListType[i]);
	BaseMoney *= static_cast<uint>(pShop->m_scale);
	//
	BaseMoney = 0;
	if( pHuman->GetMoney() < BaseMoney )
	{//金钱不够
		GCBuy Msg ;
		Msg.SetBuyOk((BYTE)GCBuy::BUY_FAIL);
		pHuman->GetPlayer()->SendPacket( &Msg ) ;
		return PACKET_EXE_CONTINUE ;
	}

	_ITEM item = pScene->GetItemBoxManager()->CreateItem(pShop->m_ItemList->m_ListType[i], 1);
	uint BagIndex;
	if(pHuman->ReceiveItem(&item,BagIndex) == TRUE)
	{
		pHuman->SetMoney( pHuman->GetMoney() - BaseMoney);
		GCBuy Msg ;
		Msg.SetBuyOk((BYTE)GCBuy::BUY_OK);
		pHuman->GetPlayer()->SendPacket( &Msg ) ;
	}

	//通知
	GCNotifyEquip Msg ;
	Msg.SetBagIndex( BagIndex ) ;
	Msg.SetItem( &item ) ;

	pGamePlayer->SendPacket( &Msg ) ;

	g_pLog->FastSaveLog( LOG_FILE_1, "CGBuyHandler m_idTable=%d m_byNumber=%d",
		m_idTable, m_byNumber  ) ;

	return PACKET_EXE_CONTINUE;

	__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;
}