cgtypestringlisthandler.cpp

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

CPP
259
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGTypeStringListHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGTypeStringList.h"#include "Player.h"#include "GamePlayer.h"#include "PlayerCreature.h"#include "Zone.h"#include "NPC.h"#include "PCFinder.h"#include "FlagSet.h"#include "couple/PartnerWaitingManager.h"#include "couple/WaitForApart.h"#include "couple/CoupleManager.h"#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCModifyInformation.h"#include "SystemAvailabilitiesManager.h"#ifdef __GAME_SERVER__#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTypeStringListHandler::execute (CGTypeStringList* pPacket , Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	if ( pPacket->getSize() < 1 )	{		return;	}	SYSTEM_ASSERT( SYSTEM_COUPLE );	switch ( pPacket->getType() )	{		case CGTypeStringList::STRING_TYPE_WAIT_FOR_MEET:			executeWaitForMeet( pPacket, pPlayer );			break;		case CGTypeStringList::STRING_TYPE_WAIT_FOR_APART:			executeWaitForApart( pPacket, pPlayer );			break;		case CGTypeStringList::STRING_TYPE_FORCE_APART_COUPLE:			executeApartForce( pPacket, pPlayer );			break;		default:			break;	}	return;#endif	// __GAME_SERVER__    __END_DEBUG_EX __END_CATCH}void CGTypeStringListHandler::executeWaitForMeet(CGTypeStringList* pPacket, Player* pPlayer)	throw(ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	Assert(pPacket->getSize() != 0);	GCNPCResponse gcQuitDialog;	gcQuitDialog.setCode( NPC_RESPONSE_QUIT_DIALOGUE );	GamePlayer* pGP = dynamic_cast<GamePlayer*>(pPlayer);	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGP->getCreature());	Assert( pPC != NULL );	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	Creature* pNPCCreature = pZone->getCreature((ObjectID_t)pPacket->getParam());	if ( pNPCCreature == NULL ) 	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	if ( !pNPCCreature->isNPC() )	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	NPC* pNPC = dynamic_cast<NPC*>(pNPCCreature);	Assert( pNPC != NULL );	PartnerWaitingManager *pPWM = pNPC->getCoupleRegisterManager();	Assert( pPWM != NULL );	uint result = pPWM->waitForPartner( pPC, pPacket->popString() );	if ( result != 0 )	{		gcQuitDialog.setCode( NPC_RESPONSE_COUPLE_CANNOT_MEET );		gcQuitDialog.setParameter( result );		pPlayer->sendPacket( &gcQuitDialog );		return;	}#endif    __END_DEBUG_EX __END_CATCH}void CGTypeStringListHandler::executeWaitForApart(CGTypeStringList* pPacket, Player* pPlayer) 	throw(ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	Assert(pPacket->getSize() != 0);	GCNPCResponse gcQuitDialog;	gcQuitDialog.setCode( NPC_RESPONSE_NOT_COUPLE );	GamePlayer* pGP = dynamic_cast<GamePlayer*>(pPlayer);	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGP->getCreature());	Assert( pPC != NULL );	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	Creature* pNPCCreature = pZone->getCreature((ObjectID_t)pPacket->getParam());	if ( pNPCCreature == NULL ) 	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	if ( !pNPCCreature->isNPC() )	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	NPC* pNPC = dynamic_cast<NPC*>(pNPCCreature);	Assert( pNPC != NULL );	PartnerWaitingManager *pPWM = pNPC->getCoupleUnregisterManager();	Assert( pPWM != NULL );	uint result = pPWM->waitForPartner( pPC, pPacket->popString() );	if ( result != 0 )	{		gcQuitDialog.setParameter( result );		pPlayer->sendPacket( &gcQuitDialog );		return;	}#endif    __END_DEBUG_EX __END_CATCH}void CGTypeStringListHandler::executeApartForce( CGTypeStringList* pPacket, Player* pPlayer )	throw(ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	Assert(pPacket->getSize() != 0);	GCNPCResponse gcQuitDialog;	gcQuitDialog.setCode( NPC_RESPONSE_NOT_COUPLE );	GamePlayer* pGP = dynamic_cast<GamePlayer*>(pPlayer);	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGP->getCreature());	Assert( pPC != NULL );	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	if ( !g_pCoupleManager->hasCouple( pPC ) )	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	string PartnerName;	if ( !g_pCoupleManager->getPartnerName( pPC, PartnerName ) )	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	if ( pPacket->popString() != PartnerName )	{		pPlayer->sendPacket( &gcQuitDialog );		return;	}	PlayerCreature* pPartnerPC = NULL;    __ENTER_CRITICAL_SECTION((*g_pPCFinder))    Creature* pTargetCreature = g_pPCFinder->getCreature_LOCKED(PartnerName);    if (pTargetCreature!=NULL)    {        if ( !pTargetCreature->isPC() )        {            g_pPCFinder->unlock();			pPlayer->sendPacket( &gcQuitDialog );			return;        }        pPartnerPC = dynamic_cast<PlayerCreature*>( pTargetCreature );		if ( pPartnerPC != NULL )		{			WaitForApart::removeCoupleItem( pPartnerPC );			pPartnerPC->getFlagSet()->turnOff( FLAGSET_IS_COUPLE );			pPartnerPC->getFlagSet()->save( pPartnerPC->getName() );			gcQuitDialog.setCode( NPC_RESPONSE_COUPLE_APART_SUCCESS );			pPartnerPC->getPlayer()->sendPacket( &gcQuitDialog );		}    }    __LEAVE_CRITICAL_SECTION((*g_pPCFinder))	WaitForApart::removeCoupleItem( pPC );	g_pCoupleManager->removeCoupleForce( pPC, PartnerName );	pPC->getFlagSet()->turnOff( FLAGSET_IS_COUPLE );	pPC->getFlagSet()->save( pPC->getName() );	Alignment_t	currentAlignment = pPC->getAlignment();	Alignment_t newAlignment = max( -10000, (int)currentAlignment - 5000 );	pPC->setAlignment( newAlignment );	GCModifyInformation gcMI;	gcMI.addLongData( MODIFY_ALIGNMENT, newAlignment );	pPlayer->sendPacket( &gcMI );	gcQuitDialog.setCode( NPC_RESPONSE_COUPLE_APART_SUCCESS );	pPlayer->sendPacket( &gcQuitDialog );	return;#endif    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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