cgtamemonsterhandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 142 行

CPP
142
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGTameMonsterHandler.cc// Written By  : elca@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "CGTameMonster.h"#ifdef __GAME_SERVER__#include "GamePlayer.h"#include "PlayerCreature.h"#include "PetItem.h"#include "PetFood.h"#include "PetInfo.h"#include "Zone.h"#include "Monster.h"#include "Inventory.h"#include "ItemUtil.h"#include "ItemFactoryManager.h"#include <list>#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCDeleteInventoryItem.h"#include "PacketUtil.h"#include "PetTypeInfo.h"#include "VSDateTime.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTameMonsterHandler::execute (CGTameMonster* pPacket , Player* pPlayer)	     throw (Error){	__BEGIN_TRY#ifdef __GAME_SERVER__	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Assert( pGamePlayer != NULL );	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature());	Assert( pPC != NULL );	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	Monster* pMonster = dynamic_cast<Monster*>(pZone->getCreature( pPacket->getObjectID() ));	if ( pMonster == NULL ) return;	Item* pItem = pPC->getExtraInventorySlotItem();	if ( pItem == NULL || pItem->getItemClass() != Item::ITEM_CLASS_PET_FOOD || pItem->getNum() != 1 ) return;	PetFoodInfo* pPetFoodInfo = dynamic_cast<PetFoodInfo*>(g_pPetFoodInfoManager->getItemInfo( pItem->getItemType() ));	Assert( pPetFoodInfo != NULL );	Inventory* pInventory = pPC->getInventory();	if ( pInventory == NULL ) return;	ItemType_t petType = PET_COMMON;	PetItem* pPetItem = dynamic_cast<PetItem*>(g_pItemFactoryManager->createItem( Item::ITEM_CLASS_PET_ITEM, petType, list<OptionType_t>() ));	Assert( pPetItem != NULL );	_TPOINT pt;	if ( !pInventory->getEmptySlot( pPetItem, pt ) )	{		SAFE_DELETE( pPetItem );		return;	}	pPC->deleteItemFromExtraInventorySlot();	GCDeleteInventoryItem gcDI;	gcDI.setObjectID( pItem->getObjectID() );	pGamePlayer->sendPacket( &gcDI );	pItem->destroy();	SAFE_DELETE( pItem );	/*	 * 咯扁辑 购啊 犬牢阑 秦具 茄促.	 */	int ratio = rand()%100;	// 傍侩 脐父 部角 荐 乐促.	PetTypeInfo* pPetTypeInfo = PetTypeInfoManager::getInstance()->getPetTypeInfo(petType);	if ( pPetTypeInfo == NULL || pPetTypeInfo->getOriginalMonsterType() != pMonster->getMonsterType() || ratio >= pPetFoodInfo->getTameRatio() )	{		//cout << "部矫扁 角菩 : " << ratio << endl;		pMonster->addEnemy( pPC );		return;	}	pZone->deleteCreature( pMonster, pMonster->getX(), pMonster->getY() );	SAFE_DELETE( pMonster );	/*	 * 咯扁辑 秦寸 脐狼 沥焊甫 啊廉客具 等促.	 */	PetInfo* pPetInfo = new PetInfo;	pPetInfo->setPetType( petType );	pPetInfo->setPetLevel(0);	pPetInfo->setPetCreatureType(pPetTypeInfo->getPetCreatureType(0));	pPetInfo->setPetAttr(0xff);	pPetInfo->setPetExp(0);	pPetInfo->setPetAttrLevel(0);	pPetInfo->setFoodType(pPetFoodInfo->getItemType());	pPetInfo->setGamble(0);	pPetInfo->setCutHead(0);	pPetInfo->setPetHP(pPetFoodInfo->getPetHP());	pPetInfo->setFeedTime( VSDateTime::currentDateTime() );	// 剧规氢 傅农	pPetItem->setPetInfo( pPetInfo );	pPetInfo->setPetItem( pPetItem );	pZone->registerObject( pPetItem );	pInventory->addItem( pPetItem, pt );	Assert( pt.x != -1 );	pPetItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y );	// TraceLog 甫 巢变促.	remainTraceLog( pPetItem, "GOD", pPC->getName(), ITEM_LOG_CREATE, DETAIL_PICKUP );		GCCreateItem gcCreateItem;	makeGCCreateItem( &gcCreateItem, pPetItem, pt.x, pt.y );	pGamePlayer->sendPacket( &gcCreateItem );	pPetItem->whenPCTake( pPC );#endif	__END_CATCH}

⌨️ 快捷键说明

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