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

📄 simpletilemissileskill.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
								computeCriticalBonus(pOusters, param.SkillType, Damage, bCriticalHit);								// 其澄萍绰 扁夯利栏肺 100捞促.								Damage = getPercentValue(Damage, penalty);								ObjectID_t targetObjectID = pTargetCreature->getObjectID();								cList.push_back(pTargetCreature);								_GCSkillToTileOK1.addCListElement(targetObjectID);								_GCSkillToTileOK2.addCListElement(targetObjectID);								_GCSkillToTileOK5.addCListElement(targetObjectID);								// 老窜 嘎绰 仇捞 罐阑 菩哦篮 澄 惑怕肺 茄 盲肺, 单固瘤甫 霖促.								setDamage(pTargetCreature, Damage, pOusters, param.SkillType, NULL, &_GCSkillToTileOK1);								computeAlignmentChange(pTargetCreature, Damage, pOusters, NULL, &_GCSkillToTileOK1);								increaseAlignment(pOusters, pTargetCreature, _GCSkillToTileOK1);								// 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促.								if (bCriticalHit || bForceKnockback)								{									knockbackCreature(pZone, pTargetCreature, pOusters->getX(), pOusters->getY());								}								if (pTargetCreature->isDead())								{									int exp = computeCreatureExp(pTargetCreature, 100, pOusters);									shareOustersExp(pOusters, exp, _GCSkillToTileOK1);								}							}						}					}				}			}			// 傍拜磊狼 酒捞袍 郴备己阑 冻绢哆赴促.			decreaseDurability(pOusters, NULL, pSkillInfo->getPoint(), &_GCSkillToTileOK1, NULL);			_GCSkillToTileOK1.setSkillType(param.SkillType);			_GCSkillToTileOK1.setCEffectID(CEffectID);			_GCSkillToTileOK1.setX(X);			_GCSkillToTileOK1.setY(Y);			_GCSkillToTileOK1.setRange(dir);			_GCSkillToTileOK1.setDuration(0);			_GCSkillToTileOK1.setGrade(param.Grade);			_GCSkillToTileOK2.setObjectID(pOusters->getObjectID());			_GCSkillToTileOK2.setSkillType(param.SkillType);			_GCSkillToTileOK2.setX(X);			_GCSkillToTileOK2.setY(Y);			_GCSkillToTileOK2.setRange(dir);			_GCSkillToTileOK2.setDuration(0);			_GCSkillToTileOK2.setGrade(param.Grade);			_GCSkillToTileOK5.setObjectID(pOusters->getObjectID());			_GCSkillToTileOK5.setSkillType(param.SkillType);			_GCSkillToTileOK5.setX(X);			_GCSkillToTileOK5.setY(Y);			_GCSkillToTileOK5.setRange(dir);			_GCSkillToTileOK5.setDuration(0);			_GCSkillToTileOK5.setGrade(param.Grade);			pPlayer->sendPacket(&_GCSkillToTileOK1);			// 捞 扁贱俊 狼秦 康氢阑 罐绰 仇甸俊霸 菩哦阑 焊郴拎具 茄促.			for (list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)			{				Creature * pTargetCreature = *itr;				Assert(pTargetCreature != NULL);				if (pTargetCreature->isPC())				{					_GCSkillToTileOK2.clearList();					// HP狼 函版荤亲阑 菩哦俊促 扁废茄促.					HP_t targetHP = 0;					if (pTargetCreature->isSlayer())					{						targetHP = (dynamic_cast<Slayer*>(pTargetCreature))->getHP(ATTR_CURRENT);					}					else if (pTargetCreature->isVampire())					{						targetHP = (dynamic_cast<Vampire*>(pTargetCreature))->getHP(ATTR_CURRENT);					}					else if (pTargetCreature->isOusters())					{						targetHP = (dynamic_cast<Ousters*>(pTargetCreature))->getHP(ATTR_CURRENT);					}					_GCSkillToTileOK2.addShortData(MODIFY_CURRENT_HP, targetHP);					// 酒捞袍狼 郴备仿阑 冻绢哆赴促.					decreaseDurability(NULL, pTargetCreature, pSkillInfo->getPoint(), NULL, &_GCSkillToTileOK2);					// 菩哦阑 焊郴霖促.					pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK2);				}				else if (pTargetCreature->isMonster())				{					// 寸辟 利栏肺 牢侥茄促.					Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);					pMonster->addEnemy(pOusters);				}			}			result.targetCreatures = cList;			cList.push_back(pOusters);			pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK5 , cList);			// set Next Run Time			pOustersSkillSlot->setRunTime(param.Delay);		}		else 		{			executeSkillFailNormal(pOusters, param.SkillType, NULL, param.Grade);		}	}	catch (Throwable & t) 	{		executeSkillFailException(pOusters, param.SkillType, param.Grade);	}	__END_CATCH}void SimpleTileMissileSkill::execute(Monster* pMonster, int X, int Y,	const SIMPLE_SKILL_INPUT& param,  SIMPLE_SKILL_OUTPUT& result,	CEffectID_t CEffectID, bool bForceKnockback) throw (Error){	__BEGIN_TRY	try 	{		Zone* pZone = pMonster->getZone();		Assert(pZone != NULL);		GCSkillToTileOK2 _GCSkillToTileOK2;		GCSkillToTileOK3 _GCSkillToTileOK3;		GCSkillToTileOK4 _GCSkillToTileOK4;		GCSkillToTileOK5 _GCSkillToTileOK5;		GCSkillToTileOK6 _GCSkillToTileOK6;		SkillInfo*  pSkillInfo = g_pSkillInfoManager->getSkillInfo(param.SkillType);		bool bRangeCheck = verifyDistance(pMonster, X, Y, pSkillInfo->getRange());		bool bHitRoll    = HitRoll::isSuccessMagic(pMonster, pSkillInfo);		if (bRangeCheck && bHitRoll)		{			// 谅钎客 规氢阑 备茄促.			ZoneCoord_t myX          = pMonster->getX();			ZoneCoord_t myY          = pMonster->getY();			Dir_t       dir          = calcDirection(myX, myY, X, Y);			Damage_t    Damage       = 0;			bool        bCriticalHit = false;			VSRect rect(1, 1, pZone->getWidth()-2, pZone->getHeight()-2);			list<Creature*> cList;			list<TILE_MASK>::const_iterator itr = param.MaskList.begin();			for (; itr != param.MaskList.end(); itr++)			{				TILE_MASK mask = (*itr);				int tileX   = X + mask.x;				int tileY   = Y + mask.y;				int penalty = mask.penalty;				// 泅犁 鸥老捞 粮 郴何捞绊, 救傈瘤措啊 酒聪扼搁 嘎阑 啊瓷己捞 乐促.				if (rect.ptInRect(tileX, tileY))				{					// 鸥老阑 罐酒柯促.					Tile& tile = pZone->getTile(tileX, tileY);					list<Creature*> targetList;					if (tile.hasCreature(Creature::MOVE_MODE_WALKING))					{						Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_WALKING);						targetList.push_back(pCreature);					}					if (tile.hasCreature(Creature::MOVE_MODE_FLYING))					{						Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_FLYING);						targetList.push_back(pCreature);					}					if (tile.hasCreature(Creature::MOVE_MODE_BURROWING))					{						Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_BURROWING);						targetList.push_back(pCreature);					}					list<Creature*>::iterator itr = targetList.begin();					for(; itr != targetList.end(); itr++)					{						Creature* pEnemy = (*itr);						Assert(pEnemy != NULL);						// 傍拜 措惑捞 嘎绰 版快俊..						if (pMonster->isEnemyToAttack( pEnemy ))						{							bool bPK             = verifyPK(pMonster, pEnemy);							bool bRaceCheck      = !pEnemy->isNPC(); //pEnemy->isSlayer() || pEnemy->isVampire();							bool bZoneLevelCheck = checkZoneLevelToHitTarget(pEnemy);							if (bPK && bRaceCheck && bZoneLevelCheck)							{								Damage       = 0;								bCriticalHit = false;								if (param.bAdd)								{									Damage += computeDamage(pMonster, pEnemy, 0, bCriticalHit);								}								//cout << "bAddDamage = " << Damage << endl;								if (param.bMagicDamage)								{									Damage += computeMagicDamage(pEnemy, param.SkillDamage, param.SkillType);									//cout << "bMagicDamage = " << Damage << endl;								}								else								{									Damage += param.SkillDamage;									//cout << "!bMagicDamage = " << Damage << endl;								}								// 其澄萍绰 扁夯利栏肺 100捞促.								Damage = getPercentValue(Damage, penalty);								//cout << "bPenaltyDamage = " << Damage << endl;								ObjectID_t targetObjectID = pEnemy->getObjectID();								cList.push_back(pEnemy);								_GCSkillToTileOK2.addCListElement(targetObjectID);								_GCSkillToTileOK5.addCListElement(targetObjectID);								// 老窜 嘎绰 仇捞 罐阑 菩哦篮 澄 惑怕肺 茄 盲肺, 单固瘤甫 霖促.								setDamage(pEnemy, Damage, pMonster, param.SkillType, NULL, NULL);								// 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促.								if (bCriticalHit || bForceKnockback)								{									knockbackCreature(pZone, pEnemy, pMonster->getX(), pMonster->getY());								}							}						}					}				}			}			_GCSkillToTileOK2.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK2.setSkillType(param.SkillType);			_GCSkillToTileOK2.setX(X);			_GCSkillToTileOK2.setY(Y);			_GCSkillToTileOK2.setRange(dir);			_GCSkillToTileOK2.setDuration(0);			_GCSkillToTileOK5.setObjectID(pMonster->getObjectID());			_GCSkillToTileOK5.setSkillType(param.SkillType);			_GCSkillToTileOK5.setX(X);			_GCSkillToTileOK5.setY(Y);			_GCSkillToTileOK5.setRange(dir);			_GCSkillToTileOK5.setDuration(0);			// 捞 扁贱俊 狼秦 康氢阑 罐绰 仇甸俊霸 菩哦阑 焊郴拎具 茄促.			for (list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)			{				Creature * pEnemy = *itr;				Assert(pEnemy != NULL);				if (pEnemy->isPC())				{					_GCSkillToTileOK2.clearList();					// HP狼 函版荤亲阑 菩哦俊促 扁废茄促.					HP_t targetHP = 0;					if (pEnemy->isSlayer())					{						targetHP = (dynamic_cast<Slayer*>(pEnemy))->getHP(ATTR_CURRENT);					}					else if (pEnemy->isVampire())					{						targetHP = (dynamic_cast<Vampire*>(pEnemy))->getHP(ATTR_CURRENT);					}					else if (pEnemy->isOusters())					{						targetHP = (dynamic_cast<Ousters*>(pEnemy))->getHP(ATTR_CURRENT);					}					_GCSkillToTileOK2.addShortData(MODIFY_CURRENT_HP, targetHP);					// 酒捞袍狼 郴备仿阑 冻绢哆赴促.					decreaseDurability(NULL, pEnemy, pSkillInfo->getPoint(), NULL, &_GCSkillToTileOK2);					// 菩哦阑 焊郴霖促.					pEnemy->getPlayer()->sendPacket(&_GCSkillToTileOK2);										//cout << "SimpleTileMissibleSkill: " << _GCSkillToTileOK2.toString().c_str() << endl;				}				else if (pEnemy->isMonster())				{					// 寸辟 利栏肺 牢侥茄促.					Monster* pTargetMonster = dynamic_cast<Monster*>(pEnemy);					pTargetMonster->addEnemy(pMonster);				}			}			result.targetCreatures = cList;			cList.push_back(pMonster);			pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK5 , cList);		}		else 		{			executeSkillFailNormal(pMonster, param.SkillType, NULL);		}	}	catch (Throwable & t) 	{		executeSkillFailException(pMonster, param.SkillType);	}	__END_CATCH}

⌨️ 快捷键说明

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