91 lines
2.7 KiB
C++
91 lines
2.7 KiB
C++
#pragma once
|
|
//=======================================================================================================================
|
|
/// QuestInfoManagerEx class
|
|
/**
|
|
@author
|
|
Kim Min Wook < taiyo@webzen.com >
|
|
@since
|
|
2006. 3. 29
|
|
@remarks
|
|
- QuestInfo를 관리하고, QuestScriptLoader를 가진 싱글 객체
|
|
@history
|
|
-
|
|
*/
|
|
//=======================================================================================================================
|
|
|
|
#include <questinfomanager.h>
|
|
#include <QuestScriptLoader.h>
|
|
#include "QuestManager_Concrete.h"
|
|
#include "Player.h"
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
// <QuestInfoManagerEx>
|
|
class QuestInfoManagerEx : public QuestInfoManager, public IParser
|
|
{
|
|
public: QuestInfoManagerEx(VOID);
|
|
virtual ~QuestInfoManagerEx(VOID);
|
|
|
|
VOID Unload();
|
|
|
|
virtual BOOL LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload );
|
|
virtual BOOL Load( eSCRIPT_CODE ScriptCode, const TCHAR* pszFileName, BOOL bBigData, eSEPERATOR_MODE mode, const TCHAR* pszPackFileName, BOOL bReload ); //File용,.
|
|
virtual BOOL SolarLoad( eSCRIPT_CODE ScriptCode, BYTE* pSTREAM, DWORD dwSize, BOOL bBigData );
|
|
|
|
virtual VOID Release();
|
|
|
|
private: QuestScriptLoader m_ScriptLoader;
|
|
};
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
//
|
|
extern QuestInfoManagerEx g_QuestInfoManager;
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
//
|
|
class FindAutoAcceptQuest
|
|
{
|
|
private: Player* m_pPlayer;
|
|
|
|
public: FindAutoAcceptQuest( Player* pPlayer ) : m_pPlayer(pPlayer) {}
|
|
~FindAutoAcceptQuest() {}
|
|
|
|
bool operator() ( QCODE QCode )
|
|
{
|
|
QuestInfo* pQuestInfo = g_QuestInfoManager.FindQuestInfo( QCode );
|
|
if( !pQuestInfo )
|
|
return false;
|
|
return operator() ( pQuestInfo );
|
|
}
|
|
|
|
bool operator() ( QuestInfo* pQuestInfo )
|
|
{
|
|
QuestManager_Concrete* pQMGR = m_pPlayer->GetQuestManager();
|
|
if( pQMGR->IsQuestMax() )
|
|
{
|
|
MSG_CG_QUEST_ACCEPT_NAK msg;
|
|
msg.m_byErrorCode = RC::RC_QUEST_CANNOTQUEST_MAXCOUNT;
|
|
m_pPlayer->SendPacket( &msg, sizeof(msg) );
|
|
return false;
|
|
}
|
|
//
|
|
QCODE questCode = pQuestInfo->GetQuestCode();
|
|
Quest* pQuest = pQMGR->FindQuest( questCode );
|
|
if( pQuest )
|
|
return false;
|
|
|
|
pQuest = pQMGR->CreateQuest( questCode );
|
|
if( pQuest && pQuest->CanAccept(m_pPlayer) == RC::RC_QUEST_SUCCESS )
|
|
{
|
|
MSG_CG_QUEST_ACCEPT_CMD msgCMD;
|
|
msgCMD.m_QuestCode = (WORD)questCode;
|
|
m_pPlayer->SendPacket( &msgCMD, sizeof(msgCMD) );
|
|
return true;
|
|
}
|
|
|
|
pQMGR->DestroyQuest( questCode );
|
|
return false;
|
|
}
|
|
};
|
|
|
|
|