📄 createholywater.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : CreateHolyWater.cpp// Written by : Elca// Description : //////////////////////////////////////////////////////////////////////////////#include "CreateHolyWater.h"#include "ItemFactoryManager.h"#include "ItemUtil.h"#include "item/HolyWater.h"#include "Gpackets/GCSkillToInventoryOK1.h"#include "Gpackets/GCSkillToInventoryOK2.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CreateHolyWater::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* pWater = pInventory->getItem(X, Y); if (pWater == NULL || pWater->getItemClass() != Item::ITEM_CLASS_WATER || pWater->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 && pWater->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 = pWater->getItemType(); int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer); bool bCanMake = canMake(waterType, pSlayer->getSkillDomainLevel(DomainType), SkillLevel); if (bManaCheck && bTimeCheck && bRangeCheck && bCanMake) { decreaseMana(pSlayer, RequiredMP, _GCSkillToInventoryOK1); SkillInput input(pSlayer, pSkillSlot); SkillOutput output; computeOutput(input, output); // 盔贰 焊烹 拱狼 ItemType阑 捞侩秦 圈府况磐甫 积己茄促. // 捞绰 Water客 HolyWater狼 ItemType捞 1:1 措览捞 登扁 锭巩俊 // 啊瓷茄 内靛捞促. list<OptionType_t> optionNULL; Item* pHolyWater = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_HOLYWATER, waterType, optionNULL); // 捞力 俺荐档 技泼秦霖促. pHolyWater->setNum( pWater->getNum() ); // 拱捍狼 肮荐甫 临咯霖促. // 捞 窃荐 救俊辑 拱捍狼 肮荐啊 磊悼利栏肺 窍唱 临绢甸绊, // 父老 1俺牢 拱捍捞菌促搁 牢亥配府 棺 DB俊辑 昏力登霸 等促.// decreaseItemNum(pWater, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, X, Y); // 捞力 割俺电 惑包绝捞 根顶 官层滚赴促. pInventory->deleteItem(X,Y); pWater->destroy(); SAFE_DELETE(pWater); Item* pPrevHolyWater = pInventory->getItem(TargetX, TargetY); // 扁粮狼 己荐 按眉啊 乐促绰 富篮 阶酒具 茄促绰 富捞促. if (pPrevHolyWater != NULL) { if (canStack(pPrevHolyWater, pHolyWater) == false) { // 鞍篮 鸥涝狼 己荐啊 酒匆 锭牢单... 捞繁 版快啊 绢痘霸 窍搁 积辨鳖... SAFE_DELETE(pHolyWater); executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayerinventory)" << endl; return; } // 肮荐甫 窍唱 刘啊矫虐绊 历厘茄促. pPrevHolyWater->setNum(pPrevHolyWater->getNum() + pHolyWater->getNum()); pPrevHolyWater->save(pSlayer->getName(), STORAGE_INVENTORY, 0, TargetX, TargetY); // 困何盒狼 decreaseItemNum() 窃荐 何盒俊辑 酒捞袍 箭磊甫 皑家矫虐骨肺, // 咯扁辑 促矫 牢亥配府狼 酒捞袍 箭磊甫 刘啊矫挪促. pInventory->increaseNum( pHolyWater->getNum() ); // 规陛 父甸绢柳 己荐绰 扁粮狼 己荐俊 歹秦脸栏骨肺 昏力茄促. SAFE_DELETE(pHolyWater); _GCSkillToInventoryOK1.setObjectID(pPrevHolyWater->getObjectID()); } // 扁粮狼 己荐 按眉啊 绝促绰 富篮 己荐 按眉甫 DB俊 积己秦具 茄促绰 富捞促. else { ObjectRegistry& OR = pZone->getObjectRegistry(); OR.registerObject(pHolyWater); // 己荐甫 Inventory肺 笼绢 持绊 DB俊促啊 积己茄促. pInventory->addItem(TargetX, TargetY, pHolyWater); pHolyWater->create(pSlayer->getName(), STORAGE_INVENTORY, 0, TargetX, TargetY); _GCSkillToInventoryOK1.setObjectID(pHolyWater->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 CreateHolyWater::canMake(ItemType_t WaterType, int DomainLevel, int SkillLevel) throw(){ __BEGIN_TRY bool rvalue = false; SkillGrade Grade = g_pSkillInfoManager->getGradeByDomainLevel(DomainLevel); int ratio = 0; // 档皋牢 饭骇俊 蝶扼 父甸 荐 乐绰 己荐狼 农扁俊 力茄捞 乐促. // 弊繁单 档皋牢 饭骇捞 付胶磐 捞惑老 版快俊绰 菩澄萍啊 绝绢具 窍绰单, // 捞绰 绢痘霸 贸府且 荐 乐阑鳖? if (WaterType == 2 && Grade >= SKILL_GRADE_EXPERT) { // 竣胶欺飘 捞惑篮 登绢具 扼瘤 圈府 况磐甫 父甸 荐 乐促. rvalue = true; ratio = 50 + SkillLevel - 50; } else if (WaterType == 1 && Grade >= SKILL_GRADE_ADEPT) { // 绢氮飘 捞惑篮 登绢具 固叼决 圈府 况磐甫 父甸 荐 勒促. rvalue = true; ratio = 50 + SkillLevel - 30; } else if (WaterType == 0 && Grade >= SKILL_GRADE_APPRENTICE) { // 绢橇坊萍胶 捞惑篮 登绢具 胶隔 圈府 况磐甫 父甸 荐 乐促. rvalue = true; ratio = 50 + SkillLevel - 10; } // 老窜 父甸 荐 乐绰 犬伏捞 乐促搁 犬伏 眉农甫 茄促. if (rvalue) { if ((rand()%100) < ratio) return true; } return false; __END_CATCH}CreateHolyWater g_CreateHolyWater;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -