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

📄 masterlairmanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
////////////////////////////////////////////////////////////////////////////////// Filename    : MasterLairManager.h // Written By  : 江// Description : ////////////////////////////////////////////////////////////////////////////////#include "MasterLairManager.h"#include "MasterLairInfoManager.h"#include "Assert.h"#include "Zone.h"#include "VariableManager.h"#include "Timeval.h"#include "Monster.h"#include "MonsterManager.h"#include "PlayerCreature.h"#include "Inventory.h"#include "PCManager.h"#include "Item.h"#include "ItemUtil.h"#include "ItemFactoryManager.h"#include "EffectMasterLairPass.h"#include "EffectContinualGroundAttack.h"#include "PacketUtil.h"#include "Player.h"#include "MonsterCorpse.h"#include "ZoneInfoManager.h"#include "ZoneGroupManager.h"#include "StringPool.h"#include "Gpackets/GCNoticeEvent.h"#include "Gpackets/GCSystemMessage.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCSay.h"#include <stdio.h>//////////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////////MasterLairManager::MasterLairManager (Zone* pZone) 	throw (Error){	__BEGIN_TRY			Assert(pZone != NULL);	m_pZone = pZone;	MasterLairInfo* pInfo = g_pMasterLairInfoManager->getMasterLairInfo( m_pZone->getZoneID() );	Assert(pInfo!=NULL);	m_MasterID = 0;           // 付胶磐 茄 付府 	m_MasterX = 0;	m_MasterY = 0;	m_bMasterReady = false;      // 付胶磐啊 轿匡 霖厚啊 登菌唱? 	//m_nMaxSummonMonster = pInfo->getMaxSummonMonster(); // 付胶磐啊 家券且 弥措狼 阁胶磐 荐 	//m_nSummonedMonster = 0;	m_nMaxPassPlayer = pInfo->getMaxPassPlayer(); // 弥措 免涝 啊瓷磊 荐	m_nPassPlayer = 0;	m_Event = EVENT_WAITING_REGEN;	m_EventValue = 0;	Timeval currentTime;	getCurrentTime(currentTime);	// 狼固绝寸. - -;	m_EventTime.tv_sec = currentTime.tv_sec + pInfo->getFirstRegenDelay();	m_EventTime.tv_usec = 0;	m_RegenTime.tv_sec = currentTime.tv_sec + pInfo->getFirstRegenDelay();	m_RegenTime.tv_usec = 0;	m_Mutex.setName("MasterLairManager");	//cout << "Init MasterLairManager: zoneID=" << (int)m_pZone->getZoneID() << endl;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////////MasterLairManager::~MasterLairManager () 	throw (){	__BEGIN_TRY	__END_CATCH}	//////////////////////////////////////////////////////////////////////////////////// enterCreature ( Creature* )////////////////////////////////////////////////////////////////////////////////////// Creature啊 捞 Zone(MasterLair)俊 甸绢棵 荐 乐绰瘤 眉农窍绊// 甸绢棵 荐 乐促搁 甸绢吭促绊 焊绊 眉农秦敌促.//// [炼扒]//   - EVENT_WAITING_PLAYER, //     EVENT_MINION_COMBAT, //     EVENT_MASTER_COMBAT牢 版快父 甸绢棵 啊瓷己捞 乐促.//   - EffectMasterLairPass啊 乐绊 泅犁 MasterLair狼 巴捞 嘎绰 版快绰 公炼扒 甸绢柯促.//   - EVENT_WAITING_PLAYER啊 酒聪搁 给 甸绢柯促.//   - 付胶磐啊 绝绰 版快 m_nPassPlayer >= m_nMaxPassPlayer牢 版快 给 甸绢咳//// 免涝 啊瓷茄 某腐磐俊霸绰 EffectMasterLairPass啊 绝促搁//   - m_nPassPlayer甫 1刘啊矫虐绊 EffectMasterLairPass甫 嘿咯霖促.//   - EffectMasterLairPass狼 瘤加 矫埃篮 EVENT_MASTER_COMBAT捞 场唱绰 矫埃鳖瘤捞促.//////////////////////////////////////////////////////////////////////////////////bool MasterLairManager::enterCreature(Creature* pCreature)	throw(Error){		__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	if (pCreature->isDM() || pCreature->isGOD())	{		m_Mutex.unlock();					goto ENTER_OK;	}	if (m_Event!=EVENT_WAITING_PLAYER		&& m_Event!=EVENT_MINION_COMBAT		&& m_Event!=EVENT_MASTER_COMBAT)	{		//cout << "[" << (int)m_pZone->getZoneID() << "] MasterLairManager: 瘤陛篮 甸绢哎 荐 绝绰 葛靛" << endl;		m_Mutex.unlock();		return false;	}	EffectMasterLairPass* pPassEffect = NULL;	// 泅犁 Zone狼 EffectMasterLairPass甫 爱绊 乐绰啊?	if (pCreature->isFlag( Effect::EFFECT_CLASS_MASTER_LAIR_PASS ))	{		if (g_pVariableManager->isRetryMasterLair())		{			Effect* pEffect = pCreature->getEffectManager()->findEffect( Effect::EFFECT_CLASS_MASTER_LAIR_PASS );			Assert(pEffect!=NULL);			pPassEffect = dynamic_cast<EffectMasterLairPass*>(pEffect);			if (pPassEffect->getZoneID()==m_pZone->getZoneID())			{				//cout << "[" << (int)m_pZone->getZoneID() << "] MasterLairManager: " << pCreature->getName().c_str() << " has EffectPass" << endl;				m_Mutex.unlock();				goto ENTER_OK;			}			// 促弗 Lair狼 Pass促. - -;			//cout << "[" << (int)m_pZone->getZoneID() << "] MMasterLairManager: " << pCreature->getName().c_str() << " has Wrong EffectPass" << endl;		}		else		{			//cout << "[" << (int)m_pZone->getZoneID() << "] MMasterLairManager: " << pCreature->getName().c_str() << " can't enter more" << endl;			m_Mutex.unlock();			return false;		}	}	// 甸绢棵 荐 绝绰 版快	if (m_Event!=EVENT_WAITING_PLAYER)	{		//cout << "[" << (int)m_pZone->getZoneID() << "] MasterLairManager: Not WAITING_PLAYER: "		//	<< m_pZone->getPCManager()->getSize() << " / " << m_nPassPlayer << "/" << m_nMaxPassPlayer << endl;		m_Mutex.unlock();		return false;	}	//if (m_nPassPlayer >= m_nMaxPassPlayer)	if (m_nPassPlayer >= g_pVariableManager->getVariable(MASTER_LAIR_PLAYER_NUM))	// by sigi. 2002.12.31	{		//cout << "[" << (int)m_pZone->getZoneID() << "] MasterLairManager: Already Maximum Players: "			//<< m_pZone->getPCManager()->getSize() << " / " << m_nPassPlayer << "/" << m_nMaxPassPlayer << endl;		m_Mutex.unlock();		return false;	}	// 甸绢棵 荐 乐促绊 魄窜等 版快	m_nPassPlayer ++;	if (pPassEffect==NULL)	{		pPassEffect = new EffectMasterLairPass(pCreature, m_pZone->getZoneID());		//cout << "[" << (int)m_pZone->getZoneID() << "] MasterLairManager: " << pCreature->getName().c_str() << " received EffectPass: "		//	<< m_pZone->getPCManager()->getSize() << " / " << m_nPassPlayer << "/" << m_nMaxPassPlayer << endl;	}	else	{		pPassEffect->setZoneID( m_pZone->getZoneID() );	}	pCreature->getEffectManager()->addEffect( pPassEffect );	pCreature->setFlag( Effect::EFFECT_CLASS_MASTER_LAIR_PASS );		__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCHENTER_OK :	/*	// Sniping 力芭	if (pCreature->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE))	{        EffectManager* pEffectManager = pCreature->getEffectManager();        Assert(pEffectManager);        pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_INVISIBILITY);		pCreature->removeFlag(Effect::EFFECT_CLASS_INVISIBILITY);	}	// Invisibility力芭	if (pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY))	{        EffectManager* pEffectManager = pCreature->getEffectManager();        Assert(pEffectManager!=NULL);        pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_INVISIBILITY);		pCreature->removeFlag(Effect::EFFECT_CLASS_INVISIBILITY);	}	*/	if (m_Event==EVENT_MINION_COMBAT		|| m_Event==EVENT_MASTER_COMBAT)	{		Timeval currentTime;		getCurrentTime(currentTime);		int timeGap = m_EventTime.tv_sec - currentTime.tv_sec;		GCNoticeEvent gcNoticeEvent;		gcNoticeEvent.setCode( NOTICE_EVENT_MASTER_COMBAT_TIME );		gcNoticeEvent.setParameter( timeGap );		//m_pZone->broadcastPacket( &gcNoticeEvent );		pCreature->getPlayer()->sendPacket( &gcNoticeEvent );	}	return true;}//////////////////////////////////////////////////////////////////////////////////// leaveCreature ( Creature* )////////////////////////////////////////////////////////////////////////////////////// WaitingPlayer惑怕捞搁 PassPlayer甫 窍唱 临咯霖促.//// 付胶磐 饭绢俊 促矫 甸绢哎 荐 绝绰 惑怕捞搁 EffectPass甫 绝局霖促.//////////////////////////////////////////////////////////////////////////////////bool MasterLairManager::leaveCreature(Creature* pCreature)	throw(Error){		__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	if (pCreature->isDM() || pCreature->isGOD())	{		m_Mutex.unlock();		return true;	}	// waiting player牢 版快父 箭磊甫 临牢促.	if (m_Event==EVENT_WAITING_PLAYER)	{		if (m_nPassPlayer>0) m_nPassPlayer--;	}	// 唱埃 版快(磷篮 版快) 付胶磐 饭绢俊 促矫 倒酒棵 荐 绝绰 葛靛..啊 登绢乐促搁	// 唱哎 锭 EffectMasterLairPass甫 力芭茄促.	if (!g_pVariableManager->isRetryMasterLair())	{		if (pCreature->isFlag( Effect::EFFECT_CLASS_MASTER_LAIR_PASS ))		{			pCreature->getEffectManager()->deleteEffect( Effect::EFFECT_CLASS_MASTER_LAIR_PASS );			pCreature->removeFlag( Effect::EFFECT_CLASS_MASTER_LAIR_PASS );		}	}		__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH	//cout << "[" << (int)m_pZone->getZoneID() << "] MasterLairManager: " << pCreature->getName().c_str() << " leaved: "	//		<< m_pZone->getPCManager()->getSize() << " / " << m_nPassPlayer << "/" << m_nMaxPassPlayer << endl;	return true;}//////////////////////////////////////////////////////////////////////////////////// heartbeat// ////////////////////////////////////////////////////////////////////////////////bool MasterLairManager::heartbeat() 	throw (Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	switch (m_Event)	{		case EVENT_WAITING_PLAYER :			processEventWaitingPlayer();		break;		case EVENT_MINION_COMBAT :			processEventMinionCombat();		break;				case EVENT_MASTER_COMBAT :			processEventMasterCombat();		break;		case EVENT_WAITING_KICK_OUT :			processEventWaitingKickOut();		break;		case EVENT_WAITING_REGEN :			processEventWaitingRegen();		break;		default :			break;	}; 	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH	return true;}//////////////////////////////////////////////////////////////////////////////////// process EventWaitingPlayer//////////////////////////////////////////////////////////////////////////////////void MasterLairManager::processEventWaitingPlayer() 	throw (Error){	__BEGIN_TRY	Timeval currentTime;	getCurrentTime(currentTime);	// 措扁 矫埃捞 场唱搁..	// 付胶磐啊 阁胶磐甫 家券窍扁 窍扁 矫累茄促.	if (currentTime >= m_EventTime)	{		// 付胶磐 饭绢啊 凯妨乐促绊 荤恩甸俊霸 舅妨霖促.//		ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( m_pZone->getZoneID() );//		Assert(pZoneInfo!=NULL);//		StringStream msg;//		msg << "付胶磐 饭绢(" << pZoneInfo->getFullName().c_str() << ")啊 摧躯嚼聪促.";//        char msg[50]; //       sprintf( msg, g_pStringPool->c_str( STRID_MASTER_LAIR_CLOSED ),  //                      pZoneInfo->getFullName().c_str() );// //       string sMsg( msg );////		GCSystemMessage gcSystemMessage;//		gcSystemMessage.setType(SYSTEM_MESSAGE_MASTER_LAIR);//		gcSystemMessage.setMessage( sMsg );//		g_pZoneGroupManager->broadcast( &gcSystemMessage );		GCNoticeEvent gcNoticeEvent;		gcNoticeEvent.setCode(NOTICE_EVENT_MASTER_LAIR_CLOSED);		gcNoticeEvent.setParameter( m_pZone->getZoneID() );		g_pZoneGroupManager->broadcast( &gcNoticeEvent );		// Minion苞狼 轿框 矫累		activeEventMinionCombat();	}	else	{ 		int remainSec = m_EventTime.tv_sec - currentTime.tv_sec;		// 1盒 付促 茄锅究 舅赴促.		if (remainSec!=m_EventValue && remainSec!=0 && remainSec % 60 == 0)		{			// 付胶磐 饭绢啊 凯妨乐促绊 荤恩甸俊霸 舅妨霖促.//			ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( m_pZone->getZoneID() );//			Assert(pZoneInfo!=NULL);//			StringStream msg;//			msg << "付胶磐 饭绢(" << pZoneInfo->getFullName().c_str() << ") 免涝 啊瓷 矫埃捞 "//				<< (remainSec/60) << "盒 巢疽嚼聪促.";//            char msg[100]; //           sprintf( msg, g_pStringPool->c_str( STRID_MASTER_LAIR_OPENING_COUNT_DOWN ),  //                          pZoneInfo->getFullName().c_str(),   //                         (int)(remainSec/60) );// //           string sMsg( msg );////			GCSystemMessage gcSystemMessage;//			gcSystemMessage.setType(SYSTEM_MESSAGE_MASTER_LAIR);//			gcSystemMessage.setMessage( sMsg );//			g_pZoneGroupManager->broadcast( &gcSystemMessage );			GCNoticeEvent gcNoticeEvent;			gcNoticeEvent.setCode(NOTICE_EVENT_MASTER_LAIR_COUNT);

⌨️ 快捷键说明

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