⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 restore2.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// 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 + -