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

📄 zoneutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				{					Player* pPlayer = pViewer->getPlayer();					Assert(pPlayer);					pPlayer->sendPacket(&gcDO);					if ( pViewer->isFlag(Effect::EFFECT_CLASS_REVEALER) ) 					{						pPlayer->sendPacket(&gcAddMine);					}				}//if			}//for		}//for	}//for	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 漂沥 农府媚啊 瘤汾甫 光瘤 臼疽绰瘤 眉农茄促.//// Zone*       pZone     : 粮俊 措茄 器牢磐// Creature*   pCreature : 八荤且 农府媚// ZoneCoord_t X         : 八荤且 谅钎 x// ZoneCoord_t Y         : 八荤且 谅钎 y//////////////////////////////////////////////////////////////////////////////bool checkMine(Zone* pZone, Creature* pCreature, ZoneCoord_t X, ZoneCoord_t Y) 	throw(){	__BEGIN_TRY	Assert(pCreature != NULL);	// 浇饭捞绢啊 光阑 鉴 绝促.	if ( pCreature->isSlayer() ) return false;	Assert(pZone != NULL);	// 困俊 乐带吧 咯扁肺 郴覆 by sigi. 2002.11.7	// 父老 救傈瘤措扼搁 气颇矫虐瘤 臼绰促.	if (pZone->getZoneLevel(X, Y) & SAFE_ZONE) return false;	Tile& rTile = pZone->getTile(X, Y);	// 鸥老俊 酒捞袍捞 绝绢档 气颇矫虐瘤 臼绰促.	if (!rTile.hasItem()) return false;	//cout << "Check Mine Start" << endl;	Item* pItem = rTile.getItem();	// 官蹿俊 乐绰 酒捞袍捞 牢胶喷等 瘤汾啊 酒聪芭唱,	// 农府媚啊 吧绢促聪绰 农府媚啊 酒聪扼搁 瘤汾甫 气颇矫虐瘤 臼绰促.	if (pItem->getItemClass() != Item::ITEM_CLASS_MINE) return false;	if (pItem->isFlag(Effect::EFFECT_CLASS_INSTALL) == false) return false;	if (pCreature->isWalking() == false) return false;	GCMineExplosionOK1 _GCMineExplosionOK1;	GCMineExplosionOK2 _GCMineExplosionOK2;	list<Creature*> cList;	Mine* pMine = dynamic_cast<Mine*>(pItem);	Assert(pMine != NULL);	Dir_t      Dir           = pMine->getDir();	Damage_t   Damage        = pMine->getDamage(); 	ItemType_t Type          = pMine->getItemType();	string	   InstallerName = pMine->getInstallerName();	int		   PartyID       = pMine->getInstallerPartyID();	BYTE explodeType = Type; // 气惯 屈怕	// 瘤汾啊 气惯沁栏聪, 老窜 公炼扒 昏力秦 霖促.	pZone->deleteItem(pMine, X, Y);	GCDeleteObject gcDO;	gcDO.setObjectID(pMine->getObjectID());	pZone->broadcastPacket(X, Y, &gcDO);	SAFE_DELETE(pMine);	/*	switch(Type)	{		case 0: // Viper			explodeType = 0;			break;		case 1: // Diamond Back			explodeType = 2;			break;		case 2: // Sidewinder			explodeType = 5;			break;		case 3: // cobra			explodeType = 3;			break;		default:			Assert(false);	};	*/	int tileX, tileY;	const int* xOffsetByEType = NULL;	const int* yOffsetByEType = NULL;	int tiles = 0;		// 瘤汾 鸥涝俊 蝶弗 气惯 offset 付胶农甫 啊廉柯促.	getExplosionTypeXYOffset(explodeType, Dir, xOffsetByEType, yOffsetByEType, tiles);	VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);	for (int tileI = 0; tileI < tiles; tileI++)	{		tileX = X + xOffsetByEType[ tileI];		tileY = Y + yOffsetByEType[ tileI];		//cout << "Check1 Tile X : " << (int)tileX << "," << " Tile Y : " << (int)tileY << endl;		// 泅犁 谅钎啊 粮 郴何捞绊, 救傈 瘤措啊 酒聪扼搁...		if (rect.ptInRect(tileX, tileY) && !(pZone->getZoneLevel(tileX, tileY) & SAFE_ZONE))		{			if( tileX != X || tileY != Y ) checkMine( pZone, tileX, tileY );			const Tile& tile = pZone->getTile(tileX, tileY);			const slist<Object*>& oList = tile.getObjectList();						// 鸥老 困狼 葛电 坷宏璃飘俊 措秦辑 炼荤甫 茄促.			for (slist<Object*>::const_iterator itr = oList.begin(); itr != oList.end(); itr++)			{				// 炼扒阑 犬牢				Object* pObject = *itr;				if (pObject->getObjectClass() == Object::OBJECT_CLASS_CREATURE)				{					// Damage甫 涝绰 巴甸父 cList俊 眠啊矫挪促.					Creature* pTargetCreature = dynamic_cast<Creature*>(pObject);					if (pTargetCreature->isSlayer())					{						//Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTargetCreature);						cList.push_back(pTargetCreature);					}					else if (pTargetCreature->isVampire())					{						//Vampire* pTargetVampire = dynamic_cast<Vampire*>(pTargetCreature);						cList.push_back(pTargetCreature);					}					else if (pTargetCreature->isOusters())					{						cList.push_back(pTargetCreature);					}					else if (pTargetCreature->isMonster())					{						//Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature);						cList.push_back(pTargetCreature);					}					else continue;					ObjectID_t targetObjectID = pTargetCreature->getObjectID();					_GCMineExplosionOK1.addCListElement(targetObjectID);					_GCMineExplosionOK2.addCListElement(targetObjectID);				}			}		}	}	_GCMineExplosionOK1.setXYDir(X, Y, Dir);	_GCMineExplosionOK1.setItemType(Type);	_GCMineExplosionOK2.setXYDir(X, Y, Dir);	_GCMineExplosionOK2.setItemType(Type);	for (list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)	{		Creature* pTargetCreature = *itr;		_GCMineExplosionOK1.clearList();		//cout << "Set Damage : " << (int)Damage << endl;		if( pTargetCreature->isSlayer() ) Damage = max( 1, Damage / 2 );		setDamage(pTargetCreature, Damage, NULL, 0, &_GCMineExplosionOK1);		if (pTargetCreature->isPC())		{			pTargetCreature->getPlayer()->sendPacket(&_GCMineExplosionOK1);		} else if( pTargetCreature->isMonster() ) {			Monster * pMonster = dynamic_cast<Monster*>(pTargetCreature);			// 瘤汾 汲摹磊狼 单固瘤甫 眠啊秦 霖促.			// 嘎绰 仇捞 阁胶磐捞绊, 傍拜磊啊 荤恩捞扼搁,			// 单固瘤俊 蝶扼辑 函窍绰 快急鼻 抛捞喉阑 盎脚秦 林绢具 茄促.			pMonster->addPrecedence(InstallerName, PartyID, Damage);			pMonster->setLastHitCreatureClass(Creature::CREATURE_CLASS_SLAYER);		}	}	pZone->broadcastPacket(X, Y, &_GCMineExplosionOK2, cList);	//cout << "Check Mine End" << endl;	return true; 	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 瘤汾啊 楷尖肺 磐瘤绰瘤 酒囱瘤 眉农 茄促.//// Zone*       pZone     : 粮俊 措茄 器牢磐// Creature*   pCreature : 八荤且 农府媚// ZoneCoord_t X         : 八荤且 谅钎 x// ZoneCoord_t Y         : 八荤且 谅钎 y//////////////////////////////////////////////////////////////////////////////bool checkMine( Zone * pZone, ZoneCoord_t X, ZoneCoord_t Y ) 	throw(){	__BEGIN_TRY	Assert(pZone != NULL);	// 父老 救傈瘤措扼搁 气颇矫虐瘤 臼绰促.	if (pZone->getZoneLevel(X, Y) & SAFE_ZONE) return false;	Tile& rTile = pZone->getTile(X, Y);	// 鸥老俊 酒捞袍捞 绝绢档 气颇矫虐瘤 臼绰促.	if (rTile.hasItem() == false) return false;	//cout << "Check Mine2 Start" << endl;	Item* pItem = rTile.getItem();	// 官蹿俊 乐绰 酒捞袍捞 牢胶喷等 瘤汾啊 酒聪芭唱,	// 农府媚啊 吧绢促聪绰 农府媚啊 酒聪扼搁 瘤汾甫 气颇矫虐瘤 臼绰促.	if (pItem->getItemClass() != Item::ITEM_CLASS_MINE) return false;	if (pItem->isFlag(Effect::EFFECT_CLASS_INSTALL) == false) return false;	GCMineExplosionOK1 _GCMineExplosionOK1;	GCMineExplosionOK2 _GCMineExplosionOK2;	list<Creature*> cList;	Mine* pMine = dynamic_cast<Mine*>(pItem);	Assert(pMine != NULL);	Dir_t      Dir           = pMine->getDir();	Damage_t   Damage        = pMine->getDamage(); 	ItemType_t Type          = pMine->getItemType();	string     InstallerName = pMine->getInstallerName();	int        PartyID       = pMine->getInstallerPartyID();	BYTE explodeType = Type; // 气惯 屈怕	/*	switch(Type)	{		case 0: // Viper			explodeType = 0;			break;		case 1: // Diamond Back			explodeType = 2;			break;		case 2: // Sidewinder			explodeType = 5;			break;		case 3: // cobra			explodeType = 3;			break;		default:			Assert(false);	};	*/	// 瘤汾啊 气惯沁栏聪, 老窜 昏力秦 霖促.	pZone->deleteItem(pMine, X, Y);	GCDeleteObject gcDO;	gcDO.setObjectID(pMine->getObjectID());	pZone->broadcastPacket(X, Y, &gcDO);	SAFE_DELETE(pMine);	int tileX, tileY;	const int* xOffsetByEType = NULL;	const int* yOffsetByEType = NULL;	int tiles = 0;		// 瘤汾 鸥涝俊 蝶弗 气惯 offset 付胶农甫 啊廉柯促.	getExplosionTypeXYOffset(explodeType, Dir, xOffsetByEType, yOffsetByEType, tiles);	VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);	for (int tileI = 0; tileI < tiles; tileI++)	{		tileX = X + xOffsetByEType[ tileI];		tileY = Y + yOffsetByEType[ tileI];		//cout << "Check2 Tile X : " << (int)tileX << "," << " Tile Y : " << (int)tileY << endl;		// 泅犁 谅钎啊 粮 郴何捞绊, 救傈 瘤措啊 酒聪扼搁...		if (rect.ptInRect(tileX, tileY) && !(pZone->getZoneLevel(tileX, tileY) & SAFE_ZONE))		{			if( tileX != X || tileY != Y ) checkMine( pZone, tileX, tileY );			const Tile& tile = pZone->getTile(tileX, tileY);			const slist<Object*>& oList = tile.getObjectList();						// 鸥老 困狼 葛电 坷宏璃飘俊 措秦辑 炼荤甫 茄促.			for (slist<Object*>::const_iterator itr = oList.begin(); itr != oList.end(); itr++)			{				// 炼扒阑 犬牢				Object* pObject = *itr;				if (pObject->getObjectClass() == Object::OBJECT_CLASS_CREATURE)				{					// Damage甫 涝绰 巴甸父 cList俊 眠啊矫挪促.					Creature* pTargetCreature = dynamic_cast<Creature*>(pObject);					if (pTargetCreature->isSlayer())					{						//Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTargetCreature);						cList.push_back(pTargetCreature);					}					else if (pTargetCreature->isVampire())					{						//Vampire* pTargetVampire = dynamic_cast<Vampire*>(pTargetCreature);						cList.push_back(pTargetCreature);					}					else if (pTargetCreature->isOusters())					{						cList.push_back(pTargetCreature);					}					else if (pTargetCreature->isMonster())					{						//Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature);						cList.push_back(pTargetCreature);					}					else continue;					ObjectID_t targetObjectID = pTargetCreature->getObjectID();					_GCMineExplosionOK1.addCListElement(targetObjectID);					_GCMineExplosionOK2.addCListElement(targetObjectID);				}			}		}	}	_GCMineExplosionOK1.setXYDir(X, Y, Dir);	_GCMineExplosionOK1.setItemType(Type);	_GCMineExplosionOK2.setXYDir(X, Y, Dir);	_GCMineExplosionOK2.setItemType(Type);	for (list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)	{		Creature* pTargetCreature = *itr;		_GCMineExplosionOK1.clearList();		//cout << "Set Damage : " << (int)Damage << endl;		if( pTargetCreature->isSlayer() ) Damage = max( 1, Damage / 2 );		setDamage(pTargetCreature, Damage, NULL, 0, &_GCMineExplosionOK1);		if (pTargetCreature->isPC())		{			pTargetCreature->getPlayer()->sendPacket(&_GCMineExplosionOK1);		} else if( pTargetCreature->isMonster() ) {			Monster * pMonster = dynamic_cast<Monster*>(pTargetCreature);			// 瘤汾 汲摹磊狼 单固瘤甫 眠啊秦 霖促.			// 嘎绰 仇捞 阁胶磐捞绊, 傍拜磊啊 荤恩捞扼搁,			// 单固瘤俊 蝶扼辑 函窍绰 快急鼻 抛捞喉阑 盎脚秦 林绢具 茄促.			pMonster->addPrecedence(InstallerName, PartyID, Damage);			pMonster->setLastHitCreatureClass(Creature::CREATURE_CLASS_SLAYER);		}	}	pZone->broadcastPacket(X, Y, &_GCMineExplosionOK2, cList);	//cout << "Check Mine2 End" << endl;	return true; 	__END_CATCH}bool checkTrap( Zone* pZone, Creature* pCreature ){	if ( !isValidZoneCoord( pZone, pCreature->getX(), pCreature->getY() ) ) return false;	Tile& rTile = pZone->getTile( pCreature->getX(), pCreature->getY() );	Effect* pEffect = rTile.getEffect( Effect::EFFECT_CLASS_TRAP_INSTALLED );	if ( pEffect == NULL ) return false;	int ratio = 0;	if ( pCreature->isMonster() )	{		Monster* pMonster = dynamic_cast<Monster*>(pCreature);		ratio = 100 - (pMonster->getLevel()/10);	}	else if ( pCreature->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		ratio = 100 - (pVampire->getINT()/8);	}	else if ( pCreature->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		ratio = 100 - (pOusters->getINT()/8);	}	

⌨️ 快捷键说明

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