cgnpctalkhandler.cpp

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

CPP
269
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGNPCTalkHandler.cpp// Written By  : Reiot// Description : //////////////////////////////////////////////////////////////////////////////#include "CGNPCTalk.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "NPC.h"	#include "StringPool.h"	#include "quest/TriggerManager.h"	#include "quest/Trigger.h"	#include "quest/Condition.h"	#include "quest/Action.h"	#include "Gpackets/GCNPCSayDynamic.h"	#include "Gpackets/GCNPCResponse.h"#endifconst string DiffClanSpeech[] = {	"版厚捍! 版厚捍! 咯扁 官配府狼 辆汗甸捞 魔涝秦吭促.",	"栏褥? 捞巴篮.. 官配府狼 趋练甸狼 乔晨货! 靛叼绢 匙仇甸捞 喉扼靛丛狼 救侥贸鳖瘤 歹反洒妨 吭备唱!!",	"匙 仇篮 穿备具? 皑洒 咯扁啊 绢叼扼绊.. Abscede Hinc!!"};//////////////////////////////////////////////////////////////////////////////// 敲饭捞绢啊 NPC甫 努腐且 版快, 努扼捞攫飘啊 CGNPCTalk 菩哦阑 辑滚肺// 傈价茄促. 辑滚绰 捞 菩哦阑 勤甸傅且 锭, NPC俊 CONDITION_TALKED_BY // 牧叼记 敲贰弊啊 难廉 乐栏搁, 飘府芭甫 沤祸窍搁辑 利例茄 飘府芭甫 茫酒辑// 楷包等 咀记阑 角青茄促.//////////////////////////////////////////////////////////////////////////////void CGNPCTalkHandler::execute (CGNPCTalk* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX	__BEGIN_DEBUG#ifdef __GAME_SERVER__	try 	{		Assert(pPacket != NULL);		Assert(pPlayer != NULL);		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);		Creature*   pPC         = pGamePlayer->getCreature();		Zone*       pZone       = pPC->getZone();		// 老窜 富阑 芭绰 PC啊 泅犁 混酒乐绰 惑怕咯具 茄促.		// 捞 八荤甫 窍绰 捞蜡绰 刀俊 吝刀登绢 乐绰 浇饭捞绢啊, 矫埃 瞒肺 牢秦辑		// NPC茄抛 HEAL阑 夸没茄 流饶俊, 刀俊 狼秦辑 磷绢滚府搁,		// 老窜 官蹿俊 静矾瘤霸 登绰单, 梆捞绢 NPC俊 狼秦辑 摹丰甫 罐霸 等促.		// 捞 版快, HP绰 钱牢单 官蹿俊 静矾廉乐霸 等促.		// 捞 富篮 PCManager::heartbeat()俊辑 killCreature肺 甸绢啊瘤 臼霸 等促绰 富捞促.		// 澜. 肋 汲疙捞 登瘤 臼绰单, 窍扛瓢 NPC俊霸 富阑 吧妨搁 敲饭捞绢绰 混酒乐绢具 茄促.		if (pPC->isDead())		{			return;		}		Creature* pNPCBase = NULL;		/*		try 		{ 			pNPCBase = pZone->getCreature(pPacket->getObjectID()); 		} 		catch (NoSuchElementException) 		{ 			// 弊繁 NPC啊 绝促搁 府畔茄促.			return;		}		*/		// NoSuch力芭. by sigi. 2002.5.2		pNPCBase = pZone->getCreature(pPacket->getObjectID()); 		if (pNPCBase==NULL)		{			return;		}		NPC* pNPC = dynamic_cast<NPC*>(pNPCBase);		// ObjectID啊 NPC啊 酒匆 荐档 乐菌促. 够鳖.. 荤扁牢啊? 菩哦 部牢扒啊?		// 绢露电 公矫窍档废窍磊.		// by sigi. 2002.11.25		if (pNPC==NULL)		{			return;		}		// 酒淬狼 己瘤俊辑绰 NPC客 NP狼 辆练阑 公矫茄促.		// 己俊辑绰 辆练喊 NPC啊 促福促.		if ( !pZone->isHolyLand() 			|| pZone->isCastle() )		{			// 轨颇捞绢啊 浇饭捞绢 NPC俊霸 富阑 吧菌阑 版快俊 公矫茄促.			if (pNPC->getRace() == NPC_RACE_SLAYER && pPC->isVampire())			{				// 老窜 努扼捞攫飘甫 困秦 OK菩哦阑 窃 朝赴促.				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				// 轨颇捞绢啊 浇饭捞绢 NPC俊霸 富阑 吧搁...				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				// Event 侩 NPC 牢 版快 促弗 富阑 茄促 ;;				if ( pNPC->getNPCID() == 639 )				{					saypkt.setMessage( g_pStringPool->c_str( STRID_EVENT_NPC_1 ) );				}				else				{					saypkt.setMessage( g_pStringPool->c_str( STRID_ALERT_VAMPIRE ) );				}				pPlayer->sendPacket(&saypkt);				return;			}			// 酒快胶磐胶啊 浇饭捞绢 NPC俊霸 富阑 吧菌阑 版快俊 公矫茄促.			else if (pNPC->getRace() == NPC_RACE_SLAYER && pPC->isOusters())			{				// 老窜 努扼捞攫飘甫 困秦 OK菩哦阑 窃 朝赴促.				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				// 轨颇捞绢啊 浇饭捞绢 NPC俊霸 富阑 吧搁...				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				saypkt.setMessage( g_pStringPool->c_str( STRID_ALERT_OUSTERS_2 ) );				pPlayer->sendPacket(&saypkt);				return;			}			// 浇饭捞绢啊 轨颇捞绢 NPC俊霸 富阑 吧绢档 公矫茄促.			else if (pNPC->getRace() == NPC_RACE_VAMPIRE && pPC->isSlayer())			{				// 老窜 努扼捞攫飘甫 困秦 OK菩哦阑 窃 朝赴促.				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				// 浇饭捞绢啊 轨颇捞绢 NPC俊霸 富阑 吧搁...				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				// Event 侩 NPC 牢 版快 促弗 富阑 茄促 ;;				if ( pNPC->getNPCID() == 638 )				{					saypkt.setMessage( g_pStringPool->c_str( STRID_EVENT_NPC_2 ) );				}				else if ( pNPC->getNPCID() == 636 )				{					saypkt.setMessage( g_pStringPool->c_str( STRID_EVENT_NPC_3 ) );				}				else if ( pNPC->getNPCID() == 635 )				{					saypkt.setMessage( g_pStringPool->c_str( STRID_EVENT_NPC_4 ) );				}				else				{					saypkt.setMessage( g_pStringPool->c_str( STRID_ALERT_SLAYER ) );				}				pPlayer->sendPacket(&saypkt);				return;			}			// 酒快胶磐胶啊 轨颇捞绢 NPC俊霸 富阑 吧绢档 公矫茄促.			else if (pNPC->getRace() == NPC_RACE_VAMPIRE && pPC->isOusters())			{				// 老窜 努扼捞攫飘甫 困秦 OK菩哦阑 窃 朝赴促.				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				saypkt.setMessage( g_pStringPool->c_str( STRID_ALERT_OUSTERS ) );				pPlayer->sendPacket(&saypkt);				return;			}			// 浇饭捞绢啊 酒快胶磐胶 NPC俊霸 富阑 吧绢档 公矫茄促.			else if (pNPC->getRace() == NPC_RACE_OUSTERS && pPC->isSlayer())			{				// 老窜 努扼捞攫飘甫 困秦 OK菩哦阑 窃 朝赴促.				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				saypkt.setMessage( g_pStringPool->c_str( STRID_ALERT_SLAYER_2 ) );				pPlayer->sendPacket(&saypkt);				return;			}			// 轨颇捞绢啊 酒快胶磐胶 NPC俊霸 富阑 吧绢档 公矫茄促.			else if (pNPC->getRace() == NPC_RACE_OUSTERS && pPC->isVampire())			{				// 老窜 努扼捞攫飘甫 困秦 OK菩哦阑 窃 朝赴促.				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				saypkt.setMessage( g_pStringPool->c_str( STRID_ALERT_VAMPIRE_2 ) );				pPlayer->sendPacket(&saypkt);				return;			}		}		// 鞍篮 轨颇捞绢尝府档 努罚捞 促弗 NPC老 版快 公矫茄促.		// 捞 何盒狼 内靛绰 唱吝俊 促弗 规过栏肺 免仿秦具 且 巴捞促.		// 泅犁绰 努罚捞 坷流 滴 啊瘤 挥捞扁 锭巩俊...		// .....		// 努罚 茄啊瘤 观俊 决结~~/*		if (pPC->isVampire() && pNPC->getRace() == NPC_RACE_VAMPIRE)		{			if (pPC->getClanType() != pNPC->getClanType())			{				GCNPCResponse gcNPCAskAnswer;				pPlayer->sendPacket(&gcNPCAskAnswer);				GCNPCSayDynamic saypkt;				saypkt.setObjectID(pNPC->getObjectID());				saypkt.setMessage(DiffClanSpeech[rand()%3]);				pPlayer->sendPacket(&saypkt);				return;			}		}*/		// 敲饭捞绢啊 富阑 吧菌阑 版快俊 馆览窍绰 咀记捞 乐促搁...		const TriggerManager & triggerManager = pNPC->getTriggerManager();		if (triggerManager.hasCondition(Condition::CONDITION_TALKED_BY))		{			const list<Trigger*> & triggers = triggerManager.getTriggers();			for (list<Trigger*>::const_iterator itr = triggers.begin() ; itr != triggers.end() ; itr ++)			{				Trigger* pTrigger = *itr;				Assert(pTrigger != NULL);				// check all condition after check main condition				if (pTrigger->hasCondition(Condition::CONDITION_TALKED_BY) && pTrigger->isAllSatisfied(Trigger::PASSIVE_TRIGGER , pNPC , pPC))				{					// 弥檬肺 惯斑等 飘府芭父 角青茄 促澜 break 茄促.					pTrigger->activate(pNPC , pPC);					break;				}			}		}		// 努扼捞攫飘绰 NPC甫 努腐沁阑 版快, 公炼扒 辑滚狼 览翠阑 扁促府扁 锭巩俊, 		// 弊繁 咀记捞 粮犁窍瘤 臼阑 锭 酒公 巴档 窍瘤 臼栏搁, 努扼捞攫飘啊 老辆狼 单靛遏(?)		// 惑怕俊 狐瘤霸 等促. 弊巴阑 规瘤窍扁 困秦辑 措拳芒阑 摧栏扼绰 皋技瘤甫 焊郴霖促.		else		{			GCNPCResponse gcNPCResponse;			gcNPCResponse.setCode(NPC_RESPONSE_QUIT_DIALOGUE);			pPlayer->sendPacket(&gcNPCResponse);		}	} 	catch (Throwable & t) 	{		//cerr << "穿啊 NPC 坷宏璃飘 酒捞叼甫 捞惑窍霸 焊郴林匙?" << endl;		//cerr << t.toString() << endl;	}	#endif	__END_DEBUG	__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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