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

📄 restore.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 "GuildManager.h"#include "Guild.h"#include "EffectBloodDrain.h"#include "EffectRestore.h"#include "ItemUtil.h"#include "RelicUtil.h"#include "SharedServerManager.h"#include "Gpackets/GCSkillToObjectOK1.h"#include "Gpackets/GCSkillToSelfOK1.h"#include "Gpackets/GCMorph1.h"#include "Gpackets/GCMorphSlayer2.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCDeleteObject.h"#include "Gpackets/GSGuildMemberLogOn.h"#include <stdio.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;	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)		{			dropRelicToZone(pFromCreature);			dropFlagToZone(pFromCreature);			//////////////////////////////////////////////////////////////////////			// 阿辆 粮 饭骇 沥焊甫 昏力秦具 茄促.			//////////////////////////////////////////////////////////////////////			// 颇萍 檬措 吝捞扼搁 沥焊甫 昏力秦 霖促.			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);			// load窍搁 load茄 zone俊辑 objectID甫 罐栏骨肺 促矫 汲沥茄促. by sigi. 2002.6.4			pNewSlayer->load();			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);			// 梆 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() );					GSGuildMemberLogOn gsGuildMemberLogOn;					gsGuildMemberLogOn.setGuildID( pGuild->getID() );					gsGuildMemberLogOn.setName( pVampire->getName() );					gsGuildMemberLogOn.setLogOn( false );					g_pSharedServerManager->sendPacket( &gsGuildMemberLogOn );					Statement* pStmt = NULL;					// 叼厚俊 诀单捞飘 茄促.					BEGIN_DB					{						pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();						pStmt->executeQuery( "UPDATE GuildMember SET LogOn = 0 WHERE Name = '%s'", pVampire->getName().c_str() );					}					END_DB(pStmt)				}				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);			/*			// 啊厚瘤 背眉			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)				{					// 刚历 扁绢俊辑 昏力窍绊...					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();			// 轨颇捞绢 啊瘤绊 乐带 捣阑 浇饭捞绢肺 颗败霖促.			// 轨颇捞绢啊 啊瘤绊 乐带 捣篮 浇饭捞绢肺 颗败啊瘤 臼绰促.			// 货肺款 浇饭捞绢狼 捣阑 0栏肺 技泼茄促.			pNewSlayer->setGoldEx(0);			pNewSlayer->setStashGoldEx(0);			// 胶懦 沥焊甫 傈价茄促.			pNewSlayer->sendSlayerSkillInfo();						// 鸥老 棺 粮俊辑 扁粮 轨颇捞绢甫 昏力窍绊, 货肺款 浇饭捞绢甫 歹茄促.			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);			// 矫具 update..			pZone->updateHiddenScan(pNewSlayer);					_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);			_GCSkillToObjectOK1.setSkillType(SkillType);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -