waitformeet.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 330 行

CPP
330
字号
#include "Assert.h"#include "Player.h"#include "GamePlayer.h"#include "Slayer.h"#include "Vampire.h"#include "PacketUtil.h"#include "PlayerCreature.h"#include "ItemNameInfo.h"#include "FlagSet.h"#include "StringStream.h"#include "StringPool.h"#include "WaitForMeet.h"#include "CoupleManager.h"#include "OptionInfo.h"#include "VariableManager.h"#include "item/CoupleRing.h"#include "item/VampireCoupleRing.h"#include "ItemFactoryManager.h"#include "Gpackets/GCCreateItem.h"//#include "Gpackets/GCItemNameInfoList.h"#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCSystemMessage.h"#include "Gpackets/GCModifyInformation.h"#include <stdio.h>const int CoupleRingOptionNum = 4;static const char* CoupleRingOptions[2][4] ={	{ "STR+4", "DEX+4", "DAM+3", "HP+4" },	{ "STR+4", "DEX+4", "DAM+3", "ASPD+4" } };uint WaitForMeet::waitPartner( PlayerCreature* pTargetPC )	throw(Error){	__BEGIN_TRY	if ( pTargetPC == NULL )		return COUPLE_MESSAGE_LOGOFF;		// 傲 捞皋矫瘤 敬促. 喊肺 咯扁辑 府畔登绰 老阑 绝阑淀	PlayerCreature* pWaitingPC = getWaitingPC();	if ( pWaitingPC == NULL )		return COUPLE_MESSAGE_LOGOFF;	uint result = canMakeCouple( pWaitingPC, pTargetPC );	if ( result != 0 )		return result;	GCSystemMessage gcSystemMessage;//	StringStream msg;//	msg << pWaitingPC->getName() << "丛栏肺何磐 目敲 脚没捞 吭嚼聪促.";	char msg[100];	sprintf( msg, g_pStringPool->c_str( STRID_REQUEST_MEET ), pWaitingPC->getName().c_str() );	gcSystemMessage.setMessage( msg );	pTargetPC->getPlayer()->sendPacket( &gcSystemMessage );	return 0;		__END_CATCH}uint WaitForMeet::acceptPartner( PlayerCreature* pRequestedPC )	throw(Error){	__BEGIN_TRY	Assert( pRequestedPC != NULL );	PlayerCreature* pWaitingPC = getWaitingPC();	if ( pWaitingPC == NULL )		return COUPLE_MESSAGE_LOGOFF;	// 辆练捞 促福芭唱 己喊捞 鞍栏搁 救等促.	// 饭骇 力茄俊 吧府芭唱 捣捞 葛磊扼档 救等促.	// 笛 吝 茄疙捞 捞固 目敲捞扼档 救等促.	uint result = canMakeCouple( pRequestedPC, pWaitingPC );	if ( result != 0 )		return result;	// 目敲傅阑 霖促.	_TPOINT pt1;	_TPOINT pt2;	// 茄疙父 罐绰 版快甫 规瘤窍扁 困秦 固府 持阑 荐 乐绰瘤甫 犬牢茄促.	// 官蹿俊 冻绢瘤搁 抄府抄促.	if ( !(canGetCoupleRing( pRequestedPC, pt1 ) && canGetCoupleRing( pWaitingPC, pt2 )) ) return COUPLE_MESSAGE_INVENTORY_FULL;	// 目敲傅阑 霖促.	CoupleRingBase* pNewItem1 = giveCoupleRing( pRequestedPC, pWaitingPC->getName(), &pt1 );	CoupleRingBase* pNewItem2 = giveCoupleRing( pWaitingPC, pRequestedPC->getName(), &pt2 );	// 困俊辑 犬牢沁栏骨肺 咯扁辑 秽荤府唱搁 胶饭靛啊 部看芭唱 刚 巩力啊 乐促.	Assert( pNewItem1 != NULL );	Assert( pNewItem2 != NULL );	// 目敲傅俊 辑肺 惑措狼 酒捞袍ID甫 扁废秦敌促. 唱吝俊 瘤匡锭 鞍捞 瘤况具 登聪鳖.	pNewItem1->setPartnerItemID( pNewItem2->getItemID() );	pNewItem2->setPartnerItemID( pNewItem1->getItemID() );//	ItemNameInfo *pRequestedPCItemNameInfo = new ItemNameInfo( pNewItem1->getObjectID(), pWaitingPC->getName() );//	ItemNameInfo *pWaitingPCItemNameInfo = new ItemNameInfo( pNewItem2->getObjectID(), pRequestedPC->getName() );//	pRequestedPC->addItemNameInfoList( pRequestedPCItemNameInfo );//	pWaitingPC->addItemNameInfoList( pWaitingPCItemNameInfo );	// 目敲概聪历俊 殿废茄促.	g_pCoupleManager->makeCouple( pWaitingPC, pRequestedPC );	// 目敲 殿废陛阑 罐酒辰促.	receiveCoupleRegisterFee( pWaitingPC );	receiveCoupleRegisterFee( pRequestedPC );	// 捞力 沥侥栏肺 目敲烙阑 急器钦聪促.	pRequestedPC->getFlagSet()->turnOn( FLAGSET_IS_COUPLE );	pWaitingPC->getFlagSet()->turnOn( FLAGSET_IS_COUPLE );	pRequestedPC->getFlagSet()->turnOn( FLAGSET_WAS_COUPLE );	pWaitingPC->getFlagSet()->turnOn( FLAGSET_WAS_COUPLE );	pRequestedPC->getFlagSet()->save( pRequestedPC->getName() );	pWaitingPC->getFlagSet()->save( pWaitingPC->getName() );		// 歹 且 芭 绝唱.....	// 捞抚嘿篮 酒捞袍 府胶飘 格废阑 盎脚秦辑 焊郴霖促.	// 救 焊郴霖促. -_- - 2003.2.24/*	if ( !pRequestedPC->isEmptyItemNameInfoList()		&& !pWaitingPC->isEmptyItemNameInfoList() )	{		GCItemNameInfoList  gcRequestedPCItemNamInfoList;		GCItemNameInfoList  gcWaitingPCItemNamInfoList;		makeGCItemNameInfoList( &gcRequestedPCItemNamInfoList, pRequestedPC );		makeGCItemNameInfoList( &gcWaitingPCItemNamInfoList, pWaitingPC );		pRequestedPC->getPlayer()->sendPacket( &gcRequestedPCItemNamInfoList );		pWaitingPC->getPlayer()->sendPacket( &gcWaitingPCItemNamInfoList );	}	else 	{		Assert(false);	}*/	return 0;		__END_CATCH}void WaitForMeet::timeExpired()	throw(Error){	__BEGIN_TRY	// 扁促府带 荤恩俊霸 救登继嚼聪促..扼绊 皋矫瘤甫 焊郴霖促.	GCNPCResponse gcNPCResponse;	gcNPCResponse.setCode( NPC_RESPONSE_MEET_WAIT_TIME_EXPIRED );	PlayerCreature* pPC = getWaitingPC();	if ( pPC != NULL )		pPC->getPlayer()->sendPacket( &gcNPCResponse );		__END_CATCH}Gold_t WaitForMeet::getCoupleRegisterFee( PlayerCreature* pPC )	throw(Error){	__BEGIN_TRY	Assert( pPC != NULL );	Gold_t ret = 0;	switch( pPC->getRace() )	{		case RACE_SLAYER:			{				Slayer* pSlayer = dynamic_cast<Slayer*>( pPC );				Assert( pSlayer != NULL );				ret = 100000 * ( pSlayer->getTotalAttr( ATTR_BASIC ) / 3 );			}			break;		case RACE_VAMPIRE:			{				Vampire* pVampire = dynamic_cast<Vampire*>( pPC );				Assert( pVampire != NULL );				ret = 100000 * pVampire->getLevel();			}			break;		default:			return 0;	}	return ret;	__END_CATCH}void WaitForMeet::receiveCoupleRegisterFee( PlayerCreature* pPC ) 	throw(Error){ 	__BEGIN_TRY	pPC->decreaseGoldEx( getCoupleRegisterFee( pPC ) ); 	GCModifyInformation gcMI;	gcMI.addLongData( MODIFY_GOLD, pPC->getGold() );	pPC->getPlayer()->sendPacket( &gcMI );	__END_CATCH}uint WaitForMeet::canMakeCouple( PlayerCreature* pPC1, PlayerCreature* pPC2 ){	if ( pPC1->getRace() != pPC2->getRace() ) return COUPLE_MESSAGE_DIFFERENT_RACE;	if ( pPC1->getSex() == pPC2->getSex() ) return COUPLE_MESSAGE_SAME_SEX;	uint result = canHavePartner( pPC1 );	if ( result != 0 )		return result;	result = canHavePartner( pPC2 );	if ( result != 0 )		return result;	return 0;}OptionType_t WaitForMeet::getRandomOptionType( PlayerCreature* pPC ){	int op = rand() % 4;	return g_pOptionInfoManager->getOptionType( CoupleRingOptions[(int)pPC->getRace()][op] );}CoupleRingBase* WaitForMeet::giveCoupleRing( PlayerCreature* pPC, string partnerName, _TPOINT* pPt )	throw(Error){	__BEGIN_TRY	list<OptionType_t> optionList;	optionList.push_back( getRandomOptionType( pPC ) );		Item* 		pNewItem 		= g_pItemFactoryManager->createItem(getItemClass( pPC ), getItemType( pPC ), optionList);	CoupleRingBase* pCoupleItem 	= dynamic_cast<CoupleRingBase*>(pNewItem);	Assert(pCoupleItem != NULL);	pCoupleItem->setName( partnerName );	pPC->getZone()->registerObject( pCoupleItem );	Inventory* pPCInven = pPC->getInventory();	_TPOINT pt;	if ( pPt == NULL )	{		if ( !canGetCoupleRing( pPC, pt ) ) return NULL;	}	else	{		pt = *pPt;	}	Assert(pPCInven->addItem(pt.x, pt.y, pCoupleItem));	pCoupleItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y );	GCCreateItem	gcCreateItem;	makeGCCreateItem( &gcCreateItem, pCoupleItem, pt.x, pt.y );	pPC->getPlayer()->sendPacket(&gcCreateItem);	return pCoupleItem;	__END_CATCH}bool WaitForMeet::canGetCoupleRing( PlayerCreature* pPC, _TPOINT& pt ){	ItemInfo* pCoupleItemInfo = CoupleRingBase::getItemInfo( getItemType( pPC ), pPC->getRace() );//g_pCoupleItemInfoManager->getItemInfo(0);	return pPC->getInventory()->getEmptySlot( pCoupleItemInfo->getVolumeWidth(), pCoupleItemInfo->getVolumeHeight(), pt );}uint WaitForMeet::canHavePartner( PlayerCreature* pPC )	throw(Error){	__BEGIN_TRY	Assert( pPC != NULL );	GamePlayer* pGP = dynamic_cast<GamePlayer*>(pPC->getPlayer());	Assert( pGP != NULL );	if ( !pGP->isPayPlaying() ) return COUPLE_MESSAGE_NOT_PAY_PLAYER;	if ( pPC->getFlagSet()->isOn( FLAGSET_IS_COUPLE ) ) return COUPLE_MESSAGE_ALREADY_COUPLE;	if ( !g_pVariableManager->canRecouple() )		if ( pPC->getFlagSet()->isOn( FLAGSET_WAS_COUPLE ) ) return COUPLE_MESSAGE_WAS_COUPLE;	if ( pPC->getGold() < getCoupleRegisterFee( pPC ) ) return COUPLE_MESSAGE_NOT_ENOUGH_GOLD;	switch( pPC->getRace() )	{		case RACE_SLAYER:			{				Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);				Assert( pSlayer != NULL );				Attr_t totalAttr = pSlayer->getTotalAttr( ATTR_BASIC );				if ( totalAttr < 65 )					return COUPLE_MESSAGE_NOT_ENOUGH_ATTR;			}			break;		case RACE_VAMPIRE:			{				Vampire* pVampire = dynamic_cast<Vampire*>(pPC);				Assert( pVampire != NULL );				if ( pVampire->getLevel() < 20 )					return COUPLE_MESSAGE_NOT_ENOUGH_LEVEL;			}			break;		default:			Assert( false );	}	return 0;	__END_CATCH}

⌨️ 快捷键说明

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