1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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
|