📄 throwholywater.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : ThrowHolyWater.cpp// Written by : Elca// Description : //////////////////////////////////////////////////////////////////////////////#include "ThrowHolyWater.h"#include "ItemFactoryManager.h"#include "ItemUtil.h"#include "item/HolyWater.h"#include "Gpackets/GCThrowItemOK1.h"#include "Gpackets/GCSkillToObjectOK1.h"#include "Gpackets/GCThrowItemOK2.h"#include "Gpackets/GCThrowItemOK3.h"#include "Gpackets/GCModifyInformation.h"////////////////////////////////////////////////////////////////////////// ThrowHolyWater::execute()////////////////////////////////////////////////////////////////////////void ThrowHolyWater::execute(Slayer* pSlayer , ObjectID_t TargetObjectID, ObjectID_t ItemObjectID, CoordInven_t InvenX, CoordInven_t InvenY) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; Assert(pSlayer != NULL); try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); Inventory* pInventory = pSlayer->getInventory(); Assert(pPlayer != NULL); Assert(pZone != NULL); Assert(pInventory != NULL); Assert(InvenX < pInventory->getWidth()); Assert(InvenY < pInventory->getHeight()); Item* pItem = pInventory->getItem(InvenX, InvenY); if (pItem == NULL) { executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; return; } ObjectID_t ObjectID = pItem->getObjectID(); Creature* pTargetCreature = NULL; // 菩哦俊 柯 芭尔, 酒捞袍 酒捞叼啊 撇府芭唱, // 己荐啊 酒聪扼搁 角菩沁促绊 焊郴霖促. if (ObjectID != ItemObjectID || pItem->getItemClass() != Item::ITEM_CLASS_HOLYWATER) { executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; return; } GCSkillToObjectOK1 _GCSkillToObjectOK1; GCThrowItemOK2 _GCThrowItemOK2; GCModifyInformation gcAttackerMI; // 粮俊辑 鸥百 农府媚甫 茫绰促. /* try { pTargetCreature = pZone->getCreature(TargetObjectID); } catch (NoSuchElementException) { pTargetCreature = NULL; } */ pTargetCreature = pZone->getCreature(TargetObjectID); // 努扼捞攫飘客狼 悼扁拳 巩力肺 牢秦, 器牢磐啊 澄老 荐 乐促. // 己荐捍 滴俺甫 楷加栏肺 带脸绰单, 刚历 带柳 己荐捍栏肺 牢秦, // 鸥百捞 磷绊 抄 第, 努扼捞攫飘啊 固贸 弊 菩哦阑 罐瘤 给窍绊, // 促矫 茄锅 己荐甫 带龙 版快, 傲 府畔窍搁 帮鄂窍促. if (pTargetCreature == NULL) { // 刚历 酒捞袍 箭磊甫 临咯林绢具 茄促. decreaseItemNum(pItem, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; return; } else { HolyWater* pHolyWater = dynamic_cast<HolyWater*>(pItem); Damage_t MinDamage = pHolyWater->getMinDamage(); Damage_t MaxDamage = pHolyWater->getMaxDamage(); Damage_t Damage = max(1, Random(MinDamage, MaxDamage)); // 老馆 瘤开捞 酒聪扼搁 单固瘤甫 0栏肺 技泼秦 霖促. // 关 何盒俊辑 checkZoneLevelToHitTarget 窃荐甫 何福扁 锭巩俊 // 咯扁辑 救傈瘤措 包访 八荤甫 且 鞘夸啊 绝促. // -- 2002-01-31 辫己刮 //if (!(pZone->getZoneLevel() & NO_SAFE_ZONE)) Damage = 0; list<Creature*> cList; cList.push_back(pSlayer); bool bHitRoll = HitRoll::isSuccess(pSlayer, pTargetCreature); bool bPK = verifyPK(pSlayer, pTargetCreature); bool bRangeCheck = verifyDistance(pSlayer, pTargetCreature, 10); bool bZoneLevelCheck = checkZoneLevelToHitTarget(pTargetCreature); // 疙吝 登菌促搁, 单固瘤甫 霖促.. // 疙吝捞 登瘤 臼酒档 己荐绰 茄锅 带瘤搁 场捞促. if (bHitRoll && bPK && bRangeCheck && bZoneLevelCheck) { // 惑措规捞 浇饭捞绢啊 酒囱 版快俊父 版氰摹甫 棵妨霖促. if (!pTargetCreature->isSlayer()) { shareAttrExp(pSlayer, Damage, 1, 1, 8, gcAttackerMI); // 牢镁 档皋篮档 棵妨霖促. // 2003. 1. 12 by bezz // Throw Holy Water 狼 SkillInfo 啊 绝促. // 弊贰辑 Create Holy Water 狼 Point 甫 敬促. SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo( SKILL_CREATE_HOLY_WATER ); increaseDomainExp( pSlayer, SKILL_DOMAIN_ENCHANT, pSkillInfo->getPoint(), gcAttackerMI ); } if (pTargetCreature->isSlayer()) { /* GCModifyInformation gcModifyInfo; Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTargetCreature); setDamage(pTargetSlayer, Damage, NULL, 0, &_GCThrowItemOK2); computeAlignmentChange(pTargetSlayer, Damage, pSlayer, &_GCThrowItemOK2, &gcAttackerMI); Player* pTargetPlayer = pTargetSlayer->getPlayer(); pTargetPlayer->sendPacket(&_GCThrowItemOK2); */ } else if (pTargetCreature->isVampire()) { Vampire* pTargetVampire = dynamic_cast<Vampire*>(pTargetCreature); setDamage(pTargetVampire, Damage, NULL, 0, &_GCThrowItemOK2); // 罐篮 单固瘤父怒狼 圈府 单固瘤甫 霖促. Silver_t silverDamage = max(1, getPercentValue(Damage, 10)); Silver_t newSilverDamage = pTargetVampire->getSilverDamage() + silverDamage; pTargetVampire->saveSilverDamage(newSilverDamage); Player* pTargetPlayer = pTargetVampire->getPlayer(); pTargetPlayer->sendPacket(&_GCThrowItemOK2); GCModifyInformation gcModifyInfo; gcModifyInfo.addShortData(MODIFY_SILVER_DAMAGE, newSilverDamage); pTargetPlayer->sendPacket(&gcModifyInfo); } else if (pTargetCreature->isOusters()) { Ousters* pTargetOusters = dynamic_cast<Ousters*>(pTargetCreature); setDamage(pTargetOusters, Damage, NULL, 0, &_GCThrowItemOK2); // 罐篮 单固瘤父怒狼 圈府 单固瘤甫 霖促. Silver_t silverDamage = max(1, getPercentValue(Damage, 10)); Silver_t newSilverDamage = pTargetOusters->getSilverDamage() + silverDamage; pTargetOusters->saveSilverDamage(newSilverDamage); Player* pTargetPlayer = pTargetOusters->getPlayer(); pTargetPlayer->sendPacket(&_GCThrowItemOK2); GCModifyInformation gcModifyInfo; gcModifyInfo.addShortData(MODIFY_SILVER_DAMAGE, newSilverDamage); pTargetPlayer->sendPacket(&gcModifyInfo); } else if (pTargetCreature->isMonster()) { Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature); setDamage(pTargetMonster, Damage, pSlayer, getSkillType(), NULL, NULL); Silver_t silverDamage = max(1, getPercentValue(Damage, 10)); Silver_t newSilverDamage = pTargetMonster->getSilverDamage() + silverDamage; pTargetMonster->setSilverDamage(newSilverDamage); } cList.push_back(pTargetCreature); // 林函 荤恩甸俊霸 OK3 Packet阑 焊辰促. GCThrowItemOK3 _GCThrowItemOK3; _GCThrowItemOK3.setObjectID(pSlayer->getObjectID()); _GCThrowItemOK3.setTargetObjectID(TargetObjectID); pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &_GCThrowItemOK3, cList); // 带柳 荤恩俊霸 OK Packet阑 焊辰促. GCThrowItemOK1 _GCThrowItemOK1; _GCThrowItemOK1.setObjectID(TargetObjectID); pPlayer->sendPacket(&_GCThrowItemOK1); pPlayer->sendPacket(&gcAttackerMI); } else // 己荐 带瘤扁俊 角菩沁阑 版快... { executeSkillFailNormal(pSlayer, getSkillType(), pTargetCreature); } // 嘎电 嘎瘤 臼疽电 己荐狼 箭磊绰 临咯林绢具 茄促. decreaseItemNum(pItem, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } } catch(Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}ThrowHolyWater g_ThrowHolyWater;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -