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

📄 createbomb.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : CreateBomb.cpp// Written by  : Elca// Description : //////////////////////////////////////////////////////////////////////////////#include "CreateBomb.h"#include "ItemFactoryManager.h"#include "ItemUtil.h"#include "item/Bomb.h"#include "Gpackets/GCSkillToInventoryOK1.h"#include "Gpackets/GCSkillToInventoryOK2.h"int MaterialType2BombTypeMap[] ={	0,  // 0	1,  // 1	2,  // 2	3,  // 3	4,  // 4	-1, // 5	-1, // 6	-1, // 7	-1, // 8	-1  // 9};////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CreateBomb::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(CreateBomb)" << 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* pBombMaterial = pInventory->getItem(X, Y);		if (pBombMaterial == NULL || pBombMaterial->getItemClass() != Item::ITEM_CLASS_BOMB_MATERIAL || 			pBombMaterial->getObjectID() != InvenObjectID)		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;			return;		}		bool bSamePosition = false;		if (X == TargetX && Y == TargetY) bSamePosition = true;		// 措惑 困摹客 鸥百 困摹啊 鞍霸 朝酒坷绰 版快绰		// 气藕肺 函券窍绊磊 窍绰 C4狼 箭磊啊 1牢 版快捞促.		// (捞傈狼 C4阑 昏力窍绊, 鞍篮 困摹俊 气藕甫 积己茄促绰 狼固捞促.)		// 1捞 酒聪扼搁 府畔秦具茄促.		if (bSamePosition && pBombMaterial->getNum() != 1)		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;			return;		}		// 酒捞袍 鸥涝苞 捞俊 措览窍绰 气藕狼 鸥涝阑 备茄促.		ItemType_t MaterialType = pBombMaterial->getItemType();		int BombType = MaterialType2BombTypeMap[MaterialType];		if (BombType == -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));		int  RequiredMP  = (int)pSkillInfo->getConsumeMP();		bool bManaCheck  = hasEnoughMana(pSlayer, RequiredMP);		bool bTimeCheck  = verifyRunTime(pSkillSlot);		bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer);		bool bCanMake    = canMake(BombType, pSlayer->getSkillDomainLevel(DomainType), SkillLevel);		if (bManaCheck && bTimeCheck && bRangeCheck && bCanMake)		{			decreaseMana(pSlayer, RequiredMP, _GCSkillToInventoryOK1);			SkillInput input(pSlayer, pSkillSlot);			SkillOutput output;			computeOutput(input, output);			list<OptionType_t> optionNULL;			Item* pBomb = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_BOMB, BombType, optionNULL);			// 气藕犁丰狼 肮荐甫 临咯霖促.			// 捞 窃荐 救俊辑 气藕犁丰狼 肮荐啊 磊悼利栏肺 窍唱 临绢甸绊, 			// 父老 1俺牢 气藕犁丰捞菌促搁 牢亥配府 棺 DB俊辑 昏力登霸 等促.			decreaseItemNum(pBombMaterial, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, X, Y);			Item* pPrevBomb = pInventory->getItem(TargetX, TargetY);			// 扁粮狼 气藕 按眉啊 乐促绰 富篮 阶酒具 茄促绰 富捞促.			if (pPrevBomb != NULL)			{				if (canStack(pPrevBomb, pBomb) == false)				{					// 鞍篮 鸥涝狼 气藕啊 酒匆 锭牢单... 捞繁 版快啊 绢痘霸 窍搁 积辨鳖...					SAFE_DELETE(pBomb);					executeSkillFailException(pSlayer, getSkillType());					//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl;					return;				}				// 肮荐甫 窍唱 刘啊矫虐绊 历厘茄促.				pPrevBomb->setNum(pPrevBomb->getNum() + 1);				pPrevBomb->save(pSlayer->getName(), STORAGE_INVENTORY, 0, TargetX, TargetY);								// 困何盒狼 decreaseItemNum() 窃荐 何盒俊辑 酒捞袍 箭磊甫 皑家矫虐骨肺, 				// 咯扁辑 促矫 牢亥配府狼 酒捞袍 箭磊甫 刘啊矫挪促.				pInventory->increaseNum();				// 规陛 父甸绢柳 气藕绰 扁粮狼 气藕俊 歹秦脸栏骨肺 昏力茄促.				SAFE_DELETE(pBomb);				_GCSkillToInventoryOK1.setObjectID(pPrevBomb->getObjectID());			}			// 扁粮狼 气藕 按眉啊 绝促绰 富篮 气藕 按眉甫 DB俊 积己秦具 茄促绰 富捞促.			else			{				ObjectRegistry& OR = pZone->getObjectRegistry();				OR.registerObject(pBomb);				// 气藕甫 Inventory肺 笼绢 持绊 DB俊促啊 积己茄促.				pBomb->setNum(1);				pInventory->addItem(TargetX, TargetY, pBomb);				pBomb->create(pSlayer->getName(), STORAGE_INVENTORY, 0, TargetX, TargetY);				_GCSkillToInventoryOK1.setObjectID(pBomb->getObjectID());			}			// 菩哦阑 焊辰促.			_GCSkillToInventoryOK1.setSkillType(SkillType);			_GCSkillToInventoryOK1.setItemType(BombType);			_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, 8, 1, _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(CreateBomb)" << endl;	__END_CATCH}bool CreateBomb::canMake(ItemType_t BombType, int DomainLevel, int SkillLevel)	throw(){	__BEGIN_TRY	int ratio = 10 * ((SkillLevel/10) - BombType) + 40;	if ((rand()%100) < ratio) return true;	return false;	__END_CATCH}CreateBomb g_CreateBomb;

⌨️ 快捷键说明

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