Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef NPCEVENT_H
#define NPCEVENT_H
#ifdef _WIN32
#pragma once
#endif
#include "eventlist.h"
class CBaseAnimating;
struct animevent_t { #ifdef CLIENT_DLL
// see mstudioevent_for_client_server_t comment below
union { unsigned short _event_highword; unsigned short event_newsystem; }; unsigned short _event_lowword; #else
// see mstudioevent_for_client_server_t comment below
unsigned short _event_highword; union { unsigned short _event_lowword; unsigned short event_newsystem; }; #endif
const char *options; float cycle; float eventtime; int type; CBaseAnimating *pSource; bool m_bHandledByScript;
// see mstudioevent_for_client_server_t comment below
int Event_OldSystem( void ) const { return *static_cast< const int* >( static_cast< const void* >( &_event_highword ) ); } void Event_OldSystem( int nEvent ) { *static_cast< int* >( static_cast< void* >( &_event_highword ) ) = nEvent; } int Event( void ) const { if ( type & AE_TYPE_NEWEVENTSYSTEM ) return event_newsystem;
return Event_OldSystem(); } void Event( int nEvent ) { if ( type & AE_TYPE_NEWEVENTSYSTEM ) { event_newsystem = nEvent; } else { Event_OldSystem( nEvent ); } } }; #define EVENT_SPECIFIC 0
#define EVENT_SCRIPTED 1000 // see scriptevent.h
#define EVENT_SHARED 2000
#define EVENT_WEAPON 3000
#define EVENT_CLIENT 5000
#define NPC_EVENT_BODYDROP_LIGHT 2001
#define NPC_EVENT_BODYDROP_HEAVY 2002
#define NPC_EVENT_SWISHSOUND 2010
#define NPC_EVENT_180TURN 2020
#define NPC_EVENT_ITEM_PICKUP 2040
#define NPC_EVENT_WEAPON_DROP 2041
#define NPC_EVENT_WEAPON_SET_SEQUENCE_NAME 2042
#define NPC_EVENT_WEAPON_SET_SEQUENCE_NUMBER 2043
#define NPC_EVENT_WEAPON_SET_ACTIVITY 2044
#define NPC_EVENT_LEFTFOOT 2050
#define NPC_EVENT_RIGHTFOOT 2051
#define NPC_EVENT_OPEN_DOOR 2060
// !! DON'T CHANGE TO ORDER OF THESE. THEY ARE HARD CODED IN THE WEAPON QC FILES (YUCK!) !!
#define EVENT_WEAPON_MELEE_HIT 3001
#define EVENT_WEAPON_SMG1 3002
#define EVENT_WEAPON_MELEE_SWISH 3003
#define EVENT_WEAPON_SHOTGUN_FIRE 3004
#define EVENT_WEAPON_THROW 3005
#define EVENT_WEAPON_AR1 3006
#define EVENT_WEAPON_AR2 3007
#define EVENT_WEAPON_HMG1 3008
#define EVENT_WEAPON_SMG2 3009
#define EVENT_WEAPON_MISSILE_FIRE 3010
#define EVENT_WEAPON_SNIPER_RIFLE_FIRE 3011
#define EVENT_WEAPON_AR2_GRENADE 3012
#define EVENT_WEAPON_THROW2 3013
#define EVENT_WEAPON_PISTOL_FIRE 3014
#define EVENT_WEAPON_RELOAD 3015
#define EVENT_WEAPON_THROW3 3016
#define EVENT_WEAPON_RELOAD_SOUND 3017 // Use this + EVENT_WEAPON_RELOAD_FILL_CLIP to prevent shooting during the reload animation
#define EVENT_WEAPON_RELOAD_FILL_CLIP 3018
#define EVENT_WEAPON_SMG1_BURST1 3101 // first round in a 3-round burst
#define EVENT_WEAPON_SMG1_BURSTN 3102 // 2, 3 rounds
#define EVENT_WEAPON_AR2_ALTFIRE 3103
#define EVENT_WEAPON_SEQUENCE_FINISHED 3900
// NOTE: MUST BE THE LAST WEAPON EVENT -- ONLY WEAPON EVENTS BETWEEN EVENT_WEAPON AND THIS
#define EVENT_WEAPON_LAST 3999
// Because the client and server have a shared memory space for event data,
// but use different indexes for the event (servers cache them all upfront,
// while client creates them as sequences fire) we're going to store the server
// index in the low word and the client index in the high word.
//
// studio.h is a public header, so we'll use this matching struct to do the
// conversion and not force us to macro all the code that checks the event member.
// This struct's data MUST match mstudioevent_t
//
// BUT events that use the old event system use the entire dword which will always
// match between client and server. Instead of wrapping everything in if checks,
// for ( type & AE_TYPE_NEWEVENTSYSTEM ) we use the Event accessors to set/get
// while doing the check under the hood.
//
// -Jeep
struct mstudioevent_for_client_server_t { DECLARE_BYTESWAP_DATADESC(); float cycle; #ifdef CLIENT_DLL
union { // Client shares with the high word
unsigned short _event_highword; unsigned short event_newsystem; }; unsigned short _event_lowword; // Placeholder for the low word
#else
unsigned short _event_highword; // Placeholder for the high word
union { // Server shares with the low word
unsigned short _event_lowword; unsigned short event_newsystem; }; #endif
int type; inline const char * pszOptions( void ) const { return options; } char options[64];
int szeventindex; inline char * const pszEventName( void ) const { return ((char *)this) + szeventindex; }
// For setting and getting through Event, check the AE_TYPE_NEWEVENTSYSTEM flag to decide
// if we should set/get just the short used by the client/server or use the whole int.
int Event_OldSystem( void ) const { return *static_cast< const int* >( static_cast< const void* >( &_event_highword ) ); } void Event_OldSystem( int nEvent ) { *static_cast< int* >( static_cast< void* >( &_event_highword ) ) = nEvent; } int Event( void ) const { if ( type & AE_TYPE_NEWEVENTSYSTEM ) return event_newsystem;
return Event_OldSystem(); } void Event( int nEvent ) { if ( type & AE_TYPE_NEWEVENTSYSTEM ) { event_newsystem = nEvent; } else { Event_OldSystem( nEvent ); } } };
#define mstudioevent_t mstudioevent_for_client_server_t
#endif // NPCEVENT_H
|