mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-12 19:59:09 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user