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