189 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #pragma semicolon 1
 | |
| 
 | |
| #define PLUGIN_AUTHOR "TRANSLUCENT"
 | |
| #define PLUGIN_VERSION "0.62wtf"
 | |
| #define MAXLENGTH_MESSAGE 256
 | |
| 
 | |
| #define STARTZONE 0
 | |
| #define ENDZONE 1
 | |
| 
 | |
| #define FRAMEINTERVAL 330
 | |
| #define REPLAYS_PATH "data/ctimer" // Path to where replays are stored
 | |
| #define BACKUP_REPLAYS
 | |
| #define MAXVELOCITY 280.0
 | |
| #define MAX_DIST 1536.0
 | |
| #define MAX_DIST_SQ MAX_DIST * MAX_DIST
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include <sdktools>
 | |
| #include <sdkhooks>
 | |
| #include <cstrike>
 | |
| #include <PlayerManager>
 | |
| 
 | |
| /* Global variables */
 | |
| enum
 | |
| {
 | |
|     RUNDATA_POSITION_X, 
 | |
| 	RUNDATA_POSITION_Y, 
 | |
| 	RUNDATA_POSITION_Z, 
 | |
| 	RUNDATA_PITCH, 
 | |
| 	RUNDATA_YAW, 
 | |
| 	RUNDATA_BUTTONS, 
 | |
| 	RUNDATA_IMPULSE, 
 | |
| 	RUNDATA_WEAPONID, 
 | |
| 	RUNDATA_MAX
 | |
| }
 | |
| 
 | |
| ///TIMER HANDLES
 | |
| Handle g_hDrawFullZone = INVALID_HANDLE;
 | |
| Handle g_hDrawZone = INVALID_HANDLE;
 | |
| Handle g_hHudLoop = INVALID_HANDLE;
 | |
| Handle g_hSideHudLoop = INVALID_HANDLE;
 | |
| 
 | |
| ///DATABASE
 | |
| Database g_hDatabase = null;
 | |
| 
 | |
| ///PLAYERS
 | |
| float g_fMapTime[MAXPLAYERS + 1];
 | |
| float g_fStartTime[MAXPLAYERS + 1];
 | |
| int g_iActivity[MAXPLAYERS + 1] = -1; //-1 - Inactive, 0 - Running, 1 - StartZone, 2 - EndZone
 | |
| 
 | |
| ///BOTS AND RECORDING
 | |
| //ArrayList g_arrayGhost;
 | |
| ArrayList g_arrayRun[MAXPLAYERS + 1]; //Record array
 | |
| //char g_sGhostNames[MAX_NAME_LENGTH];
 | |
| //int g_iGhost = -1;
 | |
| //int g_iGhostFrame = -1;
 | |
| //int g_fGhostVel = -1;
 | |
| float g_fTickrate;
 | |
| 
 | |
| ///ZONEMAP INFO
 | |
| int g_iSnapToClient = -1;
 | |
| bool g_bEditorComesFromMenu;
 | |
| float g_fStartOrigins[2][3];
 | |
| float g_fEndOrigins[2][3];
 | |
| int g_iEditor = -1;
 | |
| int g_iTriggerEnt[2] = -1;
 | |
| 
 | |
| ///MAP INFO
 | |
| bool g_bActive = false;
 | |
| int g_iTier = 1;
 | |
| int g_iMapID = -1;
 | |
| float g_fWrTime = -1.0;
 | |
| char g_sMapName[64];
 | |
| char g_sWrHolder[MAX_NAME_LENGTH];
 | |
| 
 | |
| ///OTHERS
 | |
| bool g_bLateLoad = false;
 | |
| int g_iBeam;
 | |
| ConVar g_hCvarLasers = null;
 | |
| bool g_bLasers = false;
 | |
| 
 | |
| // Offsets (netprops)
 | |
| int m_vecOrigin; // CBaseEntity::m_vecOrigin
 | |
| int m_hActiveWeapon; // CBaseCombatCharacter::m_hActiveWeapon
 | |
| 
 | |
| public Plugin myinfo = 
 | |
| {
 | |
| 	name = "Under Average Timer",
 | |
| 	author = PLUGIN_AUTHOR,
 | |
| 	description = "",
 | |
| 	version = PLUGIN_VERSION,
 | |
| 	url = ""
 | |
| };
 | |
| 
 | |
| public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
 | |
| {
 | |
| 	CreateNative("CTimer_Stop", Native_StopTime);
 | |
| 
 | |
| 	RegPluginLibrary("ctimer");
 | |
| 	
 | |
| 	g_bLateLoad = late;
 | |
| 	return APLRes_Success;
 | |
| }
 | |
| 
 | |
| public void OnPluginStart()
 | |
| {
 | |
| 	LoadTranslations("ctimer.phrases");
 | |
| 	
 | |
| 	HookEvent("round_start", Event_RoundStart);
 | |
| 	HookEvent("player_death", Event_PlayerDeath);
 | |
| 
 | |
| 	RegAdminCmd("sm_timeradmin", Command_TimerAdmin, ADMFLAG_CHEATS, "Your one stop for timer management");
 | |
| 	RegAdminCmd("sm_zones", Command_Zones, ADMFLAG_CHEATS, "Create zones");
 | |
| 	
 | |
| 	RegConsoleCmd("sm_stop", Command_Stop, "Stops your timer");
 | |
| 	RegConsoleCmd("sm_time", Command_Time, "Get a players time");
 | |
| 	RegConsoleCmd("sm_top", Command_Top, "Get a maps top times");
 | |
| 	RegConsoleCmd("sm_wr", Command_WR, "Get a maps best time");
 | |
| 	
 | |
| 	RegAdminCmd("sm_origins", Command_Origins, ADMFLAG_CHEATS);
 | |
| 	
 | |
| 	g_hCvarLasers = CreateConVar("ctimer_zone_lazers", "1", "Lazors", FCVAR_NONE, true, 0.0, true, 1.0);
 | |
| 	
 | |
| 	if(g_hCvarLasers != null)
 | |
| 	{
 | |
| 		g_hCvarLasers.AddChangeHook(OnLazorsChange);
 | |
| 	}
 | |
| 	
 | |
| 	g_hDrawFullZone = CreateTimer(0.2, DrawFullZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | |
| 	g_hDrawZone = CreateTimer(1.0, DrawZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | |
| 	g_hHudLoop = CreateTimer(0.2, HudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | |
| 	g_hSideHudLoop = CreateTimer(1.0, SideHudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 | |
| 	
 | |
| 	for (new i = 1; i <= MaxClients; i++)
 | |
| 	{
 | |
| 		g_arrayRun[i] = new ArrayList(RUNDATA_MAX);
 | |
| 	}
 | |
| 	
 | |
| 	m_vecOrigin = FindSendPropInfo("CBaseEntity", "m_vecOrigin");
 | |
| 	
 | |
| 	if (m_vecOrigin == -1)
 | |
| 	{
 | |
| 		SetFailState("Couldn't find CBaseEntity::m_vecOrigin");
 | |
| 	}
 | |
| 	if (m_vecOrigin == 0)
 | |
| 	{
 | |
| 		SetFailState("No offset available for CBaseEntity::m_vecOrigin");
 | |
| 	}
 | |
| 	
 | |
| 	m_hActiveWeapon = FindSendPropInfo("CBaseCombatCharacter", "m_hActiveWeapon");
 | |
| 	
 | |
| 	if (m_hActiveWeapon == -1)
 | |
| 	{
 | |
| 		SetFailState("Couldn't find CBaseCombatCharacter::m_hActiveWeapon");
 | |
| 	}
 | |
| 	if (m_hActiveWeapon == 0)
 | |
| 	{
 | |
| 		SetFailState("No offset available for CBaseCombatCharacter::m_hActiveWeapon");
 | |
| 	}
 | |
| 	
 | |
| 	//g_arrayGhost = new ArrayList(9, 0);
 | |
| 	
 | |
| 	g_fTickrate = (1.0 / GetTickInterval());
 | |
| 	
 | |
| 	EstablishConnection();
 | |
| }
 | |
| 
 | |
| #include "ctimer/actions.sp"
 | |
| #include "ctimer/bots.sp"
 | |
| #include "ctimer/commands.sp"
 | |
| #include "ctimer/menus.sp"
 | |
| #include "ctimer/timers.sp"
 | |
| #include "ctimer/utility.sp"
 | |
| #include "ctimer/sql.sp"
 | |
| #include "ctimer/zones.sp"
 | |
| 
 | |
| public Action Command_Origins(int client, int args)
 | |
| {
 | |
| 	PrintToChatAll("Start: %f|%f|%f %f|%f|%f", g_fStartOrigins[0][0], g_fStartOrigins[0][1], g_fStartOrigins[0][2], g_fEndOrigins[0][0], g_fEndOrigins[0][1], g_fEndOrigins[0][2]);
 | |
| 	PrintToChatAll("End: %f|%f|%f %f|%f|%f", g_fStartOrigins[1][0], g_fStartOrigins[1][1], g_fStartOrigins[1][2], g_fEndOrigins[1][0], g_fEndOrigins[1][1], g_fEndOrigins[1][2]);
 | |
| 	PrintToChatAll("MapID: %i", g_iMapID);
 | |
| 	PrintToChatAll("Active: %s", g_bActive ? "active":"inactive");
 | |
| 	PrintToChatAll("Tier: %i", g_iTier);
 | |
| 	PrintToChatAll("Wr: %.2f, %s", g_fWrTime, g_sWrHolder);
 | |
| 	PrintToChatAll("Speccount: %i", GetSpecCount(client));
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 |