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

📄 playercreature.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : PlayerCreature.cpp// Written by  : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "PlayerCreature.h"#include "Stash.h"#include "DB.h"#include "StringStream.h"#include "Item.h"#include "ItemUtil.h"#include "Belt.h"#include "Inventory.h"#include "GoodsInventory.h"#include "Zone.h"#include "FlagSet.h"#include "ParkingCenter.h"#include "Key.h"#include "Guild.h"#include "GuildManager.h"#include "Gpackets/GCRankBonusInfo.h"#include "Gpackets/GCTimeLimitItemInfo.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCOtherModifyInfo.h"#include "Gpackets/GCNoticeEvent.h"#include "Gpackets/GCMonsterKillQuestInfo.h"#include "Gpackets/GCPetStashList.h"#include "Player.h"#include "RankBonusInfo.h"#include "GamePlayer.h"#include "TimeLimitItemManager.h"#include "mission/QuestManager.h"#include "Properties.h"#include "PKZoneInfoManager.h"#include "RankExpTable.h"//#include "QuestManager.h"//#include "QuestEvent.h"//#include "Quest.h"//#include "SimpleQuestLoader.h"#include <list>#include "DefaultOptionSetInfo.h"#include "Pet.h"const int MAX_GOODS_INVENTORY_SIZE = 10;//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////PlayerCreature::PlayerCreature(ObjectID_t OID, Player* pPlayer)	throw(): Creature(OID, pPlayer){	__BEGIN_TRY	m_pInventory          = new Inventory(10, 6);	m_pExtraInventorySlot = new InventorySlot();	m_pGoodsInventory     = new GoodsInventory();	m_pStash              = new Stash;	m_StashNum            = 0;	m_StashGold           = 0;	m_bStashStatus        = false;	m_pFlagSet            = new FlagSet;	m_isPK				  = false;	m_GuildID			  = 0;	m_pQuestManager		  = new QuestManager(this);	m_pTimeLimitItemManager = new TimeLimitItemManager( this );	m_bLotto			  = false;	m_pQuestItem		= NULL;	m_pPetInfo			= NULL;	m_RankExpSaveCount   = 0;	m_pRank = NULL;	m_pPet = NULL;		m_PetStash.reserve( MAX_PET_STASH );	for ( int i=0; i<MAX_PET_STASH; ++i ) m_PetStash.push_back(NULL);	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////PlayerCreature::~PlayerCreature()	throw(){	__BEGIN_TRY	// 牢亥配府 昏力	SAFE_DELETE(m_pInventory);	SAFE_DELETE(m_pGoodsInventory);	// 付快胶 器牢磐客 崔妨乐绰 酒捞袍阑 昏力茄促.	if (m_pExtraInventorySlot != NULL)	{		Item* pItem = m_pExtraInventorySlot->getItem();		if (pItem != NULL)		{			if (pItem->getItemClass() == Item::ITEM_CLASS_KEY)			{				Key* pKey = dynamic_cast<Key*>(pItem);				// 傲 埃窜窍霸 捞救俊辑 舅酒辑 粮俊辑 瘤况 林档废 窍磊.				if (g_pParkingCenter->hasMotorcycleBox(pKey->getTarget()))				{					g_pParkingCenter->deleteMotorcycleBox(pKey->getTarget());				}			}			m_pExtraInventorySlot->deleteItem();			SAFE_DELETE(pItem);		}		SAFE_DELETE(m_pExtraInventorySlot);	}	// 焊包窃 昏力	SAFE_DELETE(m_pStash);	// 敲贰弊 悸 昏力	SAFE_DELETE(m_pFlagSet);	// RankBonus hash_map 昏力	for ( HashMapRankBonusItor itr = m_RankBonuses.begin(); itr != m_RankBonuses.end(); itr++ )	{		SAFE_DELETE( itr->second );	}	m_RankBonuses.clear();	if ( m_pTimeLimitItemManager != NULL )		SAFE_DELETE( m_pTimeLimitItemManager );	if ( m_pQuestManager != NULL )		SAFE_DELETE( m_pQuestManager );/*	for ( list<ItemNameInfo*>::iterator itr = m_ItemNameInfoList.begin(); itr != m_ItemNameInfoList.end(); itr++ )	{		ItemNameInfo* pInfo = *itr;		SAFE_DELETE( pInfo );	}	m_ItemNameInfoList.clear();*/	if ( m_pQuestItem != NULL )		SAFE_DELETE( m_pQuestItem );	SAFE_DELETE( m_pRank );	for ( int i=0; i<MAX_PET_STASH; ++i )	{		SAFE_DELETE( m_PetStash[i] );	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 酒捞袍 窍唱 殿废窍扁// *** 林狼 ***// 捞 窃荐甫 何福扁 傈俊 馆靛矫 OR俊促 遏阑 吧绢具 茄促.// 郴何利栏肺绰 遏阑 吧瘤 臼扁 锭巩捞促.//////////////////////////////////////////////////////////////////////////////void PlayerCreature::registerItem(Item* pItem, ObjectRegistry& OR)    throw(){	__BEGIN_TRY	Assert(pItem != NULL);	// Item 磊眉俊 ObjectID 且寸	OR.registerObject_NOLOCKED(pItem);	// 矫埃力茄 酒捞袍 概聪历俊 OID 啊 官差菌促绊 舅妨霖促.	m_pTimeLimitItemManager->registerItem( pItem );	// 骇飘扼搁 救俊 乐绰 酒捞袍甸档 OID甫 罐酒初酒具 茄促.	if (pItem->getItemClass() == Item::ITEM_CLASS_BELT)	{		Belt*       pBelt       = dynamic_cast<Belt*>(pItem);		PocketNum_t PocketCount = pBelt->getPocketCount();		Inventory*  pInventory  = pBelt->getInventory();		for (int k=0; k<PocketCount; k++)		{			Item* pBeltItem = pInventory->getItem(k, 0);			if (pBeltItem != NULL)			{				OR.registerObject_NOLOCKED(pBeltItem);				// 矫埃力茄 酒捞袍 概聪历俊 OID 啊 官差菌促绊 舅妨霖促.				m_pTimeLimitItemManager->registerItem( pBeltItem );			}		}	} 	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 牢亥配府 救俊 乐绰 酒捞袍 殿废窍扁// *** 林狼 ***// 捞 窃荐甫 何福扁 傈俊 馆靛矫 OR俊促 遏阑 吧绢具 茄促.// 郴何利栏肺绰 遏阑 吧瘤 臼扁 锭巩捞促.//////////////////////////////////////////////////////////////////////////////void PlayerCreature::registerInventory(ObjectRegistry& OR)    throw(){	__BEGIN_TRY	list<Item*> ItemList;	int height = m_pInventory->getHeight();	int width  = m_pInventory->getWidth();	for (int j=0; j<height; j++)	{		for (int i=0; i<width; i++)		{			Item* pItem = m_pInventory->getItem(i, j);			if (pItem != NULL)			{				// 殿废等 酒捞袍狼 府胶飘俊辑 泅犁 酒捞袍阑 茫绰促.				list<Item*>::iterator itr = find(ItemList.begin(), ItemList.end(), pItem);				if (itr == ItemList.end())				{					// 鞍篮 酒捞袍阑 滴锅 殿废窍瘤 臼扁 困秦辑					// 府胶飘俊促啊 酒捞袍阑 笼绢持绰促.					ItemList.push_back(pItem);					// 酒捞袍狼 OID甫 且寸罐绰促.					registerItem(pItem, OR);					i += pItem->getVolumeWidth() - 1;				}			}		}	}	__END_CATCH}void PlayerCreature::registerInitInventory(ObjectRegistry& OR)    throw(){	__BEGIN_TRY	list<Item*> ItemList;	int height = m_pInventory->getHeight();	int width  = m_pInventory->getWidth();	for (int j=0; j<height; j++)	{		for (int i=0; i<width; i++)		{			Item* pItem = m_pInventory->getItem(i, j);			if (pItem != NULL)			{				// 殿废等 酒捞袍狼 府胶飘俊辑 泅犁 酒捞袍阑 茫绰促.				list<Item*>::iterator itr = find(ItemList.begin(), ItemList.end(), pItem);				if (itr == ItemList.end())				{					// 鞍篮 酒捞袍阑 滴锅 殿废窍瘤 臼扁 困秦辑					// 府胶飘俊促啊 酒捞袍阑 笼绢持绰促.					ItemList.push_back(pItem);					// ItemTrace 甫 巢辨 巴牢瘤 搬沥					pItem->setTraceItem( bTraceLog( pItem ) );					// 酒捞袍狼 OID甫 且寸罐绰促.					registerItem(pItem, OR);					i += pItem->getVolumeWidth() - 1;				}			}		}	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 焊包窃 救俊 甸绢乐绰 酒捞袍 殿废窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::registerStash(void)	throw(){	__BEGIN_TRY	Zone* pZone = getZone();	ObjectRegistry& OR = pZone->getObjectRegistry();	__ENTER_CRITICAL_SECTION(OR)	for (int r=0; r<STASH_RACK_MAX; r++)	{		for (int i=0; i<STASH_INDEX_MAX; i++)		{			Item* pStashItem = m_pStash->get(r, i);			if (pStashItem != NULL) registerItem(pStashItem, OR);		}	}	__LEAVE_CRITICAL_SECTION(OR)	m_bStashStatus = true;	__END_CATCH}void PlayerCreature::registerGoodsInventory(ObjectRegistry& OR)    throw(){	__BEGIN_TRY	GoodsInventory::ListItem& goods = m_pGoodsInventory->getGoods();	GoodsInventory::ListItemItr itr = goods.begin();	for ( ; itr != goods.end(); itr++ )	{		registerItem( (*itr).m_pItem, OR);	}	__END_CATCH}void PlayerCreature::loadTimeLimitItem() throw(Error){	__BEGIN_TRY	Assert( m_pTimeLimitItemManager != NULL );	m_pTimeLimitItemManager->load();	__END_CATCH}void PlayerCreature::loadItem()	throw (InvalidProtocolException, Error){	__BEGIN_TRY	loadTimeLimitItem();	__END_CATCH}bool PlayerCreature::wasteIfTimeLimitExpired(Item* pItem)	throw (Error){	__BEGIN_TRY	if ( pItem == NULL ) return false;	if ( m_pTimeLimitItemManager->wasteIfTimeOver( pItem ) )	{		pItem->waste( STORAGE_TIMEOVER );		return true;	}	return false;	__END_CATCH}void PlayerCreature::sendTimeLimitItemInfo()	throw(Error){	__BEGIN_TRY	GCTimeLimitItemInfo gcTimeLimitItemInfo;	if ( m_pTimeLimitItemManager->makeTimeLimitItemInfo( gcTimeLimitItemInfo ) )	{		getPlayer()->sendPacket( &gcTimeLimitItemInfo );	}	__END_CATCH}void PlayerCreature::addTimeLimitItem(Item* pItem, DWORD time) throw(Error){	m_pTimeLimitItemManager->addTimeLimitItem( pItem, time );} void PlayerCreature::sellItem( Item* pItem ) throw(Error){	__BEGIN_TRY	if ( pItem->isTimeLimitItem() ) m_pTimeLimitItemManager->itemSold( pItem );	__END_CATCH}void PlayerCreature::deleteItemByMorph( Item* pItem ) throw(Error){	__BEGIN_TRY	if ( pItem->isTimeLimitItem() ) m_pTimeLimitItemManager->deleteItemByMorph( pItem );	__END_CATCH}void PlayerCreature::sendCurrentQuestInfo() const throw(Error){	m_pQuestManager->sendQuestInfo();}void PlayerCreature::whenQuestLevelUpgrade(){	if ( getQuestLevel() == 40 )	{		GCNoticeEvent gcNE;		gcNE.setCode( NOTICE_EVENT_CAN_PET_QUEST );		getPlayer()->sendPacket(&gcNE);	}}//////////////////////////////////////////////////////////////////////////////// 焊包窃 肮荐 技泼窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::setStashNumEx(BYTE num)	throw(){	__BEGIN_TRY	Statement* pStmt = NULL;	setStashNum(num);	BEGIN_DB	{		StringStream sqlSlayer;		StringStream sqlVampire;		StringStream sqlOusters;		sqlSlayer << "UPDATE Slayer set StashNum = " << (int)num			<< " WHERE Name = '" << getName() << "'";		sqlVampire << "UPDATE Vampire set StashNum = " << (int)num			<< " WHERE Name = '" << getName() << "'";		sqlOusters << "UPDATE Ousters set StashNum = " << (int)num			<< " WHERE Name = '" << getName() << "'";		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery(sqlSlayer.toString());		if ( !isOusters() )			pStmt->executeQuery(sqlVampire.toString());		else			pStmt->executeQuery(sqlOusters.toString());		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 焊包窃俊 甸绢乐绰 捣 技泼窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::setStashGoldEx(Gold_t gold)	throw(){	__BEGIN_TRY	//cout << "setStashGoldEx Called" << "Name:" << getName() << " Gold: " << (int)gold << endl;	Statement* pStmt = NULL;	setStashGold(gold);	BEGIN_DB	{		StringStream sqlSlayer;		StringStream sqlVampire;		StringStream sqlOusters;		sqlSlayer << "UPDATE Slayer set StashGold = " << (int)gold			<< " WHERE Name = '" << getName() << "'";		sqlVampire << "UPDATE Vampire set StashGold = " << (int)gold			<< " WHERE Name = '" << getName() << "'";		sqlOusters << "UPDATE Ousters set StashGold = " << (int)gold			<< " WHERE Name = '" << getName() << "'";		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery(sqlSlayer.toString());		if ( !isOusters() )			pStmt->executeQuery(sqlVampire.toString());		else			pStmt->executeQuery(sqlOusters.toString());		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 焊包窃俊 甸绢乐绰 捣 技泼窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::increaseStashGoldEx(Gold_t gold)	throw(){	__BEGIN_TRY	Statement* pStmt = NULL;	setStashGold(m_StashGold + gold);	BEGIN_DB	{		StringStream sqlSlayer;		StringStream sqlVampire;		StringStream sqlOusters;		sqlSlayer << "UPDATE Slayer set StashGold = " << (int)m_StashGold			<< " WHERE Name = '" << getName() << "'";		sqlVampire << "UPDATE Vampire set StashGold = " << (int)m_StashGold			<< " WHERE Name = '" << getName() << "'";		sqlOusters << "UPDATE Ousters set StashGold = " << (int)m_StashGold			<< " WHERE Name = '" << getName() << "'";		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery(sqlSlayer.toString());		if ( !isOusters() )			pStmt->executeQuery(sqlVampire.toString());		else			pStmt->executeQuery(sqlOusters.toString());		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 焊包窃俊 甸绢乐绰 捣 技泼窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::decreaseStashGoldEx(Gold_t gold)	throw(){	__BEGIN_TRY	Statement* pStmt = NULL;	setStashGold(m_StashGold - gold);	BEGIN_DB	{		StringStream sqlSlayer;		StringStream sqlVampire;		StringStream sqlOusters;		sqlSlayer << "UPDATE Slayer set StashGold = " << (int)m_StashGold			<< " WHERE Name = '" << getName() << "'";		sqlVampire << "UPDATE Vampire set StashGold = " << (int)m_StashGold			<< " WHERE Name = '" << getName() << "'";		sqlOusters << "UPDATE Ousters set StashGold = " << (int)m_StashGold			<< " WHERE Name = '" << getName() << "'";		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery(sqlSlayer.toString());		if ( !isOusters() )			pStmt->executeQuery(sqlVampire.toString());		else			pStmt->executeQuery(sqlOusters.toString());		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 焊包窃 皋葛府俊辑 昏力窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::deleteStash(void)	throw(){	__BEGIN_TRY	SAFE_DELETE(m_pStash);	m_StashNum = 0;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 敲贰弊悸 皋葛府俊辑 昏力窍扁//////////////////////////////////////////////////////////////////////////////void PlayerCreature::deleteFlagSet(void)	throw(){	__BEGIN_TRY	SAFE_DELETE(m_pFlagSet);	__END_CATCH}//----------------------------------------------------------------------// 急傍磊狼 府胶飘俊 急傍磊甫 眠啊窍绰 窃荐//----------------------------------------------------------------------void PlayerCreature::addEnemy(const string& Name)	throw(Error){	__BEGIN_DEBUG	list<string>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , Name);	// 绝促搁 眠啊窍磊	if (itr == m_Enemies.end()) 	{		m_Enemies.push_back(Name);		//cout << "急傍磊甫 眠啊茄促 : " << Name << endl;	}	__END_DEBUG}//----------------------------------------------------------------------// 急傍磊狼 府胶飘俊 急傍磊甫 昏力窍绰 窃荐//----------------------------------------------------------------------void PlayerCreature::deleteEnemy(const string& Name)	throw(NoSuchElementException, Error){	__BEGIN_DEBUG    list<string>::iterator itr = find(m_Enemies.begin(), m_Enemies.end() , Name);	if (itr != m_Enemies.end()) 	{		m_Enemies.erase(itr);		//cout << "急傍磊甫 瘤款促 : " << Name << endl;	}	__END_DEBUG}

⌨️ 快捷键说明

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