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

📄 zone.cpp.backup

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 BACKUP
📖 第 1 页 / 共 5 页
字号:
		// 林函狼 PC甸俊霸 舅副 GCAddSlayer or GCAddVampire 菩哦阑 积己茄促.		Creature::CreatureClass CClass = pCreature->getCreatureClass();		if (CClass == Creature::CREATURE_CLASS_SLAYER)		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			GCAddSlayer gcAddSlayer;			makeGCAddSlayer(&gcAddSlayer, pSlayer);			scan(pCreature, pt.x, pt.y, &gcAddSlayer);		}		else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)		{			Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);			GCAddVampire gcAddVampire;			makeGCAddVampire(&gcAddVampire, pVampire);			scan(pCreature, pt.x, pt.y, &gcAddVampire);			// 轨颇捞绢扼搁 器呕阑 捞侩秦 吭阑 啊瓷己捞 乐栏骨肺,			// 敲贰弊甫 波霖促.			if (pVampire->isFlag(Effect::EFFECT_CLASS_VAMPIRE_PORTAL))			{				pVampire->removeFlag(Effect::EFFECT_CLASS_VAMPIRE_PORTAL);			}		}		else		{			throw Error("invalid creature class. must be slayer or vampire...");		}		// 颇萍俊 啊涝登绢 乐促搁 肺拿 颇萍俊 啊涝矫挪促.		uint PartyID = pCreature->getPartyID();		if (PartyID != 0)		{			// 颇萍啊 乐促搁 傲 歹茄促.			m_pLocalPartyManager->addPartyMember(PartyID, pCreature);		}	} 	else 	{		ZoneCoord_t tempX = Random(20, m_Width);		ZoneCoord_t tempY = Random(20, m_Height);		addPC(pCreature, tempX, tempY, 0);		// 钙胶墨款飘 瘤唱档 给 茫篮 版快 Assert		//throw EmptyTileNotExistException("too many pc in this zone.. or too unlucky");	}	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// detect invisibility殿狼 瓤苞啊 荤扼柳 版快..焊捞绰 仇捞 救焊捞霸 瞪 版快// pCreature俊霸 GCDeleteObject甫 焊郴霖促. 焊绊 乐带 invisible creature甫// delete茄促. 肚绰 救焊牢绰 逞捞 焊捞霸 瞪 版快殿..//////////////////////////////////////////////////////////////////////////////void Zone::updateInvisibleScan(Creature* pCreature)	throw (ProtocolException, Error){	__BEGIN_TRY	Assert(pCreature != NULL && pCreature->isPC());	Coord_t cx = pCreature->getX();	Coord_t cy = pCreature->getY();	Player* pPlayer = pCreature->getPlayer();	// Revealer 捞棋飘甫 啊廉柯促.//	EffectRevealer* pEffectRevealer = NULL;//	if ( pCreature->isFlag(Effect::EFFECT_CLASS_REVEALER) )//	{//		pEffectRevealer = dynamic_cast<EffectRevealer*>(pCreature->findEffect(Effect::EFFECT_CLASS_REVEALER));//		Assert( pEffectRevealer != NULL );//	}	for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(m_Width - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix++) 	{		for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy++) 		{			// darkness康开 炼荤.			// 荤角 pCreature绰 寸楷洒 slayer促.(updateInvisibleScan捞骨肺..)			if (pCreature->isSlayer())			{				const slist<Object*> & objectList = m_pTiles[ix][iy].getObjectList();				slist<Object*>::const_iterator itr = objectList.begin();				for (; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE ; itr++) 				{					if ((*itr)->getObjectClass() == Object::OBJECT_CLASS_CREATURE)					{						Creature* pPC = dynamic_cast<Creature*>(*itr);						Assert(pPC != NULL);						// 磊扁 磊脚老 版快 烹苞						if ( pCreature == pPC ) continue;						// 见绢乐绰 措惑俊 措秦辑..						// SNIPING捞唱 INVISIBILITY惑怕老 版快.						if (pPC->isFlag(Effect::EFFECT_CLASS_INVISIBILITY) && pCreature->getVisionState(ix,iy) >= IN_SIGHT)						{							// Detect Invisibility 捞棋飘啊 乐芭唱 轨颇捞绢搁 杭 荐 乐促							// Revealer 捞棋飘啊 乐阑 版快 惑措规阑 杭 荐 乐绰 饭骇捞扼搁							if ( ( pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) || pCreature->isVampire() ) )//								|| ( pEffectRevealer != NULL && pEffectRevealer->canSeeInvisibility( pPC ) ) )							{								if (pPC->isVampire())								{									Vampire* pVampire = dynamic_cast<Vampire*>(pPC);									GCAddVampire gcAddVampire;									makeGCAddVampire(&gcAddVampire, pVampire);									pPlayer->sendPacket(&gcAddVampire);								}								else if (pPC->isMonster())								{									Monster* pMonster= dynamic_cast<Monster*>(pPC);									//GCAddMonster gcAddMonster;									//makeGCAddMonster(&gcAddMonster, pMonster);									//pPlayer->sendPacket(&gcAddMonster);									// by sigi									Packet* pAddMonsterPacket = createMonsterAddPacket( pMonster, pCreature );									if (pAddMonsterPacket!=NULL)									{										pPlayer->sendPacket(pAddMonsterPacket);										delete pAddMonsterPacket;									}								}							}							else							{								GCDeleteObject gcDO;								gcDO.setObjectID(pPC->getObjectID());								pPlayer->sendPacket(&gcDO);							}						} 						else if (pPC->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)) 						{							if ( (!pCreature->isVampire() && pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) ) )//								|| ( pEffectRevealer != NULL && pEffectRevealer->canSeeSniping( pPC ) ) )							{								if (pPC->isSlayer())								{									Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);																		GCAddSlayer gcAddSlayer;									makeGCAddSlayer(&gcAddSlayer, pSlayer);									pPlayer->sendPacket(&gcAddSlayer);								}								else 								{									throw Error("轨颇捞绢啊 胶唱捞俏 葛靛俊 乐促. 固媚结~");								}							}							else							{								GCDeleteObject gcDO;								gcDO.setObjectID(pPC->getObjectID());								pPlayer->sendPacket(&gcDO);							}						}					}				}			}// darkness		}	}	__END_CATCH}//--------------------------------------------------------------------------------// update hidden scan// detect hidden殿狼 瓤苞啊 荤扼柳 版快..焊捞绰 仇捞 救焊捞霸 瞪 版快// pCreature俊霸 GCDeleteObject甫 焊郴霖促.// 焊绊 乐带 burrow creature甫 delete茄促. 肚绰 救焊牢绰 逞捞 焊捞霸 瞪 版快殿..// ABCD//--------------------------------------------------------------------------------void Zone::updateHiddenScan(Creature* pCreature)	throw(ProtocolException, Error){	__BEGIN_TRY	Assert(pCreature != NULL && pCreature->isPC());	Coord_t cx = pCreature->getX();	Coord_t cy = pCreature->getY();	Player* pPlayer = pCreature->getPlayer();	// Revealer 捞棋飘甫 啊廉柯促.//	EffectRevealer* pEffectRevealer = NULL;//	if ( pCreature->isFlag(Effect::EFFECT_CLASS_REVEALER) )//	{//		pEffectRevealer = dynamic_cast<EffectRevealer*>(pCreature->findEffect(Effect::EFFECT_CLASS_REVEALER));//		Assert( pEffectRevealer != NULL );//	}	for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(m_Width - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix++) 	{		for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy++) 		{			// darkness康开 炼荤.			// 荤角 pCreature绰 寸楷洒 slayer促.(updateHiddenScan捞骨肺..)			if (pCreature->isSlayer())			{				const slist<Object*> & objectList = m_pTiles[ix][iy].getObjectList();				for (slist<Object*>::const_iterator itr = objectList.begin() ; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE ; itr++) 				{					if ((*itr)->getObjectClass() == Object::OBJECT_CLASS_CREATURE)					{						Creature* pPC = dynamic_cast<Creature*>(*itr);						Assert(pPC != NULL);												// 磊扁 磊脚老 版快 烹苞						if ( pCreature == pPC ) continue;						// 见绢乐绰 措惑俊 措秦辑..						if (pPC->isFlag(Effect::EFFECT_CLASS_HIDE) && 								pCreature->getVisionState(ix,iy) >= IN_SIGHT)						{							if ( pCreature->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN) || pCreature->isVampire()  )//								|| ( pEffectRevealer != NULL && pEffectRevealer->canSeeHide( pPC ) ) )							{								GCAddBurrowingCreature gcABC;								gcABC.setObjectID(pPC->getObjectID());								gcABC.setName(pPC->getName());								gcABC.setX(ix);								gcABC.setY(iy);								pPlayer->sendPacket(&gcABC);							}							else							{								GCDeleteObject gcDO;								gcDO.setObjectID(pPC->getObjectID());								pPlayer->sendPacket(&gcDO);							}						}					}				}			}// darkness		}	}	__END_CATCH}//--------------------------------------------------------------------------------// update mine scan// detect mine殿狼 瓤苞啊 荤扼柳 版快..焊捞绰 mine捞 救焊捞霸 瞪 版快// pCreature俊霸 GCDeleteObject甫 焊郴霖促.//--------------------------------------------------------------------------------void Zone::updateMineScan(Creature* pCreature)	throw(ProtocolException, Error){	__BEGIN_TRY	Assert(pCreature != NULL && pCreature->isPC());	Coord_t cx = pCreature->getX();	Coord_t cy = pCreature->getY();	Player* pPlayer = pCreature->getPlayer();	for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(m_Width - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix++) 	{		for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(m_Height - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy++) 		{			// 荤角 pCreature绰 寸楷洒 slayer促.(updateMineScan捞骨肺..)			if (pCreature->isSlayer())			{				Item* pItem = m_pTiles[ix][iy].getItem();				if (pItem)				{					if (pItem->getItemClass() == Item::ITEM_CLASS_MINE && pItem->isFlag(Effect::EFFECT_CLASS_INSTALL))					{						if (pCreature->isFlag(Effect::EFFECT_CLASS_REVEALER) )						{														GCAddInstalledMineToZone gcAddMine;							gcAddMine.setObjectID(pItem->getObjectID());							gcAddMine.setX(ix);							gcAddMine.setY(iy);							gcAddMine.setItemClass(pItem->getItemClass());							gcAddMine.setItemType(pItem->getItemType());							gcAddMine.setOptionType(pItem->getOptionType());							gcAddMine.setDurability(pItem->getDurability());							pPlayer->sendPacket(&gcAddMine);						} else {							GCDeleteObject gcDO;							gcDO.setObjectID(pItem->getObjectID());							pPlayer->sendPacket(&gcDO);						}					}				}			}// darkness		}	}	__END_CATCH}//--------------------------------------------------------------------------------// add Creature// 农府贸啊 粮俊 弥檬肺 甸绢哎 锭, 农府贸 林函狼 PC甸俊霸 货 农府贸狼 免泅阑 舅妨霖促.//--------------------------------------------------------------------------------void Zone::addCreature(Creature* pCreature, ZoneCoord_t cx, ZoneCoord_t cy, Dir_t dir)	throw(EmptyTileNotExistException, Error){	__BEGIN_TRY	TPOINT pt = findSuitablePosition(this, cx, cy, pCreature->getMoveMode());	// 茫篮 版快 眉农	if (pt.x != -1) 	{		//--------------------------------------------------------------------------------		// OID 甫 且寸罐绰促.		//--------------------------------------------------------------------------------		m_ObjectRegistry.registerObject(pCreature);		//--------------------------------------------------------------------------------		// 利例茄 鸥老阑 茫疽栏搁, 农府贸甫 农府贸概聪历客 鸥老俊 阿阿 笼绢持绰促.		// Monster 老 版快, MonsterManager俊 眠啊窍哥, NPC 老 版快, NPCManager 俊 眠啊茄促.		//--------------------------------------------------------------------------------		if (pCreature->isMonster())		{//#ifdef __XMAS_EVENT_CODE__			Monster* pMonster = dynamic_cast<Monster*>(pCreature);			switch (pMonster->getMonsterType())			{				case 358:				case 359:				case 360:				case 361:					m_pEventMonsterManager->addCreature(pCreature);					break;				case 371:				case 372:				case 373:				case 374:				case 375:				case 376:					m_pCombatMonsterManager->addCreature(pCreature); // 362绰 傈捧侩 阁胶磐肺 沥狼窃, 辫版籍					break;				default:					m_pMonsterManager->addCreature(pCreature);					break;			}//#else//			m_pMonsterManager->addCreature(pCreature);/*#endif*/		}		else if (pCreature->isNPC())		{			m_pNPCManager->addCreature(pCreature);		}		//cout << "鸥老俊 阁胶磐 眠啊窍扁" << endl;	   	m_pTiles[pt.x][pt.y].addCreature(pCreature, false);			//--------------------------------------------------------------------------------		// 农府贸狼 谅钎甫 瘤沥茄促.		//--------------------------------------------------------------------------------		pCreature->setXYDir(pt.x, pt.y, dir);		pCreature->setZone(this);				//scanPC(pCreature);		//--------------------------------------------------------------------------------		// 林函狼 PC甸俊霸 舅副 GCAddNPC or GCAddMonster 菩哦阑 积己茄促.		//--------------------------------------------------------------------------------		//cout << "林函狼 PC甸俊霸 舅副 菩哦 父甸扁" << endl;		Creature::CreatureClass CClass = pCreature->getCreatureClass();		if (CClass == Creature::CREATURE_CLASS_NPC)		{			NPC* pNPC = dynamic_cast<NPC*>(pCreature);			GCAddNPC gcAddNPC;			makeGCAddNPC(&gcAddNPC, pNPC);			broadcastPacket(pt.x, pt.y, &gcAddNPC);		}		else if (CClass == Creature::CREATURE_CLASS_MONSTER)		{			//cout << "阁胶磐侩 菩哦 父甸扁" << endl;			Monster* pMonster = dynamic_cast<Monster*>(pCreature);			//GCAddMonster gcAddMonster;			//makeGCAddMonster(&gcAddMonster, pMonster);			//broadcastPacket(pt.x, pt.y, &gcAddMonster);			// zone俊 贸澜 甸绢哎锭档 咯矾啊瘤 惑怕啊 乐促.. by sigi			Packet* pAddMonsterPacket = createMonsterAddPacket( pMonster, NULL );			if (pAddMonsterPacket!=NULL)			{				//cout << "阁胶磐侩 菩哦捞 父甸绢脸栏搁" << endl;				bool isMonsterHide = pMonster->isFlag(Effect::EFFECT_CLASS_HIDE);				bool isMonsterInvisibility = pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY);				//broadcastPacket(pt.x, pt.y, pAddMonsterPacket);				ZoneCoord_t ix = 0;				ZoneCoord_t iy = 0;				ZoneCoord_t endx = 0;				ZoneCoord_t endy = 0;				//////////////////////////////////////////////////////////////////////////////				// 风橇 函荐 檬扁拳..				//				// Plus 函荐啊 曼老 版快 Range 父怒 歹 焊郴 霖促..				// 堡开 付过狼 搬苞甫 瓤苞利栏肺 焊咯林扁 困窃捞促.				//				// *NOTE				// - 弥利拳甫 茄促搁 VisionInfo俊 PLUS_SIGHT扼绰 函荐甫 眠啊窍咯 楷魂				//////////////////////////////////////////////////////////////////////////////				int Range = 0;				endx = min(m_Width - 1, cx + maxViewportWidth + 1 + Range);				endy = min(m_Height - 1, cy + maxViewportLowerHeight  + 1 + Range);				for (ix =  max(0, cx - maxViewportWidth - 1 - Range); ix <= endx ; ix++) 				{					for (iy = max(0, cy - maxViewportUpperHeight - 1 -  Range); iy <= endy ; iy++) 					{						// 鸥老俊 农府贸啊 乐绰 版快俊父						if (m_pTiles[ix][iy].hasCreature()) 						{							//cout << ix << "," << iy << "俊 Creature 粮犁" << endl;							const slist<Object*> & objectList = m_pTiles[ix][iy].getObjectList();							slist<Object*>::const_iterator itr = objectList.begin();							for (; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE; itr++) 							{								Creature* pCreature = dynamic_cast<Creature*>(*itr);								Assert(pCreature != NULL);

⌨️ 快捷键说明

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