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

📄 greenpoison.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////void GreenPoison::execute(Monster* pMonster, ZoneCoord_t X, ZoneCoord_t Y)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin(monster) " << endl;	Assert(pMonster != NULL);	try 	{		Zone* pZone = pMonster->getZone();		Assert(pZone != NULL);		if (pMonster->isFlag(Effect::EFFECT_CLASS_HIDE))		{			//cout << "Monster cannot use skill while hiding." << endl;			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(monster)" << endl;			return;		}		if (pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY))		{			addVisibleCreature(pZone, pMonster, true);		}		GCSkillToTileOK2 _GCSkillToTileOK2;		GCSkillToTileOK3 _GCSkillToTileOK3;		GCSkillToTileOK4 _GCSkillToTileOK4;		GCSkillToTileOK5 _GCSkillToTileOK5;		GCSkillToTileOK6 _GCSkillToTileOK6;		SkillType_t SkillType  = SKILL_GREEN_POISON;		SkillInfo*  pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		bool bRangeCheck = verifyDistance(pMonster, X, Y, pSkillInfo->getRange());		bool bHitRoll    = HitRoll::isSuccessMagic(pMonster, pSkillInfo);		bool bTileCheck = false;		VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);		if (rect.ptInRect(X, Y))		{			Tile& tile = pZone->getTile(X, Y);			if (tile.canAddEffect()) bTileCheck = true;		}		if (bRangeCheck && bHitRoll && bTileCheck)		{			Tile&   tile  = pZone->getTile(X, Y);			Range_t Range = 1;	// 亲惑 1捞促.						// 鞍篮 捞棋飘啊 捞固 粮犁茄促搁 昏力茄促.			Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_GREEN_POISON);			if (pOldEffect != NULL)			{				ObjectID_t effectID = pOldEffect->getObjectID();				pZone->deleteEffect(effectID);			}						// 单固瘤客 瘤加 矫埃阑 拌魂茄促.			SkillInput input(pMonster);			SkillOutput output;			computeOutput(input, output);			// 捞棋飘 坷宏璃飘甫 积己茄促.			EffectGreenPoison* pEffect = new EffectGreenPoison(pZone, X, Y);			pEffect->setDeadline(output.Duration);			pEffect->setDuration(output.Duration);			pEffect->setDamage(output.Damage);			pEffect->setLevel(pSkillInfo->getLevel()/2);			// 鸥老俊 嘿篮 捞棋飘绰 OID甫 罐酒具 茄促.			ObjectRegistry & objectregister = pZone->getObjectRegistry();			objectregister.registerObject(pEffect);					// 粮 棺 鸥老俊促啊 捞棋飘甫 眠啊茄促.			pZone->addEffect(pEffect);				tile.addEffect(pEffect);			// 鸥老 困俊 农府媚啊 乐促搁 官肺 康氢阑 林档废 茄促.			bool bEffected = false;			Creature* pTargetCreature = NULL;			if (tile.hasCreature(Creature::MOVE_MODE_WALKING)) 				pTargetCreature = tile.getCreature(Creature::MOVE_MODE_WALKING);			ZoneCoord_t myX = pMonster->getX();			ZoneCoord_t myY = pMonster->getY();			// 葛电 农府媚啊 刀俊 吝刀瞪 荐 乐霸 窍扼绰 扁裙救俊 蝶扼, 			// 轨颇捞绢 棺 阁胶磐档 刀俊 吝刀瞪 荐 乐档废 函版茄促.			// 窍瘤父 捞犯霸 登搁 阁胶磐啊 静绰 弊赴 器捞琉俊 狼秦辑 促弗 阁胶磐啊 吝刀登绰			// 泅惑捞 惯积窍霸 登绰单...			//if (pTargetCreature != NULL && pTargetCreature->isSlayer())			if (pTargetCreature != NULL)			{				if (pEffect->affectCreature(pTargetCreature, false) == true)				{					bEffected = true;					if (pTargetCreature->isPC())					{						Player* pTargetPlayer = pTargetCreature->getPlayer();						bool bCanSee = canSee(pTargetCreature, pMonster);						if (bCanSee)						{							_GCSkillToTileOK2.setObjectID(pMonster->getObjectID());							_GCSkillToTileOK2.setSkillType(SkillType);							_GCSkillToTileOK2.setX(X);							_GCSkillToTileOK2.setY(Y);							_GCSkillToTileOK2.setDuration(output.Duration);							_GCSkillToTileOK2.setRange(Range);							pTargetPlayer->sendPacket(&_GCSkillToTileOK2);						} 						else 						{							_GCSkillToTileOK6.setOrgXY(myX, myY);							_GCSkillToTileOK6.setSkillType(SkillType);							_GCSkillToTileOK6.setX(X);							_GCSkillToTileOK6.setY(Y);							_GCSkillToTileOK6.setDuration(output.Duration);							_GCSkillToTileOK6.setRange(Range);							pTargetPlayer->sendPacket(&_GCSkillToTileOK6);						}					}				}			}			_GCSkillToTileOK3.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK3.setSkillType(SkillType);			_GCSkillToTileOK3.setX(X);			_GCSkillToTileOK3.setY(Y);						_GCSkillToTileOK4.setSkillType(SkillType);			_GCSkillToTileOK4.setX(X);			_GCSkillToTileOK4.setY(Y);			_GCSkillToTileOK4.setDuration(output.Duration);			_GCSkillToTileOK4.setRange(Range);					_GCSkillToTileOK5.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK5.setSkillType(SkillType);			_GCSkillToTileOK5.setX(X);			_GCSkillToTileOK5.setY(Y);			_GCSkillToTileOK5.setDuration(output.Duration);			_GCSkillToTileOK5.setRange(Range);			if (bEffected) 			{				_GCSkillToTileOK4.addCListElement(pTargetCreature->getObjectID());				_GCSkillToTileOK5.addCListElement(pTargetCreature->getObjectID());			}					list<Creature*> cList;			cList.push_back(pMonster);			if (bEffected) cList.push_back(pTargetCreature);			cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList);			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(monster) " << endl;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 阁胶磐 伎橇 勤甸矾//////////////////////////////////////////////////////////////////////////////void GreenPoison::execute(Monster* pMonster)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin(monster) " << 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_GREEN_POISON;		SkillInfo*  pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		ZoneCoord_t X = pMonster->getX();		ZoneCoord_t Y = pMonster->getY();		// 阁胶磐狼 矫眉啊 乐绰 鸥老客 弊 林函 鸥老 吝 罚待栏肺 窍唱俊 谎赴促.		int dir = rand()%8;			list<POINT> ptList;		ptList.push_back(POINT(X, Y));		ptList.push_back(POINT((X + dirMoveMask[dir].x), (Y + dirMoveMask[dir].y)));		VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);		list<POINT>::iterator itr = ptList.begin();		for (; itr != ptList.end(); itr++)		{			int tileX = (*itr).x;			int tileY = (*itr).y;			bool bTileCheck = false;			if (rect.ptInRect(tileX, tileY))			{				Tile& tile = pZone->getTile(tileX, tileY);				if (tile.canAddEffect()) bTileCheck = true;			}			if (bTileCheck)			{				Tile& tile = pZone->getTile(tileX, tileY);								// 鞍篮 捞棋飘啊 捞固 粮犁茄促搁 昏力茄促.				Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_GREEN_POISON);				if (pOldEffect != NULL)				{					ObjectID_t effectID = pOldEffect->getObjectID();					pZone->deleteEffect(effectID);				}								// 单固瘤客 瘤加 矫埃阑 拌魂茄促.				SkillInput input(pMonster);				SkillOutput output;				computeOutput(input, output);				// 捞棋飘 坷宏璃飘甫 积己茄促.				EffectGreenPoison* pEffect = new EffectGreenPoison(pZone, tileX, tileY);				pEffect->setDeadline(output.Duration);				pEffect->setDuration(output.Duration);				pEffect->setDamage(output.Damage);				pEffect->setLevel(pSkillInfo->getLevel()/2);				// 鸥老俊 嘿篮 捞棋飘绰 OID甫 罐酒具 茄促.				ObjectRegistry & OR = pZone->getObjectRegistry();				OR.registerObject(pEffect);							// 粮 棺 鸥老俊促啊 捞棋飘甫 眠啊茄促.				pZone->addEffect(pEffect);					tile.addEffect(pEffect);				GCAddEffectToTile gcAddEffectToTile;				gcAddEffectToTile.setEffectID(pEffect->getEffectClass());				gcAddEffectToTile.setObjectID(pEffect->getObjectID());				gcAddEffectToTile.setXY(tileX, tileY);				gcAddEffectToTile.setDuration(output.Duration);				// list俊 POINT啊 滴俺 甸绢啊 乐栏骨肺, 滴锅 宏肺靛某胶泼阑 窍霸 等促. 				// 捞 何盒篮 菩哦狼 府胶飘甫 窃荐狼 牢磊肺 罐绰 宏肺靛某胶泼 				// 窃荐甫 父甸绢辑 茄锅俊 场郴绰 巴捞 辑滚狼 扁瓷 氢惑俊 档框捞				// 瞪 巴捞促.				// 2002-01-23 辫己刮				pZone->broadcastPacket(tileX, tileY, &gcAddEffectToTile);			} 		}	}	catch (Throwable & t) 	{		//cout << t.toString() << endl;	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end(monster) " << endl;	__END_CATCH}GreenPoison g_GreenPoison;

⌨️ 快捷键说明

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