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

📄 eventmorph.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : EventMorph.cpp// Written by  : Reiot// Description : //////////////////////////////////////////////////////////////////////////////#include "EventMorph.h"#include "GamePlayer.h"#include "PCFinder.h"#include "Vampire.h"#include "Slayer.h"#include "ItemUtil.h"#include "Zone.h"#include "ZoneInfoManager.h"#include "ZoneGroupManager.h"#include "IncomingPlayerManager.h"#include "ZonePlayerManager.h"#include "TimeManager.h"#include <fstream.h>#include "LogClient.h"#include "PacketUtil.h"#include "Party.h"#include "TradeManager.h"#include "GuildManager.h"#include "Guild.h"#include "ZoneUtil.h"#include "RelicUtil.h"#include "SharedServerManager.h"#include "DB.h"#include "CreatureUtil.h"#include "Gpackets/GCUpdateInfo.h"#include "Gpackets/GCMorph1.h"#include "Gpackets/GCMorphVampire2.h"#include "Gpackets/GSGuildMemberLogOn.h"#include <stdio.h>//////////////////////////////////////////////////////////////////////////////// class EventMorph member methods//////////////////////////////////////////////////////////////////////////////EventMorph::EventMorph(GamePlayer* pGamePlayer)	throw()	: Event(pGamePlayer){	__BEGIN_TRY	__END_CATCH}EventMorph::~EventMorph()	throw(){	__BEGIN_TRY	__END_CATCH}void EventMorph::activate () 	throw (Error){	__BEGIN_TRY	__BEGIN_DEBUG	Assert(m_pGamePlayer != NULL);	Creature* pFromCreature = m_pGamePlayer->getCreature();	Assert(pFromCreature->isSlayer());	if (m_pGamePlayer->getPlayerStatus() != GPS_NORMAL)	{		// 敲饭捞绢狼 惑怕啊 WAITING_FOR_CG_READY牢单, morph啊 		// activate登绢 关狼 粮俊辑 农府媚甫 瘤快绰 何盒俊辑 俊矾啊 throw登绢		// 辑滚啊 磷绰 滚弊啊 乐菌促. 沥犬洒 绢痘霸 秦辑 CG_READY惑怕俊辑		// 捞亥飘啊 activate登绰瘤绰 葛福摆栏唱, GamePlayer狼 		// EventManager 磊眉甫 GPS_NORMAL老 锭父 倒酒啊霸 窍搁,		// Resurrect啊 登瘤 臼栏聪 林狼窍辨 官鄂促. 搬惫 GamePlayer 郴何俊辑		// 眉农甫 窍扁啊 帮鄂窍扁 锭巩俊 捞 何盒俊辑, 贸府茄促.		StringStream msg;		msg << "EventMorph::activate() : GamePlayer狼 惑怕啊 GPS_NORMAL捞 酒凑聪促."			<< "PlayerID[" << m_pGamePlayer->getID() << "]"			<< "CreatureName[" << pFromCreature->getName() << "]";		filelog("EventMorphError.log", "%s", msg.toString().c_str());		return;	}	pFromCreature->removeFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);	Zone* pZone = pFromCreature->getZone();	// 父老 Restore 捞棋飘啊 吧妨乐促搁 函脚捞 登瘤 臼绰促.	if (pFromCreature->isFlag(Effect::EFFECT_CLASS_RESTORE))	{		return;	}	dropRelicToZone( pFromCreature );	dropFlagToZone( pFromCreature );	dropSweeperToZone( pFromCreature );	//////////////////////////////////////////////////////////////////////	// 阿辆 粮 饭骇 沥焊甫 昏力秦具 茄促.	//////////////////////////////////////////////////////////////////////		// 颇萍 檬措 吝捞扼搁 沥焊甫 昏力秦 霖促.	PartyInviteInfoManager* pPIIM = pZone->getPartyInviteInfoManager();	Assert(pPIIM != NULL);	pPIIM->cancelInvite(pFromCreature);	// 颇萍 包访 沥焊甫 昏力秦 霖促.	uint 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);	//////////////////////////////////////////////////////////////////////	//////////////////////////////////////////////////////////////////////	Vampire* pVampire = new Vampire();		GCMorph1 gcEventMorph1;	// 函脚 寸荤磊俊霸..	GCMorphVampire2 gcEventMorphVampire2;	// 函脚 备版槽甸俊霸..			pVampire->setName(pFromCreature->getName());	ObjectID_t fromObjectID = pFromCreature->getObjectID();	pVampire->setObjectID(fromObjectID);	Player* pPlayer = pFromCreature->getPlayer();	dynamic_cast<GamePlayer*>(pPlayer)->setCreature(pVampire);	pVampire->setPlayer(pPlayer);	pVampire->setZone(pZone);	pVampire->load();	Coord_t x = pFromCreature->getX(), y = pFromCreature->getY();	Dir_t dir = pFromCreature->getDir();	pVampire->setXYDir(x, y, dir);	pVampire->setMoveMode(pFromCreature->getMoveMode());		// slayer to vampire	Slayer* pSlayer = dynamic_cast<Slayer*>(pFromCreature);	// 轨颇捞绢肺 函脚且锭 Creature Pointer啊 崔扼瘤骨肺...	// 盔贰 殿废 登绢乐带 器牢磐绰 俺啊 等促...	// 蝶扼辑 货肺款 Creature Pointer甫 殿废秦拎具 茄促.	g_pPCFinder->deleteCreature(pFromCreature->getName());	g_pPCFinder->addCreature(pVampire);	// 辨靛 泅犁 立加 府胶飘俊辑 昏力茄促.	if ( pSlayer->getGuildID() != 99 )	{		Guild* pGuild = g_pGuildManager->getGuild( pSlayer->getGuildID() );		if ( pGuild != NULL )		{			pGuild->deleteCurrentMember( pSlayer->getName() );			GSGuildMemberLogOn gsGuildMemberLogOn;			gsGuildMemberLogOn.setGuildID( pGuild->getID() );			gsGuildMemberLogOn.setName( pSlayer->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'", pSlayer->getName().c_str() );			}			END_DB(pStmt)		}		else			filelog( "GuildMissing.log", "[NoSuchGuild] GuildID : %d, Name : %s\n", (int)pSlayer->getGuildID(), pSlayer->getName().c_str() );	}	// 牢亥配府 背眉.	Inventory* pInventory = pSlayer->getInventory();	pVampire->setInventory(pInventory);	pSlayer->setInventory(NULL);	// 焊包窃 背眉	pVampire->deleteStash();                 // 捞傈 按眉甫 瘤况林绊...	pVampire->setStash(pSlayer->getStash()); // 浇饭捞绢 吧肺 官槽 促澜俊	pVampire->setStashNum(pSlayer->getStashNum());	pVampire->setStashStatus(false);         // OID 且寸 惑怕甫 false肺...	pSlayer->setStash(NULL);                 // 器牢磐 俊矾甫 阜扁 困秦 浇饭捞绢 巴篮 NULL肺...	/*	// 啊厚瘤 背眉	while (true)	{		Item* pGarbage = pSlayer->popItemFromGarbage();		// 歹 捞惑 绝促搁 宏饭捞农...		if (pGarbage == NULL) break;		pVampire->addItemToGarbage(pGarbage);	}	*/	// 敲贰弊 悸 背眉	pVampire->deleteFlagSet();	pVampire->setFlagSet(pSlayer->getFlagSet());	pSlayer->setFlagSet(NULL);	Item* pItem = NULL;	_TPOINT point;	// 扁绢俊辑 牢亥配府肺..    for(int part = 0; part < (int)Slayer::WEAR_MAX; part++)   	{       	pItem = pSlayer->getWearItem((Slayer::WearPart)part);        if (pItem)   	    {			if (isTwohandWeapon(pItem))            {				Assert(((Slayer::WearPart)part == Slayer::WEAR_RIGHTHAND) || ((Slayer::WearPart)part == Slayer::WEAR_LEFTHAND));				Assert(pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND) == pSlayer->getWearItem(Slayer::WEAR_LEFTHAND));				// 剧颊 酒袍.				pSlayer->deleteWearItem(Slayer::WEAR_RIGHTHAND);				pSlayer->deleteWearItem(Slayer::WEAR_LEFTHAND);            }   	        else       	    {				pSlayer->deleteWearItem((Slayer::WearPart)part);            }				if (pInventory->getEmptySlot(pItem, point))       	    {				// 牢亥配府俊 咯蜡 浇吩捞 乐栏搁..				// 牢亥配府俊 眠啊				pInventory->addItem(point.x, point.y, pItem);				pItem->save(pVampire->getName(), STORAGE_INVENTORY, 0, point.x, point.y);   	        }       	    else if ( pItem->isTimeLimitItem() )			{				pSlayer->deleteItemByMorph( pItem );				pItem->destroy();				SAFE_DELETE(pItem);			}			else 			{				TPOINT pt;				ZoneCoord_t ZoneX = pSlayer->getX();				ZoneCoord_t ZoneY = pSlayer->getY();				// 粮栏肺 谎赴促.   	            pt = pZone->addItem(pItem, ZoneX, ZoneY);				if (pt.x != -1) 				{					pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x , pt.y);					log(LOG_DROP_ITEM_MORPH, pSlayer->getName(), "", pItem->toString());					// 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);					}

⌨️ 快捷键说明

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