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

📄 quest.cpp

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

#include "stdafx.h"
#include "Quest.h"

#include "..\[CC]Quest\QuestInfo.h"
#include "..\[CC]Quest\SubQuestInfo.h"
#include "..\[CC]Quest\QuestEvent.h"
#include "Quest.h"
#include "QuestManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CQuest::CQuest( CPlayer* pPlayer, CQuestInfo* pQuestInfo )
{
	m_pPlayer = pPlayer;
	m_pQuestInfo = pQuestInfo;

	memset( m_CurSubQuestInfoArray, 0, sizeof(CSubQuestInfo*)*MAX_SUBQUEST );
	m_CurSubQuestInfoArray[0] = m_pQuestInfo->GetSubQuestInfo( 0 );

	m_dwSubQuestCount = m_pQuestInfo->GetSubQuestCount();
	memset( m_SubQuestTable, 0, sizeof(SUBQUEST)*MAX_SUBQUEST );
	m_dwSubQuestFlag = 0;
	m_dwData = 0;
	m_dwTime = 0;
}

CQuest::~CQuest()
{
}

void CQuest::SetMainQuestData( DWORD dwSubQuestFlag, DWORD dwData, DWORD dwTime )
{
	m_CurSubQuestInfoArray[0] = NULL;
	m_dwSubQuestFlag = dwSubQuestFlag;
	m_dwData = dwData;
	m_dwTime = dwTime;
}

void CQuest::SetSubQuestData( DWORD dwSubQuestIdx, DWORD dwData, DWORD dwTime )
{
	m_CurSubQuestInfoArray[dwSubQuestIdx] = m_pQuestInfo->GetSubQuestInfo( dwSubQuestIdx );
	m_SubQuestTable[dwSubQuestIdx].dwData = dwData;
	m_SubQuestTable[dwSubQuestIdx].dwTime = dwTime;
}

void CQuest::SetSubQuestFlag( DWORD dwSubQuestIdx )
{
	DWORD value = 1;
	m_dwSubQuestFlag = m_dwSubQuestFlag | ( value << (31-dwSubQuestIdx) );
}

BOOL CQuest::EndQuest( DWORD dwQuestIdx, DWORD dwSubQuestIdx )
{	
	if( dwSubQuestIdx )	// 馆汗
	{
		memset( m_CurSubQuestInfoArray, 0, sizeof(CSubQuestInfo*)*MAX_SUBQUEST );
		m_CurSubQuestInfoArray[0] = m_pQuestInfo->GetSubQuestInfo( 0 );

		memset( m_SubQuestTable, 0, sizeof(SUBQUEST)*MAX_SUBQUEST );
		m_dwSubQuestFlag = 0;
		m_dwData = 0;
		m_dwTime = CreateTime();
	}
	else				// 1锅
	{
		memset( m_CurSubQuestInfoArray, 0, sizeof(CSubQuestInfo*)*MAX_SUBQUEST );
		m_dwData = 1;
		m_dwTime = CreateTime();
	}
	return TRUE;
}

BOOL CQuest::StartSubQuest( DWORD dwQuestIdx, DWORD dwSubQuestIdx )
{
	if( m_CurSubQuestInfoArray[dwSubQuestIdx] == NULL )
	{
		m_CurSubQuestInfoArray[dwSubQuestIdx] = m_pQuestInfo->GetSubQuestInfo( dwSubQuestIdx );
		m_SubQuestTable[dwSubQuestIdx].dwData = 0;
		m_SubQuestTable[dwSubQuestIdx].dwTime = CreateTime();
		return TRUE;
	}
	return FALSE;
}

BOOL CQuest::EndSubQuest( DWORD dwQuestIdx, DWORD dwSubQuestIdx )
{
	if( m_CurSubQuestInfoArray[dwSubQuestIdx] )
	{
		m_CurSubQuestInfoArray[dwSubQuestIdx] = NULL;
		m_SubQuestTable[dwSubQuestIdx].dwData = 0;		
		m_SubQuestTable[dwSubQuestIdx].dwTime = CreateTime();
		SetSubQuestFlag( dwSubQuestIdx );	
		if( dwSubQuestIdx == 0 )	// Quest Start
		{
			m_dwData = 0;
			m_dwTime = m_SubQuestTable[dwSubQuestIdx].dwTime;
		}
		return TRUE;
	}
	return FALSE;
}

BOOL CQuest::ChangeSubQuestValue( DWORD dwSubQuestIdx, DWORD dwKind )
{
	SUBQUEST* pSubQuest = &m_SubQuestTable[dwSubQuestIdx];
	switch( dwKind )
	{
	case eQuestValue_Add:
		{
			++pSubQuest->dwData;
		}
		break;
	case eQuestValue_Minus:
		{
			if( pSubQuest->dwData > 0 )
				--pSubQuest->dwData;		
			else
				pSubQuest->dwData = 0;
		}
		break;
	}
	return TRUE;
}

void CQuest::OnQuestEvent( CPlayer* pPlayer, CQuestGroup* pQuestGroup, CQuestEvent* pQuestEvent, DWORD dwQuestIdx )
{
	if( dwQuestIdx != 0 )
	if( m_pQuestInfo->GetQuestIdx() != dwQuestIdx )
		return;

	for( DWORD i = 0; i < m_dwSubQuestCount; ++i )
	{
		if( m_CurSubQuestInfoArray[i] )
			m_CurSubQuestInfoArray[i]->OnQuestEvent( pPlayer, pQuestGroup, this, pQuestEvent );
	}
}

// getfn
BOOL CQuest::IsSubQuestComplete( DWORD dwSubQuestIdx )
{
	DWORD value = 1;
	return ( m_dwSubQuestFlag & ( value << (31-dwSubQuestIdx) ) ) ? TRUE : FALSE;
}

DWORD CQuest::GetQuestIdx()
{
	return m_pQuestInfo->GetQuestIdx();
}

DWORD CQuest::CreateTime()
{
	// 矫埃拌魂
	SYSTEMTIME systime;
	GetLocalTime( &systime );
	DWORD year = systime.wYear%100;
	DWORD second = 6*systime.wMilliseconds/100;
	stTIME time;
	time.SetTime( year, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, second );	

	return time.value;
}









⌨️ 快捷键说明

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