diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/shared/episodic | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/shared/episodic')
| -rw-r--r-- | mp/src/game/shared/episodic/achievements_ep1.cpp | 133 | ||||
| -rw-r--r-- | mp/src/game/shared/episodic/achievements_ep2.cpp | 186 | ||||
| -rw-r--r-- | mp/src/game/shared/episodic/achievements_epx.cpp | 101 | ||||
| -rw-r--r-- | mp/src/game/shared/episodic/npc_advisor_shared.h | 32 |
4 files changed, 452 insertions, 0 deletions
diff --git a/mp/src/game/shared/episodic/achievements_ep1.cpp b/mp/src/game/shared/episodic/achievements_ep1.cpp new file mode 100644 index 00000000..84647d08 --- /dev/null +++ b/mp/src/game/shared/episodic/achievements_ep1.cpp @@ -0,0 +1,133 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+
+#include "cbase.h"
+#include "achievementmgr.h"
+#include "baseachievement.h"
+
+#ifdef GAME_DLL
+
+
+class CAchievementEp1KillAntlionsWithCar : public CBaseAchievement
+{
+protected:
+
+ void Init()
+ {
+ SetFlags( ACH_LISTEN_PLAYER_KILL_ENEMY_EVENTS | ACH_SAVE_WITH_GAME );
+ SetInflictorFilter( "prop_physics" );
+ SetVictimFilter( "npc_antlion" );
+ SetGameDirFilter( "episodic" );
+ SetGoal( 15 );
+ }
+ virtual void Event_EntityKilled( CBaseEntity *pVictim, CBaseEntity *pAttacker, CBaseEntity *pInflictor, IGameEvent *event )
+ {
+ // any model that passed previous filters and begins with "props_vehicles" is a physics car
+ const char *pszName = GetModelName( pInflictor );
+ const char szPrefix[] = "props_vehicles";
+ if ( 0 == Q_strncmp( pszName, szPrefix, ARRAYSIZE( szPrefix ) - 1 ) )
+ {
+ IncrementCount();
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp1KillAntlionsWithCar, ACHIEVEMENT_EP1_KILL_ANTLIONS_WITHCARS, "EP1_KILL_ANTLIONS_WITHCARS", 5 );
+
+class CAchievementEp1KillEnemiesWithSniperAlyx : public CBaseAchievement
+{
+protected:
+
+ void Init()
+ {
+ SetFlags( ACH_LISTEN_KILL_ENEMY_EVENTS | ACH_SAVE_WITH_GAME );
+ SetInflictorEntityNameFilter( "sniper_alyx" );
+ SetGameDirFilter( "episodic" );
+ SetGoal( 30 );
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp1KillEnemiesWithSniperAlyx, ACHIEVEMENT_EP1_KILL_ENEMIES_WITHSNIPERALYX, "EP1_KILL_ENEMIES_WITHSNIPERALYX", 10 );
+
+class CAchievementEp1BeatCitizenEscortNoCitizenDeaths : public CFailableAchievement
+{
+protected:
+
+ void Init()
+ {
+ SetFlags( ACH_LISTEN_MAP_EVENTS | ACH_LISTEN_KILL_EVENTS | ACH_SAVE_WITH_GAME );
+ SetGameDirFilter( "episodic" );
+ SetGoal( 1 );
+ SetVictimFilter( "npc_citizen" );
+ }
+
+ virtual void Event_EntityKilled( CBaseEntity *pVictim, CBaseEntity *pAttacker, CBaseEntity *pInflictor, IGameEvent *event )
+ {
+ // if any citizens die while this achievement is active, achievement fails
+ SetFailed();
+ }
+
+ // map event where achievement is activated
+ virtual const char *GetActivationEventName() { return "EP1_BEAT_CITIZENESCORT_NOCITIZENDEATHS_START"; }
+ // map event where achievement is evaluated for success
+ virtual const char *GetEvaluationEventName() { return "EP1_BEAT_CITIZENESCORT_NOCITIZENDEATHS_END"; }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp1BeatCitizenEscortNoCitizenDeaths, ACHIEVEMENT_EP1_BEAT_CITIZENESCORT_NOCITIZENDEATHS, "EP1_BEAT_CITIZENESCORT_NOCITIZENDEATHS", 15 );
+
+extern int CalcPlayerAttacks( bool bBulletOnly );
+
+class CAchievementEp1BeatGameOneBullet : public CFailableAchievement
+{
+ DECLARE_CLASS( CAchievementEp1BeatGameOneBullet, CFailableAchievement );
+protected:
+
+ void Init()
+ {
+ SetFlags( ACH_LISTEN_MAP_EVENTS | ACH_SAVE_WITH_GAME );
+ SetGameDirFilter( "episodic" );
+ SetGoal( 1 );
+ }
+
+ virtual void OnEvaluationEvent()
+ {
+ // get # of attacks w/bullet weapons
+ int iBulletAttackCount = CalcPlayerAttacks( true );
+ // if more than 1 bullet fired, fail
+ if ( iBulletAttackCount > 1 )
+ {
+ SetFailed();
+ }
+ BaseClass::OnEvaluationEvent();
+ }
+
+ // map event where achievement is activated
+ virtual const char *GetActivationEventName() { return "EP1_START_GAME"; }
+ // map event where achievement is evaluated for success
+ virtual const char *GetEvaluationEventName() { return "EP1_BEAT_GAME"; }
+
+ // additional status for debugging
+ virtual void PrintAdditionalStatus()
+ {
+ if ( m_bActivated )
+ {
+ Msg( "Player bullet attacks: %d\n", CalcPlayerAttacks( true ) );
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp1BeatGameOneBullet, ACHIEVEMENT_EP1_BEAT_GAME_ONEBULLET, "EP1_BEAT_GAME_ONEBULLET", 40 );
+
+// Ep1-specific macro that sets game dir filter. We need this because Ep1/Ep2/... share a binary so we need runtime check against running game.
+#define DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( achievementID, achievementName, iPointValue ) \
+ DECLARE_MAP_EVENT_ACHIEVEMENT_( achievementID, achievementName, "episodic", iPointValue, false )
+
+// achievements which are won by a map event firing once
+DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP1_BEAT_MAINELEVATOR, "EP1_BEAT_MAINELEVATOR", 5 );
+DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP1_BEAT_CITADELCORE, "EP1_BEAT_CITADELCORE", 5 );
+DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP1_BEAT_CITADELCORE_NOSTALKERKILLS, "EP1_BEAT_CITADELCORE_NOSTALKERKILLS", 10 );
+DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP1_BEAT_GARAGEELEVATORSTANDOFF, "EP1_BEAT_GARAGEELEVATORSTANDOFF", 10 );
+DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP1_BEAT_HOSPITALATTICGUNSHIP, "EP1_BEAT_HOSPITALATTICGUNSHIP", 5 );
+DECLARE_EP1_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP1_BEAT_GAME, "EP1_BEAT_GAME", 20 );
+
+#endif // GAME_DLL
\ No newline at end of file diff --git a/mp/src/game/shared/episodic/achievements_ep2.cpp b/mp/src/game/shared/episodic/achievements_ep2.cpp new file mode 100644 index 00000000..7d0ae403 --- /dev/null +++ b/mp/src/game/shared/episodic/achievements_ep2.cpp @@ -0,0 +1,186 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+
+#include "cbase.h"
+
+#ifdef GAME_DLL
+
+#include "achievementmgr.h"
+#include "baseachievement.h"
+#include "iservervehicle.h"
+#include "npc_antlion.h"
+#include "npc_hunter.h"
+
+
+class CAchievementEp2KillPoisonAntlion : public CBaseAchievement
+{
+protected:
+
+ virtual void Init()
+ {
+ SetVictimFilter( "npc_antlion" );
+ SetFlags( ACH_LISTEN_PLAYER_KILL_ENEMY_EVENTS | ACH_SAVE_WITH_GAME );
+ SetGameDirFilter( "ep2" );
+ SetGoal( 1 );
+ }
+
+ virtual void Event_EntityKilled( CBaseEntity *pVictim, CBaseEntity *pAttacker, CBaseEntity *pInflictor, IGameEvent *event )
+ {
+ CNPC_Antlion *pAntlion = dynamic_cast<CNPC_Antlion *>( pVictim );
+ if ( pAntlion && pAntlion->IsWorker() )
+ {
+ IncrementCount();
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2KillPoisonAntlion, ACHIEVEMENT_EP2_KILL_POISONANTLION, "EP2_KILL_POISONANTLION", 5 );
+
+class CAchievementEp2KillAllGrubs : public CBaseAchievement
+{
+protected:
+
+ virtual void Init()
+ {
+ SetVictimFilter( "npc_antlion_grub" );
+ SetFlags( ACH_LISTEN_KILL_EVENTS | ACH_SAVE_WITH_GAME );
+ SetGameDirFilter( "ep2" );
+ SetGoal( 333 );
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2KillAllGrubs, ACHIEVEMENT_EP2_KILL_ALLGRUBS, "EP2_KILL_ALLGRUBS", 20 );
+
+class CAchievementEp2KillEnemiesWithCar : public CBaseAchievement
+{
+protected:
+
+ virtual void Init()
+ {
+ SetFlags( ACH_LISTEN_KILL_ENEMY_EVENTS | ACH_SAVE_WITH_GAME );
+ SetInflictorFilter( "prop_vehicle_jeep" );
+ SetGameDirFilter( "ep2" );
+ SetGoal( 20 );
+ }
+
+ virtual void Event_EntityKilled( CBaseEntity *pVictim, CBaseEntity *pAttacker, CBaseEntity *pInflictor, IGameEvent *event )
+ {
+ // count this if the object is a driveable vehicle and local player is driving
+ CBasePlayer *pLocalPlayer = UTIL_GetLocalPlayer();
+ IDrivableVehicle *pDriveableVehicle = dynamic_cast<IDrivableVehicle *>( pInflictor );
+ if ( pLocalPlayer && pDriveableVehicle && pDriveableVehicle->GetDriver() == pLocalPlayer )
+ {
+ IncrementCount();
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2KillEnemiesWithCar, ACHIEVEMENT_EP2_KILL_ENEMIES_WITHCAR, "EP2_KILL_ENEMIES_WITHCAR", 5 );
+
+class CAchievementEp2KillHunterWithFlechette : public CBaseAchievement
+{
+protected:
+ void Init()
+ {
+ SetFlags( ACH_LISTEN_KILL_EVENTS | ACH_SAVE_WITH_GAME );
+ SetVictimFilter( "npc_hunter" );
+ SetInflictorFilter( "hunter_flechette" );
+ SetGameDirFilter( "ep2" );
+ SetGoal( 1 );
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2KillHunterWithFlechette, ACHIEVEMENT_EP2_KILL_HUNTER_WITHFLECHETTES, "EP2_KILL_HUNTER_WITHFLECHETTES", 10 );
+
+class CAchievementEp2FindAllWebCaches : public CBaseAchievement
+{
+ virtual void Init()
+ {
+ static const char *szComponents[] =
+ {
+ "EP2_WEBCACHE_01", "EP2_WEBCACHE_02", "EP2_WEBCACHE_03", "EP2_WEBCACHE_04",
+ "EP2_WEBCACHE_05", "EP2_WEBCACHE_06", "EP2_WEBCACHE_07", "EP2_WEBCACHE_08", "EP2_WEBCACHE_09"
+ };
+ SetFlags( ACH_HAS_COMPONENTS | ACH_LISTEN_COMPONENT_EVENTS | ACH_SAVE_GLOBAL );
+ m_pszComponentNames = szComponents;
+ m_iNumComponents = ARRAYSIZE( szComponents );
+ SetComponentPrefix( "EP2_WEBCACHE" );
+ SetGameDirFilter( "ep2" );
+ SetGoal( m_iNumComponents );
+ }
+
+ // don't show progress notifications for this achievement, it's distracting
+ virtual bool ShouldShowProgressNotification() { return false; }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2FindAllWebCaches , ACHIEVEMENT_EP2_BREAK_ALLWEBS, "EP2_BREAK_ALLWEBS", 5 );
+
+class CAchievementEp2KillChopperNoMisses: public CFailableAchievement
+{
+protected:
+
+ void Init()
+ {
+ SetFlags( ACH_LISTEN_MAP_EVENTS | ACH_SAVE_WITH_GAME );
+ SetGameDirFilter( "ep2" );
+ SetGoal( 1 );
+ }
+
+ virtual void ListenForEvents()
+ {
+ ListenForGameEvent( "helicopter_grenade_punt_miss" );
+ }
+
+ // map event where achievement is activated
+ virtual const char *GetActivationEventName() { return "EP2_KILL_CHOPPER_NOMISSES_START"; }
+ // map event where achievement is evaluated for success
+ virtual const char *GetEvaluationEventName() { return "EP2_KILL_CHOPPER_NOMISSES_END"; }
+
+ void FireGameEvent_Internal( IGameEvent *event )
+ {
+ if ( 0 == Q_strcmp( event->GetName(), "helicopter_grenade_punt_miss" ) )
+ {
+ SetFailed();
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2KillChopperNoMisses, ACHIEVEMENT_EP2_KILL_CHOPPER_NOMISSES, "EP2_KILL_CHOPPER_NOMISSES", 15 );
+
+class CAchievementEp2FindAllRadarCaches : public CBaseAchievement
+{
+ virtual void Init()
+ {
+ static const char *szComponents[] =
+ {
+ "EP2_RADARCACHE_VAN", "EP2_RADARCACHE_SHACK", "EP2_RADARCACHE_RPG", "EP2_RADARCACHE_CAVE", "EP2_RADARCACHE_HANGING"
+ };
+ SetFlags( ACH_HAS_COMPONENTS | ACH_LISTEN_COMPONENT_EVENTS | ACH_SAVE_GLOBAL );
+ m_pszComponentNames = szComponents;
+ m_iNumComponents = ARRAYSIZE( szComponents );
+ SetComponentPrefix( "EP2_RADARCACHE" );
+ SetGameDirFilter( "ep2" );
+ SetGoal( m_iNumComponents );
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEp2FindAllRadarCaches, ACHIEVEMENT_EP2_FIND_ALLRADARCACHES, "EP2_FIND_ALLRADARCACHES", 10 );
+
+// Ep2-specific macro that sets game dir filter. We need this because Ep1/Ep2/... share a binary so we need runtime check against running game.
+#define DECLARE_EP2_MAP_EVENT_ACHIEVEMENT( achievementID, achievementName, iPointValue ) \
+ DECLARE_MAP_EVENT_ACHIEVEMENT_( achievementID, achievementName, "ep2", iPointValue, false )
+
+#define DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( achievementID, achievementName, iPointValue ) \
+ DECLARE_MAP_EVENT_ACHIEVEMENT_( achievementID, achievementName, "ep2", iPointValue, true )
+
+// achievements which are won by a map event firing once
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP2_BEAT_ANTLIONINVASION, "EP2_BEAT_ANTLIONINVASION", 5 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( ACHIEVEMENT_EP2_BEAT_ANTLIONGUARDS, "EP2_BEAT_ANTLIONGUARDS", 5 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( ACHIEVEMENT_EP2_BEAT_HUNTERAMBUSH, "EP2_BEAT_HUNTERAMBUSH", 10 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( ACHIEVEMENT_EP2_KILL_COMBINECANNON, "EP2_KILL_COMBINECANNON", 5 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP2_BEAT_RACEWITHDOG, "EP2_BEAT_RACEWITHDOG", 5 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP2_BEAT_ROCKETCACHEPUZZLE, "EP2_BEAT_ROCKETCACHEPUZZLE", 5 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( ACHIEVEMENT_EP2_BEAT_WHITEFORESTINN, "EP2_BEAT_WHITEFORESTINN", 10 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP2_PUT_ITEMINROCKET, "EP2_PUT_ITEMINROCKET", 30 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( ACHIEVEMENT_EP2_BEAT_MISSILESILO2, "EP2_BEAT_MISSILESILO2", 5 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT( ACHIEVEMENT_EP2_BEAT_OUTLAND12_NOBUILDINGSDESTROYED, "EP2_BEAT_OUTLAND12_NOBUILDINGSDESTROYED", 35 );
+DECLARE_EP2_MAP_EVENT_ACHIEVEMENT_HIDDEN( ACHIEVEMENT_EP2_BEAT_GAME, "EP2_BEAT_GAME", 20 );
+
+#endif // GAME_DLL
\ No newline at end of file diff --git a/mp/src/game/shared/episodic/achievements_epx.cpp b/mp/src/game/shared/episodic/achievements_epx.cpp new file mode 100644 index 00000000..91f8b395 --- /dev/null +++ b/mp/src/game/shared/episodic/achievements_epx.cpp @@ -0,0 +1,101 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+
+#include "cbase.h"
+
+#include "achievementmgr.h"
+#include "baseachievement.h"
+
+#ifdef GAME_DLL
+
+#include "basegrenade_shared.h"
+
+CAchievementMgr g_AchievementMgrEpisodic; // global achievement mgr for episodic
+
+class CAchievementEpXGetZombineGrenade : public CBaseAchievement
+{
+protected:
+ void Init()
+ {
+ SetFlags( ACH_SAVE_GLOBAL );
+ SetGoal( 1 );
+
+ if ( IsPC() )
+ {
+ // only in Ep2 for PC. (Shared across EPX for X360.)
+ SetGameDirFilter( "ep2" );
+ }
+ }
+
+ virtual void ListenForEvents()
+ {
+ ListenForGameEvent( "physgun_pickup" );
+ }
+
+ void FireGameEvent_Internal( IGameEvent *event )
+ {
+ if ( 0 == Q_strcmp( event->GetName(), "physgun_pickup" ) )
+ {
+ // was the object picked up a frag grenade?
+ CBaseEntity *pEntityPickedUp = UTIL_EntityByIndex( event->GetInt( "entindex" ) );
+ if ( pEntityPickedUp && pEntityPickedUp->ClassMatches( "npc_grenade_frag" ) )
+ {
+ // get the grenade object
+ CBaseGrenade *pGrenade = dynamic_cast<CBaseGrenade *>( pEntityPickedUp );
+ if ( pGrenade )
+ {
+ // was the original thrower a zombine?
+ CBaseEntity *pOriginalThrower = pGrenade->GetOriginalThrower();
+ if ( pOriginalThrower && pOriginalThrower->ClassMatches( "npc_zombine" ) )
+ {
+ IncrementCount();
+ }
+ }
+ }
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEpXGetZombineGrenade, ACHIEVEMENT_EPX_GET_ZOMBINEGRENADE, "EPX_GET_ZOMBINEGRENADE", 5 );
+
+class CAchievementEpXKillZombiesWithFlares : public CBaseAchievement
+{
+protected:
+ void Init()
+ {
+ SetFlags( ACH_SAVE_WITH_GAME );
+ SetGoal( 15 );
+
+ if ( IsPC() )
+ {
+ // only in Ep1 for PC. (Shared across EPX for X360.)
+ SetGameDirFilter( "episodic" );
+ }
+ }
+
+ virtual void ListenForEvents()
+ {
+ ListenForGameEvent( "flare_ignite_npc" );
+ }
+
+ void FireGameEvent_Internal( IGameEvent *event )
+ {
+ if ( 0 == Q_strcmp( event->GetName(), "flare_ignite_npc" ) )
+ {
+ CBaseEntity *pEntityIgnited = UTIL_EntityByIndex( event->GetInt( "entindex" ) );
+ // was it a zombie that got set on fire?
+ if ( pEntityIgnited &&
+ ( ( pEntityIgnited->ClassMatches( "npc_zombie" ) ) || ( pEntityIgnited->ClassMatches( "npc_zombine" ) ) ||
+ ( pEntityIgnited->ClassMatches( "npc_fastzombie" ) ) || ( pEntityIgnited->ClassMatches( "npc_poisonzombie" ) ) ) )
+ {
+ IncrementCount();
+ }
+ }
+ }
+};
+DECLARE_ACHIEVEMENT( CAchievementEpXKillZombiesWithFlares, ACHIEVEMENT_EPX_KILL_ZOMBIES_WITHFLARES, "EPX_KILL_ZOMBIES_WITHFLARES", 5 );
+
+#endif // GAME_DLL
\ No newline at end of file diff --git a/mp/src/game/shared/episodic/npc_advisor_shared.h b/mp/src/game/shared/episodic/npc_advisor_shared.h new file mode 100644 index 00000000..481b3c23 --- /dev/null +++ b/mp/src/game/shared/episodic/npc_advisor_shared.h @@ -0,0 +1,32 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Shared data between client and server side npc_advisor classes.
+//
+// Catchphrase: "It's advising us!!!"
+//
+//=============================================================================//
+
+#ifndef NPC_ADVISOR_SHARED_H
+#define NPC_ADVISOR_SHARED_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Set this to 0 to disable the advisor's special AI behavior (all that object chucking),
+// which we did in Ep2 to make him a scripted creature.
+#define NPC_ADVISOR_HAS_BEHAVIOR 0
+
+#if NPC_ADVISOR_HAS_BEHAVIOR
+// Message ID constants used for communciation between client and server.
+enum
+{
+ ADVISOR_MSG_START_BEAM = 10,
+ ADVISOR_MSG_STOP_BEAM,
+ ADVISOR_MSG_STOP_ALL_BEAMS,
+ ADVISOR_MSG_START_ELIGHT,
+ ADVISOR_MSG_STOP_ELIGHT,
+};
+#endif
+
+#endif // NPC_ADVISOR_SHARED_H
|