many updates
This commit is contained in:
		
							parent
							
								
									d29f3fa2f1
								
							
						
					
					
						commit
						bd82e3947f
					
				@ -1,7 +1,7 @@
 | 
			
		||||
#pragma semicolon 1
 | 
			
		||||
#define DEBUG
 | 
			
		||||
#define PLUGIN_AUTHOR "jenz"
 | 
			
		||||
#define PLUGIN_VERSION "1.7"
 | 
			
		||||
#define PLUGIN_VERSION "1.8"
 | 
			
		||||
#define g_dLength 400
 | 
			
		||||
#define g_dIndex 65
 | 
			
		||||
#include <sourcemod>
 | 
			
		||||
@ -13,6 +13,7 @@
 | 
			
		||||
#include <cstrike>
 | 
			
		||||
#include <sdktools>
 | 
			
		||||
#include <sdkhooks>
 | 
			
		||||
#include <connect>
 | 
			
		||||
#include <outputinfo>
 | 
			
		||||
#pragma newdecls required
 | 
			
		||||
char g_cMapname[g_dLength];
 | 
			
		||||
@ -29,6 +30,7 @@ bool g_bDisplaySpecial;
 | 
			
		||||
bool g_bHumansAllowedTime[MAXPLAYERS + 1];
 | 
			
		||||
bool g_bhumans_finished[MAXPLAYERS + 1];
 | 
			
		||||
bool g_bHideTimer[MAXPLAYERS + 1];
 | 
			
		||||
int g_bAllowToLeave[MAXPLAYERS + 1];
 | 
			
		||||
bool g_bEventBool = false;
 | 
			
		||||
Handle g_hClientCookie = INVALID_HANDLE;
 | 
			
		||||
Database g_dDatabase;
 | 
			
		||||
@ -40,7 +42,7 @@ public Plugin myinfo =
 | 
			
		||||
{
 | 
			
		||||
	name = "UNLOZE_racetimer_css",
 | 
			
		||||
	author = PLUGIN_AUTHOR,
 | 
			
		||||
	description = "tracers times on race maps",
 | 
			
		||||
	description = "tracks times on race maps on ze",
 | 
			
		||||
	version = PLUGIN_VERSION,
 | 
			
		||||
	url = "www.unloze.com"
 | 
			
		||||
};
 | 
			
		||||
@ -50,34 +52,35 @@ public Plugin myinfo =
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void OnPluginStart()
 | 
			
		||||
{
 | 
			
		||||
	//cmds
 | 
			
		||||
	RegConsoleCmd("sm_toptime", cmd_timerCheckTop, "checking top 10");
 | 
			
		||||
	RegConsoleCmd("sm_mytime", cmd_timerCheckSelf, "checking your personal time");
 | 
			
		||||
	RegConsoleCmd("sm_stages", cmd_timerCheckStage, "Checking race stages");
 | 
			
		||||
	RegConsoleCmd("sm_hidetimer", cmd_hideTimerHUD, "Hides timer HUD");
 | 
			
		||||
	RegAdminCmd("sm_cleantime", Cmd_timeReset, ADMFLAG_GENERIC);
 | 
			
		||||
	//hooks
 | 
			
		||||
	HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
 | 
			
		||||
	HookEntityOutput("trigger_multiple", "OnTrigger", Trigger_Multiple);
 | 
			
		||||
        HookEntityOutput("trigger_multiple", "OnStartTouch", Trigger_Multiple);
 | 
			
		||||
        HookEntityOutput("trigger_teleport", "OnTrigger", trigger_teleport);
 | 
			
		||||
        HookEntityOutput("trigger_teleport", "OnStartTouch", trigger_teleport);
 | 
			
		||||
	//HUD
 | 
			
		||||
	hText = CreateHudSynchronizer();
 | 
			
		||||
	//cookies
 | 
			
		||||
	g_hClientCookie = RegClientCookie("hide_timer_cookie", "Hides the timer HUD", CookieAccess_Private);
 | 
			
		||||
	for (int i = MaxClients; i > 0; --i)
 | 
			
		||||
	{
 | 
			
		||||
		if (!AreClientCookiesCached(i))
 | 
			
		||||
			continue;
 | 
			
		||||
		OnClientCookiesCached(i);
 | 
			
		||||
	}
 | 
			
		||||
    //cmds
 | 
			
		||||
    RegConsoleCmd("sm_toptime", cmd_timerCheckTop, "checking top 10");
 | 
			
		||||
    RegConsoleCmd("sm_mytime", cmd_timerCheckSelf, "checking your personal time");
 | 
			
		||||
    RegConsoleCmd("sm_stages", cmd_timerCheckStage, "Checking race stages");
 | 
			
		||||
    RegConsoleCmd("sm_hidetimer", cmd_hideTimerHUD, "Hides timer HUD");
 | 
			
		||||
    RegAdminCmd("sm_cleantime", Cmd_timeReset, ADMFLAG_GENERIC);
 | 
			
		||||
    //hooks
 | 
			
		||||
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
 | 
			
		||||
    HookEntityOutput("trigger_multiple", "OnTrigger", Trigger_Multiple);
 | 
			
		||||
    HookEntityOutput("trigger_multiple", "OnStartTouch", Trigger_Multiple);
 | 
			
		||||
    HookEntityOutput("trigger_teleport", "OnTrigger", trigger_teleport);
 | 
			
		||||
    HookEntityOutput("trigger_teleport", "OnStartTouch", trigger_teleport);
 | 
			
		||||
    //HUD
 | 
			
		||||
    hText = CreateHudSynchronizer();
 | 
			
		||||
    //cookies
 | 
			
		||||
    g_hClientCookie = RegClientCookie("hide_timer_cookie", "Hides the timer HUD", CookieAccess_Private);
 | 
			
		||||
    for (int i = MaxClients; i > 0; --i)
 | 
			
		||||
    {
 | 
			
		||||
        if (!AreClientCookiesCached(i))
 | 
			
		||||
            continue;
 | 
			
		||||
        OnClientCookiesCached(i);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public void trigger_teleport(const char[] output, int entity_index, int client, float delay)
 | 
			
		||||
{
 | 
			
		||||
    if (IsValidEdict(entity_index) && IsValidClient(client)  && g_bHumansAllowedTime[client])
 | 
			
		||||
    if (IsValidEdict(entity_index) && IsValidClient(client) && g_bHumansAllowedTime[client])
 | 
			
		||||
	{
 | 
			
		||||
        //if its surf maps there most likely are needed teleports
 | 
			
		||||
		if (StrContains(g_cMapname, "surf", false) == -1)
 | 
			
		||||
		{
 | 
			
		||||
			g_bHumansAllowedTime[client] = false;
 | 
			
		||||
@ -94,12 +97,12 @@ public void Trigger_Multiple(const char[] output, int entity_index, int client,
 | 
			
		||||
{
 | 
			
		||||
    if (IsValidEdict(entity_index) && origin_command_check(entity_index) && IsValidClient(client) && g_bHumansAllowedTime[client])
 | 
			
		||||
    {
 | 
			
		||||
            if (StrContains(g_cMapname, "surf", false) == -1)
 | 
			
		||||
            {
 | 
			
		||||
                g_bHumansAllowedTime[client] = false;
 | 
			
		||||
                resetClientVectors(client);
 | 
			
		||||
                PrintToChat(client, "Disabled timer due to potential teleport abuse");
 | 
			
		||||
            }
 | 
			
		||||
        if (StrContains(g_cMapname, "surf", false) == -1)
 | 
			
		||||
        {
 | 
			
		||||
            g_bHumansAllowedTime[client] = false;
 | 
			
		||||
            resetClientVectors(client);
 | 
			
		||||
            PrintToChat(client, "Disabled timer due to potential teleport abuse");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -110,17 +113,17 @@ public bool origin_command_check(int entity_index)
 | 
			
		||||
        int count_starttouch = GetOutputCount(entity_index, "m_OnStartTouch");
 | 
			
		||||
        for     (int i = 0; i < count_trigger; i++)
 | 
			
		||||
        {
 | 
			
		||||
                char buffer[g_dLength];
 | 
			
		||||
                GetOutputParameter(entity_index, "m_OnTrigger", i, buffer, sizeof(buffer));
 | 
			
		||||
                if (StrContains(buffer, "origin", true) != -1)
 | 
			
		||||
                        return true;
 | 
			
		||||
            char buffer[g_dLength];
 | 
			
		||||
            GetOutputParameter(entity_index, "m_OnTrigger", i, buffer, sizeof(buffer));
 | 
			
		||||
            if (StrContains(buffer, "origin", true) != -1)
 | 
			
		||||
                return true;
 | 
			
		||||
        }
 | 
			
		||||
        for     (int i = 0; i < count_starttouch; i++)
 | 
			
		||||
        for(int i = 0; i < count_starttouch; i++)
 | 
			
		||||
        {
 | 
			
		||||
                char buffer[g_dLength];
 | 
			
		||||
                GetOutputParameter(entity_index, "m_OnStartTouch", i, buffer, sizeof(buffer));
 | 
			
		||||
                if (StrContains(buffer, "origin", true) != -1)
 | 
			
		||||
                        return true;
 | 
			
		||||
            char buffer[g_dLength];
 | 
			
		||||
            GetOutputParameter(entity_index, "m_OnStartTouch", i, buffer, sizeof(buffer));
 | 
			
		||||
            if (StrContains(buffer, "origin", true) != -1)
 | 
			
		||||
                return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
}
 | 
			
		||||
@ -130,41 +133,41 @@ public bool origin_command_check(int entity_index)
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void SQL_OnDatabaseConnect(Database db, const char[] error, any data)
 | 
			
		||||
{
 | 
			
		||||
	if(!db || strlen(error))
 | 
			
		||||
	{
 | 
			
		||||
		LogError("Database error: %s", error);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	g_dDatabase = db;
 | 
			
		||||
	//create tables
 | 
			
		||||
        char sQuery[g_dLength];
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `zetimer_table` (`steam_auth` VARCHAR(254) NOT NULL, `name` VARCHAR(254) NOT NULL, PRIMARY KEY (`steam_auth`))");
 | 
			
		||||
	g_dDatabase.Query(SQL_OnConnectFinished, sQuery, _, DBPrio_High);
 | 
			
		||||
    if(!db || strlen(error))
 | 
			
		||||
    {
 | 
			
		||||
        LogError("Database error: %s", error);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    g_dDatabase = db;
 | 
			
		||||
    //create tables
 | 
			
		||||
    char sQuery[g_dLength];
 | 
			
		||||
    Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `zetimer_table_new` (`steam_auth` VARCHAR(254) NOT NULL, `name` VARCHAR(254) NOT NULL, PRIMARY KEY (`steam_auth`))");
 | 
			
		||||
    g_dDatabase.Query(SQL_OnConnectFinished, sQuery, _, DBPrio_High);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public void SQL_OnConnectFinished(Database db, DBResultSet results, const char[] error, any data)
 | 
			
		||||
{
 | 
			
		||||
        if(!db || strlen(error))
 | 
			
		||||
        {
 | 
			
		||||
                LogError("Database error: %s", error);
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
	static Handle hHostName;
 | 
			
		||||
        if((hHostName = FindConVar("hostname")) == INVALID_HANDLE)
 | 
			
		||||
    if(!db || strlen(error))
 | 
			
		||||
    {
 | 
			
		||||
            LogError("Database error: %s", error);
 | 
			
		||||
            return;
 | 
			
		||||
        char line[g_dLength];
 | 
			
		||||
        GetConVarString(hHostName, line, sizeof(line));
 | 
			
		||||
        if (StrContains(line, "EVENT", false) > -1)
 | 
			
		||||
                g_bEventBool = true;
 | 
			
		||||
	else
 | 
			
		||||
		g_bEventBool = false;
 | 
			
		||||
        g_bDisplaySpecial = unloze_gBSpecialMapDisplay();
 | 
			
		||||
        GetCurrentMap(g_cMapname, sizeof(g_cMapname));
 | 
			
		||||
        startTimer();
 | 
			
		||||
    }
 | 
			
		||||
    static Handle hHostName;
 | 
			
		||||
    if((hHostName = FindConVar("hostname")) == INVALID_HANDLE)
 | 
			
		||||
        return;
 | 
			
		||||
    char line[g_dLength];
 | 
			
		||||
    GetConVarString(hHostName, line, sizeof(line));
 | 
			
		||||
    if (StrContains(line, "EVENT", false) > -1)
 | 
			
		||||
        g_bEventBool = true;
 | 
			
		||||
    else
 | 
			
		||||
        g_bEventBool = false;
 | 
			
		||||
    g_bDisplaySpecial = unloze_gBSpecialMapDisplay();
 | 
			
		||||
    GetCurrentMap(g_cMapname, sizeof(g_cMapname));
 | 
			
		||||
    startTimer();
 | 
			
		||||
 | 
			
		||||
	for(int i = 1; i <= MaxClients; i++)
 | 
			
		||||
		if (IsValidClient(i))
 | 
			
		||||
			OnClientPostAdminCheck(i);
 | 
			
		||||
    for(int i = 1; i <= MaxClients; i++)
 | 
			
		||||
        if (IsValidClient(i))
 | 
			
		||||
            OnClientPostAdminCheck(i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public void MYSQLCheckMapEntry()
 | 
			
		||||
@ -175,7 +178,7 @@ public void MYSQLCheckMapEntry()
 | 
			
		||||
        char l_cZoneIndexName[g_dIndex][g_dLength];
 | 
			
		||||
	if (l_iZoneCount == 1)
 | 
			
		||||
	{
 | 
			
		||||
		Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table` ADD COLUMN IF NOT EXISTS `%s` TEXT DEFAULT '0.000' NOT NULL", g_cMapname);
 | 
			
		||||
		Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` ADD COLUMN IF NOT EXISTS `%s` REAL DEFAULT 0.000 NOT NULL", g_cMapname);
 | 
			
		||||
		DataPack hDataPack = new DataPack();
 | 
			
		||||
        	hDataPack.WriteString(sQuery);
 | 
			
		||||
		g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
 | 
			
		||||
@ -187,7 +190,7 @@ public void MYSQLCheckMapEntry()
 | 
			
		||||
			if (IsCorrectZone(iterator, l_cZoneIndexName[iterator][g_dLength -1], "ZONE_PREFIX_RACE"))
 | 
			
		||||
			{
 | 
			
		||||
				l_iRaceCount++;
 | 
			
		||||
				Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table` ADD COLUMN IF NOT EXISTS `%sS%i` TEXT DEFAULT '0.000' NOT NULL", g_cMapname, l_iRaceCount);
 | 
			
		||||
				Format(sQuery, sizeof(sQuery), "ALTER TABLE `zetimer_table_new` ADD COLUMN IF NOT EXISTS `%sS%i` REAL DEFAULT 0.000 NOT NULL", g_cMapname, l_iRaceCount);
 | 
			
		||||
				DataPack hDataPack = new DataPack();
 | 
			
		||||
        			hDataPack.WriteString(sQuery);
 | 
			
		||||
				g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
 | 
			
		||||
@ -264,15 +267,16 @@ public void startTimer()
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
 | 
			
		||||
{
 | 
			
		||||
	int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
	if (!l_iZoneCount)
 | 
			
		||||
		return;
 | 
			
		||||
	for (int i = 1; i <= MaxClients; i++)
 | 
			
		||||
		if (IsValidClient(i) && !IsFakeClient(i))
 | 
			
		||||
		{
 | 
			
		||||
    int race_zone_count = GetTotalRaceZones();
 | 
			
		||||
    if (!race_zone_count)
 | 
			
		||||
        return;
 | 
			
		||||
    for (int i = 1; i <= MaxClients; i++)
 | 
			
		||||
        if (IsValidClient(i) && !IsFakeClient(i))
 | 
			
		||||
        {
 | 
			
		||||
            g_bhumans_finished[i] = false;
 | 
			
		||||
            resetClientVectors(i);
 | 
			
		||||
            if (l_iZoneCount != 1)
 | 
			
		||||
            g_bAllowToLeave[i] = 0;
 | 
			
		||||
            if (race_zone_count != 1)
 | 
			
		||||
                g_bHumansAllowedTime[i] = false;
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
@ -315,8 +319,10 @@ public void resetClient(int client)
 | 
			
		||||
    {
 | 
			
		||||
        g_iClientChecking[client] = 0; 
 | 
			
		||||
        g_bHumansAllowedTime[client] = false;
 | 
			
		||||
        g_bAllowToLeave[client] = 0;
 | 
			
		||||
        g_bhumans_finished[client] = false;
 | 
			
		||||
        resetClientVectors(client);
 | 
			
		||||
        g_fStartTime[client] = 0.0;
 | 
			
		||||
        player_stage[client] = 0;
 | 
			
		||||
        Format(g_csTime_record[client], sizeof(g_csTime_record[]), "0.000");
 | 
			
		||||
    }
 | 
			
		||||
@ -326,15 +332,17 @@ public void resetClient(int client)
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, int cmdnum, int tickcount, int seed, const int mouse[2])
 | 
			
		||||
{
 | 
			
		||||
	if (!IsValidClient(client) || !g_bHumansAllowedTime[client])
 | 
			
		||||
		return;
 | 
			
		||||
    if (!IsValidClient(client))
 | 
			
		||||
        return;
 | 
			
		||||
    if (!g_bHumansAllowedTime[client])
 | 
			
		||||
        return;
 | 
			
		||||
    //checks if event is going on
 | 
			
		||||
	if (g_bEventBool)
 | 
			
		||||
	{
 | 
			
		||||
		g_bHumansAllowedTime[client] = false;
 | 
			
		||||
		return;
 | 
			
		||||
	}	
 | 
			
		||||
	if (GetClientTeam(client) == CS_TEAM_CT && IsPlayerAlive(client))
 | 
			
		||||
    if (g_bEventBool)
 | 
			
		||||
    {
 | 
			
		||||
        g_bHumansAllowedTime[client] = false;
 | 
			
		||||
        return;
 | 
			
		||||
    }	
 | 
			
		||||
    if (GetClientTeam(client) == CS_TEAM_CT && IsPlayerAlive(client))
 | 
			
		||||
    {
 | 
			
		||||
        int frameCap = 11;
 | 
			
		||||
        if (g_bhumans_finished[client])
 | 
			
		||||
@ -348,12 +356,16 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float
 | 
			
		||||
            {
 | 
			
		||||
                g_bHumansAllowedTime[client] = false;
 | 
			
		||||
                g_bhumans_finished[client] = false;
 | 
			
		||||
                //called if teleported to some place far away or teleported from inside start zone to end zone
 | 
			
		||||
                CreateTimer(1.0, reset_permissions_for_leave, client);
 | 
			
		||||
                resetClientVectors(client);
 | 
			
		||||
                PrintToChat(client, "Disabled timer due to potential teleport abuse");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (g_bhumans_finished[client])
 | 
			
		||||
            {
 | 
			
		||||
                CreateTimer(1.0, reset_permissions_for_leave, client);
 | 
			
		||||
                resetClientVectors(client);
 | 
			
		||||
                g_bhumans_finished[client] = false;
 | 
			
		||||
                g_bHumansAllowedTime[client] = false;
 | 
			
		||||
                FinishedStageRaceZone(client);
 | 
			
		||||
@ -404,20 +416,21 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float
 | 
			
		||||
            {
 | 
			
		||||
                SetHudTextParams(0.35, 0.85, 0.1, 125, 255, 255, 85);
 | 
			
		||||
                float total_time = client_current_race_time(client);
 | 
			
		||||
                char sTime[32];
 | 
			
		||||
                FormatPlayerTime(total_time, sTime, sizeof(sTime), false, 1);
 | 
			
		||||
                ShowSyncHudText(client, hText, "%N Time: %s\nRecord: %s\nMap: %s\nCourse: %i", client, sTime, g_csTime_record[client], g_cMapname, player_stage[client]);
 | 
			
		||||
                if (total_time != -1.0)
 | 
			
		||||
                    ShowSyncHudText(client, hText, "%N Time: %06.3f\nRecord: %s\nMap: %s\nCourse: %i", client, total_time, g_csTime_record[client], g_cMapname, player_stage[client]);
 | 
			
		||||
            }
 | 
			
		||||
            g_iClientSpeedInterval[client]++;
 | 
			
		||||
        }
 | 
			
		||||
        g_iClientFrames[client]++;
 | 
			
		||||
    }
 | 
			
		||||
	return;
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public float client_current_race_time(int i_client)
 | 
			
		||||
{
 | 
			
		||||
	return GetEngineTime() - g_fStartTime[i_client];
 | 
			
		||||
    if (g_fStartTime[i_client] == 0.0)
 | 
			
		||||
        return -1.0;
 | 
			
		||||
    return GetEngineTime() - g_fStartTime[i_client];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -464,37 +477,67 @@ public bool checkClientOrigin(float oldVals[3], float newVals[3], int client)
 | 
			
		||||
public void unloze_zoneEntry(int client, char[] zone)
 | 
			
		||||
{
 | 
			
		||||
    int zoneIndex = RetrieveZoneIndex(zone);
 | 
			
		||||
    int race_zone_count = GetTotalRaceZones();
 | 
			
		||||
    if (!race_zone_count)
 | 
			
		||||
        return;
 | 
			
		||||
    int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
	
 | 
			
		||||
    if (GetClientTeam(client) == CS_TEAM_CT && g_bHumansAllowedTime[client])
 | 
			
		||||
    {
 | 
			
		||||
        if ((StrContains(zone, "ZONE_PREFIX_RACE") > -1) || StrEqual(zone, g_cSpecialMapEnd))
 | 
			
		||||
        {
 | 
			
		||||
            g_bHumansAllowedTime[client] = false;
 | 
			
		||||
            if (l_iZoneCount < 2)
 | 
			
		||||
                player_stage[client] = 0;
 | 
			
		||||
            if (player_stage[client] == (zoneIndex / 2) || l_iZoneCount < 2)
 | 
			
		||||
            {
 | 
			
		||||
                g_bHumansAllowedTime[client] = true;
 | 
			
		||||
                g_bAllowToLeave[client] = 1;
 | 
			
		||||
                g_bhumans_finished[client] = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public Action reset_permissions_for_leave(Handle timer, int i)
 | 
			
		||||
{
 | 
			
		||||
    if (IsValidClient(i))
 | 
			
		||||
    {
 | 
			
		||||
        //if you start the timer and run inside the start zone again there are 3 options:
 | 
			
		||||
        //you leave the zone normally by running out of it which is fine
 | 
			
		||||
        //you get teleported out of the zone to a certain distance away by something like afk teleport, in that case your timer gets disabled
 | 
			
		||||
        //due to detected teleport abuse
 | 
			
		||||
 | 
			
		||||
        //Third option is you get teleported out of spawn zone to a end zone which after triggering Entry forward triggers Leave forward again
 | 
			
		||||
        //Therefore we need a cooldown when teleporting from inside of start zone to an entry zone as Leave forward is called right after again
 | 
			
		||||
        //which is a errornous way of starting the timer from the end zone, by having a second delay we ensure its not a problem when teleported from spawn
 | 
			
		||||
        //to a random place thats not an entry zone as this is handled seemingly correctly by the teleport abuse detection. Meanwhile to stop the timer from
 | 
			
		||||
        //starting when teleported from spawn to an Entry zone we need a cooldown 
 | 
			
		||||
        g_bAllowToLeave[i] = 0;
 | 
			
		||||
    }
 | 
			
		||||
    return Plugin_Continue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
// Purpose:
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void unloze_zoneLeave(int client, char[] zone)
 | 
			
		||||
{
 | 
			
		||||
	//only maps with multiple zones need ZONE_PREFIX_START
 | 
			
		||||
	int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
	if (GetClientTeam(client) == CS_TEAM_CT)
 | 
			
		||||
    int race_zone_count = GetTotalRaceZones();
 | 
			
		||||
    if (!race_zone_count || g_bAllowToLeave[client])
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    if (GetClientTeam(client) == CS_TEAM_CT)
 | 
			
		||||
    {
 | 
			
		||||
        if ((StrContains(zone, "ZONE_PREFIX_START") > -1) || StrEqual(zone, g_cSpecialMapStart))
 | 
			
		||||
        {
 | 
			
		||||
            if (!l_iZoneCount)
 | 
			
		||||
            char sAuthID[32];
 | 
			
		||||
            GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), false);
 | 
			
		||||
            if (!SteamClientAuthenticated(sAuthID))
 | 
			
		||||
            {
 | 
			
		||||
                PrintToChat(client, "Not starting timer due to being listed as nosteamer");
 | 
			
		||||
                return;
 | 
			
		||||
            resetClientVectors(client);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            g_fStartTime[client] = GetEngineTime();
 | 
			
		||||
            float notRounded = float(RetrieveZoneIndex(zone));
 | 
			
		||||
            player_stage[client] = RoundToCeil(notRounded / 2);
 | 
			
		||||
@ -505,37 +548,6 @@ public void unloze_zoneLeave(int client, char[] zone)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stock void FormatPlayerTime(float Time, char[] result, int maxlength, bool showDash, int precision)
 | 
			
		||||
{
 | 
			
		||||
	if(Time <= 0.0 && showDash == true)
 | 
			
		||||
	{
 | 
			
		||||
		Format(result, maxlength, "-");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	int hours 	= RoundToFloor(Time/3600);
 | 
			
		||||
	Time         -= hours*3600;
 | 
			
		||||
	int minutes 	= RoundToFloor(Time/60);
 | 
			
		||||
	Time         -= minutes*60;
 | 
			
		||||
	float seconds = Time;
 | 
			
		||||
	
 | 
			
		||||
	char sPrecision[16];
 | 
			
		||||
	
 | 
			
		||||
	if(precision == 0)
 | 
			
		||||
		Format(sPrecision, sizeof(sPrecision), (hours > 0 || minutes > 0)?"%04.1f":"%.1f", seconds);
 | 
			
		||||
	else if(precision == 1)
 | 
			
		||||
		Format(sPrecision, sizeof(sPrecision), (hours > 0 || minutes > 0)?"%06.3f":"%.3f", seconds);
 | 
			
		||||
	else if(precision == 2)
 | 
			
		||||
		Format(sPrecision, sizeof(sPrecision), (hours > 0 || minutes > 0)?"%09.6f":"%.6f", seconds);
 | 
			
		||||
	
 | 
			
		||||
	if(hours > 0)
 | 
			
		||||
		Format(result, maxlength, "%d:%02d:%s", hours, minutes, sPrecision);
 | 
			
		||||
	else if(minutes > 0)
 | 
			
		||||
		Format(result, maxlength, "%d:%s", minutes, sPrecision);
 | 
			
		||||
	else
 | 
			
		||||
		Format(result, maxlength, "%s", sPrecision);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
// Purpose:
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -581,61 +593,64 @@ public int RetrieveZoneIndex(char[] zone)
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void FinishedStageRaceZone(int client)
 | 
			
		||||
{
 | 
			
		||||
	char sSID[g_dIndex];
 | 
			
		||||
        char sName[MAX_NAME_LENGTH];
 | 
			
		||||
        GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
			
		||||
        GetClientName(client, sName, sizeof(sName));
 | 
			
		||||
        int size2 = 2 * strlen(sName) + 1;
 | 
			
		||||
        char[] sEscapedName = new char[size2 + 1];
 | 
			
		||||
    char sSID[g_dIndex];
 | 
			
		||||
    char sName[MAX_NAME_LENGTH];
 | 
			
		||||
    GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
			
		||||
    GetClientName(client, sName, sizeof(sName));
 | 
			
		||||
    int size2 = 2 * strlen(sName) + 1;
 | 
			
		||||
    char[] sEscapedName = new char[size2 + 1];
 | 
			
		||||
 | 
			
		||||
        g_dDatabase.Escape(sName, sEscapedName, size2 + 1);
 | 
			
		||||
    g_dDatabase.Escape(sName, sEscapedName, size2 + 1);
 | 
			
		||||
 | 
			
		||||
        if (StrEqual(sSID, "STEAM_ID_STOP_IGNORING_RETVALS") || StrEqual(sSID, "STEAM_ID_PENDING"))
 | 
			
		||||
        {
 | 
			
		||||
                PrintToChat(client, "Your steam ID is not working, not updating timer");
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
    if (StrEqual(sSID, "STEAM_ID_STOP_IGNORING_RETVALS") || StrEqual(sSID, "STEAM_ID_PENDING"))
 | 
			
		||||
    {
 | 
			
		||||
        PrintToChat(client, "Your steam ID is not working, not updating timer");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
	float client_time = client_current_race_time(client);
 | 
			
		||||
        char sTime[32];
 | 
			
		||||
        FormatPlayerTime(client_time, sTime, sizeof(sTime), false, 1);
 | 
			
		||||
	if (l_iZoneCount > 1)
 | 
			
		||||
                CPrintToChat(client, "{green}[UNLOZE] Stage: %i", player_stage[client]);
 | 
			
		||||
        CPrintToChat(client, "{green}[UNLOZE] Client: %N Time: %s", client, sTime);
 | 
			
		||||
	int stage = player_stage[client];
 | 
			
		||||
	char sQuery[g_dLength];
 | 
			
		||||
	if (StrEqual(g_csTime_record[client], "0.000"))
 | 
			
		||||
	{
 | 
			
		||||
		CPrintToChat(client, "Your record: None yet\nCommand: !toptime !mytime !stages");
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		CPrintToChat(client, "Your record: %s\nCommand: !toptime !mytime !stages", g_csTime_record[client]);
 | 
			
		||||
	}
 | 
			
		||||
	if (l_iZoneCount < 2)
 | 
			
		||||
		Format(sQuery, sizeof(sQuery), "UPDATE `zetimer_table` SET `%s` = '%s', name = '%s' WHERE steam_auth = '%s'", g_cMapname, sTime, sEscapedName, sSID);
 | 
			
		||||
	else
 | 
			
		||||
		Format(sQuery, sizeof(sQuery), "UPDATE `zetimer_table` SET `%sS%i` = '%s', name = '%s' WHERE steam_auth = '%s'", g_cMapname, stage, sTime, sEscapedName, sSID);
 | 
			
		||||
	int generic_length = 32;
 | 
			
		||||
	char[][] sPart = new char[2][generic_length];
 | 
			
		||||
	float old_client_time = 0.0;
 | 
			
		||||
	if (StrContains(g_csTime_record[client], ":") != -1)
 | 
			
		||||
	{
 | 
			
		||||
		ExplodeString(g_csTime_record[client], ":", sPart, 2, generic_length);
 | 
			
		||||
		old_client_time = (StringToFloat(sPart[0]) * 60) + StringToFloat(sPart[1]);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		old_client_time = StringToFloat(g_csTime_record[client]);
 | 
			
		||||
	}
 | 
			
		||||
	if (client_time >= old_client_time && old_client_time > 0.0)
 | 
			
		||||
	{
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
        DataPack hDataPack = new DataPack();
 | 
			
		||||
        hDataPack.WriteString(sQuery);
 | 
			
		||||
        g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
 | 
			
		||||
    int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
    float client_time = client_current_race_time(client);
 | 
			
		||||
    if (client_time == -1.0)
 | 
			
		||||
    {
 | 
			
		||||
        //if client disconnected we dont want to cary timer over to other client
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    if (l_iZoneCount > 1)
 | 
			
		||||
        CPrintToChat(client, "{green}[UNLOZE] Stage: %i", player_stage[client]);
 | 
			
		||||
    CPrintToChat(client, "{green}[UNLOZE] Client: %N Time: %06.3f", client, client_time);
 | 
			
		||||
    int stage = player_stage[client];
 | 
			
		||||
    char sQuery[g_dLength];
 | 
			
		||||
    if (StrEqual(g_csTime_record[client], "0.000"))
 | 
			
		||||
    {
 | 
			
		||||
        CPrintToChat(client, "Your record: None yet\nCommand: !toptime !mytime !stages");
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        CPrintToChat(client, "Your record: %s\nCommand: !toptime !mytime !stages", g_csTime_record[client]);
 | 
			
		||||
    }
 | 
			
		||||
    if (l_iZoneCount < 2)
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "UPDATE `zetimer_table_new` SET `%s` = '%06.3f', name = '%s' WHERE steam_auth = '%s'", g_cMapname, client_time, sEscapedName, sSID);
 | 
			
		||||
    else
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "UPDATE `zetimer_table_new` SET `%sS%i` = '%06.3f', name = '%s' WHERE steam_auth = '%s'", g_cMapname, stage, client_time, sEscapedName, sSID);
 | 
			
		||||
    int generic_length = 32;
 | 
			
		||||
    char[][] sPart = new char[2][generic_length];
 | 
			
		||||
    float old_client_time = 0.0;
 | 
			
		||||
    if (StrContains(g_csTime_record[client], ":") != -1)
 | 
			
		||||
    {
 | 
			
		||||
        ExplodeString(g_csTime_record[client], ":", sPart, 2, generic_length);
 | 
			
		||||
        old_client_time = (StringToFloat(sPart[0]) * 60) + StringToFloat(sPart[1]);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        old_client_time = StringToFloat(g_csTime_record[client]);
 | 
			
		||||
    }
 | 
			
		||||
    if (client_time >= old_client_time && old_client_time > 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    DataPack hDataPack = new DataPack();
 | 
			
		||||
    hDataPack.WriteString(sQuery);
 | 
			
		||||
    g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
 | 
			
		||||
}
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
// Purpose: 
 | 
			
		||||
@ -646,9 +661,9 @@ public void mysql_get_player_time(int client, int stage)
 | 
			
		||||
	char steam_auth[g_dIndex];
 | 
			
		||||
	GetClientAuthId(client, AuthId_Steam2, steam_auth, sizeof(steam_auth));
 | 
			
		||||
	if (!stage)
 | 
			
		||||
		Format(query, sizeof(query), "SELECT `%s` FROM `zetimer_table` where steam_auth = '%s'", g_cMapname, steam_auth);
 | 
			
		||||
		Format(query, sizeof(query), "SELECT `%s` FROM `zetimer_table_new` where steam_auth = '%s'", g_cMapname, steam_auth);
 | 
			
		||||
	else
 | 
			
		||||
		Format(query, sizeof(query), "SELECT `%sS%i` FROM `zetimer_table` where steam_auth = '%s'", g_cMapname, stage, steam_auth);
 | 
			
		||||
		Format(query, sizeof(query), "SELECT `%sS%i` FROM `zetimer_table_new` where steam_auth = '%s'", g_cMapname, stage, steam_auth);
 | 
			
		||||
	DataPack hDataPack = new DataPack();
 | 
			
		||||
	hDataPack.WriteCell(GetClientSerial(client));
 | 
			
		||||
        hDataPack.WriteString(query);
 | 
			
		||||
@ -657,23 +672,23 @@ public void mysql_get_player_time(int client, int stage)
 | 
			
		||||
 | 
			
		||||
public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, DataPack data)
 | 
			
		||||
{
 | 
			
		||||
        ResetPack(data);
 | 
			
		||||
        int client_serial = data.ReadCell();
 | 
			
		||||
        if (!db || strlen(error))
 | 
			
		||||
        {
 | 
			
		||||
                char sQuery[g_dLength]; 
 | 
			
		||||
                data.ReadString(sQuery, sizeof(sQuery));
 | 
			
		||||
                LogError("Query error 1: %s", error);
 | 
			
		||||
                LogError("actual query: %s", sQuery);
 | 
			
		||||
		delete data;
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
	delete data;
 | 
			
		||||
        int client; 
 | 
			
		||||
        if ((client = GetClientFromSerial(client_serial)) == 0)
 | 
			
		||||
                return;
 | 
			
		||||
        if (results.RowCount && results.FetchRow())
 | 
			
		||||
                results.FetchString(0, g_csTime_record[client], sizeof(g_csTime_record[]));
 | 
			
		||||
    ResetPack(data);
 | 
			
		||||
    int client_serial = data.ReadCell();
 | 
			
		||||
    if (!db || strlen(error))
 | 
			
		||||
    {
 | 
			
		||||
        char sQuery[g_dLength]; 
 | 
			
		||||
        data.ReadString(sQuery, sizeof(sQuery));
 | 
			
		||||
        LogError("Query error 1: %s", error);
 | 
			
		||||
        LogError("actual query: %s", sQuery);
 | 
			
		||||
        delete data;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    delete data;
 | 
			
		||||
    int client; 
 | 
			
		||||
    if ((client = GetClientFromSerial(client_serial)) == 0)
 | 
			
		||||
        return;
 | 
			
		||||
    if (results.RowCount && results.FetchRow())
 | 
			
		||||
        results.FetchString(0, g_csTime_record[client], sizeof(g_csTime_record[]));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -697,30 +712,30 @@ public int GetTotalRaceZones()
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void insertPlayerMYSQL(int client)
 | 
			
		||||
{
 | 
			
		||||
	if (!IsValidClient(client))
 | 
			
		||||
		return;
 | 
			
		||||
	char sSID[g_dIndex];
 | 
			
		||||
        char sQuery[g_dLength];
 | 
			
		||||
        char sName[MAX_NAME_LENGTH];
 | 
			
		||||
        GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
			
		||||
        GetClientName(client, sName, sizeof(sName));
 | 
			
		||||
        int size2 = 2 * strlen(sName) + 1;
 | 
			
		||||
        char[] sEscapedName = new char[size2 + 1];
 | 
			
		||||
	if (!g_dDatabase)
 | 
			
		||||
	{
 | 
			
		||||
                Database.Connect(SQL_OnDatabaseConnect, "racetimercss");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
        g_dDatabase.Escape(sName, sEscapedName, size2 + 1);
 | 
			
		||||
	if (StrEqual(sSID, "STEAM_ID_STOP_IGNORING_RETVALS") || StrEqual(sSID, "STEAM_ID_PENDING"))
 | 
			
		||||
        {
 | 
			
		||||
                PrintToChat(client, "Your steam ID is not working, not updating timer");
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
	Format(sQuery, sizeof(sQuery), "INSERT INTO `zetimer_table` (`steam_auth`, `name`) VALUES ('%s', '%s') ON DUPLICATE KEY UPDATE `name` = '%s'", sSID, sEscapedName, sEscapedName);
 | 
			
		||||
	DataPack hDataPack = new DataPack();
 | 
			
		||||
        hDataPack.WriteString(sQuery);
 | 
			
		||||
        g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
 | 
			
		||||
    if (!IsValidClient(client))
 | 
			
		||||
        return;
 | 
			
		||||
    char sSID[g_dIndex];
 | 
			
		||||
    char sQuery[g_dLength];
 | 
			
		||||
    char sName[MAX_NAME_LENGTH];
 | 
			
		||||
    GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID));
 | 
			
		||||
    GetClientName(client, sName, sizeof(sName));
 | 
			
		||||
    int size2 = 2 * strlen(sName) + 1;
 | 
			
		||||
    char[] sEscapedName = new char[size2 + 1];
 | 
			
		||||
    if (!g_dDatabase)
 | 
			
		||||
    {
 | 
			
		||||
        Database.Connect(SQL_OnDatabaseConnect, "racetimercss");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    g_dDatabase.Escape(sName, sEscapedName, size2 + 1);
 | 
			
		||||
    if (StrEqual(sSID, "STEAM_ID_STOP_IGNORING_RETVALS") || StrEqual(sSID, "STEAM_ID_PENDING"))
 | 
			
		||||
    {
 | 
			
		||||
            PrintToChat(client, "Your steam ID is not working, not updating timer");
 | 
			
		||||
            return;
 | 
			
		||||
    }
 | 
			
		||||
    Format(sQuery, sizeof(sQuery), "INSERT INTO `zetimer_table_new` (`steam_auth`, `name`) VALUES ('%s', '%s') ON DUPLICATE KEY UPDATE `name` = '%s'", sSID, sEscapedName, sEscapedName);
 | 
			
		||||
    DataPack hDataPack = new DataPack();
 | 
			
		||||
    hDataPack.WriteString(sQuery);
 | 
			
		||||
    g_dDatabase.Query(SQL_FinishedQuery, sQuery, hDataPack, DBPrio_High);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -737,9 +752,9 @@ public void mysql_select_lowest_ordered(int client, int index, int length_increa
 | 
			
		||||
    int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
    char sQuery[g_dLength];
 | 
			
		||||
    if (l_iZoneCount < 2)
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "SELECT name, `%s` FROM `zetimer_table` WHERE LENGTH(`%s`) = (select min(LENGTH(`%s`) + %i) from unloze_racetimer_css.zetimer_table zt where `%s` != 0.000) and `%s` != 0.000 order by `%s` ASC LIMIT 10", g_cMapname, g_cMapname, g_cMapname, length_increase, g_cMapname, g_cMapname, g_cMapname);
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "select name, `%s` from `zetimer_table_new` where `%s` > 0 order by `%s` asc limit 10", g_cMapname, g_cMapname, g_cMapname);
 | 
			
		||||
    else
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "SELECT name, `%sS%i` FROM `zetimer_table` WHERE LENGTH(`%sS%i`) = (select min(LENGTH(`%sS%i`) + %i) from unloze_racetimer_css.zetimer_table zt where `%sS%i` != 0.000) and `%sS%i` != 0.000 order by `%sS%i` ASC LIMIT 10", g_cMapname, index, g_cMapname, index,  g_cMapname, index, length_increase, g_cMapname, index, g_cMapname, index, g_cMapname, index);
 | 
			
		||||
        Format(sQuery, sizeof(sQuery), "select name, `%sS%i` from `zetimer_table_new` where `%sS%i` > 0 order by `%sS%i` asc limit 10", g_cMapname, index, g_cMapname, index, g_cMapname, index);
 | 
			
		||||
    //LogMessage("sQuery: %s", sQuery);
 | 
			
		||||
    DataPack hDataPack = new DataPack();
 | 
			
		||||
    hDataPack.WriteCell(GetClientSerial(client));
 | 
			
		||||
@ -794,7 +809,6 @@ public void SQL_Select_Top_Callback(Database db, DBResultSet results, const char
 | 
			
		||||
    int iclient;
 | 
			
		||||
    if ((iclient = GetClientFromSerial(client_serial)) == 0)
 | 
			
		||||
        return;
 | 
			
		||||
    char sTime[g_dLength];
 | 
			
		||||
    //Player Name
 | 
			
		||||
    char[] g_cPlayerName = new char[MAX_NAME_LENGTH];
 | 
			
		||||
    char g_cContent[g_dLength];
 | 
			
		||||
@ -809,8 +823,8 @@ public void SQL_Select_Top_Callback(Database db, DBResultSet results, const char
 | 
			
		||||
        {
 | 
			
		||||
            l_iPosition++;
 | 
			
		||||
            results.FetchString(0, g_cPlayerName, MAX_NAME_LENGTH);
 | 
			
		||||
            results.FetchString(1, sTime, sizeof(sTime));
 | 
			
		||||
            Format(g_cContent, sizeof(g_cContent), "#%i: Time: %s - %s", l_iPosition, sTime, g_cPlayerName);
 | 
			
		||||
            float fTime = results.FetchFloat(1);
 | 
			
		||||
            Format(g_cContent, sizeof(g_cContent), "#%i: Time: %06.3f - %s", l_iPosition, fTime, g_cPlayerName);
 | 
			
		||||
            menu.AddItem("-1", g_cContent, ITEMDRAW_DISABLED);
 | 
			
		||||
        }
 | 
			
		||||
        delete results;
 | 
			
		||||
@ -967,9 +981,9 @@ public void deleteClientTime(char[] steam2, int stage)
 | 
			
		||||
	char l_cQuery[g_dLength];
 | 
			
		||||
	int l_iZoneCount = unloze_zoneCount();
 | 
			
		||||
	if (l_iZoneCount > 1)
 | 
			
		||||
		Format(l_cQuery, sizeof(l_cQuery), "UPDATE `zetimer_table` SET `%sS%i` = '0.000' WHERE steam_auth = '%s'", g_cMapname, stage, steam2);
 | 
			
		||||
		Format(l_cQuery, sizeof(l_cQuery), "UPDATE `zetimer_table_new` SET `%sS%i` = 0.000 WHERE steam_auth = '%s'", g_cMapname, stage, steam2);
 | 
			
		||||
	else
 | 
			
		||||
		Format(l_cQuery, sizeof(l_cQuery), "UPDATE `zetimer_table` SET `%s` = '0.000' WHERE steam_auth = '%s'", g_cMapname, steam2);
 | 
			
		||||
		Format(l_cQuery, sizeof(l_cQuery), "UPDATE `zetimer_table_new` SET `%s` = 0.000 WHERE steam_auth = '%s'", g_cMapname, steam2);
 | 
			
		||||
	DataPack hDataPack = new DataPack();
 | 
			
		||||
        hDataPack.WriteString(l_cQuery);
 | 
			
		||||
	g_dDatabase.Query(SQL_FinishedQuery, l_cQuery, hDataPack, DBPrio_High);
 | 
			
		||||
@ -990,7 +1004,7 @@ public void Checkself(int client)
 | 
			
		||||
	}
 | 
			
		||||
	if (l_iZoneCount < 2)
 | 
			
		||||
	{
 | 
			
		||||
		Format(l_cQuery, sizeof(l_cQuery), "SELECT name, `%s` FROM `zetimer_table` WHERE steam_auth = '%s'", g_cMapname, l_cSID);
 | 
			
		||||
		Format(l_cQuery, sizeof(l_cQuery), "SELECT name, `%s` FROM `zetimer_table_new` WHERE steam_auth = '%s'", g_cMapname, l_cSID);
 | 
			
		||||
		DataPack hDataPack = new DataPack();
 | 
			
		||||
		hDataPack.WriteCell(GetClientSerial(client));
 | 
			
		||||
        	hDataPack.WriteString(l_cQuery);
 | 
			
		||||
@ -1007,7 +1021,7 @@ public void CheckStageSelf(int client, int selection)
 | 
			
		||||
	char l_cQuery[g_dLength];
 | 
			
		||||
	char l_cSID[g_dIndex];
 | 
			
		||||
	GetClientAuthId(client, AuthId_Steam2, l_cSID, sizeof(l_cSID));
 | 
			
		||||
	Format(l_cQuery, sizeof(l_cQuery), "SELECT name, `%sS%i` FROM `zetimer_table` WHERE steam_auth = '%s'", g_cMapname, selection, l_cSID);
 | 
			
		||||
	Format(l_cQuery, sizeof(l_cQuery), "SELECT name, `%sS%i` FROM `zetimer_table_new` WHERE steam_auth = '%s'", g_cMapname, selection, l_cSID);
 | 
			
		||||
	DataPack hDataPack = new DataPack();
 | 
			
		||||
	hDataPack.WriteCell(GetClientSerial(client));
 | 
			
		||||
	hDataPack.WriteString(l_cQuery);
 | 
			
		||||
@ -1019,38 +1033,38 @@ public void CheckStageSelf(int client, int selection)
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
public void SQL_CheckSelf(Database db, DBResultSet results, const char[] error, DataPack data)
 | 
			
		||||
{
 | 
			
		||||
	ResetPack(data);
 | 
			
		||||
        int client_serial = data.ReadCell();
 | 
			
		||||
	if (!db || strlen(error))
 | 
			
		||||
    ResetPack(data);
 | 
			
		||||
    int client_serial = data.ReadCell();
 | 
			
		||||
    if (!db || strlen(error))
 | 
			
		||||
    {
 | 
			
		||||
        char sQuery[g_dLength];
 | 
			
		||||
        data.ReadString(sQuery, sizeof(sQuery));
 | 
			
		||||
        LogError("Query error 4: %s", error);   
 | 
			
		||||
        LogError("actual query: %s", sQuery);
 | 
			
		||||
        delete data;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    delete data;
 | 
			
		||||
    char l_cMessageContent[g_dLength];
 | 
			
		||||
    char[] l_cPlayerName = new char[MAX_NAME_LENGTH];
 | 
			
		||||
    int iclient;
 | 
			
		||||
    if ((iclient = GetClientFromSerial(client_serial)) == 0)
 | 
			
		||||
        return;
 | 
			
		||||
    if (results.RowCount && results.FetchRow())
 | 
			
		||||
    {
 | 
			
		||||
        results.FetchString(0, l_cPlayerName, MAX_NAME_LENGTH);
 | 
			
		||||
        float fTime = results.FetchFloat(1);
 | 
			
		||||
        if (fTime == 0.0)
 | 
			
		||||
        {
 | 
			
		||||
                char sQuery[g_dLength];
 | 
			
		||||
                data.ReadString(sQuery, sizeof(sQuery));
 | 
			
		||||
		LogError("Query error 4: %s", error);   
 | 
			
		||||
                LogError("actual query: %s", sQuery);
 | 
			
		||||
		delete data;
 | 
			
		||||
                return;
 | 
			
		||||
            CPrintToChat(iclient, "You have no time yet!");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
	delete data;
 | 
			
		||||
	char sTime[g_dLength];
 | 
			
		||||
        char l_cMessageContent[g_dLength];
 | 
			
		||||
        char[] l_cPlayerName = new char[MAX_NAME_LENGTH];
 | 
			
		||||
        int iclient;
 | 
			
		||||
	if ((iclient = GetClientFromSerial(client_serial)) == 0)
 | 
			
		||||
		return;
 | 
			
		||||
	if (results.RowCount && results.FetchRow())
 | 
			
		||||
	{
 | 
			
		||||
		results.FetchString(0, l_cPlayerName, MAX_NAME_LENGTH);
 | 
			
		||||
		results.FetchString(1, sTime, sizeof(sTime));
 | 
			
		||||
		if (StrEqual(sTime, "0.000", false))
 | 
			
		||||
                {
 | 
			
		||||
                        CPrintToChat(iclient, "You have no time yet!");
 | 
			
		||||
                        return;
 | 
			
		||||
                }
 | 
			
		||||
                Format(l_cMessageContent, sizeof(l_cMessageContent), "%s - %s", sTime, l_cPlayerName);
 | 
			
		||||
                CPrintToChat(iclient, "Your best time: %s", l_cMessageContent);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
                CPrintToChat(iclient, "You have no time yet!");
 | 
			
		||||
        fTime += 0.001;
 | 
			
		||||
        Format(l_cMessageContent, sizeof(l_cMessageContent), "%06.3f - %s", fTime, l_cPlayerName);
 | 
			
		||||
        CPrintToChat(iclient, "Your best time: %s", l_cMessageContent);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
        CPrintToChat(iclient, "You have no time yet!");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user