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

📄 actiongiveeventitem.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
////////////////////////////////////////////////////////////////////////////////// Filename    : ActionGiveEventItem.cpp// Written By  : 厘全芒// Description :////////////////////////////////////////////////////////////////////////////////#include "ActionGiveEventItem.h"#include "PlayerCreature.h"#include "GamePlayer.h"#include "Item.h"#include "ItemUtil.h"#include "OptionInfo.h"#include "Inventory.h"#include "Zone.h"#include "ItemFactoryManager.h"#include "DB.h"#include "Thread.h"#include "Slayer.h"#include "Vampire.h"#include "FlagSet.h"#include <list>#include "PacketUtil.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCNPCResponse.h"#include "VariableManager.h"////////////////////////////////////////////////////////////////////////////////// ActionGiveEventItem////////////////////////////////////////////////////////////////////////////////ActionGiveEventItem::ActionGiveEventItem(): m_pLuaState(NULL), m_pLuaSlayerItem(NULL), m_pLuaVampireItem(NULL){	m_pLuaState = new LuaState;	m_pLuaState->init();	m_pLuaSlayerItem = new LuaTradeEventSlayerItem(m_pLuaState);	m_pLuaVampireItem = new LuaTradeEventVampireItem(m_pLuaState);}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////ActionGiveEventItem::~ActionGiveEventItem(){    __BEGIN_TRY	SAFE_DELETE(m_pLuaState);	SAFE_DELETE(m_pLuaSlayerItem);	SAFE_DELETE(m_pLuaVampireItem);	__END_CATCH}//////////////////////////////////////////////////////////////////////////////////  load////////////////////////////////////////////////////////////////////////////////void ActionGiveEventItem::load()    throw (Error){    __BEGIN_TRY		Assert(m_pLuaState!=NULL);	int result = m_pLuaState->dofile(m_CommonFilename);	LuaState::logError(result);    __END_CATCH}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionGiveEventItem::read(PropertyBuffer & propertyBuffer)    throw (Error){    __BEGIN_TRY	try	{		// read script id		m_FlagSetType = (FlagSetType)propertyBuffer.getPropertyInt("FlagSetType");		m_CommonFilename = propertyBuffer.getProperty("CommonFilename");		m_SlayerFilename = propertyBuffer.getProperty("SlayerFilename");		m_VampireFilename = propertyBuffer.getProperty("VampireFilename");		load();	}	catch (NoSuchElementException & nsee)	{		throw Error(nsee.toString());	}	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// 咀记阑 角青茄促.////////////////////////////////////////////////////////////////////////////////void ActionGiveEventItem::execute(Creature * pCreature1 , Creature * pCreature2) 	throw (Error){	__BEGIN_TRY	Assert(pCreature1 != NULL);	Assert(pCreature2 != NULL);	Assert(pCreature1->isNPC());	Assert(pCreature2->isPC());	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature2);	Assert(pPC != NULL);	Player* pPlayer = pPC->getPlayer();	Assert(pPlayer != NULL);	Inventory* pInventory = pPC->getInventory();	Assert( pInventory != NULL );	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	FlagSet* pFlagSet = pPC->getFlagSet();	Item::ItemClass ItemClass;	ItemType_t		ItemType;	OptionType_t	OptionType;	OptionType_t	OptionType2;	Item*			pItem;	// 捞亥飘 柳青 扁埃捞 酒囱 版快	if (!g_pVariableManager->isActiveGiveEventItem())	{		GCNPCResponse response;		response.setCode( NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL_NOW );		pPlayer->sendPacket( &response );		GCNPCResponse quit;		quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE );		pPlayer->sendPacket( &quit );		return;	}	// 捞 蔼苞 包访秦辑	// 某腐磐 积己矫俊 FlagSet阑 官层拎具茄促. (default ON 栏肺)	// 捞固 急拱阑 背券秦 艾促搁	if ( pFlagSet->isOn( m_FlagSetType ) )	{		GCNPCResponse response;		response.setCode( NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL );		pPlayer->sendPacket( &response );		GCNPCResponse quit;		quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE );		pPlayer->sendPacket( &quit );		return;	}	LuaSelectItem*	pLuaSelectItem = NULL;	string			luaFileName;	if ( pPC->isSlayer() )	{		// 风酒俊 浇饭捞绢 瓷仿摹狼 钦阑 set茄促.		Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);		Assert( pSlayer != NULL );		Attr_t sum = pSlayer->getSTR( ATTR_BASIC )				   + pSlayer->getDEX( ATTR_BASIC )				   + pSlayer->getINT( ATTR_BASIC );		m_pLuaSlayerItem->setSum(sum);		pLuaSelectItem = m_pLuaSlayerItem;		luaFileName = m_SlayerFilename;	}	else if ( pPC->isVampire() )	{		// 风酒俊 轨颇捞绢狼 饭骇阑 set茄促.		Vampire* pVampire = dynamic_cast<Vampire*>(pPC);		Assert( pVampire != NULL );		int level = pVampire->getLevel();		m_pLuaVampireItem->setLevel(level);		pLuaSelectItem = m_pLuaVampireItem;		luaFileName = m_VampireFilename;	}	//--------------------------------------------------------	// 加档 眉农甫 困秦辑 1000锅 倒妨焊绰 内靛	// 搬苞绰.. 0.07檬 沥档 唱吭促. 皑耽~ -_-;	/*	Timeval beforeTime;	getCurrentTime(beforeTime);	for (int i=0; i<1000; i++)	{		// 风酒狼 拌魂 搬苞甫 罐酒 酒捞袍阑 积己茄促.		pLuaSelectItem->prepare();				int result = pLuaSelectItem->executeFile( luaFileName );		LuaState::logError(result);		pLuaSelectItem->clear();	}	Timeval afterTime;	getCurrentTime(afterTime);	cout << "luaExecute time before : " << beforeTime.tv_sec  << "." << beforeTime.tv_usec << endl;	cout << "luaExecute time after  : " << afterTime.tv_sec  << "." << afterTime.tv_usec << endl;	*/	//--------------------------------------------------------	// 风酒狼 拌魂 搬苞甫 罐酒 酒捞袍阑 积己茄促.	pLuaSelectItem->prepare();		int result = pLuaSelectItem->executeFile( luaFileName );	LuaState::logError(result);	ItemClass 	= pLuaSelectItem->getItemClass();	ItemType  	= pLuaSelectItem->getItemType();	OptionType	= pLuaSelectItem->getOptionType();	OptionType2	= pLuaSelectItem->getOptionType2();	pLuaSelectItem->clear();	if( ItemClass >= Item::ITEM_CLASS_MAX )	//||  ItemType  >= ITEM_TYPE_MAX || ItemType  < 0	//	|| OptionType == 0)	{		filelog( "GiveEventItemError.txt", "[ ItemInfo Error ] : ItemClass = %d , ItemType = %d , OptionType = %d", ItemClass, ItemType, OptionType );		GCNPCResponse quit;		quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE );		pPlayer->sendPacket( &quit );		return;	}	// 急拱(Item)阑 父电促.	list<OptionType_t> optionTypeList;	if ( OptionType != 0 ) optionTypeList.push_back( OptionType );	if ( OptionType2 != 0 ) optionTypeList.push_back( OptionType2 );	pItem = g_pItemFactoryManager->createItem( ItemClass, ItemType, optionTypeList );	Assert( pItem != NULL );	_TPOINT pt;	if (!pInventory->getEmptySlot(pItem, pt))	{		SAFE_DELETE(pItem);		GCNPCResponse response;		response.setCode( NPC_RESPONSE_NO_EMPTY_SLOT );		pPlayer->sendPacket( &response );		GCNPCResponse quit;		quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE );		pPlayer->sendPacket( &quit );		return;	}	 	CoordInven_t X = pt.x;	CoordInven_t Y = pt.y;	// 急拱阑 牢亥配府俊 眠啊茄促.	pZone->getObjectRegistry().registerObject( pItem );	pInventory->addItem( X, Y, pItem );	pItem->create( pPC->getName(), STORAGE_INVENTORY, 0, X, Y );	// ItemTraceLog 甫 巢变促	if ( pItem != NULL && pItem->isTraceItem() )	{		remainTraceLog( pItem, pCreature1->getName(), pCreature2->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC);	}	// 努扼捞攫飘俊 急拱捞 眠啊登菌澜阑 舅赴促.	GCCreateItem gcCreateItem;	makeGCCreateItem( &gcCreateItem, pItem, X, Y );	pPlayer->sendPacket(&gcCreateItem);	// Flag阑 囊促.	pFlagSet->turnOn( m_FlagSetType );	// Flag阑 历厘茄促.	pFlagSet->save( pPC->getName() );	// 酒捞袍 背券捞 捞风绢 脸促绊 努扼捞攫飘俊 舅赴促.	GCNPCResponse response;	response.setCode( NPC_RESPONSE_GIVE_EVENT_ITEM_OK );	pPlayer->sendPacket( &response );	GCNPCResponse quit;	quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE );	pPlayer->sendPacket( &quit );	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ActionGiveEventItem::toString () const 	throw (){	__BEGIN_TRY	StringStream msg;	msg << "ActionGiveEventItem("	    << ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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