cgpartyinvitehandler.cpp

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

CPP
323
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGPartyInviteHandler.cpp// Written By  : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "CGPartyInvite.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Creature.h"	#include "Zone.h"	#include "Party.h"	#include "CreatureUtil.h"	#include "Gpackets/GCPartyInvite.h"	#include "Gpackets/GCPartyError.h"	#include "Gpackets/GCSystemMessage.h"	#include "SystemAvailabilitiesManager.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGPartyInviteHandler::execute (CGPartyInvite* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	SYSTEM_ASSERT( SYSTEM_PARTY );	ObjectID_t TargetOID = pPacket->getTargetObjectID();	BYTE CODE = pPacket->getCode();	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Assert(pGamePlayer != NULL);	Creature* pCreature = pGamePlayer->getCreature();	Assert(pCreature != NULL);	Zone* pZone = pCreature->getZone();	Assert(pZone != NULL);	PartyInviteInfoManager* pPIIM = pZone->getPartyInviteInfoManager();	// 颇萍 扁瓷 滚弊 锭巩俊 阜酒初篮 何盒捞促.	// 辫己刮	/*	pPIIM->cancelInvite(pCreature);	GCSystemMessage gcSystemMessage;	gcSystemMessage.setMessage("颇萍 扁瓷篮 滚弊肺 牢窍咯 泅犁 瘤盔登瘤 臼嚼聪促.");	pPlayer->sendPacket(&gcSystemMessage);	executeError(pPacket, pPlayer, GC_PARTY_ERROR_UNKNOWN);	return;	*/	/////	Creature* pTargetCreature = NULL;	/*	try	{		pTargetCreature = pZone->getCreature(TargetOID);	}	catch (NoSuchElementException)	{		pPIIM->cancelInvite(pCreature);		executeError(pPacket, pPlayer, GC_PARTY_ERROR_TARGET_NOT_EXIST);		return;	}	*/	// NoSuch力芭. by sigi. 2002.5.2	pTargetCreature = pZone->getCreature(TargetOID);		if (pTargetCreature==NULL)	{		pPIIM->cancelInvite(pCreature);		executeError(pPacket, pPlayer, GC_PARTY_ERROR_TARGET_NOT_EXIST);		return;	}		// 颇萍俊 檬措且 仇捞 PC啊 酒聪芭唱, 辆练捞 促福搁 啊涝矫懦 荐啊 绝促.	if (!pTargetCreature->isPC() || !isSameRace(pCreature, pTargetCreature))	{		pPIIM->cancelInvite(pCreature);		executeError(pPacket, pPlayer,GC_PARTY_ERROR_RACE_DIFFER);		return;	}	// 鸥百狼 敲饭捞绢甫 罐酒柯促. 	//PartyInviteInfo* pInfo1 = pPIIM->getInviteInfo(pCreature->getName());	PartyInviteInfo* pInfo2 = pPIIM->getInviteInfo(pTargetCreature->getName());	Player* pTargetPlayer = pTargetCreature->getPlayer();	GCPartyInvite gcPartyInvite;	// 促弗 荤恩阑 颇萍俊 啊涝矫虐绊磊 且 锭	if (CODE == CG_PARTY_INVITE_REQUEST)	{		//cout << "CODE:CG_PARTY_INVITE_REQUEST" << endl;		// 檬措茄 仇捞 捞固 促弗 仇阑 檬措 吝捞扼搁... 		// A啊 B甫 檬措茄促. 弊 促澜, B啊 A狼 夸备甫		// 傈崔罐瘤 给茄 惑怕俊辑 A甫 檬措茄促. 		// 捞 版快 笛 促 CODE啊 CG_PARTY_INVITE_REQUEST牢单...		// cancalInvite秦滚府搁, A客 B狼 沥焊啊 朝酒啊滚府霸 等促.		// 弊巴阑 规瘤窍扁 困秦 林籍贸府秦滚赴促.		// 澜, 公郊 富牢瘤 郴啊 毫档 肋 葛福摆匙... -- excel96		/*		if (pInfo1 != NULL)		{			//pPIIM->cancelInvite(pCreature);			return;		}		*/		// 檬措罐篮 仇捞 捞固 促弗 仇苞 檬措 包拌 吝捞扼搁...		// 官悔聪啊 檬措俊 览且 荐 绝促.		if (pInfo2 != NULL)		{			//cout << "pInfo2 != NULL" << endl;			gcPartyInvite.setTargetObjectID(pPacket->getTargetObjectID());			gcPartyInvite.setCode(GC_PARTY_INVITE_BUSY);			pPlayer->sendPacket(&gcPartyInvite);			return;		}		int PartyID       = pCreature->getPartyID();		int TargetPartyID = pTargetCreature->getPartyID();		//cout << "Creature" << pCreature->getName() << "] PartyID = " << PartyID << endl;		//cout << "TargetCreature" << pTargetCreature->getName() << "] PartyID = " << PartyID << endl;		// 檬措茄 仇苞 檬措罐篮 仇 笛 促啊 颇萍俊 啊涝登绢乐促搁 啊涝且 荐啊 绝促.		if (PartyID != 0 && TargetPartyID != 0)		{			gcPartyInvite.setTargetObjectID(pPacket->getTargetObjectID());			gcPartyInvite.setCode(GC_PARTY_INVITE_ANOTHER_PARTY);			pPlayer->sendPacket(&gcPartyInvite);			return;		}		// 檬措茄 仇狼 颇萍 箭磊啊 钙胶扼搁 檬措且 荐 绝促.		if (PartyID != 0)		{			if (!g_pGlobalPartyManager->canAddMember(PartyID))			{				gcPartyInvite.setTargetObjectID(pPacket->getTargetObjectID());				gcPartyInvite.setCode(GC_PARTY_INVITE_MEMBER_FULL);				pPlayer->sendPacket(&gcPartyInvite);				return;			}		}		// 檬措罐篮 仇狼 颇萍 箭磊啊 钙胶扼搁 檬措且 荐 绝促.		if (TargetPartyID != 0)		{			if (!g_pGlobalPartyManager->canAddMember(TargetPartyID))			{				gcPartyInvite.setTargetObjectID(pPacket->getTargetObjectID());				gcPartyInvite.setCode(GC_PARTY_INVITE_MEMBER_FULL);				pPlayer->sendPacket(&gcPartyInvite);				return;			}		}		//cout << "Sending Packet" << endl;		// 菩哦阑 焊郴霖促.		gcPartyInvite.setTargetObjectID(pCreature->getObjectID());		gcPartyInvite.setCode(GC_PARTY_INVITE_REQUEST);		pTargetPlayer->sendPacket(&gcPartyInvite);		//cout << "Sent gcPartyInvite" << endl;		// 笛 促 檬措葛靛肺 甸绢艾栏骨肺, 檬措 沥焊甫 积己秦 霖促.		pPIIM->initInviteInfo(pCreature, pTargetCreature);		//cout << "initInviteInfo OK" << endl;	}	// 颇萍 啊涝 脚没阑 秒家且 锭	else if (CODE == CG_PARTY_INVITE_CANCEL)	{		// 泅犁 檬措 吝牢瘤甫 眉农茄促.		if (pPIIM->isInviting(pCreature, pTargetCreature))		{			// 菩哦阑 霖厚秦 焊郴霖促.			gcPartyInvite.setTargetObjectID(pCreature->getObjectID());			gcPartyInvite.setCode(GC_PARTY_INVITE_CANCEL);			pTargetPlayer->sendPacket(&gcPartyInvite);			// 檬措甫 秒家矫挪促.			pPIIM->cancelInvite(pCreature, pTargetCreature);		}		else		{			executeError(pPacket, pPlayer, GC_PARTY_ERROR_NOT_INVITING);			return;		}	}	// 颇萍 啊涝 夸没阑 罐酒甸看阑 锭	else if (CODE == CG_PARTY_INVITE_ACCEPT)	{		if (pPIIM->isInviting(pCreature, pTargetCreature))		{			int PartyID       = pCreature->getPartyID();			int TargetPartyID = pTargetCreature->getPartyID();			// 颇萍俊 加秦 乐绰 仇捞 颇萍俊 加窍瘤 臼绰 仇阑 檬措沁阑 锭			// (颇萍俊 加秦乐瘤 臼篮 仇捞, 颇萍俊 加秦 乐绰 仇狼 檬措俊 览沁阑 锭)			if (TargetPartyID != 0 && PartyID == 0)			{				// 臂肺国 颇萍 概聪历俊 糕滚甫 歹茄促.				if (g_pGlobalPartyManager->addPartyMember(TargetPartyID, pCreature))				{					// 肺拿 颇萍 概聪历俊 糕滚甫 歹茄促.					LocalPartyManager* pLocalPartyManager = pZone->getLocalPartyManager();					pLocalPartyManager->addPartyMember(TargetPartyID, pCreature);				}			}			// 颇萍俊 加秦乐瘤 臼篮 仇捞 颇萍俊 加秦乐绰 仇阑 檬措沁阑 锭			// (颇萍俊 加秦乐绰 仇捞, 颇萍俊 加秦乐瘤 臼篮 仇狼 檬措俊 览沁阑 锭)			// (颇萍俊 加秦乐绰 仇捞, 寇何牢狼 柳涝阑 倾啊沁阑 锭)			else if (PartyID != 0 && TargetPartyID == 0)			{				// 臂肺国 颇萍 概聪历俊 糕滚甫 歹茄促.				if (g_pGlobalPartyManager->addPartyMember(PartyID, pTargetCreature))				{					// 肺拿 颇萍 概聪历俊 糕滚甫 歹茄促.					LocalPartyManager* pLocalPartyManager = pZone->getLocalPartyManager();					pLocalPartyManager->addPartyMember(PartyID, pTargetCreature);				}			}			// 滴 仇 促 酒公繁 颇萍俊 加秦乐瘤 臼阑 锭			// (货肺款 颇萍甫 积己且 锭)			else			{				// 货肺款 颇萍甫 父甸绢 殿废茄促.				int NewPartyID = g_pGlobalPartyManager->registerParty();				// 臂肺国 颇萍 概聪历俊 臂肺国 颇萍甫 歹窍绊, 糕滚甫 歹茄促.				g_pGlobalPartyManager->createParty(NewPartyID, pTargetCreature->getCreatureClass());				g_pGlobalPartyManager->addPartyMember(NewPartyID, pCreature);				g_pGlobalPartyManager->addPartyMember(NewPartyID, pTargetCreature);				// 肺拿 颇萍 概聪历俊 肺拿 颇萍甫 歹窍绊, 糕滚甫 歹茄促.				LocalPartyManager* pLocalPartyManager = pZone->getLocalPartyManager();				pLocalPartyManager->createParty(NewPartyID, pTargetCreature->getCreatureClass());				pLocalPartyManager->addPartyMember(NewPartyID, pCreature);				pLocalPartyManager->addPartyMember(NewPartyID, pTargetCreature);			}			// 颇萍 檬措啊 场车栏骨肺, 颇萍 檬措 沥焊甫 昏力秦霖促.			pPIIM->cancelInvite(pCreature, pTargetCreature);		}		else		{			executeError(pPacket, pPlayer, GC_PARTY_ERROR_NOT_INVITING);			return;		}	}	// 颇萍 啊涝 夸没阑 芭何沁阑 锭	else if (CODE == CG_PARTY_INVITE_REJECT)	{		if (pPIIM->isInviting(pCreature, pTargetCreature))		{			// 菩哦阑 焊辰促.			gcPartyInvite.setTargetObjectID(pCreature->getObjectID());			gcPartyInvite.setCode(GC_PARTY_INVITE_REJECT);			pTargetPlayer->sendPacket(&gcPartyInvite);			// 颇萍 檬措甫 芭何沁栏骨肺 檬措 沥焊甫 昏力矫难霖促.			pPIIM->cancelInvite(pCreature, pTargetCreature);		}		else		{			executeError(pPacket, pPlayer, GC_PARTY_ERROR_NOT_INVITING);			return;		}	}	else if (CODE == CG_PARTY_INVITE_BUSY)	{		gcPartyInvite.setTargetObjectID(pPacket->getTargetObjectID());		gcPartyInvite.setCode(GC_PARTY_INVITE_BUSY);		pPlayer->sendPacket(&gcPartyInvite);	}	else	{		throw ProtocolException("CGPartyInvite::execute() : Unknown Code");	}#endif	__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGPartyInviteHandler::executeError (CGPartyInvite* pPacket , Player* pPlayer, BYTE ErrorCode)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	GCPartyError gcPartyError;	gcPartyError.setTargetObjectID(pPacket->getTargetObjectID());	gcPartyError.setCode(ErrorCode);	pPlayer->sendPacket(&gcPartyError);#endif	__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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