#define SPEAK_NORMAL 0
#define SPEAK_MUTED 1
#define SPEAK_ALL 2
#define SPEAK_LISTENALL 4

#define CAMERA_NONE 0
#define CAMERA_3RDPERSON 1
#define CAMERA_UPLEFT 2
#define CAMERA_TOPDOWN 3

#define BLOCK_NOT 0
#define BLOCK_ONCE 1
#define BLOCK_SET 2

// Int
enum {
	EV_INT_gamestate,
	EV_INT_oldbuttons,
	EV_INT_groupinfo,
	EV_INT_iuser1,
	EV_INT_iuser2,
	EV_INT_iuser3,
	EV_INT_iuser4,
	EV_INT_weaponanim,
	EV_INT_pushmsec,
	EV_INT_bInDuck,
	EV_INT_flTimeStepSound,
	EV_INT_flSwimTime,
	EV_INT_flDuckTime,
	EV_INT_iStepLeft,
	EV_INT_movetype,
	EV_INT_solid,
	EV_INT_skin,			
	EV_INT_body,
	EV_INT_effects,
	EV_INT_light_level,
	EV_INT_sequence,
	EV_INT_gaitsequence,
	EV_INT_modelindex,
	EV_INT_playerclass,
	EV_INT_waterlevel,
	EV_INT_watertype,
	EV_INT_spawnflags,
	EV_INT_flags,
	EV_INT_colormap,
	EV_INT_team,
	EV_INT_fixangle,
	EV_INT_weapons,
	EV_INT_rendermode,
	EV_INT_renderfx,
	EV_INT_button,
	EV_INT_impulse,
	EV_INT_deadflag,
};

// Float
enum {
	EV_FL_impacttime,
	EV_FL_starttime,
	EV_FL_idealpitch,
	EV_FL_pitch_speed,
	EV_FL_ideal_yaw,
	EV_FL_yaw_speed,
	EV_FL_ltime,
	EV_FL_nextthink,
	EV_FL_gravity,
	EV_FL_friction,
	EV_FL_frame,
	EV_FL_animtime,
	EV_FL_framerate,
	EV_FL_health,
	EV_FL_frags,
	EV_FL_takedamage,
	EV_FL_max_health,
	EV_FL_teleport_time,
	EV_FL_armortype,
	EV_FL_armorvalue,
	EV_FL_dmg_take,
	EV_FL_dmg_save,
	EV_FL_dmg,
	EV_FL_dmgtime,
	EV_FL_speed,
	EV_FL_air_finished,
	EV_FL_pain_finished,
	EV_FL_radsuit_finished,
	EV_FL_scale,
	EV_FL_renderamt,
	EV_FL_maxspeed,
	EV_FL_fov,
	EV_FL_flFallVelocity,
	EV_FL_fuser1,
	EV_FL_fuser2,
	EV_FL_fuser3,
	EV_FL_fuser4,
};

// Vector
enum {
	EV_VEC_origin,
	EV_VEC_oldorigin,
	EV_VEC_velocity,
	EV_VEC_basevelocity,
	EV_VEC_clbasevelocity,
	EV_VEC_movedir,
	EV_VEC_angles,
	EV_VEC_avelocity,
	EV_VEC_punchangle,
	EV_VEC_v_angle,
	EV_VEC_endpos,
	EV_VEC_startpos,
	EV_VEC_absmin,
	EV_VEC_absmax,
	EV_VEC_mins,
	EV_VEC_maxs,
	EV_VEC_size,
	EV_VEC_rendercolor,
	EV_VEC_view_ofs,
	EV_VEC_vuser1,
	EV_VEC_vuser2,
	EV_VEC_vuser3,
	EV_VEC_vuser4,
};

// Edict
enum {
	EV_ENT_chain,
	EV_ENT_dmg_inflictor,
	EV_ENT_enemy,
	EV_ENT_aiment,
	EV_ENT_owner,
	EV_ENT_groundentity,
	EV_ENT_pContainingEntity,
	EV_ENT_euser1,
	EV_ENT_euser2,
	EV_ENT_euser3,
	EV_ENT_euser4,
};

// String
enum {
	EV_SZ_classname,
	EV_SZ_globalname,
	EV_SZ_model,
	EV_SZ_target,
	EV_SZ_targetname,
	EV_SZ_netname,
	EV_SZ_message,
	EV_SZ_noise,
	EV_SZ_noise1,
	EV_SZ_noise2,
	EV_SZ_noise3,
	EV_SZ_viewmodel,
	EV_SZ_weaponmodel,
};

// Byte
enum {
	EV_BYTE_controller1,
	EV_BYTE_controller2,
	EV_BYTE_controller3,
	EV_BYTE_controller4,
	EV_BYTE_blending1,
	EV_BYTE_blending2,
};

native CS_SetModel(index, const Model[]);	//Set Model (CS). Model would be "vip" for the vip model.
native CS_ClearModel(index);			//Clear Model (CS)
native TFC_SetModel(index, const Model[], const Skin[]);	//Set Model (TFC)
native TFC_ClearModel(index);			//Clear Model (TFC)
native AttachView(iIndex, iTargetIndex);	//Set Player's View to entity iTargetIndex.
native SetView(iIndex, ViewType);		//Set Player's View Mode.
native SetSpeak(iIndex, iSpeakFlags);	//Set Player's Speak Flags.
native SetLights(const Lighting[]);		//Set map lighting, #OFF to disable.

// Set things in an entities Entvars Struct. See HLSDK or look at examples to determine what different variables do.
native Entvars_Get_Int(iIndex, iVariable);
native Entvars_Set_Int(iIndex, iVariable, iNewValue);
native Float:Entvars_Get_Float(iIndex, iVariable); 
native Entvars_Set_Float(iIndex, iVariable, Float:fNewValue);
native Entvars_Get_Vector(iIndex, iVariable, Float:vRetVector[3]);
native Entvars_Set_Vector(iIndex, iVariable, Float:vNewVector[3]);
native Entvars_Get_Edict(iIndex, iVariable);
native Entvars_Set_Edict(iIndex, iVariable, iNewIndex);
native Entvars_Get_String(iIndex, iVariable, szReturnValue[], iReturnLen); 
native Entvars_Set_String(iIndex, iVariable, szNewValue[]);
native Entvars_Get_Byte(iIndex, iVariable);
native Entvars_Set_Byte(iIndex, iVariable, iNewValue);

forward vexd_pfntouch(pToucher, pTouched);	//Called when 2 entities touch.

native RadiusDamage(Float:fExplodeAt[3], iDamageMultiplier, iRadiusMultiplier);	//Hurts/Kills players in a sphere, like an explosion, Multiplier determines damage.
native VelocityByAim(iIndex, iVelocity, Float:vRetValue[3]);		//Gives you a velocity in the direction a player is looking, iVelocity is the multiplier.
native PointContents(Float:fCheckAt[3]);	//Will return the contents of a point (inside map? in sky? outside map? etc.)

native CreateEntity(szClassname[]);		// Creates an entity, will return the index of the created entity. ClassName must be valid.
native DispatchKeyValue(iIndex, szKey[], szValue[]);	//Dispatch a KeyValuePair, used for initalizing entities when a map spawns them.
native DispatchSpawn(iIndex);				//Runs the GameDLL's DispatchSpawn for an entity, I think it's used with DispatchKeyValue.
native ENT_SetModel(iIndex, szModel[]);		//Sets the model of an Entity.
native ENT_SetOrigin(iIndex, Float:fNewOrigin[3]);	//Proper origin setting, keeps updated with Half-Life engine.
native FindEntity(iIndex, szValue[]);	//Find an entity in the world, will return -1 if nothing is found
native RemoveEntity(iIndex);	//Remove an entity from the world

// Trace a line from Start(X, Y, Z) to End(X, Y, Z), will return the point hit in vReturn[3]
// Will return an entindex if an entity is hit.
native TraceLn(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]);

// Traces a line, and returns the normal to the plane hit in vReturn.
// Returns 0 if theres no normal.
native TraceNormal(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]);

// Changes a Vector to an Angle vector.
native VecToAngles(Float:fVector[3], Float:vReturn[3]);

// Gets the length of a vector (float[3]).
native Float:VecLength(Float:vVector[3]);

// Gets the distance between 2 vectors (float[3]).
native Float:VecDist(Float:vVector[3], Float:vVector2[3]);

// Set/Get What Engine Messages Are Blocked.
native MessageBlock(iMessage, iMessageFlags);
native GetMessageBlock(iMessage);