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

📄 actiontradelairitem.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
////////////////////////////////////////////////////////////////////////////////// Filename    : ActionTradeLairItem.cpp// Written By  : 厘全芒// Description ://               饭绢 付胶磐甫 磷看阑 版快 积扁绰 酒捞袍阑//               NPC客 背券窍绰 肺流捞促.//               积己登绰 酒捞袍篮 Random窍霸 搬沥等促. ( 捞 版快 Gameble阑//               肋 捞侩窍搁 浆匡 淀 窍促)//// // History.////  Date        Writer         Description// ---------- ----------- ------------------------------------------------------// 2002.09.04   厘全芒     脚痹 积己////////////////////////////////////////////////////////////////////////////////#include "ActionTradeLairItem.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 "Treasure.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "MonsterInfo.h"#include "QuestItem.h"#include "ItemUtil.h"#include "StringPool.h"#include "ItemMineInfo.h"#include "PacketUtil.h"#include "ItemGradeManager.h"#include <list>#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCSystemMessage.h"#include "Gpackets/GCDeleteInventoryItem.h"#include "SystemAvailabilitiesManager.h"////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionTradeLairItem::read(PropertyBuffer & propertyBuffer)    throw (Error){    __BEGIN_TRY 	try	{		// 罐阑 捣狼 剧阑 佬绢甸牢促.		m_Type = (ItemType_t)propertyBuffer.getPropertyInt("Type");	}	catch (NoSuchElementException & nsee)	{		throw Error(nsee.toString());	}   __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 咀记阑 角青茄促.////////////////////////////////////////////////////////////////////////////////void ActionTradeLairItem::execute(Creature * pCreature1 , Creature * pCreature2) 	throw (Error){	__BEGIN_TRY	Assert(pCreature1 != NULL);	Assert(pCreature2 != NULL);	Assert(pCreature1->isNPC());	Assert(pCreature2->isPC());	if ( m_Type <= 5 )	{		SYSTEM_RETURN_IF_NOT( SYSTEM_MASTER_LAIR );	}	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature2);	Assert(pPC != NULL);	Player* pPlayer = pPC->getPlayer();	Assert(pPlayer != NULL);	GCNPCResponse okpkt;	pPlayer->sendPacket(&okpkt);	StringStream message;	/*	GCSystemMessage gcSystemMessage;	gcSystemMessage.setMessage("酒流 瘤盔登瘤 臼绰 扁瓷涝聪促");	pPlayer->sendPacket(&gcSystemMessage);	*/	//cout << "ActionTradeLairItem" << ":" << m_Type;	Inventory* pInventory = pPC->getInventory();	// 刚历 酒捞袍阑 啊瘤绊 乐绰啊甫 眉农茄促.	Item* pMasterItem = NULL;	MonsterType_t MonsterType = 0;	Item* pItem1 = NULL;		// 可记俊 蝶扼辑 促弗 酒捞袍阑 八荤秦具 茄促.	// 内抄 : 埔带飘/ 厚陵父 眉农茄促.	// 宏府妮扼墨胶: 抛其令 奇带飘/厚陵父 眉农秦具 茄促	// 墨烙 : 官配府 埔带飘/厚陵父 眉农秦具 茄促.	if (m_Type == 0) // 内抄, 厚陵	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 0);		MonsterType = BATORI_TYPE;		if ( pMasterItem == NULL )		{			pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 2);			MonsterType = TEPEZ_TYPE;		}	}	else if (m_Type == 1) // 内抄, 埔带飘	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 1);		MonsterType = BATORI_TYPE;		if (pMasterItem == NULL)		{			pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 3);			MonsterType = TEPEZ_TYPE;		}	}	else if (m_Type == 2) // 宏府妮扼墨胶, 厚陵	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 2);		MonsterType = TEPEZ_TYPE;	}	else if (m_Type == 3) // 宏府妮扼墨胶, 埔带飘	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 3);		MonsterType = TEPEZ_TYPE;	}	else if (m_Type == 4) // 墨烙, 厚陵	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 0);		MonsterType = BATORI_TYPE;	}	else if (m_Type == 5) // 墨烙, 埔带飘	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 1);		MonsterType = BATORI_TYPE;	}	else if (m_Type == 6) // 联胶沛捞瘤氛~	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 4);		MonsterType = BATORI_TYPE;	}	else if (m_Type == 7) // 焊抚崔~	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 5);		ItemMineInfo* pItemMineInfo;		if ( pPC->isSlayer() )		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);			Assert( pSlayer != NULL );			Attr_t totalAttr = pSlayer->getTotalAttr(ATTR_BASIC);			if ( totalAttr <= 130 )	// 窍靛内爹 ぬ.ば				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 0 );			else if ( totalAttr <= 210 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 1 );			else if ( totalAttr <= 270 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 2 );			else if ( totalAttr <= 300 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 3 );			else				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 4 );		}		else if ( pPC->isVampire() )		{			Vampire* pVampire = dynamic_cast<Vampire*>(pPC);			Assert( pVampire != NULL );			Level_t level = pVampire->getLevel();			if ( level <= 20 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 5 );			else if ( level <= 40 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 6 );			else if ( level <= 60 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 7 );			else if ( level <= 90 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 8 );			else				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 9 );		}		else if ( pPC->isOusters() )		{			Ousters* pOusters = dynamic_cast<Ousters*>(pPC);			Assert( pOusters != NULL );			Level_t level = pOusters->getLevel();			if ( level <= 20 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 10 );			else if ( level <= 40 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 11 );			else if ( level <= 60 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 12 );			else if ( level <= 90 )				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 13 );			else				pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo( 14 );		}		else Assert(false);		pItem1 = pItemMineInfo->getItem();		setItemGender( pItem1, (pPC->getSex()==FEMALE)?GENDER_FEMALE:GENDER_MALE );	}	else if (m_Type == 8) // 弊故崔~	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 6);		if ( pPC->isSlayer() )		{			pItem1 = g_pItemMineInfoManager->getRandomItem( 15, 32 );		}		else if ( pPC->isVampire() )		{			pItem1 = g_pItemMineInfoManager->getRandomItem( 33, 45 );		}		else if ( pPC->isOusters() )		{			pItem1 = g_pItemMineInfoManager->getRandomItem( 46, 61 );		}		setItemGender( pItem1, (pPC->getSex()==FEMALE)?GENDER_FEMALE:GENDER_MALE );	}	else if (m_Type == 9) // 弧埃祸 汗林赣聪	{		pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 7);		if ( pPC->isSlayer() )		{			pItem1 = g_pItemMineInfoManager->getRandomItem( 62, 81 );		}		else if ( pPC->isVampire() )		{			pItem1 = g_pItemMineInfoManager->getRandomItem( 82, 96 );		}		else if ( pPC->isOusters() )		{			pItem1 = g_pItemMineInfoManager->getRandomItem( 97, 112);		}	}	else	{		// 芭贰甫 困茄 NPC狼 Property啊 肋给登菌促. 捞繁 版快俊绰		// 款康评栏肺 巩狼甫 窍搁 官肺 贸府甫 且 荐 乐促.		GCSystemMessage gcSystemMessage;		gcSystemMessage.setMessage( g_pStringPool->getString( STRID_NPC_ERROR ) );		pPlayer->sendPacket(&gcSystemMessage);		GCNPCResponse response;		response.setCode(NPC_RESPONSE_QUIT_DIALOGUE);		pPlayer->sendPacket(&response);		return;	}		if (pMasterItem == NULL)	{		GCSystemMessage gcSystemMessage;		gcSystemMessage.setMessage( g_pStringPool->getString( STRID_NO_LAIR_ITEM ) );		pPlayer->sendPacket(&gcSystemMessage);		GCNPCResponse response;		response.setCode(NPC_RESPONSE_QUIT_DIALOGUE);		pPlayer->sendPacket(&response);		return;	}	Zone* pZone = pPC->getZone();//	if ( MonsterType != 0 ) // 风泼钎甫 曼炼秦辑 酒捞袍阑 父甸绢坷绰 版快	if ( pItem1 == NULL )	{		QuestItemInfo* pItemInfo = dynamic_cast<QuestItemInfo*>(g_pQuestItemInfoManager->getItemInfo( pMasterItem->getItemType() ));		Assert(pItemInfo!=NULL);		///////////////////////////////////////////////////////////////////////////////		// 啊厘 抄皑茄 何盒		//   酒捞袍阑 罚待窍霸 急琶秦具 茄促.		//   老窜篮 扁夯 酒捞袍 窍唱肺 茄促.		//////////////////////////////////////////////////////////////////////////////		const MonsterInfo* pMonsterInfo = g_pMonsterInfoManager->getMonsterInfo(MonsterType);		TreasureList *pTreasureList = NULL;		// 辆练俊 蝶扼辑 林绰 酒捞袍档 崔扼具 茄促.		if (pCreature2->isSlayer())			pTreasureList = pMonsterInfo->getSlayerTreasureList();		else if (pCreature2->isVampire())			pTreasureList = pMonsterInfo->getVampireTreasureList();		else if (pCreature2->isOusters())			pTreasureList = pMonsterInfo->getOustersTreasureList();		const list<Treasure*>& treasures = pTreasureList->getTreasures();		list<Treasure*>::const_iterator itr = treasures.begin();		ITEM_TEMPLATE it;		for(; itr != treasures.end(); itr++)		{			Treasure* pTreasure = (*itr);			it.ItemClass = Item::ITEM_CLASS_MAX;			it.ItemType = 0;			// QuestItem 付促 促弗.. 可记捞 2俺 嘿阑 犬伏			it.NextOptionRatio = pItemInfo->getBonusRatio();			//cout << "TradeLairItem: BonusRatio = " << it.NextOptionRatio << endl;			if ( pTreasure->getRandomItem(&it) )			{				pItem1 = g_pItemFactoryManager->createItem(it.ItemClass, it.ItemType, it.OptionType);				Assert(pItem1 != NULL);			}		}		if (pItem1 == NULL)		{			StringStream msg;			msg << "ActionTradeLairItem: "				<< (int)it.ItemClass << ", "				<< (int)it.ItemType << ", "				<< (int)it.bCreateOption << ", "				<< getOptionTypeToString(it.OptionType);			filelog("tradeLairItemBUG.txt", "%s", msg.toString().c_str());			GCSystemMessage gcSystemMessage;			gcSystemMessage.setMessage( g_pStringPool->getString( STRID_ITEM_CREATE_ERROR ) );			pPlayer->sendPacket(&gcSystemMessage);			GCNPCResponse response;			response.setCode(NPC_RESPONSE_QUIT_DIALOGUE);			pPlayer->sendPacket(&response);			return;		}	}	TPOINT pt;	pItem1->setGrade( min(7,ItemGradeManager::Instance().getRandomBeadGrade()) );	pZone->registerObject(pItem1);	// 父距 inventory俊 傍埃捞 乐促搁, 持绰促. 	if(pInventory->addItem(pItem1, pt))	{		pItem1->create(pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y);		GCCreateItem gcCreateItem;/*		gcCreateItem.setObjectID(pItem1->getObjectID());		gcCreateItem.setItemClass(pItem1->getItemClass());		gcCreateItem.setItemType(pItem1->getItemType());		gcCreateItem.setOptionType(pItem1->getOptionTypeList());		gcCreateItem.setDurability(pItem1->getDurability());		gcCreateItem.setItemNum(pItem1->getNum());		gcCreateItem.setInvenX(pt.x);		gcCreateItem.setInvenY(pt.y);		gcCreateItem.setGrade( pItem1->getGrade() );*/		makeGCCreateItem( &gcCreateItem, pItem1, pt.x, pt.y );		pPlayer->sendPacket(&gcCreateItem);		// ItemTraceLog 甫 巢变促		if ( pItem1 != NULL && pItem1->isTraceItem() )		{			remainTraceLog( pItem1, pCreature1->getName(), pCreature2->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC);		}		// 扁粮狼 酒捞袍阑 绝矩促		GCDeleteInventoryItem gcDeleteInventoryItem;		gcDeleteInventoryItem.setObjectID(pMasterItem->getObjectID());		pPlayer->sendPacket(&gcDeleteInventoryItem);		// 辑滚俊辑 绝局霖促.		pInventory->deleteItem(pMasterItem->getObjectID());	// 谅钎肺 官层林搁 亮阑扒单..		// ItemTraceLog 甫 巢变促		if ( pMasterItem != NULL && pMasterItem->isTraceItem() )		{			remainTraceLog( pMasterItem, pCreature2->getName(), pCreature1->getName(), ITEM_LOG_DELETE, DETAIL_EVENTNPC);		}		pMasterItem->destroy();		SAFE_DELETE(pMasterItem);		// 荤侩磊俊霸 己傍 皋矫瘤 免仿//		StringStream message;//		message << "己傍利栏肺 背券登菌嚼聪促";		GCSystemMessage gcSystemMessage;		gcSystemMessage.setMessage( g_pStringPool->getString( STRID_TRADE_SUCCESS ) );		pPlayer->sendPacket(&gcSystemMessage);	}	else	{//		StringStream buf;//		buf << "牢亥配府俊 傍埃捞 何练钦聪促";		GCSystemMessage gcSystemMessage;		gcSystemMessage.setMessage( g_pStringPool->getString( STRID_NOT_ENOUGH_INVENTORY_SPACE ) );		pPlayer->sendPacket(&gcSystemMessage);	}	GCNPCResponse response;	response.setCode(NPC_RESPONSE_QUIT_DIALOGUE);	pPlayer->sendPacket(&response);	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ActionTradeLairItem::toString () const 	throw (){	__BEGIN_TRY	StringStream msg;	msg << "ActionTradeLairItem("	    << ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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