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

📄 effectschedule.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : EffectSchedule.cpp// Written by  : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectSchedule.h"#include "Effect.h"#include "EffectManager.h"#include "Assert.h"#include "Zone.h"#include "ZoneUtil.h"#include "Tile.h"#include "ObjectRegistry.h"#include "skill/EffectVampirePortal.h"#include "Gpackets/GCAddVampirePortal.h"//////////////////////////////////////////////////////////////////////////////// class EffectScheduleWork member methods//////////////////////////////////////////////////////////////////////////////EffectScheduleWork::EffectScheduleWork()	throw(){	__BEGIN_TRY	m_Code = WORKCODE_MAX;	__END_CATCH}EffectScheduleWork::~EffectScheduleWork()	throw(){	__BEGIN_TRY	//SAFE_DELETE(m_pData);		// 内靛俊 蝶扼辑, void* m_pData甫 某胶泼秦辑, 	// 舅嘎霸 瘤况拎具 茄促.	if (m_Code == WORKCODE_ADD_VAMPIRE_PORTAL)	{		Assert(m_pData == NULL);	}	else if (m_Code == WORKCODE_DELETE)	{		Assert(m_pData == NULL);	}	else	{	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// class EffectSchedule member methods//////////////////////////////////////////////////////////////////////////////EffectSchedule::EffectSchedule()	throw(){	__BEGIN_TRY	m_pEffect = NULL;	__END_CATCH}EffectSchedule::~EffectSchedule()	throw(){	__BEGIN_TRY	while (!m_WorkList.empty())	{		EffectScheduleWork* pWork = getFrontWork();		SAFE_DELETE(pWork);	}	__END_CATCH}void EffectSchedule::addWork(int WorkCode, void* pData) 	throw(){	__BEGIN_TRY	Assert(WorkCode < WORKCODE_MAX);	EffectScheduleWork* pWork = new EffectScheduleWork();	pWork->setCode(WorkCode);	pWork->setData(pData);	m_WorkList.push_back(pWork);	__END_CATCH}EffectScheduleWork* EffectSchedule::getFrontWork(void) 	throw(){	__BEGIN_TRY	if (!m_WorkList.empty())	{		EffectScheduleWork* pWork = m_WorkList.front();		m_WorkList.pop_front();		return pWork;	}	return NULL;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// class EffectScheduleManager member methods//////////////////////////////////////////////////////////////////////////////EffectScheduleManager::EffectScheduleManager()	throw(){	__BEGIN_TRY	__END_CATCH}EffectScheduleManager::~EffectScheduleManager()	throw(){	__BEGIN_TRY	while (!m_EffectScheduleList.empty())	{		EffectSchedule* pSchedule = m_EffectScheduleList.front();		m_EffectScheduleList.pop_front();		SAFE_DELETE(pSchedule);	}	__END_CATCH}void EffectScheduleManager::addEffectSchedule(EffectSchedule* pEffectSchedule) 	throw(){	__BEGIN_TRY	Assert(pEffectSchedule != NULL);	__ENTER_CRITICAL_SECTION(m_Mutex)	m_EffectScheduleList.push_back(pEffectSchedule);	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void EffectScheduleManager::heartbeat(void)	throw(){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	// 葛电 胶纳领阑 贸府且 锭鳖瘤...	while (!m_EffectScheduleList.empty())	{		EffectSchedule* pEffectSchedule = m_EffectScheduleList.front();		Assert(pEffectSchedule != NULL);		Effect* pEffect = pEffectSchedule->getEffect();		// 累诀 措惑捞 登绰 捞棋飘啊 酒流 粮犁茄促搁, 累诀俊 甸绢埃促.		if (pEffect != NULL)		{			// 葛电 老阑 贸府且 锭鳖瘤...			while (true)			{				EffectScheduleWork* pWork = pEffectSchedule->getFrontWork();				// 葛电 老阑 场陈促搁 宏饭捞农				if (pWork == NULL) break;				int   WorkCode = pWork->getCode();				//void* pData    = pWork->getData();				// 阿 累诀 内靛俊 蝶扼辑 老阑 贸府茄促.				if (WorkCode == WORKCODE_ADD_VAMPIRE_PORTAL)				{					Assert(pEffect->getEffectClass() == Effect::EFFECT_CLASS_VAMPIRE_PORTAL);					EffectVampirePortal* pEffectVampirePortal = dynamic_cast<EffectVampirePortal*>(pEffect);					Assert(pEffectVampirePortal != NULL);					// 泅犁 捞棋飘 郴何俊 乐绰 谅钎绰 力老 贸澜俊 啊绊磊 沁带 谅钎促.					// 弊 鸥老俊 鞍篮 捞棋飘啊 乐芭唱 窍绰 捞蜡肺 谅钎绰 荐沥瞪 荐 乐促.					Zone* pZone = pEffectVampirePortal->getZone();					ZoneCoord_t cx = pEffectVampirePortal->getX();					ZoneCoord_t cy = pEffectVampirePortal->getY();					ZONE_COORD ZoneCoord = pEffectVampirePortal->getZoneCoord();					TPOINT pt = findSuitablePositionForEffect(pZone, cx, cy, Effect::EFFECT_CLASS_VAMPIRE_PORTAL);					if (pt.x != -1)					{						// 谅钎啊 荐沥登菌阑 瘤档 葛福聪, 谅钎甫 荐沥秦霖促.						pEffectVampirePortal->setX(pt.x);						pEffectVampirePortal->setY(pt.y);						// OID甫 殿废罐酒具 find扼电瘤 窍绰 累诀阑 角青且 荐 乐促.						ObjectRegistry& OR = pZone->getObjectRegistry();						OR.registerObject(pEffectVampirePortal);						// 鸥老 棺 轨颇捞绢 器呕 概聪历俊 殿废茄促.						Tile& rTile = pZone->getTile(pt.x, pt.y);						rTile.addEffect(pEffectVampirePortal);						EffectManager* pVampirePortalManager = pZone->getVampirePortalManager();						pVampirePortalManager->addEffect(pEffectVampirePortal);						// 鸥老俊 捞棋飘啊 嘿菌栏聪, 宏肺靛某胶泼阑 秦霖促.						GCAddVampirePortal gcAddVampirePortal;						gcAddVampirePortal.setObjectID(pEffectVampirePortal->getObjectID());						gcAddVampirePortal.setOwnerID(pEffectVampirePortal->getOwnerID());						gcAddVampirePortal.setX(pt.x);						gcAddVampirePortal.setY(pt.y);						gcAddVampirePortal.setTargetZoneID(ZoneCoord.id);						gcAddVampirePortal.setTargetX(ZoneCoord.x);						gcAddVampirePortal.setTargetY(ZoneCoord.y);						gcAddVampirePortal.setDuration(pEffectVampirePortal->getRemainDuration());						gcAddVampirePortal.setCreateFlag(1);						pZone->broadcastPacket(pt.x, pt.y, &gcAddVampirePortal);					}					else					{						SAFE_DELETE(pEffectVampirePortal);					}				}				else if (WorkCode == WORKCODE_DELETE)				{					pEffect->setDeadline(0);				}				else				{					Assert(false);				}			}		}		m_EffectScheduleList.pop_front();		SAFE_DELETE(pEffectSchedule);	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}

⌨️ 快捷键说明

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