📄 restore2.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : Restore.cpp// Written by : elca@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "Restore.h"#include "PCFinder.h"#include "NPC.h"#include "DB.h"#include "Party.h"#include "TradeManager.h"#include "EffectBloodDrain.h"#include "EffectRestore.h"#include "Gpackets/GCSkillToObjectOK1.h"#include "Gpackets/GCSkillToSelfOK1.h"#include "Gpackets/GCMorph1.h"#include "Gpackets/GCMorphSlayer2.h"#include "Gpackets/GCRemoveEffect.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void Restore::execute(Slayer* pSlayer, ObjectID_t TargetObjectID, SkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; cout << "Restore2 Start" << endl; Assert(pSlayer != NULL); Assert(pSkillSlot != NULL); try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); Creature* pFromCreature = pZone->getCreature(TargetObjectID); // 轨颇捞绢父 扒靛副 荐啊 乐促. // NoSuch力芭. by sigi. 2002.5.2 if (pFromCreature==NULL || !pFromCreature->isVampire()) { executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; return; } GCSkillToObjectOK1 _GCSkillToObjectOK1; // 胶懦 敬 逞俊霸... GCMorph1 _GCMorph1; // 函脚 寸荤磊俊霸.. GCMorphSlayer2 _GCMorphSlayer2; // 函脚 备版槽甸俊霸.. SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); bool bRangeCheck = verifyDistance(pSlayer, pFromCreature, pSkillInfo->getRange()); bool bHitRoll = true; if (bRangeCheck && bHitRoll) { ////////////////////////////////////////////////////////////////////// // 阿辆 粮 饭骇 沥焊甫 昏力秦具 茄促. ////////////////////////////////////////////////////////////////////// // 颇萍 檬措 吝捞扼搁 沥焊甫 昏力秦 霖促. PartyInviteInfoManager* pPIIM = pZone->getPartyInviteInfoManager(); Assert(pPIIM != NULL); pPIIM->cancelInvite(pFromCreature); // 颇萍 包访 沥焊甫 昏力秦 霖促. int PartyID = pFromCreature->getPartyID(); if (PartyID != 0) { // 刚历 肺拿俊辑 昏力窍绊... LocalPartyManager* pLPM = pZone->getLocalPartyManager(); Assert(pLPM != NULL); pLPM->deletePartyMember(PartyID, pFromCreature); // 臂肺国俊辑档 昏力秦 霖促. deleteAllPartyInfo(pFromCreature); } // 飘饭捞靛 吝捞菌促搁 飘饭捞靛 包访 沥焊甫 昏力秦霖促. TradeManager* pTM = pZone->getTradeManager(); Assert(pTM != NULL); pTM->cancelTrade(pFromCreature); ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// Slayer* pNewSlayer = new Slayer; Vampire* pVampire = dynamic_cast<Vampire*>(pFromCreature); // DB俊辑 趣矫 巢酒乐阑 瘤 葛福绰 软趋 沥焊甫 昏力秦霖促. Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); StringStream sql; sql << "DELETE FROM EffectBloodDrain WHERE OwnerID = '" + pFromCreature->getName() + "'"; pStmt->executeQuery(sql.toString()); SAFE_DELETE(pStmt); } END_DB(pStmt) pNewSlayer->setName(pFromCreature->getName()); // 农府媚 救狼 敲饭捞绢 器牢磐客 敲饭捞绢 救狼 农府媚 器牢磐甫 盎脚茄促. Player* pFromPlayer = pFromCreature->getPlayer(); pNewSlayer->setPlayer(pFromPlayer); GamePlayer* pFromGamePlayer = dynamic_cast<GamePlayer*>(pFromPlayer); pFromGamePlayer->setCreature(pNewSlayer); pNewSlayer->setZone(pZone); pNewSlayer->load(); pNewSlayer->setObjectID(pFromCreature->getObjectID()); pNewSlayer->setMoveMode(Creature::MOVE_MODE_WALKING); ZoneCoord_t x = pFromCreature->getX(); ZoneCoord_t y = pFromCreature->getY(); Dir_t dir = pFromCreature->getDir(); Tile& tile = pZone->getTile(x, y); // 梆 pFromCreature 溜, 盔贰狼 轨颇捞绢 按眉绰 瘤况龙 巴捞骨肺, // PCFinder俊 甸绢啊 乐绰 蔼篮 静饭扁 蔼捞 瞪 巴捞促. // 弊矾骨肺 轨颇捞绢 器牢磐甫 瘤况林绊, 货肺款 浇饭捞绢 器牢磐甫 歹茄促. g_pPCFinder->deleteCreature(pFromCreature->getName()); g_pPCFinder->addCreature(pNewSlayer); // 辨靛 泅犁 立加 糕滚 府胶飘俊辑 昏力茄促. if ( pVampire->getGuildID() != 0 ) g_pGuildManager->getGuild( pVampire->getGuildID() )->deleteCurrentMember( pVampire->getName() ); // 牢亥配府 背眉. Inventory* pInventory = pVampire->getInventory(); pNewSlayer->setInventory(pInventory); pVampire->setInventory(NULL); // 焊包窃 背眉 pNewSlayer->deleteStash(); pNewSlayer->setStash(pVampire->getStash()); pNewSlayer->setStashNum(pVampire->getStashNum()); pNewSlayer->setStashStatus(false); pVampire->setStash(NULL); /* // 啊厚瘤 背眉 while (true) { Item* pGarbage = pVampire->popItemFromGarbage(); // 歹 捞惑 绝促搁 宏饭捞农... if (pGarbage == NULL) break; pNewSlayer->addItemToGarbage(pGarbage); } */ // 敲贰弊 悸 背眉 pNewSlayer->deleteFlagSet(); pNewSlayer->setFlagSet(pVampire->getFlagSet()); pVampire->setFlagSet(NULL); Item* pItem = NULL; _TPOINT point; // 涝绊 乐绰 酒捞袍甸阑 牢亥配府 肚绰 官蹿栏肺 颗变促. for(int part = 0; part < (int)Vampire::VAMPIRE_WEAR_MAX; part++) { pItem = pVampire->getWearItem((Vampire::WearPart)part); if (pItem != NULL) { // 刚历 扁绢俊辑 昏力窍绊... pVampire->deleteWearItem((Vampire::WearPart)part); // 牢亥配府俊 磊府啊 乐栏搁 牢亥配府俊 歹窍绊... if (pInventory->getEmptySlot(pItem, point)) { pInventory->addItem(point.x, point.y, pItem); pItem->save(pNewSlayer->getName(), STORAGE_INVENTORY, 0, point.x, point.y); } // 磊府啊 绝栏搁 官蹿俊 冻绢哆赴促. else { ZoneCoord_t ZoneX = pVampire->getX(); ZoneCoord_t ZoneY = pVampire->getY(); TPOINT pt; pt = pZone->addItem(pItem, ZoneX , ZoneY); if (pt.x != -1) { pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); } else { pItem->destroy(); SAFE_DELETE(pItem); } } } } pItem = pVampire->getExtraInventorySlotItem(); if (pItem != NULL) { pVampire->deleteItemFromExtraInventorySlot(); // 牢亥配府俊 磊府啊 乐栏搁 牢亥配府俊 歹窍绊... if (pInventory->getEmptySlot(pItem, point)) { pInventory->addItem(point.x, point.y, pItem); pItem->save(pNewSlayer->getName(), STORAGE_INVENTORY, 0, point.x, point.y); } // 磊府啊 绝栏搁 官蹿俊 冻绢哆赴促. else { TPOINT pt; ZoneCoord_t ZoneX = pVampire->getX(); ZoneCoord_t ZoneY = pVampire->getY(); pt = pZone->addItem(pItem, ZoneX , ZoneY); if (pt.x != -1) { pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); } else { pItem->destroy(); SAFE_DELETE(pItem); } } } // 轨颇捞绢 啊瘤绊 乐带 捣阑 浇饭捞绢肺 颗败霖促. pNewSlayer->setGoldEx(pVampire->getGold()); // 胶懦 沥焊甫 傈价茄促. pNewSlayer->sendSlayerSkillInfo(); _GCMorph1.setPCInfo2(pNewSlayer->getSlayerInfo2()); _GCMorph1.setInventoryInfo(pNewSlayer->getInventoryInfo()); _GCMorph1.setGearInfo(pNewSlayer->getGearInfo()); _GCMorph1.setExtraInfo(pNewSlayer->getExtraInfo()); _GCMorphSlayer2.setSlayerInfo(pNewSlayer->getSlayerInfo3()); pFromPlayer->sendPacket(&_GCMorph1); //pFromGamePlayer->deleteEvent(Event::EVENT_CLASS_REGENERATION); pZone->broadcastPacket(x, y, &_GCMorphSlayer2, pNewSlayer); // 鸥老 棺 粮俊辑 扁粮 轨颇捞绢甫 昏力窍绊, 货肺款 浇饭捞绢甫 歹茄促. tile.deleteCreature(pFromCreature->getObjectID()); pZone->deletePC(pFromCreature); TPOINT pt = findSuitablePosition(pZone, x, y, Creature::MOVE_MODE_WALKING); Tile& newtile = pZone->getTile(pt.x, pt.y); newtile.addCreature(pNewSlayer); pNewSlayer->setXYDir(pt.x, pt.y, dir); pZone->addPC(pNewSlayer); pNewSlayer->tinysave("Race='SLAYER'"); SAFE_DELETE(pFromCreature); // 矫具 update.. pZone->updateHiddenScan(pNewSlayer); _GCSkillToObjectOK1.setSkillType(SkillType); _GCSkillToObjectOK1.setCEffectID(CEffectID); _GCSkillToObjectOK1.setTargetObjectID(TargetObjectID); _GCSkillToObjectOK1.setDuration(0); pPlayer->sendPacket(&_GCSkillToObjectOK1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -