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

📄 createholypotion.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : CreateHolyPotion.cpp// Written by  : Elca// Description : //////////////////////////////////////////////////////////////////////////////#include "CreateHolyPotion.h"#include "ItemFactoryManager.h"#include "ItemUtil.h"#include "item/Potion.h"#include "Gpackets/GCSkillToInventoryOK1.h"#include "Gpackets/GCSkillToInventoryOK2.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CreateHolyPotion::execute(Slayer * pSlayer , ObjectID_t InvenObjectID, CoordInven_t X, CoordInven_t Y, CoordInven_t TargetX, CoordInven_t TargetY, SkillSlot * pSkillSlot)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin(slayerinventory)" << endl;	Assert(pSlayer != NULL);	Assert(pSkillSlot != NULL);	try 	{		Player* pPlayer = pSlayer->getPlayer();		Zone* pZone = pSlayer->getZone();		Inventory* pInventory = pSlayer->getInventory();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		Assert(pInventory != NULL);		// 己荐甫 父甸 措惑捞 澄捞芭唱, 焊烹 拱捞 酒聪芭唱,		// OID啊 撇府促搁 荤侩且 荐 绝促.		Item* pPotion = pInventory->getItem(X, Y);		if (pPotion == NULL || pPotion->getItemClass() != Item::ITEM_CLASS_WATER || pPotion->getObjectID() != InvenObjectID)		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;			return;		}		bool bSamePosition = false;		if (X == TargetX && Y == TargetY) bSamePosition = true;		// 措惑 困摹客 鸥百 困摹啊 鞍霸 朝酒坷绰 版快绰		// 己荐肺 函券窍绊磊 窍绰 拱捍狼 箭磊啊 1牢 版快捞促.		// (捞傈狼 拱捍阑 昏力窍绊, 鞍篮 困摹俊 己荐甫 积己茄促绰 狼固捞促.)		// 1捞 酒聪扼搁 府畔秦具茄促.		// 捞力 茄俺究父 酒聪扼 拱捍捞 根顶 促 官差骨肺 眉农且 鞘夸 绝促.		if (bSamePosition && pPotion->getNum() != 1)		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;			return;		}		GCSkillToInventoryOK1 _GCSkillToInventoryOK1;		GCSkillToInventoryOK2 _GCSkillToInventoryOK2;		SkillType_t       SkillType  = pSkillSlot->getSkillType();		SkillInfo*        pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		SkillLevel_t      SkillLevel = pSkillSlot->getExpLevel();		SkillDomainType_t DomainType = pSkillInfo->getDomainType();		SkillGrade        Grade      = g_pSkillInfoManager->getGradeByDomainLevel(pSlayer->getSkillDomainLevel(DomainType));		// 东户 内靛 -_-		ItemType_t waterType = pPotion->getItemType() + 11;		int  RequiredMP  = (int)pSkillInfo->getConsumeMP();		bool bManaCheck  = hasEnoughMana(pSlayer, RequiredMP);		bool bTimeCheck  = verifyRunTime(pSkillSlot);		bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer);		bool bCanMake    = canMake(pPotion->getItemType(), pSlayer->getSkillDomainLevel(DomainType), SkillLevel);		if (bManaCheck && bTimeCheck && bRangeCheck && bCanMake)		{			decreaseMana(pSlayer, RequiredMP, _GCSkillToInventoryOK1);			SkillInput input(pSlayer, pSkillSlot);			SkillOutput output;			computeOutput(input, output);			// 盔贰 焊烹 拱狼 ItemType阑 捞侩秦 圈府况磐甫 积己茄促.			// 捞绰 Potion客 HolyPotion狼 ItemType捞 1:1 措览捞 登扁 锭巩俊			// 啊瓷茄 内靛捞促.			list<OptionType_t> optionNULL;			Item* pHolyPotion = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_POTION, waterType, optionNULL);			// 拱捍狼 肮荐甫 临咯霖促.			// 捞 窃荐 救俊辑 拱捍狼 肮荐啊 磊悼利栏肺 窍唱 临绢甸绊, 			// 父老 1俺牢 拱捍捞菌促搁 牢亥配府 棺 DB俊辑 昏力登霸 等促.			decreaseItemNum(pPotion, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, X, Y);			Item* pPrevHolyPotion = pInventory->getItem(TargetX, TargetY);			// 扁粮狼 己荐 按眉啊 乐促绰 富篮 阶酒具 茄促绰 富捞促.			if (pPrevHolyPotion != NULL)			{				if (canStack(pPrevHolyPotion, pHolyPotion) == false)				{					// 鞍篮 鸥涝狼 己荐啊 酒匆 锭牢单... 捞繁 版快啊 绢痘霸 窍搁 积辨鳖...					SAFE_DELETE(pHolyPotion);					executeSkillFailException(pSlayer, getSkillType());					//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;					return;				}				// 肮荐甫 窍唱 刘啊矫虐绊 历厘茄促.				pPrevHolyPotion->setNum(pPrevHolyPotion->getNum() + pHolyPotion->getNum());				pPrevHolyPotion->save(pSlayer->getName(), STORAGE_INVENTORY, 0, TargetX, TargetY);								// 困何盒狼 decreaseItemNum() 窃荐 何盒俊辑 酒捞袍 箭磊甫 皑家矫虐骨肺, 				// 咯扁辑 促矫 牢亥配府狼 酒捞袍 箭磊甫 刘啊矫挪促.				pInventory->increaseNum( pHolyPotion->getNum() );				// 规陛 父甸绢柳 己荐绰 扁粮狼 己荐俊 歹秦脸栏骨肺 昏力茄促.				SAFE_DELETE(pHolyPotion);				_GCSkillToInventoryOK1.setObjectID(pPrevHolyPotion->getObjectID());			}			// 扁粮狼 己荐 按眉啊 绝促绰 富篮 己荐 按眉甫 DB俊 积己秦具 茄促绰 富捞促.			else			{				ObjectRegistry& OR = pZone->getObjectRegistry();				OR.registerObject(pHolyPotion);				// 己荐甫 Inventory肺 笼绢 持绊 DB俊促啊 积己茄促.				pInventory->addItem(TargetX, TargetY, pHolyPotion);				pHolyPotion->create(pSlayer->getName(), STORAGE_INVENTORY, 0, TargetX, TargetY);				_GCSkillToInventoryOK1.setObjectID(pHolyPotion->getObjectID());			}			// 菩哦阑 焊辰促.			_GCSkillToInventoryOK1.setSkillType(SkillType);			_GCSkillToInventoryOK1.setItemType(waterType);			_GCSkillToInventoryOK1.setCEffectID(0);			_GCSkillToInventoryOK1.setX(TargetX);			_GCSkillToInventoryOK1.setY(TargetY);			_GCSkillToInventoryOK2.setObjectID(pSlayer->getObjectID());			_GCSkillToInventoryOK2.setSkillType(SkillType);						// EXP UP!			Exp_t ExpUp = 10 * (Grade + 1);			shareAttrExp(pSlayer, ExpUp , 1, 1, 8, _GCSkillToInventoryOK1);			// 圈府器记 父甸扁绰 档皋牢 版氰摹 救 霖促.//			increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToInventoryOK1);			increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToInventoryOK1);			pPlayer->sendPacket(&_GCSkillToInventoryOK1);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &_GCSkillToInventoryOK2, pSlayer);			pSkillSlot->setRunTime(output.Delay);		}		else		{			//executeSkillFailNormal(pSlayer, getSkillType(), NULL);			// 己荐 父甸扁 鞍篮 版快俊绰, 角菩沁阑 锭 掉饭捞啊 绝扁 锭巩俊,			// 努扼捞攫飘俊霸辑 菩哦捞 惑寸洒 狐福霸 楷加利栏肺 朝酒柯促.			// 捞 锭, 角菩 菩哦阑 宏肺靛 某胶泼窍霸 登搁, 糠俊 乐绰 荤恩捞 焊扁俊绰			// 某胶泼 悼累捞 概快 狐福霸 楷加利栏肺 钎矫等促. (胶乔靛琴 静绰 巴贸烦...)			// 弊贰辑 捞 何盒俊辑 宏肺靛某胶泼阑 窍瘤 臼绊, 夯牢俊霸父 菩哦阑 朝妨霖促.			// 2002-02-06 辫己刮			executeSkillFailException(pSlayer, getSkillType());		}	} 	catch(Throwable & t) 	{		executeSkillFailException(pSlayer, getSkillType());	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;	__END_CATCH}bool CreateHolyPotion::canMake(ItemType_t PotionType, int DomainLevel, int SkillLevel)	throw(){	__BEGIN_TRY	bool       rvalue = false;	int        ratio  = 60 + SkillLevel;	// 档皋牢 饭骇俊 蝶扼 父甸 荐 乐绰 己荐狼 农扁俊 力茄捞 乐促.	// 弊繁单 档皋牢 饭骇捞 付胶磐 捞惑老 版快俊绰 菩澄萍啊 绝绢具 窍绰单,	// 捞绰 绢痘霸 贸府且 荐 乐阑鳖?	if (PotionType == 6 && DomainLevel >= 101)	{		rvalue = true;	}	else if (PotionType == 5 && DomainLevel >= 81)	{		rvalue = true;	}	else if (PotionType == 4 && DomainLevel >= 61)	{		// 绢橇坊萍胶 捞惑篮 登绢具 胶隔 圈府 况磐甫 父甸 荐 乐促.		rvalue = true;	}	else if (PotionType == 3)	{		rvalue = true;	}	// 老窜 父甸 荐 乐绰 犬伏捞 乐促搁 犬伏 眉农甫 茄促.	if (rvalue)	{		if ((rand()%100) < ratio) return true;	}	return false;	__END_CATCH}CreateHolyPotion g_CreateHolyPotion;

⌨️ 快捷键说明

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