You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.8 KiB
156 lines
4.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef QUEST_OBJECTIVE_MANAGER_H |
|
#define QUEST_OBJECTIVE_MANAGER_H |
|
|
|
#include "GameEventListener.h" |
|
#include "econ_item_constants.h" |
|
#include "econ_item_inventory.h" |
|
#include "tf_quest_restriction.h" |
|
#include "econ_dynamic_recipe.h" |
|
#include "shared_object_tracker.h" |
|
|
|
#ifdef GAME_DLL |
|
#include "tf_player.h" |
|
#else |
|
#include "c_tf_player.h" |
|
#endif |
|
|
|
|
|
#if defined( _WIN32 ) |
|
#pragma once |
|
#endif |
|
|
|
using namespace GCSDK; |
|
|
|
|
|
class CQuestItemTracker; |
|
|
|
class CBaseQuestObjectiveTracker : public CTFQuestEvaluator |
|
{ |
|
public: |
|
DECLARE_CLASS( CBaseQuestObjectiveTracker, CBaseQuestObjectiveTracker ) |
|
|
|
CBaseQuestObjectiveTracker( const CTFQuestObjectiveDefinition* pObjective, CQuestItemTracker* pParent ); |
|
virtual ~CBaseQuestObjectiveTracker(); |
|
|
|
uint32 GetObjectiveDefIndex() const { return m_nObjectiveDefIndex; } |
|
|
|
// CTFQuestConditionEvaluator specific |
|
virtual const char *GetConditionName() const OVERRIDE { return "tracker"; } |
|
virtual bool IsValidForPlayer( const CTFPlayer *pOwner, InvalidReasonsContainer_t& invalidReasons ) const; |
|
virtual const CTFPlayer *GetQuestOwner() const OVERRIDE; |
|
virtual void EvaluateCondition( CTFQuestEvaluator *pSender, int nScore ) OVERRIDE; |
|
virtual void ResetCondition() OVERRIDE; |
|
|
|
bool UpdateConditions(); |
|
|
|
protected: |
|
const CTFPlayer* GetTrackedPlayer() const; |
|
void IncrementCount( int nIncrementValue ); |
|
|
|
uint32 m_nObjectiveDefIndex; |
|
|
|
private: |
|
CTFQuestEvaluator *m_pEvaluator; |
|
CQuestItemTracker *m_pParent; |
|
}; |
|
|
|
|
|
class CQuestItemTracker : public CBaseSOTracker |
|
{ |
|
public: |
|
CQuestItemTracker( const CSharedObject* pItem, CSteamID SteamIDOwner, CSOTrackerManager* pManager ); |
|
~CQuestItemTracker(); |
|
|
|
virtual void OnUpdate() OVERRIDE; |
|
virtual void OnRemove() OVERRIDE; |
|
|
|
void UpdatePointsFromSOItem(); |
|
|
|
const CBaseQuestObjectiveTracker* FindTrackerForDefIndex( uint32 nDefIndex ) const; |
|
inline const CUtlVector< const CBaseQuestObjectiveTracker* >& GetTrackers() const { return m_vecObjectiveTrackers; } |
|
|
|
uint32 GetEarnedStandardPoints() const; |
|
uint32 GetEarnedBonusPoints() const; |
|
const CEconItem* GetItem() const { return static_cast< const CEconItem* >( m_pSObject ); } |
|
|
|
void IncrementCount( uint32 nIncrementValue, const CQuestObjectiveDefinition* pObjective ); |
|
virtual void CommitChangesToDB() OVERRIDE; |
|
|
|
int IsValidForPlayer( const CTFPlayer *pOwner, InvalidReasonsContainer_t& invalidReasons ) const; |
|
|
|
#ifdef CLIENT_DLL |
|
void UpdateFromServer( uint32 nStandardPoints, uint32 nBonusPoints ); |
|
#else |
|
void SendUpdateToClient( const CQuestObjectiveDefinition* pObjective ); |
|
#endif |
|
|
|
#if defined( DEBUG ) || defined( STAGING_ONLY ) |
|
void DBG_CompleteQuest(); |
|
#endif |
|
|
|
virtual void Spew() const OVERRIDE; |
|
|
|
private: |
|
|
|
bool DoesObjectiveNeedToBeTracked( const CQuestObjectiveDefinition* pObjective ) const; |
|
|
|
#ifdef GAME_DLL |
|
uint32 m_nStartingStandardPoints; |
|
uint32 m_nStartingBonusPoints; |
|
#endif |
|
|
|
uint32 m_nStandardPoints; |
|
uint32 m_nBonusPoints; |
|
|
|
const CEconItem* m_pItem; |
|
|
|
CUtlVector< const CBaseQuestObjectiveTracker* > m_vecObjectiveTrackers; |
|
}; |
|
|
|
// A class to handle the creation and deletion of quest objective trackers. Automatically |
|
// subscribes to the local player's SOCache and will subscribe to any connecting players' |
|
// SOCaches when they connect. |
|
class CQuestObjectiveManager : public CSOTrackerManager |
|
{ |
|
public: |
|
DECLARE_CLASS( CQuestObjectiveManager, CSOTrackerManager ) |
|
|
|
CQuestObjectiveManager(); |
|
virtual ~CQuestObjectiveManager(); |
|
|
|
virtual SOTrackerMap_t::KeyType_t GetKeyForObjectTracker( const CSharedObject* pItem, CSteamID steamIDOwner ) OVERRIDE; |
|
|
|
#ifdef CLIENT_DLL |
|
void UpdateFromServer( itemid_t nID, uint32 nStandardPoints, uint32 nBonusPoints ); |
|
#endif |
|
|
|
|
|
#if defined( DEBUG ) || defined( STAGING_ONLY ) |
|
void DBG_CompleteQuests(); |
|
#endif |
|
|
|
private: |
|
#ifdef GAME_DLL |
|
void SendMessageForCommit( const ::google::protobuf::Message* pProtoMessage ) const; |
|
#endif |
|
|
|
virtual int GetType() const OVERRIDE { return CEconItem::k_nTypeID; } |
|
virtual const char* GetName() const { return "QuestObjectiveManager"; } |
|
virtual CFmtStr GetDebugObjectDescription( const CSharedObject* pItem ) const; |
|
virtual CBaseSOTracker* AllocateNewTracker( const CSharedObject* pItem, CSteamID steamIDOwner, CSOTrackerManager* pManager ) const OVERRIDE; |
|
virtual ::google::protobuf::Message* AllocateNewProtoMessage() const OVERRIDE; |
|
virtual void OnCommitRecieved( const ::google::protobuf::Message* pProtoMsg ) OVERRIDE; |
|
virtual bool ShouldTrackObject( const CSteamID & steamIDOwner, const CSharedObject *pObject ) const OVERRIDE; |
|
virtual int CompareRecords( const ::google::protobuf::Message* pNewProtoMsg, const ::google::protobuf::Message* pExistingProtoMsg ) const OVERRIDE; |
|
}; |
|
|
|
CQuestObjectiveManager* QuestObjectiveManager(); |
|
|
|
#endif // QUEST_OBJECTIVE_MANAGER_H
|
|
|