Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 contributor

Users who have contributed to this file

544 lines (481 sloc) 17.6 KB
#if defined _stvmngr_included
#endinput
#endif
#define _stvmngr_included
// Some guidelines from the SDK about director camera shot durations
#define MIN_SHOT_LENGTH 4.0 // minimum time of a cut (seconds)
#define MAX_SHOT_LENGTH 8.0 // maximum time of a cut (seconds)
#define DEF_SHOT_LENGTH 6.0 // average time of a cut (seconds)
enum SourceTVBroadcastTarget {
// Send message to all spectators including proxies.
BTarget_Everyone = 0,
// Send message only to locally connected spectators.
BTarget_OnlyLocal
};
/**
* Get the current amount of running SourceTV instances.
* Can usually only be 1 at max except for CSGO, which can have 2.
*
* @return SourceTV instance number count.
*/
native int SourceTV_GetServerInstanceCount();
/**
* Select a SourceTV instance to operate the rest of the natives on.
* The first SourceTV to connect will always be selected by default.
* Most games only have 1 instance, so this might only be useful in CS:GO,
* which can have 2 instances running.
*
* @param instance The SourceTV instance number.
* @error Invalid SourceTV instance number.
*/
native void SourceTV_SelectServerInstance(int instance);
/**
* Get the index of the currently selected SourceTV server instance.
*
* @return Index of the selected SourceTV instance number or -1 if no SourceTV enabled.
*/
native int SourceTV_GetSelectedServerInstance();
/**
* Called when a SourceTV is initialized.
*
* @param instance The SourceTV instance number.
*/
forward void SourceTV_OnServerStart(int instance);
/**
* Called when a SourceTV server instance is shutdown.
*
* @param instance The SourceTV instance number.
*/
forward void SourceTV_OnServerShutdown(int instance);
/**
* Returns whether this SourceTV instance is currently broadcasting.
*
* @return True if SourceTV instance is broadcasting, false otherwise.
*/
native bool SourceTV_IsActive();
/**
* Returns whether this SourceTV instance is a master proxy or relay.
*
* @return True if SourceTV instance is master proxy, false otherwise.
*/
native bool SourceTV_IsMasterProxy();
/**
* Get the local ip of the SourceTV server.
*
* @param ip Buffer to save IP in.
* @param maxlen Maximum length of the buffer.
* @return True if IP written, false otherwise.
*/
native bool SourceTV_GetServerIP(char[] ip, int maxlen);
/**
* Get the UDP port of the SourceTV server.
* This is the port clients use to connect.
*
* @return SourceTV server UDP port.
*/
native int SourceTV_GetServerPort();
/**
* Get the client index of the SourceTV bot.
*
* @return Client index of SourceTV bot.
*/
native int SourceTV_GetBotIndex();
/**
* Get stats of the local SourceTV instance.
* Returns only the stats of this server, don't include relays.
*
* You have to subtract the proxy count from the spectator count to
* get the real spectator count, because the proxies take one spectator slot
* on the SourceTV server.
*
* @param proxies Number of SourceTV proxies connected to this server.
* @param slots Number of maximal available SourceTV spectator slots.
* @param specs Number of currently connected SourceTV spectators.
* @return True if stats were retrieved, false otherwise.
*/
native bool SourceTV_GetLocalStats(int &proxies, int &slots, int &specs);
/**
* Get stats of this SourceTV network.
* Only the current Master Proxy can give accurate numbers.
* Relay proxies only get updates from the master from time to time.
*
* You have to subtract the proxy count from the spectator count to
* get the real spectator count, because the proxies take one spectator slot
* on the SourceTV server.
*
* @param proxies Number of SourceTV proxies connected to all servers.
* @param slots Number of maximal available SourceTV spectator slots on all servers.
* @param specs Number of currently connected SourceTV spectators on all servers.
* @return True if stats were retrieved, false otherwise.
*/
native bool SourceTV_GetGlobalStats(int &proxies, int &slots, int &specs);
/**
* Current broadcasted tick. Can be lower than the actual server tick,
* due to delay.
*
* @return Current broadcast tick from director.
*/
native int SourceTV_GetBroadcastTick();
/**
* Returns current delay in seconds. (tv_delay)
*
* @return Current delay in seconds.
*/
native float SourceTV_GetDelay();
/**
* Print a center message to all SourceTV spectators for ~2 seconds.
* Like the tv_msg command.
*
* @param target Send only to directly connected spectators or proxies as well?
* @param format The format string.
* @param ... Variable number of format string arguments.
* @return True if message was sent, false otherwise.
*/
native bool SourceTV_BroadcastScreenMessage(SourceTVBroadcastTarget target, const char[] format, any ...);
/**
* Prints text to the console of all connected SourceTV spectators.
*
* @param format The format string.
* @param ... Variable number of format string arguments.
* @return True if message was sent, false otherwise.
*/
native bool SourceTV_BroadcastConsoleMessage(const char[] format, any ...);
/**
* Print a chat message to all SourceTV spectators.
*
* @param target Send only to directly connected spectators or proxies as well?
* @param format The format string.
* @param ... Variable number of format string arguments.
* @return True if message was sent, false otherwise.
*/
native bool SourceTV_BroadcastChatMessage(SourceTVBroadcastTarget target, const char[] format, any ...);
/********************************************************************************
* SourceTV Director control
********************************************************************************/
/**
* Get entity index of current view entity (PVS) of the
* auto director. Check the view origin, if this returns 0.
* @see SourceTV_GetViewOrigin
*
* @return Current view entity index, 0 if coords are used.
*/
native int SourceTV_GetViewEntity();
/**
* Get origin of current view point if view entity is 0.
*
* @param view Vector to store view position in.
*/
native void SourceTV_GetViewOrigin(float view[3]);
/**
* Force the auto director to show a certain camera angle.
*
* @param pos The camera position.
* @param angle The camera angles (roll is unused).
* @param iTarget Target entity to keep the camera pointed towards or 0 to use the angle.
* @param fow Field of view of the camera.
* @param fDuration Length of the shot in seconds.
* @return True if shot was created, false otherwise.
* @error Invalid target entity.
*/
native bool SourceTV_ForceFixedCameraShot(float[] pos, float[] angle, int iTarget, float fov, float fDuration = DEF_SHOT_LENGTH);
/**
* Force the auto director to show a player.
*
* @param iTarget1 The target player to follow.
* @param iTarget2 The other player to keep the camera centered on or 0 to follow target1's view.
* @param distance Distance of camera behind the player.
* @param phi Up/down offset of view point.
* @param theta Left/right offset of view point.
* @param bInEye Show as in-eye camera of the target. Ignores all the other third-person settings.
* @param fDuration Length of the shot in seconds.
* @return True if shot was created, false otherwise.
* @error Invalid target1 or target2 entity
*/
native bool SourceTV_ForceChaseCameraShot(int iTarget1, int iTarget2, int distance, int phi, int theta, bool bInEye, float fDuration = DEF_SHOT_LENGTH);
/********************************************************************************
* SourceTV demo recording
********************************************************************************/
/**
* Starts recording a SourceTV demo into the specified file.
* Only the master proxy can record demos.
*
* @param sFilename Filename of the demo file.
* @return True if recording started, false otherwise.
*/
native bool SourceTV_StartRecording(const char[] sFilename);
/**
* Stops recording a SourceTV demo.
*
* @return True if recording stopped, false otherwise.
*/
native bool SourceTV_StopRecording();
/**
* Returns whether the SourceTV server is currently recording a demo.
*
* @return True if currently recording a SourceTV demo, false otherwise.
*/
native bool SourceTV_IsRecording();
/**
* Get the filename of the currently recorded demo.
*
* @param sFilename Buffer to store the filename in.
* @param maxlen Maximal length of the buffer.
* @return True if filename was written, false otherwise.
*/
native bool SourceTV_GetDemoFileName(char[] sFilename, int maxlen);
/**
* Get current tick in the demofile.
*
* @return Current recording tick in the demofle.
*/
native int SourceTV_GetRecordingTick();
/**
* Print text to the demo console.
* This will show up when playing the demo back in the client console later.
*
* @param format The format string.
* @param ... Variable number of format string arguments.
*
* @return True if message was printed, false otherwise.
*/
native bool SourceTV_PrintToDemoConsole(const char[] format, any ...);
/**
* Called when a SourceTV demo starts being recorded.
* @see SourceTV_SelectServerInstance
*
* @param instance The SourceTV instance of server recording.
* @param filename The filename of the demo.
*/
forward void SourceTV_OnStartRecording(int instance, const char[] filename);
/**
* Called when a SourceTV demo stops being recorded.
* @see SourceTV_SelectServerInstance
*
* @param instance The SourceTV instance of server recording.
* @param filename The filename of the demo.
* @param recordingtick The tick length of the demo.
*/
forward void SourceTV_OnStopRecording(int instance, const char[] filename, int recordingtick);
/********************************************************************************
* SourceTV spectator client handling
********************************************************************************/
/**
* Get currently connected SourcetV spectator count.
*
* @return SourceTV spectator count.
*/
native int SourceTV_GetSpectatorCount();
/**
* Get the current client limit.
*
* @return Maximal possible spectator count.
*/
native int SourceTV_GetMaxClients();
/**
* Get number of client slots (used & unused)
* Client slots are only allocated when they're needed.
* Use this when iterating spectators.
*
* @return Number of client slots (used & unused)
*/
native int SourceTV_GetClientCount();
/**
* Returns if the spectator is connected.
*
* @param client The spectator client index.
* @return True if client is connected, false otherwise.
* @error Invalid client index.
*/
native bool SourceTV_IsClientConnected(int client);
/**
* Returns if the spectator is a relay proxy.
*
* @param client The spectator client index.
* @return True if client is a proxy, false otherwise.
* @error Invalid client index.
*/
native bool SourceTV_IsClientProxy(int client);
/**
* Get the name of a SourceTV spectator client.
*
* @param client The spectator client index.
* @param name Buffer for the client name.
* @param maxlen Maximal length of the buffer.
* @error Invalid client index or not connected.
*/
native void SourceTV_GetClientName(int client, char[] name, int maxlen);
/**
* Get the IP of a SourceTV spectator client.
*
* @param client The spectator client index.
* @param name Buffer for the client ip.
* @param maxlen Maximal length of the buffer.
* @error Invalid client index or not connected.
*/
native void SourceTV_GetClientIP(int client, char[] ip, int maxlen);
/**
* Get the password of a SourceTV spectator client.
* The password the client tried to connect with.
* Ignores changes from the SourceTV_OnSpectatorPreConnect forward.
*
* @param client The spectator client index.
* @param name Buffer for the client ip.
* @param maxlen Maximal length of the buffer.
* @error Invalid client index or not connected.
*/
native void SourceTV_GetClientPassword(int client, char[] password, int maxlen);
/**
* Kick a SourceTV spectator client.
*
* @param client The spectator client index.
* @param sReason The kick reason.
* @error Invalid client index or not connected.
*/
native void SourceTV_KickClient(int client, const char[] sReason);
/**
* Print a message to a single client's chat.
*
* @param client The spectator client index.
* @param format The format string.
* @param ... Variable number of format string arguments.
* @error Invalid client index or not connected.
*/
native void SourceTV_PrintToChat(int client, const char[] format, any ...);
/**
* Print a message to a single client's console.
*
* @param client The spectator client index.
* @param format The format string.
* @param ... Variable number of format string arguments.
* @error Invalid client index or not connected.
*/
native void SourceTV_PrintToConsole(int client, const char[] format, any ...);
/**
* Change the stream title only for one spectator.
* This is like tv_title but for a single client.
* Gets overwritten when tv_title gets changed.
*
* @param client The spectator client index.
* @param format The format string.
* @param ... Variable number of format string arguments.
* @error Invalid client index or not connected.
*/
native void SourceTV_SetClientTVTitle(int client, const char[] format, any ...);
/**
* Called when a spectator wants to connect to the SourceTV server.
* This is called before any other validation has happened.
* Similar to the OnClientPreConnectEx forward in the Connect extension by asherkin.
*
* @param name The player name.
* @param password The password the client used to connect. Can be overwritten.
* @param ip The ip address of the client.
* @param rejectReason Buffer to write the reject reason to, if you want to reject the client from connecting.
* @return True to allow the client to connect, false to reject him with the given reason.
*/
forward bool SourceTV_OnSpectatorPreConnect(const char[] name, char password[255], const char[] ip, char rejectReason[255]);
/**
* Called when a spectator client connected to the SourceTV server.
*
* @param client The spectator client index.
*/
forward void SourceTV_OnSpectatorConnected(int client);
/**
* Called when a spectator client is about to disconnect.
*
* @param client The spectator client index.
* @param reason The reason for the disconnect. Can be overwritten.
*/
forward void SourceTV_OnSpectatorDisconnect(int client, char reason[255]);
/**
* Called after a spectator client disconnected.
*
* @param client The spectator client index.
* @param reason The reason for the disconnect.
*/
forward void SourceTV_OnSpectatorDisconnected(int client, const char reason[255]);
/**
* Called when a spectator client is entering the game.
*
* @param client The spectator client index.
*/
forward void SourceTV_OnSpectatorPutInServer(int client);
/**
* Called before a spectator's chat message is sent.
* The message and chat group can be changed.
* Only called for directly connected clients - no proxies.
*
* @param client The spectator client index.
* @param message The message the client typed.
* @param chatgroup The chatgroup this message is sent to (tv_chatgroup).
* @return >= Plugin_Handled to block the message, Plugin_Continue to let it through.
*/
forward Action SourceTV_OnSpectatorChatMessage(int client, char message[255], char chatgroup[255]);
/**
* Called after a spectator wrote a chat message.
* Only called for directly connected clients - no proxies.
*
* @param client The spectator client index.
* @param message The message the client typed.
* @param chatgroup The chatgroup this message is sent to (tv_chatgroup).
*/
forward void SourceTV_OnSpectatorChatMessage_Post(int client, const char[] message, const char[] chatgroup);
/**
* Do not edit below this line!
*/
public Extension __ext_stvmngr =
{
name = "SourceTV Manager",
file = "sourcetvmanager.ext",
#if defined AUTOLOAD_EXTENSIONS
autoload = 1,
#else
autoload = 0,
#endif
#if defined REQUIRE_EXTENSIONS
required = 1,
#else
required = 0,
#endif
};
#if !defined REQUIRE_EXTENSIONS
public void __ext_stvmngr_SetNTVOptional()
{
MarkNativeAsOptional("SourceTV_GetServerInstanceCount");
MarkNativeAsOptional("SourceTV_SelectServerInstance");
MarkNativeAsOptional("SourceTV_GetSelectedServerInstance");
MarkNativeAsOptional("SourceTV_IsActive");
MarkNativeAsOptional("SourceTV_IsMasterProxy");
MarkNativeAsOptional("SourceTV_GetServerIP");
MarkNativeAsOptional("SourceTV_GetServerPort");
MarkNativeAsOptional("SourceTV_GetBotIndex");
MarkNativeAsOptional("SourceTV_GetLocalStats");
MarkNativeAsOptional("SourceTV_GetGlobalStats");
MarkNativeAsOptional("SourceTV_GetBroadcastTick");
MarkNativeAsOptional("SourceTV_GetDelay");
MarkNativeAsOptional("SourceTV_BroadcastScreenMessage");
MarkNativeAsOptional("SourceTV_BroadcastConsoleMessage");
MarkNativeAsOptional("SourceTV_BroadcastChatMessage");
MarkNativeAsOptional("SourceTV_GetViewEntity");
MarkNativeAsOptional("SourceTV_GetViewOrigin");
MarkNativeAsOptional("SourceTV_ForceFixedCameraShot");
MarkNativeAsOptional("SourceTV_ForceChaseCameraShot");
MarkNativeAsOptional("SourceTV_StartRecording");
MarkNativeAsOptional("SourceTV_StopRecording");
MarkNativeAsOptional("SourceTV_IsRecording");
MarkNativeAsOptional("SourceTV_GetDemoFileName");
MarkNativeAsOptional("SourceTV_GetRecordingTick");
MarkNativeAsOptional("SourceTV_PrintToDemoConsole");
MarkNativeAsOptional("SourceTV_GetSpectatorCount");
MarkNativeAsOptional("SourceTV_GetMaxClients");
MarkNativeAsOptional("SourceTV_GetClientCount");
MarkNativeAsOptional("SourceTV_IsClientConnected");
MarkNativeAsOptional("SourceTV_IsClientProxy");
MarkNativeAsOptional("SourceTV_GetClientName");
MarkNativeAsOptional("SourceTV_GetClientIP");
MarkNativeAsOptional("SourceTV_GetClientPassword");
MarkNativeAsOptional("SourceTV_KickClient");
MarkNativeAsOptional("SourceTV_PrintToChat");
MarkNativeAsOptional("SourceTV_PrintToConsole");
MarkNativeAsOptional("SourceTV_SetClientTVTitle");
}
#endif
You can’t perform that action at this time.