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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Defines a logical entity which passes achievement related events to the gamerules system.
#include "cbase.h"
#include "gamerules.h"
#include "entityinput.h"
#include "entityoutput.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
/*
These are the string choices in the FGD:
ACHIEVEMENT_EVENT_HL2_HIT_CANCOP_WITHCAN
ACHIEVEMENT_EVENT_HL2_ESCAPE_APARTMENTRAID
ACHIEVEMENT_EVENT_HL2_FIND_ONEGMAN
ACHIEVEMENT_EVENT_HL2_BREAK_MINITELEPORTER
ACHIEVEMENT_EVENT_HL2_GET_PISTOL
ACHIEVEMENT_EVENT_HL2_GET_AIRBOAT
ACHIEVEMENT_EVENT_HL2_GET_AIRBOATGUN
ACHIEVEMENT_EVENT_HL2_FIND_VORTIGAUNTCAVE
ACHIEVEMENT_EVENT_HL2_KILL_CHOPPER
ACHIEVEMENT_EVENT_HL2_FIND_HEVFACEPLATE
ACHIEVEMENT_EVENT_HL2_GET_GRAVITYGUN
ACHIEVEMENT_EVENT_HL2_MAKEABASKET
ACHIEVEMENT_EVENT_HL2_BEAT_RAVENHOLM_NOWEAPONS_START
ACHIEVEMENT_EVENT_HL2_BEAT_RAVENHOLM_NOWEAPONS_END
ACHIEVEMENT_EVENT_HL2_BEAT_CEMETERY
ACHIEVEMENT_EVENT_HL2_KILL_ENEMIES_WITHCRANE
ACHIEVEMENT_EVENT_HL2_PIN_SOLDIER_TOBILLBOARD
ACHIEVEMENT_EVENT_HL2_KILL_ODESSAGUNSHIP
ACHIEVEMENT_EVENT_HL2_BEAT_DONTTOUCHSAND
ACHIEVEMENT_EVENT_HL2_ENTER_NOVAPROSPEKT,
ACHIEVEMENT_EVENT_HL2_BEAT_TURRETSTANDOFF2
ACHIEVEMENT_EVENT_HL2_BEAT_NOVAPROSPEKT
ACHIEVEMENT_EVENT_HL2_BEAT_TOXICTUNNEL
ACHIEVEMENT_EVENT_HL2_BEAT_PLAZASTANDOFF
ACHIEVEMENT_EVENT_HL2_KILL_ALLC17SNIPERS
ACHIEVEMENT_EVENT_HL2_BEAT_SUPRESSIONDEVICE
ACHIEVEMENT_EVENT_HL2_BEAT_C17STRIDERSTANDOFF
ACHIEVEMENT_EVENT_HL2_REACH_BREENSOFFICE
ACHIEVEMENT_EVENT_HL2_FIND_LAMDACACHE
// EP1
ACHIEVEMENT_EVENT_EP1_BEAT_MAINELEVATOR
ACHIEVEMENT_EVENT_EP1_BEAT_CITADELCORE
ACHIEVEMENT_EVENT_EP1_BEAT_CITADELCORE_NOSTALKERKILLS
ACHIEVEMENT_EVENT_EP1_BEAT_GARAGEELEVATORSTANDOFF
ACHIEVEMENT_EVENT_EP1_KILL_ENEMIES_WITHSNIPERALYX
ACHIEVEMENT_EVENT_EP1_BEAT_HOSPITALATTICGUNSHIP
ACHIEVEMENT_EVENT_EP1_BEAT_CITIZENESCORT_NOCITIZENDEATHS
// EP2
ACHIEVEMENT_EVENT_EP2_BREAK_ALLWEBS
ACHIEVEMENT_EVENT_EP2_BEAT_ANTLIONINVASION
ACHIEVEMENT_EVENT_EP2_BEAT_ANTLIONGUARDS
ACHIEVEMENT_EVENT_EP2_BEAT_HUNTERAMBUSH
ACHIEVEMENT_EVENT_EP2_KILL_COMBINECANNON
ACHIEVEMENT_EVENT_EP2_FIND_RADAR_CACHE
ACHIEVEMENT_EVENT_EP2_BEAT_RACEWITHDOG
ACHIEVEMENT_EVENT_EP2_BEAT_ROCKETCACHEPUZZLE
ACHIEVEMENT_EVENT_EP2_BEAT_WHITEFORESTINN
ACHIEVEMENT_EVENT_EP2_PUT_ITEMINROCKET
ACHIEVEMENT_EVENT_EP2_BEAT_MISSILESILO2
ACHIEVEMENT_EVENT_EP2_BEAT_OUTLAND12_NOBUILDINGSDESTROYED
// PORTAL
ACHIEVEMENT_EVENT_PORTAL_GET_PORTALGUNS
ACHIEVEMENT_EVENT_PORTAL_KILL_COMPANIONCUBE
ACHIEVEMENT_EVENT_PORTAL_ESCAPE_TESTCHAMBERS
ACHIEVEMENT_EVENT_PORTAL_BEAT_GAME
*/
// Allows map logic to send achievement related events to the achievement system.
class CLogicAchievement : public CLogicalEntity
{
public:
DECLARE_CLASS( CLogicAchievement, CLogicalEntity );
CLogicAchievement();
protected:
// Inputs
void InputFireEvent( inputdata_t &inputdata );
void InputEnable( inputdata_t &inputdata );
void InputDisable( inputdata_t &inputdata );
void InputToggle( inputdata_t &inputdata );
bool m_bDisabled;
string_t m_iszAchievementEventID; // Which achievement event this entity marks
COutputEvent m_OnFired;
DECLARE_DATADESC();
};
LINK_ENTITY_TO_CLASS( logic_achievement, CLogicAchievement );
BEGIN_DATADESC( CLogicAchievement )
DEFINE_KEYFIELD( m_bDisabled, FIELD_BOOLEAN, "StartDisabled" ),
DEFINE_KEYFIELD( m_iszAchievementEventID, FIELD_STRING, "AchievementEvent" ),
// Inputs
DEFINE_INPUTFUNC( FIELD_VOID, "FireEvent", InputFireEvent ),
DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ),
DEFINE_INPUTFUNC( FIELD_VOID, "Toggle", InputToggle ),
// Outputs
DEFINE_OUTPUT( m_OnFired, "OnFired" ),
END_DATADESC()
//-----------------------------------------------------------------------------
// Purpose: Constructor.
//-----------------------------------------------------------------------------
CLogicAchievement::CLogicAchievement(void)
{
m_iszAchievementEventID = NULL_STRING;
}
#define ACHIEVEMENT_PREFIX "ACHIEVEMENT_EVENT_"
//-----------------------------------------------------------------------------
// Purpose: Sends the achievement event to the achievement marking system.
//-----------------------------------------------------------------------------
void CLogicAchievement::InputFireEvent( inputdata_t &inputdata )
{
// If we're active, and our string matched a valid achievement ID
if ( !m_bDisabled && m_iszAchievementEventID != NULL_STRING)
{
m_OnFired.FireOutput( inputdata.pActivator, this );
char const *pchName = STRING( m_iszAchievementEventID );
int nPrefixLen = Q_strlen( ACHIEVEMENT_PREFIX );
if ( !Q_strnicmp( pchName, ACHIEVEMENT_PREFIX, nPrefixLen ) )
{
// Skip the prefix
pchName += nPrefixLen;
if ( pchName && *pchName )
{
CBroadcastRecipientFilter filter;
g_pGameRules->MarkAchievement( filter, pchName );
}
}
}
}
//------------------------------------------------------------------------------
// Purpose: Turns on the relay, allowing it to fire outputs.
//------------------------------------------------------------------------------
void CLogicAchievement::InputEnable( inputdata_t &inputdata )
{
m_bDisabled = false;
}
//------------------------------------------------------------------------------
// Purpose: Turns off the relay, preventing it from firing outputs.
//------------------------------------------------------------------------------
void CLogicAchievement::InputDisable( inputdata_t &inputdata )
{
m_bDisabled = true;
}
//------------------------------------------------------------------------------
// Purpose: Toggles the enabled/disabled state of the relay.
//------------------------------------------------------------------------------
void CLogicAchievement::InputToggle( inputdata_t &inputdata )
{
m_bDisabled = !m_bDisabled;
}
|