⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : NPC.cpp// Written By  : 辫己刮// Description : // 盔贰绰 惑痢 贸府 何盒捞 绝菌栏唱, 捞 努贰胶甫 惑加罐酒 惑痢 NPC甫 // 父甸扁档 粱 弊贰辑, 弊成 NPC 救俊促 惑痢 牢磐其捞胶甫 笼绢持菌促.//////////////////////////////////////////////////////////////////////////////#include "NPC.h"#include "ShopRack.h"#include "mission/QuestInfoManager.h"#include "mission/RewardClassInfoManager.h"#include "PlayerCreature.h"#include "couple/PartnerWaitingManager.h"#include "Gpackets/GCNPCAskDynamic.h"//////////////////////////////////////////////////////////////////////////////// class NPC member methods//////////////////////////////////////////////////////////////////////////////NPC::NPC ()	throw () {	__BEGIN_TRY	m_pInventory = NULL;	// 促澜 贸府罐阑 畔阑 瘤沥茄促.	getCurrentTime(m_NextTurn);	m_NextTurn.tv_sec  += rand() % 3;	m_NextTurn.tv_usec += rand() % 1000000;	if (m_NextTurn.tv_usec >= 1000000) m_NextTurn.tv_sec++;	// 牢亥配府 按眉甫 积己茄促.	//m_pInventory = new Inventory(5,5);		// 惑痢 柳凯厘 按眉甫 积己茄促.	m_pRack = new ShopRack[SHOP_RACK_TYPE_MAX];	Assert(m_pRack != NULL);	// 惑痢 矫技 函荐甫 叼弃飘肺 技泼秦霖促.	m_MarketCondBuy  = 25;	m_MarketCondSell = 100;	// 扁夯利栏肺 惑痢篮 老馆 惑痢捞促.	m_ShopType = SHOPTYPE_NORMAL;	m_ClanType = 0;			// 弊成 狼固绝绰 default.	// 肋给秦辑 VisionInfo俊辑 Sight甫 茫绰 版快 措厚	// by sigi. 2002.9.6	m_Sight = 5;	//m_pQuestBoard = NULL;	m_pCoupleRegisterManager = NULL;	m_pCoupleUnregisterManager = NULL;	m_pQuestInfoManager = NULL;	m_pRewardClassInfoManager = NULL;	__END_CATCH}NPC::NPC (const string & name) 	throw () {	__BEGIN_TRY	m_Name       = name;	m_pInventory = NULL;	// 促澜 贸府罐阑 畔阑 瘤沥茄促.	getCurrentTime(m_NextTurn);	m_NextTurn.tv_sec += rand() % 3;	m_NextTurn.tv_usec += rand() % 1000000;	if (m_NextTurn.tv_usec >= 1000000) m_NextTurn.tv_sec ++;	// 牢亥配府 按眉甫 积己茄促.	//m_pInventory = new Inventory(5,5);		// 惑痢 柳凯厘 按眉甫 积己茄促.	m_pRack = new ShopRack[SHOP_RACK_TYPE_MAX];	Assert(m_pRack != NULL);	// 惑痢 矫技 函荐甫 叼弃飘肺 技泼秦霖促.	m_MarketCondBuy  = 25;	m_MarketCondSell = 100;	m_pCoupleRegisterManager = NULL;	m_pCoupleUnregisterManager = NULL;	m_pQuestInfoManager = NULL;	m_pRewardClassInfoManager = NULL;	__END_CATCH}NPC::~NPC()     throw (Error){	__BEGIN_TRY	SAFE_DELETE(m_pCoupleUnregisterManager);	SAFE_DELETE(m_pCoupleRegisterManager);	SAFE_DELETE(m_pQuestInfoManager);	SAFE_DELETE(m_pRewardClassInfoManager);	SAFE_DELETE(m_pInventory);	SAFE_DELETE_ARRAY(m_pRack); 		__END_CATCH}// registerObject()// Zone俊 辆加等 ObjectRegistry甫 荤侩秦辑, // NPC 客 家蜡酒捞袍甸狼 ObjectID甫 且寸罐绰促.// 泅犁肺绰 殿废秦具 且 巴篮 NPC 磊脚狼 OID 观俊 绝促.void NPC::registerObject ()	throw (Error){	__BEGIN_TRY	Assert(getZone() != NULL);	ObjectRegistry & OR = getZone()->getObjectRegistry();	__ENTER_CRITICAL_SECTION(OR)	OR.registerObject_NOLOCKED(this);	__LEAVE_CRITICAL_SECTION(OR)	__END_CATCH}// load()// 捞 NPC客 包访等 单捞磐甸阑 肺靛茄促.// 胶农赋飘唱, 飘府芭 殿殿.bool NPC::load ()	throw (Error){	__BEGIN_TRY	// trigger 甫 肺爹茄促.	m_TriggerManager.load(m_Name); 	// AtFirst 牧叼记捞 乐栏搁, 角青窍绊 昏力茄促.	if (m_TriggerManager.hasCondition(Condition::CONDITION_AT_FIRST))	{		list<Trigger*>&          triggers = m_TriggerManager.getTriggers();		list<Trigger*>::iterator itr      = triggers.begin();		for (; itr != triggers.end(); itr++)		{			Trigger* pTrigger = *itr;			if (pTrigger->hasCondition(Condition::CONDITION_AT_FIRST))			{				pTrigger->activate(this);				triggers.erase(itr);				break;			}		}	}	return true;	__END_CATCH}// init()// 单捞磐甸阑 檬扁拳窍绊...粮俊 NPC甫 殿废茄促.void NPC::init ()	throw (Error){	__BEGIN_TRY	load();	//registerObject();	__END_CATCH}// act()// 霸烙 辑滚狼 皋牢 风橇付促 茄锅究 阂府绰 窃荐捞促.// AI 内靛啊 荐青登绰 皋牢 窃荐扼 且 荐 乐促.void NPC::act(const Timeval& currentTime)	throw (Error){	__BEGIN_TRY	__BEGIN_DEBUG	// 泅犁 矫埃捞 促澜 畔焊促 农促搁, 酒流 粱 歹 扁促妨具 茄促.	// 弊犯瘤 臼栏搁, 咀记阑 秒茄促.	if (currentTime < m_NextTurn) return;		// 促澜 畔阑 瘤沥茄促.	// 泅犁 NPC甸篮 1檬俊 1鸥老父 框流捞扁 东矫肺.. =_=;	Timeval delay;	delay.tv_sec  = 0;	delay.tv_usec = 750000 + rand() % 200000;	m_NextTurn = m_NextTurn + delay;	if ( m_pCoupleRegisterManager != NULL ) m_pCoupleRegisterManager->heartbeat();	if ( m_pCoupleUnregisterManager != NULL ) m_pCoupleUnregisterManager->heartbeat();	// 飘府芭甫 啊瘤绊 乐阑 版快, 阿 飘府芭甸狼 炼扒捞 父练登绰瘤 眉农茄促.	// 父距 漂沥 飘府芭狼 葛电 炼扒捞 父练茄促搁, 弊 飘府芭俊 秦寸登绰	// 咀记阑 角青窍绊 府畔茄促. 恐衬窍搁, 飘府芭 开矫 咀记捞骨肺,	// 老窜 咀记篮 茄 畔俊 茄锅父 角青登扁 锭巩捞促. 	list<Trigger*>&          triggers = m_TriggerManager.getTriggers();	list<Trigger*>::iterator itr      = triggers.begin();	for (; itr != triggers.end(); itr++) 	{		Trigger* pTrigger = *itr;		if (pTrigger->isAllSatisfied(Trigger::ACTIVE_TRIGGER , this))		{			pTrigger->activate(this);			return;		}	}	__END_DEBUG	__END_CATCH}// getShopVersion()// 瘤沥等 辆幅狼 惑痢狼 滚傈阑 府畔茄促.ShopVersion_t NPC::getShopVersion(ShopRackType_t type) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].getVersion();}// setShopVersion()// 瘤沥等 辆幅狼 惑痢狼 滚傈阑 技泼茄促.void NPC::setShopVersion(ShopRackType_t type, ShopVersion_t ver){	Assert(type < SHOP_RACK_TYPE_MAX);	m_pRack[type].setVersion(ver);}// increaseShopVersion()// 瘤沥等 辆幅狼 惑痢狼 滚傈阑 棵赴促.void NPC::increaseShopVersion(ShopRackType_t type){	Assert(type < SHOP_RACK_TYPE_MAX);	m_pRack[type].increaseVersion();}// isExistShopItem()// 瘤沥等 辆幅客 牢郸胶狼 酒捞袍捞 惑痢 柳凯厘 救俊 粮犁窍绰瘤 府畔茄促.bool NPC::isExistShopItem(ShopRackType_t type, BYTE index) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].isExist(index);}// insertShopItem()// 瘤沥等 辆幅客 牢郸胶狼 柳凯厘俊促啊 酒捞袍阑 笼绢持绰促.void NPC::insertShopItem(ShopRackType_t type, BYTE index, Item* pItem){	Assert(type < SHOP_RACK_TYPE_MAX);	m_pRack[type].insert(index, pItem);}// removeShopItem()// 瘤沥等 辆幅客 牢郸胶狼 柳凯厘俊辑 酒捞袍阑 力芭茄促.void NPC::removeShopItem(ShopRackType_t type, BYTE index){	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].remove(index);}// getShopItem()// 瘤沥等 辆幅客 牢郸胶狼 柳凯厘俊 乐绰 酒捞袍 器牢磐甫 府畔茄促.Item* NPC::getShopItem(ShopRackType_t type, BYTE index) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].get(index);}// clearShopItem()// 柳凯厘阑 没家(?)茄促.void NPC::clearShopItem(void){	for (int i=0; i<SHOP_RACK_TYPE_MAX; i++) 		m_pRack[i].clear();}// getFirstEmptySlot()// 瘤沥等 辆幅狼 柳凯厘俊辑 力老 菊率狼 后 沫阑 茫绰促.BYTE NPC::getFirstEmptySlot(ShopRackType_t type) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].getFirstEmptySlot();}// getLastEmptySlot()// 瘤沥等 辆幅狼 柳凯厘俊辑 力老 第率狼 后 沫阑 茫绰促.BYTE NPC::getLastEmptySlot(ShopRackType_t type) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].getLastEmptySlot();}// isFull()// 瘤沥等 辆幅狼 柳凯厘捞 泅犁 菜蛮 惑怕牢瘤甫 府畔茄促.bool NPC::isFull(ShopRackType_t type) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].isFull();}// isEmpty// 瘤沥等 辆幅狼 柳凯厘捞 泅犁 后 惑怕牢瘤甫 府畔茄促.bool NPC::isEmpty(ShopRackType_t type) const{	Assert(type < SHOP_RACK_TYPE_MAX);	return m_pRack[type].isEmpty();}// SimpleQuest by sigi. 2002.12.3/*bool NPC::regenSimpleQuest() 	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestBoard==NULL)	{		m_pQuestBoard = new QuestBoard();	}	else	{		m_pQuestBoard->release();	}	// 抛胶飘.. 5俺父 积己.	m_pQuestBoard->regenerate( 5 );#endif	return true;	__END_CATCH}bool NPC::giveSimpleQuest(Creature* pCreature, QuestID_t qid) 	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestBoard!=NULL)	{		Assert(pCreature!=NULL);		PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);		Quest* pQuest = m_pQuestBoard->remove( qid );		// 弊繁 QuestID绰 绝促.		if (pQuest==NULL)		{			// cout << "No Such Quest(" << (int)qid << ")" << endl;			return false;		}		m_pQuestBoard->remove( qid );		pQuest->take( pPC );		if (pPC->addQuest( pQuest ))		{			return true;		}		// quest 眠啊 角菩		SAFE_DELETE(pQuest);		//cout << "cannot add Quest(" << (int)qid << ")" << endl;	}#endif	return false;	__END_CATCH}void NPC::setSimpleQuestListScript(Script* pScript)	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestBoard!=NULL)	{		Assert(pScript!=NULL);		m_pQuestBoard->setScript(pScript);	}#endif	__END_CATCH}*//*void NPC::sendSimpleQuestListPacket(Creature* pCreature)	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestBoard!=NULL)	{		Assert(pCreature!=NULL);		Assert(pCreature->isPC());		GCNPCAskDynamic npcAskPacket;		npcAskPacket.setObjectID( getObjectID() );		m_pQuestBoard->makeNPCAskPacket(npcAskPacket);		pCreature->getPlayer()->sendPacket( &npcAskPacket );	}#endif	__END_CATCH}*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string NPC::toString () const	throw (){	__BEGIN_TRY	StringStream msg;	msg << "NPC("	    << "ObjectID:"    << (int)m_ObjectID	    << ",SpriteType:" << (int)m_SpriteType	    << ",Name:"       << m_Name	    << ",MainColor:"  << (int)m_MainColor	    << ",SubColor:"   << (int)m_SubColor	    << ",X:"          << (int)m_X	    << ",Y:"          << (int)m_Y	    << ",Sight:"      << (int)m_Sight	    << m_TriggerManager.toString()	    << ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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