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

📄 tile.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// FileName 	: Tile.cpp// Written By	: reiot@ewestsoft.com// Description	://////////////////////////////////////////////////////////////////////////////#include "Tile.h"#include "Assert.h"#include "Player.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Sector.h"#include "Creature.h"#include "GamePlayer.h"#include "StringStream.h"#include <algorithm>#include "EffectYellowPoison.h"#include "EffectGreenPoison.h"#include "EffectDarkness.h"#include "EffectTryingPosition.h"//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////Tile::Tile (WORD wFlags , WORD wOption)    throw (){	__BEGIN_TRY	m_wFlags = wFlags;	m_wOption = wOption;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////Tile::~Tile ()	throw (){	__BEGIN_TRY	// 家加等 葛电 按眉甸阑 昏力茄促.	while (!m_Objects.empty()) 	{		Object* pObj = m_Objects.front();		SAFE_DELETE(pObj);		m_Objects.pop_front();	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 农府贸甫 府胶飘俊 眠啊茄促. //// return蔼篮 弊成 捞悼牢啊(true), Portal阑 activate 矫挪扒啊(false)俊 措茄 蔼//////////////////////////////////////////////////////////////////////////////bool Tile::addCreature (Creature* pCreature, bool bCheckEffect, bool bCheckPortal) 	throw (GameException , DuplicatedException , Error){	__BEGIN_TRY	__BEGIN_DEBUG	Assert(pCreature != NULL);	// 农府贸狼 MoveMode { WALKING | FLYING | BURROWING }阑 啊瘤绊 柯促.	Creature::MoveMode mode = pCreature->getMoveMode();		// 眠啊窍妨绰 农府贸客 鞍篮 MoveMode俊 秦寸窍绰 镑捞 blocking登瘤 臼酒具 茄促.	Assert(! isBlocked(mode));	// 眠啊窍妨绰 农府贸客 鞍篮 MoveMode甫 啊柳 农府贸啊 鸥老郴俊 绝绢具 茄促.	//Assert(! hasCreature(mode));	if (hasCreature(mode))	{		StringStream msg;		Creature* pWalkingCreature = getCreature( Creature::MOVE_MODE_WALKING );		Creature* pFlyingCreature = getCreature( Creature::MOVE_MODE_FLYING );		Creature* pBurrowingCreature = getCreature( Creature::MOVE_MODE_BURROWING );		Item* pItem = getItem();		msg << "TileInfo: ";		if (pWalkingCreature!=NULL) 		{			msg << "Walking(" << pWalkingCreature->toString().c_str() << ") ";		}		if (pFlyingCreature!=NULL) 		{			msg << "Flying(" << pFlyingCreature->toString().c_str() << ") ";		}		if (pBurrowingCreature!=NULL) 		{			msg << "Burrowing(" << pBurrowingCreature->toString().c_str() << ") ";		}		if (pItem!=NULL) 		{			msg << "Item(" << pItem->toString().c_str() << ") ";		}		filelog("tileError.txt", "%s", msg.toString().c_str());		Assert(false);	}	// 农府贸甫 府胶飘俊 笼绢持绰促.	addObject(pCreature);	// 秦寸窍绰 农府贸 敲贰弊甫 囊促.	FLAG_SET(m_wFlags , TILE_WALKING_CREATURE + mode);	// 秦寸窍绰 blocking 敲贰弊甫 囊促.	FLAG_SET(m_wFlags , TILE_GROUND_BLOCKED + mode);	Assert(isBlocked(mode));	Assert(hasCreature(mode));	if (bCheckPortal)	{		// 父距 器呕捞 乐栏搁辑, 农府贸啊 PC牢 版快.. (阁胶磐客 NPC绰 器呕 捞悼阑 窍瘤 臼绰促.)		if (hasPortal() && pCreature->isPC()) 		{			Portal* pPortal = getPortal();			if (pCreature->isSlayer()) 			{				Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);				if (pPortal->getPortalClass() != PORTAL_CLASS_MULTI) 				{					if (pPortal->getObjectType() == PORTAL_NORMAL || pPortal->getObjectType() == PORTAL_SLAYER 							|| pPortal->getObjectType() == PORTAL_GUILD || pPortal->getObjectType() == PORTAL_BATTLE)					{						// 飘府芭靛 器呕老 版快俊绰 飘府芭 炼扒阑 父练矫淖阑 锭父, 						// portal exception阑 带柳促.						if (pPortal->getPortalClass() == PORTAL_CLASS_TRIGGERED)						{							if (pPortal->activate(pSlayer)) 							{								//throw PortalException();								// PortalException力芭. by sigi. 2002.5.6								return false;							}						}						else if (!(pSlayer->hasRideMotorcycle() && pPortal->getObjectType() == PORTAL_SLAYER)) 						{							if (pPortal->activate(pSlayer))							{								//throw PortalException();								// PortalException力芭. by sigi. 2002.5.6								return false;							}						}					}				}			} 			else if (pCreature->isVampire()) 			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				if (pPortal->getPortalClass() != PORTAL_CLASS_MULTI) 				{					if (pPortal->getObjectType() == PORTAL_NORMAL || pPortal->getObjectType() == PORTAL_VAMPIRE							|| pPortal->getObjectType() == PORTAL_GUILD || pPortal->getObjectType() == PORTAL_BATTLE)					{						// 飘府芭靛 器呕老 版快俊绰 飘府芭 炼扒阑 父练矫淖阑 锭父,						// portal exception阑 带柳促.						if (pPortal->getPortalClass() == PORTAL_CLASS_TRIGGERED)						{							if (pPortal->activate(pVampire))							{								//throw PortalException();								// PortalException力芭. by sigi. 2002.5.6								return false;							}						}						else						{							if (pPortal->activate(pVampire))							{								//throw PortalException();								// PortalException力芭. by sigi. 2002.5.6								return false;							}						}					}				}			}			else if (pCreature->isOusters()) 			{				Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);				if (pPortal->getPortalClass() != PORTAL_CLASS_MULTI) 				{					if (pPortal->getObjectType() == PORTAL_NORMAL || pPortal->getObjectType() == PORTAL_OUSTERS							|| pPortal->getObjectType() == PORTAL_GUILD || pPortal->getObjectType() == PORTAL_BATTLE)					{						// 飘府芭靛 器呕老 版快俊绰 飘府芭 炼扒阑 父练矫淖阑 锭父,						// portal exception阑 带柳促.						if (pPortal->getPortalClass() == PORTAL_CLASS_TRIGGERED)						{							if (pPortal->activate(pOusters))							{								//throw PortalException();								// PortalException力芭. by sigi. 2002.5.6								return false;							}						}						else						{							if (pPortal->activate(pOusters))							{								//throw PortalException();								// PortalException力芭. by sigi. 2002.5.6								return false;							}						}					}				}			}		}	}	// effect 八荤.	if (hasEffect())	{		if (bCheckEffect)		{			EffectGreenPoison* pEGP = (EffectGreenPoison*)getEffect(Effect::EFFECT_CLASS_GREEN_POISON);			//if (pCreature->isSlayer() && (pEGP = (EffectGreenPoison*)getEffect(Effect::EFFECT_CLASS_GREEN_POISON)))			if (pEGP != NULL)			{				pEGP->affectCreature(pCreature, true);			}			EffectYellowPoison* pEYP = NULL;			if ( (pCreature->isSlayer() || pCreature->isOusters() ) && (pEYP = (EffectYellowPoison*)getEffect(Effect::EFFECT_CLASS_YELLOW_POISON)))			{				pEYP->affectCreature(pCreature, true);			}			// 公炼扒 利侩登具 登绰 芭搁 利侩矫挪促			else if ( (pEYP = (EffectYellowPoison*)getEffect(Effect::EFFECT_CLASS_YELLOW_POISON)) && pEYP->isForce() )			{				pEYP->affectCreature(pCreature, true);			}			EffectDarkness* pDarkness = NULL;			if (pCreature->isSlayer() && (pDarkness = (EffectDarkness*)getEffect(Effect::EFFECT_CLASS_DARKNESS)))			{				pDarkness->affectObject(pCreature, true);			}			EffectTryingPosition* pTP;			if ( pCreature->isPC() && (pTP = dynamic_cast<EffectTryingPosition*>(getEffect(Effect::EFFECT_CLASS_TRYING_POSITION))) )			{				pTP->affect( pCreature );			}		}	}	else	{		if ( ( pCreature->isOusters() || pCreature->isSlayer() ) && pCreature->isFlag(Effect::EFFECT_CLASS_DARKNESS))		{			pCreature->removeFlag(Effect::EFFECT_CLASS_DARKNESS);		}	}	// PortalException力芭. by sigi. 2002.5.6	return true;	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 ID甫 啊柳 农府贸甫 府胶飘俊辑 昏力茄促.// 弥利拳且 鞘夸啊 乐促. (八祸 + 昏力)//////////////////////////////////////////////////////////////void Tile::deleteCreature (ObjectID_t creatureID) 	throw (NoSuchElementException , Error){	__BEGIN_TRY	__BEGIN_DEBUG	try 	{		// 泅犁 农府贸肺 牢秦 绢凋啊啊 茄焙单 blocking 登绢具 茄促.		Assert(isGroundBlocked() || isAirBlocked() || isUndergroundBlocked());		// 泅犁 农府贸啊 绢凋啊俊 粮犁秦具 茄促.		//Assert(hasWalkingCreature() || hasFlyingCreature() || hasBurrowingCreature());		Assert(hasCreature());	// by sigi. 2002.5.8		Creature* pCreature = dynamic_cast<Creature*>(getObject(creatureID));		// 捞棋飘啊 粮犁且 版快, 农府贸俊霸辑 绝浚促.		/*		if (hasEffect()) 		{			Effect* pEffect = getEffect();			pEffect->unaffect(pCreature);		}		*/		// NoSuch力芭. by sigi. 2002.5.2		if (pCreature==NULL)		{			return;		}		if ( hasEffect() )		{			EffectTryingPosition* pTP;			if ( pCreature->isPC() && (pTP = dynamic_cast<EffectTryingPosition*>(getEffect(Effect::EFFECT_CLASS_TRYING_POSITION))) )			{				pTP->unaffect( pCreature );			}		}		// 畴靛甫 昏力茄促.		deleteObject(creatureID);		// 秦寸窍绰 农府贸 敲贰弊甫 馋促.		FLAG_CLEAR(m_wFlags , TILE_WALKING_CREATURE + pCreature->getMoveMode());				// 秦寸窍绰 blocking 敲贰弊甫 馋促.		FLAG_CLEAR(m_wFlags , TILE_GROUND_BLOCKED + pCreature->getMoveMode());	} 	catch (Throwable & t) 	{		//cerr << "Delete Creature 瘤氛.." << endl;		//cerr << t.toString() << endl;		filelog("tileError.txt", "Tile::deleteCreature - %s", t.toString().c_str());	}	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 困摹(青困)狼 农府贸甫 府胶飘俊辑 昏力茄促.//////////////////////////////////////////////////////////////void Tile::deleteCreature (Creature::MoveMode mode) 	throw (NoSuchElementException , Error){	__BEGIN_TRY	// 泅犁 农府贸肺 牢秦 blocking 登绢具 茄促.	Assert(isBlocked(mode));	// 泅犁 农府贸啊 粮犁秦具 茄促.	Assert(hasCreature(mode));	if ( hasEffect() )	{		EffectTryingPosition* pTP;		Creature* pCreature = getCreature( mode );		if ( pCreature != NULL && pCreature->isPC() && (pTP = dynamic_cast<EffectTryingPosition*>(getEffect(Effect::EFFECT_CLASS_TRYING_POSITION))) )		{			pTP->unaffect( pCreature );		}	}	// 按眉甫 昏力茄促.	deleteObject(OBJECT_PRIORITY_WALKING_CREATURE + mode);	// 秦寸窍绰 农府贸 敲贰弊甫 馋促.	FLAG_CLEAR(m_wFlags , TILE_WALKING_CREATURE + mode);		// 秦寸窍绰 blocking 敲贰弊甫 馋促.	FLAG_CLEAR(m_wFlags , TILE_GROUND_BLOCKED + mode);	__END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 ID甫 啊柳 农府贸甫 府畔茄促.//////////////////////////////////////////////////////////////Creature* Tile::getCreature (ObjectID_t creatureID) 	throw (NoSuchElementException , Error){	__BEGIN_TRY	Assert(hasWalkingCreature() || hasFlyingCreature() || hasBurrowingCreature());	return (Creature*)(getObject(creatureID));	__END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 困摹(青困)狼 农府贸甫 府畔茄促.//////////////////////////////////////////////////////////////Creature* Tile::getCreature (Creature::MoveMode mode) 	throw (NoSuchElementException , Error){	__BEGIN_TRY	Assert(hasCreature(mode));	return (Creature*)getObject(ObjectPriority(OBJECT_PRIORITY_WALKING_CREATURE + mode));	__END_CATCH}//////////////////////////////////////////////////////////////// 酒捞袍阑 鸥老俊 眠啊茄促. 捞固 酒捞袍捞 鸥老俊 乐促搁 Dup 抗寇甫 带柳促.// (酒捞袍篮 鸥老寸 窍唱促.)//////////////////////////////////////////////////////////////void Tile::addItem (Item* pItem) 	throw (DuplicatedException , Error){	__BEGIN_TRY	Assert(pItem != NULL);	Assert(! hasItem());	Assert(! hasBuilding());	Assert(! hasObstacle());	Assert(! hasPortal());/*		EffectDarkness* pDarkness;	if ((pDarkness = getEffect(Effect::EFFECT_CLASS_DARKNESS)))	{		pDarkness->affectObject(pItem, false);	}*/	addObject(pItem);	FLAG_SET(m_wFlags , TILE_ITEM);	__END_CATCH}//////////////////////////////////////////////////////////////// 酒捞袍阑 鸥老俊辑 昏力茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////void Tile::deleteItem () 	throw (NoSuchElementException , Error){	__BEGIN_TRY	__BEGIN_DEBUG	//Assert(hasItem());	if (!hasItem())	{		//cerr << "Tile::hasItem() : 酒捞袍捞 绝嚼聪促." << endl;		return;	}	deleteObject(OBJECT_PRIORITY_ITEM);	FLAG_CLEAR(m_wFlags , TILE_ITEM);	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////// 鸥老狼 酒捞袍阑 府畔茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////Item* Tile::getItem () 	throw (NoSuchElementException , Error){	__BEGIN_TRY	//Assert(hasItem());	if (!hasItem()) return NULL;	return (Item*)getObject(OBJECT_PRIORITY_ITEM);	__END_CATCH}//////////////////////////////////////////////////////////////// 厘局拱阑 鸥老俊 眠啊茄促.//////////////////////////////////////////////////////////////void Tile::addObstacle (Obstacle* pObstacle) 	throw (DuplicatedException , Error){	__BEGIN_TRY	Assert(pObstacle != NULL);	// must be empty tile...	Assert(! hasWalkingCreature());	Assert(! hasFlyingCreature());	Assert(! hasBurrowingCreature());	Assert(! hasEffect());	Assert(! hasObstacle());	Assert(! hasItem());	Assert(! hasBuilding());	Assert(! hasPortal());	Assert(! isTerrain());	FLAG_SET(m_wFlags , TILE_OBSTACLE);	addObject(pObstacle);	__END_CATCH}//////////////////////////////////////////////////////////////// 厘局拱阑 鸥老俊辑 昏力茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////void Tile::deleteObstacle () 	throw (NoSuchElementException , Error){	__BEGIN_TRY	Assert(hasObstacle());	deleteObject(OBJECT_PRIORITY_OBSTACLE);	FLAG_CLEAR(m_wFlags , TILE_OBSTACLE);	__END_CATCH}//////////////////////////////////////////////////////////////// 鸥老狼 厘局拱阑 府畔茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////Obstacle* Tile::getObstacle () 	throw (NoSuchElementException , Error){	__BEGIN_TRY	Assert(hasObstacle());	return (Obstacle*)getObject(OBJECT_PRIORITY_OBSTACLE);	__END_CATCH}bool Tile::canAddEffect() 	throw(Error){	return !(hasObstacle() || hasBuilding() || hasPortal());}//////////////////////////////////////////////////////////////// 付过 瓤苞甫 鸥老俊 眠啊茄促.// 泅犁 鸥老俊 农府贸唱 酒捞袍捞 粮犁茄促搁, 付过狼 瓤苞甫 弊// 农府贸唱 酒捞袍俊 何咯茄促.// 吝汗登绰 付过俊 措茄 沥氓捞 鞘夸窍促.... (鞍篮 付过阑 茄磊府俊..)//////////////////////////////////////////////////////////////void Tile::addEffect (Effect* pEffect) 	throw (DuplicatedException , Error){	__BEGIN_TRY	Assert(pEffect != NULL);	Assert(! hasObstacle());	Assert(! hasBuilding());	Assert(! hasPortal());

⌨️ 快捷键说明

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