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

📄 bloodywall.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			for(list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)			{				Creature* pTargetCreature = *itr;				if (canSee(pTargetCreature, pVampire)) pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK2);				else pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK6);			}			pPlayer->sendPacket(&_GCSkillToTileOK1);			cList.push_back(pVampire);			list<Creature*> watcherList = pZone->getWatcherList(myX, myY, pVampire);			// watcherList俊辑 cList俊 加窍瘤 臼绊, caster(pVampire)甫 杭 荐 绝绰 版快绰			// OK4甫 焊郴绊.. cList俊 眠啊茄促.			for(list<Creature*>::const_iterator itr = watcherList.begin(); itr != watcherList.end(); itr++)			{				bool bBelong = false;				for(list<Creature*>::const_iterator tItr = cList.begin(); tItr != cList.end(); tItr++)					if (*itr == *tItr)						bBelong = true;				Creature* pWatcher = (*itr);				if (bBelong == false && canSee(pWatcher, pVampire) == false)				{					//Assert(pWatcher->isPC());	// 寸楷 PC促.. Zone::getWatcherList绰 PC父 return茄促					if (!pWatcher->isPC())					{						//cout << "BloodyWall : 坑贸 府胶飘啊 PC啊 酒凑聪促." << endl;						GCSkillFailed1 _GCSkillFailed1;						_GCSkillFailed1.setSkillType(getSkillType());						pVampire->getPlayer()->sendPacket(&_GCSkillFailed1);						//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;						return;					}					pWatcher->getPlayer()->sendPacket(&_GCSkillToTileOK4);					cList.push_back(*itr);				}			}								cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList, false);						pZone->broadcastPacket(myX, myY,  &_GCSkillToTileOK3 , cList);						pZone->broadcastPacket(X, Y,  &_GCSkillToTileOK4 , cList);			pVampireSkillSlot->setRunTime(output.Delay);		} 		else 		{			executeSkillFailNormal(pVampire, getSkillType(), NULL);		}	} 	catch (Throwable & t) 	{		executeSkillFailException(pVampire, getSkillType());	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void BloodyWall::execute(Monster* pMonster, Creature* pEnemy) 	throw(Error){	__BEGIN_TRY	Assert(pMonster != NULL);	Assert(pEnemy != NULL);	execute(pMonster, pEnemy->getX(), pEnemy->getY());	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 阁胶磐 伎橇 勤甸矾//////////////////////////////////////////////////////////////////////////////void BloodyWall::execute(Monster* pMonster, ZoneCoord_t X, ZoneCoord_t Y)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl;	Assert(pMonster != NULL);	try 	{		Zone* pZone = pMonster->getZone();		Assert(pZone != NULL);		GCSkillToTileOK2 _GCSkillToTileOK2;		GCSkillToTileOK3 _GCSkillToTileOK3;		GCSkillToTileOK4 _GCSkillToTileOK4;		GCSkillToTileOK5 _GCSkillToTileOK5;		GCSkillToTileOK6 _GCSkillToTileOK6;		SkillType_t SkillType  = SKILL_BLOODY_WALL;		SkillInfo*  pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		ZoneCoord_t myX = pMonster->getX();		ZoneCoord_t myY = pMonster->getY();		// 付胶磐绰 公炼扒~~		bool bRangeCheck = pMonster->isMaster()#ifdef __UNDERWORLD__			|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif							|| verifyDistance(pMonster, X, Y, pSkillInfo->getRange());		bool bHitRoll    = pMonster->isMaster() #ifdef __UNDERWORLD__			|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif							|| HitRoll::isSuccessMagic(pMonster, pSkillInfo);				bool bTileCheck = false;		VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);		if (rect.ptInRect(X, Y)) bTileCheck = true;		if (bRangeCheck && bHitRoll && bTileCheck)		{			// 捞棋飘狼 瘤加矫埃阑 拌魂茄促.			SkillInput input(pMonster);			SkillOutput output;			computeOutput(input, output);			//Range_t    Range    = 3;			Dir_t 	   Dir		= getDirectionToPosition( myX, myY, X, Y );			list<Creature*> cList;	// denier list			for (int i=0; i<5; i++)			{				POINT& pt = m_BloodyWallMask[Dir][i];				int tileX = X+pt.x;				int tileY = Y+pt.y;				if (rect.ptInRect(tileX, tileY))				{					Tile& tile = pZone->getTile(tileX, tileY);					// 泅犁 鸥老俊促 捞棋飘甫 眠啊且 荐 乐促搁...					if (tile.canAddEffect())					{						// 鞍篮 effect啊 乐栏搁 瘤款促.						Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_BLOODY_WALL);						if (pOldEffect != NULL)						{							ObjectID_t effectID = pOldEffect->getObjectID();							pZone->deleteEffect(effectID);// fix me						}											// 捞棋飘 努贰胶甫 积己茄促.						EffectBloodyWall* pEffect = new EffectBloodyWall(pZone , tileX, tileY);						pEffect->setCasterName( pMonster->getName() );						pEffect->setCasterID( pMonster->getObjectID() );						pEffect->setClan( Creature::CREATURE_CLASS_MONSTER, pMonster->getClanType() );						pEffect->setDamage( output.Damage );						pEffect->setDeadline(output.Duration);						pEffect->setLevel(pMonster->getINT());						pEffect->setNextTime(0);						pEffect->setTick(output.Tick);						// Tile俊 嘿捞绰 Effect绰 ObjectID甫 殿废罐酒具 茄促.						ObjectRegistry & objectregister = pZone->getObjectRegistry();						objectregister.registerObject(pEffect);						pZone->addEffect(pEffect);						tile.addEffect(pEffect);						const slist<Object*>& oList = tile.getObjectList();						for(slist<Object*>::const_iterator itr = oList.begin(); itr != oList.end(); itr++) 						{							Object* pTarget = *itr;							Creature* pTargetCreature = NULL;							if (pTarget->getObjectClass() == Object::OBJECT_CLASS_CREATURE 								&& ( (pTargetCreature = dynamic_cast<Creature*>(pTarget))->isSlayer() || pTargetCreature->isOusters() )							) 							{								cList.push_back(pTargetCreature);								_GCSkillToTileOK2.addCListElement(pTargetCreature->getObjectID());								_GCSkillToTileOK4.addCListElement(pTargetCreature->getObjectID());								_GCSkillToTileOK5.addCListElement(pTargetCreature->getObjectID());																pEffect->affect(pTargetCreature);							}							//pEffect->affectObject(pTarget, false);						}					}					}				}			_GCSkillToTileOK2.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK2.setSkillType(SkillType);			_GCSkillToTileOK2.setX(X);			_GCSkillToTileOK2.setY(Y);			_GCSkillToTileOK2.setDuration(output.Duration);			_GCSkillToTileOK2.setRange(Dir);			//_GCSkillToTileOK2.addShortData(MODIFY_VISION, BLOODY_WALL_SIGHT);			_GCSkillToTileOK3.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK3.setSkillType(SkillType);			_GCSkillToTileOK3.setX(X);			_GCSkillToTileOK3.setY(Y);			_GCSkillToTileOK4.setSkillType(SkillType);			_GCSkillToTileOK4.setX(X);			_GCSkillToTileOK4.setY(Y);			_GCSkillToTileOK4.setRange(Dir);			_GCSkillToTileOK4.setDuration(output.Duration);			_GCSkillToTileOK5.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK5.setSkillType(SkillType);			_GCSkillToTileOK5.setX(X);			_GCSkillToTileOK5.setY(Y);			_GCSkillToTileOK5.setRange(Dir);			_GCSkillToTileOK5.setDuration(output.Duration);			_GCSkillToTileOK6.setOrgXY(myX, myY);			_GCSkillToTileOK6.setSkillType(SkillType);			_GCSkillToTileOK6.setX(X);			_GCSkillToTileOK6.setY(Y);			_GCSkillToTileOK6.setDuration(output.Duration);			_GCSkillToTileOK6.setRange(Dir);			//_GCSkillToTileOK6.addShortData(MODIFY_VISION, BLOODY_WALL_SIGHT);			for(list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)			{				Creature* pTargetCreature = *itr;				if (canSee(pTargetCreature, pMonster)) pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK2);				else pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK6);			}			cList.push_back(pMonster);			list<Creature*> watcherList = pZone->getWatcherList(myX, myY, pMonster);			// watcherList俊辑 cList俊 加窍瘤 臼绊, caster(pMonster)甫 杭 荐 绝绰 版快绰			// OK4甫 焊郴绊.. cList俊 眠啊茄促.			for(list<Creature*>::const_iterator itr = watcherList.begin(); itr != watcherList.end(); itr++)			{				bool bBelong = false;				for(list<Creature*>::const_iterator tItr = cList.begin(); tItr != cList.end(); tItr++)					if (*itr == *tItr)						bBelong = true;				Creature* pWatcher = (*itr);				if (bBelong == false && canSee(pWatcher, pMonster) == false)				{					//Assert(pWatcher->isPC());	// 寸楷 PC促.. Zone::getWatcherList绰 PC父 return茄促					if (!pWatcher->isPC())					{						//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;						return;					}					pWatcher->getPlayer()->sendPacket(&_GCSkillToTileOK4);					cList.push_back(*itr);				}			}								cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList, false);						pZone->broadcastPacket(myX, myY,  &_GCSkillToTileOK3 , cList);						pZone->broadcastPacket(X, Y,  &_GCSkillToTileOK4 , cList);		} 		else 		{			executeSkillFailNormal(pMonster, getSkillType(), NULL);		}	} 	catch (Throwable & t) 	{		executeSkillFailException(pMonster, getSkillType());	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;	__END_CATCH}BloodyWall g_BloodyWall;

⌨️ 快捷键说明

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