📄 questtrigger.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 + -