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

📄 playercreature.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//----------------------------------------------------------------------// 漂沥 捞抚阑 啊柳 急傍磊啊 捞固 乐绰瘤 绝绰瘤 犬牢窍绰 窃荐.//----------------------------------------------------------------------bool PlayerCreature::hasEnemy(const string& Name)	const throw(){	__BEGIN_DEBUG    list<string>::const_iterator itr = find(m_Enemies.begin(), m_Enemies.end() , Name);	if (itr != m_Enemies.end()) 	{		//cout << "急傍磊肺 捞固 汲沥捞 登绢乐促 : " << Name << endl;		return true;	} 	else 	{		return false;	}	__END_DEBUG}//----------------------------------------------------------------------// 辨靛 捞抚阑 啊廉坷绰 窃荐//----------------------------------------------------------------------string PlayerCreature::getGuildName() const	throw(){	Guild* pGuild = g_pGuildManager->getGuild( m_GuildID );		if ( pGuild != NULL )		return pGuild->getName();	return "";}//----------------------------------------------------------------------// 辨靛 糕滚 珐农甫 啊廉坷绰 窃荐//----------------------------------------------------------------------GuildMemberRank_t PlayerCreature::getGuildMemberRank() const	throw(){	Guild* pGuild = g_pGuildManager->getGuild( m_GuildID );	if ( pGuild != NULL )	{		GuildMember* pGuildMember = pGuild->getMember( getName() );		if ( pGuildMember != NULL )		{			return pGuildMember->getRank();		}	}	return GuildMember::GUILDMEMBER_RANK_DENY;}Rank_t PlayerCreature::getRank() const throw() { return m_pRank->getLevel(); }RankExp_t PlayerCreature::getRankExp() const throw() { return m_pRank->getTotalExp(); }RankExp_t PlayerCreature::getRankGoalExp() const throw() { return m_pRank->getGoalExp(); }RankBonus* PlayerCreature::getRankBonus( RankBonus::RankBonusType type ) const	throw(){	__BEGIN_TRY		HashMapRankBonusConstItor itr = m_RankBonuses.find( type );	if ( itr == m_RankBonuses.end() )	{		return NULL;	}		return itr->second;	__END_CATCH}void PlayerCreature::addRankBonus( RankBonus* rankBonus )	throw(){	__BEGIN_TRY	HashMapRankBonusItor itr = m_RankBonuses.find( rankBonus->getType() );	if ( itr == m_RankBonuses.end() )	{		m_RankBonuses[rankBonus->getType()] = rankBonus;		m_RankBonusFlag.set( rankBonus->getType() );	}	else	{		SAFE_DELETE( rankBonus );	}	__END_CATCH}void PlayerCreature::clearRankBonus()	throw(){	__BEGIN_TRY	HashMapRankBonusItor itr = m_RankBonuses.begin();	for ( ; itr != m_RankBonuses.end(); itr++ )	{		SAFE_DELETE( itr->second );	}	m_RankBonuses.clear();	m_RankBonusFlag.reset();	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery( "DELETE FROM RankBonusData WHERE OwnerID = '%s'", getName().c_str() );	}	END_DB( pStmt )	__END_CATCH}RankBonus* PlayerCreature::getRankBonusByRank( Rank_t rank ) const	throw(){	__BEGIN_TRY	HashMapRankBonusConstItor itr = m_RankBonuses.begin();	for ( ; itr != m_RankBonuses.end(); itr++ )	{		RankBonus* pLearnedRankBonus = itr->second;		if ( rank == pLearnedRankBonus->getRank() )		{			return pLearnedRankBonus;		}	}	return NULL;	__END_CATCH}void PlayerCreature::clearRankBonus( Rank_t rank )	throw(){	__BEGIN_TRY	RankBonus* pRankBonus = getRankBonusByRank( rank );	if ( pRankBonus == NULL )		return;	DWORD rankBonusType = pRankBonus->getType();	HashMapRankBonusItor itr = m_RankBonuses.find( rankBonusType );	if ( itr != m_RankBonuses.end() )	{		m_RankBonusFlag.reset( rankBonusType );		SAFE_DELETE( itr->second );		m_RankBonuses.erase( itr );	}	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery( "DELETE FROM RankBonusData WHERE OwnerID = '%s' AND Type = %d", getName().c_str(), (int)rankBonusType );	}	END_DB( pStmt )	__END_CATCH}bool PlayerCreature::learnRankBonus( DWORD type )	throw(){	__BEGIN_TRY	// 鞍篮 Rank 狼 Bonus 啊 乐促搁 硅匡 荐 绝促.	HashMapRankBonusConstItor itr = m_RankBonuses.begin();	RankBonusInfo* pRankBonusInfo = g_pRankBonusInfoManager->getRankBonusInfo( type );	// 辆练 八荤. 0捞 浇饭捞绢. 1捞 轨颇捞绢	bool bValidRace = isSlayer() && pRankBonusInfo->getRace() == 0						|| isVampire() && pRankBonusInfo->getRace() == 1						|| isOusters() && pRankBonusInfo->getRace() == 2;	// 拌鞭 八荤	if ( getRank() < pRankBonusInfo->getRank() )		return false;	if (!bValidRace)		return false;	for ( ; itr != m_RankBonuses.end(); itr++ )	{		RankBonus* pLearnedRankBonus = itr->second;		if ( pRankBonusInfo->getRank() == pLearnedRankBonus->getRank() )		{			DWORD type = pLearnedRankBonus->getType();			RankBonusInfo* pLearnedRankBonusInfo = g_pRankBonusInfoManager->getRankBonusInfo( type );			// 鞍篮 辆练狼 鞍篮 荐霖狼 扁贱篮 给 硅款促.			if ( pRankBonusInfo->getRace()==pLearnedRankBonusInfo->getRace())			{				return false;			}		}	}		RankBonus* rankBonus = new RankBonus( pRankBonusInfo->getType(), pRankBonusInfo->getPoint(), pRankBonusInfo->getRank() );	addRankBonus( rankBonus );	// DB 俊 眠啊	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery( "INSERT INTO RankBonusData ( OwnerID, Type )  VALUES ( '%s', %d )", getName().c_str(), type );		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	return true;	__END_CATCH}void PlayerCreature::sendRankBonusInfo()	throw(){	__BEGIN_TRY	HashMapRankBonusConstItor itr = m_RankBonuses.begin();	GCRankBonusInfo gcRankBonusInfo;	for ( ; itr != m_RankBonuses.end(); itr++ )	{		gcRankBonusInfo.addListElement( itr->second->getType() );	}	m_pPlayer->sendPacket( &gcRankBonusInfo );	__END_CATCH}void PlayerCreature::loadRankBonus()	throw(){	__BEGIN_TRY	Statement* pStmt = NULL;	Result* pResult = NULL;		BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pResult = pStmt->executeQuery( "SELECT Type FROM RankBonusData WHERE OwnerID ='%s'", getName().c_str() );		while ( pResult->next() )		{			DWORD rankBonusType = pResult->getInt(1);			RankBonusInfo* pRankBonusInfo = g_pRankBonusInfoManager->getRankBonusInfo( rankBonusType );			if ( getRace() == pRankBonusInfo->getRace() )			{				RankBonus* pRankBonus = new RankBonus();				pRankBonus->setType( rankBonusType );				pRankBonus->setPoint( pRankBonusInfo->getPoint() );				pRankBonus->setRank( pRankBonusInfo->getRank() );				addRankBonus( pRankBonus );			}		}		SAFE_DELETE(pStmt);	}	END_DB(pStmt)			__END_CATCH}void PlayerCreature::increaseRankExp(RankExp_t Point){	if (Point <= 0) return;	// PK 粮 救俊辑绰 版氰摹甫 林瘤 臼绰促.	if ( g_pPKZoneInfoManager->isPKZone( getZoneID() ) )		return;	if ( m_pRank->increaseExp(Point) )	{		char pField[80];		sprintf(pField, "Rank=%u, RankExp=%lu, RankGoalExp=%lu",				getRank(), getRankExp(), getRankGoalExp());		tinysave(pField);		setRankExpSaveCount(0);		GCModifyInformation gcModifyInformation;		gcModifyInformation.addLongData(MODIFY_RANK, getRank());		m_pPlayer->sendPacket(&gcModifyInformation);		if (m_pZone != NULL)		{			GCOtherModifyInfo gcOtherModifyInfo;			gcOtherModifyInfo.setObjectID(getObjectID());			gcOtherModifyInfo.addShortData(MODIFY_RANK, getRank());			m_pZone->broadcastPacket(m_X, m_Y, &gcOtherModifyInfo, this);		}	}	else	{		WORD rankExpSaveCount = getRankExpSaveCount();		if (rankExpSaveCount > RANK_EXP_SAVE_PERIOD)		{			char pField[80];			sprintf(pField, "RankExp=%lu, RankGoalExp=%lu", getRankExp(), getRankGoalExp());			tinysave(pField);			rankExpSaveCount = 0;		}		else rankExpSaveCount++;		setRankExpSaveCount(rankExpSaveCount);		// 拌鞭 版氰摹甫 焊郴霖促. by sigi. 2002.9.13		GCModifyInformation gcModifyInformation;		gcModifyInformation.addLongData(MODIFY_RANK_EXP, getRankGoalExp());		m_pPlayer->sendPacket(&gcModifyInformation);	}}bool PlayerCreature::isBillingPlayAvaiable() 	throw(Error){	__BEGIN_TRY	if (m_pPlayer==NULL)		return false;	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(m_pPlayer);	Assert(pGamePlayer!=NULL);	return pGamePlayer->isBillingPlayAvaiable();	__END_CATCH}bool PlayerCreature::isPayPlayAvaiable() 	throw(Error){	__BEGIN_TRY	if (m_pPlayer==NULL)		return false;	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(m_pPlayer);	return pGamePlayer->isPayPlaying();	__END_CATCH}bool PlayerCreature::canPlayFree()	throw(Error){	return false;}void PlayerCreature::loadGoods()	throw(Error){	__BEGIN_TRY		Statement* pStmt = NULL;	Result* pResult = NULL;	if ( m_pGoodsInventory->getNum() != 0 )	{		filelog("GoodsReload.log", "付南酒袍 府肺靛 沁衬? : %s", getName().c_str() );		m_pGoodsInventory->clear();	}	BEGIN_DB	{		pStmt = g_pDatabaseManager->getDistConnection( "PLAYER_DB" )->createStatement();		pResult = pStmt->executeQuery( "SELECT ID, GoodsID, Num FROM GoodsListObject WHERE World = %d AND PlayerID = '%s' AND Name = '%s' AND Status = 'NOT'",										g_pConfig->getPropertyInt("WorldID"),										getPlayer()->getID().c_str(),										getName().c_str() );		while ( pResult->next() )		{			string ID = pResult->getString(1);			DWORD goodsID = pResult->getInt(2);			int num = pResult->getInt(3);			for ( int i = 0; i < max(1,min(50,num)) ; i++ )			{				Item* pItem = createItemByGoodsID( goodsID );				if ( pItem != NULL )				{					m_pGoodsInventory->addItem( ID, pItem );				}			}		}		SAFE_DELETE( pStmt );	}	END_DB(pStmt)	__END_CATCH}/*void	PlayerCreature::loadQuest() 	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	SimpleQuestLoader::getInstance()->load( this );	#endif	__END_CATCH}bool    PlayerCreature::addQuest(Quest* pQuest) 	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestManager==NULL)	{		m_pQuestManager = new QuestManager;	}	if (m_pQuestManager->addQuest( pQuest ))	{		return true;	}#endif	__END_CATCH	SAFE_DELETE(pQuest);	return false;}bool    PlayerCreature::checkEvent(QuestEvent* pQuestEvent) 	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestManager!=NULL)	{		Quest* pCompleteQuest = m_pQuestManager->checkEvent( pQuestEvent );		if (pCompleteQuest!=NULL)		{			//cout << "[Complete] " << pCompleteQuest->toString().c_str() << endl;			return true;		}	}#endif	return false;	__END_CATCH}Quest*  PlayerCreature::removeCompleteQuest() 	throw (Error){	__BEGIN_TRY#ifdef __ACTIVE_QUEST__	if (m_pQuestManager!=NULL)	{		Quest* pQuest = m_pQuestManager->removeCompleteQuest();		return pQuest;	}#endif	__END_CATCH	return NULL;}*//*bool PlayerCreature::deleteItemNameInfoList( ObjectID_t objectID ) 	throw(Error){	__BEGIN_TRY	list<ItemNameInfo*>::iterator itr = m_ItemNameInfoList.begin();		for( ; itr != m_ItemNameInfoList.end() ; itr++ )	{		ItemNameInfo* pInfo = *itr;		if( pInfo->getObjectID() == objectID )		{			SAFE_DELETE( pInfo );			m_ItemNameInfoList.erase( itr );			return true;		}	}	return false;	__END_CATCH}string PlayerCreature::getItemName( ObjectID_t objectID ) 	throw(Error){	__BEGIN_TRY	list<ItemNameInfo*>::iterator itr = m_ItemNameInfoList.begin();		for( ; itr != m_ItemNameInfoList.end() ; itr++ )	{		ItemNameInfo* pInfo = *itr;		if( pInfo->getObjectID() == objectID )		{			return pInfo->getName();		}	}	return NULL;	__END_CATCH}*/void PlayerCreature::addDefaultOptionSet( DefaultOptionSetType_t type )	throw(){	// 捞固 乐绰 巴牢瘤 犬牢茄促.	slist<DefaultOptionSetType_t>::iterator itr = m_DefaultOptionSet.begin();	for ( ; itr != m_DefaultOptionSet.end(); itr++ )	{		if ( (*itr) == type )			return;	}	m_DefaultOptionSet.push_front( type );}void PlayerCreature::removeDefaultOptionSet( DefaultOptionSetType_t type )	throw(){	slist<DefaultOptionSetType_t>::iterator before = m_DefaultOptionSet.end();	slist<DefaultOptionSetType_t>::iterator current = m_DefaultOptionSet.begin();	for ( ; current != m_DefaultOptionSet.end(); before = current++ )	{		if ( (*current) == type )		{			// 惯斑沁促.			if ( before == m_DefaultOptionSet.end() )			{				// delete first node				m_DefaultOptionSet.pop_front();			}			else			{				m_DefaultOptionSet.erase_after(before);			}			return;		}	}	// 惯斑给沁促.}PetInfo* PlayerCreature::getPetInfo() const{	return m_pPetInfo;}void PlayerCreature::setPetInfo(PetInfo* pPetInfo){	m_pPetInfo = pPetInfo;	SAFE_DELETE( m_pPet );	m_pPet = Pet::makePet(this, m_pPetInfo);}void PlayerCreature::heartbeat(const Timeval& currentTime) throw(){	if ( m_pPet != NULL ) m_pPet->heartbeat( currentTime );}GCMonsterKillQuestInfo::QuestInfo*	PlayerCreature::getPetQuestInfo() const{	GCMonsterKillQuestInfo::QuestInfo* pQI = new GCMonsterKillQuestInfo::QuestInfo;	pQI->questID = PET_QUEST_ID;	pQI->sType = m_TargetMonster;	pQI->goal = m_TargetNum;	pQI->timeLimit = m_TimeLimit;	return pQI;}void	PlayerCreature::addPetStashItem(int idx, Item* pPetItem){	Assert( pPetItem == NULL || pPetItem->getItemClass() == Item::ITEM_CLASS_PET_ITEM );	Assert( idx >= 0 && idx <= MAX_PET_STASH );	m_PetStash[idx] = pPetItem;}Item*	PlayerCreature::getPetStashItem(int idx){	Assert( idx >= 0 && idx <= MAX_PET_STASH );	return m_PetStash[idx];}

⌨️ 快捷键说明

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