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

📄 throwholywater.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : ThrowHolyWater.cpp// Written by  : Elca// Description : //////////////////////////////////////////////////////////////////////////////#include "ThrowHolyWater.h"#include "ItemFactoryManager.h"#include "ItemUtil.h"#include "item/HolyWater.h"#include "Gpackets/GCThrowItemOK1.h"#include "Gpackets/GCSkillToObjectOK1.h"#include "Gpackets/GCThrowItemOK2.h"#include "Gpackets/GCThrowItemOK3.h"#include "Gpackets/GCModifyInformation.h"////////////////////////////////////////////////////////////////////////// ThrowHolyWater::execute()////////////////////////////////////////////////////////////////////////void ThrowHolyWater::execute(Slayer* pSlayer , ObjectID_t TargetObjectID, ObjectID_t ItemObjectID, CoordInven_t InvenX, CoordInven_t InvenY)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl;	Assert(pSlayer != NULL);	try 	{		Player* pPlayer = pSlayer->getPlayer();		Zone* pZone = pSlayer->getZone();		Inventory* pInventory = pSlayer->getInventory();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		Assert(pInventory != NULL);		Assert(InvenX < pInventory->getWidth());		Assert(InvenY < pInventory->getHeight());		Item* pItem = pInventory->getItem(InvenX, InvenY);		if (pItem == NULL)		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;			return;		}		ObjectID_t ObjectID        = pItem->getObjectID();		Creature*  pTargetCreature = NULL;		// 菩哦俊 柯 芭尔, 酒捞袍 酒捞叼啊 撇府芭唱, 		// 己荐啊 酒聪扼搁 角菩沁促绊 焊郴霖促.		if (ObjectID != ItemObjectID || pItem->getItemClass() != Item::ITEM_CLASS_HOLYWATER)		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;			return;		}		GCSkillToObjectOK1 _GCSkillToObjectOK1;		GCThrowItemOK2 _GCThrowItemOK2;		GCModifyInformation gcAttackerMI;		// 粮俊辑 鸥百 农府媚甫 茫绰促.		/*		try 		{ 			pTargetCreature = pZone->getCreature(TargetObjectID); 		}		catch (NoSuchElementException) 		{ 			pTargetCreature = NULL; 		}		*/		pTargetCreature = pZone->getCreature(TargetObjectID); 		// 努扼捞攫飘客狼 悼扁拳 巩力肺 牢秦, 器牢磐啊 澄老 荐 乐促.		// 己荐捍 滴俺甫 楷加栏肺 带脸绰单, 刚历 带柳 己荐捍栏肺 牢秦,		// 鸥百捞 磷绊 抄 第, 努扼捞攫飘啊 固贸 弊 菩哦阑 罐瘤 给窍绊,		// 促矫 茄锅 己荐甫 带龙 版快, 傲 府畔窍搁 帮鄂窍促.		if (pTargetCreature == NULL)		{			// 刚历 酒捞袍 箭磊甫 临咯林绢具 茄促.			decreaseItemNum(pItem, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;			return;		} 		else 		{			HolyWater* pHolyWater = dynamic_cast<HolyWater*>(pItem);			Damage_t MinDamage = pHolyWater->getMinDamage();			Damage_t MaxDamage = pHolyWater->getMaxDamage();			Damage_t Damage    = max(1, Random(MinDamage, MaxDamage));			// 老馆 瘤开捞 酒聪扼搁 单固瘤甫 0栏肺 技泼秦 霖促. 			// 关 何盒俊辑 checkZoneLevelToHitTarget 窃荐甫 何福扁 锭巩俊			// 咯扁辑 救傈瘤措 包访 八荤甫 且 鞘夸啊 绝促.			// -- 2002-01-31 辫己刮			//if (!(pZone->getZoneLevel() & NO_SAFE_ZONE)) Damage = 0;			list<Creature*> cList;			cList.push_back(pSlayer);			bool bHitRoll        = HitRoll::isSuccess(pSlayer, pTargetCreature);			bool bPK             = verifyPK(pSlayer, pTargetCreature);			bool bRangeCheck     = verifyDistance(pSlayer, pTargetCreature, 10);			bool bZoneLevelCheck = checkZoneLevelToHitTarget(pTargetCreature);			// 疙吝 登菌促搁, 单固瘤甫 霖促..			// 疙吝捞 登瘤 臼酒档 己荐绰 茄锅 带瘤搁 场捞促.			if (bHitRoll && bPK && bRangeCheck && bZoneLevelCheck)			{				// 惑措规捞 浇饭捞绢啊 酒囱 版快俊父 版氰摹甫 棵妨霖促.				if (!pTargetCreature->isSlayer())				{					shareAttrExp(pSlayer, Damage, 1, 1, 8, gcAttackerMI);					// 牢镁 档皋篮档 棵妨霖促.					// 2003. 1. 12 by bezz					// Throw Holy Water 狼 SkillInfo 啊 绝促.					// 弊贰辑 Create Holy Water 狼 Point 甫 敬促.					SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo( SKILL_CREATE_HOLY_WATER );					increaseDomainExp( pSlayer, SKILL_DOMAIN_ENCHANT, pSkillInfo->getPoint(), gcAttackerMI );				}				if (pTargetCreature->isSlayer()) 				{					/*					GCModifyInformation gcModifyInfo;					Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTargetCreature);					setDamage(pTargetSlayer, Damage, NULL, 0, &_GCThrowItemOK2);					computeAlignmentChange(pTargetSlayer, Damage, pSlayer, &_GCThrowItemOK2, &gcAttackerMI);					Player* pTargetPlayer = pTargetSlayer->getPlayer();					pTargetPlayer->sendPacket(&_GCThrowItemOK2);					*/				} 				else if (pTargetCreature->isVampire()) 				{					Vampire* pTargetVampire = dynamic_cast<Vampire*>(pTargetCreature);					setDamage(pTargetVampire, Damage, NULL, 0, &_GCThrowItemOK2);					// 罐篮 单固瘤父怒狼 圈府 单固瘤甫 霖促.					Silver_t silverDamage    = max(1, getPercentValue(Damage, 10));					Silver_t newSilverDamage = pTargetVampire->getSilverDamage() + silverDamage;					pTargetVampire->saveSilverDamage(newSilverDamage);					Player* pTargetPlayer = pTargetVampire->getPlayer();					pTargetPlayer->sendPacket(&_GCThrowItemOK2);					GCModifyInformation gcModifyInfo;					gcModifyInfo.addShortData(MODIFY_SILVER_DAMAGE, newSilverDamage);					pTargetPlayer->sendPacket(&gcModifyInfo);				} 				else if (pTargetCreature->isOusters()) 				{					Ousters* pTargetOusters = dynamic_cast<Ousters*>(pTargetCreature);					setDamage(pTargetOusters, Damage, NULL, 0, &_GCThrowItemOK2);					// 罐篮 单固瘤父怒狼 圈府 单固瘤甫 霖促.					Silver_t silverDamage    = max(1, getPercentValue(Damage, 10));					Silver_t newSilverDamage = pTargetOusters->getSilverDamage() + silverDamage;					pTargetOusters->saveSilverDamage(newSilverDamage);					Player* pTargetPlayer = pTargetOusters->getPlayer();					pTargetPlayer->sendPacket(&_GCThrowItemOK2);					GCModifyInformation gcModifyInfo;					gcModifyInfo.addShortData(MODIFY_SILVER_DAMAGE, newSilverDamage);					pTargetPlayer->sendPacket(&gcModifyInfo);				} 				else if (pTargetCreature->isMonster()) 				{					Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature);					setDamage(pTargetMonster, Damage, pSlayer, getSkillType(), NULL, NULL);					Silver_t silverDamage = max(1, getPercentValue(Damage, 10));					Silver_t newSilverDamage = pTargetMonster->getSilverDamage() + silverDamage;					pTargetMonster->setSilverDamage(newSilverDamage);				}				cList.push_back(pTargetCreature);				// 林函 荤恩甸俊霸 OK3 Packet阑 焊辰促.				GCThrowItemOK3 _GCThrowItemOK3;				_GCThrowItemOK3.setObjectID(pSlayer->getObjectID()); 				_GCThrowItemOK3.setTargetObjectID(TargetObjectID);				pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &_GCThrowItemOK3, cList);				// 带柳 荤恩俊霸 OK Packet阑 焊辰促.				GCThrowItemOK1 _GCThrowItemOK1;				_GCThrowItemOK1.setObjectID(TargetObjectID);				pPlayer->sendPacket(&_GCThrowItemOK1);				pPlayer->sendPacket(&gcAttackerMI);			}			else // 己荐 带瘤扁俊 角菩沁阑 版快...			{				executeSkillFailNormal(pSlayer, getSkillType(), pTargetCreature);			}			// 嘎电 嘎瘤 臼疽电 己荐狼 箭磊绰 临咯林绢具 茄促.			decreaseItemNum(pItem, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);		}	} 	catch(Throwable & t) 	{		executeSkillFailException(pSlayer, getSkillType());	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl;	__END_CATCH}ThrowHolyWater g_ThrowHolyWater;

⌨️ 快捷键说明

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