2017-02-26 00:28:40 +01:00
# pragma semicolon 1
# pragma newdecls required
# include <sourcemod>
# include <FullUpdate>
# include <multicolors>
bool g_bThirdPerson [ MAXPLAYERS + 1 ] = { false , . . . } ;
// Spectator Movement modes (from smlib)
enum Obs_Mode
{
OBS_MODE_NONE = 0 , // not in spectator mode
OBS_MODE_DEATHCAM , // special mode for death cam animation
OBS_MODE_FREEZECAM , // zooms to a target, and freeze-frames on them
OBS_MODE_FIXED , // view from a fixed camera position
OBS_MODE_IN_EYE , // follow a player in first person view
OBS_MODE_CHASE , // follow a player in third person view
OBS_MODE_POI , // PASSTIME point of interest - game objective, big fight, anything interesting; added in the middle of the enum due to tons of hard-coded "<ROAMING" enum compares
OBS_MODE_ROAMING , // free roaming
NUM_OBSERVER_MODES
} ;
public Plugin myinfo =
{
2017-03-02 21:26:09 +01:00
name = " ThirdPerson " ,
2017-02-26 00:28:40 +01:00
author = " BotoX " ,
2017-03-02 21:26:09 +01:00
description = " Shitty thirdperson. " ,
2017-02-26 00:28:40 +01:00
version = " 1.0 "
}
public void OnPluginStart ( )
{
RegConsoleCmd ( " sm_tp " , Command_ThirdPerson , " Toggle thirdperson " ) ;
HookEvent ( " player_death " , Event_PlayerDeathPost , EventHookMode_Post ) ;
HookEvent ( " player_spawn " , Event_PlayerSpawnPost , EventHookMode_Post ) ;
}
public void OnClientConnected ( int client )
{
g_bThirdPerson [ client ] = false ;
}
public Action Command_ThirdPerson ( int client , int args )
{
if ( g_bThirdPerson [ client ] )
ThirdPersonOff ( client ) ;
else
ThirdPersonOn ( client ) ;
}
public void Event_PlayerDeathPost ( Event event , const char [ ] name , bool dontBroadcast )
{
int client = GetClientOfUserId ( event . GetInt ( " userid " ) ) ;
ThirdPersonOff ( client ) ;
}
public void Event_PlayerSpawnPost ( Event event , const char [ ] name , bool dontBroadcast )
{
int client = GetClientOfUserId ( event . GetInt ( " userid " ) ) ;
ThirdPersonOff ( client ) ;
}
void ThirdPersonOn ( int client )
{
if ( g_bThirdPerson [ client ] )
return ;
if ( ! IsPlayerAlive ( client ) )
return ;
SetEntPropEnt ( client , Prop_Send , " m_hObserverTarget " , 0 ) ;
SetEntProp ( client , Prop_Send , " m_iObserverMode " , OBS_MODE_DEATHCAM ) ;
SetEntProp ( client , Prop_Send , " m_bDrawViewmodel " , 0 ) ;
SetEntProp ( client , Prop_Send , " m_iFOV " , 120 ) ;
g_bThirdPerson [ client ] = true ;
CPrintToChat ( client , " \x03 [ThirdPerson] \x01 is {green}ON{default}. " ) ;
}
void ThirdPersonOff ( int client )
{
if ( ! g_bThirdPerson [ client ] )
return ;
SetEntPropEnt ( client , Prop_Send , " m_hObserverTarget " , - 1 ) ;
SetEntProp ( client , Prop_Send , " m_iObserverMode " , 0 ) ;
SetEntProp ( client , Prop_Send , " m_bDrawViewmodel " , 1 ) ;
SetEntProp ( client , Prop_Send , " m_iFOV " , 90 ) ;
ClientFullUpdate ( client ) ;
g_bThirdPerson [ client ] = false ;
CPrintToChat ( client , " \x03 [ThirdPerson] \x01 is {red}OFF{default}. " ) ;
}