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 + -
显示快捷键?