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

📄 questtrigger.cpp

📁 墨香最新私服
💻 CPP
字号:
// QuestTrigger.cpp: implementation of the CQuestTrigger class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "QuestTrigger.h"

#include "QuestScriptLoader.h"
#include "QuestCondition.h"
//#include "QuestLimit.h"
#include "QuestExecute.h"
#include "QuestEvent.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CQuestTrigger::CQuestTrigger( CStrTokenizer* pTokens, DWORD dwQuestIdx, DWORD dwSubQuestIdx )
{
	ReadTrigger( pTokens, dwQuestIdx, dwSubQuestIdx );
}

CQuestTrigger::~CQuestTrigger()
{
	Release();
}

void CQuestTrigger::Release()
{
	if( m_pQuestCondition )
	{
		delete m_pQuestCondition;
		m_pQuestCondition = NULL;
	}

	CQuestExecute* pQuestExecute = NULL;
	PTRLISTPOS pos = m_QuestExeList.GetHeadPosition();
	while( pos )
	{
		pQuestExecute = (CQuestExecute*)m_QuestExeList.GetNext( pos );
		if( pQuestExecute )
		{
			delete pQuestExecute;
		}
	}
	m_QuestExeList.RemoveAll();
}

BOOL CQuestTrigger::ReadTrigger( CStrTokenizer* pTokens, DWORD dwQuestIdx, DWORD dwSubQuestIdx )
{
	char* OneToken;

	while( (OneToken = pTokens->GetNextTokenUpper()) != NULL )
	{
		if( OneToken[0] == '@' )
			m_pQuestCondition = CQuestScriptLoader::LoadQuestCondition( OneToken, pTokens, dwQuestIdx, dwSubQuestIdx );
		else if( OneToken[0] == '*' )
			m_QuestExeList.AddTail( CQuestScriptLoader::LoadQuestExecute( OneToken, pTokens, dwQuestIdx, dwSubQuestIdx ) );		
	}
	return TRUE;
}

BOOL CQuestTrigger::OnQuestEvent( PLAYERTYPE* pPlayer, CQuestGroup* pQuestGroup, CQuest* pQuest, CQuestEvent* pQuestEvent )
{
	// condition
	if( !m_pQuestCondition->CheckCondition( pQuestEvent ) )
		return FALSE;

	// execute
	PTRLISTPOS pos = m_QuestExeList.GetHeadPosition();
	CQuestExecute* pQuestExecute = NULL;
	while( pos )
	{
		pQuestExecute = (CQuestExecute*)m_QuestExeList.GetNext( pos );
		if( pQuestExecute )
			pQuestExecute->Execute( pPlayer, pQuestGroup, pQuest );
	}

	return TRUE;
}

⌨️ 快捷键说明

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