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

📄 zoneutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		if ( pt.x != cx || pt.y != cy )		{			rangeDiff = max( abs( (int)(pt.x) - (int)(cx) ) , abs( (int)(pt.y) - (int)(cy) ) );		}		ZoneCoord_t oldX = pCreature->getX();		ZoneCoord_t oldY = pCreature->getY();		GCDeleteObject gcDO;		gcDO.setObjectID(pCreature->getObjectID());		pZone->broadcastPacket(oldX, oldY, &gcDO, pCreature);		// 捞棋飘甫 昏力秦 霖促.		EffectManager* pEffectManager = pCreature->getEffectManager();		Assert(pEffectManager != NULL);		if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF))		{			pCreature->removeFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF); // DeleteObject packet阑 焊辰饶 set.			// 捞棋飘狼 duraration捞 父扁啊 登瘤 臼疽绰单, 捞棋飘甫 昏力窍妨搁			// 碍力肺 deleteEffect 窃荐甫 阂矾拎具 茄促.			if (bForce)			{				// by sigi. 2002.7.2. RemoveEffect 朝妨霖促.				GCRemoveEffect gcRemoveEffect;				gcRemoveEffect.setObjectID(pCreature->getObjectID());				gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF);				if (pCreature->isPC())				{					Player* pPlayer = pCreature->getPlayer();					Assert(pPlayer != NULL);					pPlayer->sendPacket(&gcRemoveEffect);				}				pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF);			}			if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				VAMPIRE_RECORD prev;				pVampire->getVampireRecord(prev);				pVampire->initAllStat();				pVampire->sendModifyInfo(prev);			}			else if (pCreature->isMonster())			{				Monster* pMonster = dynamic_cast<Monster*>(pCreature);				pMonster->initAllStat();			}		}		if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF))		{			pCreature->removeFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF); // DeleteObject packet阑 焊辰饶 set.			// 捞棋飘狼 duraration捞 父扁啊 登瘤 臼疽绰单, 捞棋飘甫 昏力窍妨搁			// 碍力肺 deleteEffect 窃荐甫 阂矾拎具 茄促.			if (bForce)			{				// by sigi. 2002.7.2. RemoveEffect 朝妨霖促.				GCRemoveEffect gcRemoveEffect;				gcRemoveEffect.setObjectID(pCreature->getObjectID());				gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF);				if (pCreature->isPC())				{					Player* pPlayer = pCreature->getPlayer();					Assert(pPlayer != NULL);					pPlayer->sendPacket(&gcRemoveEffect);				}				pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF);			}			if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				VAMPIRE_RECORD prev;				pVampire->getVampireRecord(prev);				pVampire->initAllStat();				pVampire->sendModifyInfo(prev);			}			else if (pCreature->isMonster())			{				Monster* pMonster = dynamic_cast<Monster*>(pCreature);				pMonster->initAllStat();			}		}		else if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT))		{			pCreature->removeFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT);  // DeleteObject packet阑 焊辰饶 set.			// 捞棋飘狼 duraration捞 父扁啊 登瘤 臼疽绰单, 捞棋飘甫 昏力窍妨搁			// 碍力肺 deleteEffect 窃荐甫 阂矾拎具 茄促.			if (bForce)			{				// by sigi. 2002.7.2. RemoveEffect 朝妨霖促.				GCRemoveEffect gcRemoveEffect;				gcRemoveEffect.setObjectID(pCreature->getObjectID());				gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_TRANSFORM_TO_BAT);				if (pCreature->isPC())				{					Player* pPlayer = pCreature->getPlayer();					Assert(pPlayer != NULL);					pPlayer->sendPacket(&gcRemoveEffect);				}				pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_TRANSFORM_TO_BAT);			}			if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				VAMPIRE_RECORD prev;				pVampire->getVampireRecord(prev);				pVampire->initAllStat();				pVampire->sendModifyInfo(prev);			}			else if (pCreature->isMonster())			{				Monster* pMonster = dynamic_cast<Monster*>(pCreature);				pMonster->initAllStat();			}		}		// 扁粮 鸥老俊辑 农府媚甫 力芭窍绊, 公宏 葛靛甫 官层霖 促澜俊		// 货 鸥老俊 眠啊茄促.		Tile& oldTile = pZone->getTile(oldX, oldY);		Tile& newTile = pZone->getTile(pt.x, pt.y);		try {			oldTile.deleteCreature(pCreature->getObjectID());		} catch (Error& e) {			filelog("assertTile.txt", "addUntransformCreature : %s", e.toString().c_str());			throw;		}		pCreature->setMoveMode(Creature::MOVE_MODE_WALKING);		newTile.addCreature(pCreature);		Assert(pCreature == newTile.getCreature(pCreature->getMoveMode()));		// 农府媚狼 谅钎甫 瘤沥秦 霖促.		pCreature->setXYDir(pt.x, pt.y, pCreature->getDir());		// 农府媚 努贰胶俊 蝶扼, 粮俊促 宏肺靛某胶泼茄促.		Creature::CreatureClass CClass = pCreature->getCreatureClass();		if (CClass == Creature::CREATURE_CLASS_VAMPIRE)		{			Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);			GCAddVampireFromTransformation gcAVFT(pVampire->getVampireInfo3());			gcAVFT.setEffectInfo(pVampire->getEffectInfo());			pZone->broadcastPacket( pt.x, pt.y, &gcAVFT, pVampire, true, rangeDiff );			// send to myself			GCUntransformOK gcUntransformOK(pt.x, pt.y, pCreature->getDir());			pCreature->getPlayer()->sendPacket(&gcUntransformOK);		}		else if (CClass == Creature::CREATURE_CLASS_MONSTER)		{			Monster* pMonster = dynamic_cast<Monster*>(pCreature);			GCAddMonsterFromTransformation gcAMFT;			gcAMFT.setObjectID(pMonster->getObjectID());			gcAMFT.setMonsterType(pMonster->getMonsterType());			gcAMFT.setMonsterName(pMonster->getMonsterName());			gcAMFT.setX(pt.x);			gcAMFT.setY(pt.y);			gcAMFT.setDir(pMonster->getDir());			gcAMFT.setEffectInfo(pMonster->getEffectInfo());			gcAMFT.setCurrentHP(pMonster->getHP());			gcAMFT.setMaxHP(pMonster->getHP(ATTR_MAX));			pZone->broadcastPacket(pt.x, pt.y, &gcAMFT, NULL, true, rangeDiff);		}		else		{			throw Error("invalid creature type");		}	} 	else 	{		if (pCreature->isPC())		{			GCUntransformFail gcUntransformFail;			pCreature->getPlayer()->sendPacket(&gcUntransformFail);		}		else		{			//throw Error("Cannot unburrow monster.");		}	}	// 函脚阑 乾 仇捞 轨颇捞绢, 溜 敲饭捞绢扼搁 傍拜 加档甫 焊郴霖促.	// 捞绰 努扼捞攫飘俊辑 冠零肺 函脚阑 沁阑 锭 捞傈狼 傍拜 加档甫 	// 历厘且 荐 绝绰 滚弊 锭巩捞促. -- 辫己刮	if (pCreature->isVampire())	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		GCModifyInformation gcMI;		gcMI.addShortData(MODIFY_ATTACK_SPEED, pVampire->getAttackSpeed());		pVampire->getPlayer()->sendPacket(&gcMI);	}	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 救 焊捞绰 农府媚甫 眠啊茄促.//// Zone*       pZone     : 粮俊 措茄 器牢磐// Creature*   pCreature : 救 焊捞绰 农府媚// ZoneCoord_t cx        : 农府媚狼 盔贰 谅钎 x// ZoneCoord_t cy        : 农府媚狼 盔贰 谅钎 y//////////////////////////////////////////////////////////////////////////////void addInvisibleCreature(Zone* pZone, Creature* pCreature, ZoneCoord_t cx, ZoneCoord_t cy)	throw(){	__BEGIN_TRY	Assert(pZone != NULL);	Assert(pCreature != NULL);	// 轨颇捞绢唱 阁胶磐父捞 捧疙拳啊 啊瓷窍促.	Assert(pCreature->isVampire() || pCreature->isMonster());		ObjectID_t creatureID = pCreature->getObjectID();	GCDeleteObject gcDO;	gcDO.setObjectID(creatureID); 			pCreature->setFlag(Effect::EFFECT_CLASS_INVISIBILITY);		//Tile& rTile = pZone->getTile(cx, cy);	GCAddEffect gcAddEffect;	gcAddEffect.setObjectID(creatureID);	gcAddEffect.setEffectID(Effect::EFFECT_CLASS_INVISIBILITY);	gcAddEffect.setDuration(0);		//--------------------------------------------------------------------------------	//	// 矫具 康开狼 惑窍谅快 葛滴 + 1 究 刘啊矫挪促. 	// 捞蜡绰 规氢俊 蝶弗 ON_SIGHT 康开捞 刘啊登扁 锭巩捞促.	//	//--------------------------------------------------------------------------------	for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(pZone->getWidth() - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix ++) 	{		for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(pZone->getHeight() - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy ++) 		{			Tile& curTile = pZone->getTile(ix, iy);			const slist<Object*> & objectList = curTile.getObjectList();			slist<Object*>::const_iterator itr = objectList.begin();			for (; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE; itr ++) 			{				Assert(*itr != NULL);				Creature* pViewer= dynamic_cast<Creature*>(*itr);				if (pViewer != pCreature && pViewer->isPC() && 					(pViewer->getVisionState(cx, cy) >= IN_SIGHT)) 				{					// Viewer 狼 ObservingEye 捞棋飘甫 啊廉柯促.					EffectObservingEye* pEffectObservingEye = NULL;					if ( pViewer->isFlag( Effect::EFFECT_CLASS_OBSERVING_EYE ) )					{						pEffectObservingEye = dynamic_cast<EffectObservingEye*>(pViewer->findEffect( Effect::EFFECT_CLASS_OBSERVING_EYE ) );						//Assert( pEffectObservingEye != NULL );					}					// Viewer 狼 Gnome's Whisper 捞棋飘甫 啊廉柯促.					EffectGnomesWhisper* pEffectGnomesWhisper = NULL;					if ( pViewer->isFlag( Effect::EFFECT_CLASS_GNOMES_WHISPER ) )					{						pEffectGnomesWhisper = dynamic_cast<EffectGnomesWhisper*>(pViewer->findEffect( Effect::EFFECT_CLASS_GNOMES_WHISPER ) );						//Assert( pEffectGnomesWhisper != NULL );					}					//cout << "checking" << endl;					if ( !pCreature->isFlag(Effect::EFFECT_CLASS_HIDE)							|| pViewer->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN)							|| ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeHide() )					   ) // || ( pEffectRevealer != NULL && pEffectRevealer->canSeeHide( pCreature ) ) ))					{						if ( pViewer->isVampire()							|| pViewer->isFlag( Effect::EFFECT_CLASS_DETECT_INVISIBILITY ) 							|| ( pEffectObservingEye != NULL && pEffectObservingEye->canSeeInvisibility( pCreature  ) )							|| ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeInvisibility() )						)						{							pViewer->getPlayer()->sendPacket(&gcAddEffect);							//cout << "send add invisible effect" << endl;						}						else						{							pViewer->getPlayer()->sendPacket(&gcDO);							//cout << "send delete object" << endl;						}						// invisbility客 包访秦辑父, 杭 荐 绝绰磊../*						if (!pViewer->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) 							&& pViewer->isSlayer()) 						{							pViewer->getPlayer()->sendPacket(&gcDO);						}						else						{							pViewer->getPlayer()->sendPacket(&gcAddEffect);						}*/					}					else					{						// 盔贰 杭 荐 绝菌栏骨肺, 鞠巴档 且 老捞 绝促.					}				}//if			}//for		}//for	}//for	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 救 焊捞带 农府媚啊 焊老 版快, 捞 农府媚甫 眠啊茄促.//// Zone*       pZone     : 粮俊 措茄 器牢磐// Creature*   pCreature : 救 焊捞带 农府媚// bool        bForce    : 碍力肺 visible 惑怕啊 登菌唱?//////////////////////////////////////////////////////////////////////////////void addVisibleCreature(Zone* pZone, Creature* pCreature, bool bForced)	throw() {	__BEGIN_TRY	Assert(pZone != NULL);	Assert(pCreature != NULL);	// 轨颇捞绢唱 阁胶磐父捞 捧疙拳啊 啊瓷窍促.	Assert(pCreature->isVampire() || pCreature->isMonster());	// 敲贰弊啊 难廉乐绢具 茄促.	Assert(pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY));		ZoneCoord_t cx          = pCreature->getX();	ZoneCoord_t cy          = pCreature->getY();	//Tile&       rTile       = pZone->getTile(cx, cy);	Packet*                pGCAddXXX = NULL;	GCAddMonster           gcAddMonster;	GCAddVampire           gcAddVampire;	GCAddBurrowingCreature gcABC;		Creature::CreatureClass CClass = pCreature->getCreatureClass();	if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		Monster* pMonster = dynamic_cast<Monster*>(pCreature);		if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE))	// 荤角 阂啊瓷		{			gcABC.setObjectID(pMonster->getObjectID());			gcABC.setName(pMonster->getName());			gcABC.setX(cx);			gcABC.setY(cy);						pGCAddXXX = &gcABC;		}		else		{			// 各狼 EffectManager俊 甸绢啊乐绰霸 酒聪扁 锭巩俊...			// 烙矫肺 积己秦辑 焊郴霖促.			// 各篮 公茄矫埃 Invisible - -;			by sigi			EffectInfo* pEffectInfo = new EffectInfo;			pEffectInfo->addListElement( Effect::EFFECT_CLASS_INVISIBILITY, 0xFFFF);			// make packet			gcAddMonster.setObjectID(pMonster->getObjectID());			gcAddMonster.setMonsterType(pMonster->getMonsterType());			gcAddMonster.setMonsterName(pMonster->getName());	// by sigi - -;			gcAddMonster.setX(cx);			gcAddMonster.setY(cy);			gcAddMonster.setDir(pMonster->getDir());			gcAddMonster.setEffectInfo( pEffectInfo );			gcAddMonster.setCurrentHP(pMonster->getHP());			gcAddMonster.setMaxHP(pMonster->getHP(ATTR_MAX));			pGCAddXXX = &gcAddMonster;		}	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE))	// 荤角 阂啊瓷		{			gcABC.setObjectID(pVampire->getObjectID());			gcABC.setName(pVampire->getName());			gcABC.setX(cx);			gcABC.setY(cy);						pGCAddXXX = &gcABC;		}		else		{//			gcAddVampire.setVampireInfo(pVampire->getVampireInfo3());//			gcAddVampire.setEffectInfo(pVampire->getEffectInfo());			makeGCAddVampire( &gcAddVampire, pVampire );			pGCAddXXX = &gcAddVampire;		}	}

⌨️ 快捷键说明

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