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