📄 restore.cpp
字号:
_GCSkillToObjectOK1.setCEffectID(CEffectID); _GCSkillToObjectOK1.setTargetObjectID(TargetObjectID); _GCSkillToObjectOK1.setDuration(0); pPlayer->sendPacket(&_GCSkillToObjectOK1); GCDeleteObject _GCDeleteObject; _GCDeleteObject.setObjectID( TargetObjectID ); pZone->broadcastPacket(x, y, &_GCDeleteObject, pNewSlayer); pZone->broadcastPacket(x, y, &_GCMorphSlayer2, pNewSlayer); pNewSlayer->tinysave("Race='SLAYER'"); SAFE_DELETE(pFromCreature); pSkillSlot->setRunTime(0); EffectRestore* pEffectRestore = new EffectRestore(pNewSlayer); pEffectRestore->setDeadline(60*60*24*7*10); // 7老 pNewSlayer->addEffect(pEffectRestore); pNewSlayer->setFlag(Effect::EFFECT_CLASS_RESTORE); pEffectRestore->create(pNewSlayer->getName()); } else { executeSkillFailNormal(pSlayer, getSkillType(), pFromCreature); } } catch(Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// NPC 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void Restore::execute(NPC* pNPC, Creature* pFromCreature) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; Assert(pNPC != NULL); Assert(pFromCreature != NULL); try { Zone* pZone = pNPC->getZone(); Assert(pZone != NULL); // 轨颇捞绢父 扒靛副 荐啊 乐促. if (!pFromCreature->isVampire()) { //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; return; } GCMorph1 _GCMorph1; // 函脚 寸荤磊俊霸.. GCMorphSlayer2 _GCMorphSlayer2; // 函脚 备版槽甸俊霸.. //SkillType_t SkillType = SKILL_RESTORE; //bool bRangeCheck = verifyDistance(pNPC, pFromCreature, pSkillInfo->getRange()); bool bHitRoll = true; //if (bRangeCheck && bHitRoll) if (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()); pNewSlayer->load(); // load窍搁 load茄 zone俊辑 objectID甫 罐栏骨肺 促矫 汲沥茄促. by sigi. 2002.6.4 pNewSlayer->setZone(pZone); pNewSlayer->setObjectID(pFromCreature->getObjectID()); //pZone->getObjectRegistry().registerObject(pNewSlayer); 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); pNewSlayer->setXYDir(x, y, dir); // 农府媚 救狼 敲饭捞绢 器牢磐客 敲饭捞绢 救狼 农府媚 器牢磐甫 盎脚茄促. Player* pFromPlayer = pFromCreature->getPlayer(); pNewSlayer->setPlayer(pFromPlayer); GamePlayer* pFromGamePlayer = dynamic_cast<GamePlayer*>(pFromPlayer); pFromGamePlayer->setCreature(pNewSlayer); // 梆 pFromCreature 溜, 盔贰狼 轨颇捞绢 按眉绰 瘤况龙 巴捞骨肺, // PCFinder俊 甸绢啊 乐绰 蔼篮 静饭扁 蔼捞 瞪 巴捞促. // 弊矾骨肺 轨颇捞绢 器牢磐甫 瘤况林绊, 货肺款 浇饭捞绢 器牢磐甫 歹茄促. g_pPCFinder->deleteCreature(pFromCreature->getName()); g_pPCFinder->addCreature(pNewSlayer); // 辨靛 泅犁 立加 糕滚 府胶飘俊辑 昏力茄促. if ( pVampire->getGuildID() != 0 ) { Guild* pGuild = g_pGuildManager->getGuild( pVampire->getGuildID() ); if ( pGuild != NULL ) pGuild->deleteCurrentMember( pVampire->getName() ); else filelog( "GuildMissing.log", "[NoSuchGuild] GuildID : %d, Name : %s\n", (int)pVampire->getGuildID(), pVampire->getName().c_str() ); } // 牢亥配府 背眉. 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); // 敲贰弊 悸 背眉 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) { // 刚历 扁绢俊辑 昏力窍绊... if (isTwohandWeapon(pItem)) { Assert(((Vampire::WearPart)part == Vampire::WEAR_RIGHTHAND) || ((Vampire::WearPart)part==Vampire::WEAR_LEFTHAND)); Assert(pVampire->getWearItem(Vampire::WEAR_RIGHTHAND) == pVampire->getWearItem(Vampire::WEAR_LEFTHAND)); // 剧颊 酒袍. pVampire->deleteWearItem(Vampire::WEAR_RIGHTHAND); pVampire->deleteWearItem(Vampire::WEAR_LEFTHAND); } else { 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 if ( pItem->isTimeLimitItem() ) { pVampire->deleteItemByMorph( pItem ); pItem->destroy(); SAFE_DELETE( pItem ); } // 磊府啊 绝栏搁 官蹿俊 冻绢哆赴促. 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); // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { char zoneName[15]; sprintf( zoneName, "%4d%3d%3d", pZone->getZoneID(), pt.x, pt.y); remainTraceLog( pItem, pFromCreature->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP); } } else { // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pFromCreature->getName(), "GOD", ITEM_LOG_DELETE, DETAIL_DROP); } 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 if ( pItem->isTimeLimitItem() ) { pVampire->deleteItemByMorph( pItem ); pItem->destroy(); SAFE_DELETE( pItem ); } // 磊府啊 绝栏搁 官蹿俊 冻绢哆赴促. 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); // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { char zoneName[15]; sprintf( zoneName, "%4d%3d%3d", pZone->getZoneID(), pt.x, pt.y); remainTraceLog( pItem, pFromCreature->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP); } } else { // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pFromCreature->getName(), "GOD", ITEM_LOG_DELETE, DETAIL_DROP); } pItem->destroy(); SAFE_DELETE(pItem); } } } pNewSlayer->loadTimeLimitItem(); // 轨颇捞绢 啊瘤绊 乐带 捣阑 浇饭捞绢肺 颗败霖促. // 浇饭捞绢捣阑 檬扁拳茄促. //pNewSlayer->setGoldEx(pVampire->getGold()); pNewSlayer->setGoldEx(0); pNewSlayer->setStashGoldEx(0); // 胶懦 沥焊甫 傈价茄促. 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); // 鸥老 棺 粮俊辑 扁粮 轨颇捞绢甫 昏力窍绊, 货肺款 浇饭捞绢甫 歹茄促. 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); GCDeleteObject _GCDeleteObject; _GCDeleteObject.setObjectID( pFromCreature->getObjectID() ); pZone->broadcastPacket(x, y, &_GCDeleteObject, pNewSlayer); pZone->broadcastPacket(x, y, &_GCMorphSlayer2, pNewSlayer); pNewSlayer->tinysave("Race='SLAYER'"); SAFE_DELETE(pFromCreature); // 矫具 update.. pZone->updateHiddenScan(pNewSlayer); EffectRestore* pEffectRestore = new EffectRestore(pNewSlayer); pEffectRestore->setDeadline(60*60*24*7*10); // 7老 pNewSlayer->addEffect(pEffectRestore); pNewSlayer->setFlag(Effect::EFFECT_CLASS_RESTORE); pEffectRestore->create(pNewSlayer->getName()); } else { executeSkillFailNormal(pNPC, getSkillType(), pFromCreature); } } catch(Throwable & t) { executeSkillFailException(pNPC, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}Restore g_Restore;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -