📄 createbomb.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 + -