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

📄 purify.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : Purify.cpp// Written by  : Elca// Description : //////////////////////////////////////////////////////////////////////////////#include "Purify.h"#include "Assert.h"#include "EffectDarkness.h"#include "ZoneUtil.h"#include "Gpackets/GCSkillToTileOK1.h"#include "Gpackets/GCSkillToTileOK2.h"#include "Gpackets/GCSkillToTileOK3.h"#include "Gpackets/GCSkillToTileOK4.h"#include "Gpackets/GCSkillToTileOK5.h"#include "Gpackets/GCDeleteEffectFromTile.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void Purify::execute(Slayer* pSlayer, ObjectID_t TargetObjectID, SkillSlot* pSkillSlot, CEffectID_t CEffectID)    throw(Error){    __BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin(slayerobject)" << endl;	Assert(pSlayer != NULL);	Assert(pSkillSlot != NULL);    try    {		Zone* pZone = pSlayer->getZone();		Assert(pZone != NULL);		Creature* pTargetCreature = pZone->getCreature(TargetObjectID);		//Assert(pTargetCreature != NULL);		// NoSuch力芭. by sigi. 2002.5.2		if (pTargetCreature==NULL)		{			executeSkillFailException(pSlayer, getSkillType());			return;		}		execute(pSlayer, pTargetCreature->getX(), pTargetCreature->getY(), pSkillSlot, CEffectID);    } 	catch (Throwable & t) 	{		executeSkillFailException(pSlayer, getSkillType());        //cout << t.toString() << endl;    }	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerobject)" << endl;    __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 鸥老 勤甸矾//////////////////////////////////////////////////////////////////////////////void Purify::execute(Slayer * pSlayer, ZoneCoord_t X, ZoneCoord_t Y, SkillSlot* pSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin(slayertile)" << endl;	Assert(pSlayer != NULL);	Assert(pSkillSlot != NULL);	try	{		Player* pPlayer = pSlayer->getPlayer();		Zone* pZone = pSlayer->getZone();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		GCSkillToTileOK1 _GCSkillToTileOK1;		GCSkillToTileOK2 _GCSkillToTileOK2;		GCSkillToTileOK3 _GCSkillToTileOK3;		GCSkillToTileOK4 _GCSkillToTileOK4;		GCSkillToTileOK5 _GCSkillToTileOK5;		SkillType_t       SkillType  = pSkillSlot->getSkillType();		SkillInfo*        pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		SkillDomainType_t DomainType = pSkillInfo->getDomainType();		SkillLevel_t      SkillLevel = pSkillSlot->getExpLevel();		int  RequiredMP  = (int)pSkillInfo->getConsumeMP();		bool bManaCheck  = hasEnoughMana(pSlayer, RequiredMP);		bool bTimeCheck  = verifyRunTime(pSkillSlot);		bool bRangeCheck = verifyDistance(pSlayer, X, Y, pSkillInfo->getRange());		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.hasCreature(Creature::MOVE_MODE_BURROWING)) bTileCheck = true;		}		if (bManaCheck && bTimeCheck && bRangeCheck && bTileCheck)		{			decreaseMana(pSlayer, RequiredMP, _GCSkillToTileOK1);			SkillGrade Grade  = g_pSkillInfoManager->getGradeByDomainLevel(pSlayer->getSkillDomainLevel(DomainType));			SkillInput input(pSlayer, pSkillSlot);			SkillOutput output;			computeOutput(input, output);			Damage_t Damage = output.Damage;			Range_t  Range  = output.Range;			int oX = 0, oY = 0;			list<Creature*> cList;	// 寸窍绰 盒甸 list			for(oY = -Range; oY <= Range; oY++)			{				for(oX = -Range; oX <= Range; oX++)				{					int tileX = X+oX;					int tileY = Y+oY;					if (rect.ptInRect(tileX, tileY))					{						Tile& tile = pZone->getTile(tileX, tileY);						// 泅犁 鸥老俊 顶 加俊 乐绰 农府媚啊 粮犁茄促搁...						if (tile.hasCreature(Creature::MOVE_MODE_BURROWING))						{							Creature* pTargetCreature = tile.getCreature(Creature::MOVE_MODE_BURROWING);							Assert(pTargetCreature != NULL);							int ratio = 0;							if (pTargetCreature->isVampire())							{								Vampire* pVampire = dynamic_cast<Vampire*>(pTargetCreature);								ratio = 75 + SkillLevel - pVampire->getLevel();							}							else if (pTargetCreature->isMonster())							{								Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);								ratio = 75 + SkillLevel - pMonster->getLevel();							}							else							{								Assert(false);							}							bool UnBurrow = false;							if (rand()%100 < ratio) UnBurrow = true;							if (UnBurrow) 							{								// 顶加俊辑 掺笼绢郴柳 仇甸 府胶飘俊 眠啊茄促.								cList.push_back(pTargetCreature);								ObjectID_t targetObjectID = pTargetCreature->getObjectID();								_GCSkillToTileOK1.addCListElement(targetObjectID);								_GCSkillToTileOK2.addCListElement(targetObjectID);								_GCSkillToTileOK5.addCListElement(targetObjectID);								// 顶 加俊 甸绢乐绰 仇阑 波郴绢, 单固瘤甫 霖促.								addUnburrowCreature(pZone, pTargetCreature, tileX, tileY, pTargetCreature->getDir());								setDamage(pTargetCreature, Damage, pSlayer, SkillType, &_GCSkillToTileOK2, &_GCSkillToTileOK1);							}						}					}					}			}						// 版氰摹甫 棵赴促.			Exp_t ExpUp = 10* (Grade + 1);			shareAttrExp(pSlayer, ExpUp, 1, 1, 8, _GCSkillToTileOK1);			increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToTileOK1);			increaseSkillExp(pSlayer, DomainType,  pSkillSlot, pSkillInfo, _GCSkillToTileOK1);			ZoneCoord_t myX = pSlayer->getX();			ZoneCoord_t myY = pSlayer->getY();			_GCSkillToTileOK1.setSkillType(SkillType);			_GCSkillToTileOK1.setCEffectID(CEffectID);			_GCSkillToTileOK1.setX(X);			_GCSkillToTileOK1.setY(Y);			_GCSkillToTileOK1.setDuration(0);			_GCSkillToTileOK2.setObjectID(pSlayer->getObjectID());			_GCSkillToTileOK2.setSkillType(SkillType);			_GCSkillToTileOK2.setX(X);			_GCSkillToTileOK2.setY(Y);			_GCSkillToTileOK2.setDuration(0);			_GCSkillToTileOK2.setRange(Range);			_GCSkillToTileOK3.setObjectID(pSlayer->getObjectID());			_GCSkillToTileOK3.setSkillType(SkillType);			_GCSkillToTileOK3.setX(X);			_GCSkillToTileOK3.setY(Y);			_GCSkillToTileOK4.setSkillType(SkillType);			_GCSkillToTileOK4.setX(X);			_GCSkillToTileOK4.setY(Y);			_GCSkillToTileOK4.setRange(Range);			_GCSkillToTileOK4.setDuration(0);			_GCSkillToTileOK5.setObjectID(pSlayer->getObjectID());			_GCSkillToTileOK5.setSkillType(SkillType);			_GCSkillToTileOK5.setX(X);			_GCSkillToTileOK5.setY(Y);			_GCSkillToTileOK5.setRange(Range);			_GCSkillToTileOK5.setDuration(0);						// 顶 加俊辑 掺笼绢郴柳 仇甸俊霸 眉仿捞 粹疽促绰 巴阑 舅妨拎具茄促.			for(list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++)			{				Creature* pTargetCreature = *itr;				if (pTargetCreature->isPC())				{					_GCSkillToTileOK2.clearList();					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);					pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK2);				}				else if (pTargetCreature->isMonster())				{					(dynamic_cast<Monster*>(pTargetCreature))->addEnemy(pSlayer);				}			}			pPlayer->sendPacket(&_GCSkillToTileOK1);			cList.push_back(pSlayer);			cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList);			pZone->broadcastPacket(myX, myY,  &_GCSkillToTileOK3 , cList);			pZone->broadcastPacket(X, Y,  &_GCSkillToTileOK4 , cList);			// Set NextTime			pSkillSlot->setRunTime(output.Delay);		} 		else 		{			executeSkillFailNormal(pSlayer, getSkillType(), NULL);		}	} 	catch(Throwable & t)  	{		executeSkillFailException(pSlayer, getSkillType());	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayertile)" << endl;	__END_CATCH}Purify g_Purify;

⌨️ 快捷键说明

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