actiongivespecialeventitem.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 320 行

CPP
320
字号
////////////////////////////////////////////////////////////////////////////////// Filename    : ActionGiveSpecialEventItem.cpp// Written By  : // Description :////////////////////////////////////////////////////////////////////////////////#include "ActionGiveSpecialEventItem.h"#include "PlayerCreature.h"#include "GamePlayer.h"#include "Item.h"#include "ItemUtil.h"#include "Inventory.h"#include "Zone.h"#include "ItemFactoryManager.h"#include "DB.h"#include "Thread.h"#include "StringPool.h"#include <list>#include <stdio.h>#include "item/Key.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCSystemMessage.h"////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionGiveSpecialEventItem::read (PropertyBuffer & propertyBuffer)    throw (Error){    __BEGIN_TRY    __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 咀记阑 角青茄促.////////////////////////////////////////////////////////////////////////////////void ActionGiveSpecialEventItem::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);	// 刚历 努扼捞攫飘甫 困秦 GCNPCResponse甫 焊郴霖促.	GCNPCResponse okpkt;	pPlayer->sendPacket(&okpkt);	Statement* pStmt   = NULL;	Result*    pResult = NULL;	int        count   = -1;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection( (int)Thread::self() )->createStatement();		pResult = pStmt->executeQuery("SELECT Count FROM SpecialEvent WHERE Name='%s'", pPlayer->getID().c_str());		// 秦寸 肺快啊 绝促绰 富篮 捞 荤恩捞 捞亥飘 酒捞袍阑 罐阑 磊拜捞 绝促绰 巴阑 富茄促.		if (pResult->getRowCount() == 0)		{//			StringStream buf;//			buf << pPlayer->getID() << " 丛篮 乔狼 傈里 捞亥飘俊 曼啊窍瘤 臼栏继嚼聪促.";			char buf[100];			sprintf( buf, g_pStringPool->c_str( STRID_DO_NOT_JOIN_BLOOD_WAR_EVENT ),							pPlayer->getID().c_str() );			GCSystemMessage gcSystemMessage;			gcSystemMessage.setMessage(buf);			pPlayer->sendPacket(&gcSystemMessage);			SAFE_DELETE(pStmt);			return;		}		pResult->next();		count = pResult->getInt(1);				SAFE_DELETE(pStmt);	}	END_DB(pStmt)	// 墨款飘啊 0捞窍扼绰 富篮 捞 荤恩捞 捞固 酒捞袍阑 罐疽促绰 巴阑 狼固茄促.	if (count <= 0)	{//		StringStream buf;//		buf << pPlayer->getID() << " 丛篮 捞固 乔狼 傈里 捞亥飘 包访 酒捞袍阑 罐栏继嚼聪促.";		char buf[100];		sprintf( buf, g_pStringPool->c_str( STRID_ALREADY_TAKE_BLOOD_WAR_EVET_ITEM ),						pPlayer->getID().c_str() );		GCSystemMessage gcSystemMessage;		gcSystemMessage.setMessage(buf);		pPlayer->sendPacket(&gcSystemMessage);		return;	}	Zone* pZone = pPC->getZone();	ObjectRegistry& OR = pZone->getObjectRegistry();	Inventory* pInventory = pPC->getInventory();	TPOINT pt;	GCCreateItem gcCreateItem;	StringStream msg;	msg << "PlayerID[" << pPlayer->getID() << "], " << "CreatureName[" << pPC->getName() << "]\n";	if (pPC->isSlayer())	{		list<OptionType_t> option50;	option50.push_back( 50 );		list<OptionType_t> optionNULL;		Item* pItem1      = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_BRACELET, 3, option50);		Item* pItem2      = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_BRACELET, 3, option50);		Item* pMotorcycle = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_MOTORCYCLE, 0, optionNULL);		Item* pKeyItem    = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_KEY, 2, optionNULL);		Key* pKey = dynamic_cast<Key*>(pKeyItem);		// OID甫 殿废罐绰促.		OR.registerObject(pItem1);		OR.registerObject(pItem2);		OR.registerObject(pMotorcycle);		OR.registerObject(pKey);		pMotorcycle->create(pPC->getName(), STORAGE_ZONE, 11, 50, 50);		pKey->setTarget(pMotorcycle->getItemID());		list<Item*> ItemList;		ItemList.push_back(pItem1);		ItemList.push_back(pItem2);		ItemList.push_back(pKey);		list<Item*>::iterator itr = ItemList.begin();		for (; itr != ItemList.end(); itr++)		{			Item* pItem = *itr;			if (pInventory->addItem(pItem, pt))			{				pItem->create(pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y);				pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y);				gcCreateItem.setObjectID(pItem->getObjectID());				gcCreateItem.setItemClass(pItem->getItemClass());				gcCreateItem.setItemType(pItem->getItemType());				gcCreateItem.setOptionType(pItem->getOptionTypeList());				gcCreateItem.setDurability(pItem->getDurability());				gcCreateItem.setSilver(pItem->getSilver());				gcCreateItem.setItemNum(pItem->getNum());				gcCreateItem.setInvenX(pt.x);				gcCreateItem.setInvenY(pt.y);				pPlayer->sendPacket(&gcCreateItem);				msg << "Inventory Adding Succeeded : " << pItem->toString() << "\n";				// ItemTraceLog 甫 巢变促				if ( pItem != NULL && pItem->isTraceItem() )				{					remainTraceLog( pItem, pCreature1->getName(), pCreature2->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC);				}			}			else			{				// 磊府啊 绝促搁 粮俊促 冻绢哆赴促.				pt = pZone->addItem(pItem, pPC->getX(), pPC->getY());				if (pt.x != -1)				{					pItem->create("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y);					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, pCreature1->getName(), zoneName, ITEM_LOG_CREATE, DETAIL_EVENTNPC);					}				}				else				{					SAFE_DELETE(pItem);				}				msg << "Inventory Adding Failed : " << pItem->toString() << "\n";			}		}	}	else	{		list<OptionType_t> option50;	option50.push_back( 50 );		list<OptionType_t> optionNULL;		Item* pItem1 = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_VAMPIRE_RING, 3, option50);		Item* pItem2 = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_VAMPIRE_RING, 3, option50);		Item* pItem3 = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_VAMPIRE_RING, 3, option50);		Item* pItem4 = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_VAMPIRE_RING, 3, option50);		// OID甫 殿废罐绰促.		OR.registerObject(pItem1);		OR.registerObject(pItem2);		OR.registerObject(pItem3);		OR.registerObject(pItem4);		list<Item*> ItemList;		ItemList.push_back(pItem1);		ItemList.push_back(pItem2);		ItemList.push_back(pItem3);		ItemList.push_back(pItem4);		list<Item*>::iterator itr = ItemList.begin();		for (; itr != ItemList.end(); itr++)		{			Item* pItem = *itr;			if (pInventory->addItem(pItem, pt))			{				pItem->create(pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y);				pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y);				gcCreateItem.setObjectID(pItem->getObjectID());				gcCreateItem.setItemClass(pItem->getItemClass());				gcCreateItem.setItemType(pItem->getItemType());				gcCreateItem.setOptionType(pItem->getOptionTypeList());				gcCreateItem.setDurability(pItem->getDurability());				gcCreateItem.setSilver(pItem->getSilver());				gcCreateItem.setItemNum(pItem->getNum());				gcCreateItem.setInvenX(pt.x);				gcCreateItem.setInvenY(pt.y);				pPlayer->sendPacket(&gcCreateItem);				msg << "Inventory Adding Succeeded : " << pItem->toString() << "\n";				// ItemTraceLog 甫 巢变促				if ( pItem != NULL && pItem->isTraceItem() )				{					remainTraceLog( pItem, pCreature1->getName(), pCreature2->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC);				}			}			else			{				// 磊府啊 绝促搁 粮俊促 冻绢哆赴促.				pt = pZone->addItem(pItem, pPC->getX(), pPC->getY());				if (pt.x != -1)				{					pItem->create("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y);					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, pCreature1->getName(), zoneName, ITEM_LOG_CREATE, DETAIL_EVENTNPC);					}				}				else				{					SAFE_DELETE(pItem);				}				msg << "Inventory Adding Failed : " << pItem->toString() << "\n";			}		}	}	msg << "Deleting SpecialEvent Count, ";	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection( (int)Thread::self() )->createStatement();		pStmt->executeQuery("UPDATE SpecialEvent SET Count = 0 WHERE Name='%s'", pPlayer->getID().c_str());		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	msg << "Finished\n";	filelog("SpecialEvent.log", "%s", msg.toString().c_str());	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ActionGiveSpecialEventItem::toString () const 	throw (){	__BEGIN_TRY	StringStream msg;	msg << "ActionGiveSpecialEventItem("	    << ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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