summaryrefslogtreecommitdiff
path: root/game/shared/tf/quest_objective_manager.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/quest_objective_manager.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/tf/quest_objective_manager.h')
-rw-r--r--game/shared/tf/quest_objective_manager.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/game/shared/tf/quest_objective_manager.h b/game/shared/tf/quest_objective_manager.h
new file mode 100644
index 0000000..8de993b
--- /dev/null
+++ b/game/shared/tf/quest_objective_manager.h
@@ -0,0 +1,156 @@
+//========= 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