📄 eatcorpse.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EatCorpse.cpp// Written by : // Description : //////////////////////////////////////////////////////////////////////////////#include "EatCorpse.h"#include "Effect.h"#include "VampireCorpse.h"#include "AlignmentManager.h"#include "PCVampireInfo3.h"#include "MonsterCorpse.h"#include "Gpackets/GCSkillToTileOK1.h"#include "Gpackets/GCSkillToTileOK2.h"#include "Gpackets/GCSkillToTileOK3.h"#include "Gpackets/GCSkillToTileOK4.h"#include "Gpackets/GCSkillToTileOK5.h"#include "Gpackets/GCSkillToTileOK6.h"#include "Gpackets/GCRemoveCorpseHead.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCDeleteObject.h"//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 鸥老 勤甸矾//////////////////////////////////////////////////////////////////////////////void EatCorpse::execute(Vampire* pVampire, ZoneCoord_t X, ZoneCoord_t Y, VampireSkillSlot* pVampireSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; Assert(pVampire != NULL); //Assert(pVampireSkillSlot != NULL); try { Player* pPlayer = pVampire->getPlayer(); Zone* pZone = pVampire->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); GCSkillToTileOK1 _GCSkillToTileOK1; GCSkillToTileOK2 _GCSkillToTileOK2; GCSkillToTileOK3 _GCSkillToTileOK3; GCSkillToTileOK4 _GCSkillToTileOK4; GCSkillToTileOK5 _GCSkillToTileOK5; GCSkillToTileOK6 _GCSkillToTileOK6; Item* pItem = NULL; //MonsterCorpse* pCorpse = NULL; bool bRangeCheck = verifyDistance(pVampire, X, Y, 1); VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); if (rect.ptInRect(X, Y)) { Tile& tile = pZone->getTile(X, Y); if (tile.hasItem()) pItem = tile.getItem(); } bool bEatableCorpse = false; if ( pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_CORPSE && pItem->getItemType() == MONSTER_CORPSE ) { MonsterCorpse* pCorpse = dynamic_cast<MonsterCorpse*>(pItem); Assert( pCorpse != NULL ); // 己拱焊包窃捞 酒聪绢具 茄促. // 农府胶付胶 飘府啊 酒聪绢具 茄促. // 己窜捞 酒聪绢具 茄促. if ( !pCorpse->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE) && !pCorpse->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE) && pCorpse->getMonsterType() != 482 && pCorpse->getMonsterType() != 650 && !pCorpse->isShrine() ) { bEatableCorpse = true; } } if (bRangeCheck && bEatableCorpse ) { Corpse* pCorpse = dynamic_cast<Corpse*>(pItem); Assert(pCorpse != NULL); // 轨颇捞绢 矫眉捞绊, 己氢捞 Evil 捞扼搁 矫眉甫 冈绰 巴捞 酒聪扼, 酒捞袍阑 风泼 茄促. if (pCorpse->getItemType() == VAMPIRE_CORPSE) { PCVampireInfo3 & rPCVampireInfo3 = dynamic_cast<VampireCorpse*>(pCorpse)->getVampireInfo(); if (g_pAlignmentManager->getAlignmentType(rPCVampireInfo3.getAlignment()) < NEUTRAL) { ItemNum_t ItemCount = pCorpse->getTreasureCount(); // 矫眉 救俊 甸绢乐绰 酒捞袍阑 葛炼府 促 猾促. for(int i = 0; i < ItemCount ; i++) { Item* pTreasure = pCorpse->getTreasure(); if (pTreasure != NULL) { (pZone->getObjectRegistry()).registerObject(pTreasure); TPOINT pt = pZone->addItem(pTreasure, X, Y); if (pt.x != -1) { if (pTreasure->getItemClass() == Item::ITEM_CLASS_SKULL && pItem->getItemType() == MONSTER_CORPSE) { GCRemoveCorpseHead _GCRemoveCorpseHead; _GCRemoveCorpseHead.setObjectID(pItem->getObjectID()); pZone->broadcastPacket(pt.x, pt.y, &_GCRemoveCorpseHead); } //cout << "Begin Create" << endl; pTreasure->create("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); //cout << "End Create" << endl; } else { SAFE_DELETE(pTreasure); } } } } } int RemainMP = max((int)pVampire->getHP(ATTR_MAX), (int)pVampire->getHP(ATTR_CURRENT) + 10); pVampire->setHP(RemainMP , ATTR_CURRENT); Range_t Range = 1; // 亲惑 1捞促. ZoneCoord_t myX = pVampire->getX(); ZoneCoord_t myY = pVampire->getY(); _GCSkillToTileOK1.addShortData(MODIFY_CURRENT_HP , RemainMP); _GCSkillToTileOK1.setSkillType(SKILL_EAT_CORPSE); _GCSkillToTileOK1.setCEffectID(CEffectID); _GCSkillToTileOK1.setX(X); _GCSkillToTileOK1.setY(Y); _GCSkillToTileOK1.setDuration(0); _GCSkillToTileOK1.setRange(Range); _GCSkillToTileOK3.setObjectID(pVampire->getObjectID()); _GCSkillToTileOK3.setSkillType(SKILL_EAT_CORPSE); _GCSkillToTileOK3.setX(X); _GCSkillToTileOK3.setY(Y); _GCSkillToTileOK4.setSkillType(SKILL_EAT_CORPSE); _GCSkillToTileOK4.setX(X); _GCSkillToTileOK4.setY(Y); _GCSkillToTileOK4.setDuration(0); _GCSkillToTileOK4.setRange(Range); _GCSkillToTileOK5.setObjectID(pVampire->getObjectID()); _GCSkillToTileOK5.setSkillType(SKILL_EAT_CORPSE); _GCSkillToTileOK5.setX(X); _GCSkillToTileOK5.setY(Y); _GCSkillToTileOK5.setDuration(0); _GCSkillToTileOK5.setRange(Range); // Send Packet pPlayer->sendPacket(&_GCSkillToTileOK1); list<Creature*> cList; cList.push_back(pVampire); cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList); pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK3 , cList); pZone->broadcastPacket(X, Y, &_GCSkillToTileOK4 , cList); // 葛电 沥府累诀捞 场捞 车栏搁 矫眉甫 昏力茄促. // 荤扼瘤绰 菩哦阑 朝赴促. GCDeleteObject gcDO; gcDO.setObjectID(pCorpse->getObjectID()); pZone->broadcastPacket(X, Y, &gcDO); // 粮俊辑 瘤款促. pZone->deleteItem(pCorpse , X , Y); // 粮救俊辑 角力利栏肺 器牢磐甫 绝局瘤绰 臼栏骨肺 器牢磐甫 昏力 矫难 拎具 茄促. SAFE_DELETE(pCorpse); } else { executeSkillFailException(pVampire, getSkillType()); } } catch (Throwable & t) { executeSkillFailException(pVampire, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}EatCorpse g_EatCorpse;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -